@assistant-ui/react 0.0.28 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. package/README.md +1 -1
  2. package/dist/AssistantRuntime-BM_jVV3g.d.mts +23 -0
  3. package/dist/AssistantRuntime-CBMSAJqH.d.mts +23 -0
  4. package/dist/AssistantRuntime-C_BvM7ZT.d.ts +23 -0
  5. package/dist/AssistantRuntime-DELpXWfG.d.ts +23 -0
  6. package/dist/ModelConfigTypes-B9UY4zxv.d.mts +55 -0
  7. package/dist/ModelConfigTypes-B9UY4zxv.d.ts +55 -0
  8. package/dist/ModelConfigTypes-BF5HxVrH.d.mts +55 -0
  9. package/dist/ModelConfigTypes-BF5HxVrH.d.ts +55 -0
  10. package/dist/ModelConfigTypes-Cf3yjaDu.d.mts +55 -0
  11. package/dist/ModelConfigTypes-Cf3yjaDu.d.ts +55 -0
  12. package/dist/chunk-3XZUKECF.mjs +207 -0
  13. package/dist/chunk-3XZUKECF.mjs.map +1 -0
  14. package/dist/chunk-4DQ2CIAD.mjs +69 -0
  15. package/dist/chunk-4DQ2CIAD.mjs.map +1 -0
  16. package/dist/chunk-5YONSDN4.mjs +200 -0
  17. package/dist/chunk-5YONSDN4.mjs.map +1 -0
  18. package/dist/chunk-CY4TTHR7.mjs +76 -0
  19. package/dist/chunk-CY4TTHR7.mjs.map +1 -0
  20. package/dist/chunk-DKAWDNW5.mjs +22 -0
  21. package/dist/chunk-DKAWDNW5.mjs.map +1 -0
  22. package/dist/chunk-GQKH2ADD.mjs +165 -0
  23. package/dist/chunk-GQKH2ADD.mjs.map +1 -0
  24. package/dist/chunk-J5LGTIGS.mjs +10 -0
  25. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  26. package/dist/chunk-X4HBDEFP.mjs +30 -0
  27. package/dist/chunk-X4HBDEFP.mjs.map +1 -0
  28. package/dist/experimental.d.mts +120 -0
  29. package/dist/experimental.d.ts +120 -0
  30. package/dist/experimental.js +407 -0
  31. package/dist/experimental.js.map +1 -0
  32. package/dist/experimental.mjs +144 -0
  33. package/dist/experimental.mjs.map +1 -0
  34. package/dist/index.d.mts +6 -266
  35. package/dist/index.d.ts +6 -266
  36. package/dist/index.js +77 -730
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.mjs +62 -786
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/internal-dlLjX30u.d.mts +75 -0
  41. package/dist/internal-dlLjX30u.d.ts +75 -0
  42. package/dist/internal.d.mts +25 -0
  43. package/dist/internal.d.ts +25 -0
  44. package/dist/internal.js +225 -0
  45. package/dist/internal.js.map +1 -0
  46. package/dist/internal.mjs +12 -0
  47. package/dist/internal.mjs.map +1 -0
  48. package/package.json +25 -5
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/actions/useCopyMessage.tsx","../src/context/MessageContext.ts","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/actions/useReloadMessage.tsx","../src/context/ThreadContext.ts","../src/actions/useBeginMessageEdit.tsx","../src/actions/useGoToNextBranch.tsx","../src/actions/useGoToPreviousBranch.tsx","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/MessageComposer.ts","../src/context/stores/BaseComposer.ts","../src/context/ComposerContext.ts","../src/primitives/composer/ComposerIf.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/primitives/composer/index.ts","../src/primitives/composer/ComposerRoot.tsx","../src/primitives/composer/ComposerInput.tsx","../src/primitives/composer/ComposerSend.tsx","../src/primitives/composer/ComposerCancel.tsx","../src/primitives/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/context/providers/ContentPartProvider.tsx","../src/context/ContentPartContext.ts","../src/primitives/contentPart/ContentPartInProgressIndicator.tsx","../src/primitives/message/MessageContent.tsx","../src/primitives/message/MessageInProgress.tsx","../src/primitives/branchPicker/index.ts","../src/utils/createActionButton.tsx","../src/primitives/branchPicker/BranchPickerNext.tsx","../src/primitives/branchPicker/BranchPickerPrevious.tsx","../src/primitives/branchPicker/BranchPickerCount.tsx","../src/primitives/branchPicker/BranchPickerNumber.tsx","../src/primitives/branchPicker/BranchPickerRoot.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/contentPart/index.ts","../../react-ai-sdk/src/rsc/useVercelRSCRuntime.tsx","../../react-ai-sdk/src/rsc/VercelRSCRuntime.tsx","../../react-ai-sdk/src/rsc/useVercelRSCSync.tsx","../../react-ai-sdk/src/utils/ThreadMessageConverter.ts","../../react-ai-sdk/src/rsc/getVercelRSCMessage.tsx","../../react-ai-sdk/src/ui/use-chat/useVercelUseChatRuntime.tsx","../../react-ai-sdk/src/ui/VercelAIRuntime.tsx","../../react-ai-sdk/src/ui/getVercelAIMessage.tsx","../../react-ai-sdk/src/ui/utils/sliceMessagesUntil.tsx","../../react-ai-sdk/src/ui/utils/useVercelAIComposerSync.tsx","../../react-ai-sdk/src/ui/utils/useVercelAIThreadSync.tsx","../../react-ai-sdk/src/ui/use-assistant/useVercelUseAssistantRuntime.tsx","../src/runtime/utils/idUtils.tsx","../src/runtime/utils/MessageRepository.tsx","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/ThreadProvider.tsx","../src/context/stores/Composer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx","../src/runtime/vercel-deprecated/VercelAIAssistantProvider.tsx","../src/runtime/vercel-deprecated/VercelRSCAssistantProvider.tsx","../src/runtime/local/useLocalRuntime.tsx","../src/runtime/local/LocalRuntime.tsx"],"sourcesContent":["export * from \"./actions\";\nexport * from \"./primitives\";\nexport * from \"./runtime\";\n\n// deprecated, remove in 0.1.0\nexport {\n VercelAIAssistantProvider,\n type VercelAIAssistantProviderProps,\n VercelRSCAssistantProvider,\n type VercelRSCAssistantProviderProps,\n} from \"./runtime/vercel-deprecated\";\n\n/**\n * @deprecated This type was renamed to `VercelRSCMessage`. Please use that import. Will be removed in 0.1.0.\n */\nexport type { VercelRSCMessage as RSCMessage } from \"@assistant-ui/react-ai-sdk\";\n\n// experimental\nexport type {\n ThreadMessage,\n AssistantMessage,\n UserMessage,\n AppendMessage,\n AssistantContentPart,\n UserContentPart,\n AppendContentPart,\n TextContentPart,\n ImageContentPart as unstable_ImageContentPart,\n ToolCallContentPart as unstable_ToolCallContentPart,\n UIContentPart as unstable_UIContentPart,\n} from \"./utils/AssistantTypes\";\n\nexport { useLocalRuntime as unstable_useLocalRuntime } from \"./runtime/local/useLocalRuntime\";\nexport type {\n ChatModelAdapter as unstable_ChatModelAdapter,\n ChatModelRunOptions as unstable_ChatModelRunOptions,\n} from \"./runtime/local/ChatModelAdapter\";\n\nexport { AssistantRuntimeProvider } from \"./context/providers/AssistantRuntimeProvider\";\nexport {\n // context\n useThreadContext as unstable_useThreadContext,\n type ThreadContextValue as unstable_ThreadContextValue,\n useMessageContext as unstable_useMessageContext,\n type MessageContextValue as unstable_MessageContextValue,\n useComposerContext as unstable_useComposerContext,\n type ComposerContextValue as unstable_ComposerContextValue,\n useContentPartContext as unstable_useContentPartContext,\n type ContentPartContextValue as unstable_ContentPartContextValue,\n // stores\n type ThreadState as unstable_ThreadState,\n type ComposerState as unstable_ComposerState,\n type ThreadViewportState as unstable_ThreadViewportState,\n type MessageState as unstable_MessageState,\n type EditComposerState as unstable_EditComposerState,\n type ContentPartState as unstable_ContentPartState,\n} from \"./context\";\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../utils/getMessageText\";\n\nexport const useCopyMessage = ({ copiedDuration = 3000 }) => {\n const { useMessage, useComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => {\n return c.isEditing || m.message.content.some((c) => c.type === \"text\");\n },\n );\n\n const callback = useCallback(() => {\n const { isEditing, value: composerValue } = useComposer.getState();\n const { message, setIsCopied } = useMessage.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n }, [useComposer, useMessage, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { MessageState } from \"./stores/Message\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type MessageContextValue = {\n useMessage: UseBoundStore<StoreApi<MessageState>>;\n useComposer: UseBoundStore<StoreApi<EditComposerState>>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport const useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />.\",\n );\n return context;\n};\n","\"use client\";\nimport { useMemo } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { StoreApi } from \"zustand\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n) => {\n const subscribe = (callback: () => void): (() => void) => {\n const unsubscribes = stores.map((store) => store.subscribe(callback));\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n };\n\n return (selector: CombinedSelector<T, R>): R => {\n const getSnapshot = (): R =>\n selector(...(stores.map((store) => store.getState()) as T));\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n","\"use client\";\nimport type { TextContentPart, ThreadMessage } from \"./AssistantTypes\";\n\nexport const getMessageText = (message: ThreadMessage) => {\n const textParts = message.content.filter(\n (part) => part.type === \"text\",\n ) as TextContentPart[];\n\n return textParts.map((part) => part.text).join(\"\\n\\n\");\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useReloadMessage = () => {\n const { useThread, useViewport } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThread.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n }, [useMessage, useThread, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { ThreadState } from \"./stores/Thread\";\nimport type { ThreadViewportState } from \"./stores/ThreadViewport\";\n\nexport type ThreadContextValue = {\n useThread: UseBoundStore<StoreApi<ThreadState>>;\n useComposer: UseBoundStore<StoreApi<ComposerState>>;\n useViewport: UseBoundStore<StoreApi<ThreadViewportState>>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport const useThreadContext = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (!context)\n throw new Error(\"This component must be used within an AssistantProvider.\");\n return context;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useBeginMessageEdit = () => {\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useComposer.getState();\n edit();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToNextBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) =>\n c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToPreviousBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ThreadRoot as Root } from \"./ThreadRoot\";\nexport { ThreadEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadIf as If } from \"./ThreadIf\";\nexport { ThreadViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ThreadRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadRootProps = PrimitiveDivProps;\n\nexport const ThreadRoot = forwardRef<ThreadRootElement, ThreadRootProps>(\n (props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n },\n);\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n};\n\ntype ThreadIfProps = PropsWithChildren<RequireAtLeastOne<ThreadIfFilters>>;\n\nconst useThreadIf = (props: RequireAtLeastOne<ThreadIfFilters>) => {\n const { useThread } = useThreadContext();\n return useThread((thread) => {\n if (props.empty === true && thread.messages.length !== 0) return false;\n if (props.empty === false && thread.messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n\n return true;\n });\n};\n\nexport const ThreadIf: FC<ThreadIfProps> = ({ children, ...query }) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { ThreadIf } from \"./ThreadIf\";\n\ntype ThreadEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadEmpty: FC<ThreadEmptyProps> = ({ children }) => {\n return <ThreadIf empty>{children}</ThreadIf>;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ThreadViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadViewportProps = PrimitiveDivProps & {\n autoScroll?: boolean;\n};\n\nexport const ThreadViewport = forwardRef<\n ThreadViewportElement,\n ThreadViewportProps\n>(({ autoScroll = true, onScroll, children, ...rest }, forwardedRef) => {\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n const divRef = useRef<HTMLDivElement>(null);\n const ref = useComposedRefs(forwardedRef, divRef);\n\n const { useViewport } = useThreadContext();\n\n // TODO find a more elegant implementation for this\n\n const firstRenderRef = useRef(true);\n const isScrollingToBottomRef = useRef(false);\n const lastScrollTop = useRef<number>(0);\n\n const scrollToBottom = () => {\n const div = messagesEndRef.current;\n if (!div || !autoScroll) return;\n\n const behavior = firstRenderRef.current ? \"instant\" : \"auto\";\n firstRenderRef.current = false;\n\n isScrollingToBottomRef.current = true;\n div.scrollIntoView({ behavior });\n };\n\n useOnResizeContent(divRef, () => {\n if (!isScrollingToBottomRef.current && !useViewport.getState().isAtBottom) {\n handleScroll();\n } else {\n scrollToBottom();\n }\n });\n\n useOnScrollToBottom(() => {\n scrollToBottom();\n });\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else if (newIsAtBottom !== isAtBottom) {\n isScrollingToBottomRef.current = false;\n useViewport.setState({ isAtBottom: newIsAtBottom });\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n return (\n <Primitive.div\n {...rest}\n onScroll={composeEventHandlers(onScroll, handleScroll)}\n ref={ref}\n >\n {children}\n <div ref={messagesEndRef} />\n </Primitive.div>\n );\n});\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { type MutableRefObject, useEffect } from \"react\";\n\nexport const useOnResizeContent = (\n ref: MutableRefObject<HTMLElement | null>,\n callback: () => void,\n) => {\n const callbackRef = useCallbackRef(callback);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const resizeObserver = new ResizeObserver(() => {\n callbackRef();\n });\n\n const mutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n resizeObserver.observe(node);\n }\n }\n\n for (const node of mutation.removedNodes) {\n if (node instanceof Element) {\n resizeObserver.unobserve(node);\n }\n }\n }\n\n callbackRef();\n });\n\n resizeObserver.observe(el);\n mutationObserver.observe(el, { childList: true });\n\n // Observe existing children\n for (const child of el.children) {\n resizeObserver.observe(child);\n }\n\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [ref.current, callbackRef]);\n};\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\nexport const useOnScrollToBottom = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useViewport } = useThreadContext();\n useEffect(() => {\n return useViewport.getState().onScrollToBottom(() => {\n callbackRef();\n });\n }, [useViewport, callbackRef]);\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport type {\n AppendContentPart,\n ThreadMessage,\n} from \"../../utils/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../MessageContext\";\nimport type { MessageContextValue } from \"../MessageContext\";\nimport { useThreadContext } from \"../ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/MessageComposer\";\nimport type { ThreadState } from \"../stores/Thread\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (thread: ThreadState, message: ThreadMessage) => {\n return thread.messages[thread.messages.length - 1]?.id === message.id;\n};\n\nconst syncMessage = (\n thread: ThreadState,\n useMessage: MessageContextValue[\"useMessage\"],\n messageIndex: number,\n) => {\n const parentId = thread.messages[messageIndex - 1]?.id ?? null;\n const message = thread.messages[messageIndex];\n\n // TODO check if this can happen\n if (!message) return;\n\n const isLast = getIsLast(thread, message);\n const branches = thread.getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage.getState();\n if (\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return;\n\n // sync useMessage\n useMessage.setState({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThread } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>((set) => ({\n message: null as unknown as ThreadMessage,\n parentId: null,\n branches: [],\n isLast: false,\n inProgressIndicator: null,\n isCopied: false,\n isHovering: false,\n setInProgressIndicator: (value) => {\n set({ inProgressIndicator: value });\n },\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n\n const useComposer = makeEditComposerStore({\n onEdit: () => {\n const message = useMessage.getState().message;\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const text = getMessageText(message);\n\n return text;\n },\n onSend: (text) => {\n const { message, parentId } = useMessage.getState();\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const nonTextParts = message.content.filter(\n (part): part is AppendContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThread.getState().append({\n parentId,\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n syncMessage(useThread.getState(), useMessage, messageIndex);\n\n return { useMessage, useComposer };\n });\n\n useEffect(() => {\n return useThread.subscribe((thread) => {\n syncMessage(thread, context.useMessage, messageIndex);\n });\n }, [context, useThread, messageIndex]);\n\n return context;\n};\n\nexport const MessageProvider: FC<MessageProviderProps> = ({\n messageIndex,\n children,\n}) => {\n const context = useMessageContext(messageIndex);\n\n return (\n <MessageContext.Provider value={context}>\n {children}\n </MessageContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): UseBoundStore<StoreApi<EditComposerState>> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false });\n onSend(value);\n },\n cancel: () => {\n if (!get().isEditing) return false;\n set({ isEditing: false });\n return true;\n },\n }));\n","import type { StateCreator } from \"zustand\";\n\nexport type BaseComposerState = Readonly<{\n value: string;\n setValue: (value: string) => void;\n}>;\n\nexport const makeBaseComposer: StateCreator<\n BaseComposerState,\n [],\n [],\n BaseComposerState\n> = (set) => ({\n value: \"\",\n setValue: (value) => {\n set({ value });\n },\n});\n","import { useContext, useMemo } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport { MessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type ComposerContextValue = {\n useComposer: UseBoundStore<StoreApi<EditComposerState | ComposerState>>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useComposer: useEditComposer } = useContext(MessageContext) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as UseBoundStore<\n StoreApi<EditComposerState | ComposerState>\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\ntype ComposerIfProps = PropsWithChildren<RequireAtLeastOne<ComposerIfFilters>>;\n\nconst useComposerIf = (props: RequireAtLeastOne<ComposerIfFilters>) => {\n const { useComposer } = useComposerContext();\n return useComposer((composer) => {\n if (props.editing === true && !composer.isEditing) return false;\n if (props.editing === false && composer.isEditing) return false;\n\n return true;\n });\n};\n\nexport const ComposerIf: FC<ComposerIfProps> = ({ children, ...query }) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\n\ntype MessageIfProps = RequireAtLeastOne<MessageIfFilters> & {\n children: ReactNode;\n};\n\nexport const useMessageIf = (props: RequireAtLeastOne<MessageIfFilters>) => {\n const { useMessage } = useMessageContext();\n\n return useMessage(({ message, branches, isLast, isCopied, isHovering }) => {\n if (props.hasBranches === true && branches.length < 2) return false;\n\n if (props.user && message.role !== \"user\") return false;\n if (props.assistant && message.role !== \"assistant\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n return true;\n });\n};\n\nexport const MessageIf: FC<MessageIfProps> = ({ children, ...query }) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { ComponentType, FC } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerIf } from \"../composer/ComposerIf\";\nimport { MessageIf } from \"../message/MessageIf\";\n\ntype ThreadMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage?: ComponentType;\n }\n | {\n Message?: ComponentType;\n UserMessage: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage: ComponentType;\n };\n};\n\nconst getComponents = (components: ThreadMessagesProps[\"components\"]) => {\n return {\n EditComposer:\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType),\n UserMessage:\n components.UserMessage ?? (components.Message as ComponentType),\n AssistantMessage:\n components.AssistantMessage ?? (components.Message as ComponentType),\n };\n};\n\nexport const ThreadMessages: FC<ThreadMessagesProps> = ({ components }) => {\n const { useThread } = useThreadContext();\n const messagesLength = useThread((t) => t.messages.length);\n\n const { UserMessage, EditComposer, AssistantMessage } =\n getComponents(components);\n\n if (messagesLength === 0) return null;\n\n return (\n <>\n {new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx;\n // TODO avoid rerendering on messageLength change\n return (\n <MessageProvider\n key={messageIndex} // keep the same key when switching branches for better a11y support\n messageIndex={messageIndex}\n >\n <MessageIf user>\n <ComposerIf editing={false}>\n <UserMessage />\n </ComposerIf>\n <ComposerIf editing>\n <EditComposer />\n </ComposerIf>\n </MessageIf>\n <MessageIf assistant>\n <AssistantMessage />\n </MessageIf>\n </MessageProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadScrollToBottomElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadScrollToBottomProps = PrimitiveButtonProps;\n\nexport const ThreadScrollToBottom = forwardRef<\n ThreadScrollToBottomElement,\n ThreadScrollToBottomProps\n>(({ onClick, ...rest }, ref) => {\n const { useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n const handleScrollToBottom = () => {\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isAtBottom}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleScrollToBottom)}\n />\n );\n});\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadSuggestionElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadSuggestionProps = PrimitiveButtonProps & {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean;\n};\n\nexport const ThreadSuggestion = forwardRef<\n ThreadSuggestionElement,\n ThreadSuggestionProps\n>(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {\n const { useThread, useComposer } = useThreadContext();\n\n const isDisabled = useThread((t) => t.isRunning);\n const handleApplySuggestion = () => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n composer.setValue(prompt);\n\n if (send && !thread.isRunning) {\n composer.send();\n }\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isDisabled}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleApplySuggestion)}\n />\n );\n});\n","export { ComposerRoot as Root } from \"./ComposerRoot\";\nexport { ComposerInput as Input } from \"./ComposerInput\";\nexport { ComposerSend as Send } from \"./ComposerSend\";\nexport { ComposerCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, type FormEvent, forwardRef, useRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ComposerRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\ntype ComposerRootProps = PrimitiveFormProps;\n\nexport const ComposerRoot = forwardRef<ComposerRootElement, ComposerRootProps>(\n ({ onSubmit, ...rest }, forwardedRef) => {\n const { useViewport } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const formRef = useRef<HTMLFormElement>(null);\n const ref = useComposedRefs(forwardedRef, formRef);\n\n const handleSubmit = (e: FormEvent) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n e.preventDefault();\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={ref}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n} from \"react-textarea-autosize\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ComposerInputProps = TextareaAutosizeProps & {\n asChild?: boolean;\n};\n\nexport const ComposerInput = forwardRef<\n HTMLTextAreaElement,\n ComposerInputProps\n>(\n (\n { autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest },\n forwardedRef,\n ) => {\n const { useThread, useViewport } = useThreadContext();\n const { useComposer, type } = useComposerContext();\n\n const value = useComposer((c) => {\n if (!c.isEditing) return \"\";\n return c.value;\n });\n\n const Component = asChild ? Slot : TextareaAutosize;\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (disabled) return;\n\n const composer = useComposer.getState();\n if (e.key === \"Escape\") {\n if (useComposer.getState().cancel()) {\n e.preventDefault();\n }\n } else if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n composer.send();\n\n useViewport.getState().scrollToBottom();\n }\n }\n };\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n const autoFocusEnabled = autoFocus && !disabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus();\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n value={value}\n {...rest}\n ref={ref}\n disabled={disabled}\n onChange={composeEventHandlers(onChange, (e) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n return composerState.setValue(e.target.value);\n })}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyPress)}\n />\n );\n },\n);\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerSendProps = PrimitiveFormProps;\n\nexport const ComposerSend = forwardRef<ComposerSendElement, ComposerSendProps>(\n ({ disabled, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);\n\n return (\n <Primitive.button\n type=\"submit\"\n {...rest}\n ref={ref}\n disabled={disabled || !hasValue}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerCancelElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerCancelProps = PrimitiveFormProps;\n\nexport const ComposerCancel = forwardRef<\n ComposerCancelElement,\n ComposerCancelProps\n>(({ onClick, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n\n const handleCancel = () => {\n useComposer.getState().cancel();\n };\n\n return (\n <Primitive.button\n type=\"button\"\n {...rest}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleCancel)}\n />\n );\n});\n","export { MessageRoot as Root } from \"./MessageRoot\";\nexport { MessageIf as If } from \"./MessageIf\";\nexport { MessageContent as Content } from \"./MessageContent\";\nexport { MessageInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype MessageRootProps = PrimitiveDivProps;\n\nexport const MessageRoot = forwardRef<MessageRootElement, MessageRootProps>(\n ({ onMouseEnter, onMouseLeave, ...rest }, ref) => {\n const { useMessage } = useMessageContext();\n const setIsHovering = useMessage((s) => s.setIsHovering);\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n return (\n <Primitive.div\n {...rest}\n ref={ref}\n onMouseEnter={composeEventHandlers(onMouseEnter, handleMouseEnter)}\n onMouseLeave={composeEventHandlers(onMouseLeave, handleMouseLeave)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { ContentPartContext } from \"../ContentPartContext\";\nimport type { ContentPartContextValue } from \"../ContentPartContext\";\nimport { useMessageContext } from \"../MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst syncContentPart = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"],\n partIndex: number,\n) => {\n const part = message.content[partIndex];\n // TODO check if this can happen\n if (!part) return;\n\n const messageStatus = message.role === \"assistant\" ? message.status : \"done\";\n const status =\n partIndex === message.content.length - 1 ? messageStatus : \"done\";\n\n useContentPart.setState({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(() => ({\n part: { type: \"text\", text: \"\" },\n status: \"done\",\n }));\n\n syncContentPart(useMessage.getState(), useContentPart, partIndex);\n\n return { useContentPart };\n });\n\n useEffect(() => {\n return useMessage.subscribe((message) => {\n syncContentPart(message, context.useContentPart, partIndex);\n });\n }, [context, useMessage, partIndex]);\n\n return context;\n};\n\nexport const ContentPartProvider: FC<ContentPartProviderProps> = ({\n partIndex,\n children,\n}) => {\n const context = useContentPartContext(partIndex);\n\n return (\n <ContentPartContext.Provider value={context}>\n {children}\n </ContentPartContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ContentPartState } from \"./stores/ContentPart\";\n\nexport type ContentPartContextValue = {\n useContentPart: UseBoundStore<StoreApi<ContentPartState>>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport const useContentPartContext = (): ContentPartContextValue => {\n const context = useContext(ContentPartContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >.\",\n );\n return context;\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const ContentPartInProgressIndicator: FC = () => {\n const { useMessage } = useMessageContext();\n const { useContentPart } = useContentPartContext();\n\n const indicator = useCombinedStore([useMessage, useContentPart], (m, c) =>\n c.status === \"in_progress\" ? m.inProgressIndicator : null,\n );\n return indicator;\n};\n","\"use client\";\n\nimport type { ComponentType, FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { ContentPartProvider } from \"../../context/providers/ContentPartProvider\";\nimport type {\n ImageContentPart,\n TextContentPart,\n ToolCallContentPart,\n UIContentPart,\n} from \"../../utils/AssistantTypes\";\nimport { ContentPartInProgressIndicator } from \"../contentPart/ContentPartInProgressIndicator\";\n\ntype MessageContentProps = {\n components?: {\n Text?: ComponentType<{ part: TextContentPart }>;\n Image?: ComponentType<{ part: ImageContentPart }>;\n UI?: ComponentType<{ part: UIContentPart }>;\n tools?: {\n by_name?: Record<string, ComponentType<{ part: ToolCallContentPart }>>;\n Fallback?: ComponentType<{ part: ToolCallContentPart }>;\n };\n };\n};\n\nconst defaultComponents = {\n Text: ({ part }) => (\n <>\n {part.text}\n <ContentPartInProgressIndicator />\n </>\n ),\n Image: () => null,\n UI: ({ part }) => part.display,\n tools: {\n Fallback: () => null,\n },\n} satisfies MessageContentProps[\"components\"];\n\nexport const MessageContent: FC<MessageContentProps> = ({\n components: {\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useMessage } = useMessageContext();\n\n const message = useMessage((s) => s.message);\n const content = message.content;\n\n return (\n <>\n {content.map((part, i) => {\n const partIndex = i; // use the index as key, as message is generally append only\n\n const type = part.type;\n let component: ReactNode | null = null;\n switch (type) {\n case \"text\":\n component = <Text part={part} />;\n break;\n\n case \"image\":\n component = <Image part={part} />;\n break;\n case \"ui\":\n component = <UI part={part} />;\n break;\n case \"tool-call\": {\n const Tool = by_name[part.name] || Fallback;\n component = <Tool part={part} />;\n break;\n }\n default:\n throw new Error(`Unknown content part type: ${type}`);\n }\n\n return (\n <ContentPartProvider key={partIndex} partIndex={partIndex}>\n {component}\n </ContentPartProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useMemo } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageInProgressElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype MessageInProgressProps = PrimitiveSpanProps;\n\nexport const MessageInProgress = forwardRef<\n MessageInProgressElement,\n MessageInProgressProps\n>((props, ref) => {\n const { useMessage } = useMessageContext();\n\n useMemo(() => {\n useMessage\n .getState()\n .setInProgressIndicator(<Primitive.span {...props} ref={ref} />);\n }, [useMessage, props, ref]);\n\n return null;\n});\n","export { BranchPickerNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\nexport const createActionButton = <TProps,>(\n useActionButton: ActionButtonCallback<TProps>,\n) => {\n type PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\n type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\n return forwardRef<PrimitiveButtonElement, PrimitiveButtonProps & TProps>(\n (props, forwardedRef) => {\n const onClick = useActionButton(props);\n\n return (\n <Primitive.button\n type=\"button\"\n disabled={!onClick}\n {...props}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, onClick ?? undefined)}\n />\n );\n },\n );\n};\n","\"use client\";\n\nimport { useGoToNextBranch } from \"../../actions/useGoToNextBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerNext = createActionButton(useGoToNextBranch);\n","\"use client\";\n\nimport { useGoToPreviousBranch } from \"../../actions/useGoToPreviousBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerPrevious = createActionButton(useGoToPreviousBranch);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerCount: FC = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return <>{branchCount}</>;\n};\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerNumber: FC = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return <>{branchIdx + 1}</>;\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype BranchPickerRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean;\n};\n\nexport const BranchPickerRoot = forwardRef<\n BranchPickerRootElement,\n BranchPickerRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n","export { ActionBarRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ActionBarRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nenum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type ActionBarRootProps = PrimitiveDivProps & {\n hideWhenRunning?: boolean;\n autohide?: \"always\" | \"not-last\" | \"never\";\n autohideFloat?: \"always\" | \"single-branch\" | \"never\";\n};\n\nexport const ActionBarRoot = forwardRef<\n ActionBarRootElement,\n ActionBarRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const { useThread } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const hideAndfloatStatus = useCombinedStore(\n [useThread, useMessage],\n (t, m) => {\n if (hideWhenRunning && t.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !m.isLast);\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!m.isHovering) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && m.branches.length <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n },\n );\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n data-floating={hideAndfloatStatus === HideAndFloatStatus.Floating}\n {...rest}\n ref={ref}\n />\n );\n});\n","\"use client\";\n\nimport { useCopyMessage } from \"../../actions/useCopyMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\ntype ActionBarCopyProps = {\n copiedDuration?: number;\n};\n\nexport const ActionBarCopy =\n createActionButton<ActionBarCopyProps>(useCopyMessage);\n","\"use client\";\n\nimport { useReloadMessage } from \"../../actions/useReloadMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarReload = createActionButton(useReloadMessage);\n","\"use client\";\n\nimport { useBeginMessageEdit } from \"../../actions/useBeginMessageEdit\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarEdit = createActionButton(useBeginMessageEdit);\n","export { ContentPartInProgressIndicator as InProgressIndicator } from \"./ContentPartInProgressIndicator\";\n","\"use client\";\n\nimport { useEffect, useInsertionEffect, useState } from \"react\";\nimport type { VercelRSCAdapter } from \"./VercelRSCAdapter\";\nimport { VercelRSCRuntime } from \"./VercelRSCRuntime\";\n\nexport const useVercelRSCRuntime = <T extends WeakKey>(\n adapter: VercelRSCAdapter<T>,\n) => {\n const [runtime] = useState(() => new VercelRSCRuntime(adapter));\n\n useInsertionEffect(() => {\n runtime.adapter = adapter;\n });\n useEffect(() => {\n runtime.onAdapterUpdated();\n });\n\n return runtime;\n};\n","\"use client\";\n\nimport type {\n AppendMessage,\n AssistantRuntime,\n ReactThreadRuntime,\n ThreadMessage,\n} from \"@assistant-ui/react\";\nimport { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport type { VercelRSCAdapter } from \"./VercelRSCAdapter\";\nimport type { VercelRSCMessage } from \"./VercelRSCMessage\";\nimport { useVercelRSCSync } from \"./useVercelRSCSync\";\n\nconst EMPTY_BRANCHES: readonly never[] = Object.freeze([]);\n\nexport class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage>\n implements AssistantRuntime, ReactThreadRuntime\n{\n private useAdapter: UseBoundStore<StoreApi<{ adapter: VercelRSCAdapter<T> }>>;\n\n private _subscriptions = new Set<() => void>();\n\n public isRunning = false;\n public messages: ThreadMessage[] = [];\n\n constructor(public adapter: VercelRSCAdapter<T>) {\n this.useAdapter = create(() => ({\n adapter,\n }));\n }\n\n private withRunning = (callback: Promise<unknown>) => {\n this.isRunning = true;\n return callback.finally(() => {\n this.isRunning = false;\n });\n };\n\n public getBranches(): readonly string[] {\n return EMPTY_BRANCHES;\n }\n\n public switchToBranch(): void {\n throw new Error(\n \"Branch switching is not supported by VercelRSCAssistantProvider.\",\n );\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {\n if (!this.adapter.edit)\n throw new Error(\n \"Message editing is not enabled, please provide an edit callback to VercelRSCAssistantProvider.\",\n );\n await this.withRunning(this.adapter.edit(message));\n } else {\n await this.withRunning(this.adapter.append(message));\n }\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n if (!this.adapter.reload)\n throw new Error(\n \"Message reloading is not enabled, please provide a reload callback to VercelRSCAssistantProvider.\",\n );\n await this.withRunning(this.adapter.reload(parentId));\n }\n\n cancelRun(): void {\n // in dev mode, log a warning\n if (process.env[\"NODE_ENV\"] === \"development\") {\n console.warn(\n \"Run cancellation is not supported by VercelRSCAssistantProvider.\",\n );\n }\n }\n\n public subscribe(callback: () => void): () => void {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n public onAdapterUpdated() {\n if (this.useAdapter.getState().adapter !== this.adapter) {\n this.useAdapter.setState({ adapter: this.adapter });\n }\n }\n\n private updateData = (messages: ThreadMessage[]) => {\n this.messages = messages;\n for (const callback of this._subscriptions) callback();\n };\n\n unstable_synchronizer = () => {\n const { adapter } = this.useAdapter();\n\n useVercelRSCSync(adapter, this.updateData);\n\n return null;\n };\n}\n","import type { ThreadMessage } from \"@assistant-ui/react\";\nimport { useEffect, useMemo } from \"react\";\nimport {\n type ConverterCallback,\n ThreadMessageConverter,\n} from \"../utils/ThreadMessageConverter\";\nimport type { VercelRSCAdapter } from \"./VercelRSCAdapter\";\nimport type { VercelRSCMessage } from \"./VercelRSCMessage\";\nimport {\n type VercelRSCThreadMessage,\n symbolInnerRSCMessage,\n} from \"./getVercelRSCMessage\";\n\nconst vercelToThreadMessage = <T,>(\n converter: (message: T) => VercelRSCMessage,\n rawMessage: T,\n): VercelRSCThreadMessage<T> => {\n const message = converter(rawMessage);\n\n return {\n id: message.id,\n role: message.role,\n content: [{ type: \"ui\", display: message.display }],\n createdAt: message.createdAt ?? new Date(),\n ...{ status: \"done\" },\n [symbolInnerRSCMessage]: rawMessage,\n };\n};\n\ntype UpdateDataCallback = (messages: ThreadMessage[]) => void;\n\nexport const useVercelRSCSync = <T extends WeakKey>(\n adapter: VercelRSCAdapter<T>,\n updateData: UpdateDataCallback,\n) => {\n // flush the converter cache when the convertMessage prop changes\n const [converter, convertCallback] = useMemo(() => {\n const rscConverter =\n adapter.convertMessage ?? ((m: T) => m as VercelRSCMessage);\n const convertCallback: ConverterCallback<T> = (m, cache) => {\n if (cache) return cache;\n return vercelToThreadMessage(rscConverter, m);\n };\n return [new ThreadMessageConverter(), convertCallback];\n }, [adapter.convertMessage]);\n\n useEffect(() => {\n updateData(converter.convertMessages(adapter.messages, convertCallback));\n }, [updateData, converter, convertCallback, adapter.messages]);\n};\n","import type { ThreadMessage } from \"@assistant-ui/react\";\n\nexport type ConverterCallback<TIn> = (\n message: TIn,\n cache: ThreadMessage | undefined,\n) => ThreadMessage;\n\nexport class ThreadMessageConverter {\n private readonly cache = new WeakMap<WeakKey, ThreadMessage>();\n\n convertMessages<TIn extends WeakKey>(\n messages: TIn[],\n converter: ConverterCallback<TIn>,\n keyMapper: (m: TIn) => WeakKey = (key) => key,\n ): ThreadMessage[] {\n return messages.map((m) => {\n const key = keyMapper(m);\n const cached = this.cache.get(key);\n const newMessage = converter(m, cached);\n this.cache.set(key, newMessage);\n return newMessage;\n });\n }\n}\n","import type { ThreadMessage } from \"@assistant-ui/react\";\n\nexport const symbolInnerRSCMessage = Symbol(\"innerVercelRSCMessage\");\n\nexport type VercelRSCThreadMessage<T> = ThreadMessage & {\n [symbolInnerRSCMessage]?: T;\n};\n\nexport const getVercelRSCMessage = <T,>(message: ThreadMessage) => {\n return (message as VercelRSCThreadMessage<T>)[symbolInnerRSCMessage];\n};\n","import type { UseChatHelpers } from \"@ai-sdk/react\";\nimport { useEffect, useInsertionEffect, useState } from \"react\";\nimport { VercelAIRuntime } from \"../VercelAIRuntime\";\n\nexport const useVercelUseChatRuntime = (chatHelpers: UseChatHelpers) => {\n const [runtime] = useState(() => new VercelAIRuntime(chatHelpers));\n\n useInsertionEffect(() => {\n runtime.vercel = chatHelpers;\n });\n useEffect(() => {\n runtime.onVercelUpdated();\n });\n\n return runtime;\n};\n","import {\n type AppendMessage,\n type AssistantRuntime,\n unstable_MessageRepository as MessageRepository,\n type ReactThreadRuntime,\n type ThreadMessage,\n} from \"@assistant-ui/react\";\nimport type { Message } from \"ai\";\nimport { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { getVercelAIMessage } from \"./getVercelAIMessage\";\nimport type { VercelHelpers } from \"./utils/VercelHelpers\";\nimport { sliceMessagesUntil } from \"./utils/sliceMessagesUntil\";\nimport { useVercelAIComposerSync } from \"./utils/useVercelAIComposerSync\";\nimport { useVercelAIThreadSync } from \"./utils/useVercelAIThreadSync\";\n\nconst hasUpcomingMessage = (isRunning: boolean, messages: ThreadMessage[]) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class VercelAIRuntime implements AssistantRuntime, ReactThreadRuntime {\n private _subscriptions = new Set<() => void>();\n private repository = new MessageRepository();\n private assistantOptimisticId: string | null = null;\n\n private useVercel: UseBoundStore<StoreApi<{ vercel: VercelHelpers }>>;\n\n public messages: ThreadMessage[] = [];\n public isRunning = false;\n\n constructor(public vercel: VercelHelpers) {\n this.useVercel = create(() => ({\n vercel,\n }));\n }\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this.updateVercelMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n // add user message\n if (message.content.length !== 1 || message.content[0]?.type !== \"text\")\n throw new Error(\"Only text content is supported by Vercel AI SDK.\");\n\n const newMessages = sliceMessagesUntil(\n this.vercel.messages,\n message.parentId,\n );\n this.vercel.setMessages(newMessages);\n\n await this.vercel.append({\n role: \"user\",\n content: message.content[0].text,\n });\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n const reloadMaybe =\n \"reload\" in this.vercel ? this.vercel.reload : undefined;\n if (!reloadMaybe)\n throw new Error(\n \"Reload is not supported by Vercel AI SDK's useAssistant.\",\n );\n\n const newMessages = sliceMessagesUntil(this.vercel.messages, parentId);\n this.vercel.setMessages(newMessages);\n\n await reloadMaybe();\n }\n\n public cancelRun(): void {\n const previousMessage = this.vercel.messages.at(-1);\n\n this.vercel.stop();\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n let messages = this.repository.getMessages();\n if (\n previousMessage?.role === \"user\" &&\n previousMessage.id === messages.at(-1)?.id // ensure the previous message is a leaf node\n ) {\n this.vercel.setInput(previousMessage.content);\n this.repository.deleteMessage(previousMessage.id);\n\n messages = this.repository.getMessages();\n }\n\n // resync messages\n setTimeout(() => {\n this.updateVercelMessages(messages);\n }, 0);\n }\n\n public subscribe(callback: () => void): () => void {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private updateVercelMessages = (messages: ThreadMessage[]) => {\n this.vercel.setMessages(\n messages\n .flatMap(getVercelAIMessage)\n .filter((m): m is Message => m != null),\n );\n };\n\n public onVercelUpdated() {\n if (this.useVercel.getState().vercel !== this.vercel) {\n this.useVercel.setState({ vercel: this.vercel });\n }\n }\n\n private updateData = (isRunning: boolean, vm: ThreadMessage[]) => {\n for (let i = 0; i < vm.length; i++) {\n const message = vm[i]!;\n const parent = vm[i - 1];\n this.repository.addOrUpdateMessage(parent?.id ?? null, message);\n }\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n if (hasUpcomingMessage(isRunning, vm)) {\n this.assistantOptimisticId = this.repository.appendOptimisticMessage(\n vm.at(-1)?.id ?? null,\n {\n role: \"assistant\",\n content: [{ type: \"text\", text: \"\" }],\n },\n );\n }\n\n this.repository.resetHead(\n this.assistantOptimisticId ?? vm.at(-1)?.id ?? null,\n );\n\n this.messages = this.repository.getMessages();\n this.isRunning = isRunning;\n\n for (const callback of this._subscriptions) callback();\n };\n\n unstable_synchronizer = () => {\n const { vercel } = this.useVercel();\n\n useVercelAIThreadSync(vercel, this.updateData);\n useVercelAIComposerSync(vercel);\n\n return null;\n };\n}\n","import type { ThreadMessage } from \"@assistant-ui/react\";\nimport type { Message } from \"ai\";\n\nexport const symbolInnerAIMessage = Symbol(\"innerVercelAIUIMessage\");\n\nexport type VercelAIThreadMessage = ThreadMessage & {\n [symbolInnerAIMessage]?: Message[];\n};\n\nexport const getVercelAIMessage = (message: ThreadMessage) => {\n return (message as VercelAIThreadMessage)[symbolInnerAIMessage];\n};\n","import type { Message } from \"ai\";\n\nexport const sliceMessagesUntil = (\n messages: Message[],\n messageId: string | null,\n) => {\n if (messageId == null) return [];\n\n let messageIdx = messages.findIndex((m) => m.id === messageId);\n if (messageIdx === -1)\n throw new Error(\n \"useVercelAIThreadState: Message not found. This is liekly an internal bug in assistant-ui.\",\n );\n\n while (messages[messageIdx + 1]?.role === \"assistant\") {\n messageIdx++;\n }\n\n return messages.slice(0, messageIdx + 1);\n};\n","import { unstable_useThreadContext as useThreadContext } from \"@assistant-ui/react\";\nimport { useEffect } from \"react\";\nimport type { VercelHelpers } from \"./VercelHelpers\";\n\n// two way sync between vercel helpers input state and composer text state\nexport const useVercelAIComposerSync = (vercel: VercelHelpers) => {\n const { useComposer } = useThreadContext();\n\n useEffect(() => {\n useComposer.setState({\n value: vercel.input,\n setValue: vercel.setInput,\n });\n }, [useComposer, vercel.input, vercel.setInput]);\n};\n","import type {\n TextContentPart,\n ThreadMessage,\n unstable_ToolCallContentPart as ToolCallContentPart,\n} from \"@assistant-ui/react\";\nimport type { Message } from \"ai\";\nimport { useEffect, useMemo } from \"react\";\nimport {\n type ConverterCallback,\n ThreadMessageConverter,\n} from \"../../utils/ThreadMessageConverter\";\nimport {\n type VercelAIThreadMessage,\n symbolInnerAIMessage,\n} from \"../getVercelAIMessage\";\nimport type { VercelHelpers } from \"./VercelHelpers\";\n\nconst getIsRunning = (vercel: VercelHelpers) => {\n if (\"isLoading\" in vercel) return vercel.isLoading;\n return vercel.status === \"in_progress\";\n};\n\nconst vercelToThreadMessage = (\n messages: Message[],\n status: \"in_progress\" | \"done\" | \"error\",\n): VercelAIThreadMessage => {\n const firstMessage = messages[0];\n if (!firstMessage) throw new Error(\"No messages found\");\n\n const common = {\n id: firstMessage.id,\n createdAt: firstMessage.createdAt ?? new Date(),\n [symbolInnerAIMessage]: messages,\n };\n\n switch (firstMessage.role) {\n case \"user\":\n if (messages.length > 1) {\n throw new Error(\n \"Multiple user messages found. This is likely an internal bug in assistant-ui.\",\n );\n }\n\n return {\n ...common,\n role: \"user\",\n content: [{ type: \"text\", text: firstMessage.content }],\n };\n case \"assistant\":\n return {\n ...common,\n role: \"assistant\",\n content: messages.flatMap((message) => [\n ...(message.content\n ? [{ type: \"text\", text: message.content } as TextContentPart]\n : []),\n ...(message.toolInvocations?.map(\n (t) =>\n ({\n type: \"tool-call\",\n name: t.toolName,\n args: t.args,\n result: \"result\" in t ? t.result : undefined,\n }) as ToolCallContentPart,\n ) ?? []),\n ]),\n status,\n };\n default:\n throw new Error(\n `You have a message with an unsupported role. The role ${firstMessage.role} is not supported.`,\n );\n }\n};\n\ntype Chunk = [Message, ...Message[]];\nconst hasItems = (messages: Message[]): messages is Chunk =>\n messages.length > 0;\n\nconst chunkedMessages = (messages: Message[]): Chunk[] => {\n const chunks: Chunk[] = [];\n let currentChunk: Message[] = [];\n\n for (const message of messages) {\n if (message.role === \"assistant\") {\n currentChunk.push(message);\n } else {\n if (hasItems(currentChunk)) {\n chunks.push(currentChunk);\n currentChunk = [];\n }\n chunks.push([message]);\n }\n }\n\n if (hasItems(currentChunk)) {\n chunks.push(currentChunk);\n }\n\n return chunks;\n};\n\nconst shallowArrayEqual = (a: unknown[], b: unknown[]) => {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\ntype UpdateDataCallback = (isRunning: boolean, vm: ThreadMessage[]) => void;\n\nexport const useVercelAIThreadSync = (\n vercel: VercelHelpers,\n updateData: UpdateDataCallback,\n) => {\n const isRunning = getIsRunning(vercel);\n\n const converter = useMemo(() => new ThreadMessageConverter(), []);\n\n useEffect(() => {\n const lastMessageId = vercel.messages.at(-1)?.id;\n const convertCallback: ConverterCallback<Chunk> = (messages, cache) => {\n const status =\n lastMessageId === messages[0].id && isRunning ? \"in_progress\" : \"done\";\n\n if (\n cache &&\n shallowArrayEqual(cache.content, messages) &&\n (cache.role === \"user\" || cache.status === status)\n )\n return cache;\n\n return vercelToThreadMessage(messages, status);\n };\n\n const messages = converter.convertMessages(\n chunkedMessages(vercel.messages),\n convertCallback,\n (m) => m[0],\n );\n\n updateData(isRunning, messages);\n }, [updateData, isRunning, vercel.messages, converter]);\n};\n","import type { UseAssistantHelpers } from \"@ai-sdk/react\";\nimport { useEffect, useInsertionEffect, useState } from \"react\";\nimport { VercelAIRuntime } from \"../VercelAIRuntime\";\n\nexport const useVercelUseAssistantRuntime = (\n assistantHelpers: UseAssistantHelpers,\n) => {\n const [runtime] = useState(() => new VercelAIRuntime(assistantHelpers));\n\n useInsertionEffect(() => {\n runtime.vercel = assistantHelpers;\n });\n useEffect(() => {\n runtime.onVercelUpdated();\n });\n\n return runtime;\n};\n","import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n\nconst optimisticPrefix = \"__optimistic__\";\nexport const generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;\nexport const isOptimisticId = (id: string) => id.startsWith(optimisticPrefix);\n","import type { ThreadMessage } from \"../../utils/AssistantTypes\";\nimport { generateOptimisticId } from \"./idUtils\";\n\ntype RepositoryParent = {\n children: string[];\n};\n\ntype RepositoryMessage = RepositoryParent & {\n prev: RepositoryMessage | null;\n current: ThreadMessage;\n next: RepositoryMessage | null;\n level: number;\n};\n\nconst findHead = (message: RepositoryMessage): RepositoryMessage => {\n if (message.next) return findHead(message.next);\n return message;\n};\n\nexport class MessageRepository {\n private messages = new Map<string, RepositoryMessage>(); // message_id -> item\n private head: RepositoryMessage | null = null;\n private root: RepositoryParent = {\n children: [],\n };\n\n private performOp(\n newParent: RepositoryMessage | null,\n child: RepositoryMessage,\n operation: \"cut\" | \"link\" | \"relink\",\n ) {\n const parentOrRoot = child.prev ?? this.root;\n const newParentOrRoot = newParent ?? this.root;\n\n if (operation === \"relink\" && parentOrRoot === newParentOrRoot) return;\n\n // cut\n if (operation !== \"link\") {\n parentOrRoot.children = parentOrRoot.children.filter(\n (m) => m !== child.current.id,\n );\n\n if (child.prev?.next === child) {\n const fallbackId = child.prev.children.at(-1);\n const fallback = fallbackId ? this.messages.get(fallbackId) : null;\n if (fallback === undefined) {\n throw new Error(\n \"MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui.\",\n );\n }\n child.prev.next = fallback;\n }\n }\n\n // link\n if (operation !== \"cut\") {\n newParentOrRoot.children = [\n ...newParentOrRoot.children,\n child.current.id,\n ];\n\n if (\n newParent &&\n (findHead(child) === this.head || newParent.next === null)\n ) {\n newParent.next = child;\n }\n\n child.prev = newParent;\n }\n }\n getMessages() {\n const messages = new Array<ThreadMessage>(this.head?.level ?? 0);\n for (let current = this.head; current; current = current.prev) {\n messages[current.level] = current.current;\n }\n return messages;\n }\n\n addOrUpdateMessage(parentId: string | null, message: ThreadMessage) {\n const existingItem = this.messages.get(message.id);\n const prev = parentId ? this.messages.get(parentId) : null;\n if (prev === undefined)\n throw new Error(\n \"MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n // update existing message\n if (existingItem) {\n existingItem.current = message;\n this.performOp(prev, existingItem, \"relink\");\n return;\n }\n\n // create a new message\n const newItem: RepositoryMessage = {\n prev,\n current: message,\n next: null,\n children: [],\n level: prev ? prev.level + 1 : 0,\n };\n\n this.messages.set(message.id, newItem);\n this.performOp(prev, newItem, \"link\");\n\n if (this.head === prev) {\n this.head = newItem;\n }\n }\n\n appendOptimisticMessage(\n parentId: string | null,\n message: Omit<ThreadMessage, \"id\" | \"createdAt\">,\n ) {\n let optimisticId: string;\n do {\n optimisticId = generateOptimisticId();\n } while (this.messages.has(optimisticId));\n\n this.addOrUpdateMessage(parentId, {\n ...message,\n id: optimisticId,\n createdAt: new Date(),\n ...(message.role === \"assistant\" ? { status: \"in_progress\" } : undefined),\n } as ThreadMessage);\n\n return optimisticId;\n }\n\n deleteMessage(messageId: string, replacementId?: string | null | undefined) {\n const message = this.messages.get(messageId);\n\n if (!message)\n throw new Error(\n \"MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n const replacement =\n replacementId === undefined\n ? message.prev // if no replacementId is provided, use the parent\n : replacementId === null\n ? null\n : this.messages.get(replacementId);\n if (replacement === undefined)\n throw new Error(\n \"MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui.\",\n );\n\n for (const child of message.children) {\n const childMessage = this.messages.get(child);\n if (!childMessage)\n throw new Error(\n \"MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui.\",\n );\n this.performOp(replacement, childMessage, \"relink\");\n }\n\n this.performOp(null, message, \"cut\");\n this.messages.delete(messageId);\n\n if (this.head === message) {\n this.head = replacement ? findHead(replacement) : null;\n }\n }\n\n getBranches(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n const { children } = message.prev ?? this.root;\n return children;\n }\n\n switchToBranch(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui.\",\n );\n\n if (message.prev) {\n message.prev.next = message;\n }\n\n this.head = findHead(message);\n }\n\n resetHead(messageId: string | null) {\n if (messageId === null) {\n this.head = null;\n return;\n }\n\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui.\",\n );\n\n this.head = message;\n for (\n let current: RepositoryMessage | null = message;\n current;\n current = current.prev\n ) {\n if (current.prev) {\n current.prev.next = current;\n }\n }\n }\n}\n","import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime/core/AssistantRuntime\";\nimport { ThreadProvider } from \"./ThreadProvider\";\n\ntype AssistantRuntimeProviderProps = {\n runtime: AssistantRuntime;\n};\n\nconst AssistantRuntimeProviderImpl: FC<\n PropsWithChildren<AssistantRuntimeProviderProps>\n> = ({ children, runtime }) => {\n return <ThreadProvider runtime={runtime}>{children}</ThreadProvider>;\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtime/core/ReactThreadRuntime\";\nimport type { ThreadRuntime } from \"../../runtime/core/ThreadRuntime\";\nimport type { ThreadContextValue } from \"../ThreadContext\";\nimport { ThreadContext } from \"../ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\n\ntype ThreadProviderProps = {\n runtime: ThreadRuntime;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n runtime,\n}) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [{ context, onRuntimeUpdate }] = useState(() => {\n const { useThread, onRuntimeUpdate } = makeThreadStore(runtimeRef);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThread);\n\n return {\n context: {\n useViewport,\n useThread,\n useComposer,\n } satisfies ThreadContextValue,\n onRuntimeUpdate,\n };\n });\n\n useEffect(() => {\n // whenever the runtime changes\n onRuntimeUpdate();\n\n // subscribe to runtime updates\n return runtime.subscribe(onRuntimeUpdate);\n }, [onRuntimeUpdate, runtime]);\n\n const RuntimeSynchronizer = (runtime as ReactThreadRuntime)\n .unstable_synchronizer;\n\n return (\n <ThreadContext.Provider value={context}>\n {RuntimeSynchronizer && <RuntimeSynchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport type { ThreadState } from \"./Thread\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n isEditing: true;\n\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeComposerStore = (\n useThread: StoreApi<ThreadState>,\n): UseBoundStore<StoreApi<ComposerState>> =>\n create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThread.getState().append({\n parentId: useThread.getState().messages.at(-1)?.id ?? null,\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n const thread = useThread.getState();\n if (!thread.isRunning) return false;\n\n useThread.getState().cancelRun();\n return true;\n },\n };\n });\n","import type { MutableRefObject } from \"react\";\nimport { create } from \"zustand\";\nimport type { AppendMessage, ThreadMessage } from \"../../utils/AssistantTypes\";\n\nexport type ThreadState = {\n messages: readonly ThreadMessage[];\n isRunning: boolean;\n\n getBranches: (messageId: string) => readonly string[];\n switchToBranch: (branchId: string) => void;\n\n append: (message: AppendMessage) => void;\n startRun: (parentId: string | null) => void;\n cancelRun: () => void;\n};\n\nexport const makeThreadStore = (runtimeRef: MutableRefObject<ThreadState>) => {\n const useThread = create<ThreadState>(() => ({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n getBranches: (messageId) => runtimeRef.current.getBranches(messageId),\n switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),\n startRun: (parentId) => runtimeRef.current.startRun(parentId),\n append: (message) => runtimeRef.current.append(message),\n cancelRun: () => runtimeRef.current.cancelRun(),\n }));\n\n const onRuntimeUpdate = () => {\n useThread.setState({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n });\n };\n\n return {\n useThread,\n onRuntimeUpdate,\n };\n};\n","\"use client\";\nimport { create } from \"zustand\";\n\nexport type ThreadViewportState = {\n isAtBottom: boolean;\n scrollToBottom: () => void;\n onScrollToBottom: (callback: () => void) => () => void;\n};\n\nexport const makeThreadViewportStore = () => {\n const scrollToBottomListeners = new Set<() => void>();\n\n return create<ThreadViewportState>(() => ({\n isAtBottom: true,\n scrollToBottom: () => {\n for (const listener of scrollToBottomListeners) {\n listener();\n }\n },\n onScrollToBottom: (callback) => {\n scrollToBottomListeners.add(callback);\n return () => {\n scrollToBottomListeners.delete(callback);\n };\n },\n }));\n};\n","\"use client\";\n\nimport type { UseAssistantHelpers, UseChatHelpers } from \"@ai-sdk/react\";\nimport {\n useVercelUseAssistantRuntime,\n useVercelUseChatRuntime,\n} from \"@assistant-ui/react-ai-sdk\";\nimport type { FC, PropsWithChildren } from \"react\";\nimport { AssistantRuntimeProvider } from \"../../context/providers/AssistantRuntimeProvider\";\n\ntype VercelUseChatRuntimeProps = PropsWithChildren<{\n chat: UseChatHelpers;\n}>;\n\nconst VercelUseChatRuntimeProvider: FC<VercelUseChatRuntimeProps> = ({\n chat,\n children,\n}) => {\n const runtime = useVercelUseChatRuntime(chat);\n\n return (\n <AssistantRuntimeProvider runtime={runtime}>\n {children}\n </AssistantRuntimeProvider>\n );\n};\n\ntype VercelUseAssistantRuntimeProps = PropsWithChildren<{\n assistant: UseAssistantHelpers;\n}>;\n\nconst VercelUseAssistantRuntimeProvider: FC<VercelUseAssistantRuntimeProps> = ({\n assistant,\n children,\n}) => {\n const runtime = useVercelUseAssistantRuntime(assistant);\n\n return (\n <AssistantRuntimeProvider runtime={runtime}>\n {children}\n </AssistantRuntimeProvider>\n );\n};\n\n/**\n * @deprecated Will be removed in 0.1.0.\n */\nexport type VercelAIAssistantProviderProps = PropsWithChildren<\n | {\n chat: UseChatHelpers;\n }\n | {\n assistant: UseAssistantHelpers;\n }\n>;\n\n/**\n * @deprecated `const runtime = useVercelUseChatRuntime(chat)` and `<AssistantRuntimeProvider runtime={...} />`. Will be removed in 0.1.0.\n */\nexport const VercelAIAssistantProvider: FC<VercelAIAssistantProviderProps> = ({\n children,\n ...rest\n}) => {\n if (\"chat\" in rest) {\n return (\n <VercelUseChatRuntimeProvider chat={rest.chat}>\n {children}\n </VercelUseChatRuntimeProvider>\n );\n }\n\n return (\n <VercelUseAssistantRuntimeProvider assistant={rest.assistant}>\n {children}\n </VercelUseAssistantRuntimeProvider>\n );\n};\n","\"use client\";\n\nimport {\n type VercelRSCAdapter,\n type VercelRSCMessage,\n useVercelRSCRuntime,\n} from \"@assistant-ui/react-ai-sdk\";\nimport type { PropsWithChildren } from \"react\";\nimport { AssistantRuntimeProvider } from \"../../context/providers/AssistantRuntimeProvider\";\n\n/**\n * @deprecated Will be removed in 0.1.0.\n */\nexport type VercelRSCAssistantProviderProps<T> = PropsWithChildren<\n VercelRSCAdapter<T>\n>;\n\n/**\n * @deprecated Replaced with `const runtime = useVercelRSCRuntime({ messages, append })` and `<AssistantRuntimeProvider runtime={runtime} />`. Will be removed in 0.1.0.\n */\nexport const VercelRSCAssistantProvider = <\n T extends WeakKey = VercelRSCMessage,\n>({\n children,\n ...adapter\n}: VercelRSCAssistantProviderProps<T>) => {\n const runtime = useVercelRSCRuntime<T>(adapter as VercelRSCAdapter<T>);\n return (\n <AssistantRuntimeProvider runtime={runtime}>\n {children}\n </AssistantRuntimeProvider>\n );\n};\n","\"use client\";\n\nimport { useInsertionEffect, useState } from \"react\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { LocalRuntime } from \"./LocalRuntime\";\n\nexport const useLocalRuntime = (adapter: ChatModelAdapter) => {\n const [runtime] = useState(() => new LocalRuntime(adapter));\n\n useInsertionEffect(() => {\n runtime.adapter = adapter;\n });\n\n return runtime;\n};\n","import type {\n AppendMessage,\n AssistantMessage,\n UserMessage,\n} from \"../../utils/AssistantTypes\";\nimport type { AssistantRuntime } from \"../core/AssistantRuntime\";\nimport type { Unsubscribe } from \"../core/ThreadRuntime\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport { generateId } from \"../utils/idUtils\";\nimport type { ChatModelAdapter, ChatModelRunResult } from \"./ChatModelAdapter\";\n\nexport class LocalRuntime implements AssistantRuntime {\n private _subscriptions = new Set<() => void>();\n\n private abortController: AbortController | null = null;\n private repository = new MessageRepository();\n\n public get messages() {\n return this.repository.getMessages();\n }\n public get isRunning() {\n return this.abortController != null;\n }\n\n constructor(public adapter: ChatModelAdapter) {}\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this.notifySubscribers();\n }\n\n public async append(message: AppendMessage): Promise<void> {\n // add user message\n const userMessageId = generateId();\n const userMessage: UserMessage = {\n id: userMessageId,\n role: \"user\",\n content: message.content,\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(message.parentId, userMessage);\n\n await this.startRun(userMessageId);\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n const id = generateId();\n\n this.repository.resetHead(parentId);\n const messages = this.repository.getMessages();\n\n // add assistant message\n const message: AssistantMessage = {\n id,\n role: \"assistant\",\n status: \"in_progress\",\n content: [{ type: \"text\", text: \"\" }],\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(parentId, { ...message });\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.notifySubscribers();\n\n try {\n const updateHandler = ({ content }: ChatModelRunResult) => {\n message.content = content;\n this.repository.addOrUpdateMessage(parentId, { ...message });\n this.notifySubscribers();\n };\n const result = await this.adapter.run({\n messages,\n abortSignal: this.abortController.signal,\n onUpdate: updateHandler,\n });\n updateHandler(result);\n\n message.status = \"done\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n } catch (e) {\n message.status = \"error\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n console.error(e);\n } finally {\n this.abortController = null;\n this.notifySubscribers();\n }\n }\n\n cancelRun(): void {\n if (!this.abortController) return;\n\n this.abortController.abort();\n this.abortController = null;\n this.notifySubscribers();\n }\n\n private notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","c","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react_primitive","import_react","import_react","import_react_use_callback_ref","import_react","import_jsx_runtime","import_react","import_zustand","import_jsx_runtime","useMessageContext","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react","import_jsx_runtime","TextareaAutosize","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_react","import_zustand","import_react","import_jsx_runtime","useContentPartContext","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react","import_zustand","import_react","convertCallback","import_react","import_zustand","import_react","import_react","vercelToThreadMessage","messages","import_react","import_react","import_react","import_zustand","import_zustand","import_zustand","import_jsx_runtime","onRuntimeUpdate","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/actions/useCopyMessage.tsx","../src/context/MessageContext.ts","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/actions/useReloadMessage.tsx","../src/context/ThreadContext.ts","../src/actions/useBeginMessageEdit.tsx","../src/actions/useGoToNextBranch.tsx","../src/actions/useGoToPreviousBranch.tsx","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/MessageComposer.ts","../src/context/stores/BaseComposer.ts","../src/context/ComposerContext.ts","../src/primitives/composer/ComposerIf.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/primitives/composer/index.ts","../src/primitives/composer/ComposerRoot.tsx","../src/primitives/composer/ComposerInput.tsx","../src/primitives/composer/ComposerSend.tsx","../src/primitives/composer/ComposerCancel.tsx","../src/primitives/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/context/providers/ContentPartProvider.tsx","../src/context/ContentPartContext.ts","../src/primitives/contentPart/ContentPartInProgressIndicator.tsx","../src/primitives/message/MessageContent.tsx","../src/primitives/message/MessageInProgress.tsx","../src/primitives/branchPicker/index.ts","../src/utils/createActionButton.tsx","../src/primitives/branchPicker/BranchPickerNext.tsx","../src/primitives/branchPicker/BranchPickerPrevious.tsx","../src/primitives/branchPicker/BranchPickerCount.tsx","../src/primitives/branchPicker/BranchPickerNumber.tsx","../src/primitives/branchPicker/BranchPickerRoot.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/contentPart/index.ts","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/AssistantProvider.tsx","../src/context/AssistantContext.ts","../src/context/stores/AssistantModelConfig.ts","../src/utils/ModelConfigTypes.ts","../src/utils/ProxyConfigProvider.ts","../src/context/providers/ThreadProvider.tsx","../src/context/stores/Composer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx"],"sourcesContent":["export * from \"./actions\";\nexport * from \"./primitives\";\nexport * from \"./runtime\";\n\nexport type {\n ThreadMessage,\n AssistantMessage,\n UserMessage,\n AppendMessage,\n AssistantContentPart,\n UserContentPart,\n AppendContentPart,\n TextContentPart,\n} from \"./utils/AssistantTypes\";\n\nexport { AssistantRuntimeProvider } from \"./context/providers/AssistantRuntimeProvider\";\n\n// utils\nexport type { Unsubscribe } from \"./utils/Unsubscribe\";\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../utils/getMessageText\";\n\nexport const useCopyMessage = ({ copiedDuration = 3000 }) => {\n const { useMessage, useComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => {\n return c.isEditing || m.message.content.some((c) => c.type === \"text\");\n },\n );\n\n const callback = useCallback(() => {\n const { isEditing, value: composerValue } = useComposer.getState();\n const { message, setIsCopied } = useMessage.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n }, [useComposer, useMessage, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { MessageState } from \"./stores/Message\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type MessageContextValue = {\n useMessage: UseBoundStore<StoreApi<MessageState>>;\n useComposer: UseBoundStore<StoreApi<EditComposerState>>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport const useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />.\",\n );\n return context;\n};\n","\"use client\";\nimport { useMemo } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type { Unsubscribe } from \"../Unsubscribe\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n) => {\n const subscribe = (callback: () => void): Unsubscribe => {\n const unsubscribes = stores.map((store) => store.subscribe(callback));\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n };\n\n return (selector: CombinedSelector<T, R>): R => {\n const getSnapshot = (): R =>\n selector(...(stores.map((store) => store.getState()) as T));\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n","\"use client\";\nimport type { TextContentPart, ThreadMessage } from \"./AssistantTypes\";\n\nexport const getMessageText = (message: ThreadMessage) => {\n const textParts = message.content.filter(\n (part) => part.type === \"text\",\n ) as TextContentPart[];\n\n return textParts.map((part) => part.text).join(\"\\n\\n\");\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useReloadMessage = () => {\n const { useThread, useViewport } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThread.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n }, [useMessage, useThread, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { ThreadState } from \"./stores/Thread\";\nimport type { ThreadViewportState } from \"./stores/ThreadViewport\";\n\nexport type ThreadContextValue = {\n useThread: UseBoundStore<StoreApi<ThreadState>>;\n useComposer: UseBoundStore<StoreApi<ComposerState>>;\n useViewport: UseBoundStore<StoreApi<ThreadViewportState>>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport const useThreadContext = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (!context)\n throw new Error(\"This component must be used within an AssistantRuntimeProvider.\");\n return context;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useBeginMessageEdit = () => {\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useComposer.getState();\n edit();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToNextBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) =>\n c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToPreviousBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ThreadRoot as Root } from \"./ThreadRoot\";\nexport { ThreadEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadIf as If } from \"./ThreadIf\";\nexport { ThreadViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ThreadRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadRootProps = PrimitiveDivProps;\n\nexport const ThreadRoot = forwardRef<ThreadRootElement, ThreadRootProps>(\n (props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n },\n);\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n};\n\ntype ThreadIfProps = PropsWithChildren<RequireAtLeastOne<ThreadIfFilters>>;\n\nconst useThreadIf = (props: RequireAtLeastOne<ThreadIfFilters>) => {\n const { useThread } = useThreadContext();\n return useThread((thread) => {\n if (props.empty === true && thread.messages.length !== 0) return false;\n if (props.empty === false && thread.messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n\n return true;\n });\n};\n\nexport const ThreadIf: FC<ThreadIfProps> = ({ children, ...query }) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { ThreadIf } from \"./ThreadIf\";\n\ntype ThreadEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadEmpty: FC<ThreadEmptyProps> = ({ children }) => {\n return <ThreadIf empty>{children}</ThreadIf>;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ThreadViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadViewportProps = PrimitiveDivProps & {\n autoScroll?: boolean;\n};\n\nexport const ThreadViewport = forwardRef<\n ThreadViewportElement,\n ThreadViewportProps\n>(({ autoScroll = true, onScroll, children, ...rest }, forwardedRef) => {\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n const divRef = useRef<HTMLDivElement>(null);\n const ref = useComposedRefs(forwardedRef, divRef);\n\n const { useViewport } = useThreadContext();\n\n // TODO find a more elegant implementation for this\n\n const firstRenderRef = useRef(true);\n const isScrollingToBottomRef = useRef(false);\n const lastScrollTop = useRef<number>(0);\n\n const scrollToBottom = () => {\n const div = messagesEndRef.current;\n if (!div || !autoScroll) return;\n\n const behavior = firstRenderRef.current ? \"instant\" : \"auto\";\n firstRenderRef.current = false;\n\n isScrollingToBottomRef.current = true;\n div.scrollIntoView({ behavior });\n };\n\n useOnResizeContent(divRef, () => {\n if (!isScrollingToBottomRef.current && !useViewport.getState().isAtBottom) {\n handleScroll();\n } else {\n scrollToBottom();\n }\n });\n\n useOnScrollToBottom(() => {\n scrollToBottom();\n });\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else if (newIsAtBottom !== isAtBottom) {\n isScrollingToBottomRef.current = false;\n useViewport.setState({ isAtBottom: newIsAtBottom });\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n return (\n <Primitive.div\n {...rest}\n onScroll={composeEventHandlers(onScroll, handleScroll)}\n ref={ref}\n >\n {children}\n <div ref={messagesEndRef} />\n </Primitive.div>\n );\n});\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { type MutableRefObject, useEffect } from \"react\";\n\nexport const useOnResizeContent = (\n ref: MutableRefObject<HTMLElement | null>,\n callback: () => void,\n) => {\n const callbackRef = useCallbackRef(callback);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const resizeObserver = new ResizeObserver(() => {\n callbackRef();\n });\n\n const mutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n resizeObserver.observe(node);\n }\n }\n\n for (const node of mutation.removedNodes) {\n if (node instanceof Element) {\n resizeObserver.unobserve(node);\n }\n }\n }\n\n callbackRef();\n });\n\n resizeObserver.observe(el);\n mutationObserver.observe(el, { childList: true });\n\n // Observe existing children\n for (const child of el.children) {\n resizeObserver.observe(child);\n }\n\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [ref.current, callbackRef]);\n};\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\nexport const useOnScrollToBottom = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useViewport } = useThreadContext();\n useEffect(() => {\n return useViewport.getState().onScrollToBottom(() => {\n callbackRef();\n });\n }, [useViewport, callbackRef]);\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport type {\n AppendContentPart,\n ThreadMessage,\n} from \"../../utils/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../MessageContext\";\nimport type { MessageContextValue } from \"../MessageContext\";\nimport { useThreadContext } from \"../ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/MessageComposer\";\nimport type { ThreadState } from \"../stores/Thread\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (thread: ThreadState, message: ThreadMessage) => {\n return thread.messages[thread.messages.length - 1]?.id === message.id;\n};\n\nconst syncMessage = (\n thread: ThreadState,\n useMessage: MessageContextValue[\"useMessage\"],\n messageIndex: number,\n) => {\n const parentId = thread.messages[messageIndex - 1]?.id ?? null;\n const message = thread.messages[messageIndex];\n\n // TODO check if this can happen\n if (!message) return;\n\n const isLast = getIsLast(thread, message);\n const branches = thread.getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage.getState();\n if (\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return;\n\n // sync useMessage\n useMessage.setState({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThread } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>((set) => ({\n message: null as unknown as ThreadMessage,\n parentId: null,\n branches: [],\n isLast: false,\n inProgressIndicator: null,\n isCopied: false,\n isHovering: false,\n setInProgressIndicator: (value) => {\n set({ inProgressIndicator: value });\n },\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n\n const useComposer = makeEditComposerStore({\n onEdit: () => {\n const message = useMessage.getState().message;\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const text = getMessageText(message);\n\n return text;\n },\n onSend: (text) => {\n const { message, parentId } = useMessage.getState();\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const nonTextParts = message.content.filter(\n (part): part is AppendContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThread.getState().append({\n parentId,\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n syncMessage(useThread.getState(), useMessage, messageIndex);\n\n return { useMessage, useComposer };\n });\n\n useEffect(() => {\n return useThread.subscribe((thread) => {\n syncMessage(thread, context.useMessage, messageIndex);\n });\n }, [context, useThread, messageIndex]);\n\n return context;\n};\n\nexport const MessageProvider: FC<MessageProviderProps> = ({\n messageIndex,\n children,\n}) => {\n const context = useMessageContext(messageIndex);\n\n return (\n <MessageContext.Provider value={context}>\n {children}\n </MessageContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): UseBoundStore<StoreApi<EditComposerState>> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false });\n onSend(value);\n },\n cancel: () => {\n if (!get().isEditing) return false;\n set({ isEditing: false });\n return true;\n },\n }));\n","import type { StateCreator } from \"zustand\";\n\nexport type BaseComposerState = Readonly<{\n value: string;\n setValue: (value: string) => void;\n}>;\n\nexport const makeBaseComposer: StateCreator<\n BaseComposerState,\n [],\n [],\n BaseComposerState\n> = (set) => ({\n value: \"\",\n setValue: (value) => {\n set({ value });\n },\n});\n","import { useContext, useMemo } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport { MessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type ComposerContextValue = {\n useComposer: UseBoundStore<StoreApi<EditComposerState | ComposerState>>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useComposer: useEditComposer } = useContext(MessageContext) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as UseBoundStore<\n StoreApi<EditComposerState | ComposerState>\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\ntype ComposerIfProps = PropsWithChildren<RequireAtLeastOne<ComposerIfFilters>>;\n\nconst useComposerIf = (props: RequireAtLeastOne<ComposerIfFilters>) => {\n const { useComposer } = useComposerContext();\n return useComposer((composer) => {\n if (props.editing === true && !composer.isEditing) return false;\n if (props.editing === false && composer.isEditing) return false;\n\n return true;\n });\n};\n\nexport const ComposerIf: FC<ComposerIfProps> = ({ children, ...query }) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\n\ntype MessageIfProps = RequireAtLeastOne<MessageIfFilters> & {\n children: ReactNode;\n};\n\nexport const useMessageIf = (props: RequireAtLeastOne<MessageIfFilters>) => {\n const { useMessage } = useMessageContext();\n\n return useMessage(({ message, branches, isLast, isCopied, isHovering }) => {\n if (props.hasBranches === true && branches.length < 2) return false;\n\n if (props.user && message.role !== \"user\") return false;\n if (props.assistant && message.role !== \"assistant\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n return true;\n });\n};\n\nexport const MessageIf: FC<MessageIfProps> = ({ children, ...query }) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { ComponentType, FC } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerIf } from \"../composer/ComposerIf\";\nimport { MessageIf } from \"../message/MessageIf\";\n\ntype ThreadMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage?: ComponentType;\n }\n | {\n Message?: ComponentType;\n UserMessage: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage: ComponentType;\n };\n};\n\nconst getComponents = (components: ThreadMessagesProps[\"components\"]) => {\n return {\n EditComposer:\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType),\n UserMessage:\n components.UserMessage ?? (components.Message as ComponentType),\n AssistantMessage:\n components.AssistantMessage ?? (components.Message as ComponentType),\n };\n};\n\nexport const ThreadMessages: FC<ThreadMessagesProps> = ({ components }) => {\n const { useThread } = useThreadContext();\n const messagesLength = useThread((t) => t.messages.length);\n\n const { UserMessage, EditComposer, AssistantMessage } =\n getComponents(components);\n\n if (messagesLength === 0) return null;\n\n return (\n <>\n {new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx;\n // TODO avoid rerendering on messageLength change\n return (\n <MessageProvider\n key={messageIndex} // keep the same key when switching branches for better a11y support\n messageIndex={messageIndex}\n >\n <MessageIf user>\n <ComposerIf editing={false}>\n <UserMessage />\n </ComposerIf>\n <ComposerIf editing>\n <EditComposer />\n </ComposerIf>\n </MessageIf>\n <MessageIf assistant>\n <AssistantMessage />\n </MessageIf>\n </MessageProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadScrollToBottomElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadScrollToBottomProps = PrimitiveButtonProps;\n\nexport const ThreadScrollToBottom = forwardRef<\n ThreadScrollToBottomElement,\n ThreadScrollToBottomProps\n>(({ onClick, ...rest }, ref) => {\n const { useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n const handleScrollToBottom = () => {\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isAtBottom}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleScrollToBottom)}\n />\n );\n});\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadSuggestionElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadSuggestionProps = PrimitiveButtonProps & {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean;\n};\n\nexport const ThreadSuggestion = forwardRef<\n ThreadSuggestionElement,\n ThreadSuggestionProps\n>(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {\n const { useThread, useComposer } = useThreadContext();\n\n const isDisabled = useThread((t) => t.isRunning);\n const handleApplySuggestion = () => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n composer.setValue(prompt);\n\n if (send && !thread.isRunning) {\n composer.send();\n }\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isDisabled}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleApplySuggestion)}\n />\n );\n});\n","export { ComposerRoot as Root } from \"./ComposerRoot\";\nexport { ComposerInput as Input } from \"./ComposerInput\";\nexport { ComposerSend as Send } from \"./ComposerSend\";\nexport { ComposerCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, type FormEvent, forwardRef, useRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ComposerRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\ntype ComposerRootProps = PrimitiveFormProps;\n\nexport const ComposerRoot = forwardRef<ComposerRootElement, ComposerRootProps>(\n ({ onSubmit, ...rest }, forwardedRef) => {\n const { useViewport } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const formRef = useRef<HTMLFormElement>(null);\n const ref = useComposedRefs(forwardedRef, formRef);\n\n const handleSubmit = (e: FormEvent) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n e.preventDefault();\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={ref}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n} from \"react-textarea-autosize\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ComposerInputProps = TextareaAutosizeProps & {\n asChild?: boolean;\n};\n\nexport const ComposerInput = forwardRef<\n HTMLTextAreaElement,\n ComposerInputProps\n>(\n (\n { autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest },\n forwardedRef,\n ) => {\n const { useThread, useViewport } = useThreadContext();\n const { useComposer, type } = useComposerContext();\n\n const value = useComposer((c) => {\n if (!c.isEditing) return \"\";\n return c.value;\n });\n\n const Component = asChild ? Slot : TextareaAutosize;\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (disabled) return;\n\n const composer = useComposer.getState();\n if (e.key === \"Escape\") {\n if (useComposer.getState().cancel()) {\n e.preventDefault();\n }\n } else if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n composer.send();\n\n useViewport.getState().scrollToBottom();\n }\n }\n };\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n const autoFocusEnabled = autoFocus && !disabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus();\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n value={value}\n {...rest}\n ref={ref}\n disabled={disabled}\n onChange={composeEventHandlers(onChange, (e) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n return composerState.setValue(e.target.value);\n })}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyPress)}\n />\n );\n },\n);\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerSendProps = PrimitiveFormProps;\n\nexport const ComposerSend = forwardRef<ComposerSendElement, ComposerSendProps>(\n ({ disabled, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);\n\n return (\n <Primitive.button\n type=\"submit\"\n {...rest}\n ref={ref}\n disabled={disabled || !hasValue}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerCancelElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerCancelProps = PrimitiveFormProps;\n\nexport const ComposerCancel = forwardRef<\n ComposerCancelElement,\n ComposerCancelProps\n>(({ onClick, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n\n const handleCancel = () => {\n useComposer.getState().cancel();\n };\n\n return (\n <Primitive.button\n type=\"button\"\n {...rest}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleCancel)}\n />\n );\n});\n","export { MessageRoot as Root } from \"./MessageRoot\";\nexport { MessageIf as If } from \"./MessageIf\";\nexport { MessageContent as Content } from \"./MessageContent\";\nexport { MessageInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype MessageRootProps = PrimitiveDivProps;\n\nexport const MessageRoot = forwardRef<MessageRootElement, MessageRootProps>(\n ({ onMouseEnter, onMouseLeave, ...rest }, ref) => {\n const { useMessage } = useMessageContext();\n const setIsHovering = useMessage((s) => s.setIsHovering);\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n return (\n <Primitive.div\n {...rest}\n ref={ref}\n onMouseEnter={composeEventHandlers(onMouseEnter, handleMouseEnter)}\n onMouseLeave={composeEventHandlers(onMouseLeave, handleMouseLeave)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { ContentPartContext } from \"../ContentPartContext\";\nimport type { ContentPartContextValue } from \"../ContentPartContext\";\nimport { useMessageContext } from \"../MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst syncContentPart = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"],\n partIndex: number,\n) => {\n const part = message.content[partIndex];\n // TODO check if this can happen\n if (!part) return;\n\n const messageStatus = message.role === \"assistant\" ? message.status : \"done\";\n const status =\n partIndex === message.content.length - 1 ? messageStatus : \"done\";\n\n useContentPart.setState({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(() => ({\n part: { type: \"text\", text: \"\" },\n status: \"done\",\n }));\n\n syncContentPart(useMessage.getState(), useContentPart, partIndex);\n\n return { useContentPart };\n });\n\n useEffect(() => {\n return useMessage.subscribe((message) => {\n syncContentPart(message, context.useContentPart, partIndex);\n });\n }, [context, useMessage, partIndex]);\n\n return context;\n};\n\nexport const ContentPartProvider: FC<ContentPartProviderProps> = ({\n partIndex,\n children,\n}) => {\n const context = useContentPartContext(partIndex);\n\n return (\n <ContentPartContext.Provider value={context}>\n {children}\n </ContentPartContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ContentPartState } from \"./stores/ContentPart\";\n\nexport type ContentPartContextValue = {\n useContentPart: UseBoundStore<StoreApi<ContentPartState>>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport const useContentPartContext = (): ContentPartContextValue => {\n const context = useContext(ContentPartContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >.\",\n );\n return context;\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const ContentPartInProgressIndicator: FC = () => {\n const { useMessage } = useMessageContext();\n const { useContentPart } = useContentPartContext();\n\n const indicator = useCombinedStore([useMessage, useContentPart], (m, c) =>\n c.status === \"in_progress\" ? m.inProgressIndicator : null,\n );\n return indicator;\n};\n","\"use client\";\n\nimport type { ComponentType, FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { ContentPartProvider } from \"../../context/providers/ContentPartProvider\";\nimport type {\n ImageContentPart,\n TextContentPart,\n ToolCallContentPart,\n UIContentPart,\n} from \"../../utils/AssistantTypes\";\nimport { ContentPartInProgressIndicator } from \"../contentPart/ContentPartInProgressIndicator\";\n\ntype MessageContentProps = {\n components?: {\n Text?: ComponentType<{ part: TextContentPart }>;\n Image?: ComponentType<{ part: ImageContentPart }>;\n UI?: ComponentType<{ part: UIContentPart }>;\n tools?: {\n by_name?: Record<string, ComponentType<{ part: ToolCallContentPart }>>;\n Fallback?: ComponentType<{ part: ToolCallContentPart }>;\n };\n };\n};\n\nconst defaultComponents = {\n Text: ({ part }) => (\n <>\n {part.text}\n <ContentPartInProgressIndicator />\n </>\n ),\n Image: () => null,\n UI: ({ part }) => part.display,\n tools: {\n Fallback: () => null,\n },\n} satisfies MessageContentProps[\"components\"];\n\nexport const MessageContent: FC<MessageContentProps> = ({\n components: {\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useMessage } = useMessageContext();\n\n const message = useMessage((s) => s.message);\n const content = message.content;\n\n return (\n <>\n {content.map((part, i) => {\n const partIndex = i; // use the index as key, as message is generally append only\n\n const type = part.type;\n let component: ReactNode | null = null;\n switch (type) {\n case \"text\":\n component = <Text part={part} />;\n break;\n\n case \"image\":\n component = <Image part={part} />;\n break;\n case \"ui\":\n component = <UI part={part} />;\n break;\n case \"tool-call\": {\n const Tool = by_name[part.name] || Fallback;\n component = <Tool part={part} />;\n break;\n }\n default:\n throw new Error(`Unknown content part type: ${type}`);\n }\n\n return (\n <ContentPartProvider key={partIndex} partIndex={partIndex}>\n {component}\n </ContentPartProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useMemo } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageInProgressElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype MessageInProgressProps = PrimitiveSpanProps;\n\nexport const MessageInProgress = forwardRef<\n MessageInProgressElement,\n MessageInProgressProps\n>((props, ref) => {\n const { useMessage } = useMessageContext();\n\n useMemo(() => {\n useMessage\n .getState()\n .setInProgressIndicator(<Primitive.span {...props} ref={ref} />);\n }, [useMessage, props, ref]);\n\n return null;\n});\n","export { BranchPickerNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\nexport const createActionButton = <TProps,>(\n useActionButton: ActionButtonCallback<TProps>,\n) => {\n type PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\n type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\n return forwardRef<PrimitiveButtonElement, PrimitiveButtonProps & TProps>(\n (props, forwardedRef) => {\n const onClick = useActionButton(props);\n\n return (\n <Primitive.button\n type=\"button\"\n disabled={!onClick}\n {...props}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, onClick ?? undefined)}\n />\n );\n },\n );\n};\n","\"use client\";\n\nimport { useGoToNextBranch } from \"../../actions/useGoToNextBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerNext = createActionButton(useGoToNextBranch);\n","\"use client\";\n\nimport { useGoToPreviousBranch } from \"../../actions/useGoToPreviousBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerPrevious = createActionButton(useGoToPreviousBranch);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerCount: FC = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return <>{branchCount}</>;\n};\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerNumber: FC = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return <>{branchIdx + 1}</>;\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype BranchPickerRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean;\n};\n\nexport const BranchPickerRoot = forwardRef<\n BranchPickerRootElement,\n BranchPickerRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n","export { ActionBarRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ActionBarRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nenum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type ActionBarRootProps = PrimitiveDivProps & {\n hideWhenRunning?: boolean;\n autohide?: \"always\" | \"not-last\" | \"never\";\n autohideFloat?: \"always\" | \"single-branch\" | \"never\";\n};\n\nexport const ActionBarRoot = forwardRef<\n ActionBarRootElement,\n ActionBarRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const { useThread } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const hideAndfloatStatus = useCombinedStore(\n [useThread, useMessage],\n (t, m) => {\n if (hideWhenRunning && t.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !m.isLast);\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!m.isHovering) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && m.branches.length <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n },\n );\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n data-floating={hideAndfloatStatus === HideAndFloatStatus.Floating}\n {...rest}\n ref={ref}\n />\n );\n});\n","\"use client\";\n\nimport { useCopyMessage } from \"../../actions/useCopyMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\ntype ActionBarCopyProps = {\n copiedDuration?: number;\n};\n\nexport const ActionBarCopy =\n createActionButton<ActionBarCopyProps>(useCopyMessage);\n","\"use client\";\n\nimport { useReloadMessage } from \"../../actions/useReloadMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarReload = createActionButton(useReloadMessage);\n","\"use client\";\n\nimport { useBeginMessageEdit } from \"../../actions/useBeginMessageEdit\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarEdit = createActionButton(useBeginMessageEdit);\n","export { ContentPartInProgressIndicator as InProgressIndicator } from \"./ContentPartInProgressIndicator\";\n","import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime/core/AssistantRuntime\";\nimport { AssistantProvider } from \"./AssistantProvider\";\n\ntype AssistantRuntimeProviderProps = {\n runtime: AssistantRuntime;\n};\n\nconst AssistantRuntimeProviderImpl: FC<\n PropsWithChildren<AssistantRuntimeProviderProps>\n> = ({ children, runtime }) => {\n return <AssistantProvider runtime={runtime}>{children}</AssistantProvider>;\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime\";\nimport { AssistantContext } from \"../AssistantContext\";\nimport { makeAssistantModelConfigStore } from \"../stores/AssistantModelConfig\";\nimport { ThreadProvider } from \"./ThreadProvider\";\n\ntype AssistantProviderProps = {\n runtime: AssistantRuntime;\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<AssistantProviderProps>\n> = ({ children, runtime }) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [context] = useState(() => {\n const useModelConfig = makeAssistantModelConfigStore();\n\n return { useModelConfig };\n });\n\n const getModelCOnfig = context.useModelConfig((c) => c.getModelConfig);\n useEffect(() => {\n return runtime.registerModelConfigProvider(getModelCOnfig);\n }, [runtime, getModelCOnfig]);\n\n return (\n <AssistantContext.Provider value={context}>\n <ThreadProvider runtime={runtime}>{children}</ThreadProvider>\n </AssistantContext.Provider>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { AssistantModelConfigState } from \"./stores/AssistantModelConfig\";\n\nexport type AssistantContextValue = {\n useModelConfig: UseBoundStore<StoreApi<AssistantModelConfigState>>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport const useAssistantContext = (): AssistantContextValue => {\n const context = useContext(AssistantContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ModelConfigProvider } from \"../../utils/ModelConfigTypes\";\nimport { ProxyConfigProvider } from \"../../utils/ProxyConfigProvider\";\n\nexport type AssistantModelConfigState = {\n getModelConfig: ModelConfigProvider;\n registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;\n};\n\nexport const makeAssistantModelConfigStore = () =>\n create<AssistantModelConfigState>(() => {\n const proxy = new ProxyConfigProvider();\n\n return {\n getModelConfig: () => {\n return proxy.getModelConfig();\n },\n registerModelConfigProvider: (provider: ModelConfigProvider) => {\n return proxy.registerModelConfigProvider(provider);\n },\n } satisfies AssistantModelConfigState;\n });\n","\"use client\";\nimport type { z } from \"zod\";\n\nexport type Tool<TArgs> = {\n description: string;\n parameters: z.ZodSchema<TArgs>;\n execute: (args: TArgs) => unknown; // TODO return type\n};\n\nexport type ModelConfig = {\n system?: string;\n // biome-ignore lint/suspicious/noExplicitAny: TODO\n tools?: Record<string, Tool<any>>;\n};\n\nexport type ModelConfigProvider = () => ModelConfig;\n\nexport const mergeModelConfigs = (configs: ModelConfig[]): ModelConfig => {\n return configs.reduce((acc, config) => {\n if (config.system) {\n if (acc.system) {\n // TODO should the separator be configurable?\n acc.system += `\\n\\n${config.system}`;\n } else {\n acc.system = config.system;\n }\n }\n if (config.tools) {\n acc.tools = { ...acc.tools, ...config.tools };\n }\n return acc;\n }, {} as ModelConfig);\n};\n","\"use client\";\nimport {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"./ModelConfigTypes\";\n\nexport class ProxyConfigProvider {\n private _providers = new Set<ModelConfigProvider>();\n\n getModelConfig() {\n return mergeModelConfigs([...this._providers].map((p) => p()));\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._providers.add(provider);\n return () => {\n this._providers.delete(provider);\n };\n }\n}\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtime/core/ReactThreadRuntime\";\nimport type { ThreadRuntime } from \"../../runtime/core/ThreadRuntime\";\nimport type { ThreadContextValue } from \"../ThreadContext\";\nimport { ThreadContext } from \"../ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\n\ntype ThreadProviderProps = {\n runtime: ThreadRuntime;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n runtime,\n}) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [{ context, onRuntimeUpdate }] = useState(() => {\n const { useThread, onRuntimeUpdate } = makeThreadStore(runtimeRef);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThread);\n\n return {\n context: {\n useViewport,\n useThread,\n useComposer,\n } satisfies ThreadContextValue,\n onRuntimeUpdate,\n };\n });\n\n useEffect(() => {\n // whenever the runtime changes\n onRuntimeUpdate();\n\n // subscribe to runtime updates\n return runtime.subscribe(onRuntimeUpdate);\n }, [onRuntimeUpdate, runtime]);\n\n const RuntimeSynchronizer = (runtime as ReactThreadRuntime)\n .unstable_synchronizer;\n\n return (\n <ThreadContext.Provider value={context}>\n {RuntimeSynchronizer && <RuntimeSynchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport type { ThreadState } from \"./Thread\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n isEditing: true;\n\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeComposerStore = (\n useThread: StoreApi<ThreadState>,\n): UseBoundStore<StoreApi<ComposerState>> =>\n create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThread.getState().append({\n parentId: useThread.getState().messages.at(-1)?.id ?? null,\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n const thread = useThread.getState();\n if (!thread.isRunning) return false;\n\n useThread.getState().cancelRun();\n return true;\n },\n };\n });\n","import type { MutableRefObject } from \"react\";\nimport { create } from \"zustand\";\nimport type { AppendMessage, ThreadMessage } from \"../../utils/AssistantTypes\";\n\nexport type ThreadState = {\n messages: readonly ThreadMessage[];\n isRunning: boolean;\n\n getBranches: (messageId: string) => readonly string[];\n switchToBranch: (branchId: string) => void;\n\n append: (message: AppendMessage) => void;\n startRun: (parentId: string | null) => void;\n cancelRun: () => void;\n};\n\nexport const makeThreadStore = (runtimeRef: MutableRefObject<ThreadState>) => {\n const useThread = create<ThreadState>(() => ({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n getBranches: (messageId) => runtimeRef.current.getBranches(messageId),\n switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),\n startRun: (parentId) => runtimeRef.current.startRun(parentId),\n append: (message) => runtimeRef.current.append(message),\n cancelRun: () => runtimeRef.current.cancelRun(),\n }));\n\n const onRuntimeUpdate = () => {\n useThread.setState({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n });\n };\n\n return {\n useThread,\n onRuntimeUpdate,\n };\n};\n","\"use client\";\nimport { create } from \"zustand\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\n\nexport type ThreadViewportState = {\n isAtBottom: boolean;\n scrollToBottom: () => void;\n onScrollToBottom: (callback: () => void) => Unsubscribe;\n};\n\nexport const makeThreadViewportStore = () => {\n const scrollToBottomListeners = new Set<() => void>();\n\n return create<ThreadViewportState>(() => ({\n isAtBottom: true,\n scrollToBottom: () => {\n for (const listener of scrollToBottomListeners) {\n listener();\n }\n },\n onScrollToBottom: (callback) => {\n scrollToBottomListeners.add(callback);\n return () => {\n scrollToBottomListeners.delete(callback);\n };\n },\n }));\n};\n"],"mappings":"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","names":["import_react","import_react","import_react","c","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react_primitive","import_react","import_react","import_react_use_callback_ref","import_react","import_jsx_runtime","import_react","import_zustand","import_jsx_runtime","useMessageContext","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react","import_jsx_runtime","TextareaAutosize","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_react","import_zustand","import_react","import_jsx_runtime","useContentPartContext","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react","import_react","import_react","import_zustand","import_react","import_zustand","import_zustand","import_zustand","import_jsx_runtime","onRuntimeUpdate","import_jsx_runtime","import_jsx_runtime"]}