From 579f4730c8e5d6abcf267cf81eae2372e29abb7f Mon Sep 17 00:00:00 2001 From: Zoe <62722391+juls0730@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:45:14 -0600 Subject: [PATCH] feat: add dropdown for token details --- TODO.md | 2 +- app/components/Message/Agent/index.vue | 20 ++- .../Message/TokenDetailsDropdown.vue | 130 ++++++++++++++++++ app/composables/useTokenDropdown.ts | 30 ++++ app/pages/agent/[id]/topic/[topicId].vue | 2 + bun.lock | 1 - 6 files changed, 180 insertions(+), 5 deletions(-) create mode 100644 app/components/Message/TokenDetailsDropdown.vue create mode 100644 app/composables/useTokenDropdown.ts diff --git a/TODO.md b/TODO.md index d1d14ca..f37675b 100644 --- a/TODO.md +++ b/TODO.md @@ -1,7 +1,7 @@ # Todo - [x] Standardize on one icon set rather than 4 (lmao) -- [-] Make dropdowns a singleton component (work in progress) +- [x] Make dropdowns a singleton component (work in progress) - [ ] Make the sidebar better :kekdoggo:. It's annoying to manage across routes - [x] Make topics manually renameable - [ ] Improve latex rendering, make single line equations work _well_, and likely make it configurable diff --git a/app/components/Message/Agent/index.vue b/app/components/Message/Agent/index.vue index 39ce1bf..4c814e8 100644 --- a/app/components/Message/Agent/index.vue +++ b/app/components/Message/Agent/index.vue @@ -5,9 +5,22 @@ import Text from './Text.vue'; import Tool from './Tool/index.vue'; import type { MessageEntity } from '~/composables/useChat'; -defineProps<{ +const props = defineProps<{ message: MessageEntity }>(); + +const triggerRef = ref(null); + +const { open, close, isOpen } = useTokenDropdown(); + +const toggleTokenDropdown = () => { + if (isOpen.value) { + close(); + return; + } + + open(props.message.generation!, triggerRef.value!); +}; diff --git a/app/components/Message/TokenDetailsDropdown.vue b/app/components/Message/TokenDetailsDropdown.vue new file mode 100644 index 0000000..e95dcb5 --- /dev/null +++ b/app/components/Message/TokenDetailsDropdown.vue @@ -0,0 +1,130 @@ + + + diff --git a/app/composables/useTokenDropdown.ts b/app/composables/useTokenDropdown.ts new file mode 100644 index 0000000..d72af98 --- /dev/null +++ b/app/composables/useTokenDropdown.ts @@ -0,0 +1,30 @@ +import type { Entity } from '@triplit/client'; +import type { schema } from '#triplit/schema'; + +type Generation = Entity; + +export const useTokenDropdown = () => { + const isOpen = useState('token-dropdown:open', () => false); + const activeGeneration = useState('token-dropdown:generation', () => null); + const triggerElement = useState('token-dropdown:trigger', () => null); + + const open = (generation: Generation, trigger: HTMLElement) => { + console.log("open", generation, trigger); + + activeGeneration.value = generation; + triggerElement.value = trigger; + isOpen.value = true; + }; + + const close = () => { + isOpen.value = false; + }; + + return { + isOpen: readonly(isOpen), + activeGeneration: readonly(activeGeneration), + triggerElement: readonly(triggerElement), + open, + close, + }; +}; diff --git a/app/pages/agent/[id]/topic/[topicId].vue b/app/pages/agent/[id]/topic/[topicId].vue index ae5ad8e..22429b7 100644 --- a/app/pages/agent/[id]/topic/[topicId].vue +++ b/app/pages/agent/[id]/topic/[topicId].vue @@ -417,4 +417,6 @@ onUnmounted(() => { + + diff --git a/bun.lock b/bun.lock index b0f6f91..d820691 100644 --- a/bun.lock +++ b/bun.lock @@ -1,6 +1,5 @@ { "lockfileVersion": 1, - "configVersion": 1, "workspaces": { "": { "name": "veridian",