@assistant-ui/react 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,6 +1,9 @@
1
1
  import {
2
- ProxyConfigProvider
3
- } from "./chunk-DKAWDNW5.mjs";
2
+ MessageRepository,
3
+ ProxyConfigProvider,
4
+ generateId,
5
+ mergeModelConfigs
6
+ } from "./chunk-NSBOH42A.mjs";
4
7
  import {
5
8
  AssistantContext,
6
9
  ContentPartContext,
@@ -13,7 +16,7 @@ import {
13
16
  } from "./chunk-CY4TTHR7.mjs";
14
17
  import {
15
18
  __export
16
- } from "./chunk-X4HBDEFP.mjs";
19
+ } from "./chunk-J5LGTIGS.mjs";
17
20
 
18
21
  // src/actions/useCopyMessage.tsx
19
22
  import { useCallback } from "react";
@@ -973,11 +976,114 @@ __export(contentPart_exports, {
973
976
  InProgressIndicator: () => ContentPartInProgressIndicator
974
977
  });
975
978
 
979
+ // src/runtime/local/useLocalRuntime.tsx
980
+ import { useInsertionEffect, useState as useState3 } from "react";
981
+
982
+ // src/runtime/local/LocalRuntime.tsx
983
+ var LocalRuntime = class {
984
+ constructor(adapter) {
985
+ this.adapter = adapter;
986
+ }
987
+ _subscriptions = /* @__PURE__ */ new Set();
988
+ _configProviders = /* @__PURE__ */ new Set();
989
+ abortController = null;
990
+ repository = new MessageRepository();
991
+ get messages() {
992
+ return this.repository.getMessages();
993
+ }
994
+ get isRunning() {
995
+ return this.abortController != null;
996
+ }
997
+ getBranches(messageId) {
998
+ return this.repository.getBranches(messageId);
999
+ }
1000
+ switchToBranch(branchId) {
1001
+ this.repository.switchToBranch(branchId);
1002
+ this.notifySubscribers();
1003
+ }
1004
+ async append(message) {
1005
+ const userMessageId = generateId();
1006
+ const userMessage = {
1007
+ id: userMessageId,
1008
+ role: "user",
1009
+ content: message.content,
1010
+ createdAt: /* @__PURE__ */ new Date()
1011
+ };
1012
+ this.repository.addOrUpdateMessage(message.parentId, userMessage);
1013
+ await this.startRun(userMessageId);
1014
+ }
1015
+ async startRun(parentId) {
1016
+ const id = generateId();
1017
+ this.repository.resetHead(parentId);
1018
+ const messages = this.repository.getMessages();
1019
+ const message = {
1020
+ id,
1021
+ role: "assistant",
1022
+ status: "in_progress",
1023
+ content: [{ type: "text", text: "" }],
1024
+ createdAt: /* @__PURE__ */ new Date()
1025
+ };
1026
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1027
+ this.abortController?.abort();
1028
+ this.abortController = new AbortController();
1029
+ this.notifySubscribers();
1030
+ try {
1031
+ const updateHandler = ({ content }) => {
1032
+ message.content = content;
1033
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1034
+ this.notifySubscribers();
1035
+ };
1036
+ const result = await this.adapter.run({
1037
+ messages,
1038
+ abortSignal: this.abortController.signal,
1039
+ config: mergeModelConfigs([...this._configProviders].map((p) => p())),
1040
+ onUpdate: updateHandler
1041
+ });
1042
+ updateHandler(result);
1043
+ message.status = "done";
1044
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1045
+ } catch (e) {
1046
+ message.status = "error";
1047
+ this.repository.addOrUpdateMessage(parentId, { ...message });
1048
+ console.error(e);
1049
+ } finally {
1050
+ this.abortController = null;
1051
+ this.notifySubscribers();
1052
+ }
1053
+ }
1054
+ cancelRun() {
1055
+ if (!this.abortController) return;
1056
+ this.abortController.abort();
1057
+ this.abortController = null;
1058
+ this.notifySubscribers();
1059
+ }
1060
+ notifySubscribers() {
1061
+ for (const callback of this._subscriptions) callback();
1062
+ }
1063
+ subscribe(callback) {
1064
+ this._subscriptions.add(callback);
1065
+ return () => this._subscriptions.delete(callback);
1066
+ }
1067
+ registerModelConfigProvider(provider) {
1068
+ this._configProviders.add(provider);
1069
+ return () => this._configProviders.delete(provider);
1070
+ }
1071
+ };
1072
+
1073
+ // src/runtime/local/useLocalRuntime.tsx
1074
+ var useLocalRuntime = (adapter) => {
1075
+ const [runtime] = useState3(() => new LocalRuntime(adapter));
1076
+ useInsertionEffect(() => {
1077
+ runtime.adapter = adapter;
1078
+ });
1079
+ return runtime;
1080
+ };
1081
+
976
1082
  // src/context/providers/AssistantRuntimeProvider.tsx
977
1083
  import { memo } from "react";
978
1084
 
979
1085
  // src/context/providers/AssistantProvider.tsx
980
- import { useEffect as useEffect7, useInsertionEffect as useInsertionEffect2, useRef as useRef5, useState as useState4 } from "react";
1086
+ import { useEffect as useEffect7, useInsertionEffect as useInsertionEffect3, useRef as useRef5, useState as useState5 } from "react";
981
1087
 
982
1088
  // src/context/stores/AssistantModelConfig.ts
983
1089
  import { create as create4 } from "zustand";
@@ -994,7 +1100,7 @@ var makeAssistantModelConfigStore = () => create4(() => {
994
1100
  });
995
1101
 
996
1102
  // src/context/providers/ThreadProvider.tsx
997
- import { useEffect as useEffect6, useInsertionEffect, useRef as useRef4, useState as useState3 } from "react";
1103
+ import { useEffect as useEffect6, useInsertionEffect as useInsertionEffect2, useRef as useRef4, useState as useState4 } from "react";
998
1104
 
999
1105
  // src/context/stores/Composer.ts
1000
1106
  import { create as create5 } from "zustand";
