@assistant-ui/react 0.5.20 → 0.5.22

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/AssistantProvider.tsx","../src/context/react/AssistantContext.ts","../src/context/stores/AssistantModelConfig.ts","../src/types/ModelConfigTypes.ts","../src/utils/ProxyConfigProvider.ts","../src/context/stores/AssistantToolUIs.ts","../src/context/providers/ThreadProvider.tsx","../src/context/react/ThreadContext.ts","../src/context/stores/Composer.ts","../src/context/stores/BaseComposer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx","../src/context/stores/ThreadActions.ts","../src/context/stores/ThreadMessages.ts","../src/context/stores/ThreadRuntime.tsx","../src/utils/hooks/useManagedRef.ts","../src/context/stores/AssistantActions.tsx","../src/context/react/ComposerContext.ts","../src/context/react/MessageContext.ts","../src/context/react/ContentPartContext.ts","../src/hooks/useAppendMessage.tsx","../src/hooks/useSwitchToNewThread.tsx","../src/model-config/useAssistantTool.tsx","../src/model-config/makeAssistantTool.tsx","../src/model-config/useAssistantToolUI.tsx","../src/model-config/makeAssistantToolUI.tsx","../src/model-config/useAssistantInstructions.tsx","../src/primitive-hooks/actionBar/useActionBarCopy.tsx","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/primitive-hooks/actionBar/useActionBarEdit.tsx","../src/primitive-hooks/actionBar/useActionBarReload.tsx","../src/primitive-hooks/branchPicker/useBranchPickerCount.tsx","../src/primitive-hooks/branchPicker/useBranchPickerNext.tsx","../src/primitive-hooks/branchPicker/useBranchPickerNumber.tsx","../src/primitive-hooks/branchPicker/useBranchPickerPrevious.tsx","../src/primitive-hooks/composer/useComposerCancel.tsx","../src/primitive-hooks/composer/useComposerIf.tsx","../src/primitive-hooks/composer/useComposerSend.tsx","../src/primitive-hooks/contentPart/useContentPartDisplay.tsx","../src/primitive-hooks/contentPart/useContentPartImage.tsx","../src/primitive-hooks/contentPart/useContentPartText.tsx","../src/primitive-hooks/message/useMessageIf.tsx","../src/primitive-hooks/thread/useThreadIf.tsx","../src/primitive-hooks/thread/useThreadEmpty.tsx","../src/primitive-hooks/thread/useThreadScrollToBottom.tsx","../src/primitive-hooks/thread/useThreadSuggestion.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/useActionBarFloatStatus.tsx","../src/utils/createActionButton.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/assistantModal/index.ts","../src/primitives/assistantModal/AssistantModalRoot.tsx","../src/utils/hooks/useOnComposerFocus.tsx","../src/primitives/assistantModal/scope.tsx","../src/primitives/assistantModal/AssistantModalTrigger.tsx","../src/primitives/assistantModal/AssistantModalContent.tsx","../src/primitives/assistantModal/AssistantModalAnchor.tsx","../src/primitives/branchPicker/index.ts","../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/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/message/MessageContent.tsx","../src/context/providers/ContentPartProvider.tsx","../src/primitives/contentPart/ContentPartText.tsx","../src/utils/smooth/useSmooth.tsx","../src/utils/smooth/SmoothContext.tsx","../src/primitives/contentPart/ContentPartImage.tsx","../src/primitives/contentPart/ContentPartDisplay.tsx","../src/primitives/contentPart/ContentPartInProgress.tsx","../src/primitives/message/MessageInProgress.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/composer/ComposerIf.tsx","../src/primitives/contentPart/index.ts","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/EditComposer.ts","../src/context/stores/MessageUtils.ts","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/runtimes/local/useLocalRuntime.tsx","../src/runtimes/core/BaseAssistantRuntime.tsx","../src/internal.ts","../src/utils/idUtils.tsx","../src/runtimes/edge/converters/fromCoreMessage.ts","../src/runtimes/utils/MessageRepository.tsx","../src/ui/base/tooltip-icon-button.tsx","../src/ui/base/tooltip.tsx","../src/ui/utils/withDefaults.tsx","../src/ui/base/button.tsx","../src/runtimes/edge/converters/toLanguageModelMessages.ts","../src/runtimes/edge/converters/fromLanguageModelMessages.ts","../src/runtimes/edge/converters/toCoreMessages.ts","../src/runtimes/edge/converters/fromLanguageModelTools.ts","../src/runtimes/edge/converters/toLanguageModelTools.ts","../src/runtimes/edge/useEdgeRuntime.ts","../src/runtimes/edge/streams/assistantDecoderStream.ts","../src/runtimes/edge/streams/chunkByLineStream.ts","../src/runtimes/edge/partial-json/parse-partial-json.ts","../src/runtimes/edge/partial-json/fix-json.ts","../src/runtimes/edge/streams/runResultStream.ts","../src/runtimes/edge/streams/toolResultStream.ts","../src/runtimes/edge/EdgeChatAdapter.ts","../src/runtimes/local/shouldContinue.tsx","../src/runtimes/local/LocalThreadRuntime.tsx","../src/runtimes/local/LocalRuntime.tsx","../src/runtimes/external-store/ExternalStoreThreadRuntime.tsx","../src/runtimes/external-store/getExternalStoreMessage.tsx","../src/runtimes/external-store/useExternalStoreSync.tsx","../src/runtimes/external-store/ThreadMessageConverter.ts","../src/runtimes/external-store/auto-status.tsx","../src/runtimes/external-store/ThreadMessageLike.tsx","../src/runtimes/external-store/ExternalStoreRuntime.tsx","../src/runtimes/external-store/useExternalStoreRuntime.tsx","../src/ui/thread-config.tsx","../src/ui/assistant-action-bar.tsx","../src/ui/assistant-message.tsx","../src/ui/branch-picker.tsx","../src/ui/base/avatar.tsx","../src/ui/content-part.tsx","../src/ui/assistant-modal.tsx","../src/ui/thread.tsx","../src/ui/composer.tsx","../src/ui/base/CircleStopIcon.tsx","../src/ui/thread-welcome.tsx","../src/ui/user-message.tsx","../src/ui/user-action-bar.tsx","../src/ui/edit-composer.tsx"],"sourcesContent":["export * from \"./context\";\nexport * from \"./hooks\";\nexport * from \"./model-config\";\nexport * from \"./primitive-hooks\";\nexport * from \"./primitives\";\nexport * from \"./runtimes\";\nexport * from \"./types\";\nexport * from \"./ui\";\n\n/**\n * @deprecated Use `@assistant-ui/react/internal` instead. This will be removed in 0.6.0.\n */\nexport * as INTERNAL from \"./internal\";\n","import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtimes/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","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { AssistantRuntime } from \"../../runtimes\";\nimport { AssistantContext } from \"../react/AssistantContext\";\nimport { makeAssistantModelConfigStore } from \"../stores/AssistantModelConfig\";\nimport { makeAssistantToolUIsStore } from \"../stores/AssistantToolUIs\";\nimport { ThreadProvider } from \"./ThreadProvider\";\nimport { makeAssistantActionsStore } from \"../stores/AssistantActions\";\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 const useToolUIs = makeAssistantToolUIsStore();\n const useAssistantActions = makeAssistantActionsStore(runtimeRef);\n\n return { useModelConfig, useToolUIs, useAssistantActions };\n });\n\n const getModelConfig = context.useModelConfig();\n useEffect(() => {\n return runtime.registerModelConfigProvider(getModelConfig);\n }, [runtime, getModelConfig]);\n\n return (\n <AssistantContext.Provider value={context}>\n <ThreadProvider provider={runtime}>{children}</ThreadProvider>\n </AssistantContext.Provider>\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { AssistantModelConfigState } from \"../stores/AssistantModelConfig\";\nimport type { AssistantToolUIsState } from \"../stores/AssistantToolUIs\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { AssistantActionsState } from \"../stores/AssistantActions\";\n\nexport type AssistantContextValue = {\n useModelConfig: ReadonlyStore<AssistantModelConfigState>;\n useToolUIs: ReadonlyStore<AssistantToolUIsState>;\n useAssistantActions: ReadonlyStore<AssistantActionsState>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport function useAssistantContext(): AssistantContextValue;\nexport function useAssistantContext(options: {\n optional: true;\n}): AssistantContextValue | null;\nexport function useAssistantContext(options?: { optional: true }) {\n const context = useContext(AssistantContext);\n if (!options?.optional && !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 \"../../types/ModelConfigTypes\";\nimport { ProxyConfigProvider } from \"../../utils/ProxyConfigProvider\";\n\nexport type AssistantModelConfigState = Readonly<\n ModelConfigProvider & {\n registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;\n }\n>;\n\nexport const makeAssistantModelConfigStore = () =>\n create<AssistantModelConfigState>(() => {\n const proxy = new ProxyConfigProvider();\n\n return Object.freeze({\n getModelConfig: () => {\n return proxy.getModelConfig();\n },\n registerModelConfigProvider: (provider: ModelConfigProvider) => {\n return proxy.registerModelConfigProvider(provider);\n },\n }) satisfies AssistantModelConfigState;\n });\n","import { z } from \"zod\";\nimport type { JSONSchema7 } from \"json-schema\";\n\nexport const LanguageModelV1CallSettingsSchema = z.object({\n maxTokens: z.number().int().positive().optional(),\n temperature: z.number().optional(),\n topP: z.number().optional(),\n presencePenalty: z.number().optional(),\n frequencyPenalty: z.number().optional(),\n seed: z.number().int().optional(),\n headers: z.record(z.string().optional()).optional(),\n});\n\nexport type LanguageModelV1CallSettings = z.infer<\n typeof LanguageModelV1CallSettingsSchema\n>;\n\nexport const LanguageModelConfigSchema = z.object({\n apiKey: z.string().optional(),\n baseUrl: z.string().optional(),\n modelName: z.string().optional(),\n});\n\nexport type LanguageModelConfig = z.infer<typeof LanguageModelConfigSchema>;\n\ntype ToolExecuteFunction<TArgs, TResult> = (\n args: TArgs,\n) => TResult | Promise<TResult>;\n\nexport type Tool<\n TArgs extends Record<string, unknown> = Record<string | number, unknown>,\n TResult = unknown,\n> = {\n description?: string | undefined;\n parameters: z.ZodSchema<TArgs> | JSONSchema7;\n execute?: ToolExecuteFunction<TArgs, TResult>;\n};\n\nexport type ModelConfig = {\n priority?: number | undefined;\n system?: string | undefined;\n tools?: Record<string, Tool<any, any>> | undefined;\n callSettings?: LanguageModelV1CallSettings | undefined;\n config?: LanguageModelConfig | undefined;\n};\n\nexport type ModelConfigProvider = { getModelConfig: () => ModelConfig };\n\nexport const mergeModelConfigs = (\n configSet: Set<ModelConfigProvider>,\n): ModelConfig => {\n const configs = Array.from(configSet)\n .map((c) => c.getModelConfig())\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\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 for (const [name, tool] of Object.entries(config.tools)) {\n if (acc.tools?.[name]) {\n throw new Error(\n `You tried to define a tool with the name ${name}, but it already exists.`,\n );\n }\n if (!acc.tools) acc.tools = {};\n acc.tools[name] = tool;\n }\n }\n if (config.config) {\n acc.config = {\n ...acc.config,\n ...config.config,\n };\n }\n if (config.callSettings) {\n acc.callSettings = {\n ...acc.callSettings,\n ...config.callSettings,\n };\n }\n return acc;\n }, {} as ModelConfig);\n};\n","\"use client\";\nimport {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"../types/ModelConfigTypes\";\n\nexport class ProxyConfigProvider implements ModelConfigProvider {\n private _providers = new Set<ModelConfigProvider>();\n\n getModelConfig() {\n return mergeModelConfigs(this._providers);\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._providers.add(provider);\n return () => {\n this._providers.delete(provider);\n };\n }\n}\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ToolCallContentPartComponent } from \"../../types/ContentPartComponentTypes\";\n\nexport type AssistantToolUIsState = Readonly<{\n getToolUI: (toolName: string) => ToolCallContentPartComponent | null;\n setToolUI: (\n toolName: string,\n render: ToolCallContentPartComponent,\n ) => () => void;\n}>;\n\nexport const makeAssistantToolUIsStore = () =>\n create<AssistantToolUIsState>((set) => {\n const renderers = new Map<string, ToolCallContentPartComponent[]>();\n\n return Object.freeze({\n getToolUI: (name) => {\n const arr = renderers.get(name);\n const last = arr?.at(-1);\n if (last) return last;\n return null;\n },\n setToolUI: (name, render) => {\n let arr = renderers.get(name);\n if (!arr) {\n arr = [];\n renderers.set(name, arr);\n }\n arr.push(render);\n set({}); // notify the store listeners\n\n return () => {\n const index = arr.indexOf(render);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n if (index === arr.length) {\n set({}); // notify the store listeners\n }\n };\n },\n }) satisfies AssistantToolUIsState;\n });\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useCallback, useInsertionEffect, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtimes/core/ReactThreadRuntime\";\nimport type { ThreadContextValue } from \"../react/ThreadContext\";\nimport { ThreadContext } from \"../react/ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { ThreadState, makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\nimport { makeThreadActionStore } from \"../stores/ThreadActions\";\nimport { StoreApi } from \"zustand\";\nimport {\n ThreadMessagesState,\n makeThreadMessagesStore,\n} from \"../stores/ThreadMessages\";\nimport { ThreadRuntimeWithSubscribe } from \"../../runtimes/core/AssistantRuntime\";\nimport {\n makeThreadRuntimeStore,\n ThreadRuntimeStore,\n} from \"../stores/ThreadRuntime\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\n\ntype ThreadProviderProps = {\n provider: ThreadRuntimeWithSubscribe;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n provider,\n}) => {\n const [context] = useState<ThreadContextValue>(() => {\n const useThreadRuntime = makeThreadRuntimeStore(provider.thread);\n const useThread = makeThreadStore(useThreadRuntime);\n const useThreadMessages = makeThreadMessagesStore(useThreadRuntime);\n const useThreadActions = makeThreadActionStore(useThreadRuntime);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThreadMessages, useThreadActions);\n\n return {\n useThread,\n useThreadRuntime,\n useThreadMessages,\n useThreadActions,\n useComposer,\n useViewport,\n };\n });\n\n const threadRef = useManagedRef(\n useCallback(\n (thread: ReactThreadRuntime) => {\n const onThreadUpdate = () => {\n const threadState = context.useThread.getState();\n if (\n thread.isRunning !== threadState.isRunning ||\n thread.isDisabled !== threadState.isDisabled\n ) {\n (context.useThread as unknown as StoreApi<ThreadState>).setState(\n Object.freeze({\n isRunning: thread.isRunning,\n isDisabled: thread.isDisabled,\n }) satisfies ThreadState,\n true,\n );\n }\n\n if (thread.messages !== context.useThreadMessages.getState()) {\n (\n context.useThreadMessages as unknown as StoreApi<ThreadMessagesState>\n ).setState(thread.messages, true);\n }\n };\n\n onThreadUpdate();\n return thread.subscribe(onThreadUpdate);\n },\n [context],\n ),\n );\n\n useInsertionEffect(() => {\n const unsubscribe = provider.subscribe(() => {\n (\n context.useThreadRuntime as unknown as StoreApi<ThreadRuntimeStore>\n ).setState(provider.thread, true);\n threadRef(provider.thread);\n });\n threadRef(provider.thread);\n return () => {\n unsubscribe();\n threadRef(null);\n };\n }, [provider, context]);\n\n // subscribe to thread updates\n const Synchronizer = context.useThreadRuntime(\n (t) => (t as ReactThreadRuntime).unstable_synchronizer,\n );\n\n return (\n <ThreadContext.Provider value={context}>\n {Synchronizer && <Synchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ComposerState } from \"../stores/Composer\";\nimport type { ThreadState } from \"../stores/Thread\";\nimport type { ThreadViewportState } from \"../stores/ThreadViewport\";\nimport { ThreadActionsState } from \"../stores/ThreadActions\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadMessagesState } from \"../stores/ThreadMessages\";\nimport { ThreadRuntimeStore } from \"../stores/ThreadRuntime\";\n\nexport type ThreadContextValue = {\n useThread: ReadonlyStore<ThreadState>;\n useThreadRuntime: ReadonlyStore<ThreadRuntimeStore>;\n useThreadMessages: ReadonlyStore<ThreadMessagesState>;\n useThreadActions: ReadonlyStore<ThreadActionsState>;\n useComposer: ReadonlyStore<ComposerState>;\n useViewport: ReadonlyStore<ThreadViewportState>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport function useThreadContext(): ThreadContextValue;\nexport function useThreadContext(options: {\n optional: true;\n}): ThreadContextValue | null;\nexport function useThreadContext(options?: { optional: true }) {\n const context = useContext(ThreadContext);\n if (!options?.optional && !context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n}\n","import { create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { Unsubscribe } from \"../../types/Unsubscribe\";\nimport { ThreadContextValue } from \"../react\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n canCancel: boolean;\n isEditing: true;\n\n send: () => void;\n cancel: () => void;\n focus: () => void;\n onFocus: (listener: () => void) => Unsubscribe;\n }>;\n\nexport const makeComposerStore = (\n useThreadMessages: ThreadContextValue[\"useThreadMessages\"],\n useThreadActions: ThreadContextValue[\"useThreadActions\"],\n): ReadonlyStore<ComposerState> => {\n const focusListeners = new Set<() => void>();\n return create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n get canCancel() {\n return useThreadActions.getState().capabilities.cancel;\n },\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThreadActions.getState().append({\n parentId: useThreadMessages.getState().at(-1)?.id ?? null,\n role: \"user\",\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n useThreadActions.getState().cancelRun();\n },\n focus: () => {\n for (const listener of focusListeners) {\n listener();\n }\n },\n onFocus: (listener) => {\n focusListeners.add(listener);\n return () => {\n focusListeners.delete(listener);\n };\n },\n };\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 { create } from \"zustand\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadRuntimeStore } from \"./ThreadRuntime\";\n\nexport type ThreadState = Readonly<{\n isRunning: boolean;\n isDisabled: boolean;\n}>;\n\nexport const makeThreadStore = (\n runtimeRef: ReadonlyStore<ThreadRuntimeStore>,\n) => {\n return create<ThreadState>(() => ({\n isDisabled: runtimeRef.getState().isDisabled,\n isRunning: runtimeRef.getState().isRunning,\n }));\n};\n","\"use client\";\nimport { create } from \"zustand\";\nimport type { Unsubscribe } from \"../../types/Unsubscribe\";\n\nexport type ThreadViewportState = Readonly<{\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","import { create } from \"zustand\";\nimport type { AppendMessage } from \"../../types/AssistantTypes\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadRuntimeStore } from \"./ThreadRuntime\";\n\nexport type AddToolResultOptions = {\n messageId: string;\n toolCallId: string;\n result: any;\n};\n\nexport type RuntimeCapabilities = {\n switchToBranch: boolean;\n edit: boolean;\n reload: boolean;\n cancel: boolean;\n copy: boolean;\n};\n\nexport type ThreadActionsState = Readonly<{\n capabilities: Readonly<RuntimeCapabilities>;\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 addToolResult: (options: AddToolResultOptions) => void;\n}>;\n\nexport const makeThreadActionStore = (\n runtimeStore: ReadonlyStore<ThreadRuntimeStore>,\n) => {\n return create<ThreadActionsState>(() =>\n Object.freeze({\n get capabilities() {\n return runtimeStore.getState().capabilities;\n },\n getBranches: (messageId) =>\n runtimeStore.getState().getBranches(messageId),\n switchToBranch: (branchId) =>\n runtimeStore.getState().switchToBranch(branchId),\n startRun: (parentId) => runtimeStore.getState().startRun(parentId),\n append: (message) => runtimeStore.getState().append(message),\n cancelRun: () => runtimeStore.getState().cancelRun(),\n addToolResult: (options) =>\n runtimeStore.getState().addToolResult(options),\n }),\n );\n};\n","import { create } from \"zustand\";\nimport type { ThreadMessage } from \"../../types/AssistantTypes\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadRuntimeStore } from \"./ThreadRuntime\";\n\nexport type ThreadMessagesState = readonly ThreadMessage[];\n\nexport const makeThreadMessagesStore = (\n runtimeRef: ReadonlyStore<ThreadRuntimeStore>,\n) => {\n return create<ThreadMessagesState>(() => runtimeRef.getState().messages);\n};\n","import { create } from \"zustand\";\nimport { ThreadRuntime } from \"../../runtimes\";\n\nexport type ThreadRuntimeStore = ThreadRuntime;\n\nexport const makeThreadRuntimeStore = (runtime: ThreadRuntime) => {\n return create<ThreadRuntimeStore>(() => runtime);\n};\n","import { useCallback, useRef } from \"react\";\n\nexport const useManagedRef = <TNode>(\n callback: (node: TNode) => (() => void) | void,\n) => {\n const cleanupRef = useRef<(() => void) | void>();\n\n const ref = useCallback(\n (el: TNode | null) => {\n // Call the previous cleanup function\n if (cleanupRef.current) {\n cleanupRef.current();\n }\n\n // Call the new callback and store its cleanup function\n if (el) {\n cleanupRef.current = callback(el);\n }\n },\n [callback],\n );\n\n return ref;\n};\n","import { create } from \"zustand\";\nimport { AssistantRuntime } from \"../../runtimes\";\nimport { MutableRefObject } from \"react\";\n\nexport type AssistantActionsState = Readonly<{\n switchToThread: (threadId: string | null) => void;\n getRuntime: () => AssistantRuntime;\n}>;\n\nexport const makeAssistantActionsStore = (\n runtimeRef: MutableRefObject<AssistantRuntime>,\n) =>\n create<AssistantActionsState>(() =>\n Object.freeze({\n switchToThread: () => runtimeRef.current.switchToThread(null),\n getRuntime: () => runtimeRef.current,\n }),\n );\n","import { useMemo } from \"react\";\nimport { useMessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"../stores/Composer\";\nimport type { EditComposerState } from \"../stores/EditComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\n\nexport type ComposerContextValue = {\n useComposer: ReadonlyStore<EditComposerState | ComposerState>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useEditComposer } = useMessageContext({ optional: true }) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as ReadonlyStore<\n EditComposerState | ComposerState\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { MessageState } from \"../stores/Message\";\nimport type { EditComposerState } from \"../stores/EditComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { MessageUtilsState } from \"../stores/MessageUtils\";\n\nexport type MessageContextValue = {\n useMessage: ReadonlyStore<MessageState>;\n useMessageUtils: ReadonlyStore<MessageUtilsState>;\n useEditComposer: ReadonlyStore<EditComposerState>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport function useMessageContext(): MessageContextValue;\nexport function useMessageContext(options: {\n optional: true;\n}): MessageContextValue | null;\nexport function useMessageContext(options?: { optional: true }) {\n const context = useContext(MessageContext);\n if (!options?.optional && !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\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\n\nexport type ContentPartContextValue = {\n useContentPart: ReadonlyStore<ContentPartState>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport function useContentPartContext(): ContentPartContextValue;\nexport function useContentPartContext(options: {\n optional: true;\n}): ContentPartContextValue | null;\nexport function useContentPartContext(options?: { optional: true }) {\n const context = useContext(ContentPartContext);\n if (!options?.optional && !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 { useCallback } from \"react\";\nimport { ThreadContextValue, useThreadContext } from \"../context\";\nimport { AppendMessage } from \"../types\";\n\ntype CreateAppendMessage =\n | string\n | {\n parentId?: string | null | undefined;\n role?: AppendMessage[\"role\"] | undefined;\n content: AppendMessage[\"content\"];\n };\n\nconst toAppendMessage = (\n useThreadMessages: ThreadContextValue[\"useThreadMessages\"],\n message: CreateAppendMessage,\n): AppendMessage => {\n if (typeof message === \"string\") {\n return {\n parentId: useThreadMessages.getState().at(-1)?.id ?? null,\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n };\n }\n\n return {\n parentId:\n message.parentId ?? useThreadMessages.getState().at(-1)?.id ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n } as AppendMessage;\n};\n\nexport const useAppendMessage = () => {\n const { useThreadMessages, useThreadActions, useViewport, useComposer } =\n useThreadContext();\n\n const append = useCallback(\n (message: CreateAppendMessage) => {\n const appendMessage = toAppendMessage(useThreadMessages, message);\n useThreadActions.getState().append(appendMessage);\n\n useViewport.getState().scrollToBottom();\n useComposer.getState().focus();\n },\n [useThreadMessages, useThreadActions, useViewport, useComposer],\n );\n\n return append;\n};\n","import { useCallback } from \"react\";\nimport { useAssistantContext, useThreadContext } from \"../context\";\n\nexport const useSwitchToNewThread = () => {\n const { useAssistantActions } = useAssistantContext();\n const { useComposer } = useThreadContext();\n\n const switchToNewThread = useCallback(() => {\n useAssistantActions.getState().switchToThread(null);\n useComposer.getState().focus();\n }, [useAssistantActions, useComposer]);\n\n return switchToNewThread;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/react/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../types/ContentPartComponentTypes\";\nimport type { Tool } from \"../types/ModelConfigTypes\";\n\nexport type AssistantToolProps<\n TArgs extends Record<string, unknown>,\n TResult,\n> = Tool<TArgs, TResult> & {\n toolName: string;\n render?: ToolCallContentPartComponent<TArgs, TResult> | undefined;\n};\n\nexport const useAssistantTool = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const { useModelConfig, useToolUIs } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n const setToolUI = useToolUIs((s) => s.setToolUI);\n useEffect(() => {\n const { toolName, render, ...rest } = tool;\n const config = {\n tools: {\n [tool.toolName]: rest,\n },\n };\n const unsub1 = registerModelConfigProvider({\n getModelConfig: () => config,\n });\n const unsub2 = render ? setToolUI(toolName, render) : undefined;\n return () => {\n unsub1();\n unsub2?.();\n };\n }, [registerModelConfigProvider, setToolUI, tool]);\n};\n","\"use client\";\nimport { type AssistantToolProps, useAssistantTool } from \"./useAssistantTool\";\n\nexport const makeAssistantTool = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const Tool = () => {\n useAssistantTool(tool);\n return null;\n };\n return Tool;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/react/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../types/ContentPartComponentTypes\";\n\nexport type AssistantToolUIProps<\n TArgs extends Record<string, unknown>,\n TResult,\n> = {\n toolName: string;\n render: ToolCallContentPartComponent<TArgs, TResult>;\n};\n\nexport const useAssistantToolUI = (\n tool: AssistantToolUIProps<any, any> | null,\n) => {\n const { useToolUIs } = useAssistantContext();\n const setToolUI = useToolUIs((s) => s.setToolUI);\n useEffect(() => {\n if (!tool) return;\n const { toolName, render } = tool;\n return setToolUI(toolName, render);\n }, [setToolUI, tool]);\n};\n","\"use client\";\nimport {\n type AssistantToolUIProps,\n useAssistantToolUI,\n} from \"./useAssistantToolUI\";\n\nexport const makeAssistantToolUI = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolUIProps<TArgs, TResult>,\n) => {\n const ToolUI = () => {\n useAssistantToolUI(tool);\n return null;\n };\n return ToolUI;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/react/AssistantContext\";\n\nexport const useAssistantInstructions = (instruction: string) => {\n const { useModelConfig } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n useEffect(() => {\n const config = {\n system: instruction,\n };\n return registerModelConfigProvider({ getModelConfig: () => config });\n }, [registerModelConfigProvider, instruction]);\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../../utils/getMessageText\";\n\nexport type UseActionBarCopyProps = {\n copiedDuration?: number | undefined;\n};\n\nexport const useActionBarCopy = ({\n copiedDuration = 3000,\n}: UseActionBarCopyProps = {}) => {\n const { useMessage, useMessageUtils, useEditComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useEditComposer],\n (m, c) => {\n return (\n !c.isEditing &&\n m.message.content.some((c) => c.type === \"text\" && c.text.length > 0)\n );\n },\n );\n\n const callback = useCallback(() => {\n const { message } = useMessage.getState();\n const { setIsCopied } = useMessageUtils.getState();\n const { isEditing, value: composerValue } = useEditComposer.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n }, [useMessage, useMessageUtils, useEditComposer, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","import { useMemo } from \"react\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\nimport { ReadonlyStore } from \"../../context/ReadonlyStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: ReadonlyStore<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // eslint-disable-next-line react-hooks/exhaustive-deps -- shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport type { Unsubscribe } from \"../../types/Unsubscribe\";\nimport { ReadonlyStore } from \"../../context/ReadonlyStore\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(stores: {\n [K in keyof T]: ReadonlyStore<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","import type { TextContentPart, ThreadMessage } from \"../types/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/react/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useActionBarEdit = () => {\n const { useMessage, useEditComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useEditComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useEditComposer.getState();\n edit();\n }, [useEditComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useActionBarReload = () => {\n const { useThread, useThreadActions, useComposer, useViewport } =\n useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || t.isDisabled || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThreadActions.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n useComposer.getState().focus();\n }, [useThreadActions, useComposer, useViewport, useMessage]);\n\n if (disabled) return null;\n return callback;\n};\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\n\nexport const useBranchPickerCount = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return branchCount;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useBranchPickerNext = () => {\n const { useThreadActions } = useThreadContext();\n const { useMessage, useEditComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useEditComposer],\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 useThreadActions\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useThreadActions, useMessage]);\n\n if (disabled) return null;\n return callback;\n};\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\n\nexport const useBranchPickerNumber = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return branchIdx + 1;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useBranchPickerPrevious = () => {\n const { useThreadActions } = useThreadContext();\n const { useMessage, useEditComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useEditComposer],\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 useThreadActions\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useThreadActions, useMessage]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useComposerContext } from \"../../context\";\n\nexport const useComposerCancel = () => {\n const { useComposer } = useComposerContext();\n\n const disabled = useComposer((c) => !c.canCancel);\n\n const callback = useCallback(() => {\n const { cancel } = useComposer.getState();\n cancel();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","\"use client\";\nimport { useComposerContext } from \"../../context/react/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\nexport type UseComposerIfProps = RequireAtLeastOne<ComposerIfFilters>;\n\nexport const useComposerIf = (props: UseComposerIfProps) => {\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","import { useCallback } from \"react\";\nimport { useComposerContext, useThreadContext } from \"../../context\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useComposerSend = () => {\n const {\n useThread,\n useViewport,\n useComposer: useNewComposer,\n } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const disabled = useCombinedStore(\n [useThread, useComposer],\n (t, c) =>\n t.isDisabled || t.isRunning || !c.isEditing || c.value.length === 0,\n );\n\n const callback = useCallback(() => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n useNewComposer.getState().focus();\n }, [useNewComposer, useComposer, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useContentPartContext } from \"../../context/react/ContentPartContext\";\nimport { UIContentPartState } from \"../../context/stores/ContentPart\";\n\nexport const useContentPartDisplay = () => {\n const { useContentPart } = useContentPartContext();\n\n const display = useContentPart((c) => {\n if (c.part.type !== \"ui\")\n throw new Error(\n \"This component can only be used inside ui content parts.\",\n );\n\n return c as UIContentPartState;\n });\n\n return display;\n};\n","import { useContentPartContext } from \"../../context/react/ContentPartContext\";\nimport { ImageContentPartState } from \"../../context/stores/ContentPart\";\n\nexport const useContentPartImage = () => {\n const { useContentPart } = useContentPartContext();\n\n const image = useContentPart((c) => {\n if (c.part.type !== \"image\")\n throw new Error(\n \"ContentPartImage can only be used inside image content parts.\",\n );\n\n return c as ImageContentPartState;\n });\n\n return image;\n};\n","import { useContentPartContext } from \"../../context/react/ContentPartContext\";\nimport { TextContentPartState } from \"../../context/stores/ContentPart\";\n\nexport const useContentPartText = () => {\n const { useContentPart } = useContentPartContext();\n\n const text = useContentPart((c) => {\n if (c.part.type !== \"text\")\n throw new Error(\n \"ContentPartText can only be used inside text content parts.\",\n );\n\n return c as TextContentPartState;\n });\n\n return text;\n};\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n system: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\nexport type UseMessageIfProps = RequireAtLeastOne<MessageIfFilters>;\n\nexport const useMessageIf = (props: UseMessageIfProps) => {\n const { useMessage, useMessageUtils } = useMessageContext();\n\n return useCombinedStore(\n [useMessage, useMessageUtils],\n ({ 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 if (props.system && message.role !== \"system\") 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};\n","\"use client\";\n\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n disabled: boolean | undefined;\n};\n\nexport type UseThreadIfProps = RequireAtLeastOne<ThreadIfFilters>;\n\nexport const useThreadIf = (props: UseThreadIfProps) => {\n const { useThread, useThreadMessages } = useThreadContext();\n return useCombinedStore(\n [useThread, useThreadMessages],\n (thread, messages) => {\n if (props.empty === true && messages.length !== 0) return false;\n if (props.empty === false && messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n if (props.disabled === true && thread.isDisabled) return false;\n if (props.disabled === false && thread.isDisabled) return false;\n\n return true;\n },\n );\n};\n","import { useThreadIf } from \"./useThreadIf\";\n\nexport const useThreadEmpty = () => {\n return useThreadIf({ empty: true });\n};\n","import { useCallback } from \"react\";\nimport { useThreadContext } from \"../../context\";\n\nexport const useThreadScrollToBottom = () => {\n const { useComposer, useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n\n const handleScrollToBottom = useCallback(() => {\n useViewport.getState().scrollToBottom();\n useComposer.getState().focus();\n }, [useViewport, useComposer]);\n\n if (isAtBottom) return null;\n return handleScrollToBottom;\n};\n","import { useCallback } from \"react\";\nimport { useThreadContext } from \"../../context\";\nimport { useAppendMessage } from \"../../hooks\";\n\nexport type UseApplyThreadSuggestionProps = {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean | undefined;\n};\n\nexport const useThreadSuggestion = ({\n prompt,\n autoSend,\n}: UseApplyThreadSuggestionProps) => {\n const { useThread, useComposer } = useThreadContext();\n\n const append = useAppendMessage();\n const disabled = useThread((t) => t.isDisabled);\n const callback = useCallback(() => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n if (autoSend && !thread.isRunning) {\n append(prompt);\n composer.setValue(\"\");\n } else {\n composer.setValue(prompt);\n }\n }, [useThread, useComposer, autoSend, append, prompt]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ActionBarPrimitiveRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarPrimitiveCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarPrimitiveReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarPrimitiveEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport {\n useActionBarFloatStatus,\n HideAndFloatStatus,\n UseActionBarFloatStatusProps,\n} from \"./useActionBarFloatStatus\";\n\ntype ActionBarPrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type ActionBarPrimitiveRootProps = PrimitiveDivProps &\n UseActionBarFloatStatusProps;\n\nexport const ActionBarPrimitiveRoot = forwardRef<\n ActionBarPrimitiveRootElement,\n ActionBarPrimitiveRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const hideAndfloatStatus = useActionBarFloatStatus({\n hideWhenRunning,\n autohide,\n autohideFloat,\n });\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n {...(hideAndfloatStatus === HideAndFloatStatus.Floating\n ? { \"data-floating\": \"true\" }\n : null)}\n {...rest}\n ref={ref}\n />\n );\n});\n\nActionBarPrimitiveRoot.displayName = \"ActionBarPrimitive.Root\";\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport enum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type UseActionBarFloatStatusProps = {\n hideWhenRunning?: boolean | undefined;\n autohide?: \"always\" | \"not-last\" | \"never\" | undefined;\n autohideFloat?: \"always\" | \"single-branch\" | \"never\" | undefined;\n};\n\nexport const useActionBarFloatStatus = ({\n hideWhenRunning,\n autohide,\n autohideFloat,\n}: UseActionBarFloatStatusProps) => {\n const { useThread } = useThreadContext();\n const { useMessage, useMessageUtils } = useMessageContext();\n\n return useCombinedStore(\n [useThread, useMessage, useMessageUtils],\n (t, m, mu) => {\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 (!mu.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","\"use client\";\n\nimport { ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\ntype PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\nexport type ActionButtonProps<THook> = PrimitiveButtonProps &\n (THook extends (props: infer TProps) => unknown ? TProps : never);\n\nexport const createActionButton = <TProps,>(\n displayName: string,\n useActionButton: ActionButtonCallback<TProps>,\n forwardProps: (keyof NonNullable<TProps>)[] = [],\n) => {\n const ActionButton = forwardRef<\n PrimitiveButtonElement,\n PrimitiveButtonProps & TProps\n >((props, forwardedRef) => {\n const forwardedProps = {} as TProps;\n const primitiveProps = {} as PrimitiveButtonProps;\n\n (Object.keys(props) as Array<keyof typeof props>).forEach((key) => {\n if (forwardProps.includes(key as keyof TProps)) {\n (forwardedProps as any)[key] = props[key];\n } else {\n (primitiveProps as any)[key] = props[key];\n }\n });\n\n const callback = useActionButton(forwardedProps as TProps);\n return (\n <Primitive.button\n type=\"button\"\n disabled={!callback}\n {...primitiveProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(primitiveProps.onClick, () => {\n callback?.();\n })}\n />\n );\n });\n\n ActionButton.displayName = displayName;\n\n return ActionButton;\n};\n","\"use client\";\n\nimport { useActionBarCopy } from \"../../primitive-hooks/actionBar/useActionBarCopy\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type ActionBarPrimitiveCopyProps = ActionButtonProps<\n typeof useActionBarCopy\n>;\n\nexport const ActionBarPrimitiveCopy = createActionButton(\n \"ActionBarPrimitive.Copy\",\n useActionBarCopy,\n [\"copiedDuration\"],\n);\n","\"use client\";\n\nimport { useActionBarReload } from \"../../primitive-hooks/actionBar/useActionBarReload\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type ActionBarPrimitiveReloadProps = ActionButtonProps<\n typeof useActionBarReload\n>;\n\nexport const ActionBarPrimitiveReload = createActionButton(\n \"ActionBarPrimitive.Reload\",\n useActionBarReload,\n);\n","\"use client\";\n\nimport { useActionBarEdit } from \"../../primitive-hooks/actionBar/useActionBarEdit\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type ActionBarPrimitiveEditProps = ActionButtonProps<\n typeof useActionBarEdit\n>;\n\nexport const ActionBarPrimitiveEdit = createActionButton(\n \"ActionBarPrimitive.Edit\",\n useActionBarEdit,\n);\n","export { AssistantModalPrimitiveRoot as Root } from \"./AssistantModalRoot\";\nexport { AssistantModalPrimitiveTrigger as Trigger } from \"./AssistantModalTrigger\";\nexport { AssistantModalPrimitiveContent as Content } from \"./AssistantModalContent\";\nexport { AssistantModalPrimitiveAnchor as Anchor } from \"./AssistantModalAnchor\";\n","\"use client\";\n\nimport { FC, useState } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useOnComposerFocus } from \"../../utils/hooks/useOnComposerFocus\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\n\nexport type AssistantModalPrimitiveRootProps = PopoverPrimitive.PopoverProps;\n\nconst useAssistantModalOpenState = (defaultOpen = false) => {\n const state = useState(defaultOpen);\n\n const [, setOpen] = state;\n useOnComposerFocus(() => {\n setOpen(true);\n });\n\n return state;\n};\n\nexport const AssistantModalPrimitiveRoot: FC<\n AssistantModalPrimitiveRootProps\n> = ({\n __scopeAssistantModal,\n defaultOpen,\n open,\n onOpenChange,\n ...rest\n}: ScopedProps<AssistantModalPrimitiveRootProps>) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n const [modalOpen, setOpen] = useAssistantModalOpenState(defaultOpen);\n\n return (\n <PopoverPrimitive.Root\n {...scope}\n open={open === undefined ? modalOpen : open}\n onOpenChange={composeEventHandlers(onOpenChange, setOpen)}\n {...rest}\n />\n );\n};\n\nAssistantModalPrimitiveRoot.displayName = \"AssistantModalPrimitive.Root\";\n","import { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\n\nexport const useOnComposerFocus = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useComposer } = useThreadContext();\n useEffect(() => {\n return useComposer.getState().onFocus(() => {\n callbackRef();\n });\n }, [useComposer, callbackRef]);\n};\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport type { Scope } from \"@radix-ui/react-context\";\n\nexport type ScopedProps<P> = P & { __scopeAssistantModal?: Scope };\nexport const usePopoverScope = PopoverPrimitive.createPopoverScope();\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\n\ntype AssistantModalPrimitiveTriggerElement = ElementRef<\n typeof PopoverPrimitive.Trigger\n>;\nexport type AssistantModalPrimitiveTriggerProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Trigger\n>;\n\nexport const AssistantModalPrimitiveTrigger = forwardRef<\n AssistantModalPrimitiveTriggerElement,\n AssistantModalPrimitiveTriggerProps\n>(\n (\n {\n __scopeAssistantModal,\n ...rest\n }: ScopedProps<AssistantModalPrimitiveTriggerProps>,\n ref,\n ) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n return <PopoverPrimitive.Trigger {...scope} {...rest} ref={ref} />;\n },\n);\n\nAssistantModalPrimitiveTrigger.displayName = \"AssistantModalPrimitive.Trigger\";\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\ntype AssistantModalPrimitiveContentElement = ElementRef<\n typeof PopoverPrimitive.Content\n>;\nexport type AssistantModalPrimitiveContentProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Content\n> & {\n dissmissOnInteractOutside?: boolean | undefined;\n};\n\nexport const AssistantModalPrimitiveContent = forwardRef<\n AssistantModalPrimitiveContentElement,\n AssistantModalPrimitiveContentProps\n>(\n (\n {\n __scopeAssistantModal,\n side,\n align,\n onInteractOutside,\n dissmissOnInteractOutside = false,\n ...props\n }: ScopedProps<AssistantModalPrimitiveContentProps>,\n forwardedRef,\n ) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n return (\n <PopoverPrimitive.Portal {...scope}>\n <PopoverPrimitive.Content\n {...scope}\n {...props}\n ref={forwardedRef}\n side={side ?? \"top\"}\n align={align ?? \"end\"}\n onInteractOutside={composeEventHandlers(\n onInteractOutside,\n dissmissOnInteractOutside ? undefined : (e) => e.preventDefault(),\n )}\n />\n </PopoverPrimitive.Portal>\n );\n },\n);\n\nAssistantModalPrimitiveContent.displayName = \"AssistantModalPrimitive.Content\";\n","\"use client\";\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\n\ntype AssistantModalPrimitiveAnchorElement = ElementRef<\n typeof PopoverPrimitive.Anchor\n>;\ntype AssistantModalPrimitiveAnchorProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Anchor\n>;\n\nexport const AssistantModalPrimitiveAnchor = forwardRef<\n AssistantModalPrimitiveAnchorElement,\n AssistantModalPrimitiveAnchorProps\n>(\n (\n {\n __scopeAssistantModal,\n ...rest\n }: ScopedProps<AssistantModalPrimitiveAnchorProps>,\n ref,\n ) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n return <PopoverPrimitive.Anchor {...scope} {...rest} ref={ref} />;\n },\n);\nAssistantModalPrimitiveAnchor.displayName = \"AssistantModalPrimitive.Anchor\";\n","export { BranchPickerPrimitiveNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerPrimitiveCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerPrimitiveNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerPrimitiveRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { useBranchPickerNext } from \"../../primitive-hooks/branchPicker/useBranchPickerNext\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type BranchPickerPrimitiveNextProps = ActionButtonProps<\n typeof useBranchPickerNext\n>;\n\nexport const BranchPickerPrimitiveNext = createActionButton(\n \"BranchPickerPrimitive.Next\",\n useBranchPickerNext,\n);\n","\"use client\";\n\nimport { useBranchPickerPrevious } from \"../../primitive-hooks/branchPicker/useBranchPickerPrevious\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type BranchPickerPrimitivePreviousProps = ActionButtonProps<\n typeof useBranchPickerPrevious\n>;\n\nexport const BranchPickerPrevious = createActionButton(\n \"BranchPickerPrimitive.Previous\",\n useBranchPickerPrevious,\n);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useBranchPickerCount } from \"../../primitive-hooks/branchPicker/useBranchPickerCount\";\n\nexport type BranchPickerPrimitiveCountProps = {};\n\nexport const BranchPickerPrimitiveCount: FC<\n BranchPickerPrimitiveCountProps\n> = () => {\n const branchCount = useBranchPickerCount();\n return <>{branchCount}</>;\n};\n\nBranchPickerPrimitiveCount.displayName = \"BranchPickerPrimitive.Count\";\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useBranchPickerNumber } from \"../../primitive-hooks/branchPicker/useBranchPickerNumber\";\n\nexport type BranchPickerPrimitiveNumberProps = {};\n\nexport const BranchPickerPrimitiveNumber: FC<\n BranchPickerPrimitiveNumberProps\n> = () => {\n const branchNumber = useBranchPickerNumber();\n return <>{branchNumber}</>;\n};\n\nBranchPickerPrimitiveNumber.displayName = \"BranchPickerPrimitive.Number\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerPrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type BranchPickerPrimitiveRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean | undefined;\n};\n\nexport const BranchPickerPrimitiveRoot = forwardRef<\n BranchPickerPrimitiveRootElement,\n BranchPickerPrimitiveRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n\nBranchPickerPrimitiveRoot.displayName = \"BranchPickerPrimitive.Root\";\n","export { MessagePrimitiveRoot as Root } from \"./MessageRoot\";\nexport { MessagePrimitiveIf as If } from \"./MessageIf\";\nexport { MessagePrimitiveContent as Content } from \"./MessageContent\";\nexport { MessagePrimitiveInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n forwardRef,\n ComponentPropsWithoutRef,\n useCallback,\n} from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n\ntype MessagePrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nconst useIsHoveringRef = () => {\n const { useMessageUtils } = useMessageContext();\n\n const callbackRef = useCallback(\n (el: HTMLElement) => {\n const setIsHovering = useMessageUtils.getState().setIsHovering;\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n el.addEventListener(\"mouseenter\", handleMouseEnter);\n el.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n el.removeEventListener(\"mouseenter\", handleMouseEnter);\n el.removeEventListener(\"mouseleave\", handleMouseLeave);\n setIsHovering(false);\n };\n },\n [useMessageUtils],\n );\n\n return useManagedRef(callbackRef);\n};\n\nexport type MessagePrimitiveRootProps = PrimitiveDivProps;\n\nexport const MessagePrimitiveRoot = forwardRef<\n MessagePrimitiveRootElement,\n MessagePrimitiveRootProps\n>(({ onMouseEnter, onMouseLeave, ...rest }, forwardRef) => {\n const isHoveringRef = useIsHoveringRef();\n const ref = useComposedRefs<HTMLDivElement>(forwardRef, isHoveringRef);\n\n return <Primitive.div {...rest} ref={ref} />;\n});\n\nMessagePrimitiveRoot.displayName = \"MessagePrimitive.Root\";\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport {\n UseMessageIfProps,\n useMessageIf,\n} from \"../../primitive-hooks/message/useMessageIf\";\n\nexport type MessagePrimitiveIfProps = PropsWithChildren<UseMessageIfProps>;\n\nexport const MessagePrimitiveIf: FC<MessagePrimitiveIfProps> = ({\n children,\n ...query\n}) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n\nMessagePrimitiveIf.displayName = \"MessagePrimitive.If\";\n","\"use client\";\n\nimport { type ComponentType, type FC, memo } from \"react\";\nimport {\n useAssistantContext,\n useContentPartContext,\n useThreadContext,\n} from \"../../context\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport {\n ContentPartProvider,\n EMPTY_CONTENT,\n} from \"../../context/providers/ContentPartProvider\";\nimport { ContentPartPrimitiveText } from \"../contentPart/ContentPartText\";\nimport { ContentPartPrimitiveImage } from \"../contentPart/ContentPartImage\";\nimport { ContentPartPrimitiveDisplay } from \"../contentPart/ContentPartDisplay\";\nimport type {\n ImageContentPartComponent,\n TextContentPartComponent,\n ToolCallContentPartComponent,\n ToolCallContentPartProps,\n UIContentPartComponent,\n} from \"../../types/ContentPartComponentTypes\";\nimport { ContentPartPrimitiveInProgress } from \"../contentPart/ContentPartInProgress\";\n\nexport type MessagePrimitiveContentProps = {\n components?:\n | {\n Empty?: TextContentPartComponent | undefined;\n Text?: TextContentPartComponent | undefined;\n Image?: ImageContentPartComponent | undefined;\n UI?: UIContentPartComponent | undefined;\n tools?: {\n by_name?:\n | Record<string, ToolCallContentPartComponent | undefined>\n | undefined;\n Fallback?: ComponentType<ToolCallContentPartProps> | undefined;\n };\n }\n | undefined;\n};\n\nconst defaultComponents = {\n Text: () => (\n <p style={{ whiteSpace: \"pre-line\" }}>\n <ContentPartPrimitiveText />\n <ContentPartPrimitiveInProgress>\n <span style={{ fontFamily: \"revert\" }}>{\" \\u25CF\"}</span>\n </ContentPartPrimitiveInProgress>\n </p>\n ),\n Image: () => <ContentPartPrimitiveImage />,\n UI: () => <ContentPartPrimitiveDisplay />,\n tools: {\n Fallback: (props) => {\n const { useToolUIs } = useAssistantContext();\n const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));\n if (!Render) return null;\n return <Render {...props} />;\n },\n },\n} satisfies MessagePrimitiveContentProps[\"components\"];\n\ntype MessageContentPartComponentProps = {\n components: MessagePrimitiveContentProps[\"components\"];\n};\n\nconst MessageContentPartComponent: FC<MessageContentPartComponentProps> = ({\n components: {\n Empty = defaultComponents.Text,\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useThreadActions } = useThreadContext();\n const { useMessage } = useMessageContext();\n const addToolResult = useThreadActions((t) => t.addToolResult);\n\n const { useContentPart } = useContentPartContext();\n const { part, status } = useContentPart();\n\n const type = part.type;\n switch (type) {\n case \"text\":\n if (status.type === \"requires-action\")\n throw new Error(\"Encountered unexpected requires-action status\");\n if (part === EMPTY_CONTENT) return <Empty part={part} status={status} />;\n\n return <Text part={part} status={status} />;\n\n case \"image\":\n if (status.type === \"requires-action\")\n throw new Error(\"Encountered unexpected requires-action status\");\n // eslint-disable-next-line jsx-a11y/alt-text\n return <Image part={part} status={status} />;\n\n case \"ui\":\n if (status.type === \"requires-action\")\n throw new Error(\"Encountered unexpected requires-action status\");\n return <UI part={part} status={status} />;\n\n case \"tool-call\": {\n const Tool = by_name[part.toolName] || Fallback;\n const addResult = (result: any) =>\n addToolResult({\n messageId: useMessage.getState().message.id,\n toolCallId: part.toolCallId,\n result,\n });\n return <Tool part={part} status={status} addResult={addResult} />;\n }\n default:\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n};\n\ntype MessageContentPartProps = {\n partIndex: number;\n components: MessagePrimitiveContentProps[\"components\"];\n};\n\nconst MessageContentPartImpl: FC<MessageContentPartProps> = ({\n partIndex,\n components,\n}) => {\n return (\n <ContentPartProvider partIndex={partIndex}>\n <MessageContentPartComponent components={components} />\n </ContentPartProvider>\n );\n};\n\nconst MessageContentPart = memo(\n MessageContentPartImpl,\n (prev, next) =>\n prev.partIndex === next.partIndex &&\n prev.components?.Text === next.components?.Text &&\n prev.components?.Image === next.components?.Image &&\n prev.components?.UI === next.components?.UI &&\n prev.components?.tools === next.components?.tools,\n);\n\nexport const MessagePrimitiveContent: FC<MessagePrimitiveContentProps> = ({\n components,\n}) => {\n const { useMessage } = useMessageContext();\n\n const contentLength = useMessage((s) => s.message.content.length) || 1;\n\n return new Array(contentLength).fill(null).map((_, idx) => {\n const partIndex = idx; // use the index as key, as message is generally append only\n return (\n <MessageContentPart\n key={partIndex}\n partIndex={partIndex}\n components={components}\n />\n );\n });\n};\n\nMessagePrimitiveContent.displayName = \"MessagePrimitive.Content\";\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { StoreApi, create } from \"zustand\";\nimport { ContentPartContext } from \"../react/ContentPartContext\";\nimport type { ContentPartContextValue } from \"../react/ContentPartContext\";\nimport { useMessageContext } from \"../react/MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\nimport {\n ContentPartStatus,\n ThreadAssistantContentPart,\n ThreadMessage,\n ThreadUserContentPart,\n ToolCallContentPartStatus,\n} from \"../../types/AssistantTypes\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst COMPLETE_STATUS: ContentPartStatus = {\n type: \"complete\",\n};\n\nconst toContentPartStatus = (\n message: ThreadMessage,\n partIndex: number,\n part: ThreadUserContentPart | ThreadAssistantContentPart,\n): ToolCallContentPartStatus => {\n if (message.role !== \"assistant\") return COMPLETE_STATUS;\n\n const isLastPart = partIndex === Math.max(0, message.content.length - 1);\n if (part.type !== \"tool-call\") {\n if (\n \"reason\" in message.status &&\n message.status.reason === \"tool-calls\" &&\n isLastPart\n )\n throw new Error(\n \"Encountered unexpected requires-action status. This is likely an internal bug in assistant-ui.\",\n );\n\n return isLastPart ? (message.status as ContentPartStatus) : COMPLETE_STATUS;\n }\n\n if (!!part.result) {\n return COMPLETE_STATUS;\n }\n\n return message.status as ToolCallContentPartStatus;\n};\n\nexport const EMPTY_CONTENT = Object.freeze({ type: \"text\", text: \"\" });\n\nconst getContentPartState = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"] | undefined,\n partIndex: number,\n) => {\n let part = message.content[partIndex];\n if (!part) {\n // for empty messages, show an empty text content part\n if (message.content.length === 0 && partIndex === 0) {\n part = EMPTY_CONTENT;\n } else {\n return null;\n }\n }\n\n // if the content part is the same, don't update\n const status = toContentPartStatus(message, partIndex, part);\n const currentState = useContentPart?.getState();\n if (\n currentState &&\n currentState.part === part &&\n currentState.status === status\n )\n return null;\n\n return Object.freeze({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(\n () => getContentPartState(useMessage.getState(), undefined, partIndex)!,\n );\n\n return { useContentPart };\n });\n\n useEffect(() => {\n const syncContentPart = (message: MessageState) => {\n const newState = getContentPartState(\n message,\n context.useContentPart,\n partIndex,\n );\n if (!newState) return;\n (\n context.useContentPart as unknown as StoreApi<ContentPartState>\n ).setState(newState, true);\n };\n\n syncContentPart(useMessage.getState());\n return useMessage.subscribe(syncContentPart);\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","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n forwardRef,\n ComponentPropsWithoutRef,\n ElementType,\n} from \"react\";\nimport { useContentPartText } from \"../../primitive-hooks/contentPart/useContentPartText\";\nimport { useSmooth } from \"../../utils/smooth/useSmooth\";\n\ntype ContentPartPrimitiveTextElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\nexport type ContentPartPrimitiveTextProps = Omit<\n PrimitiveSpanProps,\n \"children\" | \"asChild\"\n> & {\n smooth?: boolean;\n component?: ElementType;\n};\n\nexport const ContentPartPrimitiveText = forwardRef<\n ContentPartPrimitiveTextElement,\n ContentPartPrimitiveTextProps\n>(({ smooth = true, component: Component = \"span\", ...rest }, forwardedRef) => {\n const {\n part: { text },\n status,\n } = useSmooth(useContentPartText(), smooth);\n\n return (\n <Component data-status={status.type} {...rest} ref={forwardedRef}>\n {text}\n </Component>\n );\n});\n\nContentPartPrimitiveText.displayName = \"ContentPartPrimitive.Text\";\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMessageContext } from \"../../context\";\nimport {\n ContentPartStatus,\n ToolCallContentPartStatus,\n} from \"../../types/AssistantTypes\";\nimport { TextContentPartState } from \"../../context/stores/ContentPart\";\nimport { useSmoothContext } from \"./SmoothContext\";\nimport { StoreApi } from \"zustand\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\n\nclass TextStreamAnimator {\n private animationFrameId: number | null = null;\n private lastUpdateTime: number = Date.now();\n\n public targetText: string = \"\";\n\n constructor(\n public currentText: string,\n private setText: (newText: string) => void,\n ) {}\n\n start() {\n if (this.animationFrameId !== null) return;\n this.lastUpdateTime = Date.now();\n this.animate();\n }\n\n stop() {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n }\n\n private animate = () => {\n const currentTime = Date.now();\n const deltaTime = currentTime - this.lastUpdateTime;\n let timeToConsume = deltaTime;\n\n const remainingChars = this.targetText.length - this.currentText.length;\n const baseTimePerChar = Math.min(5, 250 / remainingChars);\n\n let charsToAdd = 0;\n while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {\n charsToAdd++;\n timeToConsume -= baseTimePerChar;\n }\n\n if (charsToAdd !== remainingChars) {\n this.animationFrameId = requestAnimationFrame(this.animate);\n } else {\n this.animationFrameId = null;\n }\n if (charsToAdd === 0) return;\n\n this.currentText = this.targetText.slice(\n 0,\n this.currentText.length + charsToAdd,\n );\n this.lastUpdateTime = currentTime - timeToConsume;\n this.setText(this.currentText);\n };\n}\n\nconst SMOOTH_STATUS: ContentPartStatus = Object.freeze({\n type: \"running\",\n});\n\nexport const useSmooth = (\n state: TextContentPartState,\n smooth: boolean = false,\n): TextContentPartState => {\n const { useSmoothStatus } = useSmoothContext({ optional: true }) ?? {};\n\n const {\n part: { text },\n } = state;\n const { useMessage } = useMessageContext();\n const id = useMessage((m) => m.message.id);\n\n const idRef = useRef(id);\n const [displayedText, setDisplayedText] = useState(text);\n\n const setText = useCallbackRef((text: string) => {\n setDisplayedText(text);\n (\n useSmoothStatus as unknown as\n | StoreApi<ToolCallContentPartStatus>\n | undefined\n )?.setState(text !== state.part.text ? SMOOTH_STATUS : state.status);\n });\n\n const [animatorRef] = useState<TextStreamAnimator>(\n new TextStreamAnimator(text, setText),\n );\n\n useEffect(() => {\n if (!smooth) {\n animatorRef.stop();\n return;\n }\n\n if (idRef.current !== id || !text.startsWith(animatorRef.targetText)) {\n idRef.current = id;\n setText(text);\n\n animatorRef.currentText = text;\n animatorRef.targetText = text;\n animatorRef.stop();\n\n return;\n }\n\n animatorRef.targetText = text;\n animatorRef.start();\n }, [setText, animatorRef, id, smooth, text]);\n\n useEffect(() => {\n return () => {\n animatorRef.stop();\n };\n }, [animatorRef]);\n\n return useMemo(\n () =>\n smooth\n ? {\n part: { type: \"text\", text: displayedText },\n status: text === displayedText ? state.status : SMOOTH_STATUS,\n }\n : state,\n [smooth, displayedText, state, text],\n );\n};\n","import {\n createContext,\n FC,\n forwardRef,\n PropsWithChildren,\n useContext,\n useState,\n} from \"react\";\nimport { useContentPartContext } from \"../../context\";\nimport { ReadonlyStore } from \"../../context/ReadonlyStore\";\nimport { create } from \"zustand\";\nimport {\n ContentPartStatus,\n ToolCallContentPartStatus,\n} from \"../../types/AssistantTypes\";\n\ntype SmoothContextValue = {\n useSmoothStatus: ReadonlyStore<ToolCallContentPartStatus | ContentPartStatus>;\n};\n\nconst SmoothContext = createContext<SmoothContextValue | null>(null);\n\nconst makeSmoothContext = (\n initialState: ContentPartStatus | ToolCallContentPartStatus,\n) => {\n const useSmoothStatus = create(() => initialState);\n return { useSmoothStatus };\n};\n\nexport const SmoothContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const outer = useSmoothContext({ optional: true });\n const { useContentPart } = useContentPartContext();\n\n const [context] = useState(() =>\n makeSmoothContext(useContentPart.getState().status),\n );\n\n // do not wrap if there is an outer SmoothContextProvider\n if (outer) return children;\n\n return (\n <SmoothContext.Provider value={context}>{children}</SmoothContext.Provider>\n );\n};\n\nexport const withSmoothContextProvider = <C extends React.ComponentType<any>>(\n Component: C,\n): C => {\n const Wrapped = forwardRef((props, ref) => {\n return (\n <SmoothContextProvider>\n <Component {...(props as any)} ref={ref} />\n </SmoothContextProvider>\n );\n });\n Wrapped.displayName = Component.displayName;\n return Wrapped as any;\n};\n\nexport function useSmoothContext(): SmoothContextValue;\nexport function useSmoothContext(options: {\n optional: true;\n}): SmoothContextValue | null;\nexport function useSmoothContext(options?: { optional: true }) {\n const context = useContext(SmoothContext);\n if (!options?.optional && !context)\n throw new Error(\n \"This component must be used within a SmoothContextProvider.\",\n );\n return context;\n}\n\nexport const useSmoothStatus = () => {\n const { useSmoothStatus } = useSmoothContext();\n return useSmoothStatus();\n};\n","import { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useContentPartImage } from \"../../primitive-hooks/contentPart/useContentPartImage\";\n\ntype ContentPartPrimitiveImageElement = ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = ComponentPropsWithoutRef<typeof Primitive.img>;\n\nexport type ContentPartPrimitiveImageProps = PrimitiveImageProps;\n\nexport const ContentPartPrimitiveImage = forwardRef<\n ContentPartPrimitiveImageElement,\n ContentPartPrimitiveImageProps\n>((props, forwardedRef) => {\n const {\n part: { image },\n } = useContentPartImage();\n return <Primitive.img src={image} {...props} ref={forwardedRef} />;\n});\n\nContentPartPrimitiveImage.displayName = \"ContentPartPrimitive.Image\";\n","import type { FC } from \"react\";\nimport { useContentPartDisplay } from \"../../primitive-hooks/contentPart/useContentPartDisplay\";\n\nexport type ContentPartPrimitiveDisplayProps = {};\n\nexport const ContentPartPrimitiveDisplay: FC<\n ContentPartPrimitiveDisplayProps\n> = () => {\n const {\n part: { display },\n } = useContentPartDisplay();\n return display ?? null;\n};\n\nContentPartPrimitiveDisplay.displayName = \"ContentPartPrimitive.Display\";\n","import { FC, PropsWithChildren } from \"react\";\nimport { useContentPartContext } from \"../../context\";\n\nexport type ContentPartPrimitiveInProgressProps = PropsWithChildren;\n\nexport const ContentPartPrimitiveInProgress: FC<\n ContentPartPrimitiveInProgressProps\n> = ({ children }) => {\n const { useContentPart } = useContentPartContext();\n const isInProgress = useContentPart((c) => c.status.type === \"running\");\n\n return isInProgress ? children : null;\n};\n\nContentPartPrimitiveInProgress.displayName = \"ContentPartPrimitive.InProgress\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { ComponentPropsWithoutRef, FC } from \"react\";\n\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\nexport type MessagePrimitiveInProgressProps = PrimitiveSpanProps;\n\n/**\n * @deprecated Define a custom Text renderer via ContentPartPrimitiveInProgress instead.\n */\nexport const MessagePrimitiveInProgress: FC<\n MessagePrimitiveInProgressProps\n> = () => {\n return null;\n};\n\nMessagePrimitiveInProgress.displayName = \"MessagePrimitive.InProgress\";\n","export { ComposerPrimitiveRoot as Root } from \"./ComposerRoot\";\nexport { ComposerPrimitiveInput as Input } from \"./ComposerInput\";\nexport { ComposerPrimitiveSend as Send } from \"./ComposerSend\";\nexport { ComposerPrimitiveCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerPrimitiveIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n type FormEvent,\n forwardRef,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport { useComposerSend } from \"../../primitive-hooks\";\n\ntype ComposerPrimitiveRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\nexport type ComposerPrimitiveRootProps = PrimitiveFormProps;\n\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRootElement,\n ComposerPrimitiveRootProps\n>(({ onSubmit, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\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/react/ComposerContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { useOnComposerFocus } from \"../../utils/hooks/useOnComposerFocus\";\n\nexport type ComposerPrimitiveInputProps = TextareaAutosizeProps & {\n asChild?: boolean | undefined;\n};\n\nexport const ComposerPrimitiveInput = forwardRef<\n HTMLTextAreaElement,\n ComposerPrimitiveInputProps\n>(\n (\n {\n autoFocus = false,\n asChild,\n disabled: disabledProp,\n onChange,\n onKeyDown,\n ...rest\n },\n forwardedRef,\n ) => {\n const { useThread } = 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 isDisabled = useThread((t) => t.isDisabled) ?? disabledProp ?? false;\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n useEscapeKeydown((e) => {\n const composer = useComposer.getState();\n if (composer.canCancel) {\n composer.cancel();\n e.preventDefault();\n }\n });\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (isDisabled) return;\n\n if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n\n textareaRef.current?.closest(\"form\")?.requestSubmit();\n }\n }\n };\n\n const autoFocusEnabled = autoFocus && !isDisabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus({ preventScroll: true });\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnComposerFocus(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n name=\"input\"\n value={value}\n {...rest}\n ref={ref}\n disabled={isDisabled}\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\nComposerPrimitiveInput.displayName = \"ComposerPrimitive.Input\";\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\n\ntype ComposerPrimitiveSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\nexport type ComposerPrimitiveSendProps = PrimitiveButtonProps;\n\nexport const ComposerPrimitiveSend = forwardRef<\n ComposerPrimitiveSendElement,\n ComposerPrimitiveSendProps\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\nComposerPrimitiveSend.displayName = \"ComposerPrimitive.Send\";\n","\"use client\";\n\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useComposerCancel } from \"../../primitive-hooks/composer/useComposerCancel\";\n\nexport type ComposerPrimitiveCancelProps = ActionButtonProps<\n typeof useComposerCancel\n>;\n\nexport const ComposerPrimitiveCancel = createActionButton(\n \"ComposerPrimitive.Cancel\",\n useComposerCancel,\n);\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport {\n UseComposerIfProps,\n useComposerIf,\n} from \"../../primitive-hooks/composer/useComposerIf\";\n\nexport type ComposerPrimitiveIfProps = PropsWithChildren<UseComposerIfProps>;\n\nexport const ComposerPrimitiveIf: FC<ComposerPrimitiveIfProps> = ({\n children,\n ...query\n}) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n\nComposerPrimitiveIf.displayName = \"ComposerPrimitive.If\";\n","export { ContentPartPrimitiveText as Text } from \"./ContentPartText\";\nexport { ContentPartPrimitiveImage as Image } from \"./ContentPartImage\";\nexport { ContentPartPrimitiveDisplay as Display } from \"./ContentPartDisplay\";\nexport { ContentPartPrimitiveInProgress as InProgress } from \"./ContentPartInProgress\";\n","export { ThreadPrimitiveRoot as Root } from \"./ThreadRoot\";\nexport { ThreadPrimitiveEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadPrimitiveIf as If } from \"./ThreadIf\";\nexport { ThreadPrimitiveViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadPrimitiveMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadPrimitiveScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadPrimitiveSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\n\ntype ThreadPrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type ThreadPrimitiveRootProps = PrimitiveDivProps;\n\nexport const ThreadPrimitiveRoot = forwardRef<\n ThreadPrimitiveRootElement,\n ThreadPrimitiveRootProps\n>((props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n});\n\nThreadPrimitiveRoot.displayName = \"ThreadPrimitive.Root\";\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useThreadEmpty } from \"../../primitive-hooks\";\n\nexport type ThreadPrimitiveEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadPrimitiveEmpty: FC<ThreadPrimitiveEmptyProps> = ({\n children,\n}) => {\n const empty = useThreadEmpty();\n return empty ? children : null;\n};\n\nThreadPrimitiveEmpty.displayName = \"ThreadPrimitive.Empty\";\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport {\n UseThreadIfProps,\n useThreadIf,\n} from \"../../primitive-hooks/thread/useThreadIf\";\n\nexport type ThreadPrimitiveIfProps = PropsWithChildren<UseThreadIfProps>;\n\nexport const ThreadPrimitiveIf: FC<ThreadPrimitiveIfProps> = ({\n children,\n ...query\n}) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n\nThreadPrimitiveIf.displayName = \"ThreadPrimitive.If\";\n","\"use client\";\n\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport {\n UseThreadViewportAutoScrollProps,\n useThreadViewportAutoScroll,\n} from \"../../primitive-hooks/thread/useThreadViewportAutoScroll\";\n\ntype ThreadPrimitiveViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type ThreadPrimitiveViewportProps = PrimitiveDivProps &\n UseThreadViewportAutoScrollProps;\n\nexport const ThreadPrimitiveViewport = forwardRef<\n ThreadPrimitiveViewportElement,\n ThreadPrimitiveViewportProps\n>(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {\n const autoScrollRef = useThreadViewportAutoScroll<HTMLDivElement>({\n autoScroll,\n });\n\n const ref = useComposedRefs(forwardedRef, autoScrollRef);\n\n return (\n <Primitive.div {...rest} ref={ref}>\n {children}\n </Primitive.div>\n );\n});\n\nThreadPrimitiveViewport.displayName = \"ThreadPrimitive.Viewport\";\n","\"use client\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useRef } from \"react\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { StoreApi } from \"zustand\";\nimport { ThreadViewportState } from \"../../context\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\n\nexport type UseThreadViewportAutoScrollProps = {\n autoScroll?: boolean | undefined;\n};\n\nexport const useThreadViewportAutoScroll = <TElement extends HTMLElement>({\n autoScroll = true,\n}: UseThreadViewportAutoScrollProps) => {\n const divRef = useRef<TElement>(null);\n\n const { useViewport } = useThreadContext();\n\n const lastScrollTop = useRef<number>(0);\n\n // bug: when ScrollToBottom's button changes its disabled state, the scroll stops\n // fix: delay the state change until the scroll is done\n const isScrollingToBottomRef = useRef(false);\n\n const scrollToBottom = (behavior: ScrollBehavior) => {\n const div = divRef.current;\n if (!div || !autoScroll) return;\n\n isScrollingToBottomRef.current = true;\n div.scrollTo({ top: div.scrollHeight, behavior });\n };\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom =\n div.scrollHeight - div.scrollTop <= div.clientHeight + 1; // TODO figure out why +1 is needed\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else {\n if (newIsAtBottom) {\n isScrollingToBottomRef.current = false;\n }\n\n if (newIsAtBottom !== isAtBottom) {\n (useViewport as unknown as StoreApi<ThreadViewportState>).setState({\n isAtBottom: newIsAtBottom,\n });\n }\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n const resizeRef = useOnResizeContent(() => {\n if (isScrollingToBottomRef.current || useViewport.getState().isAtBottom) {\n scrollToBottom(\"instant\");\n }\n\n handleScroll();\n });\n\n const scrollRef = useManagedRef<HTMLElement>((el) => {\n el.addEventListener(\"scroll\", handleScroll);\n return () => {\n el.removeEventListener(\"scroll\", handleScroll);\n };\n });\n\n const autoScrollRef = useComposedRefs<TElement>(resizeRef, scrollRef, divRef);\n\n useOnScrollToBottom(() => {\n scrollToBottom(\"auto\");\n });\n\n return autoScrollRef;\n};\n","import { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useCallback } from \"react\";\nimport { useManagedRef } from \"./useManagedRef\";\n\nexport const useOnResizeContent = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const refCallback = useCallback(\n (el: HTMLElement) => {\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 },\n [callbackRef],\n );\n\n return useManagedRef(refCallback);\n};\n","import { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/react/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 ComponentType, type FC, memo } from \"react\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerPrimitiveIf } from \"../composer/ComposerIf\";\nimport { MessagePrimitiveIf } from \"../message/MessageIf\";\n\nexport type ThreadPrimitiveMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType | undefined;\n EditComposer?: ComponentType | undefined;\n AssistantMessage?: ComponentType | undefined;\n SystemMessage?: ComponentType | undefined;\n }\n | {\n Message?: ComponentType | undefined;\n UserMessage: ComponentType;\n EditComposer?: ComponentType | undefined;\n AssistantMessage: ComponentType;\n SystemMessage?: ComponentType | undefined;\n };\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst getComponents = (\n components: ThreadPrimitiveMessagesProps[\"components\"],\n) => {\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 SystemMessage: components.SystemMessage ?? DEFAULT_SYSTEM_MESSAGE,\n };\n};\n\ntype ThreadMessageProps = {\n messageIndex: number;\n components: ThreadPrimitiveMessagesProps[\"components\"];\n};\n\nconst ThreadMessageImpl: FC<ThreadMessageProps> = ({\n messageIndex,\n components,\n}) => {\n const { UserMessage, EditComposer, AssistantMessage, SystemMessage } =\n getComponents(components);\n return (\n <MessageProvider messageIndex={messageIndex}>\n <MessagePrimitiveIf user>\n <ComposerPrimitiveIf editing={false}>\n <UserMessage />\n </ComposerPrimitiveIf>\n <ComposerPrimitiveIf editing>\n <EditComposer />\n </ComposerPrimitiveIf>\n </MessagePrimitiveIf>\n <MessagePrimitiveIf assistant>\n <AssistantMessage />\n </MessagePrimitiveIf>\n <MessagePrimitiveIf system>\n <SystemMessage />\n </MessagePrimitiveIf>\n </MessageProvider>\n );\n};\n\nconst ThreadMessage = memo(\n ThreadMessageImpl,\n (prev, next) =>\n prev.messageIndex === next.messageIndex &&\n prev.components.Message === next.components.Message &&\n prev.components.UserMessage === next.components.UserMessage &&\n prev.components.EditComposer === next.components.EditComposer &&\n prev.components.AssistantMessage === next.components.AssistantMessage &&\n prev.components.SystemMessage === next.components.SystemMessage,\n);\n\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessagesProps> = ({\n components,\n}) => {\n const { useThreadMessages } = useThreadContext();\n\n const messagesLength = useThreadMessages((t) => t.length);\n if (messagesLength === 0) return null;\n\n return new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx; // keep the same key when switching branches for better a11y support\n return (\n <ThreadMessage\n key={messageIndex}\n messageIndex={messageIndex}\n components={components}\n />\n );\n });\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) =>\n prev.components?.Message === next.components?.Message &&\n prev.components?.UserMessage === next.components?.UserMessage &&\n prev.components?.EditComposer === next.components?.EditComposer &&\n prev.components?.AssistantMessage === next.components?.AssistantMessage &&\n prev.components?.SystemMessage === next.components?.SystemMessage,\n);\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { StoreApi, create } from \"zustand\";\nimport type {\n CoreUserContentPart,\n ThreadMessage,\n} from \"../../types/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../react/MessageContext\";\nimport type { MessageContextValue } from \"../react/MessageContext\";\nimport { useThreadContext } from \"../react/ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/EditComposer\";\nimport { makeMessageUtilsStore } from \"../stores/MessageUtils\";\nimport { ThreadMessagesState } from \"../stores/ThreadMessages\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (messages: ThreadMessagesState, message: ThreadMessage) => {\n return messages[messages.length - 1]?.id === message.id;\n};\n\nconst getMessageState = (\n messages: ThreadMessagesState,\n getBranches: (messageId: string) => readonly string[],\n useMessage: MessageContextValue[\"useMessage\"] | undefined,\n messageIndex: number,\n) => {\n const parentId = messages[messageIndex - 1]?.id ?? null;\n const message = messages[messageIndex];\n if (!message) return null;\n\n const isLast = getIsLast(messages, message);\n const branches = getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage?.getState();\n if (\n currentState &&\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return null;\n\n return Object.freeze({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThreadMessages, useThreadActions } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>(\n () =>\n getMessageState(\n useThreadMessages.getState(),\n useThreadActions.getState().getBranches,\n undefined,\n messageIndex,\n )!,\n );\n const useMessageUtils = makeMessageUtilsStore();\n const useEditComposer = 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 CoreUserContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThreadActions.getState().append({\n parentId,\n role: \"user\",\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n return { useMessage, useMessageUtils, useEditComposer };\n });\n\n useEffect(() => {\n const syncMessage = (thread: ThreadMessagesState) => {\n const newState = getMessageState(\n thread,\n useThreadActions.getState().getBranches,\n context.useMessage,\n messageIndex,\n );\n if (!newState) return;\n (context.useMessage as unknown as StoreApi<MessageState>).setState(\n newState,\n true,\n );\n };\n\n syncMessage(useThreadMessages.getState());\n\n return useThreadMessages.subscribe(syncMessage);\n }, [useThreadMessages, useThreadActions, context, 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 { create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n canCancel: boolean;\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => void;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): ReadonlyStore<EditComposerState> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n canCancel: false,\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, canCancel: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false, canCancel: false });\n onSend(value);\n },\n cancel: () => {\n set({ isEditing: false, canCancel: false });\n },\n }));\n","import { create } from \"zustand\";\n\nexport type MessageUtilsState = Readonly<{\n isCopied: boolean;\n setIsCopied: (value: boolean) => void;\n isHovering: boolean;\n setIsHovering: (value: boolean) => void;\n}>;\n\nexport const makeMessageUtilsStore = () =>\n create<MessageUtilsState>((set) => ({\n isCopied: false,\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n isHovering: false,\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n","\"use client\";\n\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useThreadScrollToBottom } from \"../../primitive-hooks/thread/useThreadScrollToBottom\";\n\nexport type ThreadPrimitiveScrollToBottomProps = ActionButtonProps<\n typeof useThreadScrollToBottom\n>;\n\nexport const ThreadPrimitiveScrollToBottom = createActionButton(\n \"ThreadPrimitive.ScrollToBottom\",\n useThreadScrollToBottom,\n);\n","\"use client\";\n\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useThreadSuggestion } from \"../../primitive-hooks/thread/useThreadSuggestion\";\n\nexport type ThreadPrimitiveSuggestionProps = ActionButtonProps<\n typeof useThreadSuggestion\n>;\n\nexport const ThreadPrimitiveSuggestion = createActionButton(\n \"ThreadPrimitive.Suggestion\",\n useThreadSuggestion,\n [\"prompt\", \"autoSend\", \"method\"],\n);\n","\"use client\";\n\nimport { useInsertionEffect, useState } from \"react\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { LocalRuntime } from \"./LocalRuntime\";\nimport { LocalRuntimeOptions } from \"./LocalRuntimeOptions\";\n\nexport const useLocalRuntime = (\n adapter: ChatModelAdapter,\n options?: LocalRuntimeOptions,\n) => {\n const [runtime] = useState(() => new LocalRuntime(adapter, options));\n\n useInsertionEffect(() => {\n runtime.adapter = adapter;\n });\n\n return runtime;\n};\n","import { type ModelConfigProvider } from \"../../types/ModelConfigTypes\";\nimport type { Unsubscribe } from \"../../types/Unsubscribe\";\nimport type { AssistantRuntime } from \"./AssistantRuntime\";\nimport { ReactThreadRuntime } from \"./ReactThreadRuntime\";\n\nexport abstract class BaseAssistantRuntime<\n TThreadRuntime extends ReactThreadRuntime,\n> implements AssistantRuntime\n{\n constructor(private _thread: TThreadRuntime) {\n this._thread = _thread;\n }\n\n get thread() {\n return this._thread;\n }\n\n set thread(thread: TThreadRuntime) {\n this._thread = thread;\n this.subscriptionHandler();\n }\n\n public abstract registerModelConfigProvider(\n provider: ModelConfigProvider,\n ): Unsubscribe;\n public abstract switchToThread(threadId: string | null): void;\n\n private _subscriptions = new Set<() => void>();\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private subscriptionHandler = () => {\n for (const callback of this._subscriptions) callback();\n };\n}\n","export { ProxyConfigProvider } from \"./utils/ProxyConfigProvider\";\nexport { MessageRepository } from \"./runtimes/utils/MessageRepository\";\nexport { BaseAssistantRuntime } from \"./runtimes/core/BaseAssistantRuntime\";\nexport * from \"./utils/smooth\";\nexport { TooltipIconButton } from \"./ui/base/tooltip-icon-button\";\nexport { generateId } from \"./utils/idUtils\";\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 { generateId } from \"../../../internal\";\nimport {\n ThreadMessage,\n CoreMessage,\n ToolCallContentPart,\n MessageStatus,\n} from \"../../../types\";\n\nexport const fromCoreMessages = (\n message: readonly CoreMessage[],\n): ThreadMessage[] => {\n return message.map((message) => fromCoreMessage(message));\n};\n\nexport const fromCoreMessage = (\n message: CoreMessage,\n {\n id = generateId(),\n status = { type: \"complete\", reason: \"unknown\" } as MessageStatus,\n } = {},\n): ThreadMessage => {\n const commonProps = {\n id,\n createdAt: new Date(),\n };\n\n const role = message.role;\n switch (role) {\n case \"assistant\":\n return {\n ...commonProps,\n role,\n content: message.content.map((part) => {\n if (part.type === \"tool-call\") {\n return {\n ...part,\n argsText: JSON.stringify(part.args),\n } satisfies ToolCallContentPart;\n }\n return part;\n }),\n status,\n } satisfies ThreadMessage;\n\n case \"user\":\n return {\n ...commonProps,\n role,\n content: message.content,\n } satisfies ThreadMessage;\n\n case \"system\":\n return {\n ...commonProps,\n role,\n content: message.content,\n } satisfies ThreadMessage;\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n","import type { CoreMessage, ThreadMessage } from \"../../types/AssistantTypes\";\nimport { generateOptimisticId } from \"../../utils/idUtils\";\nimport { fromCoreMessage } from \"../edge/converters/fromCoreMessage\";\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 getMessage(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n return {\n parentId: message.prev?.current.id ?? null,\n message: message.current,\n };\n }\n\n appendOptimisticMessage(parentId: string | null, message: CoreMessage) {\n let optimisticId: string;\n do {\n optimisticId = generateOptimisticId();\n } while (this.messages.has(optimisticId));\n\n this.addOrUpdateMessage(\n parentId,\n fromCoreMessage(message, {\n id: optimisticId,\n status: { type: \"running\" },\n }),\n );\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","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./tooltip\";\nimport { Button, ButtonProps } from \"./button\";\n\nexport type TooltipIconButtonProps = ButtonProps & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const TooltipIconButton = forwardRef<\n HTMLButtonElement,\n TooltipIconButtonProps\n>(({ children, tooltip, side = \"bottom\", ...rest }, ref) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" {...rest} ref={ref}>\n {children}\n <span className=\"aui-sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n});\n\nTooltipIconButton.displayName = \"TooltipIconButton\";\n","\"use client\";\n\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { withDefaults } from \"../utils/withDefaults\";\nimport { FC } from \"react\";\n\nexport const Tooltip: FC<TooltipPrimitive.TooltipProps> = (props) => {\n return (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root {...props} />\n </TooltipPrimitive.Provider>\n );\n};\n\nTooltip.displayName = \"Tooltip\";\n\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = withDefaults(TooltipPrimitive.Content, {\n sideOffset: 4,\n className: \"aui-tooltip-content\",\n});\n\nTooltipContent.displayName = \"TooltipContent\";\n","import {\n ComponentPropsWithoutRef,\n ElementRef,\n ElementType,\n forwardRef,\n} from \"react\";\nimport classNames from \"classnames\";\n\nexport const withDefaultProps =\n <TProps extends { className?: string }>({\n className,\n ...defaultProps\n }: Partial<TProps>) =>\n ({ className: classNameProp, ...props }: TProps) => {\n return {\n className: classNames(className, classNameProp),\n ...defaultProps,\n ...props,\n } as TProps;\n };\n\nexport const withDefaults = <TComponent extends ElementType>(\n Component: TComponent,\n defaultProps: Partial<Omit<ComponentPropsWithoutRef<TComponent>, \"asChild\">>,\n) => {\n type TComponentProps = typeof defaultProps;\n const getProps = withDefaultProps<TComponentProps>(defaultProps);\n const WithDefaults = forwardRef<ElementRef<TComponent>, TComponentProps>(\n (props, ref) => {\n const ComponentAsAny = Component as any;\n return <ComponentAsAny {...getProps(props)} ref={ref} />;\n },\n );\n WithDefaults.displayName =\n \"withDefaults(\" +\n (typeof Component === \"string\" ? Component : Component.displayName) +\n \")\";\n return WithDefaults;\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { ElementRef, forwardRef } from \"react\";\n\nconst buttonVariants = cva(\"aui-button\", {\n variants: {\n variant: {\n default: \"aui-button-primary\",\n outline: \"aui-button-outline\",\n ghost: \"aui-button-ghost\",\n },\n size: {\n default: \"aui-button-medium\",\n icon: \"aui-button-icon\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\ntype ButtonElement = ElementRef<typeof Primitive.button>;\n\nexport type ButtonProps = React.ComponentPropsWithoutRef<\n typeof Primitive.button\n> &\n VariantProps<typeof buttonVariants>;\n\nconst Button = forwardRef<ButtonElement, ButtonProps>(\n ({ className, variant, size, ...props }, ref) => {\n return (\n <Primitive.button\n className={buttonVariants({ variant, size, className })}\n {...props}\n ref={ref}\n />\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import {\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n if (part.result) {\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result: part.result,\n // isError\n });\n }\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n): LanguageModelV1Message[] {\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [{ role: \"system\", content: message.content[0].text }];\n }\n\n case \"user\": {\n const msg: LanguageModelV1Message = {\n role: \"user\",\n content: message.content.map(\n (part): LanguageModelV1TextPart | LanguageModelV1ImagePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n default: {\n const unhandledType: \"ui\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: \"ui\" = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n","import { LanguageModelV1Message } from \"@ai-sdk/provider\";\nimport { CoreMessage, ToolCallContentPart } from \"../../../types\";\n\ntype fromLanguageModelMessagesOptions = {\n mergeRoundtrips: boolean;\n};\n\nexport const fromLanguageModelMessages = (\n lm: LanguageModelV1Message[],\n { mergeRoundtrips }: fromLanguageModelMessagesOptions,\n): CoreMessage[] => {\n const messages: CoreMessage[] = [];\n\n for (const lmMessage of lm) {\n const role = lmMessage.role;\n switch (role) {\n case \"system\": {\n messages.push({\n role: \"system\",\n content: [\n {\n type: \"text\",\n text: lmMessage.content,\n },\n ],\n });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: lmMessage.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n case \"image\": {\n if (part.image instanceof URL) {\n return {\n type: \"image\",\n image: part.image.href,\n };\n }\n throw new Error(\"Only images with URL data are supported\");\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n });\n break;\n }\n case \"assistant\": {\n const newContent = lmMessage.content.map((part) => {\n if (part.type === \"tool-call\") {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.args),\n args: part.args as Record<string, unknown>,\n } satisfies ToolCallContentPart;\n }\n return part;\n });\n\n if (mergeRoundtrips) {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role === \"assistant\") {\n previousMessage.content.push(...newContent);\n break;\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: newContent,\n });\n break;\n }\n case \"tool\": {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role !== \"assistant\")\n throw new Error(\n \"A tool message must be preceded by an assistant message.\",\n );\n\n for (const tool of lmMessage.content) {\n const toolCall = previousMessage.content.find(\n (c): c is ToolCallContentPart =>\n c.type === \"tool-call\" && c.toolCallId === tool.toolCallId,\n );\n if (!toolCall)\n throw new Error(\"Received tool result for an unknown tool call.\");\n if (toolCall.toolName !== tool.toolName)\n throw new Error(\"Tool call name mismatch.\");\n\n toolCall.result = tool.result;\n if (tool.isError) {\n toolCall.isError = true;\n }\n }\n\n break;\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n }\n\n return messages;\n};\n","import { ThreadMessage, CoreMessage } from \"../../../types\";\n\nexport const toCoreMessages = (message: ThreadMessage[]): CoreMessage[] => {\n return message.map(toCoreMessage);\n};\n\nexport const toCoreMessage = (message: ThreadMessage): CoreMessage => {\n const role = message.role;\n switch (role) {\n case \"assistant\":\n return {\n role,\n content: message.content.map((part) => {\n if (part.type === \"ui\") throw new Error(\"UI parts are not supported\");\n if (part.type === \"tool-call\") {\n const { argsText, ...rest } = part;\n return rest;\n }\n return part;\n }),\n };\n\n case \"user\":\n return {\n role,\n content: message.content.map((part) => {\n if (part.type === \"ui\") throw new Error(\"UI parts are not supported\");\n return part;\n }),\n };\n\n case \"system\":\n return {\n role,\n content: message.content,\n };\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n","import { LanguageModelV1FunctionTool } from \"@ai-sdk/provider\";\nimport { Tool } from \"../../../types/ModelConfigTypes\";\n\nexport const fromLanguageModelTools = (\n tools: LanguageModelV1FunctionTool[],\n): Record<string, Tool<any, any>> => {\n return Object.fromEntries(\n tools.map((tool) => [\n tool.name,\n {\n description: tool.description,\n parameters: tool.parameters,\n },\n ]),\n );\n};\n","import { LanguageModelV1FunctionTool } from \"@ai-sdk/provider\";\nimport { JSONSchema7 } from \"json-schema\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { Tool } from \"../../../types/ModelConfigTypes\";\n\nexport const toLanguageModelTools = (\n tools: Record<string, Tool<any, any>>,\n): LanguageModelV1FunctionTool[] => {\n return Object.entries(tools).map(([name, tool]) => ({\n type: \"function\",\n name,\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: (tool.parameters instanceof z.ZodType\n ? zodToJsonSchema(tool.parameters)\n : tool.parameters) as JSONSchema7,\n }));\n};\n","import { LocalRuntimeOptions, useLocalRuntime } from \"..\";\nimport { useState } from \"react\";\nimport { EdgeChatAdapterOptions, EdgeChatAdapter } from \"./EdgeChatAdapter\";\n\nexport type EdgeRuntimeOptions = EdgeChatAdapterOptions & LocalRuntimeOptions;\n\nexport const useEdgeRuntime = ({\n initialMessages,\n ...options\n}: EdgeRuntimeOptions) => {\n const [adapter] = useState(() => new EdgeChatAdapter(options));\n return useLocalRuntime(adapter, { initialMessages });\n};\n","import {\n AssistantStreamChunkTuple,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantDecoderStream() {\n const toolCallNames = new Map<string, string>();\n let currentToolCall:\n | { id: string; name: string; argsText: string }\n | undefined;\n\n return new TransformStream<string, ToolResultStreamPart>({\n transform(chunk, controller) {\n const [code, value] = parseStreamPart(chunk);\n\n if (\n currentToolCall &&\n code !== AssistantStreamChunkType.ToolCallArgsTextDelta &&\n code !== AssistantStreamChunkType.Error\n ) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: currentToolCall.id,\n toolName: currentToolCall.name,\n args: currentToolCall.argsText,\n });\n currentToolCall = undefined;\n }\n\n switch (code) {\n case AssistantStreamChunkType.TextDelta: {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallBegin: {\n const { id, name } = value;\n toolCallNames.set(id, name);\n currentToolCall = { id, name, argsText: \"\" };\n break;\n }\n case AssistantStreamChunkType.ToolCallArgsTextDelta: {\n const delta = value;\n currentToolCall!.argsText += delta;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: currentToolCall!.id,\n toolName: currentToolCall!.name,\n argsTextDelta: delta,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallResult: {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType: \"function\",\n toolCallId: value.id,\n toolName: toolCallNames.get(value.id)!,\n result: value.result,\n });\n break;\n }\n case AssistantStreamChunkType.Finish: {\n controller.enqueue({\n type: \"finish\",\n ...value,\n });\n break;\n }\n case AssistantStreamChunkType.Error: {\n controller.enqueue({\n type: \"error\",\n error: value,\n });\n break;\n }\n default: {\n const unhandledType: never = code;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n}\n\nconst parseStreamPart = (part: string): AssistantStreamChunkTuple => {\n const index = part.indexOf(\":\");\n if (index === -1) throw new Error(\"Invalid stream part\");\n return [\n part.slice(0, index) as AssistantStreamChunkType,\n JSON.parse(part.slice(index + 1)),\n ] as const;\n};\n","export function chunkByLineStream() {\n let buffer = \"\";\n\n return new TransformStream({\n transform(chunk, controller) {\n buffer += chunk;\n const lines = buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n buffer = lines[lines.length - 1]!;\n },\n flush(controller) {\n // flush any remaining content in the buffer\n if (buffer) {\n controller.enqueue(buffer);\n }\n },\n });\n}\n","import sjson from \"secure-json-parse\";\nimport { fixJson } from \"./fix-json\";\n\nexport const parsePartialJson = (json: string) => {\n try {\n return sjson.parse(json);\n } catch {\n try {\n return sjson.parse(fixJson(json));\n } catch {\n return undefined;\n }\n }\n};\n","// LICENSE for this file only\n\n// Copyright 2023 Vercel, Inc.\n\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype State =\n | \"ROOT\"\n | \"FINISH\"\n | \"INSIDE_STRING\"\n | \"INSIDE_STRING_ESCAPE\"\n | \"INSIDE_LITERAL\"\n | \"INSIDE_NUMBER\"\n | \"INSIDE_OBJECT_START\"\n | \"INSIDE_OBJECT_KEY\"\n | \"INSIDE_OBJECT_AFTER_KEY\"\n | \"INSIDE_OBJECT_BEFORE_VALUE\"\n | \"INSIDE_OBJECT_AFTER_VALUE\"\n | \"INSIDE_OBJECT_AFTER_COMMA\"\n | \"INSIDE_ARRAY_START\"\n | \"INSIDE_ARRAY_AFTER_VALUE\"\n | \"INSIDE_ARRAY_AFTER_COMMA\";\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_STRING\");\n break;\n }\n\n case \"f\":\n case \"t\":\n case \"n\": {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_LITERAL\");\n break;\n }\n\n case \"-\": {\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_NUMBER\");\n break;\n }\n\n case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\n }\n\n case \"[\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_ARRAY_START\");\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_COMMA\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i]!;\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\n\n case \"INSIDE_OBJECT_START\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n case \"}\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_COMMA\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\": {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_AFTER_KEY\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n switch (char) {\n case \",\": {\n stack.pop();\n stack.push(\"INSIDE_ARRAY_AFTER_COMMA\");\n break;\n }\n\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case \"INSIDE_NUMBER\": {\n switch (char) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n lastValidIndex = i;\n break;\n }\n\n case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n\n case \",\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"}\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case \"]\": {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !\"false\".startsWith(partialLiteral) &&\n !\"true\".startsWith(partialLiteral) &&\n !\"null\".startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\n }\n\n case \"INSIDE_OBJECT_KEY\":\n case \"INSIDE_OBJECT_AFTER_KEY\":\n case \"INSIDE_OBJECT_AFTER_COMMA\":\n case \"INSIDE_OBJECT_START\":\n case \"INSIDE_OBJECT_BEFORE_VALUE\":\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n result += \"}\";\n break;\n }\n\n case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if (\"true\".startsWith(partialLiteral)) {\n result += \"true\".slice(partialLiteral.length);\n } else if (\"false\".startsWith(partialLiteral)) {\n result += \"false\".slice(partialLiteral.length);\n } else if (\"null\".startsWith(partialLiteral)) {\n result += \"null\".slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import { ChatModelRunResult } from \"../../local/ChatModelAdapter\";\nimport { parsePartialJson } from \"../partial-json/parse-partial-json\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\nimport { MessageStatus } from \"../../../types\";\n\nexport function runResultStream() {\n let message: ChatModelRunResult = {\n content: [],\n status: { type: \"running\" },\n };\n const currentToolCall = { toolCallId: \"\", argsText: \"\" };\n\n return new TransformStream<ToolResultStreamPart, ChatModelRunResult>({\n transform(chunk, controller) {\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"text-delta\": {\n message = appendOrUpdateText(message, chunk.textDelta);\n controller.enqueue(message);\n break;\n }\n case \"tool-call-delta\": {\n const { toolCallId, toolName, argsTextDelta } = chunk;\n if (currentToolCall.toolCallId !== toolCallId) {\n currentToolCall.toolCallId = toolCallId;\n currentToolCall.argsText = argsTextDelta;\n } else {\n currentToolCall.argsText += argsTextDelta;\n }\n\n message = appendOrUpdateToolCall(\n message,\n toolCallId,\n toolName,\n currentToolCall.argsText,\n );\n controller.enqueue(message);\n break;\n }\n case \"tool-call\": {\n break;\n }\n case \"tool-result\": {\n message = appendOrUpdateToolResult(\n message,\n chunk.toolCallId,\n chunk.toolName,\n chunk.result,\n );\n controller.enqueue(message);\n break;\n }\n case \"finish\": {\n message = appendOrUpdateFinish(message, chunk);\n controller.enqueue(message);\n break;\n }\n case \"error\": {\n if (\n chunk.error instanceof Error &&\n chunk.error.name === \"AbortError\"\n ) {\n message = appendOrUpdateCancel(message);\n controller.enqueue(message);\n break;\n } else {\n throw chunk.error;\n }\n }\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n}\n\nconst appendOrUpdateText = (message: ChatModelRunResult, textDelta: string) => {\n let contentParts = message.content;\n let contentPart = message.content.at(-1);\n if (contentPart?.type !== \"text\") {\n contentPart = { type: \"text\", text: textDelta };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = { type: \"text\", text: contentPart.text + textDelta };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateToolCall = (\n message: ChatModelRunResult,\n toolCallId: string,\n toolName: string,\n argsText: string,\n) => {\n let contentParts = message.content;\n let contentPart = message.content.at(-1);\n if (\n contentPart?.type !== \"tool-call\" ||\n contentPart.toolCallId !== toolCallId\n ) {\n contentPart = {\n type: \"tool-call\",\n toolCallId,\n toolName,\n argsText,\n args: parsePartialJson(argsText),\n };\n } else {\n contentParts = contentParts.slice(0, -1);\n contentPart = {\n ...contentPart,\n argsText,\n args: parsePartialJson(argsText),\n };\n }\n return {\n ...message,\n content: contentParts.concat([contentPart]),\n };\n};\n\nconst appendOrUpdateToolResult = (\n message: ChatModelRunResult,\n toolCallId: string,\n toolName: string,\n result: any,\n) => {\n let found = false;\n const newContentParts = message.content.map((part) => {\n if (part.type !== \"tool-call\" || part.toolCallId !== toolCallId)\n return part;\n found = true;\n\n if (part.toolName !== toolName)\n throw new Error(\n `Tool call ${toolCallId} found with tool name ${part.toolName}, but expected ${toolName}`,\n );\n\n return {\n ...part,\n result,\n };\n });\n if (!found)\n throw new Error(\n `Received tool result for unknown tool call \"${toolName}\" / \"${toolCallId}\". This is likely an internal bug in assistant-ui.`,\n );\n\n return {\n ...message,\n content: newContentParts,\n };\n};\n\nconst appendOrUpdateFinish = (\n message: ChatModelRunResult,\n chunk: LanguageModelV1StreamPart & { type: \"finish\" },\n): ChatModelRunResult => {\n const { type, ...rest } = chunk;\n return {\n ...message,\n status: getStatus(chunk),\n roundtrips: [\n ...(message.roundtrips ?? []),\n {\n logprobs: rest.logprobs,\n usage: rest.usage,\n },\n ],\n };\n};\n\nconst getStatus = (\n chunk: LanguageModelV1StreamPart & { type: \"finish\" },\n): MessageStatus => {\n if (chunk.finishReason === \"tool-calls\") {\n return {\n type: \"requires-action\",\n reason: \"tool-calls\",\n };\n } else if (\n chunk.finishReason === \"stop\" ||\n chunk.finishReason === \"unknown\"\n ) {\n return {\n type: \"complete\",\n reason: chunk.finishReason,\n };\n } else {\n return {\n type: \"incomplete\",\n reason: chunk.finishReason,\n };\n }\n};\n\nconst appendOrUpdateCancel = (\n message: ChatModelRunResult,\n): ChatModelRunResult => {\n return {\n ...message,\n status: {\n type: \"incomplete\",\n reason: \"cancelled\",\n },\n };\n};\n","import { Tool } from \"../../../types/ModelConfigTypes\";\nimport { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { z } from \"zod\";\nimport sjson from \"secure-json-parse\";\n\nexport type ToolResultStreamPart =\n | LanguageModelV1StreamPart\n | {\n type: \"tool-result\";\n toolCallType: \"function\";\n toolCallId: string;\n toolName: string;\n result: unknown;\n isError?: boolean;\n };\n\nexport function toolResultStream(tools: Record<string, Tool> | undefined) {\n const toolCallExecutions = new Map<string, Promise<any>>();\n\n return new TransformStream<ToolResultStreamPart, ToolResultStreamPart>({\n transform(chunk, controller) {\n // forward everything\n controller.enqueue(chunk);\n\n // handle tool calls\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"tool-call\": {\n const { toolCallId, toolCallType, toolName, args: argsText } = chunk;\n const tool = tools?.[toolName];\n if (!tool || !tool.execute) return;\n\n const args = sjson.parse(argsText);\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(args);\n if (!result.success) {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result:\n \"Function parameter validation failed. \" +\n JSON.stringify(result.error.issues),\n isError: true,\n });\n return;\n } else {\n toolCallExecutions.set(\n toolCallId,\n (async () => {\n try {\n const result = await tool.execute!(args);\n\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result,\n });\n } catch (error) {\n console.error(\"Error: \", error);\n controller.enqueue({\n type: \"tool-result\",\n toolCallType,\n toolCallId,\n toolName,\n result: \"Error: \" + error,\n isError: true,\n });\n } finally {\n toolCallExecutions.delete(toolCallId);\n }\n })(),\n );\n }\n }\n break;\n }\n\n // ignore other parts\n case \"text-delta\":\n case \"tool-call-delta\":\n case \"tool-result\":\n case \"finish\":\n case \"error\":\n break;\n\n default: {\n const unhandledType: never = chunkType;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n\n async flush() {\n await Promise.all(toolCallExecutions.values());\n },\n });\n}\n","import { ChatModelAdapter, ChatModelRunOptions } from \"../local\";\nimport { ChatModelRunResult } from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"./converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"./converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"./EdgeRuntimeRequestOptions\";\nimport { assistantDecoderStream } from \"./streams/assistantDecoderStream\";\nimport { chunkByLineStream } from \"./streams/chunkByLineStream\";\nimport { runResultStream } from \"./streams/runResultStream\";\nimport { toolResultStream } from \"./streams/toolResultStream\";\n\nexport function asAsyncIterable<T>(\n source: ReadableStream<T>,\n): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator]: () => {\n const reader = source.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done\n ? { done: true, value: undefined }\n : { done: false, value };\n },\n };\n },\n };\n}\nexport type EdgeChatAdapterOptions = {\n api: string;\n};\n\nexport class EdgeChatAdapter implements ChatModelAdapter {\n constructor(private options: EdgeChatAdapterOptions) {}\n\n async *run({ messages, abortSignal, config }: ChatModelRunOptions) {\n const result = await fetch(this.options.api, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n system: config.system,\n messages: toCoreMessages(messages),\n tools: config.tools ? toLanguageModelTools(config.tools) : [],\n ...config.callSettings,\n ...config.config,\n } satisfies EdgeRuntimeRequestOptions),\n signal: abortSignal,\n });\n\n if (result.status !== 200) {\n throw new Error(`Status ${result.status}: ${await result.text()}`);\n }\n\n const stream = result\n .body!.pipeThrough(new TextDecoderStream())\n .pipeThrough(chunkByLineStream())\n .pipeThrough(assistantDecoderStream())\n .pipeThrough(toolResultStream(config.tools))\n .pipeThrough(runResultStream());\n\n let update: ChatModelRunResult | undefined;\n for await (update of asAsyncIterable(stream)) {\n yield update;\n }\n\n if (update === undefined)\n throw new Error(\"No data received from Edge Runtime\");\n }\n}\n","import type { ThreadAssistantMessage } from \"../../types\";\n\nexport const shouldContinue = (result: ThreadAssistantMessage) =>\n result.status?.type === \"requires-action\" &&\n result.status.reason === \"tool-calls\" &&\n result.content.every((c) => c.type !== \"tool-call\" || !!c.result);\n","import { ThreadRuntime } from \"..\";\nimport { AddToolResultOptions } from \"../../context\";\nimport { generateId } from \"../../internal\";\nimport type {\n ModelConfigProvider,\n AppendMessage,\n ThreadUserMessage,\n ThreadAssistantMessage,\n Unsubscribe,\n} from \"../../types\";\nimport { fromCoreMessages } from \"../edge\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport type { ChatModelAdapter, ChatModelRunResult } from \"./ChatModelAdapter\";\nimport { shouldContinue } from \"./shouldContinue\";\nimport { LocalRuntimeOptions } from \"./LocalRuntimeOptions\";\n\nconst CAPABILITIES = Object.freeze({\n switchToBranch: true,\n edit: true,\n reload: true,\n cancel: true,\n copy: true,\n});\nexport class LocalThreadRuntime implements ThreadRuntime {\n private _subscriptions = new Set<() => void>();\n\n private abortController: AbortController | null = null;\n private readonly repository = new MessageRepository();\n\n public readonly capabilities = CAPABILITIES;\n\n public readonly isDisabled = false;\n\n public get messages() {\n return this.repository.getMessages();\n }\n public get isRunning() {\n return this.abortController != null;\n }\n\n constructor(\n private configProvider: ModelConfigProvider,\n public adapter: ChatModelAdapter,\n private options?: LocalRuntimeOptions,\n ) {\n if (options?.initialMessages) {\n let parentId: string | null = null;\n const messages = fromCoreMessages(options.initialMessages);\n for (const message of messages) {\n this.repository.addOrUpdateMessage(parentId, message);\n parentId = message.id;\n }\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.notifySubscribers();\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.role !== \"user\")\n throw new Error(\n \"Only appending user messages are supported in LocalRuntime. This is likely an internal bug in assistant-ui.\",\n );\n\n // add user message\n const userMessageId = generateId();\n const userMessage: ThreadUserMessage = {\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 this.repository.resetHead(parentId);\n\n // add assistant message\n const id = generateId();\n let message: ThreadAssistantMessage = {\n id,\n role: \"assistant\",\n status: { type: \"running\" },\n content: [],\n createdAt: new Date(),\n };\n\n do {\n message = await this.performRoundtrip(parentId, message);\n } while (shouldContinue(message));\n }\n\n private async performRoundtrip(\n parentId: string | null,\n message: ThreadAssistantMessage,\n ) {\n const messages = this.repository.getMessages();\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n const initialContent = message.content;\n const initialRoundtrips = message.roundtrips;\n const updateMessage = (m: Partial<ChatModelRunResult>) => {\n message = {\n ...message,\n ...(m.content\n ? { content: [...initialContent, ...(m.content ?? [])] }\n : undefined),\n status: m.status ?? message.status,\n ...(m.roundtrips?.length\n ? { roundtrips: [...(initialRoundtrips ?? []), ...m.roundtrips] }\n : undefined),\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this.notifySubscribers();\n };\n\n const maxToolRoundtrips = this.options?.maxToolRoundtrips ?? 1;\n const toolRoundtrips = message.roundtrips?.length ?? 0;\n if (toolRoundtrips > maxToolRoundtrips) {\n // reached max tool roundtrips\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"tool-calls\",\n },\n });\n return message;\n } else {\n updateMessage({\n status: {\n type: \"running\",\n },\n });\n }\n\n try {\n const promiseOrGenerator = this.adapter.run({\n messages,\n abortSignal: this.abortController.signal,\n config: this.configProvider.getModelConfig(),\n onUpdate: updateMessage,\n });\n\n // handle async iterator for streaming results\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n updateMessage(r);\n }\n } else {\n updateMessage(await promiseOrGenerator);\n }\n\n this.abortController = null;\n\n if (message.status.type === \"running\") {\n updateMessage({\n status: { type: \"complete\", reason: \"unknown\" },\n });\n } else {\n // notify subscribers that isRunning is now false\n this.notifySubscribers();\n }\n } catch (e) {\n this.abortController = null;\n\n // TODO this should be handled by the run result stream\n if (e instanceof Error && e.name === \"AbortError\") {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else {\n updateMessage({\n status: { type: \"incomplete\", reason: \"error\", error: e },\n });\n\n throw e;\n }\n }\n return message;\n }\n\n cancelRun(): void {\n if (!this.abortController) return;\n\n this.abortController.abort();\n this.abortController = null;\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 addToolResult({ messageId, toolCallId, result }: AddToolResultOptions) {\n let { parentId, message } = this.repository.getMessage(messageId);\n\n if (message.role !== \"assistant\")\n throw new Error(\"Tried to add tool result to non-assistant message\");\n\n let added = false;\n let found = false;\n const newContent = message.content.map((c) => {\n if (c.type !== \"tool-call\") return c;\n if (c.toolCallId !== toolCallId) return c;\n found = true;\n if (!c.result) added = true;\n return {\n ...c,\n result,\n };\n });\n\n if (!found)\n throw new Error(\"Tried to add tool result to non-existing tool call\");\n\n message = {\n ...message,\n content: newContent,\n };\n this.repository.addOrUpdateMessage(parentId, message);\n\n if (added && shouldContinue(message)) {\n this.performRoundtrip(parentId, message);\n }\n }\n}\n","import { type ModelConfigProvider } from \"../../types/ModelConfigTypes\";\nimport { BaseAssistantRuntime } from \"../core/BaseAssistantRuntime\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { ProxyConfigProvider } from \"../../internal\";\nimport { LocalThreadRuntime } from \"./LocalThreadRuntime\";\nimport { LocalRuntimeOptions } from \"./LocalRuntimeOptions\";\n\nexport class LocalRuntime extends BaseAssistantRuntime<LocalThreadRuntime> {\n private readonly _proxyConfigProvider: ProxyConfigProvider;\n\n constructor(adapter: ChatModelAdapter, options?: LocalRuntimeOptions) {\n const proxyConfigProvider = new ProxyConfigProvider();\n super(new LocalThreadRuntime(proxyConfigProvider, adapter, options));\n this._proxyConfigProvider = proxyConfigProvider;\n }\n\n public set adapter(adapter: ChatModelAdapter) {\n this.thread.adapter = adapter;\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n return this._proxyConfigProvider.registerModelConfigProvider(provider);\n }\n\n public switchToThread(threadId: string | null) {\n if (threadId) {\n throw new Error(\"LocalRuntime does not yet support switching threads\");\n }\n\n return (this.thread = new LocalThreadRuntime(\n this._proxyConfigProvider,\n this.thread.adapter,\n ));\n }\n}\n","import { create } from \"zustand\";\nimport { ReactThreadRuntime } from \"../core\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport { AppendMessage, ThreadMessage, Unsubscribe } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport { AddToolResultOptions } from \"../../context\";\nimport { getExternalStoreMessage } from \"./getExternalStoreMessage\";\nimport { useExternalStoreSync } from \"./useExternalStoreSync\";\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntime implements ReactThreadRuntime {\n private _subscriptions = new Set<() => void>();\n private repository = new MessageRepository();\n private assistantOptimisticId: string | null = null;\n\n private useStore;\n\n public get capabilities() {\n return {\n switchToBranch: this.store.setMessages !== undefined,\n edit: this.store.onEdit !== undefined,\n reload: this.store.onReload !== undefined,\n cancel: this.store.onCancel !== undefined,\n copy: this.store.onCopy !== null,\n };\n }\n\n public messages: ThreadMessage[] = [];\n public isDisabled = false;\n public isRunning = false;\n\n constructor(public store: ExternalStoreAdapter<any>) {\n this.updateData(\n store.isDisabled ?? false,\n store.isRunning ?? false,\n store.messages,\n );\n\n this.useStore = create(() => ({\n store,\n }));\n }\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n if (!this.store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {\n if (!this.store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n await this.store.onEdit(message);\n } else {\n await this.store.onNew(message);\n }\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n if (!this.store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n await this.store.onReload(parentId);\n }\n\n public cancelRun(): void {\n if (!this.store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this.store.onCancel();\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n let messages = this.repository.getMessages();\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private updateMessages = (messages: ThreadMessage[]) => {\n this.store.setMessages?.(\n messages.flatMap(getExternalStoreMessage).filter((m) => m != null),\n );\n };\n\n public onStoreUpdated() {\n if (this.useStore.getState().store !== this.store) {\n this.useStore.setState({ store: this.store });\n }\n }\n\n private updateData = (\n isDisabled: boolean,\n isRunning: boolean,\n vm: ThreadMessage[],\n ) => {\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: [],\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.isDisabled = isDisabled;\n this.isRunning = isRunning;\n\n for (const callback of this._subscriptions) callback();\n };\n\n unstable_synchronizer = () => {\n const { store } = this.useStore();\n\n useExternalStoreSync(store, this.updateData);\n\n return null;\n };\n\n addToolResult(options: AddToolResultOptions) {\n if (!this.store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this.store.onAddToolResult(options);\n }\n}\n","import { ThreadMessage } from \"../../types\";\n\nexport const symbolInnerMessage = Symbol(\"innerMessage\");\n\nexport type ExternalStoreThreadMessage<T> = ThreadMessage & {\n [symbolInnerMessage]?: T;\n};\n\nexport const getExternalStoreMessage = <T,>(message: ThreadMessage) => {\n return (message as ExternalStoreThreadMessage<T>)[symbolInnerMessage];\n};\n","import { useEffect, useInsertionEffect, useMemo, useRef } from \"react\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport {\n ConverterCallback,\n ThreadMessageConverter,\n} from \"./ThreadMessageConverter\";\nimport { ThreadMessage } from \"../../types\";\nimport { symbolInnerMessage } from \"./getExternalStoreMessage\";\nimport { getAutoStatus } from \"./auto-status\";\nimport { fromThreadMessageLike } from \"./ThreadMessageLike\";\n\ntype UpdateDataCallback = (\n isDisabled: boolean,\n isRunning: boolean,\n messages: ThreadMessage[],\n) => void;\n\nexport const useExternalStoreSync = <T extends WeakKey>(\n adapter: ExternalStoreAdapter<T>,\n updateData: UpdateDataCallback,\n) => {\n const adapterRef = useRef(adapter);\n useInsertionEffect(() => {\n adapterRef.current = adapter;\n });\n\n // flush the converter cache when the convertMessage prop changes\n const [converter, convertCallback] = useMemo(() => {\n const converter = adapter.convertMessage ?? ((m: T) => m as ThreadMessage);\n const convertCallback: ConverterCallback<T> = (cache, m, idx) => {\n const autoStatus = getAutoStatus(\n adapterRef.current.messages.at(-1) === m,\n adapterRef.current.isRunning ?? false,\n );\n\n if (cache && (cache.role !== \"assistant\" || cache.status === autoStatus))\n return cache;\n\n const newMessage = fromThreadMessageLike(\n converter(m, idx),\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = m;\n return newMessage;\n };\n return [new ThreadMessageConverter(), convertCallback];\n\n // specify convertMessage bceause we want the ThreadMessageConverter to be recreated when the adapter changes\n }, [adapter.convertMessage]);\n\n useEffect(() => {\n updateData(\n adapter.isDisabled ?? false,\n adapter.isRunning ?? false,\n converter.convertMessages(adapter.messages, convertCallback),\n );\n }, [\n updateData,\n converter,\n convertCallback,\n adapter.isDisabled,\n adapter.isRunning,\n adapter.messages,\n ]);\n};\n","import { ThreadMessage } from \"../../types\";\n\nexport type ConverterCallback<TIn> = (\n cache: ThreadMessage | undefined,\n message: TIn,\n idx: number,\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, idx) => {\n const key = keyMapper(m);\n const cached = this.cache.get(key);\n const newMessage = converter(cached, m, idx);\n this.cache.set(key, newMessage);\n return newMessage;\n });\n }\n}\n","const AUTO_STATUS_RUNNING = Object.freeze({ type: \"running\" });\nconst AUTO_STATUS_COMPLETE = Object.freeze({\n type: \"complete\",\n reason: \"unknown\",\n});\n\nexport const getAutoStatus = (isLast: boolean, isRunning: boolean) =>\n isLast && isRunning ? AUTO_STATUS_RUNNING : AUTO_STATUS_COMPLETE;\n","import {\n MessageStatus,\n TextContentPart,\n ImageContentPart,\n ToolCallContentPart,\n UIContentPart,\n ThreadMessage,\n ThreadAssistantContentPart,\n ThreadAssistantMessage,\n ThreadUserContentPart,\n ThreadUserMessage,\n ThreadSystemMessage,\n} from \"../../types\";\nimport { CoreToolCallContentPart } from \"../../types/AssistantTypes\";\n\nexport type ThreadMessageLike = {\n role: \"assistant\" | \"user\" | \"system\";\n content: (\n | TextContentPart\n | ImageContentPart\n | ToolCallContentPart<any, any>\n | CoreToolCallContentPart<any, any>\n | UIContentPart\n )[];\n id?: string | undefined;\n createdAt?: Date | undefined;\n status?: MessageStatus | undefined;\n};\n\nexport const fromThreadMessageLike = (\n like: ThreadMessageLike,\n fallbackId: string,\n fallbackStatus: MessageStatus,\n): ThreadMessage => {\n const { role, content, id, createdAt, status } = like;\n const common = {\n id: id ?? fallbackId,\n createdAt: createdAt ?? new Date(),\n };\n switch (role) {\n case \"assistant\":\n return {\n ...common,\n role,\n content: content.map((part): ThreadAssistantContentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"ui\":\n return part;\n\n case \"tool-call\": {\n if (\"argsText\" in part) return part;\n return {\n ...part,\n argsText: JSON.stringify(part.args),\n };\n }\n\n default: {\n const unhandledType: \"image\" = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n status: status ?? fallbackStatus,\n } satisfies ThreadAssistantMessage;\n\n case \"user\":\n return {\n ...common,\n role,\n content: content.map((part): ThreadUserContentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"ui\":\n case \"image\":\n return part;\n\n default: {\n const unhandledType: \"tool-call\" = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n } satisfies ThreadUserMessage;\n\n case \"system\":\n if (content.length !== 1 || content[0]!.type !== \"text\")\n throw new Error(\n \"System messages must have exactly one text content part.\",\n );\n\n return {\n ...common,\n role,\n content: content as [TextContentPart],\n } satisfies ThreadSystemMessage;\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n","import { BaseAssistantRuntime, ProxyConfigProvider } from \"../../internal\";\nimport { ModelConfigProvider } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport { ExternalStoreThreadRuntime } from \"./ExternalStoreThreadRuntime\";\n\nexport class ExternalStoreRuntime extends BaseAssistantRuntime<ExternalStoreThreadRuntime> {\n private readonly _proxyConfigProvider = new ProxyConfigProvider();\n\n constructor(store: ExternalStoreAdapter<any>) {\n super(new ExternalStoreThreadRuntime(store));\n }\n\n public set store(store: ExternalStoreAdapter<any>) {\n this.thread.store = store;\n }\n\n public onStoreUpdated() {\n return this.thread.onStoreUpdated();\n }\n\n public getModelConfig() {\n return this._proxyConfigProvider.getModelConfig();\n }\n\n public registerModelConfigProvider(provider: ModelConfigProvider) {\n return this._proxyConfigProvider.registerModelConfigProvider(provider);\n }\n\n public switchToThread(threadId: string | null) {\n if (threadId) {\n if (!this.store.onSwitchThread)\n throw new Error(\"Runtime does not support switching threads.\");\n\n return this.store.onSwitchThread(threadId);\n } else {\n if (!this.store.onNewThread)\n throw new Error(\"Runtime does not support switching to new threads.\");\n\n return this.store.onNewThread();\n }\n }\n}\n","import { useEffect, useInsertionEffect, useState } from \"react\";\nimport { ExternalStoreRuntime } from \"./ExternalStoreRuntime\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\n\nexport const useExternalStoreRuntime = (store: ExternalStoreAdapter<any>) => {\n const [runtime] = useState(() => new ExternalStoreRuntime(store));\n\n useInsertionEffect(() => {\n runtime.store = store;\n });\n useEffect(() => {\n runtime.onStoreUpdated();\n });\n\n return runtime;\n};\n","\"use client\";\n\nimport {\n FC,\n PropsWithChildren,\n ReactNode,\n createContext,\n useContext,\n} from \"react\";\n\nimport { AvatarProps } from \"./base/avatar\";\nimport { TextContentPartComponent } from \"../types\";\nimport { AssistantRuntime } from \"../runtimes\";\nimport { AssistantRuntimeProvider, useAssistantContext } from \"../context\";\n\nexport type SuggestionConfig = {\n text?: ReactNode;\n prompt: string;\n};\n\nexport type ThreadWelcomeConfig = {\n message?: string | null | undefined;\n suggestions?: SuggestionConfig[] | undefined;\n};\n\nexport type UserMessageConfig = {\n allowEdit?: boolean | undefined;\n};\n\nexport type AssistantMessageConfig = {\n allowReload?: boolean | undefined;\n allowCopy?: boolean | undefined;\n components?:\n | {\n Text?: TextContentPartComponent | undefined;\n }\n | undefined;\n};\n\nexport type BranchPickerConfig = {\n allowBranchPicker?: boolean | undefined;\n};\n\nexport type StringsConfig = {\n assistantModal?: {\n open: {\n button: {\n tooltip?: string | undefined;\n };\n };\n closed: {\n button: {\n tooltip?: string | undefined;\n };\n };\n };\n thread?: {\n scrollToBottom?: {\n tooltip?: string | undefined;\n };\n };\n userMessage?: {\n edit?: {\n tooltip?: string | undefined;\n };\n };\n assistantMessage?: {\n reload?: {\n tooltip?: string | undefined;\n };\n copy?: {\n tooltip?: string | undefined;\n };\n };\n branchPicker?: {\n previous?: {\n tooltip?: string | undefined;\n };\n next?: {\n tooltip?: string | undefined;\n };\n };\n composer?: {\n send?:\n | {\n tooltip?: string | undefined;\n }\n | undefined;\n cancel?:\n | {\n tooltip?: string | undefined;\n }\n | undefined;\n input?: {\n placeholder?: string | undefined;\n };\n };\n editComposer?: {\n send?: {\n label?: string | undefined;\n };\n cancel?: {\n label?: string | undefined;\n };\n };\n code?: {\n header?: {\n copy?: {\n tooltip?: string | undefined;\n };\n };\n };\n};\n\nconst ThreadConfigContext = createContext<ThreadConfig>({});\n\nexport type ThreadConfig = {\n runtime?: AssistantRuntime;\n\n assistantAvatar?: AvatarProps;\n\n welcome?: ThreadWelcomeConfig;\n assistantMessage?: AssistantMessageConfig;\n userMessage?: UserMessageConfig;\n\n branchPicker?: BranchPickerConfig;\n\n strings?: StringsConfig;\n};\n\nexport const useThreadConfig = (): Omit<ThreadConfig, \"runtime\"> => {\n return useContext(ThreadConfigContext);\n};\n\nexport type ThreadConfigProviderProps = PropsWithChildren<{\n config?: ThreadConfig | undefined;\n}>;\n\nexport const ThreadConfigProvider: FC<ThreadConfigProviderProps> = ({\n children,\n config,\n}) => {\n const assistant = useAssistantContext({ optional: true });\n\n const configProvider =\n config && Object.keys(config ?? {}).length > 0 ? (\n <ThreadConfigContext.Provider value={config}>\n {children}\n </ThreadConfigContext.Provider>\n ) : (\n <>{children}</>\n );\n if (!config?.runtime) return configProvider;\n\n if (assistant) {\n throw new Error(\n \"You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed.\",\n );\n }\n return (\n <AssistantRuntimeProvider runtime={config.runtime}>\n {configProvider}\n </AssistantRuntimeProvider>\n );\n};\n\nThreadConfigProvider.displayName = \"ThreadConfigProvider\";\n","\"use client\";\n\nimport { forwardRef, type FC } from \"react\";\nimport { CheckIcon, CopyIcon, RefreshCwIcon } from \"lucide-react\";\nimport { ActionBarPrimitive, MessagePrimitive } from \"../primitives\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { useThreadContext } from \"../context\";\n\nconst useAllowCopy = () => {\n const { assistantMessage: { allowCopy = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const copySupported = useThreadActions((t) => t.capabilities.copy);\n return copySupported && allowCopy;\n};\n\nconst useAllowReload = () => {\n const { assistantMessage: { allowReload = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const reloadSupported = useThreadActions((t) => t.capabilities.reload);\n return reloadSupported && allowReload;\n};\n\nconst AssistantActionBar: FC = () => {\n const allowCopy = useAllowCopy();\n const allowReload = useAllowReload();\n if (!allowCopy && !allowReload) return null;\n return (\n <AssistantActionBarRoot\n hideWhenRunning\n autohide=\"not-last\"\n autohideFloat=\"single-branch\"\n >\n <AssistantActionBarCopy />\n <AssistantActionBarReload />\n </AssistantActionBarRoot>\n );\n};\n\nAssistantActionBar.displayName = \"AssistantActionBar\";\n\nconst AssistantActionBarRoot = withDefaults(ActionBarPrimitive.Root, {\n className: \"aui-assistant-action-bar-root\",\n});\n\nAssistantActionBarRoot.displayName = \"AssistantActionBarRoot\";\n\nconst AssistantActionBarCopy = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n assistantMessage: { reload: { tooltip = \"Copy\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n const allowCopy = useAllowCopy();\n if (!allowCopy) return null;\n return (\n <ActionBarPrimitive.Copy asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? (\n <>\n <MessagePrimitive.If copied>\n <CheckIcon />\n </MessagePrimitive.If>\n <MessagePrimitive.If copied={false}>\n <CopyIcon />\n </MessagePrimitive.If>\n </>\n )}\n </TooltipIconButton>\n </ActionBarPrimitive.Copy>\n );\n});\n\nAssistantActionBarCopy.displayName = \"AssistantActionBarCopy\";\n\nconst AssistantActionBarReload = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n assistantMessage: { reload: { tooltip = \"Refresh\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n const allowReload = useAllowReload();\n if (!allowReload) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n <RefreshCwIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Reload>\n );\n});\n\nAssistantActionBarReload.displayName = \"AssistantActionBarReload\";\n\nconst exports = {\n Root: AssistantActionBarRoot,\n Reload: AssistantActionBarReload,\n Copy: AssistantActionBarCopy,\n};\n\nexport default Object.assign(\n AssistantActionBar,\n exports,\n) as typeof AssistantActionBar & typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\nimport { MessagePrimitive, MessagePrimitiveContentProps } from \"../primitives\";\nimport BranchPicker from \"./branch-picker\";\nimport { Avatar } from \"./base/avatar\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport AssistantActionBar from \"./assistant-action-bar\";\nimport ContentPart from \"./content-part\";\n\nconst AssistantMessage: FC = () => {\n return (\n <AssistantMessageRoot>\n <AssistantMessageAvatar />\n <AssistantMessageContent />\n <BranchPicker />\n <AssistantActionBar />\n </AssistantMessageRoot>\n );\n};\n\nAssistantMessage.displayName = \"AssistantMessage\";\n\nconst AssistantMessageAvatar: FC = () => {\n const { assistantAvatar: avatar = { fallback: \"A\" } } = useThreadConfig();\n return <Avatar {...avatar} />;\n};\n\nconst AssistantMessageRoot = withDefaults(MessagePrimitive.Root, {\n className: \"aui-assistant-message-root\",\n});\n\nAssistantMessageRoot.displayName = \"AssistantMessageRoot\";\n\nconst AssistantMessageContentWrapper = withDefaults(\"div\", {\n className: \"aui-assistant-message-content\",\n});\n\nexport type AssistantMessageContentProps = MessagePrimitiveContentProps &\n ComponentPropsWithoutRef<\"div\">;\n\nconst AssistantMessageContent = forwardRef<\n HTMLDivElement,\n AssistantMessageContentProps\n>(({ components: componentsProp, ...rest }, ref) => {\n const { assistantMessage: { components = {} } = {} } = useThreadConfig();\n return (\n <AssistantMessageContentWrapper {...rest} ref={ref}>\n <MessagePrimitive.Content\n components={{\n ...componentsProp,\n Text: componentsProp?.Text ?? components.Text ?? ContentPart.Text,\n }}\n />\n </AssistantMessageContentWrapper>\n );\n});\n\nAssistantMessageContent.displayName = \"AssistantMessageContent\";\n\nconst exports = {\n Root: AssistantMessageRoot,\n Avatar: AssistantMessageAvatar,\n Content: AssistantMessageContent,\n};\n\nexport default Object.assign(\n AssistantMessage,\n exports,\n) as typeof AssistantMessage & typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { BranchPickerPrimitive } from \"../primitives\";\nimport { useThreadContext } from \"../context\";\n\nconst useAllowBranchPicker = () => {\n const { branchPicker: { allowBranchPicker = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const branchPickerSupported = useThreadActions((t) => t.capabilities.edit);\n return branchPickerSupported && allowBranchPicker;\n};\n\nconst BranchPicker: FC = () => {\n const allowBranchPicker = useAllowBranchPicker();\n if (!allowBranchPicker) return null;\n return (\n <BranchPickerRoot hideWhenSingleBranch>\n <BranchPickerPrevious />\n <BranchPickerState />\n <BranchPickerNext />\n </BranchPickerRoot>\n );\n};\n\nBranchPicker.displayName = \"BranchPicker\";\n\nconst BranchPickerRoot = withDefaults(BranchPickerPrimitive.Root, {\n className: \"aui-branch-picker-root\",\n});\n\nBranchPickerRoot.displayName = \"BranchPickerRoot\";\n\nconst BranchPickerPrevious = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n branchPicker: { previous: { tooltip = \"Previous\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <BranchPickerPrimitive.Previous asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <ChevronLeftIcon />}\n </TooltipIconButton>\n </BranchPickerPrimitive.Previous>\n );\n});\n\nBranchPickerPrevious.displayName = \"BranchPickerPrevious\";\n\nconst BranchPickerStateWrapper = withDefaults(\"span\", {\n className: \"aui-branch-picker-state\",\n});\n\nconst BranchPickerState = forwardRef<\n HTMLSpanElement,\n ComponentPropsWithoutRef<\"span\">\n>((props, ref) => {\n return (\n <BranchPickerStateWrapper {...props} ref={ref}>\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </BranchPickerStateWrapper>\n );\n});\n\nBranchPickerState.displayName = \"BranchPickerState\";\n\nconst BranchPickerNext = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { branchPicker: { next: { tooltip = \"Next\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <BranchPickerPrimitive.Next asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <ChevronRightIcon />}\n </TooltipIconButton>\n </BranchPickerPrimitive.Next>\n );\n});\n\nBranchPickerNext.displayName = \"BranchPickerNext\";\n\nconst exports = {\n Root: BranchPickerRoot,\n Previous: BranchPickerPrevious,\n Next: BranchPickerNext,\n};\n\nexport default Object.assign(BranchPicker, exports) as typeof BranchPicker &\n typeof exports;\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { withDefaults } from \"../utils/withDefaults\";\n\nexport type AvatarProps = {\n src?: string | undefined;\n alt?: string | undefined;\n fallback?: string | undefined;\n};\n\nexport const Avatar: FC<AvatarProps> = ({ src, alt, fallback }) => {\n if (src == null && fallback == null) return null;\n\n return (\n <AvatarRoot>\n {src != null && <AvatarImage src={src} alt={alt} />}\n {fallback != null && <AvatarFallback>{fallback}</AvatarFallback>}\n </AvatarRoot>\n );\n};\n\nAvatar.displayName = \"Avatar\";\n\nexport const AvatarRoot = withDefaults(AvatarPrimitive.Root, {\n className: \"aui-avatar-root\",\n});\n\nAvatarRoot.displayName = \"AvatarRoot\";\n\nexport const AvatarImage = withDefaults(AvatarPrimitive.Image, {\n className: \"aui-avatar-image\",\n});\n\nAvatarImage.displayName = \"AvatarImage\";\n\nexport const AvatarFallback = withDefaults(AvatarPrimitive.Fallback, {\n className: \"aui-avatar-fallback\",\n});\n\nAvatarFallback.displayName = \"AvatarFallback\";\n","import { FC } from \"react\";\nimport { ContentPartPrimitive } from \"../primitives\";\nimport { useSmoothStatus, withSmoothContextProvider } from \"../utils/smooth\";\nimport classNames from \"classnames\";\n\nexport const Text: FC = () => {\n const status = useSmoothStatus();\n return (\n <ContentPartPrimitive.Text\n className={classNames(\n \"aui-text\",\n status.type === \"running\" && \"aui-text-running\",\n )}\n component=\"p\"\n />\n );\n};\n\nconst exports = { Text: withSmoothContextProvider(Text) };\n\nexport default exports;\n","\"use client\";\n\nimport { type FC, forwardRef } from \"react\";\nimport { BotIcon, ChevronDownIcon } from \"lucide-react\";\n\nimport {\n AssistantModalPrimitive,\n AssistantModalPrimitiveRootProps,\n} from \"../primitives\";\nimport Thread from \"./thread\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport {\n ThreadConfig,\n ThreadConfigProvider,\n ThreadConfigProviderProps,\n useThreadConfig,\n} from \"./thread-config\";\n\nconst AssistantModal: FC<ThreadConfig> = (config) => {\n return (\n <AssistantModalRoot config={config}>\n <AssistantModalTrigger />\n <AssistantModalContent>\n <Thread />\n </AssistantModalContent>\n </AssistantModalRoot>\n );\n};\n\nAssistantModal.displayName = \"AssistantModal\";\n\nconst AssistantModalRoot: FC<\n AssistantModalPrimitiveRootProps & ThreadConfigProviderProps\n> = ({ config, ...props }) => {\n return (\n <ThreadConfigProvider config={config}>\n <AssistantModalPrimitive.Root {...props} />\n </ThreadConfigProvider>\n );\n};\n\nAssistantModalRoot.displayName = \"AssistantModalRoot\";\n\nconst AssistantModalTrigger = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n return (\n <AssistantModalAnchor>\n <AssistantModalPrimitive.Trigger asChild>\n <AssistantModalButton {...props} ref={ref} />\n </AssistantModalPrimitive.Trigger>\n </AssistantModalAnchor>\n );\n});\n\nAssistantModalTrigger.displayName = \"AssistantModalTrigger\";\n\nconst AssistantModalAnchor = withDefaults(AssistantModalPrimitive.Anchor, {\n className: \"aui-root aui-modal-anchor\",\n});\n\nAssistantModalAnchor.displayName = \"AssistantModalAnchor\";\n\nconst ModalButtonStyled = withDefaults(TooltipIconButton, {\n variant: \"default\",\n className: \"aui-modal-button\",\n});\n\ntype AssistantModalButtonProps = TooltipIconButtonProps & {\n \"data-state\"?: \"open\" | \"closed\";\n};\n\nconst AssistantModalButton = forwardRef<\n HTMLButtonElement,\n Partial<AssistantModalButtonProps>\n>(({ \"data-state\": state, ...rest }, ref) => {\n const {\n strings: {\n assistantModal: {\n open: {\n button: { tooltip: openTooltip = \"Close Assistant\" } = {},\n } = {},\n closed: {\n button: { tooltip: closedTooltip = \"Open Assistant\" } = {},\n } = {},\n } = {},\n } = {},\n } = useThreadConfig();\n const tooltip = state === \"open\" ? openTooltip : closedTooltip;\n\n return (\n <ModalButtonStyled\n side=\"left\"\n tooltip={tooltip}\n data-state={state}\n {...rest}\n ref={ref}\n >\n {rest.children ?? (\n <>\n <BotIcon\n data-state={state}\n className=\"aui-modal-button-closed-icon\"\n />\n <ChevronDownIcon\n data-state={state}\n className=\"aui-modal-button-open-icon\"\n />\n </>\n )}\n </ModalButtonStyled>\n );\n});\n\nAssistantModalButton.displayName = \"AssistantModalButton\";\n\nconst AssistantModalContent = withDefaults(AssistantModalPrimitive.Content, {\n className: \"aui-root aui-modal-content\",\n sideOffset: 16,\n});\n\nAssistantModalContent.displayName = \"AssistantModalContent\";\n\nconst exports = {\n Root: AssistantModalRoot,\n Trigger: AssistantModalTrigger,\n Content: AssistantModalContent,\n};\n\nexport default Object.assign(AssistantModal, exports) as typeof AssistantModal &\n typeof exports;\n","\"use client\";\n\nimport { ComponentType, forwardRef, type FC } from \"react\";\nimport { ArrowDownIcon } from \"lucide-react\";\n\nimport { withDefaults } from \"./utils/withDefaults\";\nimport Composer from \"./composer\";\nimport ThreadWelcome from \"./thread-welcome\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport AssistantMessage from \"./assistant-message\";\nimport UserMessage from \"./user-message\";\nimport EditComposer from \"./edit-composer\";\nimport {\n ThreadConfig,\n ThreadConfigProvider,\n ThreadConfigProviderProps,\n useThreadConfig,\n} from \"./thread-config\";\nimport { ThreadPrimitive, ThreadPrimitiveRootProps } from \"../primitives\";\n\nconst Thread: FC<ThreadConfig> = (config) => {\n return (\n <ThreadRoot config={config}>\n <ThreadViewport>\n <ThreadWelcome />\n <ThreadMessages />\n <ThreadViewportFooter>\n <ThreadScrollToBottom />\n <Composer />\n </ThreadViewportFooter>\n </ThreadViewport>\n </ThreadRoot>\n );\n};\n\nexport type ThreadRootProps = ThreadPrimitiveRootProps &\n ThreadConfigProviderProps;\n\nconst ThreadRootStyled = withDefaults(ThreadPrimitive.Root, {\n className: \"aui-root aui-thread-root\",\n});\n\nconst ThreadRoot = forwardRef<HTMLDivElement, ThreadRootProps>(\n ({ config, ...props }, ref) => {\n return (\n <ThreadConfigProvider config={config}>\n <ThreadRootStyled {...props} ref={ref} />\n </ThreadConfigProvider>\n );\n },\n);\n\nThreadRoot.displayName = \"ThreadRoot\";\n\nconst ThreadViewport = withDefaults(ThreadPrimitive.Viewport, {\n className: \"aui-thread-viewport\",\n});\n\nThreadViewport.displayName = \"ThreadViewport\";\n\nconst ThreadViewportFooter = withDefaults(\"div\", {\n className: \"aui-thread-viewport-footer\",\n});\n\nThreadViewportFooter.displayName = \"ThreadViewportFooter\";\n\nconst SystemMessage = () => null;\n\nconst ThreadMessages: FC<{\n components?: {\n UserMessage?: ComponentType | undefined;\n EditComposer?: ComponentType | undefined;\n AssistantMessage?: ComponentType | undefined;\n SystemMessage?: ComponentType | undefined;\n };\n}> = ({ components, ...rest }) => {\n return (\n <ThreadPrimitive.Messages\n components={{\n UserMessage: components?.UserMessage ?? UserMessage,\n EditComposer: components?.EditComposer ?? EditComposer,\n AssistantMessage: components?.AssistantMessage ?? AssistantMessage,\n SystemMessage: components?.SystemMessage ?? SystemMessage,\n }}\n {...rest}\n />\n );\n};\n\nThreadMessages.displayName = \"ThreadMessages\";\n\nconst ThreadScrollToBottomIconButton = withDefaults(TooltipIconButton, {\n variant: \"outline\",\n className: \"aui-thread-scroll-to-bottom\",\n});\n\nconst ThreadScrollToBottom = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n thread: { scrollToBottom: { tooltip = \"Scroll to bottom\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <ThreadPrimitive.ScrollToBottom asChild>\n <ThreadScrollToBottomIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <ArrowDownIcon />}\n </ThreadScrollToBottomIconButton>\n </ThreadPrimitive.ScrollToBottom>\n );\n});\n\nThreadScrollToBottom.displayName = \"ThreadScrollToBottom\";\n\nconst exports = {\n Root: ThreadRoot,\n Viewport: ThreadViewport,\n Messages: ThreadMessages,\n ScrollToBottom: ThreadScrollToBottom,\n ViewportFooter: ThreadViewportFooter,\n};\n\nexport default Object.assign(Thread, exports) as typeof Thread & typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\n\nimport { SendHorizontalIcon } from \"lucide-react\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { CircleStopIcon } from \"./base/CircleStopIcon\";\nimport { ComposerPrimitive, ThreadPrimitive } from \"../primitives\";\nimport { useThreadContext } from \"../context\";\n\nconst Composer: FC = () => {\n return (\n <ComposerRoot>\n <ComposerInput autoFocus />\n <ComposerAction />\n </ComposerRoot>\n );\n};\n\nComposer.displayName = \"Composer\";\n\nconst ComposerRoot = withDefaults(ComposerPrimitive.Root, {\n className: \"aui-composer-root\",\n});\n\nComposerRoot.displayName = \"ComposerRoot\";\n\nconst ComposerInputStyled = withDefaults(ComposerPrimitive.Input, {\n rows: 1,\n autoFocus: true,\n className: \"aui-composer-input\",\n});\n\nexport type ComposerInputProps = ComponentPropsWithoutRef<\n typeof ComposerInputStyled\n>;\nconst ComposerInput = forwardRef<HTMLTextAreaElement, ComposerInputProps>(\n (props, ref) => {\n const {\n strings: {\n composer: { input: { placeholder = \"Write a message...\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <ComposerInputStyled placeholder={placeholder} {...props} ref={ref} />\n );\n },\n);\n\nComposerInput.displayName = \"ComposerInput\";\n\nconst useAllowCancel = () => {\n const { useThreadActions } = useThreadContext();\n const cancelSupported = useThreadActions((t) => t.capabilities.cancel);\n return cancelSupported;\n};\n\nconst ComposerAction: FC = () => {\n const allowCancel = useAllowCancel();\n if (!allowCancel) return <ComposerSend />;\n return (\n <>\n <ThreadPrimitive.If running={false}>\n <ComposerSend />\n </ThreadPrimitive.If>\n <ThreadPrimitive.If running>\n <ComposerCancel />\n </ThreadPrimitive.If>\n </>\n );\n};\n\nComposerAction.displayName = \"ComposerAction\";\n\nconst ComposerSendButton = withDefaults(TooltipIconButton, {\n variant: \"default\",\n className: \"aui-composer-send\",\n});\n\nconst ComposerSend = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { composer: { send: { tooltip = \"Send\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Send asChild>\n <ComposerSendButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <SendHorizontalIcon />}\n </ComposerSendButton>\n </ComposerPrimitive.Send>\n );\n});\n\nComposerSend.displayName = \"ComposerSend\";\n\nconst ComposerCancelButton = withDefaults(TooltipIconButton, {\n variant: \"default\",\n className: \"aui-composer-cancel\",\n});\n\nconst ComposerCancel = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { composer: { cancel: { tooltip = \"Cancel\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Cancel asChild>\n <ComposerCancelButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <CircleStopIcon />}\n </ComposerCancelButton>\n </ComposerPrimitive.Cancel>\n );\n});\n\nComposerCancel.displayName = \"ComposerCancel\";\n\nconst exports = {\n Root: ComposerRoot,\n Input: ComposerInput,\n Action: ComposerAction,\n Send: ComposerSend,\n Cancel: ComposerCancel,\n};\n\nexport default Object.assign(Composer, exports) as typeof Composer &\n typeof exports;\n","import { FC } from \"react\";\n\nexport const CircleStopIcon: FC = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n );\n};\n\nCircleStopIcon.displayName = \"CircleStopIcon\";\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { Avatar } from \"./base/avatar\";\nimport { SuggestionConfig, useThreadConfig } from \"./thread-config\";\nimport { ThreadPrimitive } from \"../primitives\";\n\nconst ThreadWelcome: FC = () => {\n return (\n <ThreadWelcomeRoot>\n <ThreadWelcomeCenter>\n <ThreadWelcomeAvatar />\n <ThreadWelcomeMessage />\n </ThreadWelcomeCenter>\n <ThreadWelcomeSuggestions />\n </ThreadWelcomeRoot>\n );\n};\n\nThreadWelcome.displayName = \"ThreadWelcome\";\n\nconst ThreadWelcomeRootStyled = withDefaults(\"div\", {\n className: \"aui-thread-welcome-root\",\n});\n\nconst ThreadWelcomeCenter = withDefaults(\"div\", {\n className: \"aui-thread-welcome-center\",\n});\n\ntype ThreadWelcomeRootProps = ComponentPropsWithoutRef<\"div\">;\n\nconst ThreadWelcomeRoot = forwardRef<HTMLDivElement, ThreadWelcomeRootProps>(\n (props, ref) => {\n return (\n <ThreadPrimitive.Empty>\n <ThreadWelcomeRootStyled {...props} ref={ref} />\n </ThreadPrimitive.Empty>\n );\n },\n);\n\nThreadWelcomeRoot.displayName = \"ThreadWelcomeRoot\";\n\nconst ThreadWelcomeAvatar: FC = () => {\n const { assistantAvatar: avatar = { fallback: \"A\" } } = useThreadConfig();\n return <Avatar {...avatar} />;\n};\n\nconst ThreadWelcomeMessageStyled = withDefaults(\"p\", {\n className: \"aui-thread-welcome-message\",\n});\n\nexport type ThreadWelcomeMessageProps = Omit<\n ComponentPropsWithoutRef<typeof ThreadWelcomeMessageStyled>,\n \"children\"\n> & { message?: string | undefined };\n\nconst ThreadWelcomeMessage = forwardRef<\n HTMLParagraphElement,\n ThreadWelcomeMessageProps\n>(({ message: messageProp, ...rest }, ref) => {\n const { welcome: { message = \"How can I help you today?\" } = {} } =\n useThreadConfig();\n return (\n <ThreadWelcomeMessageStyled {...rest} ref={ref}>\n {messageProp ?? message}\n </ThreadWelcomeMessageStyled>\n );\n});\n\nThreadWelcomeMessage.displayName = \"ThreadWelcomeMessage\";\n\nconst ThreadWelcomeSuggestionContainer = withDefaults(\"div\", {\n className: \"aui-thread-welcome-suggestion-container\",\n});\n\nconst ThreadWelcomeSuggestionStyled = withDefaults(ThreadPrimitive.Suggestion, {\n className: \"aui-thread-welcome-suggestion\",\n});\n\nexport type ThreadWelcomeSuggestionProps = {\n suggestion: SuggestionConfig;\n};\n\nconst ThreadWelcomeSuggestion: FC<ThreadWelcomeSuggestionProps> = ({\n suggestion: { text, prompt },\n}) => {\n return (\n <ThreadWelcomeSuggestionStyled\n prompt={prompt}\n method=\"replace\"\n autoSend\n >\n <span className=\"aui-thread-welcome-suggestion-text\">{text ?? prompt}</span>\n </ThreadWelcomeSuggestionStyled>\n );\n};\n\nconst ThreadWelcomeSuggestions: FC = () => {\n const { welcome: { suggestions } = {} } = useThreadConfig();\n return (\n <ThreadWelcomeSuggestionContainer>\n {suggestions?.map((suggestion, idx) => {\n const key = `${suggestion.prompt}-${idx}`;\n return <ThreadWelcomeSuggestion key={key} suggestion={suggestion} />;\n })}\n </ThreadWelcomeSuggestionContainer>\n );\n};\n\nThreadWelcomeSuggestions.displayName = \"ThreadWelcomeSuggestions\";\n\nconst exports = {\n Root: ThreadWelcomeRoot,\n Center: ThreadWelcomeCenter,\n Avatar: ThreadWelcomeAvatar,\n Message: ThreadWelcomeMessage,\n Suggestions: ThreadWelcomeSuggestions,\n Suggestion: ThreadWelcomeSuggestion,\n};\n\nexport default Object.assign(ThreadWelcome, exports) as typeof ThreadWelcome &\n typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\n\nimport BranchPicker from \"./branch-picker\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport UserActionBar from \"./user-action-bar\";\nimport ContentPart from \"./content-part\";\nimport { MessagePrimitive, MessagePrimitiveContentProps } from \"../primitives\";\n\nconst UserMessage: FC = () => {\n return (\n <UserMessageRoot>\n <UserActionBar />\n <UserMessageContent />\n <BranchPicker />\n </UserMessageRoot>\n );\n};\n\nUserMessage.displayName = \"UserMessage\";\n\nconst UserMessageRoot = withDefaults(MessagePrimitive.Root, {\n className: \"aui-user-message-root\",\n});\n\nUserMessageRoot.displayName = \"UserMessageRoot\";\n\nconst UserMessageContentWrapper = withDefaults(\"div\", {\n className: \"aui-user-message-content\",\n});\n\nexport type UserMessageContentProps = MessagePrimitiveContentProps &\n ComponentPropsWithoutRef<\"div\">;\n\nconst UserMessageContent = forwardRef<HTMLDivElement, UserMessageContentProps>(\n ({ components, ...props }, ref) => {\n return (\n <UserMessageContentWrapper {...props} ref={ref}>\n <MessagePrimitive.Content\n components={{\n ...components,\n Text: components?.Text ?? ContentPart.Text,\n }}\n />\n </UserMessageContentWrapper>\n );\n },\n);\n\nUserMessageContent.displayName = \"UserMessageContent\";\n\nconst exports = {\n Root: UserMessageRoot,\n Content: UserMessageContent,\n};\n\nexport default Object.assign(UserMessage, exports) as typeof UserMessage &\n typeof exports;\n","\"use client\";\n\nimport { forwardRef, type FC } from \"react\";\nimport { PencilIcon } from \"lucide-react\";\n\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { useThreadContext } from \"../context\";\nimport { ActionBarPrimitive } from \"../primitives\";\n\nconst useAllowEdit = () => {\n const { userMessage: { allowEdit = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const editSupported = useThreadActions((t) => t.capabilities.edit);\n return editSupported && allowEdit;\n};\n\nconst UserActionBar: FC = () => {\n const allowEdit = useAllowEdit();\n if (!allowEdit) return null;\n return (\n <UserActionBarRoot hideWhenRunning autohide=\"not-last\">\n <UserActionBarEdit />\n </UserActionBarRoot>\n );\n};\n\nUserActionBar.displayName = \"UserActionBar\";\n\nconst UserActionBarRoot = withDefaults(ActionBarPrimitive.Root, {\n className: \"aui-user-action-bar-root\",\n});\n\nUserActionBarRoot.displayName = \"UserActionBarRoot\";\n\nconst UserActionBarEdit = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { userMessage: { edit: { tooltip = \"Edit\" } = {} } = {} } = {},\n } = useThreadConfig();\n const allowEdit = useAllowEdit();\n if (!allowEdit) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <PencilIcon />}\n </TooltipIconButton>\n </ActionBarPrimitive.Edit>\n );\n});\n\nUserActionBarEdit.displayName = \"UserActionBarEdit\";\n\nconst exports = {\n Root: UserActionBarRoot,\n Edit: UserActionBarEdit,\n};\n\nexport default Object.assign(UserActionBar, exports) as typeof UserActionBar &\n typeof exports;\n","\"use client\";\n\nimport { forwardRef, type FC } from \"react\";\n\nimport { Button, ButtonProps } from \"./base/button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { ComposerPrimitive } from \"../primitives\";\n\nconst EditComposer: FC = () => {\n return (\n <EditComposerRoot>\n <EditComposerInput />\n\n <EditComposerFooter>\n <EditComposerCancel />\n <EditComposerSend />\n </EditComposerFooter>\n </EditComposerRoot>\n );\n};\n\nEditComposer.displayName = \"EditComposer\";\n\nconst EditComposerRoot = withDefaults(ComposerPrimitive.Root, {\n className: \"aui-edit-composer-root\",\n});\n\nEditComposerRoot.displayName = \"EditComposerRoot\";\n\nconst EditComposerInput = withDefaults(ComposerPrimitive.Input, {\n className: \"aui-edit-composer-input\",\n});\n\nEditComposerInput.displayName = \"EditComposerInput\";\n\nconst EditComposerFooter = withDefaults(\"div\", {\n className: \"aui-edit-composer-footer\",\n});\n\nEditComposerFooter.displayName = \"EditComposerFooter\";\n\nconst EditComposerCancel = forwardRef<HTMLButtonElement, Partial<ButtonProps>>(\n (props, ref) => {\n const {\n strings: {\n editComposer: { cancel: { label = \"Cancel\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Cancel asChild>\n <Button variant=\"ghost\" {...props} ref={ref}>\n {props.children ?? label}\n </Button>\n </ComposerPrimitive.Cancel>\n );\n },\n);\n\nEditComposerCancel.displayName = \"EditComposerCancel\";\n\nconst EditComposerSend = forwardRef<HTMLButtonElement, Partial<ButtonProps>>(\n (props, ref) => {\n const {\n strings: { editComposer: { send: { label = \"Send\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Send asChild>\n <Button {...props} ref={ref}>\n {props.children ?? label}\n </Button>\n </ComposerPrimitive.Send>\n );\n },\n);\n\nEditComposerSend.displayName = \"EditComposerSend\";\n\nconst exports = {\n Root: EditComposerRoot,\n Input: EditComposerInput,\n Footer: EditComposerFooter,\n Cancel: EditComposerCancel,\n Send: EditComposerSend,\n};\n\nexport default Object.assign(EditComposer, exports) as typeof EditComposer &\n typeof exports;\n"],"mappings":"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","names":["import_react","import_react","import_zustand","import_react","import_react","import_zustand","import_zustand","import_zustand","import_zustand","import_zustand","import_zustand","import_react","import_zustand","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","c","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react","import_react_primitive","import_jsx_runtime","import_react","PopoverPrimitive","import_primitive","import_react","import_jsx_runtime","import_react","PopoverPrimitive","import_jsx_runtime","import_react","PopoverPrimitive","import_primitive","import_jsx_runtime","import_react","PopoverPrimitive","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_primitive","import_react","import_react_primitive","import_react","import_jsx_runtime","forwardRef","import_react","import_react","import_zustand","import_jsx_runtime","useContentPartContext","import_react","import_react","import_react","import_zustand","import_jsx_runtime","useSmoothStatus","import_react_use_callback_ref","useSmoothStatus","text","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","Text","Image","Fallback","import_jsx_runtime","import_primitive","import_react_primitive","import_react","import_jsx_runtime","import_primitive","import_react_compose_refs","import_react","import_jsx_runtime","TextareaAutosize","import_react","import_react_primitive","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_react_compose_refs","import_react_primitive","import_react","import_react_compose_refs","import_react","import_react_use_callback_ref","import_react","import_react_use_callback_ref","import_react","import_jsx_runtime","import_react","import_react","import_zustand","import_zustand","import_zustand","import_jsx_runtime","useMessageContext","import_jsx_runtime","UserMessage","EditComposer","AssistantMessage","SystemMessage","import_react","message","import_react","import_react","import_jsx_runtime","classNames","import_jsx_runtime","import_react_primitive","import_react","import_jsx_runtime","import_jsx_runtime","message","import_zod","zodToJsonSchema","import_react","sjson","import_zod","import_secure_json_parse","sjson","result","import_zustand","import_react","converter","convertCallback","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","exports","import_react","import_react","import_lucide_react","import_jsx_runtime","BranchPickerPrevious","exports","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames","exports","import_jsx_runtime","exports","import_react","import_lucide_react","import_react","import_lucide_react","import_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","exports","import_react","import_jsx_runtime","exports","import_react","import_react","import_lucide_react","import_jsx_runtime","exports","import_jsx_runtime","exports","import_react","import_jsx_runtime","exports","import_jsx_runtime","exports","import_jsx_runtime","exports"]}
1
+ {"version":3,"sources":["/home/runner/work/assistant-ui/assistant-ui/packages/react/dist/index.js","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/AssistantProvider.tsx","../src/context/react/AssistantContext.ts","../src/context/stores/AssistantModelConfig.ts","../src/utils/ProxyConfigProvider.ts","../src/context/stores/AssistantToolUIs.ts","../src/context/providers/ThreadProvider.tsx","../src/context/react/ThreadContext.ts","../src/context/stores/Composer.ts","../src/context/stores/BaseComposer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx","../src/context/stores/ThreadActions.ts","../src/context/stores/ThreadMessages.ts","../src/context/stores/ThreadRuntime.tsx","../src/utils/hooks/useManagedRef.ts","../src/context/stores/AssistantActions.tsx","../src/context/react/ComposerContext.ts","../src/context/react/MessageContext.ts","../src/context/react/ContentPartContext.ts","../src/hooks/useAppendMessage.tsx","../src/hooks/useSwitchToNewThread.tsx","../src/model-config/useAssistantTool.tsx","../src/model-config/makeAssistantTool.tsx","../src/model-config/useAssistantToolUI.tsx","../src/model-config/makeAssistantToolUI.tsx","../src/model-config/useAssistantInstructions.tsx","../src/primitive-hooks/actionBar/useActionBarCopy.tsx","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/primitive-hooks/actionBar/useActionBarEdit.tsx","../src/primitive-hooks/actionBar/useActionBarReload.tsx","../src/primitive-hooks/branchPicker/useBranchPickerCount.tsx","../src/primitive-hooks/branchPicker/useBranchPickerNext.tsx","../src/primitive-hooks/branchPicker/useBranchPickerNumber.tsx","../src/primitive-hooks/branchPicker/useBranchPickerPrevious.tsx","../src/primitive-hooks/composer/useComposerCancel.tsx","../src/primitive-hooks/composer/useComposerIf.tsx","../src/primitive-hooks/composer/useComposerSend.tsx","../src/primitive-hooks/contentPart/useContentPartDisplay.tsx","../src/primitive-hooks/contentPart/useContentPartImage.tsx","../src/primitive-hooks/contentPart/useContentPartText.tsx","../src/primitive-hooks/message/useMessageIf.tsx","../src/primitive-hooks/thread/useThreadIf.tsx","../src/primitive-hooks/thread/useThreadEmpty.tsx","../src/primitive-hooks/thread/useThreadScrollToBottom.tsx","../src/primitive-hooks/thread/useThreadSuggestion.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/useActionBarFloatStatus.tsx","../src/utils/createActionButton.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/assistantModal/index.ts","../src/primitives/assistantModal/AssistantModalRoot.tsx","../src/utils/hooks/useOnComposerFocus.tsx","../src/primitives/assistantModal/scope.tsx","../src/primitives/assistantModal/AssistantModalTrigger.tsx","../src/primitives/assistantModal/AssistantModalContent.tsx","../src/primitives/assistantModal/AssistantModalAnchor.tsx","../src/primitives/branchPicker/index.ts","../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/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/message/MessageContent.tsx","../src/context/providers/ContentPartProvider.tsx","../src/primitives/contentPart/ContentPartText.tsx","../src/utils/smooth/useSmooth.tsx","../src/utils/smooth/SmoothContext.tsx","../src/primitives/contentPart/ContentPartImage.tsx","../src/primitives/contentPart/ContentPartDisplay.tsx","../src/primitives/contentPart/ContentPartInProgress.tsx","../src/primitives/message/MessageInProgress.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/composer/ComposerIf.tsx","../src/primitives/contentPart/index.ts","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/EditComposer.ts","../src/context/stores/MessageUtils.ts","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/runtimes/local/useLocalRuntime.tsx","../src/runtimes/core/BaseAssistantRuntime.tsx","../src/internal.ts","../src/utils/idUtils.tsx","../src/runtimes/edge/converters/fromCoreMessage.ts","../src/runtimes/utils/MessageRepository.tsx","../src/ui/base/tooltip-icon-button.tsx","../src/ui/base/tooltip.tsx","../src/ui/utils/withDefaults.tsx","../src/ui/base/button.tsx","../src/runtimes/edge/converters/fromLanguageModelMessages.ts","../src/runtimes/edge/converters/fromLanguageModelTools.ts","../src/runtimes/edge/useEdgeRuntime.ts","../src/runtimes/edge/streams/assistantDecoderStream.ts","../src/runtimes/edge/streams/chunkByLineStream.ts","../src/runtimes/edge/EdgeChatAdapter.ts","../src/runtimes/local/shouldContinue.tsx","../src/runtimes/local/LocalThreadRuntime.tsx","../src/runtimes/local/LocalRuntime.tsx","../src/runtimes/external-store/ExternalStoreThreadRuntime.tsx","../src/runtimes/external-store/getExternalStoreMessage.tsx","../src/runtimes/external-store/useExternalStoreSync.tsx","../src/runtimes/external-store/ThreadMessageConverter.ts","../src/runtimes/external-store/auto-status.tsx","../src/runtimes/external-store/ThreadMessageLike.tsx","../src/runtimes/external-store/ExternalStoreRuntime.tsx","../src/runtimes/external-store/useExternalStoreRuntime.tsx","../src/ui/thread-config.tsx","../src/ui/assistant-action-bar.tsx","../src/ui/assistant-message.tsx","../src/ui/branch-picker.tsx","../src/ui/base/avatar.tsx","../src/ui/content-part.tsx","../src/ui/assistant-modal.tsx","../src/ui/thread.tsx","../src/ui/composer.tsx","../src/ui/base/CircleStopIcon.tsx","../src/ui/thread-welcome.tsx","../src/ui/user-message.tsx","../src/ui/user-action-bar.tsx","../src/ui/edit-composer.tsx"],"names":["create","createContext","useContext","useCallback","useRef","useInsertionEffect","useState","jsx","useEffect","useMemo","c","forwardRef","Primitive","composeEventHandlers","Fragment","useContentPartContext","useSmoothStatus","useCallbackRef","text","jsxs","Text","Image","Fallback","memo","BranchPickerPrevious","classNames","exports"],"mappings":"AAAA,spCAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACbA,8BAAqB;ADerB;AACA;AEdA;AFgBA;AACA;AGlBA;AAYO,IAAM,iBAAA,EAAmB,kCAAA;AAAA,EAC9B;AACF,CAAA;AAMO,SAAS,mBAAA,CAAoB,OAAA,EAA8B;AAChE,EAAA,MAAM,QAAA,EAAU,+BAAA,gBAA2B,CAAA;AAC3C,EAAA,GAAA,CAAI,iBAAC,OAAA,6BAAS,WAAA,GAAY,CAAC,OAAA;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AACF,EAAA,OAAO,OAAA;AACT;AHIA;AACA;AIhCA,kCAAuB;AJkCvB;AACA;AK/BO,IAAM,oBAAA,YAAN,MAAyD;AAAA,iBACtD,WAAA,kBAAa,IAAI,GAAA,CAAyB,EAAA;AAAA,EAElD,cAAA,CAAA,EAAiB;AACf,IAAA,OAAO,gDAAA,IAAkB,CAAK,UAAU,CAAA;AAAA,EAC1C;AAAA,EAEA,2BAAA,CAA4B,QAAA,EAA+B;AACzD,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AAC5B,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA;AAAA,IACjC,CAAA;AAAA,EACF;AACF,UAAA;AL+BA;AACA;AIvCO,IAAM,8BAAA,EAAgC,CAAA,EAAA,GAC3C,6BAAA,CAAkC,EAAA,GAAM;AACtC,EAAA,MAAM,MAAA,EAAQ,IAAI,mBAAA,CAAoB,CAAA;AAEtC,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO;AAAA,IACnB,cAAA,EAAgB,CAAA,EAAA,GAAM;AACpB,MAAA,OAAO,KAAA,CAAM,cAAA,CAAe,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,2BAAA,EAA6B,CAAC,QAAA,EAAA,GAAkC;AAC9D,MAAA,OAAO,KAAA,CAAM,2BAAA,CAA4B,QAAQ,CAAA;AAAA,IACnD;AAAA,EACF,CAAC,CAAA;AACH,CAAC,CAAA;AJuCH;AACA;AM9DA;AAWO,IAAM,0BAAA,EAA4B,CAAA,EAAA,GACvCA,6BAAAA,CAA+B,GAAA,EAAA,GAAQ;AACrC,EAAA,MAAM,UAAA,kBAAY,IAAI,GAAA,CAA4C,CAAA;AAElE,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,EAAA,GAAS;AACnB,MAAA,MAAM,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC9B,MAAA,MAAM,KAAA,kBAAO,GAAA,6BAAK,EAAA,mBAAG,CAAA,CAAE,GAAA;AACvB,MAAA,GAAA,CAAI,IAAA,EAAM,OAAO,IAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,IAAA,EAAM,MAAA,EAAA,GAAW;AAC3B,MAAA,IAAI,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC5B,MAAA,GAAA,CAAI,CAAC,GAAA,EAAK;AACR,QAAA,IAAA,EAAM,CAAC,CAAA;AACP,QAAA,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,MACzB;AACA,MAAA,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AACf,MAAA,GAAA,CAAI,CAAC,CAAC,CAAA;AAEN,MAAA,OAAO,CAAA,EAAA,GAAM;AACX,QAAA,MAAM,MAAA,EAAQ,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AAChC,QAAA,GAAA,CAAI,MAAA,IAAU,CAAA,CAAA,EAAI;AAChB,UAAA,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,QACrB;AACA,QAAA,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,MAAA,EAAQ;AACxB,UAAA,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,QACR;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,CAAC,CAAA;ANmDH;AACA;AO/FA;APiGA;AACA;AQjGA;AAkBO,IAAM,cAAA,EAAgBC,kCAAAA,IAA6C,CAAA;AAMnE,SAAS,gBAAA,CAAiB,OAAA,EAA8B;AAC7D,EAAA,MAAM,QAAA,EAAUC,+BAAAA,aAAwB,CAAA;AACxC,EAAA,GAAA,CAAI,iBAAC,OAAA,6BAAS,WAAA,GAAY,CAAC,OAAA;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AACF,EAAA,OAAO,OAAA;AACT;AR6EA;AACA;AS/GA;ATiHA;AACA;AU3GO,IAAM,iBAAA,EAKT,CAAC,GAAA,EAAA,GAAA,CAAS;AAAA,EACZ,KAAA,EAAO,EAAA;AAAA,EACP,QAAA,EAAU,CAAC,KAAA,EAAA,GAAU;AACnB,IAAA,GAAA,CAAI,EAAE,MAAM,CAAC,CAAA;AAAA,EACf;AACF,CAAA,CAAA;AVwGA;AACA;ASzGO,IAAM,kBAAA,EAAoB,CAC/B,iBAAA,EACA,gBAAA,EAAA,GACiC;AACjC,EAAA,MAAM,eAAA,kBAAiB,IAAI,GAAA,CAAgB,CAAA;AAC3C,EAAA,OAAOF,6BAAAA,CAAsB,CAAE,CAAC,GAAA,EAAK,GAAA,EAAK,KAAA,EAAA,GAAU;AAClD,IAAA,OAAO;AAAA,MACL,GAAG,gBAAA,CAAiB,GAAA,EAAK,GAAA,EAAK,KAAK,CAAA;AAAA,MAEnC,IAAI,SAAA,CAAA,EAAY;AACd,QAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,CAAA,CAAE,YAAA,CAAa,MAAA;AAAA,MAClD,CAAA;AAAA,MACA,SAAA,EAAW,IAAA;AAAA,MAEX,IAAA,EAAM,CAAA,EAAA,GAAM;AACV,QAAA,MAAM,EAAE,QAAA,EAAU,MAAM,EAAA,EAAI,GAAA,CAAI,CAAA;AAChC,QAAA,QAAA,CAAS,EAAE,CAAA;AAEX,QAAA,gBAAA,CAAiB,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO;AAAA,UACjC,QAAA,mCAAU,iBAAA,qBAAkB,QAAA,mBAAS,CAAA,qBAAE,EAAA,mBAAG,CAAA,CAAE,CAAA,+BAAG,IAAA,UAAM,MAAA;AAAA,UACrD,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAC;AAAA,QACzC,CAAC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,MAAA,EAAQ,CAAA,EAAA,GAAM;AACZ,QAAA,gBAAA,CAAiB,QAAA,CAAS,CAAA,CAAE,SAAA,CAAU,CAAA;AAAA,MACxC,CAAA;AAAA,MACA,KAAA,EAAO,CAAA,EAAA,GAAM;AACX,QAAA,IAAA,CAAA,MAAW,SAAA,GAAY,cAAA,EAAgB;AACrC,UAAA,QAAA,CAAS,CAAA;AAAA,QACX;AAAA,MACF,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,QAAA,EAAA,GAAa;AACrB,QAAA,cAAA,CAAe,GAAA,CAAI,QAAQ,CAAA;AAC3B,QAAA,OAAO,CAAA,EAAA,GAAM;AACX,UAAA,cAAA,CAAe,MAAA,CAAO,QAAQ,CAAA;AAAA,QAChC,CAAA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,EACF,CAAC,CAAA;AACH,CAAA;ATqGA;AACA;AW/JA;AASO,IAAM,gBAAA,EAAkB,CAC7B,UAAA,EAAA,GACG;AACH,EAAA,OAAOA,6BAAAA,CAAoB,EAAA,GAAA,CAAO;AAAA,IAChC,UAAA,EAAY,UAAA,CAAW,QAAA,CAAS,CAAA,CAAE,UAAA;AAAA,IAClC,SAAA,EAAW,UAAA,CAAW,QAAA,CAAS,CAAA,CAAE;AAAA,EACnC,CAAA,CAAE,CAAA;AACJ,CAAA;AXuJA;AACA;AYvKA;AASO,IAAM,wBAAA,EAA0B,CAAA,EAAA,GAAM;AAC3C,EAAA,MAAM,wBAAA,kBAA0B,IAAI,GAAA,CAAgB,CAAA;AAEpD,EAAA,OAAOA,6BAAAA,CAA4B,EAAA,GAAA,CAAO;AAAA,IACxC,UAAA,EAAY,IAAA;AAAA,IACZ,cAAA,EAAgB,CAAA,EAAA,GAAM;AACpB,MAAA,IAAA,CAAA,MAAW,SAAA,GAAY,uBAAA,EAAyB;AAC9C,QAAA,QAAA,CAAS,CAAA;AAAA,MACX;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,QAAA,EAAA,GAAa;AAC9B,MAAA,uBAAA,CAAwB,GAAA,CAAI,QAAQ,CAAA;AACpC,MAAA,OAAO,CAAA,EAAA,GAAM;AACX,QAAA,uBAAA,CAAwB,MAAA,CAAO,QAAQ,CAAA;AAAA,MACzC,CAAA;AAAA,IACF;AAAA,EACF,CAAA,CAAE,CAAA;AACJ,CAAA;AZgKA;AACA;Aa5LA;AAgCO,IAAM,sBAAA,EAAwB,CACnC,YAAA,EAAA,GACG;AACH,EAAA,OAAOA,6BAAAA;AAAA,IAA2B,CAAA,EAAA,GAChC,MAAA,CAAO,MAAA,CAAO;AAAA,MACZ,IAAI,YAAA,CAAA,EAAe;AACjB,QAAA,OAAO,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,YAAA;AAAA,MACjC,CAAA;AAAA,MACA,WAAA,EAAa,CAAC,SAAA,EAAA,GACZ,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,WAAA,CAAY,SAAS,CAAA;AAAA,MAC/C,cAAA,EAAgB,CAAC,QAAA,EAAA,GACf,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,cAAA,CAAe,QAAQ,CAAA;AAAA,MACjD,QAAA,EAAU,CAAC,QAAA,EAAA,GAAa,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAAA,MACjE,MAAA,EAAQ,CAAC,OAAA,EAAA,GAAY,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAC3D,SAAA,EAAW,CAAA,EAAA,GAAM,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,SAAA,CAAU,CAAA;AAAA,MACnD,aAAA,EAAe,CAAC,OAAA,EAAA,GACd,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,aAAA,CAAc,OAAO;AAAA,IACjD,CAAC;AAAA,EACH,CAAA;AACF,CAAA;Ab0JA;AACA;Ac9MA;AAOO,IAAM,wBAAA,EAA0B,CACrC,UAAA,EAAA,GACG;AACH,EAAA,OAAOA,6BAAAA,CAA4B,EAAA,GAAM,UAAA,CAAW,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AACzE,CAAA;AdwMA;AACA;AepNA;AAKO,IAAM,uBAAA,EAAyB,CAAC,OAAA,EAAA,GAA2B;AAChE,EAAA,OAAOA,6BAAAA,CAA2B,EAAA,GAAM,OAAO,CAAA;AACjD,CAAA;AfkNA;AACA;AgB1NA;AAEO,IAAM,cAAA,EAAgB,CAC3B,QAAA,EAAA,GACG;AACH,EAAA,MAAM,WAAA,EAAa,2BAAA,CAA4B;AAE/C,EAAA,MAAM,IAAA,EAAM,gCAAA;AAAA,IACV,CAAC,EAAA,EAAA,GAAqB;AAEpB,MAAA,GAAA,CAAI,UAAA,CAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,OAAA,CAAQ,CAAA;AAAA,MACrB;AAGA,MAAA,GAAA,CAAI,EAAA,EAAI;AACN,QAAA,UAAA,CAAW,QAAA,EAAU,QAAA,CAAS,EAAE,CAAA;AAAA,MAClC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,EACX,CAAA;AAEA,EAAA,OAAO,GAAA;AACT,CAAA;AhBoNA;AACA;AOzII,+CAAA;AA1EG,IAAM,eAAA,EAA6D,CAAC;AAAA,EACzE,QAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,CAAC,OAAO,EAAA,EAAI,6BAAA,CAA6B,EAAA,GAAM;AACnD,IAAA,MAAM,iBAAA,EAAmB,sBAAA,CAAuB,QAAA,CAAS,MAAM,CAAA;AAC/D,IAAA,MAAM,UAAA,EAAY,eAAA,CAAgB,gBAAgB,CAAA;AAClD,IAAA,MAAM,kBAAA,EAAoB,uBAAA,CAAwB,gBAAgB,CAAA;AAClE,IAAA,MAAM,iBAAA,EAAmB,qBAAA,CAAsB,gBAAgB,CAAA;AAC/D,IAAA,MAAM,YAAA,EAAc,uBAAA,CAAwB,CAAA;AAC5C,IAAA,MAAM,YAAA,EAAc,iBAAA,CAAkB,iBAAA,EAAmB,gBAAgB,CAAA;AAEzE,IAAA,OAAO;AAAA,MACL,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,IACF,CAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,EAAY,aAAA;AAAA,IAChBG,gCAAAA;AAAA,MACE,CAAC,MAAA,EAAA,GAA+B;AAC9B,QAAA,MAAM,eAAA,EAAiB,CAAA,EAAA,GAAM;AAC3B,UAAA,MAAM,YAAA,EAAc,OAAA,CAAQ,SAAA,CAAU,QAAA,CAAS,CAAA;AAC/C,UAAA,GAAA,CACE,MAAA,CAAO,UAAA,IAAc,WAAA,CAAY,UAAA,GACjC,MAAA,CAAO,WAAA,IAAe,WAAA,CAAY,UAAA,EAClC;AACA,YAAC,OAAA,CAAQ,SAAA,CAA+C,QAAA;AAAA,cACtD,MAAA,CAAO,MAAA,CAAO;AAAA,gBACZ,SAAA,EAAW,MAAA,CAAO,SAAA;AAAA,gBAClB,UAAA,EAAY,MAAA,CAAO;AAAA,cACrB,CAAC,CAAA;AAAA,cACD;AAAA,YACF,CAAA;AAAA,UACF;AAEA,UAAA,GAAA,CAAI,MAAA,CAAO,SAAA,IAAa,OAAA,CAAQ,iBAAA,CAAkB,QAAA,CAAS,CAAA,EAAG;AAC5D,YACE,OAAA,CAAQ,iBAAA,CACR,QAAA,CAAS,MAAA,CAAO,QAAA,EAAU,IAAI,CAAA;AAAA,UAClC;AAAA,QACF,CAAA;AAEA,QAAA,cAAA,CAAe,CAAA;AACf,QAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAc,CAAA;AAAA,MACxC,CAAA;AAAA,MACA,CAAC,OAAO;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,uCAAA,CAAmB,EAAA,GAAM;AACvB,IAAA,MAAM,YAAA,EAAc,QAAA,CAAS,SAAA,CAAU,CAAA,EAAA,GAAM;AAC3C,MACE,OAAA,CAAQ,gBAAA,CACR,QAAA,CAAS,QAAA,CAAS,MAAA,EAAQ,IAAI,CAAA;AAChC,MAAA,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA;AAAA,IAC3B,CAAC,CAAA;AACD,IAAA,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA;AACzB,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,WAAA,CAAY,CAAA;AACZ,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAGtB,EAAA,MAAM,aAAA,EAAe,OAAA,CAAQ,gBAAA;AAAA,IAC3B,CAAC,CAAA,EAAA,GAAO,CAAA,CAAyB;AAAA,EACnC,CAAA;AAEA,EAAA,uBACE,8BAAA,aAAC,CAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,OAAA,EAC5B,QAAA,EAAA;AAAA,IAAA,aAAA,mBAAgB,6BAAA,YAAC,EAAA,CAAA,CAAa,CAAA;AAAA,IAC9B;AAAA,EAAA,EAAA,CACH,CAAA;AAEJ,CAAA;APqMA;AACA;AiB9SA;AASO,IAAM,0BAAA,EAA4B,CACvC,UAAA,EAAA,GAEAH,6BAAAA;AAAA,EAA8B,CAAA,EAAA,GAC5B,MAAA,CAAO,MAAA,CAAO;AAAA,IACZ,cAAA,EAAgB,CAAA,EAAA,GAAM,UAAA,CAAW,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAAA,IAC5D,UAAA,EAAY,CAAA,EAAA,GAAM,UAAA,CAAW;AAAA,EAC/B,CAAC;AACH,CAAA;AjBqSF;AACA;AEjRM;AAvBC,IAAM,kBAAA,EAET,CAAC,EAAE,QAAA,EAAU,QAAQ,CAAA,EAAA,GAAM;AAC7B,EAAA,MAAM,WAAA,EAAaI,2BAAAA,OAAc,CAAA;AACjC,EAAAC,uCAAAA,CAAmB,EAAA,GAAM;AACvB,IAAA,UAAA,CAAW,QAAA,EAAU,OAAA;AAAA,EACvB,CAAC,CAAA;AAED,EAAA,MAAM,CAAC,OAAO,EAAA,EAAIC,6BAAAA,CAAS,EAAA,GAAM;AAC/B,IAAA,MAAM,eAAA,EAAiB,6BAAA,CAA8B,CAAA;AACrD,IAAA,MAAM,WAAA,EAAa,yBAAA,CAA0B,CAAA;AAC7C,IAAA,MAAM,oBAAA,EAAsB,yBAAA,CAA0B,UAAU,CAAA;AAEhE,IAAA,OAAO,EAAE,cAAA,EAAgB,UAAA,EAAY,oBAAoB,CAAA;AAAA,EAC3D,CAAC,CAAA;AAED,EAAA,MAAM,eAAA,EAAiB,OAAA,CAAQ,cAAA,CAAe,CAAA;AAC9C,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,OAAO,OAAA,CAAQ,2BAAA,CAA4B,cAAc,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,OAAA,EAAS,cAAc,CAAC,CAAA;AAE5B,EAAA,uBACEC,6BAAAA,gBAAC,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EAAO,OAAA,EAChC,QAAA,kBAAAA,6BAAAA,cAAC,EAAA,EAAe,QAAA,EAAU,OAAA,EAAU,SAAA,CAAS,EAAA,CAC/C,CAAA;AAEJ,CAAA;AFiSA;AACA;AC/TS;AAHT,IAAM,6BAAA,EAEF,CAAC,EAAE,QAAA,EAAU,QAAQ,CAAA,EAAA,GAAM;AAC7B,EAAA,uBAAOA,6BAAAA,iBAAC,EAAA,EAAkB,OAAA,EAAmB,SAAA,CAAS,CAAA;AACxD,CAAA;AAEO,IAAM,yBAAA,EAA2B,yBAAA,4BAAiC,CAAA;ADkUzE;AACA;AkBlVA;AlBoVA;AACA;AmBnVA;AAYO,IAAM,eAAA,EAAiBN,kCAAAA,IAA8C,CAAA;AAMrE,SAAS,iBAAA,CAAkB,OAAA,EAA8B;AAC9D,EAAA,MAAM,QAAA,EAAUC,+BAAAA,cAAyB,CAAA;AACzC,EAAA,GAAA,CAAI,iBAAC,OAAA,+BAAS,WAAA,GAAY,CAAC,OAAA;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AACF,EAAA,OAAO,OAAA;AACT;AnBqUA;AACA;AkBrVO,IAAM,mBAAA,EAAqB,CAAA,EAAA,GAA4B;AAC5D,EAAA,MAAM,EAAE,YAAY,EAAA,EAAI,gBAAA,CAAiB,CAAA;AACzC,EAAA,MAAM,EAAE,gBAAgB,EAAA,mBAAI,iBAAA,CAAkB,EAAE,QAAA,EAAU,KAAK,CAAC,CAAA,UAAK,CAAC,GAAA;AACtE,EAAA,OAAO,4BAAA;AAAA,IACL,CAAA,EAAA,GAAA,CAAO;AAAA,MACL,WAAA,mBAAc,eAAA,UAAmB,aAAA;AAAA,MAGjC,IAAA,EAAM,gBAAA,EAAmB,OAAA,EAAoB;AAAA,IAC/C,CAAA,CAAA;AAAA,IACA,CAAC,eAAA,EAAiB,WAAW;AAAA,EAC/B,CAAA;AACF,CAAA;AlBqVA;AACA;AoB5WA;AAQO,IAAM,mBAAA,EAAqBD,kCAAAA;AAAA,EAChC;AACF,CAAA;AAMO,SAAS,qBAAA,CAAsB,OAAA,EAA8B;AAClE,EAAA,MAAM,QAAA,EAAUC,+BAAAA,kBAA6B,CAAA;AAC7C,EAAA,GAAA,CAAI,iBAAC,OAAA,+BAAS,WAAA,GAAY,CAAC,OAAA;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AACF,EAAA,OAAO,OAAA;AACT;ApBkWA;AACA;AqB5XA;AAYA,IAAM,gBAAA,EAAkB,CACtB,iBAAA,EACA,OAAA,EAAA,GACkB;AAClB,EAAA,GAAA,CAAI,OAAO,QAAA,IAAY,QAAA,EAAU;AAC/B,IAAA,OAAO;AAAA,MACL,QAAA,mCAAU,iBAAA,uBAAkB,QAAA,qBAAS,CAAA,uBAAE,EAAA,qBAAG,CAAA,CAAE,CAAA,+BAAG,IAAA,UAAM,MAAA;AAAA,MACrD,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAC;AAAA,IAC3C,CAAA;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,oCACE,OAAA,CAAQ,QAAA,0BAAY,iBAAA,uBAAkB,QAAA,qBAAS,CAAA,uBAAE,EAAA,qBAAG,CAAA,CAAE,CAAA,+BAAG,MAAA,UAAM,MAAA;AAAA,IACjE,IAAA,mBAAM,OAAA,CAAQ,IAAA,UAAQ,QAAA;AAAA,IACtB,OAAA,EAAS,OAAA,CAAQ;AAAA,EACnB,CAAA;AACF,CAAA;AAEO,IAAM,iBAAA,EAAmB,CAAA,EAAA,GAAM;AACpC,EAAA,MAAM,EAAE,iBAAA,EAAmB,gBAAA,EAAkB,WAAA,EAAa,YAAY,EAAA,EACpE,gBAAA,CAAiB,CAAA;AAEnB,EAAA,MAAM,OAAA,EAASC,gCAAAA;AAAA,IACb,CAAC,OAAA,EAAA,GAAiC;AAChC,MAAA,MAAM,cAAA,EAAgB,eAAA,CAAgB,iBAAA,EAAmB,OAAO,CAAA;AAChE,MAAA,gBAAA,CAAiB,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,aAAa,CAAA;AAEhD,MAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,cAAA,CAAe,CAAA;AACtC,MAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,iBAAA,EAAmB,gBAAA,EAAkB,WAAA,EAAa,WAAW;AAAA,EAChE,CAAA;AAEA,EAAA,OAAO,MAAA;AACT,CAAA;ArByWA;AACA;AsB1ZA;AAGO,IAAM,qBAAA,EAAuB,CAAA,EAAA,GAAM;AACxC,EAAA,MAAM,EAAE,oBAAoB,EAAA,EAAI,mBAAA,CAAoB,CAAA;AACpD,EAAA,MAAM,EAAE,YAAY,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAEzC,EAAA,MAAM,kBAAA,EAAoBA,gCAAAA,CAAY,EAAA,GAAM;AAC1C,IAAA,mBAAA,CAAoB,QAAA,CAAS,CAAA,CAAE,cAAA,CAAe,IAAI,CAAA;AAClD,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,mBAAA,EAAqB,WAAW,CAAC,CAAA;AAErC,EAAA,OAAO,iBAAA;AACT,CAAA;AtBwZA;AACA;AuBpaA;AAaO,IAAM,iBAAA,EAAmB,CAI9B,IAAA,EAAA,GACG;AACH,EAAA,MAAM,EAAE,cAAA,EAAgB,WAAW,EAAA,EAAI,mBAAA,CAAoB,CAAA;AAC3D,EAAA,MAAM,4BAAA,EAA8B,cAAA;AAAA,IAClC,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE;AAAA,EACX,CAAA;AACA,EAAA,MAAM,UAAA,EAAY,UAAA,CAAW,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,SAAS,CAAA;AAC/C,EAAAK,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,GAAG,KAAK,EAAA,EAAI,IAAA;AACtC,IAAA,MAAM,OAAA,EAAS;AAAA,MACb,KAAA,EAAO;AAAA,QACL,CAAC,IAAA,CAAK,QAAQ,CAAA,EAAG;AAAA,MACnB;AAAA,IACF,CAAA;AACA,IAAA,MAAM,OAAA,EAAS,2BAAA,CAA4B;AAAA,MACzC,cAAA,EAAgB,CAAA,EAAA,GAAM;AAAA,IACxB,CAAC,CAAA;AACD,IAAA,MAAM,OAAA,EAAS,OAAA,EAAS,SAAA,CAAU,QAAA,EAAU,MAAM,EAAA,EAAI,KAAA,CAAA;AACtD,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,MAAA,CAAO,CAAA;AACP,sBAAA,MAAA,4BAAA,CAAS,GAAA;AAAA,IACX,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,2BAAA,EAA6B,SAAA,EAAW,IAAI,CAAC,CAAA;AACnD,CAAA;AvBqZA;AACA;AwB7bO,IAAM,kBAAA,EAAoB,CAI/B,IAAA,EAAA,GACG;AACH,EAAA,MAAM,KAAA,EAAO,CAAA,EAAA,GAAM;AACjB,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AxB0bA;AACA;AyBvcA;AAYO,IAAM,mBAAA,EAAqB,CAChC,IAAA,EAAA,GACG;AACH,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,mBAAA,CAAoB,CAAA;AAC3C,EAAA,MAAM,UAAA,EAAY,UAAA,CAAW,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,SAAS,CAAA;AAC/C,EAAAA,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,CAAC,IAAA,EAAM,MAAA;AACX,IAAA,MAAM,EAAE,QAAA,EAAU,OAAO,EAAA,EAAI,IAAA;AAC7B,IAAA,OAAO,SAAA,CAAU,QAAA,EAAU,MAAM,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,SAAA,EAAW,IAAI,CAAC,CAAA;AACtB,CAAA;AzB4bA;AACA;A0B/cO,IAAM,oBAAA,EAAsB,CAIjC,IAAA,EAAA,GACG;AACH,EAAA,MAAM,OAAA,EAAS,CAAA,EAAA,GAAM;AACnB,IAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,MAAA;AACT,CAAA;A1B4cA;AACA;A2B5dA;AAGO,IAAM,yBAAA,EAA2B,CAAC,WAAA,EAAA,GAAwB;AAC/D,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,mBAAA,CAAoB,CAAA;AAC/C,EAAA,MAAM,4BAAA,EAA8B,cAAA;AAAA,IAClC,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE;AAAA,EACX,CAAA;AACA,EAAAA,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,MAAM,OAAA,EAAS;AAAA,MACb,MAAA,EAAQ;AAAA,IACV,CAAA;AACA,IAAA,OAAO,2BAAA,CAA4B,EAAE,cAAA,EAAgB,CAAA,EAAA,GAAM,OAAO,CAAC,CAAA;AAAA,EACrE,CAAA,EAAG,CAAC,2BAAA,EAA6B,WAAW,CAAC,CAAA;AAC/C,CAAA;A3B4dA;AACA;A4B7eA;A5B+eA;AACA;A6BhfA;A7BkfA;AACA;A8BjfA;AAMO,IAAM,oBAAA,EAAsB,CAA8B,MAAA,EAAA,GAE3D;AACJ,EAAA,MAAM,UAAA,EAAY,CAAC,QAAA,EAAA,GAAsC;AACvD,IAAA,MAAM,aAAA,EAAe,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAA,GAAU,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAC,CAAA;AACpE,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,IAAA,CAAA,MAAW,MAAA,GAAS,YAAA,EAAc;AAChC,QAAA,KAAA,CAAM,CAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,CAAC,QAAA,EAAA,GAAwC;AAC9C,IAAA,MAAM,YAAA,EAAc,CAAA,EAAA,GAClB,QAAA,CAAS,GAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAA,GAAU,KAAA,CAAM,QAAA,CAAS,CAAC,CAAO,CAAA;AAE5D,IAAA,OAAO,yCAAA,SAAqB,EAAW,WAAA,EAAa,WAAW,CAAA;AAAA,EACjE,CAAA;AACF,CAAA;A9ByeA;AACA;A6B7fO,IAAM,iBAAA,EAAmB,CAC9B,MAAA,EACA,QAAA,EAAA,GACM;AAEN,EAAA,MAAM,YAAA,EAAcC,4BAAAA,CAAQ,EAAA,GAAM,mBAAA,CAA0B,MAAM,CAAA,EAAG,MAAM,CAAA;AAC3E,EAAA,OAAO,WAAA,CAAY,QAAQ,CAAA;AAC7B,CAAA;A7B2fA;AACA;A+BxgBO,IAAM,eAAA,EAAiB,CAAC,OAAA,EAAA,GAA2B;AACxD,EAAA,MAAM,UAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,MAAA;AAAA,IAChC,CAAC,IAAA,EAAA,GAAS,IAAA,CAAK,KAAA,IAAS;AAAA,EAC1B,CAAA;AAEA,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AACvD,CAAA;A/BygBA;AACA;A4BzgBO,IAAM,iBAAA,EAAmB,CAAC;AAAA,EAC/B,eAAA,EAAiB;AACnB,EAAA,EAA2B,CAAC,CAAA,EAAA,GAAM;AAChC,EAAA,MAAM,EAAE,UAAA,EAAY,eAAA,EAAiB,gBAAgB,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAE3E,EAAA,MAAM,mBAAA,EAAqB,gBAAA;AAAA,IACzB,CAAC,UAAA,EAAY,eAAe,CAAA;AAAA,IAC5B,CAAC,CAAA,EAAG,CAAA,EAAA,GAAM;AACR,MAAA,OACE,CAAC,CAAA,CAAE,UAAA,GACH,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAACC,EAAAA,EAAAA,GAAMA,EAAAA,CAAE,KAAA,IAAS,OAAA,GAAUA,EAAAA,CAAE,IAAA,CAAK,OAAA,EAAS,CAAC,CAAA;AAAA,IAExE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,EAAWP,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,EAAE,QAAQ,EAAA,EAAI,UAAA,CAAW,QAAA,CAAS,CAAA;AACxC,IAAA,MAAM,EAAE,YAAY,EAAA,EAAI,eAAA,CAAgB,QAAA,CAAS,CAAA;AACjD,IAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAO,cAAc,EAAA,EAAI,eAAA,CAAgB,QAAA,CAAS,CAAA;AAErE,IAAA,MAAM,YAAA,EAAc,UAAA,EAAY,cAAA,EAAgB,cAAA,CAAe,OAAO,CAAA;AAEtE,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,WAAW,CAAA,CAAE,IAAA,CAAK,CAAA,EAAA,GAAM;AACpD,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,UAAA,CAAW,CAAA,EAAA,GAAM,WAAA,CAAY,KAAK,CAAA,EAAG,cAAc,CAAA;AAAA,IACrD,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,UAAA,EAAY,eAAA,EAAiB,eAAA,EAAiB,cAAc,CAAC,CAAA;AAEjE,EAAA,GAAA,CAAI,CAAC,kBAAA,EAAoB,OAAO,IAAA;AAChC,EAAA,OAAO,QAAA;AACT,CAAA;A5BmgBA;AACA;AgC3iBA;AAIO,IAAM,iBAAA,EAAmB,CAAA,EAAA,GAAM;AACpC,EAAA,MAAM,EAAE,UAAA,EAAY,gBAAgB,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAE1D,EAAA,MAAM,SAAA,EAAW,gBAAA;AAAA,IACf,CAAC,UAAA,EAAY,eAAe,CAAA;AAAA,IAC5B,CAAC,CAAA,EAAG,CAAA,EAAA,GAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,IAAS,OAAA,GAAU,CAAA,CAAE;AAAA,EAC3C,CAAA;AAEA,EAAA,MAAM,SAAA,EAAWA,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,EAAE,KAAK,EAAA,EAAI,eAAA,CAAgB,QAAA,CAAS,CAAA;AAC1C,IAAA,IAAA,CAAK,CAAA;AAAA,EACP,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,GAAA,CAAI,QAAA,EAAU,OAAO,IAAA;AACrB,EAAA,OAAO,QAAA;AACT,CAAA;AhCuiBA;AACA;AiC3jBA;AAKO,IAAM,mBAAA,EAAqB,CAAA,EAAA,GAAM;AACtC,EAAA,MAAM,EAAE,SAAA,EAAW,gBAAA,EAAkB,WAAA,EAAa,YAAY,EAAA,EAC5D,gBAAA,CAAiB,CAAA;AACnB,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAEzC,EAAA,MAAM,SAAA,EAAW,gBAAA;AAAA,IACf,CAAC,SAAA,EAAW,UAAU,CAAA;AAAA,IACtB,CAAC,CAAA,EAAG,CAAA,EAAA,GAAM,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,OAAA,CAAQ,KAAA,IAAS;AAAA,EAC9D,CAAA;AAEA,EAAA,MAAM,SAAA,EAAWA,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,EAAE,SAAS,EAAA,EAAI,UAAA,CAAW,QAAA,CAAS,CAAA;AACzC,IAAA,gBAAA,CAAiB,QAAA,CAAS,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAC7C,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,cAAA,CAAe,CAAA;AACtC,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,gBAAA,EAAkB,WAAA,EAAa,WAAA,EAAa,UAAU,CAAC,CAAA;AAE3D,EAAA,GAAA,CAAI,QAAA,EAAU,OAAO,IAAA;AACrB,EAAA,OAAO,QAAA;AACT,CAAA;AjCqjBA;AACA;AkC3kBO,IAAM,qBAAA,EAAuB,CAAA,EAAA,GAAM;AACxC,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,iBAAA,CAAkB,CAAA;AACzC,EAAA,MAAM,YAAA,EAAc,UAAA,CAAW,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AACvD,EAAA,OAAO,WAAA;AACT,CAAA;AlC6kBA;AACA;AmCrlBA;AAKO,IAAM,oBAAA,EAAsB,CAAA,EAAA,GAAM;AACvC,EAAA,MAAM,EAAE,iBAAiB,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAC9C,EAAA,MAAM,EAAE,UAAA,EAAY,gBAAgB,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAE1D,EAAA,MAAM,SAAA,EAAW,gBAAA;AAAA,IACf,CAAC,UAAA,EAAY,eAAe,CAAA;AAAA,IAC5B,CAAC,CAAA,EAAG,CAAA,EAAA,GACF,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,EAAA,EAAI,EAAA,GAAK,CAAA,CAAE,QAAA,CAAS;AAAA,EACtE,CAAA;AAEA,EAAA,MAAM,SAAA,EAAWA,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,EAAE,OAAA,EAAS,SAAS,EAAA,EAAI,UAAA,CAAW,QAAA,CAAS,CAAA;AAClD,IAAA,gBAAA,CACG,QAAA,CAAS,CAAA,CACT,cAAA,CAAe,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,EAAE,EAAA,EAAI,CAAC,CAAE,CAAA;AAAA,EAC/D,CAAA,EAAG,CAAC,gBAAA,EAAkB,UAAU,CAAC,CAAA;AAEjC,EAAA,GAAA,CAAI,QAAA,EAAU,OAAO,IAAA;AACrB,EAAA,OAAO,QAAA;AACT,CAAA;AnC6kBA;AACA;AoCnmBO,IAAM,sBAAA,EAAwB,CAAA,EAAA,GAAM;AACzC,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,iBAAA,CAAkB,CAAA;AACzC,EAAA,MAAM,UAAA,EAAY,UAAA,CAAW,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpE,EAAA,OAAO,UAAA,EAAY,CAAA;AACrB,CAAA;ApCqmBA;AACA;AqC7mBA;AAKO,IAAM,wBAAA,EAA0B,CAAA,EAAA,GAAM;AAC3C,EAAA,MAAM,EAAE,iBAAiB,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAC9C,EAAA,MAAM,EAAE,UAAA,EAAY,gBAAgB,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAE1D,EAAA,MAAM,SAAA,EAAW,gBAAA;AAAA,IACf,CAAC,UAAA,EAAY,eAAe,CAAA;AAAA,IAC5B,CAAC,CAAA,EAAG,CAAA,EAAA,GAAM,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,EAAA,GAAK;AAAA,EAC/D,CAAA;AAEA,EAAA,MAAM,SAAA,EAAWA,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,EAAE,OAAA,EAAS,SAAS,EAAA,EAAI,UAAA,CAAW,QAAA,CAAS,CAAA;AAClD,IAAA,gBAAA,CACG,QAAA,CAAS,CAAA,CACT,cAAA,CAAe,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,EAAE,EAAA,EAAI,CAAC,CAAE,CAAA;AAAA,EAC/D,CAAA,EAAG,CAAC,gBAAA,EAAkB,UAAU,CAAC,CAAA;AAEjC,EAAA,GAAA,CAAI,QAAA,EAAU,OAAO,IAAA;AACrB,EAAA,OAAO,QAAA;AACT,CAAA;ArCsmBA;AACA;AsC9nBA;AAGO,IAAM,kBAAA,EAAoB,CAAA,EAAA,GAAM;AACrC,EAAA,MAAM,EAAE,YAAY,EAAA,EAAI,kBAAA,CAAmB,CAAA;AAE3C,EAAA,MAAM,SAAA,EAAW,WAAA,CAAY,CAAC,CAAA,EAAA,GAAM,CAAC,CAAA,CAAE,SAAS,CAAA;AAEhD,EAAA,MAAM,SAAA,EAAWA,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,EAAE,OAAO,EAAA,EAAI,WAAA,CAAY,QAAA,CAAS,CAAA;AACxC,IAAA,MAAA,CAAO,CAAA;AAAA,EACT,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,GAAA,CAAI,QAAA,EAAU,OAAO,IAAA;AACrB,EAAA,OAAO,QAAA;AACT,CAAA;AtC2nBA;AACA;AuCjoBO,IAAM,cAAA,EAAgB,CAAC,KAAA,EAAA,GAA8B;AAC1D,EAAA,MAAM,EAAE,YAAY,EAAA,EAAI,kBAAA,CAAmB,CAAA;AAC3C,EAAA,OAAO,WAAA,CAAY,CAAC,QAAA,EAAA,GAAa;AAC/B,IAAA,GAAA,CAAI,KAAA,CAAM,QAAA,IAAY,KAAA,GAAQ,CAAC,QAAA,CAAS,SAAA,EAAW,OAAO,KAAA;AAC1D,IAAA,GAAA,CAAI,KAAA,CAAM,QAAA,IAAY,MAAA,GAAS,QAAA,CAAS,SAAA,EAAW,OAAO,KAAA;AAE1D,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AvCkoBA;AACA;AwCrpBA;AAIO,IAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AACnC,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA,EAAa;AAAA,EACf,EAAA,EAAI,gBAAA,CAAiB,CAAA;AACrB,EAAA,MAAM,EAAE,YAAY,EAAA,EAAI,kBAAA,CAAmB,CAAA;AAE3C,EAAA,MAAM,SAAA,EAAW,gBAAA;AAAA,IACf,CAAC,SAAA,EAAW,WAAW,CAAA;AAAA,IACvB,CAAC,CAAA,EAAG,CAAA,EAAA,GACF,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,KAAA,CAAM,OAAA,IAAW;AAAA,EACtE,CAAA;AAEA,EAAA,MAAM,SAAA,EAAWA,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,cAAA,EAAgB,WAAA,CAAY,QAAA,CAAS,CAAA;AAC3C,IAAA,GAAA,CAAI,CAAC,aAAA,CAAc,SAAA,EAAW,MAAA;AAE9B,IAAA,aAAA,CAAc,IAAA,CAAK,CAAA;AAEnB,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,cAAA,CAAe,CAAA;AACtC,IAAA,cAAA,CAAe,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,cAAA,EAAgB,WAAA,EAAa,WAAW,CAAC,CAAA;AAE7C,EAAA,GAAA,CAAI,QAAA,EAAU,OAAO,IAAA;AACrB,EAAA,OAAO,QAAA;AACT,CAAA;AxC8oBA;AACA;AyC1qBO,IAAM,sBAAA,EAAwB,CAAA,EAAA,GAAM;AACzC,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,qBAAA,CAAsB,CAAA;AAEjD,EAAA,MAAM,QAAA,EAAU,cAAA,CAAe,CAAC,CAAA,EAAA,GAAM;AACpC,IAAA,GAAA,CAAI,CAAA,CAAE,IAAA,CAAK,KAAA,IAAS,IAAA;AAClB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,MACF,CAAA;AAEF,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACT,CAAA;AzCyqBA;AACA;A0CvrBO,IAAM,oBAAA,EAAsB,CAAA,EAAA,GAAM;AACvC,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,qBAAA,CAAsB,CAAA;AAEjD,EAAA,MAAM,MAAA,EAAQ,cAAA,CAAe,CAAC,CAAA,EAAA,GAAM;AAClC,IAAA,GAAA,CAAI,CAAA,CAAE,IAAA,CAAK,KAAA,IAAS,OAAA;AAClB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,MACF,CAAA;AAEF,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,KAAA;AACT,CAAA;A1CsrBA;AACA;A2CpsBO,IAAM,mBAAA,EAAqB,CAAA,EAAA,GAAM;AACtC,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,qBAAA,CAAsB,CAAA;AAEjD,EAAA,MAAM,KAAA,EAAO,cAAA,CAAe,CAAC,CAAA,EAAA,GAAM;AACjC,IAAA,GAAA,CAAI,CAAA,CAAE,IAAA,CAAK,KAAA,IAAS,MAAA;AAClB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,MACF,CAAA;AAEF,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,IAAA;AACT,CAAA;A3CmsBA;AACA;A4CrsBO,IAAM,aAAA,EAAe,CAAC,KAAA,EAAA,GAA6B;AACxD,EAAA,MAAM,EAAE,UAAA,EAAY,gBAAgB,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAE1D,EAAA,OAAO,gBAAA;AAAA,IACL,CAAC,UAAA,EAAY,eAAe,CAAA;AAAA,IAC5B,CAAC,EAAE,OAAA,EAAS,QAAA,EAAU,OAAO,CAAA,EAAG,EAAE,QAAA,EAAU,WAAW,CAAA,EAAA,GAAM;AAC3D,MAAA,GAAA,CAAI,KAAA,CAAM,YAAA,IAAgB,KAAA,GAAQ,QAAA,CAAS,OAAA,EAAS,CAAA,EAAG,OAAO,KAAA;AAE9D,MAAA,GAAA,CAAI,KAAA,CAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,MAAA,EAAQ,OAAO,KAAA;AAClD,MAAA,GAAA,CAAI,KAAA,CAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,IAAS,WAAA,EAAa,OAAO,KAAA;AAC5D,MAAA,GAAA,CAAI,KAAA,CAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,IAAS,QAAA,EAAU,OAAO,KAAA;AAEtD,MAAA,GAAA,CAAI,KAAA,CAAM,YAAA,IAAgB,KAAA,GAAQ,CAAC,WAAA,GAAc,CAAC,MAAA,EAAQ,OAAO,KAAA;AAEjE,MAAA,GAAA,CAAI,KAAA,CAAM,OAAA,IAAW,KAAA,GAAQ,CAAC,QAAA,EAAU,OAAO,KAAA;AAC/C,MAAA,GAAA,CAAI,KAAA,CAAM,OAAA,IAAW,MAAA,GAAS,QAAA,EAAU,OAAO,KAAA;AAE/C,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF,CAAA;A5CksBA;AACA;A6CxtBO,IAAM,YAAA,EAAc,CAAC,KAAA,EAAA,GAA4B;AACtD,EAAA,MAAM,EAAE,SAAA,EAAW,kBAAkB,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAC1D,EAAA,OAAO,gBAAA;AAAA,IACL,CAAC,SAAA,EAAW,iBAAiB,CAAA;AAAA,IAC7B,CAAC,MAAA,EAAQ,QAAA,EAAA,GAAa;AACpB,MAAA,GAAA,CAAI,KAAA,CAAM,MAAA,IAAU,KAAA,GAAQ,QAAA,CAAS,OAAA,IAAW,CAAA,EAAG,OAAO,KAAA;AAC1D,MAAA,GAAA,CAAI,KAAA,CAAM,MAAA,IAAU,MAAA,GAAS,QAAA,CAAS,OAAA,IAAW,CAAA,EAAG,OAAO,KAAA;AAC3D,MAAA,GAAA,CAAI,KAAA,CAAM,QAAA,IAAY,KAAA,GAAQ,CAAC,MAAA,CAAO,SAAA,EAAW,OAAO,KAAA;AACxD,MAAA,GAAA,CAAI,KAAA,CAAM,QAAA,IAAY,MAAA,GAAS,MAAA,CAAO,SAAA,EAAW,OAAO,KAAA;AACxD,MAAA,GAAA,CAAI,KAAA,CAAM,SAAA,IAAa,KAAA,GAAQ,MAAA,CAAO,UAAA,EAAY,OAAO,KAAA;AACzD,MAAA,GAAA,CAAI,KAAA,CAAM,SAAA,IAAa,MAAA,GAAS,MAAA,CAAO,UAAA,EAAY,OAAO,KAAA;AAE1D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF,CAAA;A7CytBA;AACA;A8CrvBO,IAAM,eAAA,EAAiB,CAAA,EAAA,GAAM;AAClC,EAAA,OAAO,WAAA,CAAY,EAAE,KAAA,EAAO,KAAK,CAAC,CAAA;AACpC,CAAA;A9CuvBA;AACA;A+C5vBA;AAGO,IAAM,wBAAA,EAA0B,CAAA,EAAA,GAAM;AAC3C,EAAA,MAAM,EAAE,WAAA,EAAa,YAAY,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAEtD,EAAA,MAAM,WAAA,EAAa,WAAA,CAAY,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,UAAU,CAAA;AAElD,EAAA,MAAM,qBAAA,EAAuBA,gCAAAA,CAAY,EAAA,GAAM;AAC7C,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,cAAA,CAAe,CAAA;AACtC,IAAA,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,WAAA,EAAa,WAAW,CAAC,CAAA;AAE7B,EAAA,GAAA,CAAI,UAAA,EAAY,OAAO,IAAA;AACvB,EAAA,OAAO,oBAAA;AACT,CAAA;A/CyvBA;AACA;AgDzwBA;AAUO,IAAM,oBAAA,EAAsB,CAAC;AAAA,EAClC,MAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAqC;AACnC,EAAA,MAAM,EAAE,SAAA,EAAW,YAAY,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAEpD,EAAA,MAAM,OAAA,EAAS,gBAAA,CAAiB,CAAA;AAChC,EAAA,MAAM,SAAA,EAAW,SAAA,CAAU,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,UAAU,CAAA;AAC9C,EAAA,MAAM,SAAA,EAAWA,gCAAAA,CAAY,EAAA,GAAM;AACjC,IAAA,MAAM,OAAA,EAAS,SAAA,CAAU,QAAA,CAAS,CAAA;AAClC,IAAA,MAAM,SAAA,EAAW,WAAA,CAAY,QAAA,CAAS,CAAA;AACtC,IAAA,GAAA,CAAI,SAAA,GAAY,CAAC,MAAA,CAAO,SAAA,EAAW;AACjC,MAAA,MAAA,CAAO,MAAM,CAAA;AACb,MAAA,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA;AAAA,IACtB,EAAA,KAAO;AACL,MAAA,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,WAAA,EAAa,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AAErD,EAAA,GAAA,CAAI,QAAA,EAAU,OAAO,IAAA;AACrB,EAAA,OAAO,QAAA;AACT,CAAA;AhDgwBA;AACA;AiDhyBA,IAAA,kBAAA,EAAA,CAAA,CAAA;AAAA,uCAAA,iBAAA,EAAA;AAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA,sBAAA;AAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA,sBAAA;AAAA,EAAA,MAAA,EAAA,CAAA,EAAA,GAAA,wBAAA;AAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA;AAAA,CAAA,CAAA;AjDwyBA;AACA;AkDvyBA,2DAA0B;AAC1B;AlDyyBA;AACA;AmD5xBO,IAAM,wBAAA,EAA0B,CAAC;AAAA,EACtC,eAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAoC;AAClC,EAAA,MAAM,EAAE,UAAU,EAAA,EAAI,gBAAA,CAAiB,CAAA;AACvC,EAAA,MAAM,EAAE,UAAA,EAAY,gBAAgB,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAE1D,EAAA,OAAO,gBAAA;AAAA,IACL,CAAC,SAAA,EAAW,UAAA,EAAY,eAAe,CAAA;AAAA,IACvC,CAAC,CAAA,EAAG,CAAA,EAAG,EAAA,EAAA,GAAO;AACZ,MAAA,GAAA,CAAI,gBAAA,GAAmB,CAAA,CAAE,SAAA,EAAW,OAAO,qBAAA;AAE3C,MAAA,MAAM,gBAAA,EACJ,SAAA,IAAa,SAAA,GAAa,SAAA,IAAa,WAAA,GAAc,CAAC,CAAA,CAAE,MAAA;AAG1D,MAAA,GAAA,CAAI,CAAC,eAAA,EAAiB,OAAO,qBAAA;AAG7B,MAAA,GAAA,CAAI,CAAC,EAAA,CAAG,UAAA,EAAY,OAAO,qBAAA;AAG3B,MAAA,GAAA,CACE,cAAA,IAAkB,SAAA,GACjB,cAAA,IAAkB,gBAAA,GAAmB,CAAA,CAAE,QAAA,CAAS,OAAA,GAAU,CAAA;AAE3D,QAAA,OAAO,yBAAA;AAET,MAAA,OAAO,qBAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF,CAAA;AnDixBA;AACA;AkDtyBI;AAbG,IAAM,uBAAA,EAAyB,+BAAA,CAGnC,EAAE,eAAA,EAAiB,QAAA,EAAU,aAAA,EAAe,GAAG,KAAK,CAAA,EAAG,GAAA,EAAA,GAAQ;AAChE,EAAA,MAAM,mBAAA,EAAqB,uBAAA,CAAwB;AAAA,IACjD,eAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,GAAA,CAAI,mBAAA,IAAA,qBAAA,EAAkD,OAAO,IAAA;AAE7D,EAAA,uBACEI,6BAAAA;AAAA,IAAC,yBAAA,CAAU,GAAA;AAAA,IAAV;AAAA,MACE,GAAI,mBAAA,IAAA,0BAAA,EACD,EAAE,eAAA,EAAiB,OAAO,EAAA,EAC1B,IAAA;AAAA,MACH,GAAG,IAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,sBAAA,CAAuB,YAAA,EAAc,yBAAA;AlD+yBrC;AACA;AoDr1BA;AACA;AACA,gDAAqC;AAgC/B;AAtBC,IAAM,mBAAA,EAAqB,CAChC,WAAA,EACA,eAAA,EACA,aAAA,EAA8C,CAAC,CAAA,EAAA,GAC5C;AACH,EAAA,MAAM,aAAA,EAAeI,+BAAAA,CAGlB,KAAA,EAAO,YAAA,EAAA,GAAiB;AACzB,IAAA,MAAM,eAAA,EAAiB,CAAC,CAAA;AACxB,IAAA,MAAM,eAAA,EAAiB,CAAC,CAAA;AAExB,IAAC,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAgC,OAAA,CAAQ,CAAC,GAAA,EAAA,GAAQ;AACjE,MAAA,GAAA,CAAI,YAAA,CAAa,QAAA,CAAS,GAAmB,CAAA,EAAG;AAC9C,QAAC,cAAA,CAAuB,GAAG,EAAA,EAAI,KAAA,CAAM,GAAG,CAAA;AAAA,MAC1C,EAAA,KAAO;AACL,QAAC,cAAA,CAAuB,GAAG,EAAA,EAAI,KAAA,CAAM,GAAG,CAAA;AAAA,MAC1C;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,SAAA,EAAW,eAAA,CAAgB,cAAwB,CAAA;AACzD,IAAA,uBACEJ,6BAAAA;AAAA,MAACK,yBAAAA,CAAU,MAAA;AAAA,MAAV;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,CAAC,QAAA;AAAA,QACV,GAAG,cAAA;AAAA,QACJ,GAAA,EAAK,YAAA;AAAA,QACL,OAAA,EAAS,6CAAA,cAAqB,CAAe,OAAA,EAAS,CAAA,EAAA,GAAM;AAC1D,0BAAA,QAAA,4BAAA,CAAW,GAAA;AAAA,QACb,CAAC;AAAA,MAAA;AAAA,IACH,CAAA;AAAA,EAEJ,CAAC,CAAA;AAED,EAAA,YAAA,CAAa,YAAA,EAAc,WAAA;AAE3B,EAAA,OAAO,YAAA;AACT,CAAA;ApDq0BA;AACA;AqD72BO,IAAM,uBAAA,EAAyB,kBAAA;AAAA,EACpC,yBAAA;AAAA,EACA,gBAAA;AAAA,EACA,CAAC,gBAAgB;AACnB,CAAA;ArD+2BA;AACA;AsDp3BO,IAAM,yBAAA,EAA2B,kBAAA;AAAA,EACtC,2BAAA;AAAA,EACA;AACF,CAAA;AtDs3BA;AACA;AuD13BO,IAAM,uBAAA,EAAyB,kBAAA;AAAA,EACpC,yBAAA;AAAA,EACA;AACF,CAAA;AvD43BA;AACA;AwD54BA,IAAA,uBAAA,EAAA,CAAA,CAAA;AAAA,uCAAA,sBAAA,EAAA;AAAA,EAAA,MAAA,EAAA,CAAA,EAAA,GAAA,6BAAA;AAAA,EAAA,OAAA,EAAA,CAAA,EAAA,GAAA,8BAAA;AAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA,2BAAA;AAAA,EAAA,OAAA,EAAA,CAAA,EAAA,GAAA;AAAA,CAAA,CAAA;AxDo5BA;AACA;AyDn5BA;AACA,sXAAkC;AAClC;AzDq5BA;AACA;A0D15BA,uEAA+B;AAC/B;AAGO,IAAM,mBAAA,EAAqB,CAAC,QAAA,EAAA,GAAyB;AAC1D,EAAA,MAAM,YAAA,EAAc,iDAAA,QAAuB,CAAA;AAE3C,EAAA,MAAM,EAAE,YAAY,EAAA,EAAI,gBAAA,CAAiB,CAAA;AACzC,EAAAJ,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,OAAO,WAAA,CAAY,QAAA,CAAS,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAA,GAAM;AAC1C,MAAA,WAAA,CAAY,CAAA;AAAA,IACd,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,WAAA,EAAa,WAAW,CAAC,CAAA;AAC/B,CAAA;A1Dy5BA;AACA;A2Dv6BA;AAIO,IAAM,gBAAA,EAAmC,gBAAA,CAAA,kBAAA,CAAmB,CAAA;A3Ds6BnE;AACA;AyDx4BI;AAzBJ,IAAM,2BAAA,EAA6B,CAAC,YAAA,EAAc,KAAA,EAAA,GAAU;AAC1D,EAAA,MAAM,MAAA,EAAQF,6BAAAA,WAAoB,CAAA;AAElC,EAAA,MAAM,CAAC,EAAE,OAAO,EAAA,EAAI,KAAA;AACpB,EAAA,kBAAA,CAAmB,CAAA,EAAA,GAAM;AACvB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAC,CAAA;AAED,EAAA,OAAO,KAAA;AACT,CAAA;AAEO,IAAM,4BAAA,EAET,CAAC;AAAA,EACH,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAqD;AACnD,EAAA,MAAM,MAAA,EAAQ,eAAA,CAAgB,qBAAqB,CAAA;AAEnD,EAAA,MAAM,CAAC,SAAA,EAAW,OAAO,EAAA,EAAI,0BAAA,CAA2B,WAAW,CAAA;AAEnE,EAAA,uBACEC,6BAAAA;AAAA,IAAkB,iBAAA,CAAA,IAAA;AAAA,IAAjB;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAA,EAAM,KAAA,IAAS,KAAA,EAAA,EAAY,UAAA,EAAY,IAAA;AAAA,MACvC,YAAA,EAAcM,6CAAAA,YAAqB,EAAc,OAAO,CAAA;AAAA,MACvD,GAAG;AAAA,IAAA;AAAA,EACN,CAAA;AAEJ,CAAA;AAEA,2BAAA,CAA4B,YAAA,EAAc,8BAAA;AzD65B1C;AACA;A4Dx8BA;AACA;AAuBW;AAbJ,IAAM,+BAAA,EAAiCF,+BAAAA;AAAA,EAI5C,CACE;AAAA,IACE,qBAAA;AAAA,IACA,GAAG;AAAA,EACL,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,MAAA,EAAQ,eAAA,CAAgB,qBAAqB,CAAA;AAEnD,IAAA,uBAAOJ,6BAAAA,iBAAkB,CAAA,OAAA,EAAjB,EAA0B,GAAG,KAAA,EAAQ,GAAG,IAAA,EAAM,IAAA,CAAU,CAAA;AAAA,EAClE;AACF,CAAA;AAEA,8BAAA,CAA+B,YAAA,EAAc,iCAAA;A5D07B7C;AACA;A6Dv9BA;AACA;AAEA;AA8BQ;AAnBD,IAAM,+BAAA,EAAiCI,+BAAAA;AAAA,EAI5C,CACE;AAAA,IACE,qBAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,iBAAA;AAAA,IACA,0BAAA,EAA4B,KAAA;AAAA,IAC5B,GAAG;AAAA,EACL,CAAA,EACA,YAAA,EAAA,GACG;AACH,IAAA,MAAM,MAAA,EAAQ,eAAA,CAAgB,qBAAqB,CAAA;AAEnD,IAAA,uBACEJ,6BAAAA,iBAAkB,CAAA,MAAA,EAAjB,EAAyB,GAAG,KAAA,EAC3B,QAAA,kBAAAA,6BAAAA;AAAA,MAAkB,iBAAA,CAAA,OAAA;AAAA,MAAjB;AAAA,QACE,GAAG,KAAA;AAAA,QACH,GAAG,KAAA;AAAA,QACJ,GAAA,EAAK,YAAA;AAAA,QACL,IAAA,mBAAM,IAAA,UAAQ,OAAA;AAAA,QACd,KAAA,mBAAO,KAAA,UAAS,OAAA;AAAA,QAChB,iBAAA,EAAmBM,6CAAAA;AAAA,UACjB,iBAAA;AAAA,UACA,0BAAA,EAA4B,KAAA,EAAA,EAAY,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,cAAA,CAAe;AAAA,QAClE;AAAA,MAAA;AAAA,IACF,EAAA,CACF,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,8BAAA,CAA+B,YAAA,EAAc,iCAAA;A7Ds8B7C;AACA;A8Dz/BA;AACA;AAuBW;AAbJ,IAAM,8BAAA,EAAgCF,+BAAAA;AAAA,EAI3C,CACE;AAAA,IACE,qBAAA;AAAA,IACA,GAAG;AAAA,EACL,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,MAAA,EAAQ,eAAA,CAAgB,qBAAqB,CAAA;AAEnD,IAAA,uBAAOJ,6BAAAA,iBAAkB,CAAA,MAAA,EAAjB,EAAyB,GAAG,KAAA,EAAQ,GAAG,IAAA,EAAM,IAAA,CAAU,CAAA;AAAA,EACjE;AACF,CAAA;AACA,6BAAA,CAA8B,YAAA,EAAc,gCAAA;A9D4+B5C;AACA;A+DzgCA,IAAA,qBAAA,EAAA,CAAA,CAAA;AAAA,uCAAA,oBAAA,EAAA;AAAA,EAAA,KAAA,EAAA,CAAA,EAAA,GAAA,0BAAA;AAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA,yBAAA;AAAA,EAAA,MAAA,EAAA,CAAA,EAAA,GAAA,2BAAA;AAAA,EAAA,QAAA,EAAA,CAAA,EAAA,GAAA,oBAAA;AAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA;AAAA,CAAA,CAAA;A/DkhCA;AACA;AgEvgCO,IAAM,0BAAA,EAA4B,kBAAA;AAAA,EACvC,4BAAA;AAAA,EACA;AACF,CAAA;AhEygCA;AACA;AiE7gCO,IAAM,qBAAA,EAAuB,kBAAA;AAAA,EAClC,gCAAA;AAAA,EACA;AACF,CAAA;AjE+gCA;AACA;AkEphCS;AAJF,IAAM,2BAAA,EAET,CAAA,EAAA,GAAM;AACR,EAAA,MAAM,YAAA,EAAc,oBAAA,CAAqB,CAAA;AACzC,EAAA,uBAAOA,6BAAAA,oBAAA,EAAA,EAAG,QAAA,EAAA,YAAA,CAAY,CAAA;AACxB,CAAA;AAEA,0BAAA,CAA2B,YAAA,EAAc,6BAAA;AlEwhCzC;AACA;AmE5hCS;AAJF,IAAM,4BAAA,EAET,CAAA,EAAA,GAAM;AACR,EAAA,MAAM,aAAA,EAAe,qBAAA,CAAsB,CAAA;AAC3C,EAAA,uBAAOA,6BAAAA,oBAAAO,EAAA,EAAG,QAAA,EAAA,aAAA,CAAa,CAAA;AACzB,CAAA;AAEA,2BAAA,CAA4B,YAAA,EAAc,8BAAA;AnEgiC1C;AACA;AoE7iCA;AACA;ApE+iCA;AACA;AqEnjCA,IAAA,gBAAA,EAAA,CAAA,CAAA;AAAA,uCAAA,eAAA,EAAA;AAAA,EAAA,OAAA,EAAA,CAAA,EAAA,GAAA,uBAAA;AAAA,EAAA,EAAA,EAAA,CAAA,EAAA,GAAA,kBAAA;AAAA,EAAA,UAAA,EAAA,CAAA,EAAA,GAAA,0BAAA;AAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA;AAAA,CAAA,CAAA;ArE2jCA;AACA;AsE1jCA;AACA;AAEE;AAEA;AAAA;AAIF,gEAAgC;AA2CvB;AAtCT,IAAM,iBAAA,EAAmB,CAAA,EAAA,GAAM;AAC7B,EAAA,MAAM,EAAE,gBAAgB,EAAA,EAAI,iBAAA,CAAkB,CAAA;AAE9C,EAAA,MAAM,YAAA,EAAcX,gCAAAA;AAAA,IAClB,CAAC,EAAA,EAAA,GAAoB;AACnB,MAAA,MAAM,cAAA,EAAgB,eAAA,CAAgB,QAAA,CAAS,CAAA,CAAE,aAAA;AAEjD,MAAA,MAAM,iBAAA,EAAmB,CAAA,EAAA,GAAM;AAC7B,QAAA,aAAA,CAAc,IAAI,CAAA;AAAA,MACpB,CAAA;AACA,MAAA,MAAM,iBAAA,EAAmB,CAAA,EAAA,GAAM;AAC7B,QAAA,aAAA,CAAc,KAAK,CAAA;AAAA,MACrB,CAAA;AAEA,MAAA,EAAA,CAAG,gBAAA,CAAiB,YAAA,EAAc,gBAAgB,CAAA;AAClD,MAAA,EAAA,CAAG,gBAAA,CAAiB,YAAA,EAAc,gBAAgB,CAAA;AAElD,MAAA,OAAO,CAAA,EAAA,GAAM;AACX,QAAA,EAAA,CAAG,mBAAA,CAAoB,YAAA,EAAc,gBAAgB,CAAA;AACrD,QAAA,EAAA,CAAG,mBAAA,CAAoB,YAAA,EAAc,gBAAgB,CAAA;AACrD,QAAA,aAAA,CAAc,KAAK,CAAA;AAAA,MACrB,CAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,EAClB,CAAA;AAEA,EAAA,OAAO,aAAA,CAAc,WAAW,CAAA;AAClC,CAAA;AAIO,IAAM,qBAAA,EAAuBQ,+BAAAA,CAGjC,EAAE,YAAA,EAAc,YAAA,EAAc,GAAG,KAAK,CAAA,EAAGA,YAAAA,EAAAA,GAAe;AACzD,EAAA,MAAM,cAAA,EAAgB,gBAAA,CAAiB,CAAA;AACvC,EAAA,MAAM,IAAA,EAAM,+CAAA,YAAgCA,EAAY,aAAa,CAAA;AAErE,EAAA,uBAAOJ,6BAAAA,yBAACK,CAAU,GAAA,EAAV,EAAe,GAAG,IAAA,EAAM,IAAA,CAAU,CAAA;AAC5C,CAAC,CAAA;AAED,oBAAA,CAAqB,YAAA,EAAc,uBAAA;AtEwiCnC;AACA;AuExlCO,IAAM,mBAAA,EAAkD,CAAC;AAAA,EAC9D,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,OAAA,EAAS,YAAA,CAAa,KAAK,CAAA;AACjC,EAAA,OAAO,OAAA,EAAS,SAAA,EAAW,IAAA;AAC7B,CAAA;AAEA,kBAAA,CAAmB,YAAA,EAAc,qBAAA;AvEylCjC;AACA;AwE1mCA;AxE4mCA;AACA;AyE7mCA;AACA;AAqHI;AAnGJ,IAAM,gBAAA,EAAqC;AAAA,EACzC,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,oBAAA,EAAsB,CAC1B,OAAA,EACA,SAAA,EACA,IAAA,EAAA,GAC8B;AAC9B,EAAA,GAAA,CAAI,OAAA,CAAQ,KAAA,IAAS,WAAA,EAAa,OAAO,eAAA;AAEzC,EAAA,MAAM,WAAA,EAAa,UAAA,IAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAS,CAAC,CAAA;AACvE,EAAA,GAAA,CAAI,IAAA,CAAK,KAAA,IAAS,WAAA,EAAa;AAC7B,IAAA,GAAA,CACE,SAAA,GAAY,OAAA,CAAQ,OAAA,GACpB,OAAA,CAAQ,MAAA,CAAO,OAAA,IAAW,aAAA,GAC1B,UAAA;AAEA,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,MACF,CAAA;AAEF,IAAA,OAAO,WAAA,EAAc,OAAA,CAAQ,OAAA,EAA+B,eAAA;AAAA,EAC9D;AAEA,EAAA,GAAA,CAAI,CAAC,CAAC,IAAA,CAAK,MAAA,EAAQ;AACjB,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAA,CAAQ,MAAA;AACjB,CAAA;AAEO,IAAM,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AAErE,IAAM,oBAAA,EAAsB,CAC1B,EAAE,QAAQ,CAAA,EACV,cAAA,EACA,SAAA,EAAA,GACG;AACH,EAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA;AACpC,EAAA,GAAA,CAAI,CAAC,IAAA,EAAM;AAET,IAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,OAAA,IAAW,EAAA,GAAK,UAAA,IAAc,CAAA,EAAG;AACnD,MAAA,KAAA,EAAO,aAAA;AAAA,IACT,EAAA,KAAO;AACL,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,EAAS,mBAAA,CAAoB,OAAA,EAAS,SAAA,EAAW,IAAI,CAAA;AAC3D,EAAA,MAAM,aAAA,kBAAe,cAAA,+BAAgB,QAAA,qBAAS,GAAA;AAC9C,EAAA,GAAA,CACE,aAAA,GACA,YAAA,CAAa,KAAA,IAAS,KAAA,GACtB,YAAA,CAAa,OAAA,IAAW,MAAA;AAExB,IAAA,OAAO,IAAA;AAET,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,OAAO,CAAC,CAAA;AACvC,CAAA;AAEA,IAAMG,uBAAAA,EAAwB,CAAC,SAAA,EAAA,GAAsB;AACnD,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,iBAAA,CAAkB,CAAA;AACzC,EAAA,MAAM,CAAC,OAAO,EAAA,EAAIT,6BAAAA,CAAkC,EAAA,GAAM;AACxD,IAAA,MAAM,eAAA,EAAiBN,6BAAAA;AAAA,MACrB,CAAA,EAAA,GAAM,mBAAA,CAAoB,UAAA,CAAW,QAAA,CAAS,CAAA,EAAG,KAAA,CAAA,EAAW,SAAS;AAAA,IACvE,CAAA;AAEA,IAAA,OAAO,EAAE,eAAe,CAAA;AAAA,EAC1B,CAAC,CAAA;AAED,EAAAQ,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,MAAM,gBAAA,EAAkB,CAAC,OAAA,EAAA,GAA0B;AACjD,MAAA,MAAM,SAAA,EAAW,mBAAA;AAAA,QACf,OAAA;AAAA,QACA,OAAA,CAAQ,cAAA;AAAA,QACR;AAAA,MACF,CAAA;AACA,MAAA,GAAA,CAAI,CAAC,QAAA,EAAU,MAAA;AACf,MACE,OAAA,CAAQ,cAAA,CACR,QAAA,CAAS,QAAA,EAAU,IAAI,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,eAAA,CAAgB,UAAA,CAAW,QAAA,CAAS,CAAC,CAAA;AACrC,IAAA,OAAO,UAAA,CAAW,SAAA,CAAU,eAAe,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,OAAA,EAAS,UAAA,EAAY,SAAS,CAAC,CAAA;AAEnC,EAAA,OAAO,OAAA;AACT,CAAA;AAEO,IAAM,oBAAA,EAAoD,CAAC;AAAA,EAChE,SAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAUO,sBAAAA,CAAsB,SAAS,CAAA;AAE/C,EAAA,uBACER,6BAAAA,kBAAC,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,OAAA,EACjC,SAAA,CACH,CAAA;AAEJ,CAAA;AzEujCA;AACA;A0EjrCA;AAEE;AAAA;A1EmrCF;AACA;A2EvrCA;A3EyrCA;AACA;A4E5rCA;AACE;AAEA;AAEA;AACA;AAAA;AAIF;AA+BI;AArBJ,IAAM,cAAA,EAAgBN,kCAAAA,IAA6C,CAAA;AAEnE,IAAM,kBAAA,EAAoB,CACxB,YAAA,EAAA,GACG;AACH,EAAA,MAAMe,iBAAAA,EAAkBhB,6BAAAA,CAAO,EAAA,GAAM,YAAY,CAAA;AACjD,EAAA,OAAO,EAAE,eAAA,EAAAgB,iBAAgB,CAAA;AAC3B,CAAA;AAEO,IAAM,sBAAA,EAA+C,CAAC,EAAE,SAAS,CAAA,EAAA,GAAM;AAC5E,EAAA,MAAM,MAAA,EAAQ,gBAAA,CAAiB,EAAE,QAAA,EAAU,KAAK,CAAC,CAAA;AACjD,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,qBAAA,CAAsB,CAAA;AAEjD,EAAA,MAAM,CAAC,OAAO,EAAA,EAAIV,6BAAAA;AAAA,IAAS,CAAA,EAAA,GACzB,iBAAA,CAAkB,cAAA,CAAe,QAAA,CAAS,CAAA,CAAE,MAAM;AAAA,EACpD,CAAA;AAGA,EAAA,GAAA,CAAI,KAAA,EAAO,OAAO,QAAA;AAElB,EAAA,uBACEC,6BAAAA,aAAC,CAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,OAAA,EAAU,SAAA,CAAS,CAAA;AAEtD,CAAA;AAEO,IAAM,0BAAA,EAA4B,CACvC,SAAA,EAAA,GACM;AACN,EAAA,MAAM,QAAA,EAAUI,+BAAAA,CAAY,KAAA,EAAO,GAAA,EAAA,GAAQ;AACzC,IAAA,uBACEJ,6BAAAA,qBAAC,EAAA,EACC,QAAA,kBAAAA,6BAAAA,SAAC,EAAA,EAAW,GAAI,KAAA,EAAe,IAAA,CAAU,EAAA,CAC3C,CAAA;AAAA,EAEJ,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,YAAA,EAAc,SAAA,CAAU,WAAA;AAChC,EAAA,OAAO,OAAA;AACT,CAAA;AAMO,SAAS,gBAAA,CAAiB,OAAA,EAA8B;AAC7D,EAAA,MAAM,QAAA,EAAUL,+BAAAA,aAAwB,CAAA;AACxC,EAAA,GAAA,CAAI,iBAAC,OAAA,+BAAS,WAAA,GAAY,CAAC,OAAA;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AACF,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AACnC,EAAA,MAAM,EAAE,eAAA,EAAAc,iBAAgB,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAC7C,EAAA,OAAOA,gBAAAA,CAAgB,CAAA;AACzB,CAAA;A5E2pCA;AACA;A2E5tCA;AAEA,IAAM,mBAAA,aAAN,MAAyB;AAAA,EAMvB,WAAA,CACS,WAAA,EACC,OAAA,EACR;AAFO,IAAA,IAAA,CAAA,YAAA,EAAA,WAAA;AACC,IAAA,IAAA,CAAA,QAAA,EAAA,OAAA;AAAA,EACP;AAAA,kBARK,iBAAA,EAAkC,KAAA;AAAA,kBAClC,eAAA,EAAyB,IAAA,CAAK,GAAA,CAAI,EAAA;AAAA,kBAEnC,WAAA,EAAqB,GAAA;AAAA,EAO5B,KAAA,CAAA,EAAQ;AACN,IAAA,GAAA,CAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,EAAM,MAAA;AACpC,IAAA,IAAA,CAAK,eAAA,EAAiB,IAAA,CAAK,GAAA,CAAI,CAAA;AAC/B,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAA;AAAA,EACf;AAAA,EAEA,IAAA,CAAA,EAAO;AACL,IAAA,GAAA,CAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,EAAM;AAClC,MAAA,oBAAA,CAAqB,IAAA,CAAK,gBAAgB,CAAA;AAC1C,MAAA,IAAA,CAAK,iBAAA,EAAmB,IAAA;AAAA,IAC1B;AAAA,EACF;AAAA,kBAEQ,QAAA,EAAU,CAAA,EAAA,GAAM;AACtB,IAAA,MAAM,YAAA,EAAc,IAAA,CAAK,GAAA,CAAI,CAAA;AAC7B,IAAA,MAAM,UAAA,EAAY,YAAA,EAAc,IAAA,CAAK,cAAA;AACrC,IAAA,IAAI,cAAA,EAAgB,SAAA;AAEpB,IAAA,MAAM,eAAA,EAAiB,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,IAAA,CAAK,WAAA,CAAY,MAAA;AACjE,IAAA,MAAM,gBAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,EAAM,cAAc,CAAA;AAExD,IAAA,IAAI,WAAA,EAAa,CAAA;AACjB,IAAA,MAAA,CAAO,cAAA,GAAiB,gBAAA,GAAmB,WAAA,EAAa,cAAA,EAAgB;AACtE,MAAA,UAAA,EAAA;AACA,MAAA,cAAA,GAAiB,eAAA;AAAA,IACnB;AAEA,IAAA,GAAA,CAAI,WAAA,IAAe,cAAA,EAAgB;AACjC,MAAA,IAAA,CAAK,iBAAA,EAAmB,qBAAA,CAAsB,IAAA,CAAK,OAAO,CAAA;AAAA,IAC5D,EAAA,KAAO;AACL,MAAA,IAAA,CAAK,iBAAA,EAAmB,IAAA;AAAA,IAC1B;AACA,IAAA,GAAA,CAAI,WAAA,IAAe,CAAA,EAAG,MAAA;AAEtB,IAAA,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,UAAA,CAAW,KAAA;AAAA,MACjC,CAAA;AAAA,MACA,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS;AAAA,IAC5B,CAAA;AACA,IAAA,IAAA,CAAK,eAAA,EAAiB,YAAA,EAAc,aAAA;AACpC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA;AAAA,EAC/B,EAAA;AACF,WAAA;AAEA,IAAM,cAAA,EAAmC,MAAA,CAAO,MAAA,CAAO;AAAA,EACrD,IAAA,EAAM;AACR,CAAC,CAAA;AAEM,IAAM,UAAA,EAAY,CACvB,KAAA,EACA,OAAA,EAAkB,KAAA,EAAA,GACO;AACzB,EAAA,MAAM,EAAE,eAAA,EAAAA,iBAAgB,EAAA,mBAAI,gBAAA,CAAiB,EAAE,QAAA,EAAU,KAAK,CAAC,CAAA,UAAK,CAAC,GAAA;AAErE,EAAA,MAAM;AAAA,IACJ,IAAA,EAAM,EAAE,KAAK;AAAA,EACf,EAAA,EAAI,KAAA;AACJ,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,iBAAA,CAAkB,CAAA;AACzC,EAAA,MAAM,GAAA,EAAK,UAAA,CAAW,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAEzC,EAAA,MAAM,MAAA,EAAQZ,2BAAAA,EAAS,CAAA;AACvB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,EAAA,EAAIE,6BAAAA,IAAa,CAAA;AAEvD,EAAA,MAAM,QAAA,EAAUW,iDAAAA,CAAgBC,KAAAA,EAAAA,GAAiB;AAC/C,IAAA,gBAAA,CAAiBA,KAAI,CAAA;AACrB,oBACEF,gBAAAA,+BAGC,QAAA,qBAASE,MAAAA,IAAS,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,cAAA,EAAgB,KAAA,CAAM,MAAM,GAAA;AAAA,EACrE,CAAC,CAAA;AAED,EAAA,MAAM,CAAC,WAAW,EAAA,EAAIZ,6BAAAA;AAAA,IACpB,IAAI,kBAAA,CAAmB,IAAA,EAAM,OAAO;AAAA,EACtC,CAAA;AAEA,EAAAE,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,CAAC,MAAA,EAAQ;AACX,MAAA,WAAA,CAAY,IAAA,CAAK,CAAA;AACjB,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,KAAA,CAAM,QAAA,IAAY,GAAA,GAAM,CAAC,IAAA,CAAK,UAAA,CAAW,WAAA,CAAY,UAAU,CAAA,EAAG;AACpE,MAAA,KAAA,CAAM,QAAA,EAAU,EAAA;AAChB,MAAA,OAAA,CAAQ,IAAI,CAAA;AAEZ,MAAA,WAAA,CAAY,YAAA,EAAc,IAAA;AAC1B,MAAA,WAAA,CAAY,WAAA,EAAa,IAAA;AACzB,MAAA,WAAA,CAAY,IAAA,CAAK,CAAA;AAEjB,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,WAAA,EAAa,IAAA;AACzB,IAAA,WAAA,CAAY,KAAA,CAAM,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,OAAA,EAAS,WAAA,EAAa,EAAA,EAAI,MAAA,EAAQ,IAAI,CAAC,CAAA;AAE3C,EAAAA,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,WAAA,CAAY,IAAA,CAAK,CAAA;AAAA,IACnB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,OAAOC,4BAAAA;AAAA,IACL,CAAA,EAAA,GACE,OAAA,EACI;AAAA,MACE,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,cAAc,CAAA;AAAA,MAC1C,MAAA,EAAQ,KAAA,IAAS,cAAA,EAAgB,KAAA,CAAM,OAAA,EAAS;AAAA,IAClD,EAAA,EACA,KAAA;AAAA,IACN,CAAC,MAAA,EAAQ,aAAA,EAAe,KAAA,EAAO,IAAI;AAAA,EACrC,CAAA;AACF,CAAA;A3E6rCA;AACA;A0EryCI;AAVG,IAAM,yBAAA,EAA2BE,+BAAAA,CAGrC,EAAE,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY,MAAA,EAAQ,GAAG,KAAK,CAAA,EAAG,YAAA,EAAA,GAAiB;AAC7E,EAAA,MAAM;AAAA,IACJ,IAAA,EAAM,EAAE,KAAK,CAAA;AAAA,IACb;AAAA,EACF,EAAA,EAAI,SAAA,CAAU,kBAAA,CAAmB,CAAA,EAAG,MAAM,CAAA;AAE1C,EAAA,uBACEJ,6BAAAA,SAAC,EAAA,EAAU,aAAA,EAAa,MAAA,CAAO,IAAA,EAAO,GAAG,IAAA,EAAM,GAAA,EAAK,YAAA,EACjD,QAAA,EAAA,KAAA,CACH,CAAA;AAEJ,CAAC,CAAA;AAED,wBAAA,CAAyB,YAAA,EAAc,2BAAA;A1EyyCvC;AACA;A6Ej1CA;AACA;AAeS;AAPF,IAAM,0BAAA,EAA4BI,+BAAAA,CAGtC,KAAA,EAAO,YAAA,EAAA,GAAiB;AACzB,EAAA,MAAM;AAAA,IACJ,IAAA,EAAM,EAAE,MAAM;AAAA,EAChB,EAAA,EAAI,mBAAA,CAAoB,CAAA;AACxB,EAAA,uBAAOJ,6BAAAA,yBAACK,CAAU,GAAA,EAAV,EAAc,GAAA,EAAK,KAAA,EAAQ,GAAG,KAAA,EAAO,GAAA,EAAK,aAAA,CAAc,CAAA;AAClE,CAAC,CAAA;AAED,yBAAA,CAA0B,YAAA,EAAc,4BAAA;A7Ey0CxC;AACA;A8Ex1CO,IAAM,4BAAA,EAET,CAAA,EAAA,GAAM;AACR,EAAA,MAAM;AAAA,IACJ,IAAA,EAAM,EAAE,QAAQ;AAAA,EAClB,EAAA,EAAI,qBAAA,CAAsB,CAAA;AAC1B,EAAA,wBAAO,OAAA,UAAW,MAAA;AACpB,CAAA;AAEA,2BAAA,CAA4B,YAAA,EAAc,8BAAA;A9Eu1C1C;AACA;A+Ej2CO,IAAM,+BAAA,EAET,CAAC,EAAE,SAAS,CAAA,EAAA,GAAM;AACpB,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,qBAAA,CAAsB,CAAA;AACjD,EAAA,MAAM,aAAA,EAAe,cAAA,CAAe,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,MAAA,CAAO,KAAA,IAAS,SAAS,CAAA;AAEtE,EAAA,OAAO,aAAA,EAAe,SAAA,EAAW,IAAA;AACnC,CAAA;AAEA,8BAAA,CAA+B,YAAA,EAAc,iCAAA;A/E+1C7C;AACA;AwEl0CI;AAFJ,IAAM,kBAAA,EAAoB;AAAA,EACxB,IAAA,EAAM,CAAA,EAAA,mBACJO,8BAAAA,GAAC,EAAA,EAAE,KAAA,EAAO,EAAE,UAAA,EAAY,WAAW,CAAA,EACjC,QAAA,EAAA;AAAA,oBAAAZ,6BAAAA,wBAAC,EAAA,CAAA,CAAyB,CAAA;AAAA,oBAC1BA,6BAAAA,8BAAC,EAAA,EACC,QAAA,kBAAAA,6BAAAA,MAAC,EAAA,EAAK,KAAA,EAAO,EAAE,UAAA,EAAY,SAAS,CAAA,EAAI,QAAA,EAAA,UAAA,CAAU,EAAA,CACpD;AAAA,EAAA,EAAA,CACF,CAAA;AAAA,EAEF,KAAA,EAAO,CAAA,EAAA,mBAAMA,6BAAAA,yBAAC,EAAA,CAAA,CAA0B,CAAA;AAAA,EACxC,EAAA,EAAI,CAAA,EAAA,mBAAMA,6BAAAA,2BAAC,EAAA,CAAA,CAA4B,CAAA;AAAA,EACvC,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,KAAA,EAAA,GAAU;AACnB,MAAA,MAAM,EAAE,WAAW,EAAA,EAAI,mBAAA,CAAoB,CAAA;AAC3C,MAAA,MAAM,OAAA,EAAS,UAAA,CAAW,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA;AACjE,MAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,OAAO,IAAA;AACpB,MAAA,uBAAOA,6BAAAA,MAAC,EAAA,EAAQ,GAAG,MAAA,CAAO,CAAA;AAAA,IAC5B;AAAA,EACF;AACF,CAAA;AAMA,IAAM,4BAAA,EAAoE,CAAC;AAAA,EACzE,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,iBAAA,CAAkB,IAAA;AAAA,IAC1B,IAAA,EAAAa,MAAAA,EAAO,iBAAA,CAAkB,IAAA;AAAA,IACzB,KAAA,EAAAC,OAAAA,EAAQ,iBAAA,CAAkB,KAAA;AAAA,IAC1B,GAAA,EAAK,iBAAA,CAAkB,EAAA;AAAA,IACvB,KAAA,EAAO,EAAE,QAAA,EAAU,CAAC,CAAA,EAAG,QAAA,EAAAC,UAAAA,EAAW,iBAAA,CAAkB,KAAA,CAAM,SAAS,EAAA,EAAI,CAAC;AAAA,EAC1E,EAAA,EAAI,CAAC;AACP,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,EAAE,iBAAiB,EAAA,EAAI,gBAAA,CAAiB,CAAA;AAC9C,EAAA,MAAM,EAAE,WAAW,EAAA,EAAI,iBAAA,CAAkB,CAAA;AACzC,EAAA,MAAM,cAAA,EAAgB,gBAAA,CAAiB,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,aAAa,CAAA;AAE7D,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,qBAAA,CAAsB,CAAA;AACjD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAO,EAAA,EAAI,cAAA,CAAe,CAAA;AAExC,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,IAAA;AAClB,EAAA,OAAA,CAAQ,IAAA,EAAM;AAAA,IACZ,KAAK,MAAA;AACH,MAAA,GAAA,CAAI,MAAA,CAAO,KAAA,IAAS,iBAAA;AAClB,QAAA,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA;AACjE,MAAA,GAAA,CAAI,KAAA,IAAS,aAAA,EAAe,uBAAOf,6BAAAA,KAAC,EAAA,EAAM,IAAA,EAAY,OAAA,CAAgB,CAAA;AAEtE,MAAA,uBAAOA,6BAAAA,KAACa,EAAA,EAAK,IAAA,EAAY,OAAA,CAAgB,CAAA;AAAA,IAE3C,KAAK,OAAA;AACH,MAAA,GAAA,CAAI,MAAA,CAAO,KAAA,IAAS,iBAAA;AAClB,QAAA,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA;AAEjE,MAAA,uBAAOb,6BAAAA,MAACc,EAAA,EAAM,IAAA,EAAY,OAAA,CAAgB,CAAA;AAAA,IAE5C,KAAK,IAAA;AACH,MAAA,GAAA,CAAI,MAAA,CAAO,KAAA,IAAS,iBAAA;AAClB,QAAA,MAAM,IAAI,KAAA,CAAM,+CAA+C,CAAA;AACjE,MAAA,uBAAOd,6BAAAA,EAAC,EAAA,EAAG,IAAA,EAAY,OAAA,CAAgB,CAAA;AAAA,IAEzC,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,KAAA,EAAO,OAAA,CAAQ,IAAA,CAAK,QAAQ,EAAA,GAAKe,SAAAA;AACvC,MAAA,MAAM,UAAA,EAAY,CAAC,MAAA,EAAA,GACjB,aAAA,CAAc;AAAA,QACZ,SAAA,EAAW,UAAA,CAAW,QAAA,CAAS,CAAA,CAAE,OAAA,CAAQ,EAAA;AAAA,QACzC,UAAA,EAAY,IAAA,CAAK,UAAA;AAAA,QACjB;AAAA,MACF,CAAC,CAAA;AACH,MAAA,uBAAOf,6BAAAA,IAAC,EAAA,EAAK,IAAA,EAAY,MAAA,EAAgB,UAAA,CAAsB,CAAA;AAAA,IACjE;AAAA,IACA,OAAA;AACE,MAAA,MAAM,cAAA,EAAuB,IAAA;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,aAAa,CAAA,CAAA;AAC/D,EAAA;AACF;AAO6D;AAC3D,EAAA;AACA,EAAA;AACI;AAGA,EAAA;AAGN;AAE2BgB;AACzB,EAAA;AAGO,EAAA;AAIT;AAE0E;AACxE,EAAA;AACI;AACqC,EAAA;AAEuB,EAAA;AAEL,EAAA;AACvC,IAAA;AAEhBhB,IAAAA;AAAC,MAAA;AAAA,MAAA;AAEC,QAAA;AACA,QAAA;AAAA,MAAA;AAFK,MAAA;AAGP,IAAA;AAEH,EAAA;AACH;AAEsC;AxEmyC4B;AACA;AgF17CxD;AACD,EAAA;AACT;AAEyC;AhF27CyB;AACA;AoE37C5D;AAHD;AAEgB,EAAA;AAIpB;AAEuC;ApE47C0B;AACA;AiFr9ClE;AAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA;AjF89CkE;AACA;AkF79C7B;AACX;AAC1B;AAGEI;AAEK;AAsBH;AAXsB;AACK,EAAA;AAEU,EAAA;AACpB,IAAA;AAEN,IAAA;AACN,IAAA;AACP,EAAA;AAGEJ,EAAAA;AAAW,IAAA;AAAV,IAAA;AACK,MAAA;AACC,MAAA;AACgD,MAAA;AAAA,IAAA;AACvD,EAAA;AAEH;AAEmC;AlFg9C8B;AACA;AmFt/C7B;AACL;AACX;AACrB;AAEEI;AACAR;AACAK;AACAJ;AACK;AAGA;AAG0B;AA8E3B;AAvEgCO;AAKlC,EAAA;AACc,IAAA;AACZ,IAAA;AACU,IAAA;AACV,IAAA;AACA,IAAA;AACG,IAAA;AAGF,EAAA;AACoC,IAAA;AACU,IAAA;AAEhB,IAAA;AACN,MAAA;AAChB,MAAA;AACV,IAAA;AAEkC,IAAA;AAEkB,IAAA;AACD,IAAA;AACC,IAAA;AAE7B,IAAA;AACgB,MAAA;AACd,MAAA;AACN,QAAA;AACC,QAAA;AACnB,MAAA;AACD,IAAA;AAE4C,IAAA;AAC3B,MAAA;AAE+B,MAAA;AACN,QAAA;AACvB,QAAA;AACG,UAAA;AAEmC,0BAAA;AACtD,QAAA;AACF,MAAA;AACF,IAAA;AAEuC,IAAA;AACP,IAAA;AACD,MAAA;AACO,MAAA;AAEE,MAAA;AAC7B,MAAA;AACmB,QAAA;AACA,QAAA;AAC5B,MAAA;AACmB,IAAA;AAEW,IAAA;AAEP,IAAA;AACH,MAAA;AACZ,QAAA;AACR,MAAA;AACD,IAAA;AAGCJ,IAAAA;AAAC,MAAA;AAAA,MAAA;AACM,QAAA;AACL,QAAA;AACI,QAAA;AACJ,QAAA;AACU,QAAA;AACsC,QAAA;AACH,UAAA;AACb,UAAA;AACc,UAAA;AAC7C,QAAA;AACwD,QAAA;AAAA,MAAA;AAC3D,IAAA;AAEJ,EAAA;AACF;AAEqC;AnF49C6B;AACA;AoF3kDD;AAEvC;AAetB;AALsB;AACmB,EAAA;AACgB,EAAA;AAGzDA,EAAAA;AAAW,IAAA;AAAV,IAAA;AACM,MAAA;AACD,MAAA;AACJ,MAAA;AACuB,MAAA;AAAA,IAAA;AACzB,EAAA;AAEH;AAEmC;ApFmkD8B;AACA;AqFplD3B;AACrC,EAAA;AACA,EAAA;AACF;ArFslDkE;AACA;AsF5lDA;AAChE,EAAA;AACG,EAAA;AACC;AAC8B,EAAA;AACP,EAAA;AAC7B;AAEkC;AtF6lDgC;AACA;AuFhnDlE;AAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA;AvFwnDkE;AACA;AwFznDlE;AAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA;AxFooDkE;AACA;AyFnoDxC;AAC4C;AAW7D;AADS;AAC2B,EAAA;AAC5C;AAEiC;AzF4nDgC;AACA;A0FroDE;AAClE,EAAA;AACI;AACyB,EAAA;AACH,EAAA;AAC5B;AAEmC;A1FsoD+B;AACA;A2F7oDJ;AAC5D,EAAA;AACG,EAAA;AACC;AAC4B,EAAA;AACL,EAAA;AAC7B;AAEgC;A3F8oDkC;AACA;A4F/pDlC;AACN;AAC4C;A5FiqDJ;AACA;A6FrqDlC;AACT;A7FuqD2C;AACA;A8F1qDnC;AACH;AAGgC;AACf,EAAA;AAEvBJ,EAAAA;AACG,IAAA;AAC6B,MAAA;AAClC,QAAA;AACb,MAAA;AAE8C,MAAA;AACX,QAAA;AACQ,UAAA;AACT,YAAA;AACA,cAAA;AAC7B,YAAA;AACF,UAAA;AAE0C,UAAA;AACX,YAAA;AACE,cAAA;AAC/B,YAAA;AACF,UAAA;AACF,QAAA;AAEY,QAAA;AACb,MAAA;AAEwB,MAAA;AACuB,MAAA;AAGf,MAAA;AACH,QAAA;AAC9B,MAAA;AAEa,MAAA;AACe,QAAA;AACE,QAAA;AAC9B,MAAA;AACF,IAAA;AACY,IAAA;AACd,EAAA;AAEgC,EAAA;AAClC;A9FiqDkE;AACA;A+FltDnC;AACL;AAGmC;AAChB,EAAA;AAEF,EAAA;AACzB,EAAA;AACuC,IAAA;AACvC,MAAA;AACb,IAAA;AAC0B,EAAA;AAC/B;A/FitDkE;AACA;A6FjtDQ;AAC3D,EAAA;AACyB;AACF,EAAA;AAEK,EAAA;AAEH,EAAA;AAIK,EAAA;AAEU,EAAA;AAChC,IAAA;AACM,IAAA;AAEQ,IAAA;AACe,IAAA;AAClD,EAAA;AAE2B,EAAA;AACN,IAAA;AACT,IAAA;AAEgC,IAAA;AAEA,IAAA;AAEmB,IAAA;AAEtD,IAAA;AACc,MAAA;AACgB,QAAA;AACnC,MAAA;AAEkC,MAAA;AACmC,QAAA;AACrD,UAAA;AACb,QAAA;AACH,MAAA;AACF,IAAA;AAE4B,IAAA;AAC9B,EAAA;AAE2C,EAAA;AACoB,IAAA;AACnC,MAAA;AAC1B,IAAA;AAEa,IAAA;AACd,EAAA;AAEoD,EAAA;AACT,IAAA;AAC7B,IAAA;AACkC,MAAA;AAC/C,IAAA;AACD,EAAA;AAEqE,EAAA;AAE5C,EAAA;AACH,IAAA;AACtB,EAAA;AAEM,EAAA;AACT;A7F+rDkE;AACA;A4FvvD9D;AARa;AACmD,EAAA;AAChE,IAAA;AACD,EAAA;AAEsD,EAAA;AAIlD,EAAA;AAGN;AAEqC;A5F2vD4B;AACA;AgG3xDhB;AhG6xDgB;AACA;AiG9xDG;AACpC;AjGgyDiC;AACA;AkGpyD3C;AAce;AACpC,EAAA;AACA,EAAA;AAKkD;AACb,EAAA;AAExB,EAAA;AACA,EAAA;AAEC,EAAA;AACW,IAAA;AAC0B,IAAA;AACjD,EAAA;AACY,EAAA;AACU,IAAA;AACsB,IAAA;AAC9B,IAAA;AACd,EAAA;AACc,EAAA;AAC8B,IAAA;AAC5C,EAAA;AACA;AlGmxD8D;AACA;AmG3zD3C;AAUe;AACxB,EAAA;AACc,EAAA;AACC,IAAA;AACzB,EAAA;AACY,EAAA;AACc,EAAA;AACC,IAAA;AAC3B,EAAA;AACA;AnGozD8D;AACA;AiGjsD9D;AAlHyE;AACtB,EAAA;AACvD;AAME;AAEmD,EAAA;AACd,EAAA;AAChB,EAAA;AAEqB,EAAA;AACH,EAAA;AAGG,EAAA;AAIxC,EAAA;AAIO,IAAA;AAEY,EAAA;AACnB,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACD,EAAA;AACH;AAEoD;AACF,EAAA;AAEM,EAAA;AACjCH,IAAAA;AAEf,MAAA;AAC6B,QAAA;AACC,QAAA;AAC5B,QAAA;AACA,QAAA;AACF,MAAA;AACJ,IAAA;AAC8C,IAAA;AACA,IAAA;AAC9B,MAAA;AAC0B,QAAA;AACjB,QAAA;AACT,UAAA;AACR,YAAA;AACF,UAAA;AAEiC,QAAA;AAE5B,QAAA;AACT,MAAA;AACkB,MAAA;AACkC,QAAA;AAC7B,QAAA;AACT,UAAA;AACR,YAAA;AACF,UAAA;AAEmC,QAAA;AAEK,UAAA;AAC1C,QAAA;AACmC,QAAA;AACjC,UAAA;AACM,UAAA;AAC2C,UAAA;AAClD,QAAA;AACH,MAAA;AACD,IAAA;AAEqD,IAAA;AACvD,EAAA;AAEe,EAAA;AACuC,IAAA;AAClC,MAAA;AACf,QAAA;AAC4B,QAAA;AACpB,QAAA;AACR,QAAA;AACF,MAAA;AACe,MAAA;AAC2C,MAAA;AACxD,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AAEwC,IAAA;AAEM,IAAA;AACe,EAAA;AAExD,EAAA;AACT;AAE0D;AACxD,EAAA;AACA,EAAA;AACI;AAC0C,EAAA;AAGZ,EAAA;AAIpC;AjGoxDkE;AACA;AgGv2D5D;AA/B+B;AAIhC;AACI,EAAA;AAGQ,IAAA;AAG2B,IAAA;AAEK,IAAA;AACF,IAAA;AAC7C,EAAA;AACF;AAOmD;AACjD,EAAA;AACA,EAAA;AACI;AAC+B,EAAA;AAI/B,EAAA;AACE,oBAAA;AAA8B,sBAAA;AAI5B,sBAAA;AAEJ,IAAA;AAEE,oBAAA;AAGA,oBAAA;AAEJ,EAAA;AAEJ;AAEsBuB;AACpB,EAAA;AAGO,EAAA;AAKT;AAE8E;AAC5E,EAAA;AACI;AAC2C,EAAA;AAES,EAAA;AACvB,EAAA;AAE2B,EAAA;AACrC,IAAA;AAEnBhB,IAAAA;AAAC,MAAA;AAAA,MAAA;AAEC,QAAA;AACA,QAAA;AAAA,MAAA;AAFK,MAAA;AAGP,IAAA;AAEH,EAAA;AACH;AAE0C;AAEHgB;AACrC,EAAA;AAEgD,EAAA;AAKlD;AhGg2DkE;AACA;AoGz8DrB;AAC3C,EAAA;AACA,EAAA;AACF;ApG28DkE;AACA;AqG/8DzB;AACvC,EAAA;AACA,EAAA;AAC+B,EAAA;AACjC;ArGi9DkE;AACA;AsGh+DrCjB;AtGk+DqC;AACA;AuG79DlE;AAC+C,EAAA;AAAzB,IAAA;AACH,IAAA;AACjB,EAAA;AAEa,EAAA;AACC,IAAA;AACd,EAAA;AAEmC,EAAA;AAClB,IAAA;AACU,IAAA;AAC3B,EAAA;AAO6C,kBAAA;AAEO,EAAA;AAClB,IAAA;AACgB,IAAA;AAClD,EAAA;AAEoC,kBAAA;AACmB,IAAA;AACvD,EAAA;AACF;AvGs9DkE;AACA;AwG5/DlE;AAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA,EAAA;AAAA;AxGwgEkE;AACA;AyGzgEnC;AAEL;AACxB,EAAA;AACA,EAAA;AACF;AAEyB;AACkD;AzGygET;AACA;A0GxgE5C;AACoC,EAAA;AAC1D;AAIE;AACkB,EAAA;AAC+B,EAAA;AAE/B;AACE,EAAA;AAClB,IAAA;AACoB,IAAA;AACtB,EAAA;AAEqB,EAAA;AACP,EAAA;AACP,IAAA;AACI,MAAA;AACF,QAAA;AACH,QAAA;AACuC,QAAA;AACN,UAAA;AACtB,YAAA;AACF,cAAA;AAC+B,cAAA;AACpC,YAAA;AACF,UAAA;AACO,UAAA;AACR,QAAA;AACD,QAAA;AACF,MAAA;AAEG,IAAA;AACI,MAAA;AACF,QAAA;AACH,QAAA;AACiB,QAAA;AACnB,MAAA;AAEG,IAAA;AACI,MAAA;AACF,QAAA;AACH,QAAA;AACiB,QAAA;AACnB,MAAA;AAEO,IAAA;AACwB,MAAA;AAC2B,MAAA;AAC5D,IAAA;AACF,EAAA;AACF;A1GkgEkE;AACA;A2GnjEE;AACpB,EAAA;AACvC,EAAA;AACT;AAE+B;AACyB,kBAAA;AAAA;AACb,kBAAA;AACR,mBAAA;AACpB,IAAA;AACb,EAAA;AAME,EAAA;AACwC,IAAA;AACE,IAAA;AAEK,IAAA;AAGrB,IAAA;AACsB,MAAA;AACjB,QAAA;AAC7B,MAAA;AAEgC,MAAA;AACc,QAAA;AACc,QAAA;AAC9B,QAAA;AAChB,UAAA;AACR,YAAA;AACF,UAAA;AACF,QAAA;AACkB,QAAA;AACpB,MAAA;AACF,IAAA;AAGyB,IAAA;AACI,MAAA;AACN,QAAA;AACL,QAAA;AAChB,MAAA;AAIoC,MAAA;AAEjB,QAAA;AACnB,MAAA;AAEa,MAAA;AACf,IAAA;AACF,EAAA;AACc,EAAA;AACmD,IAAA;AACN,IAAA;AACrB,MAAA;AACpC,IAAA;AACO,IAAA;AACT,EAAA;AAEoE,EAAA;AACjB,IAAA;AACK,IAAA;AACzC,IAAA;AACD,MAAA;AACR,QAAA;AACF,MAAA;AAGgB,IAAA;AACO,MAAA;AACoB,MAAA;AAC3C,MAAA;AACF,IAAA;AAGmC,IAAA;AACjC,MAAA;AACS,MAAA;AACH,MAAA;AACK,MAAA;AACoB,MAAA;AACjC,IAAA;AAEqC,IAAA;AACD,IAAA;AAEZ,IAAA;AACV,MAAA;AACd,IAAA;AACF,EAAA;AAE8B,EAAA;AACe,IAAA;AACtC,IAAA;AACO,MAAA;AACR,QAAA;AACF,MAAA;AAEK,IAAA;AACiC,MAAA;AACrB,MAAA;AACnB,IAAA;AACF,EAAA;AAEuE,EAAA;AACjE,IAAA;AACD,IAAA;AACmC,MAAA;AACC,IAAA;AAElC,IAAA;AACH,MAAA;AACyB,MAAA;AACnB,QAAA;AACsB,QAAA;AAC3B,MAAA;AACH,IAAA;AAEO,IAAA;AACT,EAAA;AAE4E,EAAA;AAC/B,IAAA;AAEtC,IAAA;AACO,MAAA;AACR,QAAA;AACF,MAAA;AAKI,IAAA;AAGc,IAAA;AACR,MAAA;AACR,QAAA;AACF,MAAA;AAEoC,IAAA;AACQ,MAAA;AACvC,MAAA;AACO,QAAA;AACR,UAAA;AACF,QAAA;AACgD,MAAA;AACpD,IAAA;AAEmC,IAAA;AACL,IAAA;AAEH,IAAA;AACyB,MAAA;AACpD,IAAA;AACF,EAAA;AAE+B,EAAA;AACc,IAAA;AACtC,IAAA;AACO,MAAA;AACR,QAAA;AACF,MAAA;AAEwC,IAAA;AACnC,IAAA;AACT,EAAA;AAEkC,EAAA;AACW,IAAA;AACtC,IAAA;AACO,MAAA;AACR,QAAA;AACF,MAAA;AAEgB,IAAA;AACI,MAAA;AACtB,IAAA;AAE4B,IAAA;AAC9B,EAAA;AAEoC,EAAA;AACV,IAAA;AACV,MAAA;AACZ,MAAA;AACF,IAAA;AAE2C,IAAA;AACtC,IAAA;AACO,MAAA;AACR,QAAA;AACF,MAAA;AAEU,IAAA;AAKV,IAAA;AACkB,MAAA;AACI,QAAA;AACtB,MAAA;AACF,IAAA;AACF,EAAA;AACF;A3GkgEkE;AACA;A4GnuEvC;A5GquEuC;AACA;A6GtuEhC;A7GwuEgC;AACA;A8G3uElE;AAIEK;AACK;AACgB;AAwBV;AArB6B;AACtC,EAAA;AACG,EAAA;AAE+C;AAC3C,EAAA;AACyC,IAAA;AAC3C,IAAA;AACA,IAAA;AACL,EAAA;AACF;AAKG;AAE4D,EAAA;AAC1CA,EAAAA;AACH,IAAA;AACS,MAAA;AACa,MAAA;AACtC,IAAA;AACF,EAAA;AAGU,EAAA;AAEH,EAAA;AACT;A9GguEkE;AACA;A6G9vE5D;AAH+D;AAG/D,EAAA;AAGN;AAEsB;AAEyB;AAEsB;AACvD,EAAA;AACD,EAAA;AACZ;AAE4B;A7G4vEqC;AACA;A+GpxE3B;AACb;AACa;AA8BjC;AA5BmC;AAC7B,EAAA;AACC,IAAA;AACE,MAAA;AACA,MAAA;AACF,MAAA;AACT,IAAA;AACM,IAAA;AACK,MAAA;AACH,MAAA;AACR,IAAA;AACF,EAAA;AACiB,EAAA;AACN,IAAA;AACH,IAAA;AACR,EAAA;AACD;AAScA;AACoC,EAAA;AAE7CJ,IAAAA;AAAW,MAAA;AAAV,MAAA;AACuD,QAAA;AAClD,QAAA;AACJ,QAAA;AAAA,MAAA;AACF,IAAA;AAEJ,EAAA;AACF;AAEqB;A/G8wE6C;AACA;A4GtyE1D;AAJuB;AAGzB,EAAA;AACE,oBAAA;AACG,MAAA;AAC8B,sBAAA;AAEnC,IAAA;AAC6B,oBAAA;AAC/B,EAAA;AAEH;AAE+B;A5GwyEkC;AACA;AgH3zE9C;AACe,EAAA;AAEL,EAAA;AACH,IAAA;AACT,IAAA;AACG,MAAA;AACC,QAAA;AACN,UAAA;AACG,UAAA;AACP,YAAA;AACQ,cAAA;AACU,cAAA;AAClB,YAAA;AACF,UAAA;AACD,QAAA;AACD,QAAA;AACF,MAAA;AACa,MAAA;AACG,QAAA;AACN,UAAA;AACmC,UAAA;AACrB,YAAA;AACJ,YAAA;AACC,cAAA;AACJ,gBAAA;AACC,kBAAA;AACK,kBAAA;AACb,gBAAA;AACF,cAAA;AACc,cAAA;AACmB,gBAAA;AACtB,kBAAA;AACC,oBAAA;AACY,oBAAA;AACpB,kBAAA;AACF,gBAAA;AACgB,gBAAA;AAClB,cAAA;AACS,cAAA;AACsB,gBAAA;AACiB,gBAAA;AAChD,cAAA;AACF,YAAA;AACD,UAAA;AACF,QAAA;AACD,QAAA;AACF,MAAA;AACkB,MAAA;AACmC,QAAA;AAClB,UAAA;AACtB,YAAA;AACC,cAAA;AACW,cAAA;AACF,cAAA;AACmB,cAAA;AACvB,cAAA;AACb,YAAA;AACF,UAAA;AACO,UAAA;AACR,QAAA;AAEoB,QAAA;AACiC,UAAA;AACT,UAAA;AACC,YAAA;AAC1C,YAAA;AACF,UAAA;AACF,QAAA;AAEc,QAAA;AACN,UAAA;AACG,UAAA;AACV,QAAA;AACD,QAAA;AACF,MAAA;AACa,MAAA;AACyC,QAAA;AACtB,QAAA;AAClB,UAAA;AACR,YAAA;AACF,UAAA;AAEoC,QAAA;AACK,UAAA;AAEM,YAAA;AAC/C,UAAA;AACK,UAAA;AACa,YAAA;AACa,UAAA;AACa,YAAA;AAErB,UAAA;AACL,UAAA;AACG,YAAA;AACrB,UAAA;AACF,QAAA;AAEA,QAAA;AACF,MAAA;AAES,MAAA;AACsB,QAAA;AAC2B,QAAA;AAC1D,MAAA;AACF,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AhHozEkE;AACA;AiHx6E7B;AACrB,EAAA;AACQ,IAAA;AACb,MAAA;AACL,MAAA;AACoB,QAAA;AACD,QAAA;AACnB,MAAA;AACD,IAAA;AACH,EAAA;AACF;AjH06EkE;AACA;AkHz7EzC;AlH27EyC;AACA;AmHv7EzB;AACO,EAAA;AAC1C,EAAA;AAIqD,EAAA;AAC1B,IAAA;AACgB,MAAA;AAIzC,MAAA;AAGmB,QAAA;AACX,UAAA;AACQ,UAAA;AACc,UAAA;AACF,UAAA;AACJ,UAAA;AACvB,QAAA;AACiB,QAAA;AACpB,MAAA;AAEc,MAAA;AAC6B,QAAA;AACpB,UAAA;AACX,YAAA;AACK,YAAA;AACZ,UAAA;AACD,UAAA;AACF,QAAA;AAC6C,QAAA;AACtB,UAAA;AACK,UAAA;AACiB,UAAA;AAC3C,UAAA;AACF,QAAA;AACqD,QAAA;AACrC,UAAA;AACe,UAAA;AACV,UAAA;AACX,YAAA;AACQ,YAAA;AACe,YAAA;AACF,YAAA;AACZ,YAAA;AAChB,UAAA;AACD,UAAA;AACF,QAAA;AAC8C,QAAA;AACzB,UAAA;AACX,YAAA;AACQ,YAAA;AACI,YAAA;AACkB,YAAA;AACtB,YAAA;AACf,UAAA;AACD,UAAA;AACF,QAAA;AACsC,QAAA;AACjB,UAAA;AACX,YAAA;AACH,YAAA;AACJ,UAAA;AACD,UAAA;AACF,QAAA;AACqC,QAAA;AAChB,UAAA;AACX,YAAA;AACC,YAAA;AACR,UAAA;AACD,UAAA;AACF,QAAA;AACS,QAAA;AACsB,UAAA;AAC2B,UAAA;AAC1D,QAAA;AACF,MAAA;AACF,IAAA;AACD,EAAA;AACH;AAEqE;AACrC,EAAA;AACyB,EAAA;AAChD,EAAA;AACc,IAAA;AACa,IAAA;AAClC,EAAA;AACF;AnH+6EkE;AACA;AoHjhF9B;AACrB,EAAA;AAEc,EAAA;AACI,IAAA;AACjB,MAAA;AACqB,MAAA;AAGY,MAAA;AACd,QAAA;AAC7B,MAAA;AAG+B,MAAA;AACjC,IAAA;AACkB,IAAA;AAEJ,MAAA;AACe,QAAA;AAC3B,MAAA;AACF,IAAA;AACD,EAAA;AACH;ApH6gFkE;AACA;AqHzhF9C;AACX,EAAA;AACyB,IAAA;AACI,MAAA;AACzB,MAAA;AAC+C,QAAA;AACR,UAAA;AAG9B,UAAA;AACd,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAKyD;AACF,EAAA;AAAjC,IAAA;AAAkC,EAAA;AAEa,EAAA;AACpB,IAAA;AACnC,MAAA;AACC,MAAA;AACS,QAAA;AAClB,MAAA;AACqB,MAAA;AACJ,QAAA;AACkB,QAAA;AACsB,QAAA;AAC7C,QAAA;AACA,QAAA;AACyB,MAAA;AAC7B,MAAA;AACT,IAAA;AAE0B,IAAA;AACgC,MAAA;AAC3D,IAAA;AAG4C,IAAA;AAMxC,IAAA;AAC0C,IAAA;AACtC,MAAA;AACR,IAAA;AAEe,IAAA;AACuC,MAAA;AACxD,EAAA;AACF;ArH6gFkE;AACA;AkH7kFnC;AAC7B,EAAA;AACG,EAAA;AACqB;AACqC,EAAA;AACV,EAAA;AACrD;AlH+kFkE;AACA;AsHzlFxC;AtH2lFwC;AACA;AuH/kF/B;AACjB,EAAA;AACV,EAAA;AACE,EAAA;AACA,EAAA;AACF,EAAA;AACP;AACwD;AAqBrD,EAAA;AAHQ,IAAA;AACD,IAAA;AACC,IAAA;AAEsB,IAAA;AACE,MAAA;AAC2B,MAAA;AACzB,MAAA;AACsB,QAAA;AACjC,QAAA;AACrB,MAAA;AACF,IAAA;AACF,EAAA;AA7B6C,mBAAA;AAEK,mBAAA;AACE,mBAAA;AAErB,mBAAA;AAEF,mBAAA;AAEP,EAAA;AACe,IAAA;AACrC,EAAA;AACuB,EAAA;AACU,IAAA;AACjC,EAAA;AAiBgD,EAAA;AACF,IAAA;AAC9C,EAAA;AAE8C,EAAA;AACL,IAAA;AAChB,IAAA;AACzB,EAAA;AAE2D,EAAA;AACpC,IAAA;AACT,MAAA;AACR,QAAA;AACF,MAAA;AAG+B,IAAA;AACM,IAAA;AACjC,MAAA;AACE,MAAA;AACW,MAAA;AACG,MAAA;AACtB,IAAA;AACqD,IAAA;AAEpB,IAAA;AACnC,EAAA;AAE8D,EAAA;AAC1B,IAAA;AAGZ,IAAA;AACgB,IAAA;AACpC,MAAA;AACM,MAAA;AACoB,MAAA;AAChB,MAAA;AACU,MAAA;AACtB,IAAA;AAEG,IAAA;AACsD,MAAA;AAC1B,IAAA;AACjC,EAAA;AAKE,EAAA;AAC6C,IAAA;AAGjB,oBAAA;AACe,IAAA;AAEZ,IAAA;AACG,IAAA;AACwB,IAAA;AAC9C,MAAA;AACL,QAAA;AAEsC,QAAA;AAEb,QAAA;AAEL,QAAA;AAEzB,MAAA;AACoD,MAAA;AAC7B,MAAA;AACzB,IAAA;AAE6D,IAAA;AACR,IAAA;AACb,IAAA;AAExB,MAAA;AACJ,QAAA;AACA,UAAA;AACE,UAAA;AACV,QAAA;AACD,MAAA;AACM,MAAA;AACF,IAAA;AACS,MAAA;AACJ,QAAA;AACA,UAAA;AACR,QAAA;AACD,MAAA;AACH,IAAA;AAEI,IAAA;AAC0C,MAAA;AAC1C,QAAA;AACkC,QAAA;AACS,QAAA;AACjC,QAAA;AACX,MAAA;AAG+C,MAAA;AACJ,QAAA;AACzB,UAAA;AACjB,QAAA;AACK,MAAA;AACiC,QAAA;AACxC,MAAA;AAEuB,MAAA;AAEgB,MAAA;AACvB,QAAA;AACkC,UAAA;AAC/C,QAAA;AACI,MAAA;AAEkB,QAAA;AACzB,MAAA;AACU,IAAA;AACa,MAAA;AAG4B,MAAA;AACnC,QAAA;AACsC,UAAA;AACnD,QAAA;AACI,MAAA;AACS,QAAA;AAC4C,UAAA;AACzD,QAAA;AAEK,QAAA;AACR,MAAA;AACF,IAAA;AACO,IAAA;AACT,EAAA;AAEkB,EAAA;AACW,IAAA;AAEA,IAAA;AACJ,IAAA;AACzB,EAAA;AAE4B,EAAA;AAC2B,IAAA;AACvD,EAAA;AAEoD,EAAA;AAClB,IAAA;AACgB,IAAA;AAClD,EAAA;AAEuE,EAAA;AACd,IAAA;AAElC,IAAA;AACH,MAAA;AAEN,IAAA;AACA,IAAA;AACkC,IAAA;AACT,MAAA;AACK,MAAA;AAChC,MAAA;AACe,MAAA;AAChB,MAAA;AACF,QAAA;AACH,QAAA;AACF,MAAA;AACD,IAAA;AAEI,IAAA;AACa,MAAA;AAER,IAAA;AACL,MAAA;AACM,MAAA;AACX,IAAA;AACoD,IAAA;AAEd,IAAA;AACG,MAAA;AACzC,IAAA;AACF,EAAA;AACF;AvHiiFkE;AACA;AwH5wFS;AACxD,EAAA;AAEqD,EAAA;AAChB,IAAA;AACO,IAAA;AAC/B,IAAA;AAC9B,EAAA;AAE8C,EAAA;AACtB,IAAA;AACxB,EAAA;AAE2D,EAAA;AACI,IAAA;AAC/D,EAAA;AAE+C,EAAA;AAC/B,IAAA;AACI,MAAA;AAClB,IAAA;AAE0B,IAAA;AACnB,MAAA;AACO,MAAA;AACd,IAAA;AACF,EAAA;AACF;AxHywFkE;AACA;AsGlyF7D;AACwD,EAAA;AAElC,EAAA;AACL,IAAA;AACnB,EAAA;AAEM,EAAA;AACT;AtGkyFkE;AACA;AyHrzF3C;AzHuzF2C;AACA;A0HtzFX;AAMgB;AACD,EAAA;AACtE;A1HmzFkE;AACA;A2H9zF9CF;A3Hg0F8C;AACA;A4HzzF9B;AAC2B,mBAAA;AAM1C,EAAA;AACe,IAAA;AACP,MAAA;AACU,MAAA;AACU,MAAA;AACb,MAAA;AACvB,MAAA;AACR,IAAA;AACH,EAAA;AACF;A5HszFkE;AACA;A6H/0FL;AAClB;AACnC,EAAA;AACE,EAAA;AACT;AAGuB;A7H+0F0C;AACA;A8HtzF9C;AAC+B,EAAA;AAClC,EAAA;AACH,IAAA;AACuB,IAAA;AACnC,EAAA;AACc,EAAA;AACP,IAAA;AACI,MAAA;AACF,QAAA;AACH,QAAA;AAC2D,QAAA;AACvC,UAAA;AACJ,UAAA;AACP,YAAA;AACA,YAAA;AACI,cAAA;AAES,YAAA;AACe,cAAA;AACxB,cAAA;AACF,gBAAA;AAC+B,gBAAA;AACpC,cAAA;AACF,YAAA;AAES,YAAA;AACwB,cAAA;AACe,cAAA;AAChD,YAAA;AACF,UAAA;AACD,QAAA;AACiB,QAAA;AACpB,MAAA;AAEG,IAAA;AACI,MAAA;AACF,QAAA;AACH,QAAA;AACsD,QAAA;AAClC,UAAA;AACJ,UAAA;AACP,YAAA;AACA,YAAA;AACA,YAAA;AACI,cAAA;AAEA,YAAA;AAC4B,cAAA;AACW,cAAA;AAChD,YAAA;AACF,UAAA;AACD,QAAA;AACH,MAAA;AAEG,IAAA;AAC8C,MAAA;AACrC,QAAA;AACR,UAAA;AACF,QAAA;AAEK,MAAA;AACF,QAAA;AACH,QAAA;AACA,QAAA;AACF,MAAA;AAEO,IAAA;AACwB,MAAA;AAC2B,MAAA;AAC5D,IAAA;AACF,EAAA;AACF;A9HizFkE;AACA;A2Hv4F7D;AAC8B,EAAA;AACR,EAAA;AACF,IAAA;AACtB,EAAA;AAGkD,EAAA;AACM,IAAA;AACU,IAAA;AAC5C,MAAA;AACsB,QAAA;AACP,yBAAA;AAClC,MAAA;AAEkD,MAAA;AACzC,QAAA;AAEU,MAAA;AACD,QAAA;AACH,QAAA;AACb,QAAA;AACF,MAAA;AAC0C,MAAA;AACnC,MAAA;AACT,IAAA;AACqD,IAAA;AAG5B,EAAA;AAEX,EAAA;AACd,IAAA;AACwB,uBAAA;AACD,uBAAA;AACsC,MAAA;AAC7D,IAAA;AACC,EAAA;AACD,IAAA;AACA,IAAA;AACA,IAAA;AACQ,IAAA;AACA,IAAA;AACA,IAAA;AACT,EAAA;AACH;A3Hk4FkE;AACA;AyHx7F7D;AACyD,EAAA;AAC9D;AAEsE;AAqBf,EAAA;AAAlC,IAAA;AACZ,IAAA;AACiB,uBAAA;AACD,uBAAA;AACb,MAAA;AACR,IAAA;AAE8B,IAAA;AAC5B,MAAA;AACA,IAAA;AACJ,EAAA;AA9B6C,mBAAA;AACF,mBAAA;AACI,mBAAA;AAEvC,EAAA;AAEkB,EAAA;AACjB,IAAA;AACsC,MAAA;AACf,MAAA;AACI,MAAA;AACA,MAAA;AACJ,MAAA;AAC9B,IAAA;AACF,EAAA;AAEoC,mBAAA;AAChB,mBAAA;AACD,mBAAA;AAc6B,EAAA;AACF,IAAA;AAC9C,EAAA;AAE8C,EAAA;AAC5B,IAAA;AACE,MAAA;AAEqB,IAAA;AACU,IAAA;AACnD,EAAA;AAE2D,EAAA;AACI,IAAA;AAC3C,MAAA;AACE,QAAA;AACa,MAAA;AAC1B,IAAA;AACyB,MAAA;AAChC,IAAA;AACF,EAAA;AAE8D,EAAA;AAC5C,IAAA;AACE,MAAA;AAEgB,IAAA;AACpC,EAAA;AAEyB,EAAA;AACP,IAAA;AAC6C,MAAA;AAEzC,IAAA;AAEY,IAAA;AAC0B,MAAA;AAC3B,MAAA;AAC/B,IAAA;AAE2C,IAAA;AAG1B,IAAA;AACa,MAAA;AAC1B,IAAA;AACN,EAAA;AAEoD,EAAA;AAClB,IAAA;AACgB,IAAA;AAClD,EAAA;AAEwD,mBAAA;AAC3C,oBAAA;AAC+C,MAAA;AAC1D,IAAA;AACF,EAAA;AAEwB,EAAA;AAC6B,IAAA;AACL,MAAA;AAC9C,IAAA;AACF,EAAA;AAMK,mBAAA;AACiC,IAAA;AACd,MAAA;AACG,MAAA;AACgC,MAAA;AACzD,IAAA;AAEgC,IAAA;AAC0B,MAAA;AAC3B,MAAA;AAC/B,IAAA;AAEuC,IAAA;AACQ,MAAA;AAC1B,yCAAA;AACjB,QAAA;AACQ,UAAA;AACI,UAAA;AACZ,QAAA;AACF,MAAA;AACF,IAAA;AAEgB,IAAA;AACiC,wCAAA;AACjD,IAAA;AAE4C,IAAA;AAC1B,IAAA;AACD,IAAA;AAEoC,IAAA;AACvD,EAAA;AAE8B,mBAAA;AACI,IAAA;AAEW,IAAA;AAEpC,IAAA;AACT,EAAA;AAE6C,EAAA;AAC3B,IAAA;AAC0C,MAAA;AACxB,IAAA;AACpC,EAAA;AACF;AzHw5FkE;AACA;A+HxjGyB;AACzB,mBAAA;AAElB,EAAA;AACD,IAAA;AAC7C,EAAA;AAEmD,EAAA;AAC7B,IAAA;AACtB,EAAA;AAEwB,EAAA;AACY,IAAA;AACpC,EAAA;AAEwB,EAAA;AAC0B,IAAA;AAClD,EAAA;AAEkE,EAAA;AACH,IAAA;AAC/D,EAAA;AAE+C,EAAA;AAC/B,IAAA;AACI,MAAA;AACE,QAAA;AAEuB,MAAA;AACpC,IAAA;AACW,MAAA;AACE,QAAA;AAEY,MAAA;AAChC,IAAA;AACF,EAAA;AACF;A/HkjGkE;AACA;AgI5lG9CA;AAIyD;AACjB,EAAA;AAEjC,EAAA;AACP,IAAA;AACjB,EAAA;AACe,EAAA;AACS,IAAA;AACxB,EAAA;AAEM,EAAA;AACT;AhIylGkE;AACA;AiIvmGlE;AAIEJ;AACAC;AACK;AA0ID;AAhCoD;AAgBU;AAC7B,EAAA;AACvC;AAMoE;AAClE,EAAA;AACA,EAAA;AACI;AACoD,EAAA;AAGlB,EAAA;AAOT,EAAA;AAEd,EAAA;AACH,IAAA;AACR,MAAA;AACF,IAAA;AACF,EAAA;AAE4B,EAAA;AAI9B;AAEmC;AjI49F+B;AACA;AkIjoG9B;AACe;AA6B/CiB;AAnBuB;AAC+B,EAAA;AACV,EAAA;AACe,EAAA;AACrC,EAAA;AAC1B;AAE6B;AAC+B,EAAA;AACZ,EAAA;AACiB,EAAA;AACrC,EAAA;AAC5B;AAEqC;AACJ,EAAA;AACI,EAAA;AACI,EAAA;AAErCA,EAAAA;AAAC,IAAA;AAAA,IAAA;AACgB,MAAA;AACN,MAAA;AACK,MAAA;AAEd,MAAA;AAAwB,wBAAA;AACE,wBAAA;AAAA,MAAA;AAAA,IAAA;AAC5B,EAAA;AAEJ;AAEiC;AAEoC;AACxD,EAAA;AACZ;AAEoC;AAKnB;AACV,EAAA;AACK,IAAA;AACoD,MAAA;AACxD,IAAA;AACa,EAAA;AACW,EAAA;AACR,EAAA;AAEW,EAAA;AAKtB,oBAAA;AAGA,oBAAA;AAKV,EAAA;AAEH;AAEoC;AAKnB;AACV,EAAA;AACK,IAAA;AACkD,MAAA;AACtD,IAAA;AACa,EAAA;AACe,EAAA;AACV,EAAA;AAEI,EAAA;AAM9B;AAEsC;AAEvB;AACR,EAAA;AACE,EAAA;AACF,EAAA;AACR;AAEsB;AACpB,EAAA;AACA,EAAA;AACF;AlI0lGkE;AACA;AmI1sGJ;AnI4sGI;AACA;AoI7sGJ;AACZ;AAsB9C;AAX+B;AAC2B,EAAA;AACd,EAAA;AACU,EAAA;AACxB,EAAA;AAClC;AAE+B;AACkB,EAAA;AAChB,EAAA;AAEX,EAAA;AACM,oBAAA;AACH,oBAAA;AACD,oBAAA;AACpB,EAAA;AAEJ;AAE2B;AAEuC;AACrD,EAAA;AACZ;AAE8B;AAKb;AACV,EAAA;AACK,IAAA;AACqD,MAAA;AACzD,IAAA;AACa,EAAA;AAEc,EAAA;AAMnC;AAEkC;AAEmB;AACzC,EAAA;AACZ;AAKiB;AAEgB,EAAA;AACE,oBAAA;AAAE,IAAA;AAAgC,oBAAA;AAClE,EAAA;AAEH;AAE+B;AAKd;AACV,EAAA;AACuD,IAAA;AACzC,EAAA;AAEU,EAAA;AAM/B;AAE8B;AAEf;AACR,EAAA;AACIK,EAAAA;AACJ,EAAA;AACR;AAEkD;ApIkqGgB;AACA;AqItwGjC;AAc7B;AAJ+D;AACrB,EAAA;AAIvC,EAAA;AAAgD,IAAA;AACX,IAAA;AACxC,EAAA;AAEJ;AAEqB;AAEwC;AAChD,EAAA;AACZ;AAEwB;AAEsC;AAClD,EAAA;AACZ;AAEyB;AAE2C;AACxD,EAAA;AACZ;AAE4B;ArIsvGqC;AACA;AsI9xG3C;AAKnB;AAH0B;AACG,EAAA;AAE7BjB,EAAAA;AAAsB,IAAA;AAArB,IAAA;AACYkB,MAAAA;AACT,QAAA;AAC6B,QAAA;AAC/B,MAAA;AACU,MAAA;AAAA,IAAA;AACZ,EAAA;AAEJ;AAEwD;AAEzCC;AtI+xGmD;AACA;AmIvyG9D;AAF+B;AAG7B,EAAA;AAAwB,oBAAA;AACC,oBAAA;AACX,oBAAA;AACM,oBAAA;AACtB,EAAA;AAEJ;AAE+B;AAEU;AACiB,EAAA;AAC7B,EAAA;AAC7B;AAEiE;AACpD,EAAA;AACZ;AAEkC;AAEwB;AAC9C,EAAA;AACZ;AAQgB;AACwC,EAAA;AAEpB,EAAA;AACb,IAAA;AAAjB,IAAA;AACa,MAAA;AACP,QAAA;AAC8C,QAAA;AACnD,MAAA;AAAA,IAAA;AAEJ,EAAA;AAEH;AAEqC;AAEtB;AACR,EAAA;AACE,EAAA;AACC,EAAA;AACX;AAEsB;AACpB,EAAA;AACAA,EAAAA;AACF;AnI0xGkE;AACA;AuI/1G9B;AACK;AvIi2GyB;AACA;AwIn2Gf;AACrB;AxIq2GoC;AACA;AyIv2GJ;AAE3B;AzIw2G+B;AACA;A0Ip2G5D;AAPkC;AAEpCnB,EAAAA;AAAC,IAAA;AAAA,IAAA;AACO,MAAA;AACE,MAAA;AACH,MAAA;AAEY,MAAA;AAA+B,IAAA;AAClD,EAAA;AAEJ;AAE6B;A1I62GqC;AACA;AyI32G9DY;AAFuB;AAGrB,EAAA;AAAyB,oBAAA;AACT,oBAAA;AAClB,EAAA;AAEJ;AAEuB;AAEmC;AAC7C,EAAA;AACZ;AAE0B;AAEuC;AAC1D,EAAA;AACK,EAAA;AACA,EAAA;AACZ;AAKqBR;AACJ,EAAA;AACR,IAAA;AACK,MAAA;AACiD,QAAA;AACrD,MAAA;AACa,IAAA;AAEG,IAAA;AAEzB,EAAA;AACF;AAE4B;AAEC;AACmB,EAAA;AACiB,EAAA;AACxD,EAAA;AACT;AAEiC;AACI,EAAA;AACI,EAAA;AAGnC,EAAA;AACE,oBAAA;AAGA,oBAAA;AAEJ,EAAA;AAEJ;AAE6B;AAE8B;AAChD,EAAA;AACE,EAAA;AACZ;AAKiB;AACV,EAAA;AAC0D,IAAA;AAC5C,EAAA;AAEa,EAAA;AAMlC;AAE0B;AAEkC;AAClD,EAAA;AACE,EAAA;AACZ;AAKiB;AACV,EAAA;AACuD,IAAA;AACzC,EAAA;AAEQ,EAAA;AAM7B;AAE4B;AAEb;AACR,EAAA;AACC,EAAA;AACC,EAAA;AACF,EAAA;AACE,EAAA;AACV;AAE8C;AzIg0GoB;AACA;A2Ip8GJ;AASxD;AAH0B;AAG1B,EAAA;AACE,oBAAA;AAAqB,sBAAA;AACC,sBAAA;AACxB,IAAA;AAC0B,oBAAA;AAC5B,EAAA;AAEJ;AAE4B;AAEwB;AACvC,EAAA;AACZ;AAE+C;AACnC,EAAA;AACZ;AAIyBA;AACR,EAAA;AAGV,IAAA;AAGN,EAAA;AACF;AAEgC;AAEM;AACoB,EAAA;AAC7B,EAAA;AAC7B;AAEqD;AACxC,EAAA;AACZ;AAU0B;AACuC,EAAA;AAG9B,EAAA;AAInC;AAEkC;AAE0B;AAChD,EAAA;AACZ;AAEkE;AACtD,EAAA;AACZ;AAMkE;AACtC,EAAA;AACvB;AAEFJ,EAAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AACO,MAAA;AACC,MAAA;AAEQ,MAAA;AAAqD,IAAA;AACvE,EAAA;AAEJ;AAE2C;AACiB,EAAA;AAEvD,EAAA;AAE0C,IAAA;AACG,IAAA;AAE9C,EAAA;AAEJ;AAEuC;AAEvB;AACR,EAAA;AACE,EAAA;AACA,EAAA;AACC,EAAA;AACI,EAAA;AACD,EAAA;AACd;AAEmD;A3Iq5Ge;AACA;A4I9gHJ;A5IghHI;AACA;A6IjhH9B;AACT;AAuBrB;AAZqB;AAC0B,EAAA;AACL,EAAA;AACe,EAAA;AACrC,EAAA;AAC1B;AAEgC;AACC,EAAA;AACR,EAAA;AAEF,EAAA;AAIvB;AAE4B;AAEoC;AACnD,EAAA;AACZ;AAE+B;AAKd;AACV,EAAA;AAC0D,IAAA;AAC5C,EAAA;AACW,EAAA;AACR,EAAA;AAEW,EAAA;AAMnC;AAE+B;AAEhB;AACR,EAAA;AACA,EAAA;AACR;AAE4CmB;A7Iq/GsB;AACA;A4I1iH9D;AAF0B;AAGxB,EAAA;AAAe,oBAAA;AACK,oBAAA;AACN,oBAAA;AAChB,EAAA;AAEJ;AAE0B;AAEkC;AAC/C,EAAA;AACZ;AAE6B;AAEwB;AACzC,EAAA;AACZ;AAK0Bf;AACU,EAAA;AAEA,IAAA;AACX,MAAA;AAAjB,MAAA;AACa,QAAA;AACP,UAAA;AACmC,UAAA;AACxC,QAAA;AAAA,MAAA;AAEJ,IAAA;AAEJ,EAAA;AACF;AAEiC;AAEjB;AACR,EAAA;AACG,EAAA;AACX;AAEiD;A5IiiHiB;AACA;A8IzlH9B;AAU9B;AAHyB;AAGzB,EAAA;AAAmB,oBAAA;AAGjB,oBAAA;AAAoB,sBAAA;AACF,sBAAA;AACpB,IAAA;AACF,EAAA;AAEJ;AAE2B;AAEmC;AACjD,EAAA;AACZ;AAE8B;AAEiC;AACnD,EAAA;AACZ;AAE+B;AAEe;AAClC,EAAA;AACZ;AAEgC;AAENA;AACT,EAAA;AACR,IAAA;AACK,MAAA;AACgD,QAAA;AACpD,MAAA;AACa,IAAA;AAEQ,IAAA;AAM9B,EAAA;AACF;AAEiC;AAERA;AACP,EAAA;AACR,IAAA;AACqD,MAAA;AACvC,IAAA;AAEM,IAAA;AAM5B,EAAA;AACF;AAE+B;AAEf;AACR,EAAA;AACC,EAAA;AACC,EAAA;AACA,EAAA;AACF,EAAA;AACR;AAEkD;A9I0jHgB;AACA;AwItnH1D;AAJqC;AAGvC,EAAA;AACiB,oBAAA;AACC,oBAAA;AAEd,oBAAA;AAAsB,sBAAA;AACZ,sBAAA;AACZ,IAAA;AAEJ,EAAA;AAEJ;AAK4D;AAC/C,EAAA;AACZ;AAEkBA;AACc,EAAA;AAGzB,IAAA;AAGN,EAAA;AACF;AAEyB;AAEqC;AACjD,EAAA;AACZ;AAE4B;AAEoB;AACpC,EAAA;AACZ;AAEkC;AAEP;AASM;AAE9BJ,EAAAA;AAAiB,IAAA;AAAhB,IAAA;AACa,MAAA;AAC8B,QAAA;AACE,QAAA;AACQ,QAAA;AACN,QAAA;AAC9C,MAAA;AACI,MAAA;AAAA,IAAA;AACN,EAAA;AAEJ;AAE6B;AAEuB;AACzC,EAAA;AACE,EAAA;AACZ;AAKiB;AACV,EAAA;AACK,IAAA;AACkD,MAAA;AACtD,IAAA;AACa,EAAA;AAEc,EAAA;AAMnC;AAEkC;AAEnB;AACR,EAAA;AACI,EAAA;AACA,EAAA;AACM,EAAA;AACA,EAAA;AAClB;AAE4C;AxIolHsB;AACA;AuI5rH9DY;AAFiD;AAG/C,EAAA;AAAuB,oBAAA;AAErB,oBAAA;AAEJ,EAAA;AAEJ;AAE6B;AAIC;AAGxB,EAAA;AAGN;AAEiC;AAKf;AAGZ,EAAA;AAKL;AAEmC;AAE8B;AACrD,EAAA;AACZ;AAEkC;AAEuB;AAC/C,EAAA;AACE,EAAA;AACZ;AASyB;AAClB,EAAA;AACK,IAAA;AACS,MAAA;AACR,QAAA;AACoD,UAAA;AACrD,QAAA;AACG,QAAA;AACkD,UAAA;AACrD,QAAA;AACF,MAAA;AACF,IAAA;AACa,EAAA;AAC6B,EAAA;AAG/CZ,EAAAA;AAAC,IAAA;AAAA,IAAA;AACM,MAAA;AACL,MAAA;AACY,MAAA;AACR,MAAA;AACJ,MAAA;AAGEO,MAAAA;AACEP,wBAAAA;AAAC,UAAA;AAAA,UAAA;AACa,YAAA;AACF,YAAA;AAAA,UAAA;AACZ,QAAA;AACAA,wBAAAA;AAAC,UAAA;AAAA,UAAA;AACa,YAAA;AACF,YAAA;AAAA,UAAA;AACZ,QAAA;AACF,MAAA;AAAA,IAAA;AAEJ,EAAA;AAEH;AAEkC;AAEgC;AACtD,EAAA;AACC,EAAA;AACb;AAEmC;AAEpB;AACR,EAAA;AACG,EAAA;AACA,EAAA;AACX;AAE6CmB;AvI4pHqB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/assistant-ui/assistant-ui/packages/react/dist/index.js","sourcesContent":[null,"import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtimes/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","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { AssistantRuntime } from \"../../runtimes\";\nimport { AssistantContext } from \"../react/AssistantContext\";\nimport { makeAssistantModelConfigStore } from \"../stores/AssistantModelConfig\";\nimport { makeAssistantToolUIsStore } from \"../stores/AssistantToolUIs\";\nimport { ThreadProvider } from \"./ThreadProvider\";\nimport { makeAssistantActionsStore } from \"../stores/AssistantActions\";\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 const useToolUIs = makeAssistantToolUIsStore();\n const useAssistantActions = makeAssistantActionsStore(runtimeRef);\n\n return { useModelConfig, useToolUIs, useAssistantActions };\n });\n\n const getModelConfig = context.useModelConfig();\n useEffect(() => {\n return runtime.registerModelConfigProvider(getModelConfig);\n }, [runtime, getModelConfig]);\n\n return (\n <AssistantContext.Provider value={context}>\n <ThreadProvider provider={runtime}>{children}</ThreadProvider>\n </AssistantContext.Provider>\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { AssistantModelConfigState } from \"../stores/AssistantModelConfig\";\nimport type { AssistantToolUIsState } from \"../stores/AssistantToolUIs\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { AssistantActionsState } from \"../stores/AssistantActions\";\n\nexport type AssistantContextValue = {\n useModelConfig: ReadonlyStore<AssistantModelConfigState>;\n useToolUIs: ReadonlyStore<AssistantToolUIsState>;\n useAssistantActions: ReadonlyStore<AssistantActionsState>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport function useAssistantContext(): AssistantContextValue;\nexport function useAssistantContext(options: {\n optional: true;\n}): AssistantContextValue | null;\nexport function useAssistantContext(options?: { optional: true }) {\n const context = useContext(AssistantContext);\n if (!options?.optional && !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 \"../../types/ModelConfigTypes\";\nimport { ProxyConfigProvider } from \"../../utils/ProxyConfigProvider\";\n\nexport type AssistantModelConfigState = Readonly<\n ModelConfigProvider & {\n registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;\n }\n>;\n\nexport const makeAssistantModelConfigStore = () =>\n create<AssistantModelConfigState>(() => {\n const proxy = new ProxyConfigProvider();\n\n return Object.freeze({\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 {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"../types/ModelConfigTypes\";\n\nexport class ProxyConfigProvider implements ModelConfigProvider {\n private _providers = new Set<ModelConfigProvider>();\n\n getModelConfig() {\n return mergeModelConfigs(this._providers);\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._providers.add(provider);\n return () => {\n this._providers.delete(provider);\n };\n }\n}\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ToolCallContentPartComponent } from \"../../types/ContentPartComponentTypes\";\n\nexport type AssistantToolUIsState = Readonly<{\n getToolUI: (toolName: string) => ToolCallContentPartComponent | null;\n setToolUI: (\n toolName: string,\n render: ToolCallContentPartComponent,\n ) => () => void;\n}>;\n\nexport const makeAssistantToolUIsStore = () =>\n create<AssistantToolUIsState>((set) => {\n const renderers = new Map<string, ToolCallContentPartComponent[]>();\n\n return Object.freeze({\n getToolUI: (name) => {\n const arr = renderers.get(name);\n const last = arr?.at(-1);\n if (last) return last;\n return null;\n },\n setToolUI: (name, render) => {\n let arr = renderers.get(name);\n if (!arr) {\n arr = [];\n renderers.set(name, arr);\n }\n arr.push(render);\n set({}); // notify the store listeners\n\n return () => {\n const index = arr.indexOf(render);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n if (index === arr.length) {\n set({}); // notify the store listeners\n }\n };\n },\n }) satisfies AssistantToolUIsState;\n });\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useCallback, useInsertionEffect, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtimes/core/ReactThreadRuntime\";\nimport type { ThreadContextValue } from \"../react/ThreadContext\";\nimport { ThreadContext } from \"../react/ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { ThreadState, makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\nimport { makeThreadActionStore } from \"../stores/ThreadActions\";\nimport { StoreApi } from \"zustand\";\nimport {\n ThreadMessagesState,\n makeThreadMessagesStore,\n} from \"../stores/ThreadMessages\";\nimport { ThreadRuntimeWithSubscribe } from \"../../runtimes/core/AssistantRuntime\";\nimport {\n makeThreadRuntimeStore,\n ThreadRuntimeStore,\n} from \"../stores/ThreadRuntime\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\n\ntype ThreadProviderProps = {\n provider: ThreadRuntimeWithSubscribe;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n provider,\n}) => {\n const [context] = useState<ThreadContextValue>(() => {\n const useThreadRuntime = makeThreadRuntimeStore(provider.thread);\n const useThread = makeThreadStore(useThreadRuntime);\n const useThreadMessages = makeThreadMessagesStore(useThreadRuntime);\n const useThreadActions = makeThreadActionStore(useThreadRuntime);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThreadMessages, useThreadActions);\n\n return {\n useThread,\n useThreadRuntime,\n useThreadMessages,\n useThreadActions,\n useComposer,\n useViewport,\n };\n });\n\n const threadRef = useManagedRef(\n useCallback(\n (thread: ReactThreadRuntime) => {\n const onThreadUpdate = () => {\n const threadState = context.useThread.getState();\n if (\n thread.isRunning !== threadState.isRunning ||\n thread.isDisabled !== threadState.isDisabled\n ) {\n (context.useThread as unknown as StoreApi<ThreadState>).setState(\n Object.freeze({\n isRunning: thread.isRunning,\n isDisabled: thread.isDisabled,\n }) satisfies ThreadState,\n true,\n );\n }\n\n if (thread.messages !== context.useThreadMessages.getState()) {\n (\n context.useThreadMessages as unknown as StoreApi<ThreadMessagesState>\n ).setState(thread.messages, true);\n }\n };\n\n onThreadUpdate();\n return thread.subscribe(onThreadUpdate);\n },\n [context],\n ),\n );\n\n useInsertionEffect(() => {\n const unsubscribe = provider.subscribe(() => {\n (\n context.useThreadRuntime as unknown as StoreApi<ThreadRuntimeStore>\n ).setState(provider.thread, true);\n threadRef(provider.thread);\n });\n threadRef(provider.thread);\n return () => {\n unsubscribe();\n threadRef(null);\n };\n }, [provider, context]);\n\n // subscribe to thread updates\n const Synchronizer = context.useThreadRuntime(\n (t) => (t as ReactThreadRuntime).unstable_synchronizer,\n );\n\n return (\n <ThreadContext.Provider value={context}>\n {Synchronizer && <Synchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ComposerState } from \"../stores/Composer\";\nimport type { ThreadState } from \"../stores/Thread\";\nimport type { ThreadViewportState } from \"../stores/ThreadViewport\";\nimport { ThreadActionsState } from \"../stores/ThreadActions\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadMessagesState } from \"../stores/ThreadMessages\";\nimport { ThreadRuntimeStore } from \"../stores/ThreadRuntime\";\n\nexport type ThreadContextValue = {\n useThread: ReadonlyStore<ThreadState>;\n useThreadRuntime: ReadonlyStore<ThreadRuntimeStore>;\n useThreadMessages: ReadonlyStore<ThreadMessagesState>;\n useThreadActions: ReadonlyStore<ThreadActionsState>;\n useComposer: ReadonlyStore<ComposerState>;\n useViewport: ReadonlyStore<ThreadViewportState>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport function useThreadContext(): ThreadContextValue;\nexport function useThreadContext(options: {\n optional: true;\n}): ThreadContextValue | null;\nexport function useThreadContext(options?: { optional: true }) {\n const context = useContext(ThreadContext);\n if (!options?.optional && !context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n}\n","import { create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { Unsubscribe } from \"../../types/Unsubscribe\";\nimport { ThreadContextValue } from \"../react\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n canCancel: boolean;\n isEditing: true;\n\n send: () => void;\n cancel: () => void;\n focus: () => void;\n onFocus: (listener: () => void) => Unsubscribe;\n }>;\n\nexport const makeComposerStore = (\n useThreadMessages: ThreadContextValue[\"useThreadMessages\"],\n useThreadActions: ThreadContextValue[\"useThreadActions\"],\n): ReadonlyStore<ComposerState> => {\n const focusListeners = new Set<() => void>();\n return create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n get canCancel() {\n return useThreadActions.getState().capabilities.cancel;\n },\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThreadActions.getState().append({\n parentId: useThreadMessages.getState().at(-1)?.id ?? null,\n role: \"user\",\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n useThreadActions.getState().cancelRun();\n },\n focus: () => {\n for (const listener of focusListeners) {\n listener();\n }\n },\n onFocus: (listener) => {\n focusListeners.add(listener);\n return () => {\n focusListeners.delete(listener);\n };\n },\n };\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 { create } from \"zustand\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadRuntimeStore } from \"./ThreadRuntime\";\n\nexport type ThreadState = Readonly<{\n isRunning: boolean;\n isDisabled: boolean;\n}>;\n\nexport const makeThreadStore = (\n runtimeRef: ReadonlyStore<ThreadRuntimeStore>,\n) => {\n return create<ThreadState>(() => ({\n isDisabled: runtimeRef.getState().isDisabled,\n isRunning: runtimeRef.getState().isRunning,\n }));\n};\n","\"use client\";\nimport { create } from \"zustand\";\nimport type { Unsubscribe } from \"../../types/Unsubscribe\";\n\nexport type ThreadViewportState = Readonly<{\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","import { create } from \"zustand\";\nimport type { AppendMessage } from \"../../types/AssistantTypes\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadRuntimeStore } from \"./ThreadRuntime\";\n\nexport type AddToolResultOptions = {\n messageId: string;\n toolCallId: string;\n result: any;\n};\n\nexport type RuntimeCapabilities = {\n switchToBranch: boolean;\n edit: boolean;\n reload: boolean;\n cancel: boolean;\n copy: boolean;\n};\n\nexport type ThreadActionsState = Readonly<{\n capabilities: Readonly<RuntimeCapabilities>;\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 addToolResult: (options: AddToolResultOptions) => void;\n}>;\n\nexport const makeThreadActionStore = (\n runtimeStore: ReadonlyStore<ThreadRuntimeStore>,\n) => {\n return create<ThreadActionsState>(() =>\n Object.freeze({\n get capabilities() {\n return runtimeStore.getState().capabilities;\n },\n getBranches: (messageId) =>\n runtimeStore.getState().getBranches(messageId),\n switchToBranch: (branchId) =>\n runtimeStore.getState().switchToBranch(branchId),\n startRun: (parentId) => runtimeStore.getState().startRun(parentId),\n append: (message) => runtimeStore.getState().append(message),\n cancelRun: () => runtimeStore.getState().cancelRun(),\n addToolResult: (options) =>\n runtimeStore.getState().addToolResult(options),\n }),\n );\n};\n","import { create } from \"zustand\";\nimport type { ThreadMessage } from \"../../types/AssistantTypes\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { ThreadRuntimeStore } from \"./ThreadRuntime\";\n\nexport type ThreadMessagesState = readonly ThreadMessage[];\n\nexport const makeThreadMessagesStore = (\n runtimeRef: ReadonlyStore<ThreadRuntimeStore>,\n) => {\n return create<ThreadMessagesState>(() => runtimeRef.getState().messages);\n};\n","import { create } from \"zustand\";\nimport { ThreadRuntime } from \"../../runtimes\";\n\nexport type ThreadRuntimeStore = ThreadRuntime;\n\nexport const makeThreadRuntimeStore = (runtime: ThreadRuntime) => {\n return create<ThreadRuntimeStore>(() => runtime);\n};\n","import { useCallback, useRef } from \"react\";\n\nexport const useManagedRef = <TNode>(\n callback: (node: TNode) => (() => void) | void,\n) => {\n const cleanupRef = useRef<(() => void) | void>();\n\n const ref = useCallback(\n (el: TNode | null) => {\n // Call the previous cleanup function\n if (cleanupRef.current) {\n cleanupRef.current();\n }\n\n // Call the new callback and store its cleanup function\n if (el) {\n cleanupRef.current = callback(el);\n }\n },\n [callback],\n );\n\n return ref;\n};\n","import { create } from \"zustand\";\nimport { AssistantRuntime } from \"../../runtimes\";\nimport { MutableRefObject } from \"react\";\n\nexport type AssistantActionsState = Readonly<{\n switchToThread: (threadId: string | null) => void;\n getRuntime: () => AssistantRuntime;\n}>;\n\nexport const makeAssistantActionsStore = (\n runtimeRef: MutableRefObject<AssistantRuntime>,\n) =>\n create<AssistantActionsState>(() =>\n Object.freeze({\n switchToThread: () => runtimeRef.current.switchToThread(null),\n getRuntime: () => runtimeRef.current,\n }),\n );\n","import { useMemo } from \"react\";\nimport { useMessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"../stores/Composer\";\nimport type { EditComposerState } from \"../stores/EditComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\n\nexport type ComposerContextValue = {\n useComposer: ReadonlyStore<EditComposerState | ComposerState>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useEditComposer } = useMessageContext({ optional: true }) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as ReadonlyStore<\n EditComposerState | ComposerState\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { MessageState } from \"../stores/Message\";\nimport type { EditComposerState } from \"../stores/EditComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\nimport { MessageUtilsState } from \"../stores/MessageUtils\";\n\nexport type MessageContextValue = {\n useMessage: ReadonlyStore<MessageState>;\n useMessageUtils: ReadonlyStore<MessageUtilsState>;\n useEditComposer: ReadonlyStore<EditComposerState>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport function useMessageContext(): MessageContextValue;\nexport function useMessageContext(options: {\n optional: true;\n}): MessageContextValue | null;\nexport function useMessageContext(options?: { optional: true }) {\n const context = useContext(MessageContext);\n if (!options?.optional && !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\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\n\nexport type ContentPartContextValue = {\n useContentPart: ReadonlyStore<ContentPartState>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport function useContentPartContext(): ContentPartContextValue;\nexport function useContentPartContext(options: {\n optional: true;\n}): ContentPartContextValue | null;\nexport function useContentPartContext(options?: { optional: true }) {\n const context = useContext(ContentPartContext);\n if (!options?.optional && !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 { useCallback } from \"react\";\nimport { ThreadContextValue, useThreadContext } from \"../context\";\nimport { AppendMessage } from \"../types\";\n\ntype CreateAppendMessage =\n | string\n | {\n parentId?: string | null | undefined;\n role?: AppendMessage[\"role\"] | undefined;\n content: AppendMessage[\"content\"];\n };\n\nconst toAppendMessage = (\n useThreadMessages: ThreadContextValue[\"useThreadMessages\"],\n message: CreateAppendMessage,\n): AppendMessage => {\n if (typeof message === \"string\") {\n return {\n parentId: useThreadMessages.getState().at(-1)?.id ?? null,\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n };\n }\n\n return {\n parentId:\n message.parentId ?? useThreadMessages.getState().at(-1)?.id ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n } as AppendMessage;\n};\n\nexport const useAppendMessage = () => {\n const { useThreadMessages, useThreadActions, useViewport, useComposer } =\n useThreadContext();\n\n const append = useCallback(\n (message: CreateAppendMessage) => {\n const appendMessage = toAppendMessage(useThreadMessages, message);\n useThreadActions.getState().append(appendMessage);\n\n useViewport.getState().scrollToBottom();\n useComposer.getState().focus();\n },\n [useThreadMessages, useThreadActions, useViewport, useComposer],\n );\n\n return append;\n};\n","import { useCallback } from \"react\";\nimport { useAssistantContext, useThreadContext } from \"../context\";\n\nexport const useSwitchToNewThread = () => {\n const { useAssistantActions } = useAssistantContext();\n const { useComposer } = useThreadContext();\n\n const switchToNewThread = useCallback(() => {\n useAssistantActions.getState().switchToThread(null);\n useComposer.getState().focus();\n }, [useAssistantActions, useComposer]);\n\n return switchToNewThread;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/react/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../types/ContentPartComponentTypes\";\nimport type { Tool } from \"../types/ModelConfigTypes\";\n\nexport type AssistantToolProps<\n TArgs extends Record<string, unknown>,\n TResult,\n> = Tool<TArgs, TResult> & {\n toolName: string;\n render?: ToolCallContentPartComponent<TArgs, TResult> | undefined;\n};\n\nexport const useAssistantTool = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const { useModelConfig, useToolUIs } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n const setToolUI = useToolUIs((s) => s.setToolUI);\n useEffect(() => {\n const { toolName, render, ...rest } = tool;\n const config = {\n tools: {\n [tool.toolName]: rest,\n },\n };\n const unsub1 = registerModelConfigProvider({\n getModelConfig: () => config,\n });\n const unsub2 = render ? setToolUI(toolName, render) : undefined;\n return () => {\n unsub1();\n unsub2?.();\n };\n }, [registerModelConfigProvider, setToolUI, tool]);\n};\n","\"use client\";\nimport { type AssistantToolProps, useAssistantTool } from \"./useAssistantTool\";\n\nexport const makeAssistantTool = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const Tool = () => {\n useAssistantTool(tool);\n return null;\n };\n return Tool;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/react/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../types/ContentPartComponentTypes\";\n\nexport type AssistantToolUIProps<\n TArgs extends Record<string, unknown>,\n TResult,\n> = {\n toolName: string;\n render: ToolCallContentPartComponent<TArgs, TResult>;\n};\n\nexport const useAssistantToolUI = (\n tool: AssistantToolUIProps<any, any> | null,\n) => {\n const { useToolUIs } = useAssistantContext();\n const setToolUI = useToolUIs((s) => s.setToolUI);\n useEffect(() => {\n if (!tool) return;\n const { toolName, render } = tool;\n return setToolUI(toolName, render);\n }, [setToolUI, tool]);\n};\n","\"use client\";\nimport {\n type AssistantToolUIProps,\n useAssistantToolUI,\n} from \"./useAssistantToolUI\";\n\nexport const makeAssistantToolUI = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolUIProps<TArgs, TResult>,\n) => {\n const ToolUI = () => {\n useAssistantToolUI(tool);\n return null;\n };\n return ToolUI;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/react/AssistantContext\";\n\nexport const useAssistantInstructions = (instruction: string) => {\n const { useModelConfig } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n useEffect(() => {\n const config = {\n system: instruction,\n };\n return registerModelConfigProvider({ getModelConfig: () => config });\n }, [registerModelConfigProvider, instruction]);\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../../utils/getMessageText\";\n\nexport type UseActionBarCopyProps = {\n copiedDuration?: number | undefined;\n};\n\nexport const useActionBarCopy = ({\n copiedDuration = 3000,\n}: UseActionBarCopyProps = {}) => {\n const { useMessage, useMessageUtils, useEditComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useEditComposer],\n (m, c) => {\n return (\n !c.isEditing &&\n m.message.content.some((c) => c.type === \"text\" && c.text.length > 0)\n );\n },\n );\n\n const callback = useCallback(() => {\n const { message } = useMessage.getState();\n const { setIsCopied } = useMessageUtils.getState();\n const { isEditing, value: composerValue } = useEditComposer.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n }, [useMessage, useMessageUtils, useEditComposer, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","import { useMemo } from \"react\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\nimport { ReadonlyStore } from \"../../context/ReadonlyStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: ReadonlyStore<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // eslint-disable-next-line react-hooks/exhaustive-deps -- shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport type { Unsubscribe } from \"../../types/Unsubscribe\";\nimport { ReadonlyStore } from \"../../context/ReadonlyStore\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(stores: {\n [K in keyof T]: ReadonlyStore<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","import type { TextContentPart, ThreadMessage } from \"../types/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/react/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useActionBarEdit = () => {\n const { useMessage, useEditComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useEditComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useEditComposer.getState();\n edit();\n }, [useEditComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useActionBarReload = () => {\n const { useThread, useThreadActions, useComposer, useViewport } =\n useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || t.isDisabled || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThreadActions.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n useComposer.getState().focus();\n }, [useThreadActions, useComposer, useViewport, useMessage]);\n\n if (disabled) return null;\n return callback;\n};\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\n\nexport const useBranchPickerCount = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return branchCount;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useBranchPickerNext = () => {\n const { useThreadActions } = useThreadContext();\n const { useMessage, useEditComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useEditComposer],\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 useThreadActions\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useThreadActions, useMessage]);\n\n if (disabled) return null;\n return callback;\n};\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\n\nexport const useBranchPickerNumber = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return branchIdx + 1;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useBranchPickerPrevious = () => {\n const { useThreadActions } = useThreadContext();\n const { useMessage, useEditComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useEditComposer],\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 useThreadActions\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useThreadActions, useMessage]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useComposerContext } from \"../../context\";\n\nexport const useComposerCancel = () => {\n const { useComposer } = useComposerContext();\n\n const disabled = useComposer((c) => !c.canCancel);\n\n const callback = useCallback(() => {\n const { cancel } = useComposer.getState();\n cancel();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","\"use client\";\nimport { useComposerContext } from \"../../context/react/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\nexport type UseComposerIfProps = RequireAtLeastOne<ComposerIfFilters>;\n\nexport const useComposerIf = (props: UseComposerIfProps) => {\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","import { useCallback } from \"react\";\nimport { useComposerContext, useThreadContext } from \"../../context\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const useComposerSend = () => {\n const {\n useThread,\n useViewport,\n useComposer: useNewComposer,\n } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const disabled = useCombinedStore(\n [useThread, useComposer],\n (t, c) =>\n t.isDisabled || t.isRunning || !c.isEditing || c.value.length === 0,\n );\n\n const callback = useCallback(() => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n useNewComposer.getState().focus();\n }, [useNewComposer, useComposer, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useContentPartContext } from \"../../context/react/ContentPartContext\";\nimport { UIContentPartState } from \"../../context/stores/ContentPart\";\n\nexport const useContentPartDisplay = () => {\n const { useContentPart } = useContentPartContext();\n\n const display = useContentPart((c) => {\n if (c.part.type !== \"ui\")\n throw new Error(\n \"This component can only be used inside ui content parts.\",\n );\n\n return c as UIContentPartState;\n });\n\n return display;\n};\n","import { useContentPartContext } from \"../../context/react/ContentPartContext\";\nimport { ImageContentPartState } from \"../../context/stores/ContentPart\";\n\nexport const useContentPartImage = () => {\n const { useContentPart } = useContentPartContext();\n\n const image = useContentPart((c) => {\n if (c.part.type !== \"image\")\n throw new Error(\n \"ContentPartImage can only be used inside image content parts.\",\n );\n\n return c as ImageContentPartState;\n });\n\n return image;\n};\n","import { useContentPartContext } from \"../../context/react/ContentPartContext\";\nimport { TextContentPartState } from \"../../context/stores/ContentPart\";\n\nexport const useContentPartText = () => {\n const { useContentPart } = useContentPartContext();\n\n const text = useContentPart((c) => {\n if (c.part.type !== \"text\")\n throw new Error(\n \"ContentPartText can only be used inside text content parts.\",\n );\n\n return c as TextContentPartState;\n });\n\n return text;\n};\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n system: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\nexport type UseMessageIfProps = RequireAtLeastOne<MessageIfFilters>;\n\nexport const useMessageIf = (props: UseMessageIfProps) => {\n const { useMessage, useMessageUtils } = useMessageContext();\n\n return useCombinedStore(\n [useMessage, useMessageUtils],\n ({ 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 if (props.system && message.role !== \"system\") 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};\n","\"use client\";\n\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n disabled: boolean | undefined;\n};\n\nexport type UseThreadIfProps = RequireAtLeastOne<ThreadIfFilters>;\n\nexport const useThreadIf = (props: UseThreadIfProps) => {\n const { useThread, useThreadMessages } = useThreadContext();\n return useCombinedStore(\n [useThread, useThreadMessages],\n (thread, messages) => {\n if (props.empty === true && messages.length !== 0) return false;\n if (props.empty === false && messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n if (props.disabled === true && thread.isDisabled) return false;\n if (props.disabled === false && thread.isDisabled) return false;\n\n return true;\n },\n );\n};\n","import { useThreadIf } from \"./useThreadIf\";\n\nexport const useThreadEmpty = () => {\n return useThreadIf({ empty: true });\n};\n","import { useCallback } from \"react\";\nimport { useThreadContext } from \"../../context\";\n\nexport const useThreadScrollToBottom = () => {\n const { useComposer, useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n\n const handleScrollToBottom = useCallback(() => {\n useViewport.getState().scrollToBottom();\n useComposer.getState().focus();\n }, [useViewport, useComposer]);\n\n if (isAtBottom) return null;\n return handleScrollToBottom;\n};\n","import { useCallback } from \"react\";\nimport { useThreadContext } from \"../../context\";\nimport { useAppendMessage } from \"../../hooks\";\n\nexport type UseApplyThreadSuggestionProps = {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean | undefined;\n};\n\nexport const useThreadSuggestion = ({\n prompt,\n autoSend,\n}: UseApplyThreadSuggestionProps) => {\n const { useThread, useComposer } = useThreadContext();\n\n const append = useAppendMessage();\n const disabled = useThread((t) => t.isDisabled);\n const callback = useCallback(() => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n if (autoSend && !thread.isRunning) {\n append(prompt);\n composer.setValue(\"\");\n } else {\n composer.setValue(prompt);\n }\n }, [useThread, useComposer, autoSend, append, prompt]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ActionBarPrimitiveRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarPrimitiveCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarPrimitiveReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarPrimitiveEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport {\n useActionBarFloatStatus,\n HideAndFloatStatus,\n UseActionBarFloatStatusProps,\n} from \"./useActionBarFloatStatus\";\n\ntype ActionBarPrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type ActionBarPrimitiveRootProps = PrimitiveDivProps &\n UseActionBarFloatStatusProps;\n\nexport const ActionBarPrimitiveRoot = forwardRef<\n ActionBarPrimitiveRootElement,\n ActionBarPrimitiveRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const hideAndfloatStatus = useActionBarFloatStatus({\n hideWhenRunning,\n autohide,\n autohideFloat,\n });\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n {...(hideAndfloatStatus === HideAndFloatStatus.Floating\n ? { \"data-floating\": \"true\" }\n : null)}\n {...rest}\n ref={ref}\n />\n );\n});\n\nActionBarPrimitiveRoot.displayName = \"ActionBarPrimitive.Root\";\n","\"use client\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport enum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type UseActionBarFloatStatusProps = {\n hideWhenRunning?: boolean | undefined;\n autohide?: \"always\" | \"not-last\" | \"never\" | undefined;\n autohideFloat?: \"always\" | \"single-branch\" | \"never\" | undefined;\n};\n\nexport const useActionBarFloatStatus = ({\n hideWhenRunning,\n autohide,\n autohideFloat,\n}: UseActionBarFloatStatusProps) => {\n const { useThread } = useThreadContext();\n const { useMessage, useMessageUtils } = useMessageContext();\n\n return useCombinedStore(\n [useThread, useMessage, useMessageUtils],\n (t, m, mu) => {\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 (!mu.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","\"use client\";\n\nimport { ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\ntype PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\nexport type ActionButtonProps<THook> = PrimitiveButtonProps &\n (THook extends (props: infer TProps) => unknown ? TProps : never);\n\nexport const createActionButton = <TProps,>(\n displayName: string,\n useActionButton: ActionButtonCallback<TProps>,\n forwardProps: (keyof NonNullable<TProps>)[] = [],\n) => {\n const ActionButton = forwardRef<\n PrimitiveButtonElement,\n PrimitiveButtonProps & TProps\n >((props, forwardedRef) => {\n const forwardedProps = {} as TProps;\n const primitiveProps = {} as PrimitiveButtonProps;\n\n (Object.keys(props) as Array<keyof typeof props>).forEach((key) => {\n if (forwardProps.includes(key as keyof TProps)) {\n (forwardedProps as any)[key] = props[key];\n } else {\n (primitiveProps as any)[key] = props[key];\n }\n });\n\n const callback = useActionButton(forwardedProps as TProps);\n return (\n <Primitive.button\n type=\"button\"\n disabled={!callback}\n {...primitiveProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(primitiveProps.onClick, () => {\n callback?.();\n })}\n />\n );\n });\n\n ActionButton.displayName = displayName;\n\n return ActionButton;\n};\n","\"use client\";\n\nimport { useActionBarCopy } from \"../../primitive-hooks/actionBar/useActionBarCopy\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type ActionBarPrimitiveCopyProps = ActionButtonProps<\n typeof useActionBarCopy\n>;\n\nexport const ActionBarPrimitiveCopy = createActionButton(\n \"ActionBarPrimitive.Copy\",\n useActionBarCopy,\n [\"copiedDuration\"],\n);\n","\"use client\";\n\nimport { useActionBarReload } from \"../../primitive-hooks/actionBar/useActionBarReload\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type ActionBarPrimitiveReloadProps = ActionButtonProps<\n typeof useActionBarReload\n>;\n\nexport const ActionBarPrimitiveReload = createActionButton(\n \"ActionBarPrimitive.Reload\",\n useActionBarReload,\n);\n","\"use client\";\n\nimport { useActionBarEdit } from \"../../primitive-hooks/actionBar/useActionBarEdit\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type ActionBarPrimitiveEditProps = ActionButtonProps<\n typeof useActionBarEdit\n>;\n\nexport const ActionBarPrimitiveEdit = createActionButton(\n \"ActionBarPrimitive.Edit\",\n useActionBarEdit,\n);\n","export { AssistantModalPrimitiveRoot as Root } from \"./AssistantModalRoot\";\nexport { AssistantModalPrimitiveTrigger as Trigger } from \"./AssistantModalTrigger\";\nexport { AssistantModalPrimitiveContent as Content } from \"./AssistantModalContent\";\nexport { AssistantModalPrimitiveAnchor as Anchor } from \"./AssistantModalAnchor\";\n","\"use client\";\n\nimport { FC, useState } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useOnComposerFocus } from \"../../utils/hooks/useOnComposerFocus\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\n\nexport type AssistantModalPrimitiveRootProps = PopoverPrimitive.PopoverProps;\n\nconst useAssistantModalOpenState = (defaultOpen = false) => {\n const state = useState(defaultOpen);\n\n const [, setOpen] = state;\n useOnComposerFocus(() => {\n setOpen(true);\n });\n\n return state;\n};\n\nexport const AssistantModalPrimitiveRoot: FC<\n AssistantModalPrimitiveRootProps\n> = ({\n __scopeAssistantModal,\n defaultOpen,\n open,\n onOpenChange,\n ...rest\n}: ScopedProps<AssistantModalPrimitiveRootProps>) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n const [modalOpen, setOpen] = useAssistantModalOpenState(defaultOpen);\n\n return (\n <PopoverPrimitive.Root\n {...scope}\n open={open === undefined ? modalOpen : open}\n onOpenChange={composeEventHandlers(onOpenChange, setOpen)}\n {...rest}\n />\n );\n};\n\nAssistantModalPrimitiveRoot.displayName = \"AssistantModalPrimitive.Root\";\n","import { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\n\nexport const useOnComposerFocus = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useComposer } = useThreadContext();\n useEffect(() => {\n return useComposer.getState().onFocus(() => {\n callbackRef();\n });\n }, [useComposer, callbackRef]);\n};\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport type { Scope } from \"@radix-ui/react-context\";\n\nexport type ScopedProps<P> = P & { __scopeAssistantModal?: Scope };\nexport const usePopoverScope = PopoverPrimitive.createPopoverScope();\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\n\ntype AssistantModalPrimitiveTriggerElement = ElementRef<\n typeof PopoverPrimitive.Trigger\n>;\nexport type AssistantModalPrimitiveTriggerProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Trigger\n>;\n\nexport const AssistantModalPrimitiveTrigger = forwardRef<\n AssistantModalPrimitiveTriggerElement,\n AssistantModalPrimitiveTriggerProps\n>(\n (\n {\n __scopeAssistantModal,\n ...rest\n }: ScopedProps<AssistantModalPrimitiveTriggerProps>,\n ref,\n ) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n return <PopoverPrimitive.Trigger {...scope} {...rest} ref={ref} />;\n },\n);\n\nAssistantModalPrimitiveTrigger.displayName = \"AssistantModalPrimitive.Trigger\";\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\ntype AssistantModalPrimitiveContentElement = ElementRef<\n typeof PopoverPrimitive.Content\n>;\nexport type AssistantModalPrimitiveContentProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Content\n> & {\n dissmissOnInteractOutside?: boolean | undefined;\n};\n\nexport const AssistantModalPrimitiveContent = forwardRef<\n AssistantModalPrimitiveContentElement,\n AssistantModalPrimitiveContentProps\n>(\n (\n {\n __scopeAssistantModal,\n side,\n align,\n onInteractOutside,\n dissmissOnInteractOutside = false,\n ...props\n }: ScopedProps<AssistantModalPrimitiveContentProps>,\n forwardedRef,\n ) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n return (\n <PopoverPrimitive.Portal {...scope}>\n <PopoverPrimitive.Content\n {...scope}\n {...props}\n ref={forwardedRef}\n side={side ?? \"top\"}\n align={align ?? \"end\"}\n onInteractOutside={composeEventHandlers(\n onInteractOutside,\n dissmissOnInteractOutside ? undefined : (e) => e.preventDefault(),\n )}\n />\n </PopoverPrimitive.Portal>\n );\n },\n);\n\nAssistantModalPrimitiveContent.displayName = \"AssistantModalPrimitive.Content\";\n","\"use client\";\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { ScopedProps, usePopoverScope } from \"./scope\";\n\ntype AssistantModalPrimitiveAnchorElement = ElementRef<\n typeof PopoverPrimitive.Anchor\n>;\ntype AssistantModalPrimitiveAnchorProps = ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Anchor\n>;\n\nexport const AssistantModalPrimitiveAnchor = forwardRef<\n AssistantModalPrimitiveAnchorElement,\n AssistantModalPrimitiveAnchorProps\n>(\n (\n {\n __scopeAssistantModal,\n ...rest\n }: ScopedProps<AssistantModalPrimitiveAnchorProps>,\n ref,\n ) => {\n const scope = usePopoverScope(__scopeAssistantModal);\n\n return <PopoverPrimitive.Anchor {...scope} {...rest} ref={ref} />;\n },\n);\nAssistantModalPrimitiveAnchor.displayName = \"AssistantModalPrimitive.Anchor\";\n","export { BranchPickerPrimitiveNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerPrimitiveCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerPrimitiveNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerPrimitiveRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { useBranchPickerNext } from \"../../primitive-hooks/branchPicker/useBranchPickerNext\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type BranchPickerPrimitiveNextProps = ActionButtonProps<\n typeof useBranchPickerNext\n>;\n\nexport const BranchPickerPrimitiveNext = createActionButton(\n \"BranchPickerPrimitive.Next\",\n useBranchPickerNext,\n);\n","\"use client\";\n\nimport { useBranchPickerPrevious } from \"../../primitive-hooks/branchPicker/useBranchPickerPrevious\";\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\n\nexport type BranchPickerPrimitivePreviousProps = ActionButtonProps<\n typeof useBranchPickerPrevious\n>;\n\nexport const BranchPickerPrevious = createActionButton(\n \"BranchPickerPrimitive.Previous\",\n useBranchPickerPrevious,\n);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useBranchPickerCount } from \"../../primitive-hooks/branchPicker/useBranchPickerCount\";\n\nexport type BranchPickerPrimitiveCountProps = {};\n\nexport const BranchPickerPrimitiveCount: FC<\n BranchPickerPrimitiveCountProps\n> = () => {\n const branchCount = useBranchPickerCount();\n return <>{branchCount}</>;\n};\n\nBranchPickerPrimitiveCount.displayName = \"BranchPickerPrimitive.Count\";\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useBranchPickerNumber } from \"../../primitive-hooks/branchPicker/useBranchPickerNumber\";\n\nexport type BranchPickerPrimitiveNumberProps = {};\n\nexport const BranchPickerPrimitiveNumber: FC<\n BranchPickerPrimitiveNumberProps\n> = () => {\n const branchNumber = useBranchPickerNumber();\n return <>{branchNumber}</>;\n};\n\nBranchPickerPrimitiveNumber.displayName = \"BranchPickerPrimitive.Number\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerPrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type BranchPickerPrimitiveRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean | undefined;\n};\n\nexport const BranchPickerPrimitiveRoot = forwardRef<\n BranchPickerPrimitiveRootElement,\n BranchPickerPrimitiveRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n\nBranchPickerPrimitiveRoot.displayName = \"BranchPickerPrimitive.Root\";\n","export { MessagePrimitiveRoot as Root } from \"./MessageRoot\";\nexport { MessagePrimitiveIf as If } from \"./MessageIf\";\nexport { MessagePrimitiveContent as Content } from \"./MessageContent\";\nexport { MessagePrimitiveInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n forwardRef,\n ComponentPropsWithoutRef,\n useCallback,\n} from \"react\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n\ntype MessagePrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nconst useIsHoveringRef = () => {\n const { useMessageUtils } = useMessageContext();\n\n const callbackRef = useCallback(\n (el: HTMLElement) => {\n const setIsHovering = useMessageUtils.getState().setIsHovering;\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n el.addEventListener(\"mouseenter\", handleMouseEnter);\n el.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n el.removeEventListener(\"mouseenter\", handleMouseEnter);\n el.removeEventListener(\"mouseleave\", handleMouseLeave);\n setIsHovering(false);\n };\n },\n [useMessageUtils],\n );\n\n return useManagedRef(callbackRef);\n};\n\nexport type MessagePrimitiveRootProps = PrimitiveDivProps;\n\nexport const MessagePrimitiveRoot = forwardRef<\n MessagePrimitiveRootElement,\n MessagePrimitiveRootProps\n>(({ onMouseEnter, onMouseLeave, ...rest }, forwardRef) => {\n const isHoveringRef = useIsHoveringRef();\n const ref = useComposedRefs<HTMLDivElement>(forwardRef, isHoveringRef);\n\n return <Primitive.div {...rest} ref={ref} />;\n});\n\nMessagePrimitiveRoot.displayName = \"MessagePrimitive.Root\";\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport {\n UseMessageIfProps,\n useMessageIf,\n} from \"../../primitive-hooks/message/useMessageIf\";\n\nexport type MessagePrimitiveIfProps = PropsWithChildren<UseMessageIfProps>;\n\nexport const MessagePrimitiveIf: FC<MessagePrimitiveIfProps> = ({\n children,\n ...query\n}) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n\nMessagePrimitiveIf.displayName = \"MessagePrimitive.If\";\n","\"use client\";\n\nimport { type ComponentType, type FC, memo } from \"react\";\nimport {\n useAssistantContext,\n useContentPartContext,\n useThreadContext,\n} from \"../../context\";\nimport { useMessageContext } from \"../../context/react/MessageContext\";\nimport {\n ContentPartProvider,\n EMPTY_CONTENT,\n} from \"../../context/providers/ContentPartProvider\";\nimport { ContentPartPrimitiveText } from \"../contentPart/ContentPartText\";\nimport { ContentPartPrimitiveImage } from \"../contentPart/ContentPartImage\";\nimport { ContentPartPrimitiveDisplay } from \"../contentPart/ContentPartDisplay\";\nimport type {\n ImageContentPartComponent,\n TextContentPartComponent,\n ToolCallContentPartComponent,\n ToolCallContentPartProps,\n UIContentPartComponent,\n} from \"../../types/ContentPartComponentTypes\";\nimport { ContentPartPrimitiveInProgress } from \"../contentPart/ContentPartInProgress\";\n\nexport type MessagePrimitiveContentProps = {\n components?:\n | {\n Empty?: TextContentPartComponent | undefined;\n Text?: TextContentPartComponent | undefined;\n Image?: ImageContentPartComponent | undefined;\n UI?: UIContentPartComponent | undefined;\n tools?: {\n by_name?:\n | Record<string, ToolCallContentPartComponent | undefined>\n | undefined;\n Fallback?: ComponentType<ToolCallContentPartProps> | undefined;\n };\n }\n | undefined;\n};\n\nconst defaultComponents = {\n Text: () => (\n <p style={{ whiteSpace: \"pre-line\" }}>\n <ContentPartPrimitiveText />\n <ContentPartPrimitiveInProgress>\n <span style={{ fontFamily: \"revert\" }}>{\" \\u25CF\"}</span>\n </ContentPartPrimitiveInProgress>\n </p>\n ),\n Image: () => <ContentPartPrimitiveImage />,\n UI: () => <ContentPartPrimitiveDisplay />,\n tools: {\n Fallback: (props) => {\n const { useToolUIs } = useAssistantContext();\n const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));\n if (!Render) return null;\n return <Render {...props} />;\n },\n },\n} satisfies MessagePrimitiveContentProps[\"components\"];\n\ntype MessageContentPartComponentProps = {\n components: MessagePrimitiveContentProps[\"components\"];\n};\n\nconst MessageContentPartComponent: FC<MessageContentPartComponentProps> = ({\n components: {\n Empty = defaultComponents.Text,\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useThreadActions } = useThreadContext();\n const { useMessage } = useMessageContext();\n const addToolResult = useThreadActions((t) => t.addToolResult);\n\n const { useContentPart } = useContentPartContext();\n const { part, status } = useContentPart();\n\n const type = part.type;\n switch (type) {\n case \"text\":\n if (status.type === \"requires-action\")\n throw new Error(\"Encountered unexpected requires-action status\");\n if (part === EMPTY_CONTENT) return <Empty part={part} status={status} />;\n\n return <Text part={part} status={status} />;\n\n case \"image\":\n if (status.type === \"requires-action\")\n throw new Error(\"Encountered unexpected requires-action status\");\n // eslint-disable-next-line jsx-a11y/alt-text\n return <Image part={part} status={status} />;\n\n case \"ui\":\n if (status.type === \"requires-action\")\n throw new Error(\"Encountered unexpected requires-action status\");\n return <UI part={part} status={status} />;\n\n case \"tool-call\": {\n const Tool = by_name[part.toolName] || Fallback;\n const addResult = (result: any) =>\n addToolResult({\n messageId: useMessage.getState().message.id,\n toolCallId: part.toolCallId,\n result,\n });\n return <Tool part={part} status={status} addResult={addResult} />;\n }\n default:\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n};\n\ntype MessageContentPartProps = {\n partIndex: number;\n components: MessagePrimitiveContentProps[\"components\"];\n};\n\nconst MessageContentPartImpl: FC<MessageContentPartProps> = ({\n partIndex,\n components,\n}) => {\n return (\n <ContentPartProvider partIndex={partIndex}>\n <MessageContentPartComponent components={components} />\n </ContentPartProvider>\n );\n};\n\nconst MessageContentPart = memo(\n MessageContentPartImpl,\n (prev, next) =>\n prev.partIndex === next.partIndex &&\n prev.components?.Text === next.components?.Text &&\n prev.components?.Image === next.components?.Image &&\n prev.components?.UI === next.components?.UI &&\n prev.components?.tools === next.components?.tools,\n);\n\nexport const MessagePrimitiveContent: FC<MessagePrimitiveContentProps> = ({\n components,\n}) => {\n const { useMessage } = useMessageContext();\n\n const contentLength = useMessage((s) => s.message.content.length) || 1;\n\n return new Array(contentLength).fill(null).map((_, idx) => {\n const partIndex = idx; // use the index as key, as message is generally append only\n return (\n <MessageContentPart\n key={partIndex}\n partIndex={partIndex}\n components={components}\n />\n );\n });\n};\n\nMessagePrimitiveContent.displayName = \"MessagePrimitive.Content\";\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { StoreApi, create } from \"zustand\";\nimport { ContentPartContext } from \"../react/ContentPartContext\";\nimport type { ContentPartContextValue } from \"../react/ContentPartContext\";\nimport { useMessageContext } from \"../react/MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\nimport {\n ContentPartStatus,\n ThreadAssistantContentPart,\n ThreadMessage,\n ThreadUserContentPart,\n ToolCallContentPartStatus,\n} from \"../../types/AssistantTypes\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst COMPLETE_STATUS: ContentPartStatus = {\n type: \"complete\",\n};\n\nconst toContentPartStatus = (\n message: ThreadMessage,\n partIndex: number,\n part: ThreadUserContentPart | ThreadAssistantContentPart,\n): ToolCallContentPartStatus => {\n if (message.role !== \"assistant\") return COMPLETE_STATUS;\n\n const isLastPart = partIndex === Math.max(0, message.content.length - 1);\n if (part.type !== \"tool-call\") {\n if (\n \"reason\" in message.status &&\n message.status.reason === \"tool-calls\" &&\n isLastPart\n )\n throw new Error(\n \"Encountered unexpected requires-action status. This is likely an internal bug in assistant-ui.\",\n );\n\n return isLastPart ? (message.status as ContentPartStatus) : COMPLETE_STATUS;\n }\n\n if (!!part.result) {\n return COMPLETE_STATUS;\n }\n\n return message.status as ToolCallContentPartStatus;\n};\n\nexport const EMPTY_CONTENT = Object.freeze({ type: \"text\", text: \"\" });\n\nconst getContentPartState = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"] | undefined,\n partIndex: number,\n) => {\n let part = message.content[partIndex];\n if (!part) {\n // for empty messages, show an empty text content part\n if (message.content.length === 0 && partIndex === 0) {\n part = EMPTY_CONTENT;\n } else {\n return null;\n }\n }\n\n // if the content part is the same, don't update\n const status = toContentPartStatus(message, partIndex, part);\n const currentState = useContentPart?.getState();\n if (\n currentState &&\n currentState.part === part &&\n currentState.status === status\n )\n return null;\n\n return Object.freeze({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(\n () => getContentPartState(useMessage.getState(), undefined, partIndex)!,\n );\n\n return { useContentPart };\n });\n\n useEffect(() => {\n const syncContentPart = (message: MessageState) => {\n const newState = getContentPartState(\n message,\n context.useContentPart,\n partIndex,\n );\n if (!newState) return;\n (\n context.useContentPart as unknown as StoreApi<ContentPartState>\n ).setState(newState, true);\n };\n\n syncContentPart(useMessage.getState());\n return useMessage.subscribe(syncContentPart);\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","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n forwardRef,\n ComponentPropsWithoutRef,\n ElementType,\n} from \"react\";\nimport { useContentPartText } from \"../../primitive-hooks/contentPart/useContentPartText\";\nimport { useSmooth } from \"../../utils/smooth/useSmooth\";\n\ntype ContentPartPrimitiveTextElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\nexport type ContentPartPrimitiveTextProps = Omit<\n PrimitiveSpanProps,\n \"children\" | \"asChild\"\n> & {\n smooth?: boolean;\n component?: ElementType;\n};\n\nexport const ContentPartPrimitiveText = forwardRef<\n ContentPartPrimitiveTextElement,\n ContentPartPrimitiveTextProps\n>(({ smooth = true, component: Component = \"span\", ...rest }, forwardedRef) => {\n const {\n part: { text },\n status,\n } = useSmooth(useContentPartText(), smooth);\n\n return (\n <Component data-status={status.type} {...rest} ref={forwardedRef}>\n {text}\n </Component>\n );\n});\n\nContentPartPrimitiveText.displayName = \"ContentPartPrimitive.Text\";\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMessageContext } from \"../../context\";\nimport {\n ContentPartStatus,\n ToolCallContentPartStatus,\n} from \"../../types/AssistantTypes\";\nimport { TextContentPartState } from \"../../context/stores/ContentPart\";\nimport { useSmoothContext } from \"./SmoothContext\";\nimport { StoreApi } from \"zustand\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\n\nclass TextStreamAnimator {\n private animationFrameId: number | null = null;\n private lastUpdateTime: number = Date.now();\n\n public targetText: string = \"\";\n\n constructor(\n public currentText: string,\n private setText: (newText: string) => void,\n ) {}\n\n start() {\n if (this.animationFrameId !== null) return;\n this.lastUpdateTime = Date.now();\n this.animate();\n }\n\n stop() {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n }\n\n private animate = () => {\n const currentTime = Date.now();\n const deltaTime = currentTime - this.lastUpdateTime;\n let timeToConsume = deltaTime;\n\n const remainingChars = this.targetText.length - this.currentText.length;\n const baseTimePerChar = Math.min(5, 250 / remainingChars);\n\n let charsToAdd = 0;\n while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {\n charsToAdd++;\n timeToConsume -= baseTimePerChar;\n }\n\n if (charsToAdd !== remainingChars) {\n this.animationFrameId = requestAnimationFrame(this.animate);\n } else {\n this.animationFrameId = null;\n }\n if (charsToAdd === 0) return;\n\n this.currentText = this.targetText.slice(\n 0,\n this.currentText.length + charsToAdd,\n );\n this.lastUpdateTime = currentTime - timeToConsume;\n this.setText(this.currentText);\n };\n}\n\nconst SMOOTH_STATUS: ContentPartStatus = Object.freeze({\n type: \"running\",\n});\n\nexport const useSmooth = (\n state: TextContentPartState,\n smooth: boolean = false,\n): TextContentPartState => {\n const { useSmoothStatus } = useSmoothContext({ optional: true }) ?? {};\n\n const {\n part: { text },\n } = state;\n const { useMessage } = useMessageContext();\n const id = useMessage((m) => m.message.id);\n\n const idRef = useRef(id);\n const [displayedText, setDisplayedText] = useState(text);\n\n const setText = useCallbackRef((text: string) => {\n setDisplayedText(text);\n (\n useSmoothStatus as unknown as\n | StoreApi<ToolCallContentPartStatus>\n | undefined\n )?.setState(text !== state.part.text ? SMOOTH_STATUS : state.status);\n });\n\n const [animatorRef] = useState<TextStreamAnimator>(\n new TextStreamAnimator(text, setText),\n );\n\n useEffect(() => {\n if (!smooth) {\n animatorRef.stop();\n return;\n }\n\n if (idRef.current !== id || !text.startsWith(animatorRef.targetText)) {\n idRef.current = id;\n setText(text);\n\n animatorRef.currentText = text;\n animatorRef.targetText = text;\n animatorRef.stop();\n\n return;\n }\n\n animatorRef.targetText = text;\n animatorRef.start();\n }, [setText, animatorRef, id, smooth, text]);\n\n useEffect(() => {\n return () => {\n animatorRef.stop();\n };\n }, [animatorRef]);\n\n return useMemo(\n () =>\n smooth\n ? {\n part: { type: \"text\", text: displayedText },\n status: text === displayedText ? state.status : SMOOTH_STATUS,\n }\n : state,\n [smooth, displayedText, state, text],\n );\n};\n","import {\n createContext,\n FC,\n forwardRef,\n PropsWithChildren,\n useContext,\n useState,\n} from \"react\";\nimport { useContentPartContext } from \"../../context\";\nimport { ReadonlyStore } from \"../../context/ReadonlyStore\";\nimport { create } from \"zustand\";\nimport {\n ContentPartStatus,\n ToolCallContentPartStatus,\n} from \"../../types/AssistantTypes\";\n\ntype SmoothContextValue = {\n useSmoothStatus: ReadonlyStore<ToolCallContentPartStatus | ContentPartStatus>;\n};\n\nconst SmoothContext = createContext<SmoothContextValue | null>(null);\n\nconst makeSmoothContext = (\n initialState: ContentPartStatus | ToolCallContentPartStatus,\n) => {\n const useSmoothStatus = create(() => initialState);\n return { useSmoothStatus };\n};\n\nexport const SmoothContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const outer = useSmoothContext({ optional: true });\n const { useContentPart } = useContentPartContext();\n\n const [context] = useState(() =>\n makeSmoothContext(useContentPart.getState().status),\n );\n\n // do not wrap if there is an outer SmoothContextProvider\n if (outer) return children;\n\n return (\n <SmoothContext.Provider value={context}>{children}</SmoothContext.Provider>\n );\n};\n\nexport const withSmoothContextProvider = <C extends React.ComponentType<any>>(\n Component: C,\n): C => {\n const Wrapped = forwardRef((props, ref) => {\n return (\n <SmoothContextProvider>\n <Component {...(props as any)} ref={ref} />\n </SmoothContextProvider>\n );\n });\n Wrapped.displayName = Component.displayName;\n return Wrapped as any;\n};\n\nexport function useSmoothContext(): SmoothContextValue;\nexport function useSmoothContext(options: {\n optional: true;\n}): SmoothContextValue | null;\nexport function useSmoothContext(options?: { optional: true }) {\n const context = useContext(SmoothContext);\n if (!options?.optional && !context)\n throw new Error(\n \"This component must be used within a SmoothContextProvider.\",\n );\n return context;\n}\n\nexport const useSmoothStatus = () => {\n const { useSmoothStatus } = useSmoothContext();\n return useSmoothStatus();\n};\n","import { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport { useContentPartImage } from \"../../primitive-hooks/contentPart/useContentPartImage\";\n\ntype ContentPartPrimitiveImageElement = ElementRef<typeof Primitive.img>;\ntype PrimitiveImageProps = ComponentPropsWithoutRef<typeof Primitive.img>;\n\nexport type ContentPartPrimitiveImageProps = PrimitiveImageProps;\n\nexport const ContentPartPrimitiveImage = forwardRef<\n ContentPartPrimitiveImageElement,\n ContentPartPrimitiveImageProps\n>((props, forwardedRef) => {\n const {\n part: { image },\n } = useContentPartImage();\n return <Primitive.img src={image} {...props} ref={forwardedRef} />;\n});\n\nContentPartPrimitiveImage.displayName = \"ContentPartPrimitive.Image\";\n","import type { FC } from \"react\";\nimport { useContentPartDisplay } from \"../../primitive-hooks/contentPart/useContentPartDisplay\";\n\nexport type ContentPartPrimitiveDisplayProps = {};\n\nexport const ContentPartPrimitiveDisplay: FC<\n ContentPartPrimitiveDisplayProps\n> = () => {\n const {\n part: { display },\n } = useContentPartDisplay();\n return display ?? null;\n};\n\nContentPartPrimitiveDisplay.displayName = \"ContentPartPrimitive.Display\";\n","import { FC, PropsWithChildren } from \"react\";\nimport { useContentPartContext } from \"../../context\";\n\nexport type ContentPartPrimitiveInProgressProps = PropsWithChildren;\n\nexport const ContentPartPrimitiveInProgress: FC<\n ContentPartPrimitiveInProgressProps\n> = ({ children }) => {\n const { useContentPart } = useContentPartContext();\n const isInProgress = useContentPart((c) => c.status.type === \"running\");\n\n return isInProgress ? children : null;\n};\n\nContentPartPrimitiveInProgress.displayName = \"ContentPartPrimitive.InProgress\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { ComponentPropsWithoutRef, FC } from \"react\";\n\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\nexport type MessagePrimitiveInProgressProps = PrimitiveSpanProps;\n\n/**\n * @deprecated Define a custom Text renderer via ContentPartPrimitiveInProgress instead.\n */\nexport const MessagePrimitiveInProgress: FC<\n MessagePrimitiveInProgressProps\n> = () => {\n return null;\n};\n\nMessagePrimitiveInProgress.displayName = \"MessagePrimitive.InProgress\";\n","export { ComposerPrimitiveRoot as Root } from \"./ComposerRoot\";\nexport { ComposerPrimitiveInput as Input } from \"./ComposerInput\";\nexport { ComposerPrimitiveSend as Send } from \"./ComposerSend\";\nexport { ComposerPrimitiveCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerPrimitiveIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport {\n type ElementRef,\n type FormEvent,\n forwardRef,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport { useComposerSend } from \"../../primitive-hooks\";\n\ntype ComposerPrimitiveRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\nexport type ComposerPrimitiveRootProps = PrimitiveFormProps;\n\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRootElement,\n ComposerPrimitiveRootProps\n>(({ onSubmit, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\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/react/ComposerContext\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { useOnComposerFocus } from \"../../utils/hooks/useOnComposerFocus\";\n\nexport type ComposerPrimitiveInputProps = TextareaAutosizeProps & {\n asChild?: boolean | undefined;\n};\n\nexport const ComposerPrimitiveInput = forwardRef<\n HTMLTextAreaElement,\n ComposerPrimitiveInputProps\n>(\n (\n {\n autoFocus = false,\n asChild,\n disabled: disabledProp,\n onChange,\n onKeyDown,\n ...rest\n },\n forwardedRef,\n ) => {\n const { useThread } = 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 isDisabled = useThread((t) => t.isDisabled) ?? disabledProp ?? false;\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n useEscapeKeydown((e) => {\n const composer = useComposer.getState();\n if (composer.canCancel) {\n composer.cancel();\n e.preventDefault();\n }\n });\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (isDisabled) return;\n\n if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n\n textareaRef.current?.closest(\"form\")?.requestSubmit();\n }\n }\n };\n\n const autoFocusEnabled = autoFocus && !isDisabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus({ preventScroll: true });\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnComposerFocus(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n name=\"input\"\n value={value}\n {...rest}\n ref={ref}\n disabled={isDisabled}\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\nComposerPrimitiveInput.displayName = \"ComposerPrimitive.Input\";\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\n\ntype ComposerPrimitiveSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\nexport type ComposerPrimitiveSendProps = PrimitiveButtonProps;\n\nexport const ComposerPrimitiveSend = forwardRef<\n ComposerPrimitiveSendElement,\n ComposerPrimitiveSendProps\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\nComposerPrimitiveSend.displayName = \"ComposerPrimitive.Send\";\n","\"use client\";\n\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useComposerCancel } from \"../../primitive-hooks/composer/useComposerCancel\";\n\nexport type ComposerPrimitiveCancelProps = ActionButtonProps<\n typeof useComposerCancel\n>;\n\nexport const ComposerPrimitiveCancel = createActionButton(\n \"ComposerPrimitive.Cancel\",\n useComposerCancel,\n);\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport {\n UseComposerIfProps,\n useComposerIf,\n} from \"../../primitive-hooks/composer/useComposerIf\";\n\nexport type ComposerPrimitiveIfProps = PropsWithChildren<UseComposerIfProps>;\n\nexport const ComposerPrimitiveIf: FC<ComposerPrimitiveIfProps> = ({\n children,\n ...query\n}) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n\nComposerPrimitiveIf.displayName = \"ComposerPrimitive.If\";\n","export { ContentPartPrimitiveText as Text } from \"./ContentPartText\";\nexport { ContentPartPrimitiveImage as Image } from \"./ContentPartImage\";\nexport { ContentPartPrimitiveDisplay as Display } from \"./ContentPartDisplay\";\nexport { ContentPartPrimitiveInProgress as InProgress } from \"./ContentPartInProgress\";\n","export { ThreadPrimitiveRoot as Root } from \"./ThreadRoot\";\nexport { ThreadPrimitiveEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadPrimitiveIf as If } from \"./ThreadIf\";\nexport { ThreadPrimitiveViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadPrimitiveMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadPrimitiveScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadPrimitiveSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\n\ntype ThreadPrimitiveRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type ThreadPrimitiveRootProps = PrimitiveDivProps;\n\nexport const ThreadPrimitiveRoot = forwardRef<\n ThreadPrimitiveRootElement,\n ThreadPrimitiveRootProps\n>((props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n});\n\nThreadPrimitiveRoot.displayName = \"ThreadPrimitive.Root\";\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useThreadEmpty } from \"../../primitive-hooks\";\n\nexport type ThreadPrimitiveEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadPrimitiveEmpty: FC<ThreadPrimitiveEmptyProps> = ({\n children,\n}) => {\n const empty = useThreadEmpty();\n return empty ? children : null;\n};\n\nThreadPrimitiveEmpty.displayName = \"ThreadPrimitive.Empty\";\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport {\n UseThreadIfProps,\n useThreadIf,\n} from \"../../primitive-hooks/thread/useThreadIf\";\n\nexport type ThreadPrimitiveIfProps = PropsWithChildren<UseThreadIfProps>;\n\nexport const ThreadPrimitiveIf: FC<ThreadPrimitiveIfProps> = ({\n children,\n ...query\n}) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n\nThreadPrimitiveIf.displayName = \"ThreadPrimitive.If\";\n","\"use client\";\n\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, ComponentPropsWithoutRef } from \"react\";\nimport {\n UseThreadViewportAutoScrollProps,\n useThreadViewportAutoScroll,\n} from \"../../primitive-hooks/thread/useThreadViewportAutoScroll\";\n\ntype ThreadPrimitiveViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type ThreadPrimitiveViewportProps = PrimitiveDivProps &\n UseThreadViewportAutoScrollProps;\n\nexport const ThreadPrimitiveViewport = forwardRef<\n ThreadPrimitiveViewportElement,\n ThreadPrimitiveViewportProps\n>(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {\n const autoScrollRef = useThreadViewportAutoScroll<HTMLDivElement>({\n autoScroll,\n });\n\n const ref = useComposedRefs(forwardedRef, autoScrollRef);\n\n return (\n <Primitive.div {...rest} ref={ref}>\n {children}\n </Primitive.div>\n );\n});\n\nThreadPrimitiveViewport.displayName = \"ThreadPrimitive.Viewport\";\n","\"use client\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useRef } from \"react\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\nimport { StoreApi } from \"zustand\";\nimport { ThreadViewportState } from \"../../context\";\nimport { useManagedRef } from \"../../utils/hooks/useManagedRef\";\n\nexport type UseThreadViewportAutoScrollProps = {\n autoScroll?: boolean | undefined;\n};\n\nexport const useThreadViewportAutoScroll = <TElement extends HTMLElement>({\n autoScroll = true,\n}: UseThreadViewportAutoScrollProps) => {\n const divRef = useRef<TElement>(null);\n\n const { useViewport } = useThreadContext();\n\n const lastScrollTop = useRef<number>(0);\n\n // bug: when ScrollToBottom's button changes its disabled state, the scroll stops\n // fix: delay the state change until the scroll is done\n const isScrollingToBottomRef = useRef(false);\n\n const scrollToBottom = (behavior: ScrollBehavior) => {\n const div = divRef.current;\n if (!div || !autoScroll) return;\n\n isScrollingToBottomRef.current = true;\n div.scrollTo({ top: div.scrollHeight, behavior });\n };\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom =\n div.scrollHeight - div.scrollTop <= div.clientHeight + 1; // TODO figure out why +1 is needed\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else {\n if (newIsAtBottom) {\n isScrollingToBottomRef.current = false;\n }\n\n if (newIsAtBottom !== isAtBottom) {\n (useViewport as unknown as StoreApi<ThreadViewportState>).setState({\n isAtBottom: newIsAtBottom,\n });\n }\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n const resizeRef = useOnResizeContent(() => {\n if (isScrollingToBottomRef.current || useViewport.getState().isAtBottom) {\n scrollToBottom(\"instant\");\n }\n\n handleScroll();\n });\n\n const scrollRef = useManagedRef<HTMLElement>((el) => {\n el.addEventListener(\"scroll\", handleScroll);\n return () => {\n el.removeEventListener(\"scroll\", handleScroll);\n };\n });\n\n const autoScrollRef = useComposedRefs<TElement>(resizeRef, scrollRef, divRef);\n\n useOnScrollToBottom(() => {\n scrollToBottom(\"auto\");\n });\n\n return autoScrollRef;\n};\n","import { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useCallback } from \"react\";\nimport { useManagedRef } from \"./useManagedRef\";\n\nexport const useOnResizeContent = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const refCallback = useCallback(\n (el: HTMLElement) => {\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 },\n [callbackRef],\n );\n\n return useManagedRef(refCallback);\n};\n","import { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/react/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 ComponentType, type FC, memo } from \"react\";\nimport { useThreadContext } from \"../../context/react/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerPrimitiveIf } from \"../composer/ComposerIf\";\nimport { MessagePrimitiveIf } from \"../message/MessageIf\";\n\nexport type ThreadPrimitiveMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType | undefined;\n EditComposer?: ComponentType | undefined;\n AssistantMessage?: ComponentType | undefined;\n SystemMessage?: ComponentType | undefined;\n }\n | {\n Message?: ComponentType | undefined;\n UserMessage: ComponentType;\n EditComposer?: ComponentType | undefined;\n AssistantMessage: ComponentType;\n SystemMessage?: ComponentType | undefined;\n };\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst getComponents = (\n components: ThreadPrimitiveMessagesProps[\"components\"],\n) => {\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 SystemMessage: components.SystemMessage ?? DEFAULT_SYSTEM_MESSAGE,\n };\n};\n\ntype ThreadMessageProps = {\n messageIndex: number;\n components: ThreadPrimitiveMessagesProps[\"components\"];\n};\n\nconst ThreadMessageImpl: FC<ThreadMessageProps> = ({\n messageIndex,\n components,\n}) => {\n const { UserMessage, EditComposer, AssistantMessage, SystemMessage } =\n getComponents(components);\n return (\n <MessageProvider messageIndex={messageIndex}>\n <MessagePrimitiveIf user>\n <ComposerPrimitiveIf editing={false}>\n <UserMessage />\n </ComposerPrimitiveIf>\n <ComposerPrimitiveIf editing>\n <EditComposer />\n </ComposerPrimitiveIf>\n </MessagePrimitiveIf>\n <MessagePrimitiveIf assistant>\n <AssistantMessage />\n </MessagePrimitiveIf>\n <MessagePrimitiveIf system>\n <SystemMessage />\n </MessagePrimitiveIf>\n </MessageProvider>\n );\n};\n\nconst ThreadMessage = memo(\n ThreadMessageImpl,\n (prev, next) =>\n prev.messageIndex === next.messageIndex &&\n prev.components.Message === next.components.Message &&\n prev.components.UserMessage === next.components.UserMessage &&\n prev.components.EditComposer === next.components.EditComposer &&\n prev.components.AssistantMessage === next.components.AssistantMessage &&\n prev.components.SystemMessage === next.components.SystemMessage,\n);\n\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessagesProps> = ({\n components,\n}) => {\n const { useThreadMessages } = useThreadContext();\n\n const messagesLength = useThreadMessages((t) => t.length);\n if (messagesLength === 0) return null;\n\n return new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx; // keep the same key when switching branches for better a11y support\n return (\n <ThreadMessage\n key={messageIndex}\n messageIndex={messageIndex}\n components={components}\n />\n );\n });\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) =>\n prev.components?.Message === next.components?.Message &&\n prev.components?.UserMessage === next.components?.UserMessage &&\n prev.components?.EditComposer === next.components?.EditComposer &&\n prev.components?.AssistantMessage === next.components?.AssistantMessage &&\n prev.components?.SystemMessage === next.components?.SystemMessage,\n);\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { StoreApi, create } from \"zustand\";\nimport type {\n CoreUserContentPart,\n ThreadMessage,\n} from \"../../types/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../react/MessageContext\";\nimport type { MessageContextValue } from \"../react/MessageContext\";\nimport { useThreadContext } from \"../react/ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/EditComposer\";\nimport { makeMessageUtilsStore } from \"../stores/MessageUtils\";\nimport { ThreadMessagesState } from \"../stores/ThreadMessages\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (messages: ThreadMessagesState, message: ThreadMessage) => {\n return messages[messages.length - 1]?.id === message.id;\n};\n\nconst getMessageState = (\n messages: ThreadMessagesState,\n getBranches: (messageId: string) => readonly string[],\n useMessage: MessageContextValue[\"useMessage\"] | undefined,\n messageIndex: number,\n) => {\n const parentId = messages[messageIndex - 1]?.id ?? null;\n const message = messages[messageIndex];\n if (!message) return null;\n\n const isLast = getIsLast(messages, message);\n const branches = getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage?.getState();\n if (\n currentState &&\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return null;\n\n return Object.freeze({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThreadMessages, useThreadActions } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>(\n () =>\n getMessageState(\n useThreadMessages.getState(),\n useThreadActions.getState().getBranches,\n undefined,\n messageIndex,\n )!,\n );\n const useMessageUtils = makeMessageUtilsStore();\n const useEditComposer = 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 CoreUserContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThreadActions.getState().append({\n parentId,\n role: \"user\",\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n return { useMessage, useMessageUtils, useEditComposer };\n });\n\n useEffect(() => {\n const syncMessage = (thread: ThreadMessagesState) => {\n const newState = getMessageState(\n thread,\n useThreadActions.getState().getBranches,\n context.useMessage,\n messageIndex,\n );\n if (!newState) return;\n (context.useMessage as unknown as StoreApi<MessageState>).setState(\n newState,\n true,\n );\n };\n\n syncMessage(useThreadMessages.getState());\n\n return useThreadMessages.subscribe(syncMessage);\n }, [useThreadMessages, useThreadActions, context, 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 { create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport { ReadonlyStore } from \"../ReadonlyStore\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n canCancel: boolean;\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => void;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): ReadonlyStore<EditComposerState> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n canCancel: false,\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, canCancel: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false, canCancel: false });\n onSend(value);\n },\n cancel: () => {\n set({ isEditing: false, canCancel: false });\n },\n }));\n","import { create } from \"zustand\";\n\nexport type MessageUtilsState = Readonly<{\n isCopied: boolean;\n setIsCopied: (value: boolean) => void;\n isHovering: boolean;\n setIsHovering: (value: boolean) => void;\n}>;\n\nexport const makeMessageUtilsStore = () =>\n create<MessageUtilsState>((set) => ({\n isCopied: false,\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n isHovering: false,\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n","\"use client\";\n\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useThreadScrollToBottom } from \"../../primitive-hooks/thread/useThreadScrollToBottom\";\n\nexport type ThreadPrimitiveScrollToBottomProps = ActionButtonProps<\n typeof useThreadScrollToBottom\n>;\n\nexport const ThreadPrimitiveScrollToBottom = createActionButton(\n \"ThreadPrimitive.ScrollToBottom\",\n useThreadScrollToBottom,\n);\n","\"use client\";\n\nimport {\n ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useThreadSuggestion } from \"../../primitive-hooks/thread/useThreadSuggestion\";\n\nexport type ThreadPrimitiveSuggestionProps = ActionButtonProps<\n typeof useThreadSuggestion\n>;\n\nexport const ThreadPrimitiveSuggestion = createActionButton(\n \"ThreadPrimitive.Suggestion\",\n useThreadSuggestion,\n [\"prompt\", \"autoSend\", \"method\"],\n);\n","\"use client\";\n\nimport { useInsertionEffect, useState } from \"react\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { LocalRuntime } from \"./LocalRuntime\";\nimport { LocalRuntimeOptions } from \"./LocalRuntimeOptions\";\n\nexport const useLocalRuntime = (\n adapter: ChatModelAdapter,\n options?: LocalRuntimeOptions,\n) => {\n const [runtime] = useState(() => new LocalRuntime(adapter, options));\n\n useInsertionEffect(() => {\n runtime.adapter = adapter;\n });\n\n return runtime;\n};\n","import { type ModelConfigProvider } from \"../../types/ModelConfigTypes\";\nimport type { Unsubscribe } from \"../../types/Unsubscribe\";\nimport type { AssistantRuntime } from \"./AssistantRuntime\";\nimport { ReactThreadRuntime } from \"./ReactThreadRuntime\";\n\nexport abstract class BaseAssistantRuntime<\n TThreadRuntime extends ReactThreadRuntime,\n> implements AssistantRuntime\n{\n constructor(private _thread: TThreadRuntime) {\n this._thread = _thread;\n }\n\n get thread() {\n return this._thread;\n }\n\n set thread(thread: TThreadRuntime) {\n this._thread = thread;\n this.subscriptionHandler();\n }\n\n public abstract registerModelConfigProvider(\n provider: ModelConfigProvider,\n ): Unsubscribe;\n public abstract switchToThread(threadId: string | null): void;\n\n private _subscriptions = new Set<() => void>();\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private subscriptionHandler = () => {\n for (const callback of this._subscriptions) callback();\n };\n}\n","export { ProxyConfigProvider } from \"./utils/ProxyConfigProvider\";\nexport { MessageRepository } from \"./runtimes/utils/MessageRepository\";\nexport { BaseAssistantRuntime } from \"./runtimes/core/BaseAssistantRuntime\";\nexport * from \"./utils/smooth\";\nexport { TooltipIconButton } from \"./ui/base/tooltip-icon-button\";\nexport { generateId } from \"./utils/idUtils\";\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 { generateId } from \"../../../internal\";\nimport {\n ThreadMessage,\n CoreMessage,\n ToolCallContentPart,\n MessageStatus,\n} from \"../../../types\";\n\nexport const fromCoreMessages = (\n message: readonly CoreMessage[],\n): ThreadMessage[] => {\n return message.map((message) => fromCoreMessage(message));\n};\n\nexport const fromCoreMessage = (\n message: CoreMessage,\n {\n id = generateId(),\n status = { type: \"complete\", reason: \"unknown\" } as MessageStatus,\n } = {},\n): ThreadMessage => {\n const commonProps = {\n id,\n createdAt: new Date(),\n };\n\n const role = message.role;\n switch (role) {\n case \"assistant\":\n return {\n ...commonProps,\n role,\n content: message.content.map((part) => {\n if (part.type === \"tool-call\") {\n return {\n ...part,\n argsText: JSON.stringify(part.args),\n } satisfies ToolCallContentPart;\n }\n return part;\n }),\n status,\n } satisfies ThreadMessage;\n\n case \"user\":\n return {\n ...commonProps,\n role,\n content: message.content,\n } satisfies ThreadMessage;\n\n case \"system\":\n return {\n ...commonProps,\n role,\n content: message.content,\n } satisfies ThreadMessage;\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n","import type { CoreMessage, ThreadMessage } from \"../../types/AssistantTypes\";\nimport { generateOptimisticId } from \"../../utils/idUtils\";\nimport { fromCoreMessage } from \"../edge/converters/fromCoreMessage\";\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 getMessage(messageId: string) {\n const message = this.messages.get(messageId);\n if (!message)\n throw new Error(\n \"MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n return {\n parentId: message.prev?.current.id ?? null,\n message: message.current,\n };\n }\n\n appendOptimisticMessage(parentId: string | null, message: CoreMessage) {\n let optimisticId: string;\n do {\n optimisticId = generateOptimisticId();\n } while (this.messages.has(optimisticId));\n\n this.addOrUpdateMessage(\n parentId,\n fromCoreMessage(message, {\n id: optimisticId,\n status: { type: \"running\" },\n }),\n );\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","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./tooltip\";\nimport { Button, ButtonProps } from \"./button\";\n\nexport type TooltipIconButtonProps = ButtonProps & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const TooltipIconButton = forwardRef<\n HTMLButtonElement,\n TooltipIconButtonProps\n>(({ children, tooltip, side = \"bottom\", ...rest }, ref) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" {...rest} ref={ref}>\n {children}\n <span className=\"aui-sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n});\n\nTooltipIconButton.displayName = \"TooltipIconButton\";\n","\"use client\";\n\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { withDefaults } from \"../utils/withDefaults\";\nimport { FC } from \"react\";\n\nexport const Tooltip: FC<TooltipPrimitive.TooltipProps> = (props) => {\n return (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root {...props} />\n </TooltipPrimitive.Provider>\n );\n};\n\nTooltip.displayName = \"Tooltip\";\n\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = withDefaults(TooltipPrimitive.Content, {\n sideOffset: 4,\n className: \"aui-tooltip-content\",\n});\n\nTooltipContent.displayName = \"TooltipContent\";\n","import {\n ComponentPropsWithoutRef,\n ElementRef,\n ElementType,\n forwardRef,\n} from \"react\";\nimport classNames from \"classnames\";\n\nexport const withDefaultProps =\n <TProps extends { className?: string }>({\n className,\n ...defaultProps\n }: Partial<TProps>) =>\n ({ className: classNameProp, ...props }: TProps) => {\n return {\n className: classNames(className, classNameProp),\n ...defaultProps,\n ...props,\n } as TProps;\n };\n\nexport const withDefaults = <TComponent extends ElementType>(\n Component: TComponent,\n defaultProps: Partial<Omit<ComponentPropsWithoutRef<TComponent>, \"asChild\">>,\n) => {\n type TComponentProps = typeof defaultProps;\n const getProps = withDefaultProps<TComponentProps>(defaultProps);\n const WithDefaults = forwardRef<ElementRef<TComponent>, TComponentProps>(\n (props, ref) => {\n const ComponentAsAny = Component as any;\n return <ComponentAsAny {...getProps(props)} ref={ref} />;\n },\n );\n WithDefaults.displayName =\n \"withDefaults(\" +\n (typeof Component === \"string\" ? Component : Component.displayName) +\n \")\";\n return WithDefaults;\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { ElementRef, forwardRef } from \"react\";\n\nconst buttonVariants = cva(\"aui-button\", {\n variants: {\n variant: {\n default: \"aui-button-primary\",\n outline: \"aui-button-outline\",\n ghost: \"aui-button-ghost\",\n },\n size: {\n default: \"aui-button-medium\",\n icon: \"aui-button-icon\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\ntype ButtonElement = ElementRef<typeof Primitive.button>;\n\nexport type ButtonProps = React.ComponentPropsWithoutRef<\n typeof Primitive.button\n> &\n VariantProps<typeof buttonVariants>;\n\nconst Button = forwardRef<ButtonElement, ButtonProps>(\n ({ className, variant, size, ...props }, ref) => {\n return (\n <Primitive.button\n className={buttonVariants({ variant, size, className })}\n {...props}\n ref={ref}\n />\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { LanguageModelV1Message } from \"@ai-sdk/provider\";\nimport { CoreMessage, ToolCallContentPart } from \"../../../types\";\n\ntype fromLanguageModelMessagesOptions = {\n mergeRoundtrips: boolean;\n};\n\nexport const fromLanguageModelMessages = (\n lm: LanguageModelV1Message[],\n { mergeRoundtrips }: fromLanguageModelMessagesOptions,\n): CoreMessage[] => {\n const messages: CoreMessage[] = [];\n\n for (const lmMessage of lm) {\n const role = lmMessage.role;\n switch (role) {\n case \"system\": {\n messages.push({\n role: \"system\",\n content: [\n {\n type: \"text\",\n text: lmMessage.content,\n },\n ],\n });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: lmMessage.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n case \"image\": {\n if (part.image instanceof URL) {\n return {\n type: \"image\",\n image: part.image.href,\n };\n }\n throw new Error(\"Only images with URL data are supported\");\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n });\n break;\n }\n case \"assistant\": {\n const newContent = lmMessage.content.map((part) => {\n if (part.type === \"tool-call\") {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.args),\n args: part.args as Record<string, unknown>,\n } satisfies ToolCallContentPart;\n }\n return part;\n });\n\n if (mergeRoundtrips) {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role === \"assistant\") {\n previousMessage.content.push(...newContent);\n break;\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: newContent,\n });\n break;\n }\n case \"tool\": {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role !== \"assistant\")\n throw new Error(\n \"A tool message must be preceded by an assistant message.\",\n );\n\n for (const tool of lmMessage.content) {\n const toolCall = previousMessage.content.find(\n (c): c is ToolCallContentPart =>\n c.type === \"tool-call\" && c.toolCallId === tool.toolCallId,\n );\n if (!toolCall)\n throw new Error(\"Received tool result for an unknown tool call.\");\n if (toolCall.toolName !== tool.toolName)\n throw new Error(\"Tool call name mismatch.\");\n\n toolCall.result = tool.result;\n if (tool.isError) {\n toolCall.isError = true;\n }\n }\n\n break;\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n }\n\n return messages;\n};\n","import { LanguageModelV1FunctionTool } from \"@ai-sdk/provider\";\nimport { Tool } from \"../../../types/ModelConfigTypes\";\n\nexport const fromLanguageModelTools = (\n tools: LanguageModelV1FunctionTool[],\n): Record<string, Tool<any, any>> => {\n return Object.fromEntries(\n tools.map((tool) => [\n tool.name,\n {\n description: tool.description,\n parameters: tool.parameters,\n },\n ]),\n );\n};\n","import { LocalRuntimeOptions, useLocalRuntime } from \"..\";\nimport { useState } from \"react\";\nimport { EdgeChatAdapterOptions, EdgeChatAdapter } from \"./EdgeChatAdapter\";\n\nexport type EdgeRuntimeOptions = EdgeChatAdapterOptions & LocalRuntimeOptions;\n\nexport const useEdgeRuntime = ({\n initialMessages,\n ...options\n}: EdgeRuntimeOptions) => {\n const [adapter] = useState(() => new EdgeChatAdapter(options));\n return useLocalRuntime(adapter, { initialMessages });\n};\n","import {\n AssistantStreamChunkTuple,\n AssistantStreamChunkType,\n} from \"./AssistantStreamChunkType\";\nimport { ToolResultStreamPart } from \"./toolResultStream\";\n\nexport function assistantDecoderStream() {\n const toolCallNames = new Map<string, string>();\n let currentToolCall:\n | { id: string; name: string; argsText: string }\n | undefined;\n\n return new TransformStream<string, ToolResultStreamPart>({\n transform(chunk, controller) {\n const [code, value] = parseStreamPart(chunk);\n\n if (\n currentToolCall &&\n code !== AssistantStreamChunkType.ToolCallArgsTextDelta &&\n code !== AssistantStreamChunkType.Error\n ) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: currentToolCall.id,\n toolName: currentToolCall.name,\n args: currentToolCall.argsText,\n });\n currentToolCall = undefined;\n }\n\n switch (code) {\n case AssistantStreamChunkType.TextDelta: {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: value,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallBegin: {\n const { id, name } = value;\n toolCallNames.set(id, name);\n currentToolCall = { id, name, argsText: \"\" };\n break;\n }\n case AssistantStreamChunkType.ToolCallArgsTextDelta: {\n const delta = value;\n currentToolCall!.argsText += delta;\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: currentToolCall!.id,\n toolName: currentToolCall!.name,\n argsTextDelta: delta,\n });\n break;\n }\n case AssistantStreamChunkType.ToolCallResult: {\n controller.enqueue({\n type: \"tool-result\",\n toolCallType: \"function\",\n toolCallId: value.id,\n toolName: toolCallNames.get(value.id)!,\n result: value.result,\n });\n break;\n }\n case AssistantStreamChunkType.Finish: {\n controller.enqueue({\n type: \"finish\",\n ...value,\n });\n break;\n }\n case AssistantStreamChunkType.Error: {\n controller.enqueue({\n type: \"error\",\n error: value,\n });\n break;\n }\n default: {\n const unhandledType: never = code;\n throw new Error(`Unhandled chunk type: ${unhandledType}`);\n }\n }\n },\n });\n}\n\nconst parseStreamPart = (part: string): AssistantStreamChunkTuple => {\n const index = part.indexOf(\":\");\n if (index === -1) throw new Error(\"Invalid stream part\");\n return [\n part.slice(0, index) as AssistantStreamChunkType,\n JSON.parse(part.slice(index + 1)),\n ] as const;\n};\n","export function chunkByLineStream() {\n let buffer = \"\";\n\n return new TransformStream({\n transform(chunk, controller) {\n buffer += chunk;\n const lines = buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n buffer = lines[lines.length - 1]!;\n },\n flush(controller) {\n // flush any remaining content in the buffer\n if (buffer) {\n controller.enqueue(buffer);\n }\n },\n });\n}\n","import { ChatModelAdapter, ChatModelRunOptions } from \"../local\";\nimport { ChatModelRunResult } from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"./converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"./converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"./EdgeRuntimeRequestOptions\";\nimport { assistantDecoderStream } from \"./streams/assistantDecoderStream\";\nimport { chunkByLineStream } from \"./streams/chunkByLineStream\";\nimport { runResultStream } from \"./streams/runResultStream\";\nimport { toolResultStream } from \"./streams/toolResultStream\";\n\nexport function asAsyncIterable<T>(\n source: ReadableStream<T>,\n): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator]: () => {\n const reader = source.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done\n ? { done: true, value: undefined }\n : { done: false, value };\n },\n };\n },\n };\n}\nexport type EdgeChatAdapterOptions = {\n api: string;\n};\n\nexport class EdgeChatAdapter implements ChatModelAdapter {\n constructor(private options: EdgeChatAdapterOptions) {}\n\n async *run({ messages, abortSignal, config }: ChatModelRunOptions) {\n const result = await fetch(this.options.api, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n system: config.system,\n messages: toCoreMessages(messages),\n tools: config.tools ? toLanguageModelTools(config.tools) : [],\n ...config.callSettings,\n ...config.config,\n } satisfies EdgeRuntimeRequestOptions),\n signal: abortSignal,\n });\n\n if (result.status !== 200) {\n throw new Error(`Status ${result.status}: ${await result.text()}`);\n }\n\n const stream = result\n .body!.pipeThrough(new TextDecoderStream())\n .pipeThrough(chunkByLineStream())\n .pipeThrough(assistantDecoderStream())\n .pipeThrough(toolResultStream(config.tools))\n .pipeThrough(runResultStream());\n\n let update: ChatModelRunResult | undefined;\n for await (update of asAsyncIterable(stream)) {\n yield update;\n }\n\n if (update === undefined)\n throw new Error(\"No data received from Edge Runtime\");\n }\n}\n","import type { ThreadAssistantMessage } from \"../../types\";\n\nexport const shouldContinue = (result: ThreadAssistantMessage) =>\n result.status?.type === \"requires-action\" &&\n result.status.reason === \"tool-calls\" &&\n result.content.every((c) => c.type !== \"tool-call\" || !!c.result);\n","import { ThreadRuntime } from \"..\";\nimport { AddToolResultOptions } from \"../../context\";\nimport { generateId } from \"../../internal\";\nimport type {\n ModelConfigProvider,\n AppendMessage,\n ThreadUserMessage,\n ThreadAssistantMessage,\n Unsubscribe,\n} from \"../../types\";\nimport { fromCoreMessages } from \"../edge\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport type { ChatModelAdapter, ChatModelRunResult } from \"./ChatModelAdapter\";\nimport { shouldContinue } from \"./shouldContinue\";\nimport { LocalRuntimeOptions } from \"./LocalRuntimeOptions\";\n\nconst CAPABILITIES = Object.freeze({\n switchToBranch: true,\n edit: true,\n reload: true,\n cancel: true,\n copy: true,\n});\nexport class LocalThreadRuntime implements ThreadRuntime {\n private _subscriptions = new Set<() => void>();\n\n private abortController: AbortController | null = null;\n private readonly repository = new MessageRepository();\n\n public readonly capabilities = CAPABILITIES;\n\n public readonly isDisabled = false;\n\n public get messages() {\n return this.repository.getMessages();\n }\n public get isRunning() {\n return this.abortController != null;\n }\n\n constructor(\n private configProvider: ModelConfigProvider,\n public adapter: ChatModelAdapter,\n private options?: LocalRuntimeOptions,\n ) {\n if (options?.initialMessages) {\n let parentId: string | null = null;\n const messages = fromCoreMessages(options.initialMessages);\n for (const message of messages) {\n this.repository.addOrUpdateMessage(parentId, message);\n parentId = message.id;\n }\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.notifySubscribers();\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.role !== \"user\")\n throw new Error(\n \"Only appending user messages are supported in LocalRuntime. This is likely an internal bug in assistant-ui.\",\n );\n\n // add user message\n const userMessageId = generateId();\n const userMessage: ThreadUserMessage = {\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 this.repository.resetHead(parentId);\n\n // add assistant message\n const id = generateId();\n let message: ThreadAssistantMessage = {\n id,\n role: \"assistant\",\n status: { type: \"running\" },\n content: [],\n createdAt: new Date(),\n };\n\n do {\n message = await this.performRoundtrip(parentId, message);\n } while (shouldContinue(message));\n }\n\n private async performRoundtrip(\n parentId: string | null,\n message: ThreadAssistantMessage,\n ) {\n const messages = this.repository.getMessages();\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n const initialContent = message.content;\n const initialRoundtrips = message.roundtrips;\n const updateMessage = (m: Partial<ChatModelRunResult>) => {\n message = {\n ...message,\n ...(m.content\n ? { content: [...initialContent, ...(m.content ?? [])] }\n : undefined),\n status: m.status ?? message.status,\n ...(m.roundtrips?.length\n ? { roundtrips: [...(initialRoundtrips ?? []), ...m.roundtrips] }\n : undefined),\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this.notifySubscribers();\n };\n\n const maxToolRoundtrips = this.options?.maxToolRoundtrips ?? 1;\n const toolRoundtrips = message.roundtrips?.length ?? 0;\n if (toolRoundtrips > maxToolRoundtrips) {\n // reached max tool roundtrips\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"tool-calls\",\n },\n });\n return message;\n } else {\n updateMessage({\n status: {\n type: \"running\",\n },\n });\n }\n\n try {\n const promiseOrGenerator = this.adapter.run({\n messages,\n abortSignal: this.abortController.signal,\n config: this.configProvider.getModelConfig(),\n onUpdate: updateMessage,\n });\n\n // handle async iterator for streaming results\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n updateMessage(r);\n }\n } else {\n updateMessage(await promiseOrGenerator);\n }\n\n this.abortController = null;\n\n if (message.status.type === \"running\") {\n updateMessage({\n status: { type: \"complete\", reason: \"unknown\" },\n });\n } else {\n // notify subscribers that isRunning is now false\n this.notifySubscribers();\n }\n } catch (e) {\n this.abortController = null;\n\n // TODO this should be handled by the run result stream\n if (e instanceof Error && e.name === \"AbortError\") {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else {\n updateMessage({\n status: { type: \"incomplete\", reason: \"error\", error: e },\n });\n\n throw e;\n }\n }\n return message;\n }\n\n cancelRun(): void {\n if (!this.abortController) return;\n\n this.abortController.abort();\n this.abortController = null;\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 addToolResult({ messageId, toolCallId, result }: AddToolResultOptions) {\n let { parentId, message } = this.repository.getMessage(messageId);\n\n if (message.role !== \"assistant\")\n throw new Error(\"Tried to add tool result to non-assistant message\");\n\n let added = false;\n let found = false;\n const newContent = message.content.map((c) => {\n if (c.type !== \"tool-call\") return c;\n if (c.toolCallId !== toolCallId) return c;\n found = true;\n if (!c.result) added = true;\n return {\n ...c,\n result,\n };\n });\n\n if (!found)\n throw new Error(\"Tried to add tool result to non-existing tool call\");\n\n message = {\n ...message,\n content: newContent,\n };\n this.repository.addOrUpdateMessage(parentId, message);\n\n if (added && shouldContinue(message)) {\n this.performRoundtrip(parentId, message);\n }\n }\n}\n","import { type ModelConfigProvider } from \"../../types/ModelConfigTypes\";\nimport { BaseAssistantRuntime } from \"../core/BaseAssistantRuntime\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { ProxyConfigProvider } from \"../../internal\";\nimport { LocalThreadRuntime } from \"./LocalThreadRuntime\";\nimport { LocalRuntimeOptions } from \"./LocalRuntimeOptions\";\n\nexport class LocalRuntime extends BaseAssistantRuntime<LocalThreadRuntime> {\n private readonly _proxyConfigProvider: ProxyConfigProvider;\n\n constructor(adapter: ChatModelAdapter, options?: LocalRuntimeOptions) {\n const proxyConfigProvider = new ProxyConfigProvider();\n super(new LocalThreadRuntime(proxyConfigProvider, adapter, options));\n this._proxyConfigProvider = proxyConfigProvider;\n }\n\n public set adapter(adapter: ChatModelAdapter) {\n this.thread.adapter = adapter;\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n return this._proxyConfigProvider.registerModelConfigProvider(provider);\n }\n\n public switchToThread(threadId: string | null) {\n if (threadId) {\n throw new Error(\"LocalRuntime does not yet support switching threads\");\n }\n\n return (this.thread = new LocalThreadRuntime(\n this._proxyConfigProvider,\n this.thread.adapter,\n ));\n }\n}\n","import { create } from \"zustand\";\nimport { ReactThreadRuntime } from \"../core\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport { AppendMessage, ThreadMessage, Unsubscribe } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport { AddToolResultOptions } from \"../../context\";\nimport { getExternalStoreMessage } from \"./getExternalStoreMessage\";\nimport { useExternalStoreSync } from \"./useExternalStoreSync\";\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntime implements ReactThreadRuntime {\n private _subscriptions = new Set<() => void>();\n private repository = new MessageRepository();\n private assistantOptimisticId: string | null = null;\n\n private useStore;\n\n public get capabilities() {\n return {\n switchToBranch: this.store.setMessages !== undefined,\n edit: this.store.onEdit !== undefined,\n reload: this.store.onReload !== undefined,\n cancel: this.store.onCancel !== undefined,\n copy: this.store.onCopy !== null,\n };\n }\n\n public messages: ThreadMessage[] = [];\n public isDisabled = false;\n public isRunning = false;\n\n constructor(public store: ExternalStoreAdapter<any>) {\n this.updateData(\n store.isDisabled ?? false,\n store.isRunning ?? false,\n store.messages,\n );\n\n this.useStore = create(() => ({\n store,\n }));\n }\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n if (!this.store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {\n if (!this.store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n await this.store.onEdit(message);\n } else {\n await this.store.onNew(message);\n }\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n if (!this.store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n await this.store.onReload(parentId);\n }\n\n public cancelRun(): void {\n if (!this.store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this.store.onCancel();\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n let messages = this.repository.getMessages();\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private updateMessages = (messages: ThreadMessage[]) => {\n this.store.setMessages?.(\n messages.flatMap(getExternalStoreMessage).filter((m) => m != null),\n );\n };\n\n public onStoreUpdated() {\n if (this.useStore.getState().store !== this.store) {\n this.useStore.setState({ store: this.store });\n }\n }\n\n private updateData = (\n isDisabled: boolean,\n isRunning: boolean,\n vm: ThreadMessage[],\n ) => {\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: [],\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.isDisabled = isDisabled;\n this.isRunning = isRunning;\n\n for (const callback of this._subscriptions) callback();\n };\n\n unstable_synchronizer = () => {\n const { store } = this.useStore();\n\n useExternalStoreSync(store, this.updateData);\n\n return null;\n };\n\n addToolResult(options: AddToolResultOptions) {\n if (!this.store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this.store.onAddToolResult(options);\n }\n}\n","import { ThreadMessage } from \"../../types\";\n\nexport const symbolInnerMessage = Symbol(\"innerMessage\");\n\nexport type ExternalStoreThreadMessage<T> = ThreadMessage & {\n [symbolInnerMessage]?: T;\n};\n\nexport const getExternalStoreMessage = <T,>(message: ThreadMessage) => {\n return (message as ExternalStoreThreadMessage<T>)[symbolInnerMessage];\n};\n","import { useEffect, useInsertionEffect, useMemo, useRef } from \"react\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport {\n ConverterCallback,\n ThreadMessageConverter,\n} from \"./ThreadMessageConverter\";\nimport { ThreadMessage } from \"../../types\";\nimport { symbolInnerMessage } from \"./getExternalStoreMessage\";\nimport { getAutoStatus } from \"./auto-status\";\nimport { fromThreadMessageLike } from \"./ThreadMessageLike\";\n\ntype UpdateDataCallback = (\n isDisabled: boolean,\n isRunning: boolean,\n messages: ThreadMessage[],\n) => void;\n\nexport const useExternalStoreSync = <T extends WeakKey>(\n adapter: ExternalStoreAdapter<T>,\n updateData: UpdateDataCallback,\n) => {\n const adapterRef = useRef(adapter);\n useInsertionEffect(() => {\n adapterRef.current = adapter;\n });\n\n // flush the converter cache when the convertMessage prop changes\n const [converter, convertCallback] = useMemo(() => {\n const converter = adapter.convertMessage ?? ((m: T) => m as ThreadMessage);\n const convertCallback: ConverterCallback<T> = (cache, m, idx) => {\n const autoStatus = getAutoStatus(\n adapterRef.current.messages.at(-1) === m,\n adapterRef.current.isRunning ?? false,\n );\n\n if (cache && (cache.role !== \"assistant\" || cache.status === autoStatus))\n return cache;\n\n const newMessage = fromThreadMessageLike(\n converter(m, idx),\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = m;\n return newMessage;\n };\n return [new ThreadMessageConverter(), convertCallback];\n\n // specify convertMessage bceause we want the ThreadMessageConverter to be recreated when the adapter changes\n }, [adapter.convertMessage]);\n\n useEffect(() => {\n updateData(\n adapter.isDisabled ?? false,\n adapter.isRunning ?? false,\n converter.convertMessages(adapter.messages, convertCallback),\n );\n }, [\n updateData,\n converter,\n convertCallback,\n adapter.isDisabled,\n adapter.isRunning,\n adapter.messages,\n ]);\n};\n","import { ThreadMessage } from \"../../types\";\n\nexport type ConverterCallback<TIn> = (\n cache: ThreadMessage | undefined,\n message: TIn,\n idx: number,\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, idx) => {\n const key = keyMapper(m);\n const cached = this.cache.get(key);\n const newMessage = converter(cached, m, idx);\n this.cache.set(key, newMessage);\n return newMessage;\n });\n }\n}\n","const AUTO_STATUS_RUNNING = Object.freeze({ type: \"running\" });\nconst AUTO_STATUS_COMPLETE = Object.freeze({\n type: \"complete\",\n reason: \"unknown\",\n});\n\nexport const getAutoStatus = (isLast: boolean, isRunning: boolean) =>\n isLast && isRunning ? AUTO_STATUS_RUNNING : AUTO_STATUS_COMPLETE;\n","import {\n MessageStatus,\n TextContentPart,\n ImageContentPart,\n ToolCallContentPart,\n UIContentPart,\n ThreadMessage,\n ThreadAssistantContentPart,\n ThreadAssistantMessage,\n ThreadUserContentPart,\n ThreadUserMessage,\n ThreadSystemMessage,\n} from \"../../types\";\nimport { CoreToolCallContentPart } from \"../../types/AssistantTypes\";\n\nexport type ThreadMessageLike = {\n role: \"assistant\" | \"user\" | \"system\";\n content: (\n | TextContentPart\n | ImageContentPart\n | ToolCallContentPart<any, any>\n | CoreToolCallContentPart<any, any>\n | UIContentPart\n )[];\n id?: string | undefined;\n createdAt?: Date | undefined;\n status?: MessageStatus | undefined;\n};\n\nexport const fromThreadMessageLike = (\n like: ThreadMessageLike,\n fallbackId: string,\n fallbackStatus: MessageStatus,\n): ThreadMessage => {\n const { role, content, id, createdAt, status } = like;\n const common = {\n id: id ?? fallbackId,\n createdAt: createdAt ?? new Date(),\n };\n switch (role) {\n case \"assistant\":\n return {\n ...common,\n role,\n content: content.map((part): ThreadAssistantContentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"ui\":\n return part;\n\n case \"tool-call\": {\n if (\"argsText\" in part) return part;\n return {\n ...part,\n argsText: JSON.stringify(part.args),\n };\n }\n\n default: {\n const unhandledType: \"image\" = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n status: status ?? fallbackStatus,\n } satisfies ThreadAssistantMessage;\n\n case \"user\":\n return {\n ...common,\n role,\n content: content.map((part): ThreadUserContentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"ui\":\n case \"image\":\n return part;\n\n default: {\n const unhandledType: \"tool-call\" = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n } satisfies ThreadUserMessage;\n\n case \"system\":\n if (content.length !== 1 || content[0]!.type !== \"text\")\n throw new Error(\n \"System messages must have exactly one text content part.\",\n );\n\n return {\n ...common,\n role,\n content: content as [TextContentPart],\n } satisfies ThreadSystemMessage;\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n","import { BaseAssistantRuntime, ProxyConfigProvider } from \"../../internal\";\nimport { ModelConfigProvider } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport { ExternalStoreThreadRuntime } from \"./ExternalStoreThreadRuntime\";\n\nexport class ExternalStoreRuntime extends BaseAssistantRuntime<ExternalStoreThreadRuntime> {\n private readonly _proxyConfigProvider = new ProxyConfigProvider();\n\n constructor(store: ExternalStoreAdapter<any>) {\n super(new ExternalStoreThreadRuntime(store));\n }\n\n public set store(store: ExternalStoreAdapter<any>) {\n this.thread.store = store;\n }\n\n public onStoreUpdated() {\n return this.thread.onStoreUpdated();\n }\n\n public getModelConfig() {\n return this._proxyConfigProvider.getModelConfig();\n }\n\n public registerModelConfigProvider(provider: ModelConfigProvider) {\n return this._proxyConfigProvider.registerModelConfigProvider(provider);\n }\n\n public switchToThread(threadId: string | null) {\n if (threadId) {\n if (!this.store.onSwitchThread)\n throw new Error(\"Runtime does not support switching threads.\");\n\n return this.store.onSwitchThread(threadId);\n } else {\n if (!this.store.onNewThread)\n throw new Error(\"Runtime does not support switching to new threads.\");\n\n return this.store.onNewThread();\n }\n }\n}\n","import { useEffect, useInsertionEffect, useState } from \"react\";\nimport { ExternalStoreRuntime } from \"./ExternalStoreRuntime\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\n\nexport const useExternalStoreRuntime = (store: ExternalStoreAdapter<any>) => {\n const [runtime] = useState(() => new ExternalStoreRuntime(store));\n\n useInsertionEffect(() => {\n runtime.store = store;\n });\n useEffect(() => {\n runtime.onStoreUpdated();\n });\n\n return runtime;\n};\n","\"use client\";\n\nimport {\n FC,\n PropsWithChildren,\n ReactNode,\n createContext,\n useContext,\n} from \"react\";\n\nimport { AvatarProps } from \"./base/avatar\";\nimport { TextContentPartComponent } from \"../types\";\nimport { AssistantRuntime } from \"../runtimes\";\nimport { AssistantRuntimeProvider, useAssistantContext } from \"../context\";\n\nexport type SuggestionConfig = {\n text?: ReactNode;\n prompt: string;\n};\n\nexport type ThreadWelcomeConfig = {\n message?: string | null | undefined;\n suggestions?: SuggestionConfig[] | undefined;\n};\n\nexport type UserMessageConfig = {\n allowEdit?: boolean | undefined;\n};\n\nexport type AssistantMessageConfig = {\n allowReload?: boolean | undefined;\n allowCopy?: boolean | undefined;\n components?:\n | {\n Text?: TextContentPartComponent | undefined;\n }\n | undefined;\n};\n\nexport type BranchPickerConfig = {\n allowBranchPicker?: boolean | undefined;\n};\n\nexport type StringsConfig = {\n assistantModal?: {\n open: {\n button: {\n tooltip?: string | undefined;\n };\n };\n closed: {\n button: {\n tooltip?: string | undefined;\n };\n };\n };\n thread?: {\n scrollToBottom?: {\n tooltip?: string | undefined;\n };\n };\n userMessage?: {\n edit?: {\n tooltip?: string | undefined;\n };\n };\n assistantMessage?: {\n reload?: {\n tooltip?: string | undefined;\n };\n copy?: {\n tooltip?: string | undefined;\n };\n };\n branchPicker?: {\n previous?: {\n tooltip?: string | undefined;\n };\n next?: {\n tooltip?: string | undefined;\n };\n };\n composer?: {\n send?:\n | {\n tooltip?: string | undefined;\n }\n | undefined;\n cancel?:\n | {\n tooltip?: string | undefined;\n }\n | undefined;\n input?: {\n placeholder?: string | undefined;\n };\n };\n editComposer?: {\n send?: {\n label?: string | undefined;\n };\n cancel?: {\n label?: string | undefined;\n };\n };\n code?: {\n header?: {\n copy?: {\n tooltip?: string | undefined;\n };\n };\n };\n};\n\nconst ThreadConfigContext = createContext<ThreadConfig>({});\n\nexport type ThreadConfig = {\n runtime?: AssistantRuntime;\n\n assistantAvatar?: AvatarProps;\n\n welcome?: ThreadWelcomeConfig;\n assistantMessage?: AssistantMessageConfig;\n userMessage?: UserMessageConfig;\n\n branchPicker?: BranchPickerConfig;\n\n strings?: StringsConfig;\n};\n\nexport const useThreadConfig = (): Omit<ThreadConfig, \"runtime\"> => {\n return useContext(ThreadConfigContext);\n};\n\nexport type ThreadConfigProviderProps = PropsWithChildren<{\n config?: ThreadConfig | undefined;\n}>;\n\nexport const ThreadConfigProvider: FC<ThreadConfigProviderProps> = ({\n children,\n config,\n}) => {\n const assistant = useAssistantContext({ optional: true });\n\n const configProvider =\n config && Object.keys(config ?? {}).length > 0 ? (\n <ThreadConfigContext.Provider value={config}>\n {children}\n </ThreadConfigContext.Provider>\n ) : (\n <>{children}</>\n );\n if (!config?.runtime) return configProvider;\n\n if (assistant) {\n throw new Error(\n \"You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed.\",\n );\n }\n return (\n <AssistantRuntimeProvider runtime={config.runtime}>\n {configProvider}\n </AssistantRuntimeProvider>\n );\n};\n\nThreadConfigProvider.displayName = \"ThreadConfigProvider\";\n","\"use client\";\n\nimport { forwardRef, type FC } from \"react\";\nimport { CheckIcon, CopyIcon, RefreshCwIcon } from \"lucide-react\";\nimport { ActionBarPrimitive, MessagePrimitive } from \"../primitives\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { useThreadContext } from \"../context\";\n\nconst useAllowCopy = () => {\n const { assistantMessage: { allowCopy = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const copySupported = useThreadActions((t) => t.capabilities.copy);\n return copySupported && allowCopy;\n};\n\nconst useAllowReload = () => {\n const { assistantMessage: { allowReload = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const reloadSupported = useThreadActions((t) => t.capabilities.reload);\n return reloadSupported && allowReload;\n};\n\nconst AssistantActionBar: FC = () => {\n const allowCopy = useAllowCopy();\n const allowReload = useAllowReload();\n if (!allowCopy && !allowReload) return null;\n return (\n <AssistantActionBarRoot\n hideWhenRunning\n autohide=\"not-last\"\n autohideFloat=\"single-branch\"\n >\n <AssistantActionBarCopy />\n <AssistantActionBarReload />\n </AssistantActionBarRoot>\n );\n};\n\nAssistantActionBar.displayName = \"AssistantActionBar\";\n\nconst AssistantActionBarRoot = withDefaults(ActionBarPrimitive.Root, {\n className: \"aui-assistant-action-bar-root\",\n});\n\nAssistantActionBarRoot.displayName = \"AssistantActionBarRoot\";\n\nconst AssistantActionBarCopy = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n assistantMessage: { reload: { tooltip = \"Copy\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n const allowCopy = useAllowCopy();\n if (!allowCopy) return null;\n return (\n <ActionBarPrimitive.Copy asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? (\n <>\n <MessagePrimitive.If copied>\n <CheckIcon />\n </MessagePrimitive.If>\n <MessagePrimitive.If copied={false}>\n <CopyIcon />\n </MessagePrimitive.If>\n </>\n )}\n </TooltipIconButton>\n </ActionBarPrimitive.Copy>\n );\n});\n\nAssistantActionBarCopy.displayName = \"AssistantActionBarCopy\";\n\nconst AssistantActionBarReload = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n assistantMessage: { reload: { tooltip = \"Refresh\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n const allowReload = useAllowReload();\n if (!allowReload) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n <RefreshCwIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Reload>\n );\n});\n\nAssistantActionBarReload.displayName = \"AssistantActionBarReload\";\n\nconst exports = {\n Root: AssistantActionBarRoot,\n Reload: AssistantActionBarReload,\n Copy: AssistantActionBarCopy,\n};\n\nexport default Object.assign(\n AssistantActionBar,\n exports,\n) as typeof AssistantActionBar & typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\nimport { MessagePrimitive, MessagePrimitiveContentProps } from \"../primitives\";\nimport BranchPicker from \"./branch-picker\";\nimport { Avatar } from \"./base/avatar\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport AssistantActionBar from \"./assistant-action-bar\";\nimport ContentPart from \"./content-part\";\n\nconst AssistantMessage: FC = () => {\n return (\n <AssistantMessageRoot>\n <AssistantMessageAvatar />\n <AssistantMessageContent />\n <BranchPicker />\n <AssistantActionBar />\n </AssistantMessageRoot>\n );\n};\n\nAssistantMessage.displayName = \"AssistantMessage\";\n\nconst AssistantMessageAvatar: FC = () => {\n const { assistantAvatar: avatar = { fallback: \"A\" } } = useThreadConfig();\n return <Avatar {...avatar} />;\n};\n\nconst AssistantMessageRoot = withDefaults(MessagePrimitive.Root, {\n className: \"aui-assistant-message-root\",\n});\n\nAssistantMessageRoot.displayName = \"AssistantMessageRoot\";\n\nconst AssistantMessageContentWrapper = withDefaults(\"div\", {\n className: \"aui-assistant-message-content\",\n});\n\nexport type AssistantMessageContentProps = MessagePrimitiveContentProps &\n ComponentPropsWithoutRef<\"div\">;\n\nconst AssistantMessageContent = forwardRef<\n HTMLDivElement,\n AssistantMessageContentProps\n>(({ components: componentsProp, ...rest }, ref) => {\n const { assistantMessage: { components = {} } = {} } = useThreadConfig();\n return (\n <AssistantMessageContentWrapper {...rest} ref={ref}>\n <MessagePrimitive.Content\n components={{\n ...componentsProp,\n Text: componentsProp?.Text ?? components.Text ?? ContentPart.Text,\n }}\n />\n </AssistantMessageContentWrapper>\n );\n});\n\nAssistantMessageContent.displayName = \"AssistantMessageContent\";\n\nconst exports = {\n Root: AssistantMessageRoot,\n Avatar: AssistantMessageAvatar,\n Content: AssistantMessageContent,\n};\n\nexport default Object.assign(\n AssistantMessage,\n exports,\n) as typeof AssistantMessage & typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { BranchPickerPrimitive } from \"../primitives\";\nimport { useThreadContext } from \"../context\";\n\nconst useAllowBranchPicker = () => {\n const { branchPicker: { allowBranchPicker = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const branchPickerSupported = useThreadActions((t) => t.capabilities.edit);\n return branchPickerSupported && allowBranchPicker;\n};\n\nconst BranchPicker: FC = () => {\n const allowBranchPicker = useAllowBranchPicker();\n if (!allowBranchPicker) return null;\n return (\n <BranchPickerRoot hideWhenSingleBranch>\n <BranchPickerPrevious />\n <BranchPickerState />\n <BranchPickerNext />\n </BranchPickerRoot>\n );\n};\n\nBranchPicker.displayName = \"BranchPicker\";\n\nconst BranchPickerRoot = withDefaults(BranchPickerPrimitive.Root, {\n className: \"aui-branch-picker-root\",\n});\n\nBranchPickerRoot.displayName = \"BranchPickerRoot\";\n\nconst BranchPickerPrevious = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n branchPicker: { previous: { tooltip = \"Previous\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <BranchPickerPrimitive.Previous asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <ChevronLeftIcon />}\n </TooltipIconButton>\n </BranchPickerPrimitive.Previous>\n );\n});\n\nBranchPickerPrevious.displayName = \"BranchPickerPrevious\";\n\nconst BranchPickerStateWrapper = withDefaults(\"span\", {\n className: \"aui-branch-picker-state\",\n});\n\nconst BranchPickerState = forwardRef<\n HTMLSpanElement,\n ComponentPropsWithoutRef<\"span\">\n>((props, ref) => {\n return (\n <BranchPickerStateWrapper {...props} ref={ref}>\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </BranchPickerStateWrapper>\n );\n});\n\nBranchPickerState.displayName = \"BranchPickerState\";\n\nconst BranchPickerNext = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { branchPicker: { next: { tooltip = \"Next\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <BranchPickerPrimitive.Next asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <ChevronRightIcon />}\n </TooltipIconButton>\n </BranchPickerPrimitive.Next>\n );\n});\n\nBranchPickerNext.displayName = \"BranchPickerNext\";\n\nconst exports = {\n Root: BranchPickerRoot,\n Previous: BranchPickerPrevious,\n Next: BranchPickerNext,\n};\n\nexport default Object.assign(BranchPicker, exports) as typeof BranchPicker &\n typeof exports;\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { withDefaults } from \"../utils/withDefaults\";\n\nexport type AvatarProps = {\n src?: string | undefined;\n alt?: string | undefined;\n fallback?: string | undefined;\n};\n\nexport const Avatar: FC<AvatarProps> = ({ src, alt, fallback }) => {\n if (src == null && fallback == null) return null;\n\n return (\n <AvatarRoot>\n {src != null && <AvatarImage src={src} alt={alt} />}\n {fallback != null && <AvatarFallback>{fallback}</AvatarFallback>}\n </AvatarRoot>\n );\n};\n\nAvatar.displayName = \"Avatar\";\n\nexport const AvatarRoot = withDefaults(AvatarPrimitive.Root, {\n className: \"aui-avatar-root\",\n});\n\nAvatarRoot.displayName = \"AvatarRoot\";\n\nexport const AvatarImage = withDefaults(AvatarPrimitive.Image, {\n className: \"aui-avatar-image\",\n});\n\nAvatarImage.displayName = \"AvatarImage\";\n\nexport const AvatarFallback = withDefaults(AvatarPrimitive.Fallback, {\n className: \"aui-avatar-fallback\",\n});\n\nAvatarFallback.displayName = \"AvatarFallback\";\n","import { FC } from \"react\";\nimport { ContentPartPrimitive } from \"../primitives\";\nimport { useSmoothStatus, withSmoothContextProvider } from \"../utils/smooth\";\nimport classNames from \"classnames\";\n\nexport const Text: FC = () => {\n const status = useSmoothStatus();\n return (\n <ContentPartPrimitive.Text\n className={classNames(\n \"aui-text\",\n status.type === \"running\" && \"aui-text-running\",\n )}\n component=\"p\"\n />\n );\n};\n\nconst exports = { Text: withSmoothContextProvider(Text) };\n\nexport default exports;\n","\"use client\";\n\nimport { type FC, forwardRef } from \"react\";\nimport { BotIcon, ChevronDownIcon } from \"lucide-react\";\n\nimport {\n AssistantModalPrimitive,\n AssistantModalPrimitiveRootProps,\n} from \"../primitives\";\nimport Thread from \"./thread\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport {\n ThreadConfig,\n ThreadConfigProvider,\n ThreadConfigProviderProps,\n useThreadConfig,\n} from \"./thread-config\";\n\nconst AssistantModal: FC<ThreadConfig> = (config) => {\n return (\n <AssistantModalRoot config={config}>\n <AssistantModalTrigger />\n <AssistantModalContent>\n <Thread />\n </AssistantModalContent>\n </AssistantModalRoot>\n );\n};\n\nAssistantModal.displayName = \"AssistantModal\";\n\nconst AssistantModalRoot: FC<\n AssistantModalPrimitiveRootProps & ThreadConfigProviderProps\n> = ({ config, ...props }) => {\n return (\n <ThreadConfigProvider config={config}>\n <AssistantModalPrimitive.Root {...props} />\n </ThreadConfigProvider>\n );\n};\n\nAssistantModalRoot.displayName = \"AssistantModalRoot\";\n\nconst AssistantModalTrigger = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n return (\n <AssistantModalAnchor>\n <AssistantModalPrimitive.Trigger asChild>\n <AssistantModalButton {...props} ref={ref} />\n </AssistantModalPrimitive.Trigger>\n </AssistantModalAnchor>\n );\n});\n\nAssistantModalTrigger.displayName = \"AssistantModalTrigger\";\n\nconst AssistantModalAnchor = withDefaults(AssistantModalPrimitive.Anchor, {\n className: \"aui-root aui-modal-anchor\",\n});\n\nAssistantModalAnchor.displayName = \"AssistantModalAnchor\";\n\nconst ModalButtonStyled = withDefaults(TooltipIconButton, {\n variant: \"default\",\n className: \"aui-modal-button\",\n});\n\ntype AssistantModalButtonProps = TooltipIconButtonProps & {\n \"data-state\"?: \"open\" | \"closed\";\n};\n\nconst AssistantModalButton = forwardRef<\n HTMLButtonElement,\n Partial<AssistantModalButtonProps>\n>(({ \"data-state\": state, ...rest }, ref) => {\n const {\n strings: {\n assistantModal: {\n open: {\n button: { tooltip: openTooltip = \"Close Assistant\" } = {},\n } = {},\n closed: {\n button: { tooltip: closedTooltip = \"Open Assistant\" } = {},\n } = {},\n } = {},\n } = {},\n } = useThreadConfig();\n const tooltip = state === \"open\" ? openTooltip : closedTooltip;\n\n return (\n <ModalButtonStyled\n side=\"left\"\n tooltip={tooltip}\n data-state={state}\n {...rest}\n ref={ref}\n >\n {rest.children ?? (\n <>\n <BotIcon\n data-state={state}\n className=\"aui-modal-button-closed-icon\"\n />\n <ChevronDownIcon\n data-state={state}\n className=\"aui-modal-button-open-icon\"\n />\n </>\n )}\n </ModalButtonStyled>\n );\n});\n\nAssistantModalButton.displayName = \"AssistantModalButton\";\n\nconst AssistantModalContent = withDefaults(AssistantModalPrimitive.Content, {\n className: \"aui-root aui-modal-content\",\n sideOffset: 16,\n});\n\nAssistantModalContent.displayName = \"AssistantModalContent\";\n\nconst exports = {\n Root: AssistantModalRoot,\n Trigger: AssistantModalTrigger,\n Content: AssistantModalContent,\n};\n\nexport default Object.assign(AssistantModal, exports) as typeof AssistantModal &\n typeof exports;\n","\"use client\";\n\nimport { ComponentType, forwardRef, type FC } from \"react\";\nimport { ArrowDownIcon } from \"lucide-react\";\n\nimport { withDefaults } from \"./utils/withDefaults\";\nimport Composer from \"./composer\";\nimport ThreadWelcome from \"./thread-welcome\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport AssistantMessage from \"./assistant-message\";\nimport UserMessage from \"./user-message\";\nimport EditComposer from \"./edit-composer\";\nimport {\n ThreadConfig,\n ThreadConfigProvider,\n ThreadConfigProviderProps,\n useThreadConfig,\n} from \"./thread-config\";\nimport { ThreadPrimitive, ThreadPrimitiveRootProps } from \"../primitives\";\n\nconst Thread: FC<ThreadConfig> = (config) => {\n return (\n <ThreadRoot config={config}>\n <ThreadViewport>\n <ThreadWelcome />\n <ThreadMessages />\n <ThreadViewportFooter>\n <ThreadScrollToBottom />\n <Composer />\n </ThreadViewportFooter>\n </ThreadViewport>\n </ThreadRoot>\n );\n};\n\nexport type ThreadRootProps = ThreadPrimitiveRootProps &\n ThreadConfigProviderProps;\n\nconst ThreadRootStyled = withDefaults(ThreadPrimitive.Root, {\n className: \"aui-root aui-thread-root\",\n});\n\nconst ThreadRoot = forwardRef<HTMLDivElement, ThreadRootProps>(\n ({ config, ...props }, ref) => {\n return (\n <ThreadConfigProvider config={config}>\n <ThreadRootStyled {...props} ref={ref} />\n </ThreadConfigProvider>\n );\n },\n);\n\nThreadRoot.displayName = \"ThreadRoot\";\n\nconst ThreadViewport = withDefaults(ThreadPrimitive.Viewport, {\n className: \"aui-thread-viewport\",\n});\n\nThreadViewport.displayName = \"ThreadViewport\";\n\nconst ThreadViewportFooter = withDefaults(\"div\", {\n className: \"aui-thread-viewport-footer\",\n});\n\nThreadViewportFooter.displayName = \"ThreadViewportFooter\";\n\nconst SystemMessage = () => null;\n\nconst ThreadMessages: FC<{\n components?: {\n UserMessage?: ComponentType | undefined;\n EditComposer?: ComponentType | undefined;\n AssistantMessage?: ComponentType | undefined;\n SystemMessage?: ComponentType | undefined;\n };\n}> = ({ components, ...rest }) => {\n return (\n <ThreadPrimitive.Messages\n components={{\n UserMessage: components?.UserMessage ?? UserMessage,\n EditComposer: components?.EditComposer ?? EditComposer,\n AssistantMessage: components?.AssistantMessage ?? AssistantMessage,\n SystemMessage: components?.SystemMessage ?? SystemMessage,\n }}\n {...rest}\n />\n );\n};\n\nThreadMessages.displayName = \"ThreadMessages\";\n\nconst ThreadScrollToBottomIconButton = withDefaults(TooltipIconButton, {\n variant: \"outline\",\n className: \"aui-thread-scroll-to-bottom\",\n});\n\nconst ThreadScrollToBottom = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: {\n thread: { scrollToBottom: { tooltip = \"Scroll to bottom\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <ThreadPrimitive.ScrollToBottom asChild>\n <ThreadScrollToBottomIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <ArrowDownIcon />}\n </ThreadScrollToBottomIconButton>\n </ThreadPrimitive.ScrollToBottom>\n );\n});\n\nThreadScrollToBottom.displayName = \"ThreadScrollToBottom\";\n\nconst exports = {\n Root: ThreadRoot,\n Viewport: ThreadViewport,\n Messages: ThreadMessages,\n ScrollToBottom: ThreadScrollToBottom,\n ViewportFooter: ThreadViewportFooter,\n};\n\nexport default Object.assign(Thread, exports) as typeof Thread & typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\n\nimport { SendHorizontalIcon } from \"lucide-react\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { CircleStopIcon } from \"./base/CircleStopIcon\";\nimport { ComposerPrimitive, ThreadPrimitive } from \"../primitives\";\nimport { useThreadContext } from \"../context\";\n\nconst Composer: FC = () => {\n return (\n <ComposerRoot>\n <ComposerInput autoFocus />\n <ComposerAction />\n </ComposerRoot>\n );\n};\n\nComposer.displayName = \"Composer\";\n\nconst ComposerRoot = withDefaults(ComposerPrimitive.Root, {\n className: \"aui-composer-root\",\n});\n\nComposerRoot.displayName = \"ComposerRoot\";\n\nconst ComposerInputStyled = withDefaults(ComposerPrimitive.Input, {\n rows: 1,\n autoFocus: true,\n className: \"aui-composer-input\",\n});\n\nexport type ComposerInputProps = ComponentPropsWithoutRef<\n typeof ComposerInputStyled\n>;\nconst ComposerInput = forwardRef<HTMLTextAreaElement, ComposerInputProps>(\n (props, ref) => {\n const {\n strings: {\n composer: { input: { placeholder = \"Write a message...\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <ComposerInputStyled placeholder={placeholder} {...props} ref={ref} />\n );\n },\n);\n\nComposerInput.displayName = \"ComposerInput\";\n\nconst useAllowCancel = () => {\n const { useThreadActions } = useThreadContext();\n const cancelSupported = useThreadActions((t) => t.capabilities.cancel);\n return cancelSupported;\n};\n\nconst ComposerAction: FC = () => {\n const allowCancel = useAllowCancel();\n if (!allowCancel) return <ComposerSend />;\n return (\n <>\n <ThreadPrimitive.If running={false}>\n <ComposerSend />\n </ThreadPrimitive.If>\n <ThreadPrimitive.If running>\n <ComposerCancel />\n </ThreadPrimitive.If>\n </>\n );\n};\n\nComposerAction.displayName = \"ComposerAction\";\n\nconst ComposerSendButton = withDefaults(TooltipIconButton, {\n variant: \"default\",\n className: \"aui-composer-send\",\n});\n\nconst ComposerSend = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { composer: { send: { tooltip = \"Send\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Send asChild>\n <ComposerSendButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <SendHorizontalIcon />}\n </ComposerSendButton>\n </ComposerPrimitive.Send>\n );\n});\n\nComposerSend.displayName = \"ComposerSend\";\n\nconst ComposerCancelButton = withDefaults(TooltipIconButton, {\n variant: \"default\",\n className: \"aui-composer-cancel\",\n});\n\nconst ComposerCancel = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { composer: { cancel: { tooltip = \"Cancel\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Cancel asChild>\n <ComposerCancelButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <CircleStopIcon />}\n </ComposerCancelButton>\n </ComposerPrimitive.Cancel>\n );\n});\n\nComposerCancel.displayName = \"ComposerCancel\";\n\nconst exports = {\n Root: ComposerRoot,\n Input: ComposerInput,\n Action: ComposerAction,\n Send: ComposerSend,\n Cancel: ComposerCancel,\n};\n\nexport default Object.assign(Composer, exports) as typeof Composer &\n typeof exports;\n","import { FC } from \"react\";\n\nexport const CircleStopIcon: FC = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n );\n};\n\nCircleStopIcon.displayName = \"CircleStopIcon\";\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { Avatar } from \"./base/avatar\";\nimport { SuggestionConfig, useThreadConfig } from \"./thread-config\";\nimport { ThreadPrimitive } from \"../primitives\";\n\nconst ThreadWelcome: FC = () => {\n return (\n <ThreadWelcomeRoot>\n <ThreadWelcomeCenter>\n <ThreadWelcomeAvatar />\n <ThreadWelcomeMessage />\n </ThreadWelcomeCenter>\n <ThreadWelcomeSuggestions />\n </ThreadWelcomeRoot>\n );\n};\n\nThreadWelcome.displayName = \"ThreadWelcome\";\n\nconst ThreadWelcomeRootStyled = withDefaults(\"div\", {\n className: \"aui-thread-welcome-root\",\n});\n\nconst ThreadWelcomeCenter = withDefaults(\"div\", {\n className: \"aui-thread-welcome-center\",\n});\n\ntype ThreadWelcomeRootProps = ComponentPropsWithoutRef<\"div\">;\n\nconst ThreadWelcomeRoot = forwardRef<HTMLDivElement, ThreadWelcomeRootProps>(\n (props, ref) => {\n return (\n <ThreadPrimitive.Empty>\n <ThreadWelcomeRootStyled {...props} ref={ref} />\n </ThreadPrimitive.Empty>\n );\n },\n);\n\nThreadWelcomeRoot.displayName = \"ThreadWelcomeRoot\";\n\nconst ThreadWelcomeAvatar: FC = () => {\n const { assistantAvatar: avatar = { fallback: \"A\" } } = useThreadConfig();\n return <Avatar {...avatar} />;\n};\n\nconst ThreadWelcomeMessageStyled = withDefaults(\"p\", {\n className: \"aui-thread-welcome-message\",\n});\n\nexport type ThreadWelcomeMessageProps = Omit<\n ComponentPropsWithoutRef<typeof ThreadWelcomeMessageStyled>,\n \"children\"\n> & { message?: string | undefined };\n\nconst ThreadWelcomeMessage = forwardRef<\n HTMLParagraphElement,\n ThreadWelcomeMessageProps\n>(({ message: messageProp, ...rest }, ref) => {\n const { welcome: { message = \"How can I help you today?\" } = {} } =\n useThreadConfig();\n return (\n <ThreadWelcomeMessageStyled {...rest} ref={ref}>\n {messageProp ?? message}\n </ThreadWelcomeMessageStyled>\n );\n});\n\nThreadWelcomeMessage.displayName = \"ThreadWelcomeMessage\";\n\nconst ThreadWelcomeSuggestionContainer = withDefaults(\"div\", {\n className: \"aui-thread-welcome-suggestion-container\",\n});\n\nconst ThreadWelcomeSuggestionStyled = withDefaults(ThreadPrimitive.Suggestion, {\n className: \"aui-thread-welcome-suggestion\",\n});\n\nexport type ThreadWelcomeSuggestionProps = {\n suggestion: SuggestionConfig;\n};\n\nconst ThreadWelcomeSuggestion: FC<ThreadWelcomeSuggestionProps> = ({\n suggestion: { text, prompt },\n}) => {\n return (\n <ThreadWelcomeSuggestionStyled\n prompt={prompt}\n method=\"replace\"\n autoSend\n >\n <span className=\"aui-thread-welcome-suggestion-text\">{text ?? prompt}</span>\n </ThreadWelcomeSuggestionStyled>\n );\n};\n\nconst ThreadWelcomeSuggestions: FC = () => {\n const { welcome: { suggestions } = {} } = useThreadConfig();\n return (\n <ThreadWelcomeSuggestionContainer>\n {suggestions?.map((suggestion, idx) => {\n const key = `${suggestion.prompt}-${idx}`;\n return <ThreadWelcomeSuggestion key={key} suggestion={suggestion} />;\n })}\n </ThreadWelcomeSuggestionContainer>\n );\n};\n\nThreadWelcomeSuggestions.displayName = \"ThreadWelcomeSuggestions\";\n\nconst exports = {\n Root: ThreadWelcomeRoot,\n Center: ThreadWelcomeCenter,\n Avatar: ThreadWelcomeAvatar,\n Message: ThreadWelcomeMessage,\n Suggestions: ThreadWelcomeSuggestions,\n Suggestion: ThreadWelcomeSuggestion,\n};\n\nexport default Object.assign(ThreadWelcome, exports) as typeof ThreadWelcome &\n typeof exports;\n","\"use client\";\n\nimport { ComponentPropsWithoutRef, forwardRef, type FC } from \"react\";\n\nimport BranchPicker from \"./branch-picker\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport UserActionBar from \"./user-action-bar\";\nimport ContentPart from \"./content-part\";\nimport { MessagePrimitive, MessagePrimitiveContentProps } from \"../primitives\";\n\nconst UserMessage: FC = () => {\n return (\n <UserMessageRoot>\n <UserActionBar />\n <UserMessageContent />\n <BranchPicker />\n </UserMessageRoot>\n );\n};\n\nUserMessage.displayName = \"UserMessage\";\n\nconst UserMessageRoot = withDefaults(MessagePrimitive.Root, {\n className: \"aui-user-message-root\",\n});\n\nUserMessageRoot.displayName = \"UserMessageRoot\";\n\nconst UserMessageContentWrapper = withDefaults(\"div\", {\n className: \"aui-user-message-content\",\n});\n\nexport type UserMessageContentProps = MessagePrimitiveContentProps &\n ComponentPropsWithoutRef<\"div\">;\n\nconst UserMessageContent = forwardRef<HTMLDivElement, UserMessageContentProps>(\n ({ components, ...props }, ref) => {\n return (\n <UserMessageContentWrapper {...props} ref={ref}>\n <MessagePrimitive.Content\n components={{\n ...components,\n Text: components?.Text ?? ContentPart.Text,\n }}\n />\n </UserMessageContentWrapper>\n );\n },\n);\n\nUserMessageContent.displayName = \"UserMessageContent\";\n\nconst exports = {\n Root: UserMessageRoot,\n Content: UserMessageContent,\n};\n\nexport default Object.assign(UserMessage, exports) as typeof UserMessage &\n typeof exports;\n","\"use client\";\n\nimport { forwardRef, type FC } from \"react\";\nimport { PencilIcon } from \"lucide-react\";\n\nimport {\n TooltipIconButton,\n TooltipIconButtonProps,\n} from \"./base/tooltip-icon-button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { useThreadContext } from \"../context\";\nimport { ActionBarPrimitive } from \"../primitives\";\n\nconst useAllowEdit = () => {\n const { userMessage: { allowEdit = true } = {} } = useThreadConfig();\n const { useThreadActions } = useThreadContext();\n const editSupported = useThreadActions((t) => t.capabilities.edit);\n return editSupported && allowEdit;\n};\n\nconst UserActionBar: FC = () => {\n const allowEdit = useAllowEdit();\n if (!allowEdit) return null;\n return (\n <UserActionBarRoot hideWhenRunning autohide=\"not-last\">\n <UserActionBarEdit />\n </UserActionBarRoot>\n );\n};\n\nUserActionBar.displayName = \"UserActionBar\";\n\nconst UserActionBarRoot = withDefaults(ActionBarPrimitive.Root, {\n className: \"aui-user-action-bar-root\",\n});\n\nUserActionBarRoot.displayName = \"UserActionBarRoot\";\n\nconst UserActionBarEdit = forwardRef<\n HTMLButtonElement,\n Partial<TooltipIconButtonProps>\n>((props, ref) => {\n const {\n strings: { userMessage: { edit: { tooltip = \"Edit\" } = {} } = {} } = {},\n } = useThreadConfig();\n const allowEdit = useAllowEdit();\n if (!allowEdit) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <TooltipIconButton tooltip={tooltip} {...props} ref={ref}>\n {props.children ?? <PencilIcon />}\n </TooltipIconButton>\n </ActionBarPrimitive.Edit>\n );\n});\n\nUserActionBarEdit.displayName = \"UserActionBarEdit\";\n\nconst exports = {\n Root: UserActionBarRoot,\n Edit: UserActionBarEdit,\n};\n\nexport default Object.assign(UserActionBar, exports) as typeof UserActionBar &\n typeof exports;\n","\"use client\";\n\nimport { forwardRef, type FC } from \"react\";\n\nimport { Button, ButtonProps } from \"./base/button\";\nimport { withDefaults } from \"./utils/withDefaults\";\nimport { useThreadConfig } from \"./thread-config\";\nimport { ComposerPrimitive } from \"../primitives\";\n\nconst EditComposer: FC = () => {\n return (\n <EditComposerRoot>\n <EditComposerInput />\n\n <EditComposerFooter>\n <EditComposerCancel />\n <EditComposerSend />\n </EditComposerFooter>\n </EditComposerRoot>\n );\n};\n\nEditComposer.displayName = \"EditComposer\";\n\nconst EditComposerRoot = withDefaults(ComposerPrimitive.Root, {\n className: \"aui-edit-composer-root\",\n});\n\nEditComposerRoot.displayName = \"EditComposerRoot\";\n\nconst EditComposerInput = withDefaults(ComposerPrimitive.Input, {\n className: \"aui-edit-composer-input\",\n});\n\nEditComposerInput.displayName = \"EditComposerInput\";\n\nconst EditComposerFooter = withDefaults(\"div\", {\n className: \"aui-edit-composer-footer\",\n});\n\nEditComposerFooter.displayName = \"EditComposerFooter\";\n\nconst EditComposerCancel = forwardRef<HTMLButtonElement, Partial<ButtonProps>>(\n (props, ref) => {\n const {\n strings: {\n editComposer: { cancel: { label = \"Cancel\" } = {} } = {},\n } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Cancel asChild>\n <Button variant=\"ghost\" {...props} ref={ref}>\n {props.children ?? label}\n </Button>\n </ComposerPrimitive.Cancel>\n );\n },\n);\n\nEditComposerCancel.displayName = \"EditComposerCancel\";\n\nconst EditComposerSend = forwardRef<HTMLButtonElement, Partial<ButtonProps>>(\n (props, ref) => {\n const {\n strings: { editComposer: { send: { label = \"Send\" } = {} } = {} } = {},\n } = useThreadConfig();\n return (\n <ComposerPrimitive.Send asChild>\n <Button {...props} ref={ref}>\n {props.children ?? label}\n </Button>\n </ComposerPrimitive.Send>\n );\n },\n);\n\nEditComposerSend.displayName = \"EditComposerSend\";\n\nconst exports = {\n Root: EditComposerRoot,\n Input: EditComposerInput,\n Footer: EditComposerFooter,\n Cancel: EditComposerCancel,\n Send: EditComposerSend,\n};\n\nexport default Object.assign(EditComposer, exports) as typeof EditComposer &\n typeof exports;\n"]}