diff --git a/web/src/components/AssistantChat/ComposerButtons.tsx b/web/src/components/AssistantChat/ComposerButtons.tsx index 0bb8484b..ee1be5f0 100644 --- a/web/src/components/AssistantChat/ComposerButtons.tsx +++ b/web/src/components/AssistantChat/ComposerButtons.tsx @@ -6,7 +6,25 @@ import { ScheduleTimePicker } from './ScheduleTimePicker' import type { PendingSchedule } from './ScheduleTimePicker' import { useFue } from '@/lib/use-fue' import { FueCallout, FueDot } from '@/components/Fue' -import { useRef, useState } from 'react' +import { Children, isValidElement, useRef, useState, type ReactElement, type ReactNode } from 'react' +import { useComposerToolbarLayout, type ComposerToolbarItemId, type ComposerToolbarLayout } from '@/hooks/useComposerToolbarLayout' + +function ToolbarItemSlot(props: { item: ComposerToolbarItemId; children: ReactNode }) { + return <>{props.children} +} + +function OrderedToolbarItems(props: { layout: ComposerToolbarLayout; children: ReactNode }) { + const slots = Children.toArray(props.children).filter( + (child): child is ReactElement<{ item: ComposerToolbarItemId; children: ReactNode }> => isValidElement(child), + ) + const slotsByItem = new Map(slots.map((slot) => [slot.props.item, slot])) + const renderItems = (items: ComposerToolbarItemId[]) => items.map((item) => slotsByItem.get(item) ?? null) + + if (props.layout.mode === 'split') { + return <>{renderItems(props.layout.left)}