@@ -1070,10 +1176,10 @@ var ThreadProvider = ({
1070
1176
  runtime
1071
1177
  }) => {
1072
1178
  const runtimeRef = useRef4(runtime);
1073
- useInsertionEffect(() => {
1179
+ useInsertionEffect2(() => {
1074
1180
  runtimeRef.current = runtime;
1075
1181
  });
1076
- const [{ context, onRuntimeUpdate }] = useState3(() => {
1182
+ const [{ context, onRuntimeUpdate }] = useState4(() => {
1077
1183
  const { useThread, onRuntimeUpdate: onRuntimeUpdate2 } = makeThreadStore(runtimeRef);
1078
1184
  const useViewport = makeThreadViewportStore();
1079
1185
  const useComposer = makeComposerStore(useThread);
@@ -1101,10 +1207,10 @@ var ThreadProvider = ({
1101
1207
  import { jsx as jsx22 } from "react/jsx-runtime";
1102
1208
  var AssistantProvider = ({ children, runtime }) => {
1103
1209
  const runtimeRef = useRef5(runtime);
1104
- useInsertionEffect2(() => {
1210
+ useInsertionEffect3(() => {
1105
1211
  runtimeRef.current = runtime;
1106
1212
  });
1107
- const [context] = useState4(() => {
1213
+ const [context] = useState5(() => {
1108
1214
  const useModelConfig = makeAssistantModelConfigStore();
1109
1215
  return { useModelConfig };
1110
1216
  });
@@ -1133,6 +1239,7 @@ export {
1133
1239
  useCopyMessage,
1134
1240
  useGoToNextBranch,
1135
1241
  useGoToPreviousBranch,
1242
+ useLocalRuntime,
1136
1243
  useReloadMessage
1137
1244
  };
1138
1245
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/actions/useCopyMessage.tsx","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/actions/useReloadMessage.tsx","../src/actions/useBeginMessageEdit.tsx","../src/actions/useGoToNextBranch.tsx","../src/actions/useGoToPreviousBranch.tsx","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/MessageComposer.ts","../src/context/stores/BaseComposer.ts","../src/primitives/composer/ComposerIf.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/primitives/composer/index.ts","../src/primitives/composer/ComposerRoot.tsx","../src/primitives/composer/ComposerInput.tsx","../src/primitives/composer/ComposerSend.tsx","../src/primitives/composer/ComposerCancel.tsx","../src/primitives/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/context/providers/ContentPartProvider.tsx","../src/primitives/contentPart/ContentPartInProgressIndicator.tsx","../src/primitives/message/MessageContent.tsx","../src/primitives/message/MessageInProgress.tsx","../src/primitives/branchPicker/index.ts","../src/utils/createActionButton.tsx","../src/primitives/branchPicker/BranchPickerNext.tsx","../src/primitives/branchPicker/BranchPickerPrevious.tsx","../src/primitives/branchPicker/BranchPickerCount.tsx","../src/primitives/branchPicker/BranchPickerNumber.tsx","../src/primitives/branchPicker/BranchPickerRoot.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/contentPart/index.ts","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/AssistantProvider.tsx","../src/context/stores/AssistantModelConfig.ts","../src/context/providers/ThreadProvider.tsx","../src/context/stores/Composer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../utils/getMessageText\";\n\nexport const useCopyMessage = ({ copiedDuration = 3000 }) => {\n const { useMessage, useComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => {\n return c.isEditing || m.message.content.some((c) => c.type === \"text\");\n },\n );\n\n const callback = useCallback(() => {\n const { isEditing, value: composerValue } = useComposer.getState();\n const { message, setIsCopied } = useMessage.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n }, [useComposer, useMessage, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","\"use client\";\nimport { useMemo } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type { Unsubscribe } from \"../Unsubscribe\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n) => {\n const subscribe = (callback: () => void): Unsubscribe => {\n const unsubscribes = stores.map((store) => store.subscribe(callback));\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n };\n\n return (selector: CombinedSelector<T, R>): R => {\n const getSnapshot = (): R =>\n selector(...(stores.map((store) => store.getState()) as T));\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n","\"use client\";\nimport type { TextContentPart, ThreadMessage } from \"./AssistantTypes\";\n\nexport const getMessageText = (message: ThreadMessage) => {\n const textParts = message.content.filter(\n (part) => part.type === \"text\",\n ) as TextContentPart[];\n\n return textParts.map((part) => part.text).join(\"\\n\\n\");\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useReloadMessage = () => {\n const { useThread, useViewport } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThread.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n }, [useMessage, useThread, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useBeginMessageEdit = () => {\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useComposer.getState();\n edit();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToNextBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) =>\n c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToPreviousBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ThreadRoot as Root } from \"./ThreadRoot\";\nexport { ThreadEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadIf as If } from \"./ThreadIf\";\nexport { ThreadViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ThreadRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadRootProps = PrimitiveDivProps;\n\nexport const ThreadRoot = forwardRef<ThreadRootElement, ThreadRootProps>(\n (props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n },\n);\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n};\n\ntype ThreadIfProps = PropsWithChildren<RequireAtLeastOne<ThreadIfFilters>>;\n\nconst useThreadIf = (props: RequireAtLeastOne<ThreadIfFilters>) => {\n const { useThread } = useThreadContext();\n return useThread((thread) => {\n if (props.empty === true && thread.messages.length !== 0) return false;\n if (props.empty === false && thread.messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n\n return true;\n });\n};\n\nexport const ThreadIf: FC<ThreadIfProps> = ({ children, ...query }) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { ThreadIf } from \"./ThreadIf\";\n\ntype ThreadEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadEmpty: FC<ThreadEmptyProps> = ({ children }) => {\n return <ThreadIf empty>{children}</ThreadIf>;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ThreadViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadViewportProps = PrimitiveDivProps & {\n autoScroll?: boolean;\n};\n\nexport const ThreadViewport = forwardRef<\n ThreadViewportElement,\n ThreadViewportProps\n>(({ autoScroll = true, onScroll, children, ...rest }, forwardedRef) => {\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n const divRef = useRef<HTMLDivElement>(null);\n const ref = useComposedRefs(forwardedRef, divRef);\n\n const { useViewport } = useThreadContext();\n\n // TODO find a more elegant implementation for this\n\n const firstRenderRef = useRef(true);\n const isScrollingToBottomRef = useRef(false);\n const lastScrollTop = useRef<number>(0);\n\n const scrollToBottom = () => {\n const div = messagesEndRef.current;\n if (!div || !autoScroll) return;\n\n const behavior = firstRenderRef.current ? \"instant\" : \"auto\";\n firstRenderRef.current = false;\n\n isScrollingToBottomRef.current = true;\n div.scrollIntoView({ behavior });\n };\n\n useOnResizeContent(divRef, () => {\n if (!isScrollingToBottomRef.current && !useViewport.getState().isAtBottom) {\n handleScroll();\n } else {\n scrollToBottom();\n }\n });\n\n useOnScrollToBottom(() => {\n scrollToBottom();\n });\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else if (newIsAtBottom !== isAtBottom) {\n isScrollingToBottomRef.current = false;\n useViewport.setState({ isAtBottom: newIsAtBottom });\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n return (\n <Primitive.div\n {...rest}\n onScroll={composeEventHandlers(onScroll, handleScroll)}\n ref={ref}\n >\n {children}\n <div ref={messagesEndRef} />\n </Primitive.div>\n );\n});\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { type MutableRefObject, useEffect } from \"react\";\n\nexport const useOnResizeContent = (\n ref: MutableRefObject<HTMLElement | null>,\n callback: () => void,\n) => {\n const callbackRef = useCallbackRef(callback);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const resizeObserver = new ResizeObserver(() => {\n callbackRef();\n });\n\n const mutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n resizeObserver.observe(node);\n }\n }\n\n for (const node of mutation.removedNodes) {\n if (node instanceof Element) {\n resizeObserver.unobserve(node);\n }\n }\n }\n\n callbackRef();\n });\n\n resizeObserver.observe(el);\n mutationObserver.observe(el, { childList: true });\n\n // Observe existing children\n for (const child of el.children) {\n resizeObserver.observe(child);\n }\n\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [ref.current, callbackRef]);\n};\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\nexport const useOnScrollToBottom = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useViewport } = useThreadContext();\n useEffect(() => {\n return useViewport.getState().onScrollToBottom(() => {\n callbackRef();\n });\n }, [useViewport, callbackRef]);\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport type {\n AppendContentPart,\n ThreadMessage,\n} from \"../../utils/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../MessageContext\";\nimport type { MessageContextValue } from \"../MessageContext\";\nimport { useThreadContext } from \"../ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/MessageComposer\";\nimport type { ThreadState } from \"../stores/Thread\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (thread: ThreadState, message: ThreadMessage) => {\n return thread.messages[thread.messages.length - 1]?.id === message.id;\n};\n\nconst syncMessage = (\n thread: ThreadState,\n useMessage: MessageContextValue[\"useMessage\"],\n messageIndex: number,\n) => {\n const parentId = thread.messages[messageIndex - 1]?.id ?? null;\n const message = thread.messages[messageIndex];\n\n // TODO check if this can happen\n if (!message) return;\n\n const isLast = getIsLast(thread, message);\n const branches = thread.getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage.getState();\n if (\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return;\n\n // sync useMessage\n useMessage.setState({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThread } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>((set) => ({\n message: null as unknown as ThreadMessage,\n parentId: null,\n branches: [],\n isLast: false,\n inProgressIndicator: null,\n isCopied: false,\n isHovering: false,\n setInProgressIndicator: (value) => {\n set({ inProgressIndicator: value });\n },\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n\n const useComposer = makeEditComposerStore({\n onEdit: () => {\n const message = useMessage.getState().message;\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const text = getMessageText(message);\n\n return text;\n },\n onSend: (text) => {\n const { message, parentId } = useMessage.getState();\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const nonTextParts = message.content.filter(\n (part): part is AppendContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThread.getState().append({\n parentId,\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n syncMessage(useThread.getState(), useMessage, messageIndex);\n\n return { useMessage, useComposer };\n });\n\n useEffect(() => {\n return useThread.subscribe((thread) => {\n syncMessage(thread, context.useMessage, messageIndex);\n });\n }, [context, useThread, messageIndex]);\n\n return context;\n};\n\nexport const MessageProvider: FC<MessageProviderProps> = ({\n messageIndex,\n children,\n}) => {\n const context = useMessageContext(messageIndex);\n\n return (\n <MessageContext.Provider value={context}>\n {children}\n </MessageContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): UseBoundStore<StoreApi<EditComposerState>> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false });\n onSend(value);\n },\n cancel: () => {\n if (!get().isEditing) return false;\n set({ isEditing: false });\n return true;\n },\n }));\n","import type { StateCreator } from \"zustand\";\n\nexport type BaseComposerState = Readonly<{\n value: string;\n setValue: (value: string) => void;\n}>;\n\nexport const makeBaseComposer: StateCreator<\n BaseComposerState,\n [],\n [],\n BaseComposerState\n> = (set) => ({\n value: \"\",\n setValue: (value) => {\n set({ value });\n },\n});\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\ntype ComposerIfProps = PropsWithChildren<RequireAtLeastOne<ComposerIfFilters>>;\n\nconst useComposerIf = (props: RequireAtLeastOne<ComposerIfFilters>) => {\n const { useComposer } = useComposerContext();\n return useComposer((composer) => {\n if (props.editing === true && !composer.isEditing) return false;\n if (props.editing === false && composer.isEditing) return false;\n\n return true;\n });\n};\n\nexport const ComposerIf: FC<ComposerIfProps> = ({ children, ...query }) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\n\ntype MessageIfProps = RequireAtLeastOne<MessageIfFilters> & {\n children: ReactNode;\n};\n\nexport const useMessageIf = (props: RequireAtLeastOne<MessageIfFilters>) => {\n const { useMessage } = useMessageContext();\n\n return useMessage(({ message, branches, isLast, isCopied, isHovering }) => {\n if (props.hasBranches === true && branches.length < 2) return false;\n\n if (props.user && message.role !== \"user\") return false;\n if (props.assistant && message.role !== \"assistant\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n return true;\n });\n};\n\nexport const MessageIf: FC<MessageIfProps> = ({ children, ...query }) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { ComponentType, FC } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerIf } from \"../composer/ComposerIf\";\nimport { MessageIf } from \"../message/MessageIf\";\n\ntype ThreadMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage?: ComponentType;\n }\n | {\n Message?: ComponentType;\n UserMessage: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage: ComponentType;\n };\n};\n\nconst getComponents = (components: ThreadMessagesProps[\"components\"]) => {\n return {\n EditComposer:\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType),\n UserMessage:\n components.UserMessage ?? (components.Message as ComponentType),\n AssistantMessage:\n components.AssistantMessage ?? (components.Message as ComponentType),\n };\n};\n\nexport const ThreadMessages: FC<ThreadMessagesProps> = ({ components }) => {\n const { useThread } = useThreadContext();\n const messagesLength = useThread((t) => t.messages.length);\n\n const { UserMessage, EditComposer, AssistantMessage } =\n getComponents(components);\n\n if (messagesLength === 0) return null;\n\n return (\n <>\n {new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx;\n // TODO avoid rerendering on messageLength change\n return (\n <MessageProvider\n key={messageIndex} // keep the same key when switching branches for better a11y support\n messageIndex={messageIndex}\n >\n <MessageIf user>\n <ComposerIf editing={false}>\n <UserMessage />\n </ComposerIf>\n <ComposerIf editing>\n <EditComposer />\n </ComposerIf>\n </MessageIf>\n <MessageIf assistant>\n <AssistantMessage />\n </MessageIf>\n </MessageProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadScrollToBottomElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadScrollToBottomProps = PrimitiveButtonProps;\n\nexport const ThreadScrollToBottom = forwardRef<\n ThreadScrollToBottomElement,\n ThreadScrollToBottomProps\n>(({ onClick, ...rest }, ref) => {\n const { useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n const handleScrollToBottom = () => {\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isAtBottom}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleScrollToBottom)}\n />\n );\n});\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadSuggestionElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadSuggestionProps = PrimitiveButtonProps & {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean;\n};\n\nexport const ThreadSuggestion = forwardRef<\n ThreadSuggestionElement,\n ThreadSuggestionProps\n>(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {\n const { useThread, useComposer } = useThreadContext();\n\n const isDisabled = useThread((t) => t.isRunning);\n const handleApplySuggestion = () => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n composer.setValue(prompt);\n\n if (send && !thread.isRunning) {\n composer.send();\n }\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isDisabled}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleApplySuggestion)}\n />\n );\n});\n","export { ComposerRoot as Root } from \"./ComposerRoot\";\nexport { ComposerInput as Input } from \"./ComposerInput\";\nexport { ComposerSend as Send } from \"./ComposerSend\";\nexport { ComposerCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, type FormEvent, forwardRef, useRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ComposerRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\ntype ComposerRootProps = PrimitiveFormProps;\n\nexport const ComposerRoot = forwardRef<ComposerRootElement, ComposerRootProps>(\n ({ onSubmit, ...rest }, forwardedRef) => {\n const { useViewport } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const formRef = useRef<HTMLFormElement>(null);\n const ref = useComposedRefs(forwardedRef, formRef);\n\n const handleSubmit = (e: FormEvent) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n e.preventDefault();\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={ref}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n} from \"react-textarea-autosize\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ComposerInputProps = TextareaAutosizeProps & {\n asChild?: boolean;\n};\n\nexport const ComposerInput = forwardRef<\n HTMLTextAreaElement,\n ComposerInputProps\n>(\n (\n { autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest },\n forwardedRef,\n ) => {\n const { useThread, useViewport } = useThreadContext();\n const { useComposer, type } = useComposerContext();\n\n const value = useComposer((c) => {\n if (!c.isEditing) return \"\";\n return c.value;\n });\n\n const Component = asChild ? Slot : TextareaAutosize;\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (disabled) return;\n\n const composer = useComposer.getState();\n if (e.key === \"Escape\") {\n if (useComposer.getState().cancel()) {\n e.preventDefault();\n }\n } else if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n composer.send();\n\n useViewport.getState().scrollToBottom();\n }\n }\n };\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n const autoFocusEnabled = autoFocus && !disabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus();\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n value={value}\n {...rest}\n ref={ref}\n disabled={disabled}\n onChange={composeEventHandlers(onChange, (e) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n return composerState.setValue(e.target.value);\n })}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyPress)}\n />\n );\n },\n);\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerSendProps = PrimitiveFormProps;\n\nexport const ComposerSend = forwardRef<ComposerSendElement, ComposerSendProps>(\n ({ disabled, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);\n\n return (\n <Primitive.button\n type=\"submit\"\n {...rest}\n ref={ref}\n disabled={disabled || !hasValue}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerCancelElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerCancelProps = PrimitiveFormProps;\n\nexport const ComposerCancel = forwardRef<\n ComposerCancelElement,\n ComposerCancelProps\n>(({ onClick, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n\n const handleCancel = () => {\n useComposer.getState().cancel();\n };\n\n return (\n <Primitive.button\n type=\"button\"\n {...rest}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleCancel)}\n />\n );\n});\n","export { MessageRoot as Root } from \"./MessageRoot\";\nexport { MessageIf as If } from \"./MessageIf\";\nexport { MessageContent as Content } from \"./MessageContent\";\nexport { MessageInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype MessageRootProps = PrimitiveDivProps;\n\nexport const MessageRoot = forwardRef<MessageRootElement, MessageRootProps>(\n ({ onMouseEnter, onMouseLeave, ...rest }, ref) => {\n const { useMessage } = useMessageContext();\n const setIsHovering = useMessage((s) => s.setIsHovering);\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n return (\n <Primitive.div\n {...rest}\n ref={ref}\n onMouseEnter={composeEventHandlers(onMouseEnter, handleMouseEnter)}\n onMouseLeave={composeEventHandlers(onMouseLeave, handleMouseLeave)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { ContentPartContext } from \"../ContentPartContext\";\nimport type { ContentPartContextValue } from \"../ContentPartContext\";\nimport { useMessageContext } from \"../MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst syncContentPart = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"],\n partIndex: number,\n) => {\n const part = message.content[partIndex];\n // TODO check if this can happen\n if (!part) return;\n\n const messageStatus = message.role === \"assistant\" ? message.status : \"done\";\n const status =\n partIndex === message.content.length - 1 ? messageStatus : \"done\";\n\n useContentPart.setState({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(() => ({\n part: { type: \"text\", text: \"\" },\n status: \"done\",\n }));\n\n syncContentPart(useMessage.getState(), useContentPart, partIndex);\n\n return { useContentPart };\n });\n\n useEffect(() => {\n return useMessage.subscribe((message) => {\n syncContentPart(message, context.useContentPart, partIndex);\n });\n }, [context, useMessage, partIndex]);\n\n return context;\n};\n\nexport const ContentPartProvider: FC<ContentPartProviderProps> = ({\n partIndex,\n children,\n}) => {\n const context = useContentPartContext(partIndex);\n\n return (\n <ContentPartContext.Provider value={context}>\n {children}\n </ContentPartContext.Provider>\n );\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const ContentPartInProgressIndicator: FC = () => {\n const { useMessage } = useMessageContext();\n const { useContentPart } = useContentPartContext();\n\n const indicator = useCombinedStore([useMessage, useContentPart], (m, c) =>\n c.status === \"in_progress\" ? m.inProgressIndicator : null,\n );\n return indicator;\n};\n","\"use client\";\n\nimport type { ComponentType, FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { ContentPartProvider } from \"../../context/providers/ContentPartProvider\";\nimport type {\n ImageContentPart,\n TextContentPart,\n ToolCallContentPart,\n UIContentPart,\n} from \"../../utils/AssistantTypes\";\nimport { ContentPartInProgressIndicator } from \"../contentPart/ContentPartInProgressIndicator\";\n\ntype MessageContentProps = {\n components?: {\n Text?: ComponentType<{ part: TextContentPart }>;\n Image?: ComponentType<{ part: ImageContentPart }>;\n UI?: ComponentType<{ part: UIContentPart }>;\n tools?: {\n by_name?: Record<string, ComponentType<{ part: ToolCallContentPart }>>;\n Fallback?: ComponentType<{ part: ToolCallContentPart }>;\n };\n };\n};\n\nconst defaultComponents = {\n Text: ({ part }) => (\n <>\n {part.text}\n <ContentPartInProgressIndicator />\n </>\n ),\n Image: () => null,\n UI: ({ part }) => part.display,\n tools: {\n Fallback: () => null,\n },\n} satisfies MessageContentProps[\"components\"];\n\nexport const MessageContent: FC<MessageContentProps> = ({\n components: {\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useMessage } = useMessageContext();\n\n const message = useMessage((s) => s.message);\n const content = message.content;\n\n return (\n <>\n {content.map((part, i) => {\n const partIndex = i; // use the index as key, as message is generally append only\n\n const type = part.type;\n let component: ReactNode | null = null;\n switch (type) {\n case \"text\":\n component = <Text part={part} />;\n break;\n\n case \"image\":\n component = <Image part={part} />;\n break;\n case \"ui\":\n component = <UI part={part} />;\n break;\n case \"tool-call\": {\n const Tool = by_name[part.name] || Fallback;\n component = <Tool part={part} />;\n break;\n }\n default:\n throw new Error(`Unknown content part type: ${type}`);\n }\n\n return (\n <ContentPartProvider key={partIndex} partIndex={partIndex}>\n {component}\n </ContentPartProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useMemo } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageInProgressElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype MessageInProgressProps = PrimitiveSpanProps;\n\nexport const MessageInProgress = forwardRef<\n MessageInProgressElement,\n MessageInProgressProps\n>((props, ref) => {\n const { useMessage } = useMessageContext();\n\n useMemo(() => {\n useMessage\n .getState()\n .setInProgressIndicator(<Primitive.span {...props} ref={ref} />);\n }, [useMessage, props, ref]);\n\n return null;\n});\n","export { BranchPickerNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\nexport const createActionButton = <TProps,>(\n useActionButton: ActionButtonCallback<TProps>,\n) => {\n type PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\n type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\n return forwardRef<PrimitiveButtonElement, PrimitiveButtonProps & TProps>(\n (props, forwardedRef) => {\n const onClick = useActionButton(props);\n\n return (\n <Primitive.button\n type=\"button\"\n disabled={!onClick}\n {...props}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, onClick ?? undefined)}\n />\n );\n },\n );\n};\n","\"use client\";\n\nimport { useGoToNextBranch } from \"../../actions/useGoToNextBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerNext = createActionButton(useGoToNextBranch);\n","\"use client\";\n\nimport { useGoToPreviousBranch } from \"../../actions/useGoToPreviousBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerPrevious = createActionButton(useGoToPreviousBranch);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerCount: FC = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return <>{branchCount}</>;\n};\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerNumber: FC = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return <>{branchIdx + 1}</>;\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype BranchPickerRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean;\n};\n\nexport const BranchPickerRoot = forwardRef<\n BranchPickerRootElement,\n BranchPickerRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n","export { ActionBarRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ActionBarRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nenum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type ActionBarRootProps = PrimitiveDivProps & {\n hideWhenRunning?: boolean;\n autohide?: \"always\" | \"not-last\" | \"never\";\n autohideFloat?: \"always\" | \"single-branch\" | \"never\";\n};\n\nexport const ActionBarRoot = forwardRef<\n ActionBarRootElement,\n ActionBarRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const { useThread } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const hideAndfloatStatus = useCombinedStore(\n [useThread, useMessage],\n (t, m) => {\n if (hideWhenRunning && t.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !m.isLast);\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!m.isHovering) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && m.branches.length <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n },\n );\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n data-floating={hideAndfloatStatus === HideAndFloatStatus.Floating}\n {...rest}\n ref={ref}\n />\n );\n});\n","\"use client\";\n\nimport { useCopyMessage } from \"../../actions/useCopyMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\ntype ActionBarCopyProps = {\n copiedDuration?: number;\n};\n\nexport const ActionBarCopy =\n createActionButton<ActionBarCopyProps>(useCopyMessage);\n","\"use client\";\n\nimport { useReloadMessage } from \"../../actions/useReloadMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarReload = createActionButton(useReloadMessage);\n","\"use client\";\n\nimport { useBeginMessageEdit } from \"../../actions/useBeginMessageEdit\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarEdit = createActionButton(useBeginMessageEdit);\n","export { ContentPartInProgressIndicator as InProgressIndicator } from \"./ContentPartInProgressIndicator\";\n","import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime/core/AssistantRuntime\";\nimport { AssistantProvider } from \"./AssistantProvider\";\n\ntype AssistantRuntimeProviderProps = {\n runtime: AssistantRuntime;\n};\n\nconst AssistantRuntimeProviderImpl: FC<\n PropsWithChildren<AssistantRuntimeProviderProps>\n> = ({ children, runtime }) => {\n return <AssistantProvider runtime={runtime}>{children}</AssistantProvider>;\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime\";\nimport { AssistantContext } from \"../AssistantContext\";\nimport { makeAssistantModelConfigStore } from \"../stores/AssistantModelConfig\";\nimport { ThreadProvider } from \"./ThreadProvider\";\n\ntype AssistantProviderProps = {\n runtime: AssistantRuntime;\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<AssistantProviderProps>\n> = ({ children, runtime }) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [context] = useState(() => {\n const useModelConfig = makeAssistantModelConfigStore();\n\n return { useModelConfig };\n });\n\n const getModelCOnfig = context.useModelConfig((c) => c.getModelConfig);\n useEffect(() => {\n return runtime.registerModelConfigProvider(getModelCOnfig);\n }, [runtime, getModelCOnfig]);\n\n return (\n <AssistantContext.Provider value={context}>\n <ThreadProvider runtime={runtime}>{children}</ThreadProvider>\n </AssistantContext.Provider>\n );\n};\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ModelConfigProvider } from \"../../utils/ModelConfigTypes\";\nimport { ProxyConfigProvider } from \"../../utils/ProxyConfigProvider\";\n\nexport type AssistantModelConfigState = {\n getModelConfig: ModelConfigProvider;\n registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;\n};\n\nexport const makeAssistantModelConfigStore = () =>\n create<AssistantModelConfigState>(() => {\n const proxy = new ProxyConfigProvider();\n\n return {\n getModelConfig: () => {\n return proxy.getModelConfig();\n },\n registerModelConfigProvider: (provider: ModelConfigProvider) => {\n return proxy.registerModelConfigProvider(provider);\n },\n } satisfies AssistantModelConfigState;\n });\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtime/core/ReactThreadRuntime\";\nimport type { ThreadRuntime } from \"../../runtime/core/ThreadRuntime\";\nimport type { ThreadContextValue } from \"../ThreadContext\";\nimport { ThreadContext } from \"../ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\n\ntype ThreadProviderProps = {\n runtime: ThreadRuntime;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n runtime,\n}) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [{ context, onRuntimeUpdate }] = useState(() => {\n const { useThread, onRuntimeUpdate } = makeThreadStore(runtimeRef);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThread);\n\n return {\n context: {\n useViewport,\n useThread,\n useComposer,\n } satisfies ThreadContextValue,\n onRuntimeUpdate,\n };\n });\n\n useEffect(() => {\n // whenever the runtime changes\n onRuntimeUpdate();\n\n // subscribe to runtime updates\n return runtime.subscribe(onRuntimeUpdate);\n }, [onRuntimeUpdate, runtime]);\n\n const RuntimeSynchronizer = (runtime as ReactThreadRuntime)\n .unstable_synchronizer;\n\n return (\n <ThreadContext.Provider value={context}>\n {RuntimeSynchronizer && <RuntimeSynchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport type { ThreadState } from \"./Thread\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n isEditing: true;\n\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeComposerStore = (\n useThread: StoreApi<ThreadState>,\n): UseBoundStore<StoreApi<ComposerState>> =>\n create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThread.getState().append({\n parentId: useThread.getState().messages.at(-1)?.id ?? null,\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n const thread = useThread.getState();\n if (!thread.isRunning) return false;\n\n useThread.getState().cancelRun();\n return true;\n },\n };\n });\n","import type { MutableRefObject } from \"react\";\nimport { create } from \"zustand\";\nimport type { AppendMessage, ThreadMessage } from \"../../utils/AssistantTypes\";\n\nexport type ThreadState = {\n messages: readonly ThreadMessage[];\n isRunning: boolean;\n\n getBranches: (messageId: string) => readonly string[];\n switchToBranch: (branchId: string) => void;\n\n append: (message: AppendMessage) => void;\n startRun: (parentId: string | null) => void;\n cancelRun: () => void;\n};\n\nexport const makeThreadStore = (runtimeRef: MutableRefObject<ThreadState>) => {\n const useThread = create<ThreadState>(() => ({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n getBranches: (messageId) => runtimeRef.current.getBranches(messageId),\n switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),\n startRun: (parentId) => runtimeRef.current.startRun(parentId),\n append: (message) => runtimeRef.current.append(message),\n cancelRun: () => runtimeRef.current.cancelRun(),\n }));\n\n const onRuntimeUpdate = () => {\n useThread.setState({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n });\n };\n\n return {\n useThread,\n onRuntimeUpdate,\n };\n};\n","\"use client\";\nimport { create } from \"zustand\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\n\nexport type ThreadViewportState = {\n isAtBottom: boolean;\n scrollToBottom: () => void;\n onScrollToBottom: (callback: () => void) => Unsubscribe;\n};\n\nexport const makeThreadViewportStore = () => {\n const scrollToBottomListeners = new Set<() => void>();\n\n return create<ThreadViewportState>(() => ({\n isAtBottom: true,\n scrollToBottom: () => {\n for (const listener of scrollToBottomListeners) {\n listener();\n }\n },\n onScrollToBottom: (callback) => {\n scrollToBottomListeners.add(callback);\n return () => {\n scrollToBottomListeners.delete(callback);\n };\n },\n }));\n};\n"],"mappings":"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","names":["c","useCallback","useCallback","useCallback","useCallback","useCallback","useCallback","useCallback","useCallback","jsx","Primitive","forwardRef","useCallbackRef","useEffect","useCallbackRef","useEffect","jsx","forwardRef","Primitive","useEffect","create","jsx","useMessageContext","create","useEffect","jsx","jsxs","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","composeEventHandlers","useComposedRefs","Primitive","forwardRef","useRef","jsx","forwardRef","useRef","useComposedRefs","Primitive","composeEventHandlers","composeEventHandlers","useComposedRefs","forwardRef","useCallback","useEffect","useRef","jsx","forwardRef","useRef","useComposedRefs","useCallback","useEffect","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","useEffect","useState","create","jsx","useContentPartContext","useState","create","useEffect","Fragment","jsx","jsxs","Primitive","forwardRef","useMemo","jsx","forwardRef","useMemo","Primitive","composeEventHandlers","Primitive","forwardRef","jsx","Fragment","jsx","Fragment","jsx","Primitive","forwardRef","jsx","forwardRef","Primitive","Primitive","forwardRef","jsx","forwardRef","jsx","Primitive","useEffect","useInsertionEffect","useRef","useState","create","create","useEffect","useRef","useState","create","create","create","create","jsx","jsxs","useRef","useState","onRuntimeUpdate","useEffect","jsx","useRef","useInsertionEffect","useState","useEffect","jsx"]}
1
+ {"version":3,"sources":["../src/actions/useCopyMessage.tsx","../src/utils/combined/useCombinedStore.ts","../src/utils/combined/createCombinedStore.ts","../src/utils/getMessageText.tsx","../src/actions/useReloadMessage.tsx","../src/actions/useBeginMessageEdit.tsx","../src/actions/useGoToNextBranch.tsx","../src/actions/useGoToPreviousBranch.tsx","../src/primitives/thread/index.ts","../src/primitives/thread/ThreadRoot.tsx","../src/primitives/thread/ThreadIf.tsx","../src/primitives/thread/ThreadEmpty.tsx","../src/primitives/thread/ThreadViewport.tsx","../src/utils/hooks/useOnResizeContent.tsx","../src/utils/hooks/useOnScrollToBottom.tsx","../src/context/providers/MessageProvider.tsx","../src/context/stores/MessageComposer.ts","../src/context/stores/BaseComposer.ts","../src/primitives/composer/ComposerIf.tsx","../src/primitives/message/MessageIf.tsx","../src/primitives/thread/ThreadMessages.tsx","../src/primitives/thread/ThreadScrollToBottom.tsx","../src/primitives/thread/ThreadSuggestion.tsx","../src/primitives/composer/index.ts","../src/primitives/composer/ComposerRoot.tsx","../src/primitives/composer/ComposerInput.tsx","../src/primitives/composer/ComposerSend.tsx","../src/primitives/composer/ComposerCancel.tsx","../src/primitives/message/index.ts","../src/primitives/message/MessageRoot.tsx","../src/context/providers/ContentPartProvider.tsx","../src/primitives/contentPart/ContentPartInProgressIndicator.tsx","../src/primitives/message/MessageContent.tsx","../src/primitives/message/MessageInProgress.tsx","../src/primitives/branchPicker/index.ts","../src/utils/createActionButton.tsx","../src/primitives/branchPicker/BranchPickerNext.tsx","../src/primitives/branchPicker/BranchPickerPrevious.tsx","../src/primitives/branchPicker/BranchPickerCount.tsx","../src/primitives/branchPicker/BranchPickerNumber.tsx","../src/primitives/branchPicker/BranchPickerRoot.tsx","../src/primitives/actionBar/index.ts","../src/primitives/actionBar/ActionBarRoot.tsx","../src/primitives/actionBar/ActionBarCopy.tsx","../src/primitives/actionBar/ActionBarReload.tsx","../src/primitives/actionBar/ActionBarEdit.tsx","../src/primitives/contentPart/index.ts","../src/runtime/local/useLocalRuntime.tsx","../src/runtime/local/LocalRuntime.tsx","../src/context/providers/AssistantRuntimeProvider.tsx","../src/context/providers/AssistantProvider.tsx","../src/context/stores/AssistantModelConfig.ts","../src/context/providers/ThreadProvider.tsx","../src/context/stores/Composer.ts","../src/context/stores/Thread.ts","../src/context/stores/ThreadViewport.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\nimport { getMessageText } from \"../utils/getMessageText\";\n\nexport const useCopyMessage = ({ copiedDuration = 3000 }) => {\n const { useMessage, useComposer } = useMessageContext();\n\n const hasCopyableContent = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => {\n return c.isEditing || m.message.content.some((c) => c.type === \"text\");\n },\n );\n\n const callback = useCallback(() => {\n const { isEditing, value: composerValue } = useComposer.getState();\n const { message, setIsCopied } = useMessage.getState();\n\n const valueToCopy = isEditing ? composerValue : getMessageText(message);\n\n navigator.clipboard.writeText(valueToCopy);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n }, [useComposer, useMessage, copiedDuration]);\n\n if (!hasCopyableContent) return null;\n return callback;\n};\n","\"use client\";\nimport { useMemo } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport {\n type CombinedSelector,\n createCombinedStore,\n} from \"./createCombinedStore\";\n\nexport const useCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n selector: CombinedSelector<T, R>,\n): R => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: shallow-compare the store array\n const useCombined = useMemo(() => createCombinedStore<T, R>(stores), stores);\n return useCombined(selector);\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type { Unsubscribe } from \"../Unsubscribe\";\n\nexport type CombinedSelector<T extends Array<unknown>, R> = (...args: T) => R;\n\nexport const createCombinedStore = <T extends Array<unknown>, R>(\n stores: { [K in keyof T]: StoreApi<T[K]> },\n) => {\n const subscribe = (callback: () => void): Unsubscribe => {\n const unsubscribes = stores.map((store) => store.subscribe(callback));\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n };\n\n return (selector: CombinedSelector<T, R>): R => {\n const getSnapshot = (): R =>\n selector(...(stores.map((store) => store.getState()) as T));\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n };\n};\n","\"use client\";\nimport type { TextContentPart, ThreadMessage } from \"./AssistantTypes\";\n\nexport const getMessageText = (message: ThreadMessage) => {\n const textParts = message.content.filter(\n (part) => part.type === \"text\",\n ) as TextContentPart[];\n\n return textParts.map((part) => part.text).join(\"\\n\\n\");\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useReloadMessage = () => {\n const { useThread, useViewport } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useThread, useMessage],\n (t, m) => t.isRunning || m.message.role !== \"assistant\",\n );\n\n const callback = useCallback(() => {\n const { parentId } = useMessage.getState();\n useThread.getState().startRun(parentId);\n useViewport.getState().scrollToBottom();\n }, [useMessage, useThread, useViewport]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useBeginMessageEdit = () => {\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => m.message.role !== \"user\" || c.isEditing,\n );\n\n const callback = useCallback(() => {\n const { edit } = useComposer.getState();\n edit();\n }, [useComposer]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToNextBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) =>\n c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) + 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","import { useCallback } from \"react\";\nimport { useMessageContext } from \"../context/MessageContext\";\nimport { useThreadContext } from \"../context/ThreadContext\";\nimport { useCombinedStore } from \"../utils/combined/useCombinedStore\";\n\nexport const useGoToPreviousBranch = () => {\n const { useThread } = useThreadContext();\n const { useMessage, useComposer } = useMessageContext();\n\n const disabled = useCombinedStore(\n [useMessage, useComposer],\n (m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0,\n );\n\n const callback = useCallback(() => {\n const { message, branches } = useMessage.getState();\n useThread\n .getState()\n .switchToBranch(branches[branches.indexOf(message.id) - 1]!);\n }, [useMessage, useThread]);\n\n if (disabled) return null;\n return callback;\n};\n","export { ThreadRoot as Root } from \"./ThreadRoot\";\nexport { ThreadEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadIf as If } from \"./ThreadIf\";\nexport { ThreadViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadSuggestion as Suggestion } from \"./ThreadSuggestion\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ThreadRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadRootProps = PrimitiveDivProps;\n\nexport const ThreadRoot = forwardRef<ThreadRootElement, ThreadRootProps>(\n (props, ref) => {\n return <Primitive.div {...props} ref={ref} />;\n },\n);\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ThreadIfFilters = {\n empty: boolean | undefined;\n running: boolean | undefined;\n};\n\ntype ThreadIfProps = PropsWithChildren<RequireAtLeastOne<ThreadIfFilters>>;\n\nconst useThreadIf = (props: RequireAtLeastOne<ThreadIfFilters>) => {\n const { useThread } = useThreadContext();\n return useThread((thread) => {\n if (props.empty === true && thread.messages.length !== 0) return false;\n if (props.empty === false && thread.messages.length === 0) return false;\n if (props.running === true && !thread.isRunning) return false;\n if (props.running === false && thread.isRunning) return false;\n\n return true;\n });\n};\n\nexport const ThreadIf: FC<ThreadIfProps> = ({ children, ...query }) => {\n const result = useThreadIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { ThreadIf } from \"./ThreadIf\";\n\ntype ThreadEmptyProps = {\n children: ReactNode;\n};\n\nexport const ThreadEmpty: FC<ThreadEmptyProps> = ({ children }) => {\n return <ThreadIf empty>{children}</ThreadIf>;\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnResizeContent } from \"../../utils/hooks/useOnResizeContent\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ThreadViewportElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype ThreadViewportProps = PrimitiveDivProps & {\n autoScroll?: boolean;\n};\n\nexport const ThreadViewport = forwardRef<\n ThreadViewportElement,\n ThreadViewportProps\n>(({ autoScroll = true, onScroll, children, ...rest }, forwardedRef) => {\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n const divRef = useRef<HTMLDivElement>(null);\n const ref = useComposedRefs(forwardedRef, divRef);\n\n const { useViewport } = useThreadContext();\n\n // TODO find a more elegant implementation for this\n\n const firstRenderRef = useRef(true);\n const isScrollingToBottomRef = useRef(false);\n const lastScrollTop = useRef<number>(0);\n\n const scrollToBottom = () => {\n const div = messagesEndRef.current;\n if (!div || !autoScroll) return;\n\n const behavior = firstRenderRef.current ? \"instant\" : \"auto\";\n firstRenderRef.current = false;\n\n isScrollingToBottomRef.current = true;\n div.scrollIntoView({ behavior });\n };\n\n useOnResizeContent(divRef, () => {\n if (!isScrollingToBottomRef.current && !useViewport.getState().isAtBottom) {\n handleScroll();\n } else {\n scrollToBottom();\n }\n });\n\n useOnScrollToBottom(() => {\n scrollToBottom();\n });\n\n const handleScroll = () => {\n const div = divRef.current;\n if (!div) return;\n\n const isAtBottom = useViewport.getState().isAtBottom;\n const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;\n\n if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {\n // ignore scroll down\n } else if (newIsAtBottom !== isAtBottom) {\n isScrollingToBottomRef.current = false;\n useViewport.setState({ isAtBottom: newIsAtBottom });\n }\n\n lastScrollTop.current = div.scrollTop;\n };\n\n return (\n <Primitive.div\n {...rest}\n onScroll={composeEventHandlers(onScroll, handleScroll)}\n ref={ref}\n >\n {children}\n <div ref={messagesEndRef} />\n </Primitive.div>\n );\n});\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { type MutableRefObject, useEffect } from \"react\";\n\nexport const useOnResizeContent = (\n ref: MutableRefObject<HTMLElement | null>,\n callback: () => void,\n) => {\n const callbackRef = useCallbackRef(callback);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const resizeObserver = new ResizeObserver(() => {\n callbackRef();\n });\n\n const mutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n resizeObserver.observe(node);\n }\n }\n\n for (const node of mutation.removedNodes) {\n if (node instanceof Element) {\n resizeObserver.unobserve(node);\n }\n }\n }\n\n callbackRef();\n });\n\n resizeObserver.observe(el);\n mutationObserver.observe(el, { childList: true });\n\n // Observe existing children\n for (const child of el.children) {\n resizeObserver.observe(child);\n }\n\n return () => {\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [ref.current, callbackRef]);\n};\n","\"use client\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffect } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\nexport const useOnScrollToBottom = (callback: () => void) => {\n const callbackRef = useCallbackRef(callback);\n\n const { useViewport } = useThreadContext();\n useEffect(() => {\n return useViewport.getState().onScrollToBottom(() => {\n callbackRef();\n });\n }, [useViewport, callbackRef]);\n};\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport type {\n AppendContentPart,\n ThreadMessage,\n} from \"../../utils/AssistantTypes\";\nimport { getMessageText } from \"../../utils/getMessageText\";\nimport { MessageContext } from \"../MessageContext\";\nimport type { MessageContextValue } from \"../MessageContext\";\nimport { useThreadContext } from \"../ThreadContext\";\nimport type { MessageState } from \"../stores/Message\";\nimport { makeEditComposerStore } from \"../stores/MessageComposer\";\nimport type { ThreadState } from \"../stores/Thread\";\n\ntype MessageProviderProps = PropsWithChildren<{\n messageIndex: number;\n}>;\n\nconst getIsLast = (thread: ThreadState, message: ThreadMessage) => {\n return thread.messages[thread.messages.length - 1]?.id === message.id;\n};\n\nconst syncMessage = (\n thread: ThreadState,\n useMessage: MessageContextValue[\"useMessage\"],\n messageIndex: number,\n) => {\n const parentId = thread.messages[messageIndex - 1]?.id ?? null;\n const message = thread.messages[messageIndex];\n\n // TODO check if this can happen\n if (!message) return;\n\n const isLast = getIsLast(thread, message);\n const branches = thread.getBranches(message.id);\n\n // if the message is the same, don't update\n const currentState = useMessage.getState();\n if (\n currentState.message === message &&\n currentState.parentId === parentId &&\n currentState.branches === branches &&\n currentState.isLast === isLast\n )\n return;\n\n // sync useMessage\n useMessage.setState({\n message,\n parentId,\n branches,\n isLast,\n });\n};\n\nconst useMessageContext = (messageIndex: number) => {\n const { useThread } = useThreadContext();\n\n const [context] = useState<MessageContextValue>(() => {\n const useMessage = create<MessageState>((set) => ({\n message: null as unknown as ThreadMessage,\n parentId: null,\n branches: [],\n isLast: false,\n inProgressIndicator: null,\n isCopied: false,\n isHovering: false,\n setInProgressIndicator: (value) => {\n set({ inProgressIndicator: value });\n },\n setIsCopied: (value) => {\n set({ isCopied: value });\n },\n setIsHovering: (value) => {\n set({ isHovering: value });\n },\n }));\n\n const useComposer = makeEditComposerStore({\n onEdit: () => {\n const message = useMessage.getState().message;\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const text = getMessageText(message);\n\n return text;\n },\n onSend: (text) => {\n const { message, parentId } = useMessage.getState();\n if (message.role !== \"user\")\n throw new Error(\n \"Tried to edit a non-user message. Editing is only supported for user messages. This is likely an internal bug in assistant-ui.\",\n );\n\n const nonTextParts = message.content.filter(\n (part): part is AppendContentPart =>\n part.type !== \"text\" && part.type !== \"ui\",\n );\n useThread.getState().append({\n parentId,\n content: [{ type: \"text\", text }, ...nonTextParts],\n });\n },\n });\n\n syncMessage(useThread.getState(), useMessage, messageIndex);\n\n return { useMessage, useComposer };\n });\n\n useEffect(() => {\n return useThread.subscribe((thread) => {\n syncMessage(thread, context.useMessage, messageIndex);\n });\n }, [context, useThread, messageIndex]);\n\n return context;\n};\n\nexport const MessageProvider: FC<MessageProviderProps> = ({\n messageIndex,\n children,\n}) => {\n const context = useMessageContext(messageIndex);\n\n return (\n <MessageContext.Provider value={context}>\n {children}\n </MessageContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\n\nexport type EditComposerState = BaseComposerState &\n Readonly<{\n isEditing: boolean;\n\n edit: () => void;\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeEditComposerStore = ({\n onEdit,\n onSend,\n}: {\n onEdit: () => string;\n onSend: (value: string) => void;\n}): UseBoundStore<StoreApi<EditComposerState>> =>\n create<EditComposerState>()((set, get, store) => ({\n ...makeBaseComposer(set, get, store),\n\n isEditing: false,\n\n edit: () => {\n const value = onEdit();\n set({ isEditing: true, value });\n },\n send: () => {\n const value = get().value;\n set({ isEditing: false });\n onSend(value);\n },\n cancel: () => {\n if (!get().isEditing) return false;\n set({ isEditing: false });\n return true;\n },\n }));\n","import type { StateCreator } from \"zustand\";\n\nexport type BaseComposerState = Readonly<{\n value: string;\n setValue: (value: string) => void;\n}>;\n\nexport const makeBaseComposer: StateCreator<\n BaseComposerState,\n [],\n [],\n BaseComposerState\n> = (set) => ({\n value: \"\",\n setValue: (value) => {\n set({ value });\n },\n});\n","\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype ComposerIfFilters = {\n editing: boolean | undefined;\n};\n\ntype ComposerIfProps = PropsWithChildren<RequireAtLeastOne<ComposerIfFilters>>;\n\nconst useComposerIf = (props: RequireAtLeastOne<ComposerIfFilters>) => {\n const { useComposer } = useComposerContext();\n return useComposer((composer) => {\n if (props.editing === true && !composer.isEditing) return false;\n if (props.editing === false && composer.isEditing) return false;\n\n return true;\n });\n};\n\nexport const ComposerIf: FC<ComposerIfProps> = ({ children, ...query }) => {\n const result = useComposerIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n};\n\ntype MessageIfProps = RequireAtLeastOne<MessageIfFilters> & {\n children: ReactNode;\n};\n\nexport const useMessageIf = (props: RequireAtLeastOne<MessageIfFilters>) => {\n const { useMessage } = useMessageContext();\n\n return useMessage(({ message, branches, isLast, isCopied, isHovering }) => {\n if (props.hasBranches === true && branches.length < 2) return false;\n\n if (props.user && message.role !== \"user\") return false;\n if (props.assistant && message.role !== \"assistant\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n return true;\n });\n};\n\nexport const MessageIf: FC<MessageIfProps> = ({ children, ...query }) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n","\"use client\";\n\nimport type { ComponentType, FC } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { MessageProvider } from \"../../context/providers/MessageProvider\";\nimport { ComposerIf } from \"../composer/ComposerIf\";\nimport { MessageIf } from \"../message/MessageIf\";\n\ntype ThreadMessagesProps = {\n components:\n | {\n Message: ComponentType;\n UserMessage?: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage?: ComponentType;\n }\n | {\n Message?: ComponentType;\n UserMessage: ComponentType;\n EditComposer?: ComponentType;\n AssistantMessage: ComponentType;\n };\n};\n\nconst getComponents = (components: ThreadMessagesProps[\"components\"]) => {\n return {\n EditComposer:\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType),\n UserMessage:\n components.UserMessage ?? (components.Message as ComponentType),\n AssistantMessage:\n components.AssistantMessage ?? (components.Message as ComponentType),\n };\n};\n\nexport const ThreadMessages: FC<ThreadMessagesProps> = ({ components }) => {\n const { useThread } = useThreadContext();\n const messagesLength = useThread((t) => t.messages.length);\n\n const { UserMessage, EditComposer, AssistantMessage } =\n getComponents(components);\n\n if (messagesLength === 0) return null;\n\n return (\n <>\n {new Array(messagesLength).fill(null).map((_, idx) => {\n const messageIndex = idx;\n // TODO avoid rerendering on messageLength change\n return (\n <MessageProvider\n key={messageIndex} // keep the same key when switching branches for better a11y support\n messageIndex={messageIndex}\n >\n <MessageIf user>\n <ComposerIf editing={false}>\n <UserMessage />\n </ComposerIf>\n <ComposerIf editing>\n <EditComposer />\n </ComposerIf>\n </MessageIf>\n <MessageIf assistant>\n <AssistantMessage />\n </MessageIf>\n </MessageProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadScrollToBottomElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadScrollToBottomProps = PrimitiveButtonProps;\n\nexport const ThreadScrollToBottom = forwardRef<\n ThreadScrollToBottomElement,\n ThreadScrollToBottomProps\n>(({ onClick, ...rest }, ref) => {\n const { useViewport } = useThreadContext();\n\n const isAtBottom = useViewport((s) => s.isAtBottom);\n const handleScrollToBottom = () => {\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isAtBottom}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleScrollToBottom)}\n />\n );\n});\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ThreadSuggestionElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ThreadSuggestionProps = PrimitiveButtonProps & {\n prompt: string;\n method: \"replace\";\n autoSend?: boolean;\n};\n\nexport const ThreadSuggestion = forwardRef<\n ThreadSuggestionElement,\n ThreadSuggestionProps\n>(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {\n const { useThread, useComposer } = useThreadContext();\n\n const isDisabled = useThread((t) => t.isRunning);\n const handleApplySuggestion = () => {\n const thread = useThread.getState();\n const composer = useComposer.getState();\n composer.setValue(prompt);\n\n if (send && !thread.isRunning) {\n composer.send();\n }\n };\n\n return (\n <Primitive.button\n {...rest}\n disabled={isDisabled}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleApplySuggestion)}\n />\n );\n});\n","export { ComposerRoot as Root } from \"./ComposerRoot\";\nexport { ComposerInput as Input } from \"./ComposerInput\";\nexport { ComposerSend as Send } from \"./ComposerSend\";\nexport { ComposerCancel as Cancel } from \"./ComposerCancel\";\nexport { ComposerIf as If } from \"./ComposerIf\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, type FormEvent, forwardRef, useRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\n\ntype ComposerRootElement = ElementRef<typeof Primitive.form>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.form>;\n\ntype ComposerRootProps = PrimitiveFormProps;\n\nexport const ComposerRoot = forwardRef<ComposerRootElement, ComposerRootProps>(\n ({ onSubmit, ...rest }, forwardedRef) => {\n const { useViewport } = useThreadContext();\n const { useComposer } = useComposerContext();\n\n const formRef = useRef<HTMLFormElement>(null);\n const ref = useComposedRefs(forwardedRef, formRef);\n\n const handleSubmit = (e: FormEvent) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n\n e.preventDefault();\n composerState.send();\n\n useViewport.getState().scrollToBottom();\n };\n\n return (\n <Primitive.form\n {...rest}\n ref={ref}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport TextareaAutosize, {\n type TextareaAutosizeProps,\n} from \"react-textarea-autosize\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useOnScrollToBottom } from \"../../utils/hooks/useOnScrollToBottom\";\n\ntype ComposerInputProps = TextareaAutosizeProps & {\n asChild?: boolean;\n};\n\nexport const ComposerInput = forwardRef<\n HTMLTextAreaElement,\n ComposerInputProps\n>(\n (\n { autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest },\n forwardedRef,\n ) => {\n const { useThread, useViewport } = useThreadContext();\n const { useComposer, type } = useComposerContext();\n\n const value = useComposer((c) => {\n if (!c.isEditing) return \"\";\n return c.value;\n });\n\n const Component = asChild ? Slot : TextareaAutosize;\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (disabled) return;\n\n const composer = useComposer.getState();\n if (e.key === \"Escape\") {\n if (useComposer.getState().cancel()) {\n e.preventDefault();\n }\n } else if (e.key === \"Enter\" && e.shiftKey === false) {\n const isRunning = useThread.getState().isRunning;\n if (!isRunning) {\n e.preventDefault();\n composer.send();\n\n useViewport.getState().scrollToBottom();\n }\n }\n };\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const ref = useComposedRefs(forwardedRef, textareaRef);\n\n const autoFocusEnabled = autoFocus && !disabled;\n const focus = useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoFocusEnabled) return;\n\n textarea.focus();\n textarea.setSelectionRange(\n textareaRef.current.value.length,\n textareaRef.current.value.length,\n );\n }, [autoFocusEnabled]);\n\n useEffect(() => focus(), [focus]);\n\n useOnScrollToBottom(() => {\n if (type === \"new\") {\n focus();\n }\n });\n\n return (\n <Component\n value={value}\n {...rest}\n ref={ref}\n disabled={disabled}\n onChange={composeEventHandlers(onChange, (e) => {\n const composerState = useComposer.getState();\n if (!composerState.isEditing) return;\n return composerState.setValue(e.target.value);\n })}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyPress)}\n />\n );\n },\n);\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerSendElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerSendProps = PrimitiveFormProps;\n\nexport const ComposerSend = forwardRef<ComposerSendElement, ComposerSendProps>(\n ({ disabled, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);\n\n return (\n <Primitive.button\n type=\"submit\"\n {...rest}\n ref={ref}\n disabled={disabled || !hasValue}\n />\n );\n },\n);\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useComposerContext } from \"../../context/ComposerContext\";\n\ntype ComposerCancelElement = ElementRef<typeof Primitive.button>;\ntype PrimitiveFormProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\ntype ComposerCancelProps = PrimitiveFormProps;\n\nexport const ComposerCancel = forwardRef<\n ComposerCancelElement,\n ComposerCancelProps\n>(({ onClick, ...rest }, ref) => {\n const { useComposer } = useComposerContext();\n\n const handleCancel = () => {\n useComposer.getState().cancel();\n };\n\n return (\n <Primitive.button\n type=\"button\"\n {...rest}\n ref={ref}\n onClick={composeEventHandlers(onClick, handleCancel)}\n />\n );\n});\n","export { MessageRoot as Root } from \"./MessageRoot\";\nexport { MessageIf as If } from \"./MessageIf\";\nexport { MessageContent as Content } from \"./MessageContent\";\nexport { MessageInProgress as InProgress } from \"./MessageInProgress\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype MessageRootProps = PrimitiveDivProps;\n\nexport const MessageRoot = forwardRef<MessageRootElement, MessageRootProps>(\n ({ onMouseEnter, onMouseLeave, ...rest }, ref) => {\n const { useMessage } = useMessageContext();\n const setIsHovering = useMessage((s) => s.setIsHovering);\n\n const handleMouseEnter = () => {\n setIsHovering(true);\n };\n const handleMouseLeave = () => {\n setIsHovering(false);\n };\n\n return (\n <Primitive.div\n {...rest}\n ref={ref}\n onMouseEnter={composeEventHandlers(onMouseEnter, handleMouseEnter)}\n onMouseLeave={composeEventHandlers(onMouseLeave, handleMouseLeave)}\n />\n );\n },\n);\n","\"use client\";\n\nimport { type FC, type PropsWithChildren, useEffect, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { ContentPartContext } from \"../ContentPartContext\";\nimport type { ContentPartContextValue } from \"../ContentPartContext\";\nimport { useMessageContext } from \"../MessageContext\";\nimport type { MessageState } from \"../stores\";\nimport type { ContentPartState } from \"../stores/ContentPart\";\n\ntype ContentPartProviderProps = PropsWithChildren<{\n partIndex: number;\n}>;\n\nconst syncContentPart = (\n { message }: MessageState,\n useContentPart: ContentPartContextValue[\"useContentPart\"],\n partIndex: number,\n) => {\n const part = message.content[partIndex];\n // TODO check if this can happen\n if (!part) return;\n\n const messageStatus = message.role === \"assistant\" ? message.status : \"done\";\n const status =\n partIndex === message.content.length - 1 ? messageStatus : \"done\";\n\n useContentPart.setState({ part, status });\n};\n\nconst useContentPartContext = (partIndex: number) => {\n const { useMessage } = useMessageContext();\n const [context] = useState<ContentPartContextValue>(() => {\n const useContentPart = create<ContentPartState>(() => ({\n part: { type: \"text\", text: \"\" },\n status: \"done\",\n }));\n\n syncContentPart(useMessage.getState(), useContentPart, partIndex);\n\n return { useContentPart };\n });\n\n useEffect(() => {\n return useMessage.subscribe((message) => {\n syncContentPart(message, context.useContentPart, partIndex);\n });\n }, [context, useMessage, partIndex]);\n\n return context;\n};\n\nexport const ContentPartProvider: FC<ContentPartProviderProps> = ({\n partIndex,\n children,\n}) => {\n const context = useContentPartContext(partIndex);\n\n return (\n <ContentPartContext.Provider value={context}>\n {children}\n </ContentPartContext.Provider>\n );\n};\n","import type { FC } from \"react\";\nimport { useContentPartContext } from \"../../context/ContentPartContext\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\nexport const ContentPartInProgressIndicator: FC = () => {\n const { useMessage } = useMessageContext();\n const { useContentPart } = useContentPartContext();\n\n const indicator = useCombinedStore([useMessage, useContentPart], (m, c) =>\n c.status === \"in_progress\" ? m.inProgressIndicator : null,\n );\n return indicator;\n};\n","\"use client\";\n\nimport type { ComponentType, FC, ReactNode } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { ContentPartProvider } from \"../../context/providers/ContentPartProvider\";\nimport type {\n ImageContentPart,\n TextContentPart,\n ToolCallContentPart,\n UIContentPart,\n} from \"../../utils/AssistantTypes\";\nimport { ContentPartInProgressIndicator } from \"../contentPart/ContentPartInProgressIndicator\";\n\ntype MessageContentProps = {\n components?: {\n Text?: ComponentType<{ part: TextContentPart }>;\n Image?: ComponentType<{ part: ImageContentPart }>;\n UI?: ComponentType<{ part: UIContentPart }>;\n tools?: {\n by_name?: Record<string, ComponentType<{ part: ToolCallContentPart }>>;\n Fallback?: ComponentType<{ part: ToolCallContentPart }>;\n };\n };\n};\n\nconst defaultComponents = {\n Text: ({ part }) => (\n <>\n {part.text}\n <ContentPartInProgressIndicator />\n </>\n ),\n Image: () => null,\n UI: ({ part }) => part.display,\n tools: {\n Fallback: () => null,\n },\n} satisfies MessageContentProps[\"components\"];\n\nexport const MessageContent: FC<MessageContentProps> = ({\n components: {\n Text = defaultComponents.Text,\n Image = defaultComponents.Image,\n UI = defaultComponents.UI,\n tools: { by_name = {}, Fallback = defaultComponents.tools.Fallback } = {},\n } = {},\n}) => {\n const { useMessage } = useMessageContext();\n\n const message = useMessage((s) => s.message);\n const content = message.content;\n\n return (\n <>\n {content.map((part, i) => {\n const partIndex = i; // use the index as key, as message is generally append only\n\n const type = part.type;\n let component: ReactNode | null = null;\n switch (type) {\n case \"text\":\n component = <Text part={part} />;\n break;\n\n case \"image\":\n component = <Image part={part} />;\n break;\n case \"ui\":\n component = <UI part={part} />;\n break;\n case \"tool-call\": {\n const Tool = by_name[part.name] || Fallback;\n component = <Tool part={part} />;\n break;\n }\n default:\n throw new Error(`Unknown content part type: ${type}`);\n }\n\n return (\n <ContentPartProvider key={partIndex} partIndex={partIndex}>\n {component}\n </ContentPartProvider>\n );\n })}\n </>\n );\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef, useMemo } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\ntype MessageInProgressElement = ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = ComponentPropsWithoutRef<typeof Primitive.span>;\n\ntype MessageInProgressProps = PrimitiveSpanProps;\n\nexport const MessageInProgress = forwardRef<\n MessageInProgressElement,\n MessageInProgressProps\n>((props, ref) => {\n const { useMessage } = useMessageContext();\n\n useMemo(() => {\n useMessage\n .getState()\n .setInProgressIndicator(<Primitive.span {...props} ref={ref} />);\n }, [useMessage, props, ref]);\n\n return null;\n});\n","export { BranchPickerNext as Next } from \"./BranchPickerNext\";\nexport { BranchPickerPrevious as Previous } from \"./BranchPickerPrevious\";\nexport { BranchPickerCount as Count } from \"./BranchPickerCount\";\nexport { BranchPickerNumber as Number } from \"./BranchPickerNumber\";\nexport { BranchPickerRoot as Root } from \"./BranchPickerRoot\";\n","\"use client\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\n\ntype ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);\n\nexport const createActionButton = <TProps,>(\n useActionButton: ActionButtonCallback<TProps>,\n) => {\n type PrimitiveButtonElement = ElementRef<typeof Primitive.button>;\n type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;\n\n return forwardRef<PrimitiveButtonElement, PrimitiveButtonProps & TProps>(\n (props, forwardedRef) => {\n const onClick = useActionButton(props);\n\n return (\n <Primitive.button\n type=\"button\"\n disabled={!onClick}\n {...props}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, onClick ?? undefined)}\n />\n );\n },\n );\n};\n","\"use client\";\n\nimport { useGoToNextBranch } from \"../../actions/useGoToNextBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerNext = createActionButton(useGoToNextBranch);\n","\"use client\";\n\nimport { useGoToPreviousBranch } from \"../../actions/useGoToPreviousBranch\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const BranchPickerPrevious = createActionButton(useGoToPreviousBranch);\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerCount: FC = () => {\n const { useMessage } = useMessageContext();\n const branchCount = useMessage((s) => s.branches.length);\n return <>{branchCount}</>;\n};\n","\"use client\";\n\nimport type { FC } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\n\nexport const BranchPickerNumber: FC = () => {\n const { useMessage } = useMessageContext();\n const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));\n return <>{branchIdx + 1}</>;\n};\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { If } from \"../message\";\n\ntype BranchPickerRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\ntype BranchPickerRootProps = PrimitiveDivProps & {\n hideWhenSingleBranch?: boolean;\n};\n\nexport const BranchPickerRoot = forwardRef<\n BranchPickerRootElement,\n BranchPickerRootProps\n>(({ hideWhenSingleBranch, ...rest }, ref) => {\n return (\n <If hasBranches={hideWhenSingleBranch ? true : undefined}>\n <Primitive.div {...rest} ref={ref} />\n </If>\n );\n});\n","export { ActionBarRoot as Root } from \"./ActionBarRoot\";\nexport { ActionBarCopy as Copy } from \"./ActionBarCopy\";\nexport { ActionBarReload as Reload } from \"./ActionBarReload\";\nexport { ActionBarEdit as Edit } from \"./ActionBarEdit\";\n","\"use client\";\n\nimport {\n type ComponentPropsWithoutRef,\n Primitive,\n} from \"@radix-ui/react-primitive\";\nimport { type ElementRef, forwardRef } from \"react\";\nimport { useMessageContext } from \"../../context/MessageContext\";\nimport { useThreadContext } from \"../../context/ThreadContext\";\nimport { useCombinedStore } from \"../../utils/combined/useCombinedStore\";\n\ntype ActionBarRootElement = ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nenum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type ActionBarRootProps = PrimitiveDivProps & {\n hideWhenRunning?: boolean;\n autohide?: \"always\" | \"not-last\" | \"never\";\n autohideFloat?: \"always\" | \"single-branch\" | \"never\";\n};\n\nexport const ActionBarRoot = forwardRef<\n ActionBarRootElement,\n ActionBarRootProps\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const { useThread } = useThreadContext();\n const { useMessage } = useMessageContext();\n\n const hideAndfloatStatus = useCombinedStore(\n [useThread, useMessage],\n (t, m) => {\n if (hideWhenRunning && t.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !m.isLast);\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!m.isHovering) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && m.branches.length <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n },\n );\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <Primitive.div\n data-floating={hideAndfloatStatus === HideAndFloatStatus.Floating}\n {...rest}\n ref={ref}\n />\n );\n});\n","\"use client\";\n\nimport { useCopyMessage } from \"../../actions/useCopyMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\ntype ActionBarCopyProps = {\n copiedDuration?: number;\n};\n\nexport const ActionBarCopy =\n createActionButton<ActionBarCopyProps>(useCopyMessage);\n","\"use client\";\n\nimport { useReloadMessage } from \"../../actions/useReloadMessage\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarReload = createActionButton(useReloadMessage);\n","\"use client\";\n\nimport { useBeginMessageEdit } from \"../../actions/useBeginMessageEdit\";\nimport { createActionButton } from \"../../utils/createActionButton\";\n\nexport const ActionBarEdit = createActionButton(useBeginMessageEdit);\n","export { ContentPartInProgressIndicator as InProgressIndicator } from \"./ContentPartInProgressIndicator\";\n","\"use client\";\n\nimport { useInsertionEffect, useState } from \"react\";\nimport type { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { LocalRuntime } from \"./LocalRuntime\";\n\nexport const useLocalRuntime = (adapter: ChatModelAdapter) => {\n const [runtime] = useState(() => new LocalRuntime(adapter));\n\n useInsertionEffect(() => {\n runtime.adapter = adapter;\n });\n\n return runtime;\n};\n","import type {\n AppendMessage,\n AssistantMessage,\n UserMessage,\n} from \"../../utils/AssistantTypes\";\nimport {\n type ModelConfigProvider,\n mergeModelConfigs,\n} from \"../../utils/ModelConfigTypes\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\nimport type { AssistantRuntime } from \"../core/AssistantRuntime\";\nimport { MessageRepository } from \"../utils/MessageRepository\";\nimport { generateId } from \"../utils/idUtils\";\nimport type { ChatModelAdapter, ChatModelRunResult } from \"./ChatModelAdapter\";\n\nexport class LocalRuntime implements AssistantRuntime {\n private _subscriptions = new Set<() => void>();\n private _configProviders = new Set<ModelConfigProvider>();\n\n private abortController: AbortController | null = null;\n private repository = new MessageRepository();\n\n public get messages() {\n return this.repository.getMessages();\n }\n public get isRunning() {\n return this.abortController != null;\n }\n\n constructor(public adapter: ChatModelAdapter) {}\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this.notifySubscribers();\n }\n\n public async append(message: AppendMessage): Promise<void> {\n // add user message\n const userMessageId = generateId();\n const userMessage: UserMessage = {\n id: userMessageId,\n role: \"user\",\n content: message.content,\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(message.parentId, userMessage);\n\n await this.startRun(userMessageId);\n }\n\n public async startRun(parentId: string | null): Promise<void> {\n const id = generateId();\n\n this.repository.resetHead(parentId);\n const messages = this.repository.getMessages();\n\n // add assistant message\n const message: AssistantMessage = {\n id,\n role: \"assistant\",\n status: \"in_progress\",\n content: [{ type: \"text\", text: \"\" }],\n createdAt: new Date(),\n };\n this.repository.addOrUpdateMessage(parentId, { ...message });\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n this.notifySubscribers();\n\n try {\n const updateHandler = ({ content }: ChatModelRunResult) => {\n message.content = content;\n this.repository.addOrUpdateMessage(parentId, { ...message });\n this.notifySubscribers();\n };\n const result = await this.adapter.run({\n messages,\n abortSignal: this.abortController.signal,\n config: mergeModelConfigs([...this._configProviders].map((p) => p())),\n onUpdate: updateHandler,\n });\n updateHandler(result);\n\n message.status = \"done\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n } catch (e) {\n message.status = \"error\";\n this.repository.addOrUpdateMessage(parentId, { ...message });\n console.error(e);\n } finally {\n this.abortController = null;\n this.notifySubscribers();\n }\n }\n\n cancelRun(): void {\n if (!this.abortController) return;\n\n this.abortController.abort();\n this.abortController = null;\n this.notifySubscribers();\n }\n\n private notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n registerModelConfigProvider(provider: ModelConfigProvider) {\n this._configProviders.add(provider);\n return () => this._configProviders.delete(provider);\n }\n}\n","import type { FC, PropsWithChildren } from \"react\";\nimport { memo } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime/core/AssistantRuntime\";\nimport { AssistantProvider } from \"./AssistantProvider\";\n\ntype AssistantRuntimeProviderProps = {\n runtime: AssistantRuntime;\n};\n\nconst AssistantRuntimeProviderImpl: FC<\n PropsWithChildren<AssistantRuntimeProviderProps>\n> = ({ children, runtime }) => {\n return <AssistantProvider runtime={runtime}>{children}</AssistantProvider>;\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { AssistantRuntime } from \"../../runtime\";\nimport { AssistantContext } from \"../AssistantContext\";\nimport { makeAssistantModelConfigStore } from \"../stores/AssistantModelConfig\";\nimport { ThreadProvider } from \"./ThreadProvider\";\n\ntype AssistantProviderProps = {\n runtime: AssistantRuntime;\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<AssistantProviderProps>\n> = ({ children, runtime }) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [context] = useState(() => {\n const useModelConfig = makeAssistantModelConfigStore();\n\n return { useModelConfig };\n });\n\n const getModelCOnfig = context.useModelConfig((c) => c.getModelConfig);\n useEffect(() => {\n return runtime.registerModelConfigProvider(getModelCOnfig);\n }, [runtime, getModelCOnfig]);\n\n return (\n <AssistantContext.Provider value={context}>\n <ThreadProvider runtime={runtime}>{children}</ThreadProvider>\n </AssistantContext.Provider>\n );\n};\n","\"use client\";\n\nimport { create } from \"zustand\";\nimport type { ModelConfigProvider } from \"../../utils/ModelConfigTypes\";\nimport { ProxyConfigProvider } from \"../../utils/ProxyConfigProvider\";\n\nexport type AssistantModelConfigState = {\n getModelConfig: ModelConfigProvider;\n registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;\n};\n\nexport const makeAssistantModelConfigStore = () =>\n create<AssistantModelConfigState>(() => {\n const proxy = new ProxyConfigProvider();\n\n return {\n getModelConfig: () => {\n return proxy.getModelConfig();\n },\n registerModelConfigProvider: (provider: ModelConfigProvider) => {\n return proxy.registerModelConfigProvider(provider);\n },\n } satisfies AssistantModelConfigState;\n });\n","import type { FC, PropsWithChildren } from \"react\";\nimport { useEffect, useInsertionEffect, useRef, useState } from \"react\";\nimport type { ReactThreadRuntime } from \"../../runtime/core/ReactThreadRuntime\";\nimport type { ThreadRuntime } from \"../../runtime/core/ThreadRuntime\";\nimport type { ThreadContextValue } from \"../ThreadContext\";\nimport { ThreadContext } from \"../ThreadContext\";\nimport { makeComposerStore } from \"../stores/Composer\";\nimport { makeThreadStore } from \"../stores/Thread\";\nimport { makeThreadViewportStore } from \"../stores/ThreadViewport\";\n\ntype ThreadProviderProps = {\n runtime: ThreadRuntime;\n};\n\nexport const ThreadProvider: FC<PropsWithChildren<ThreadProviderProps>> = ({\n children,\n runtime,\n}) => {\n const runtimeRef = useRef(runtime);\n useInsertionEffect(() => {\n runtimeRef.current = runtime;\n });\n\n const [{ context, onRuntimeUpdate }] = useState(() => {\n const { useThread, onRuntimeUpdate } = makeThreadStore(runtimeRef);\n const useViewport = makeThreadViewportStore();\n const useComposer = makeComposerStore(useThread);\n\n return {\n context: {\n useViewport,\n useThread,\n useComposer,\n } satisfies ThreadContextValue,\n onRuntimeUpdate,\n };\n });\n\n useEffect(() => {\n // whenever the runtime changes\n onRuntimeUpdate();\n\n // subscribe to runtime updates\n return runtime.subscribe(onRuntimeUpdate);\n }, [onRuntimeUpdate, runtime]);\n\n const RuntimeSynchronizer = (runtime as ReactThreadRuntime)\n .unstable_synchronizer;\n\n return (\n <ThreadContext.Provider value={context}>\n {RuntimeSynchronizer && <RuntimeSynchronizer />}\n {children}\n </ThreadContext.Provider>\n );\n};\n","import { type StoreApi, type UseBoundStore, create } from \"zustand\";\nimport { type BaseComposerState, makeBaseComposer } from \"./BaseComposer\";\nimport type { ThreadState } from \"./Thread\";\n\nexport type ComposerState = BaseComposerState &\n Readonly<{\n isEditing: true;\n\n send: () => void;\n cancel: () => boolean;\n }>;\n\nexport const makeComposerStore = (\n useThread: StoreApi<ThreadState>,\n): UseBoundStore<StoreApi<ComposerState>> =>\n create<ComposerState>()((set, get, store) => {\n return {\n ...makeBaseComposer(set, get, store),\n\n isEditing: true,\n\n send: () => {\n const { setValue, value } = get();\n setValue(\"\");\n\n useThread.getState().append({\n parentId: useThread.getState().messages.at(-1)?.id ?? null,\n content: [{ type: \"text\", text: value }],\n });\n },\n cancel: () => {\n const thread = useThread.getState();\n if (!thread.isRunning) return false;\n\n useThread.getState().cancelRun();\n return true;\n },\n };\n });\n","import type { MutableRefObject } from \"react\";\nimport { create } from \"zustand\";\nimport type { AppendMessage, ThreadMessage } from \"../../utils/AssistantTypes\";\n\nexport type ThreadState = {\n messages: readonly ThreadMessage[];\n isRunning: boolean;\n\n getBranches: (messageId: string) => readonly string[];\n switchToBranch: (branchId: string) => void;\n\n append: (message: AppendMessage) => void;\n startRun: (parentId: string | null) => void;\n cancelRun: () => void;\n};\n\nexport const makeThreadStore = (runtimeRef: MutableRefObject<ThreadState>) => {\n const useThread = create<ThreadState>(() => ({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n getBranches: (messageId) => runtimeRef.current.getBranches(messageId),\n switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),\n startRun: (parentId) => runtimeRef.current.startRun(parentId),\n append: (message) => runtimeRef.current.append(message),\n cancelRun: () => runtimeRef.current.cancelRun(),\n }));\n\n const onRuntimeUpdate = () => {\n useThread.setState({\n messages: runtimeRef.current.messages,\n isRunning: runtimeRef.current.isRunning,\n });\n };\n\n return {\n useThread,\n onRuntimeUpdate,\n };\n};\n","\"use client\";\nimport { create } from \"zustand\";\nimport type { Unsubscribe } from \"../../utils/Unsubscribe\";\n\nexport type ThreadViewportState = {\n isAtBottom: boolean;\n scrollToBottom: () => void;\n onScrollToBottom: (callback: () => void) => Unsubscribe;\n};\n\nexport const makeThreadViewportStore = () => {\n const scrollToBottomListeners = new Set<() => void>();\n\n return create<ThreadViewportState>(() => ({\n isAtBottom: true,\n scrollToBottom: () => {\n for (const listener of scrollToBottomListeners) {\n listener();\n }\n },\n onScrollToBottom: (callback) => {\n scrollToBottomListeners.add(callback);\n return () => {\n scrollToBottomListeners.delete(callback);\n };\n },\n }));\n};\n"],"mappings":"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","names":["c","useCallback","useCallback","useCallback","useCallback","useCallback","useCallback","useCallback","useCallback","jsx","Primitive","forwardRef","useCallbackRef","useEffect","useCallbackRef","useEffect","jsx","forwardRef","Primitive","useEffect","create","jsx","useMessageContext","create","useEffect","jsx","jsxs","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","composeEventHandlers","useComposedRefs","Primitive","forwardRef","useRef","jsx","forwardRef","useRef","useComposedRefs","Primitive","composeEventHandlers","composeEventHandlers","useComposedRefs","forwardRef","useCallback","useEffect","useRef","jsx","forwardRef","useRef","useComposedRefs","useCallback","useEffect","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","composeEventHandlers","Primitive","forwardRef","jsx","forwardRef","Primitive","composeEventHandlers","useEffect","useState","create","jsx","useContentPartContext","useState","create","useEffect","Fragment","jsx","jsxs","Primitive","forwardRef","useMemo","jsx","forwardRef","useMemo","Primitive","composeEventHandlers","Primitive","forwardRef","jsx","Fragment","jsx","Fragment","jsx","Primitive","forwardRef","jsx","forwardRef","Primitive","Primitive","forwardRef","jsx","forwardRef","jsx","Primitive","useState","useState","useEffect","useInsertionEffect","useRef","useState","create","create","useEffect","useInsertionEffect","useRef","useState","create","create","create","create","jsx","jsxs","useRef","useInsertionEffect","useState","onRuntimeUpdate","useEffect","jsx","useRef","useInsertionEffect","useState","useEffect","jsx"]}
@@ -1,4 +1,4 @@
1
- import { M as ModelConfig, h as ModelConfigProvider, b as ThreadMessage } from './ModelConfigTypes-B9UY4zxv.mjs';
1
+ import { c as ModelConfig, M as ModelConfigProvider, b as ThreadMessage } from './ModelConfigTypes-CzmXY3sn.mjs';
2
2
  import 'react';
3
3
  import 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { M as ModelConfig, h as ModelConfigProvider, b as ThreadMessage } from './ModelConfigTypes-B9UY4zxv.js';
1
+ import { c as ModelConfig, M as ModelConfigProvider, b as ThreadMessage } from './ModelConfigTypes-CzmXY3sn.js';
2
2
  import 'react';
3
3
  import 'zod';
4
4