@anvia/react-ui 0.7.1 → 1.0.0-rc.10
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/README.md +52 -39
- package/dist/attachment/index.d.ts +5 -5
- package/dist/attachment/index.js +4 -4
- package/dist/{attachment-BP597fV3.d.ts → attachment-mbjsroli.d.ts} +1 -1
- package/dist/chat/index.d.ts +13 -12
- package/dist/chat/index.js +11 -9
- package/dist/chat-tfA570mg.d.ts +86 -0
- package/dist/{chunk-7RMRM7W3.js → chunk-647LAYRV.js} +90 -65
- package/dist/chunk-647LAYRV.js.map +1 -0
- package/dist/chunk-6XOJFLX4.js +22 -0
- package/dist/chunk-6XOJFLX4.js.map +1 -0
- package/dist/chunk-CKA4CE26.js +25 -0
- package/dist/chunk-CKA4CE26.js.map +1 -0
- package/dist/{chunk-JWZDNM5D.js → chunk-CRXNFZRW.js} +145 -125
- package/dist/chunk-CRXNFZRW.js.map +1 -0
- package/dist/{chunk-7HR34SOF.js → chunk-CVXLQCDI.js} +13 -21
- package/dist/chunk-CVXLQCDI.js.map +1 -0
- package/dist/{chunk-ULGJLLZE.js → chunk-F6AKBUO3.js} +12 -12
- package/dist/chunk-F6AKBUO3.js.map +1 -0
- package/dist/{chunk-FABSIZZ7.js → chunk-HWJIMLHC.js} +97 -90
- package/dist/chunk-HWJIMLHC.js.map +1 -0
- package/dist/{chunk-SBYUKODG.js → chunk-MISX4WUT.js} +10 -15
- package/dist/chunk-MISX4WUT.js.map +1 -0
- package/dist/{chunk-R3NA6BWW.js → chunk-OQE6SHZE.js} +54 -56
- package/dist/chunk-OQE6SHZE.js.map +1 -0
- package/dist/{chunk-VEYJNQVW.js → chunk-S4XLE2RN.js} +11 -16
- package/dist/chunk-S4XLE2RN.js.map +1 -0
- package/dist/{chunk-43U2XQP2.js → chunk-SOG2GVE4.js} +69 -25
- package/dist/chunk-SOG2GVE4.js.map +1 -0
- package/dist/{chunk-56CV6S76.js → chunk-UCBAG42A.js} +9 -21
- package/dist/chunk-UCBAG42A.js.map +1 -0
- package/dist/completion/index.d.ts +4 -3
- package/dist/completion/index.js +4 -4
- package/dist/completion-input-DHlwrhxB.d.ts +24 -0
- package/dist/{composer-CzsbDFPt.d.ts → composer-CigccTLT.d.ts} +19 -7
- package/dist/human-input/index.d.ts +10 -8
- package/dist/human-input/index.js +5 -4
- package/dist/human-input-D7jgYsfM.d.ts +27 -0
- package/dist/image/index.d.ts +6 -6
- package/dist/image/index.js +4 -4
- package/dist/{image-DanUxcl2.d.ts → image-VZv6Ddsn.d.ts} +1 -1
- package/dist/index.d.ts +19 -18
- package/dist/index.js +59 -63
- package/dist/index.js.map +1 -1
- package/dist/message/index.d.ts +12 -11
- package/dist/message/index.js +8 -6
- package/dist/{message-CkEnKhAn.d.ts → message-CNRnZQwU.d.ts} +1 -1
- package/dist/selection-toolbar/index.d.ts +2 -2
- package/dist/selection-toolbar/index.js +5 -4
- package/dist/shared.d.ts +9 -8
- package/dist/shared.js +1 -1
- package/dist/stream/index.d.ts +2 -0
- package/dist/stream/index.js +1 -1
- package/dist/{thread-uEm8hH0s.d.ts → thread-Bz6-1zaJ.d.ts} +1 -0
- package/dist/thread-list/index.d.ts +3 -3
- package/dist/thread-list/index.js +6 -6
- package/package.json +18 -18
- package/dist/chat-B3kucz1w.d.ts +0 -13
- package/dist/chunk-43U2XQP2.js.map +0 -1
- package/dist/chunk-56CV6S76.js.map +0 -1
- package/dist/chunk-7HR34SOF.js.map +0 -1
- package/dist/chunk-7RMRM7W3.js.map +0 -1
- package/dist/chunk-FABSIZZ7.js.map +0 -1
- package/dist/chunk-JWZDNM5D.js.map +0 -1
- package/dist/chunk-R3NA6BWW.js.map +0 -1
- package/dist/chunk-SBYUKODG.js.map +0 -1
- package/dist/chunk-ULGJLLZE.js.map +0 -1
- package/dist/chunk-VEYJNQVW.js.map +0 -1
- package/dist/completion-input-WjK6kUyG.d.ts +0 -23
- package/dist/human-input-CydeYm_7.d.ts +0 -20
- package/dist/stream/styles.css +0 -17
- package/dist/styles.css +0 -130
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/thread-list/parts.tsx","../src/thread-list/index.ts"],"sourcesContent":["import {\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\n\nimport {\n InternalThreadListItemProvider,\n InternalThreadListRootProvider,\n type ThreadListRecord,\n useInternalThreadListRoot,\n useThreadList,\n useThreadListItem,\n} from \"../contexts\";\nimport { composeRefs, type PrimitiveProps, renderPrimitive } from \"../primitives\";\n\ntype ThreadListRootProps = PrimitiveProps<\"div\">;\n\nconst ThreadListRoot = forwardRef<HTMLDivElement, ThreadListRootProps>(function ThreadListRoot(\n { onKeyDown, ...props },\n ref,\n) {\n const threadList = useThreadList();\n const rootRef = useRef<HTMLDivElement | null>(null);\n const newButtonRef = useRef<HTMLButtonElement | null>(null);\n const itemElements = useRef(new Map<string, HTMLDivElement>());\n const triggerElements = useRef(new Map<string, HTMLButtonElement>());\n const registerItem = useCallback((threadId: string, element: HTMLDivElement | null) => {\n if (element === null) itemElements.current.delete(threadId);\n else itemElements.current.set(threadId, element);\n }, []);\n const registerTrigger = useCallback((threadId: string, element: HTMLButtonElement | null) => {\n if (element === null) triggerElements.current.delete(threadId);\n else triggerElements.current.set(threadId, element);\n }, []);\n const rootContext = useMemo(\n () => ({\n rootRef,\n newButtonRef,\n itemElements,\n triggerElements,\n registerItem,\n registerTrigger,\n }),\n [registerItem, registerTrigger],\n );\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLDivElement>(ref, (node) => {\n rootRef.current = node;\n }),\n [ref],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || ![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n const triggers = orderedEnabledTriggers(rootContext);\n if (triggers.length === 0) {\n return;\n }\n event.preventDefault();\n const activeElement = document.activeElement;\n const currentIndex =\n activeElement instanceof HTMLButtonElement ? triggers.indexOf(activeElement) : -1;\n const nextIndex = nextTriggerIndex(event.key, currentIndex, triggers.length);\n triggers[nextIndex]?.focus();\n },\n [onKeyDown, rootContext],\n );\n\n return (\n <InternalThreadListRootProvider value={rootContext}>\n {renderPrimitive(\n \"div\",\n {\n ...props,\n onKeyDown: handleKeyDown,\n \"data-state\": threadList.status ?? \"idle\",\n } as PrimitiveProps<\"div\">,\n composedRef,\n )}\n </InternalThreadListRootProvider>\n );\n});\n\nconst ThreadListNew = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ThreadListNew({ onClick, ...props }, ref) {\n const threadList = useThreadList();\n const root = useInternalThreadListRoot();\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLButtonElement>(ref, (node) => {\n root.newButtonRef.current = node;\n }),\n [ref, root.newButtonRef],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || props.disabled) {\n return;\n }\n void threadList.createThread();\n },\n [onClick, props.disabled, threadList],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? \"New chat\",\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": props.disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n composedRef,\n );\n },\n);\n\ntype ThreadListItemsChildren = ReactNode | ((thread: ThreadListRecord) => ReactNode);\n\ntype ThreadListItemsProps = Omit<PrimitiveProps<\"div\">, \"children\"> & {\n archived?: boolean;\n children?: ThreadListItemsChildren;\n keepMounted?: boolean;\n};\n\nconst ThreadListItems = forwardRef<HTMLDivElement, ThreadListItemsProps>(function ThreadListItems(\n { archived = false, children, keepMounted = false, ...props },\n ref,\n) {\n const threadList = useThreadList();\n const threads = threadList.threads.filter((thread) => Boolean(thread.archived) === archived);\n const empty = threads.length === 0;\n if (empty && !keepMounted) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: threads.map((thread) => (\n <InternalThreadListItemProvider\n key={thread.id}\n value={{ thread, active: thread.id === threadList.activeThreadId }}\n >\n {typeof children === \"function\" ? children(thread) : (children ?? <DefaultThreadItem />)}\n </InternalThreadListItemProvider>\n )),\n \"data-state\": empty ? \"empty\" : \"populated\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\ntype ThreadListEmptyProps = PrimitiveProps<\"div\"> & {\n archived?: boolean;\n};\n\nconst ThreadListEmpty = forwardRef<HTMLDivElement, ThreadListEmptyProps>(function ThreadListEmpty(\n { archived = false, ...props },\n ref,\n) {\n const threadList = useThreadList();\n const hasVisibleThreads = threadList.threads.some(\n (thread) => Boolean(thread.archived) === archived,\n );\n if (hasVisibleThreads) {\n return null;\n }\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n children: props.children ?? \"No conversations.\",\n } as PrimitiveProps<\"div\">,\n ref,\n );\n});\n\nconst ThreadListItemRoot = forwardRef<HTMLDivElement, PrimitiveProps<\"div\">>(\n function ThreadListItemRoot(props, ref) {\n const item = useThreadListItem();\n const root = useInternalThreadListRoot();\n const composedRef = useMemo(\n () => composeRefs<HTMLDivElement>(ref, (node) => root.registerItem(item.thread.id, node)),\n [item.thread.id, ref, root],\n );\n\n return renderPrimitive(\n \"div\",\n {\n ...props,\n \"data-state\": item.active ? \"active\" : \"inactive\",\n } as PrimitiveProps<\"div\">,\n composedRef,\n );\n },\n);\n\nconst ThreadListItemTrigger = forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(\n function ThreadListItemTrigger({ onClick, ...props }, ref) {\n const threadList = useThreadList();\n const item = useThreadListItem();\n const root = useInternalThreadListRoot();\n const disabled = props.disabled ?? false;\n const composedRef = useMemo(\n () =>\n composeRefs<HTMLButtonElement>(ref, (node) => root.registerTrigger(item.thread.id, node)),\n [item.thread.id, ref, root],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n void threadList.switchThread(item.thread.id);\n },\n [disabled, item.thread.id, onClick, threadList],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? <ThreadListItemTitle />,\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"aria-current\": item.active ? \"true\" : undefined,\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n composedRef,\n );\n },\n);\n\ntype ThreadListItemTitleProps = PrimitiveProps<\"span\"> & {\n fallback?: ReactNode;\n};\n\nconst ThreadListItemTitle = forwardRef<HTMLSpanElement, ThreadListItemTitleProps>(\n function ThreadListItemTitle({ fallback = \"New chat\", ...props }, ref) {\n const { thread } = useThreadListItem();\n\n return renderPrimitive(\n \"span\",\n {\n ...props,\n children: props.children ?? thread.title ?? fallback,\n } as PrimitiveProps<\"span\">,\n ref,\n );\n },\n);\n\ntype ThreadListItemActionKey = \"archiveThread\" | \"unarchiveThread\" | \"deleteThread\";\nfunction createThreadListItemAction(action: ThreadListItemActionKey, defaultLabel: string) {\n return forwardRef<HTMLButtonElement, PrimitiveProps<\"button\">>(function ThreadListItemAction(\n { onClick, ...props },\n ref,\n ) {\n const threadList = useThreadList();\n const { thread } = useThreadListItem();\n const root = useInternalThreadListRoot();\n const actionHandler = threadList[action];\n const disabled = props.disabled ?? actionHandler === undefined;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n focusAfterThreadItemRemoval(thread.id, root);\n void actionHandler?.(thread.id);\n },\n [actionHandler, disabled, onClick, root, thread.id],\n );\n\n return renderPrimitive(\n \"button\",\n {\n ...props,\n children: props.children ?? defaultLabel,\n disabled,\n onClick: handleClick,\n type: props.type ?? \"button\",\n \"data-state\": disabled ? \"disabled\" : \"enabled\",\n } as PrimitiveProps<\"button\">,\n ref,\n );\n });\n}\n\nconst ThreadListItemArchive = createThreadListItemAction(\"archiveThread\", \"Archive\");\nconst ThreadListItemUnarchive = createThreadListItemAction(\"unarchiveThread\", \"Unarchive\");\nconst ThreadListItemDelete = createThreadListItemAction(\"deleteThread\", \"Delete\");\n\nfunction DefaultThreadItem(): ReactNode {\n return (\n <ThreadListItemRoot>\n <ThreadListItemTrigger />\n </ThreadListItemRoot>\n );\n}\n\nfunction nextTriggerIndex(key: string, currentIndex: number, triggerCount: number): number {\n if (key === \"Home\") {\n return 0;\n }\n if (key === \"End\") {\n return triggerCount - 1;\n }\n if (currentIndex === -1) {\n return key === \"ArrowUp\" ? triggerCount - 1 : 0;\n }\n if (key === \"ArrowUp\") {\n return (currentIndex - 1 + triggerCount) % triggerCount;\n }\n return (currentIndex + 1) % triggerCount;\n}\n\nfunction focusAfterThreadItemRemoval(\n threadId: string,\n rootContext: ReturnType<typeof useInternalThreadListRoot>,\n): void {\n const root = rootContext.rootRef.current;\n const currentItem = rootContext.itemElements.current.get(threadId);\n if (\n root === null ||\n currentItem === undefined ||\n !currentItem.contains(root.ownerDocument.activeElement)\n ) {\n return;\n }\n\n const triggers = orderedEnabledTriggers(rootContext);\n const currentTrigger = rootContext.triggerElements.current.get(threadId);\n const currentIndex = currentTrigger === undefined ? -1 : triggers.indexOf(currentTrigger);\n const remainingTriggers = triggers.filter((trigger) => !currentItem.contains(trigger));\n const fallback = rootContext.newButtonRef.current;\n const focusTarget =\n remainingTriggers[Math.min(Math.max(currentIndex, 0), remainingTriggers.length - 1)] ??\n fallback ??\n root;\n\n if (focusTarget === root && !root.hasAttribute(\"tabindex\")) {\n root.tabIndex = -1;\n }\n focusTarget.focus();\n}\n\nfunction orderedEnabledTriggers(\n rootContext: ReturnType<typeof useInternalThreadListRoot>,\n): HTMLButtonElement[] {\n return [...rootContext.triggerElements.current.values()]\n .filter((trigger) => trigger.isConnected && !trigger.disabled)\n .sort((left, right) =>\n left.compareDocumentPosition(right) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n );\n}\n\nexport {\n ThreadListEmpty,\n ThreadListItemArchive,\n ThreadListItemDelete,\n ThreadListItemRoot,\n ThreadListItems,\n ThreadListItemTitle,\n ThreadListItemTrigger,\n ThreadListItemUnarchive,\n ThreadListNew,\n ThreadListRoot,\n};\n","import {\n ThreadListEmpty,\n ThreadListItemArchive,\n ThreadListItemDelete,\n ThreadListItemRoot,\n ThreadListItems,\n ThreadListItemTitle,\n ThreadListItemTrigger,\n ThreadListItemUnarchive,\n ThreadListNew,\n ThreadListRoot,\n} from \"./parts\";\n\nexport const ThreadListPrimitive = {\n Root: ThreadListRoot,\n New: ThreadListNew,\n Items: ThreadListItems,\n Empty: ThreadListEmpty,\n} as const;\n\nexport const ThreadListItemPrimitive = {\n Root: ThreadListItemRoot,\n Trigger: ThreadListItemTrigger,\n Title: ThreadListItemTitle,\n Archive: ThreadListItemArchive,\n Unarchive: ThreadListItemUnarchive,\n Delete: ThreadListItemDelete,\n} as const;\n\nexport type {\n ThreadListController,\n ThreadListItemContextValue,\n ThreadListProviderProps,\n ThreadListRecord,\n} from \"../contexts\";\nexport { ThreadListProvider, useThreadList, useThreadListItem } from \"../contexts\";\n"],"mappings":"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","names":["ThreadListRoot","ThreadListNew","ThreadListItems","ThreadListEmpty","ThreadListItemRoot","ThreadListItemTrigger","ThreadListItemTitle"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// src/message/elements.ts
|
|
2
|
+
var messageIds = /* @__PURE__ */ new WeakMap();
|
|
3
|
+
function registerMessageElement(element, messageId) {
|
|
4
|
+
messageIds.set(element, messageId);
|
|
5
|
+
}
|
|
6
|
+
function messageElementFromNode(node) {
|
|
7
|
+
let element = node?.nodeType === Node.ELEMENT_NODE ? node : node?.parentElement ?? void 0;
|
|
8
|
+
while (element !== void 0 && element !== null) {
|
|
9
|
+
const messageId = messageIds.get(element);
|
|
10
|
+
if (messageId !== void 0) {
|
|
11
|
+
return { element, messageId };
|
|
12
|
+
}
|
|
13
|
+
element = element.parentElement ?? void 0;
|
|
14
|
+
}
|
|
15
|
+
return void 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
registerMessageElement,
|
|
20
|
+
messageElementFromNode
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chunk-6XOJFLX4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/message/elements.ts"],"sourcesContent":["const messageIds = new WeakMap<HTMLElement, string>();\n\nexport function registerMessageElement(element: HTMLElement, messageId: string): void {\n messageIds.set(element, messageId);\n}\n\nexport function messageElementFromNode(\n node: Node | null,\n): { element: HTMLElement; messageId: string } | undefined {\n let element =\n node?.nodeType === Node.ELEMENT_NODE\n ? (node as HTMLElement)\n : (node?.parentElement ?? undefined);\n\n while (element !== undefined && element !== null) {\n const messageId = messageIds.get(element);\n if (messageId !== undefined) {\n return { element, messageId };\n }\n element = element.parentElement ?? undefined;\n }\n return undefined;\n}\n"],"mappings":";AAAA,IAAM,aAAa,oBAAI,QAA6B;AAE7C,SAAS,uBAAuB,SAAsB,WAAyB;AACpF,aAAW,IAAI,SAAS,SAAS;AACnC;AAEO,SAAS,uBACd,MACyD;AACzD,MAAI,UACF,MAAM,aAAa,KAAK,eACnB,OACA,MAAM,iBAAiB;AAE9B,SAAO,YAAY,UAAa,YAAY,MAAM;AAChD,UAAM,YAAY,WAAW,IAAI,OAAO;AACxC,QAAI,cAAc,QAAW;AAC3B,aAAO,EAAE,SAAS,UAAU;AAAA,IAC9B;AACA,cAAU,QAAQ,iBAAiB;AAAA,EACrC;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/format/message.ts
|
|
2
|
+
function messageText(message) {
|
|
3
|
+
return message.parts.filter((part) => part.type === "text").map((part) => part.text).join("");
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
// src/format/value.ts
|
|
7
|
+
function stringifyValue(value) {
|
|
8
|
+
if (value === void 0) {
|
|
9
|
+
return "";
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === "string") {
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
return JSON.stringify(value, null, 2);
|
|
16
|
+
} catch {
|
|
17
|
+
return String(value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
messageText,
|
|
23
|
+
stringifyValue
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-CKA4CE26.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/format/message.ts","../src/format/value.ts"],"sourcesContent":["import type { UIMessage, UIMessagePart } from \"@anvia/client\";\n\nexport function messageText(message: UIMessage): string {\n return message.parts\n .filter((part): part is Extract<UIMessagePart, { type: \"text\" }> => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\");\n}\n","export function stringifyValue(value: unknown): string {\n if (value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n"],"mappings":";AAEO,SAAS,YAAY,SAA4B;AACtD,SAAO,QAAQ,MACZ,OAAO,CAAC,SAA2D,KAAK,SAAS,MAAM,EACvF,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,EAAE;AACZ;;;ACPO,SAAS,eAAe,OAAwB;AACrD,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,MAAI;AACF,WAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,EACtC,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;","names":[]}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
registerMessageElement
|
|
3
|
+
} from "./chunk-6XOJFLX4.js";
|
|
1
4
|
import {
|
|
2
5
|
StreamMarkdown
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-F6AKBUO3.js";
|
|
7
|
+
import {
|
|
8
|
+
AttachmentPrimitive
|
|
9
|
+
} from "./chunk-MISX4WUT.js";
|
|
4
10
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
11
|
+
messageText,
|
|
12
|
+
stringifyValue
|
|
13
|
+
} from "./chunk-CKA4CE26.js";
|
|
7
14
|
import {
|
|
15
|
+
composeRefs,
|
|
8
16
|
renderPrimitive
|
|
9
17
|
} from "./chunk-T3ZFZ3NP.js";
|
|
10
18
|
import {
|
|
@@ -14,32 +22,10 @@ import {
|
|
|
14
22
|
useMessage,
|
|
15
23
|
useMessagePart,
|
|
16
24
|
useOptionalMessagePart
|
|
17
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-SOG2GVE4.js";
|
|
18
26
|
|
|
19
27
|
// src/message/actions.tsx
|
|
20
28
|
import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
|
|
21
|
-
|
|
22
|
-
// src/format/message.ts
|
|
23
|
-
function messageText(message) {
|
|
24
|
-
return message.parts.filter((part) => part.type === "text").map((part) => part.text).join("");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// src/format/value.ts
|
|
28
|
-
function stringifyValue(value) {
|
|
29
|
-
if (value === void 0) {
|
|
30
|
-
return "";
|
|
31
|
-
}
|
|
32
|
-
if (typeof value === "string") {
|
|
33
|
-
return value;
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
return JSON.stringify(value, null, 2);
|
|
37
|
-
} catch {
|
|
38
|
-
return String(value);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// src/message/actions.tsx
|
|
43
29
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
44
30
|
var MessageActions = forwardRef(
|
|
45
31
|
function MessageActions2(props, ref) {
|
|
@@ -50,8 +36,7 @@ var MessageActions = forwardRef(
|
|
|
50
36
|
children: props.children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
51
37
|
/* @__PURE__ */ jsx(MessageCopy, {}),
|
|
52
38
|
/* @__PURE__ */ jsx(MessageRegenerate, {})
|
|
53
|
-
] })
|
|
54
|
-
"data-anvia-message-actions": ""
|
|
39
|
+
] })
|
|
55
40
|
},
|
|
56
41
|
ref
|
|
57
42
|
);
|
|
@@ -97,7 +82,6 @@ var MessageCopy = forwardRef(function MessageCopy2({ onClick, ...props }, ref) {
|
|
|
97
82
|
disabled,
|
|
98
83
|
onClick: handleClick,
|
|
99
84
|
type: props.type ?? "button",
|
|
100
|
-
"data-anvia-copy": "",
|
|
101
85
|
"data-state": copyState
|
|
102
86
|
},
|
|
103
87
|
ref
|
|
@@ -108,7 +92,7 @@ var MessageRegenerate = forwardRef(
|
|
|
108
92
|
const chat = useChatContext();
|
|
109
93
|
const { message } = useMessage();
|
|
110
94
|
const latestAssistantMessage = [...chat.messages].reverse().find((item) => item.role === "assistant");
|
|
111
|
-
const disabled = props.disabled ?? (chat.status === "streaming" || message.role !== "assistant" || latestAssistantMessage?.id !== message.id);
|
|
95
|
+
const disabled = props.disabled ?? (chat.status === "submitted" || chat.status === "streaming" || message.role !== "assistant" || latestAssistantMessage?.id !== message.id);
|
|
112
96
|
const handleClick = useCallback(
|
|
113
97
|
(event) => {
|
|
114
98
|
onClick?.(event);
|
|
@@ -127,7 +111,6 @@ var MessageRegenerate = forwardRef(
|
|
|
127
111
|
disabled,
|
|
128
112
|
onClick: handleClick,
|
|
129
113
|
type: props.type ?? "button",
|
|
130
|
-
"data-anvia-regenerate": "",
|
|
131
114
|
"data-state": disabled ? "disabled" : "idle"
|
|
132
115
|
},
|
|
133
116
|
ref
|
|
@@ -139,17 +122,7 @@ var MessageRegenerate = forwardRef(
|
|
|
139
122
|
import { forwardRef as forwardRef2 } from "react";
|
|
140
123
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
141
124
|
var MessageEntity = forwardRef2(function MessageEntity2({ children, entity, ...props }, ref) {
|
|
142
|
-
return /* @__PURE__ */ jsx2(
|
|
143
|
-
"span",
|
|
144
|
-
{
|
|
145
|
-
...props,
|
|
146
|
-
"data-anvia-message-entity": "",
|
|
147
|
-
"data-entity-id": entity.id,
|
|
148
|
-
"data-trigger-id": entity.triggerId,
|
|
149
|
-
ref,
|
|
150
|
-
children: children ?? entity.text
|
|
151
|
-
}
|
|
152
|
-
);
|
|
125
|
+
return /* @__PURE__ */ jsx2("span", { ...props, "data-role": "entity", ref, children: children ?? entity.text });
|
|
153
126
|
});
|
|
154
127
|
|
|
155
128
|
// src/message/parts.tsx
|
|
@@ -164,6 +137,55 @@ import {
|
|
|
164
137
|
} from "react";
|
|
165
138
|
import remarkGfm from "remark-gfm";
|
|
166
139
|
|
|
140
|
+
// src/strict-json.ts
|
|
141
|
+
function isComposerEntityData(value) {
|
|
142
|
+
return isComposerEntityDataWithAncestors(value, /* @__PURE__ */ new WeakSet());
|
|
143
|
+
}
|
|
144
|
+
function isComposerEntityDataWithAncestors(value, ancestors) {
|
|
145
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") return true;
|
|
146
|
+
if (typeof value === "number") return Number.isFinite(value);
|
|
147
|
+
if (typeof value !== "object" || ancestors.has(value)) return false;
|
|
148
|
+
ancestors.add(value);
|
|
149
|
+
try {
|
|
150
|
+
if (Array.isArray(value)) {
|
|
151
|
+
if (Object.getPrototypeOf(value) !== Array.prototype || !hasOnlyDenseArrayProperties(value)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
155
|
+
if (!isComposerEntityDataWithAncestors(value[index], ancestors)) return false;
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
const prototype = Object.getPrototypeOf(value);
|
|
160
|
+
if (prototype !== Object.prototype && prototype !== null) return false;
|
|
161
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
162
|
+
if (typeof key !== "string") return false;
|
|
163
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
164
|
+
if (descriptor === void 0 || !descriptor.enumerable || !("value" in descriptor) || !isComposerEntityDataWithAncestors(descriptor.value, ancestors)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return true;
|
|
169
|
+
} catch {
|
|
170
|
+
return false;
|
|
171
|
+
} finally {
|
|
172
|
+
ancestors.delete(value);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function hasOnlyDenseArrayProperties(value) {
|
|
176
|
+
const keys = Reflect.ownKeys(value);
|
|
177
|
+
if (keys.length !== value.length + 1 || keys.at(-1) !== "length") return false;
|
|
178
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
179
|
+
const key = String(index);
|
|
180
|
+
if (keys[index] !== key) return false;
|
|
181
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
182
|
+
if (descriptor === void 0 || !descriptor.enumerable || !("value" in descriptor)) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
|
|
167
189
|
// src/entities.ts
|
|
168
190
|
function messageTextLayout(parts) {
|
|
169
191
|
const textParts = parts.filter(
|
|
@@ -184,9 +206,10 @@ function messageTextLayout(parts) {
|
|
|
184
206
|
}
|
|
185
207
|
function validComposerEntities(text, metadata) {
|
|
186
208
|
const candidates = composerEntityCandidates(metadata);
|
|
187
|
-
const individuallyValid = candidates.flatMap(
|
|
188
|
-
|
|
189
|
-
|
|
209
|
+
const individuallyValid = candidates.flatMap((candidate, index) => {
|
|
210
|
+
const entity = parseComposerEntity(candidate, text);
|
|
211
|
+
return entity === void 0 ? [] : [{ entity, index }];
|
|
212
|
+
});
|
|
190
213
|
individuallyValid.sort(
|
|
191
214
|
(left, right) => left.entity.range.from - right.entity.range.from || left.entity.range.to - right.entity.range.to || left.index - right.index
|
|
192
215
|
);
|
|
@@ -249,15 +272,28 @@ function composerEntityCandidates(metadata) {
|
|
|
249
272
|
}
|
|
250
273
|
return Array.isArray(metadata.composer.entities) ? metadata.composer.entities : [];
|
|
251
274
|
}
|
|
252
|
-
function
|
|
275
|
+
function parseComposerEntity(value, text) {
|
|
253
276
|
if (!isRecord(value) || !isRecord(value.range)) {
|
|
254
|
-
return
|
|
277
|
+
return void 0;
|
|
255
278
|
}
|
|
256
279
|
if (!isNonEmptyString(value.id) || !isNonEmptyString(value.triggerId) || !isNonEmptyString(value.trigger) || !isNonEmptyString(value.label) || !isNonEmptyString(value.text)) {
|
|
257
|
-
return
|
|
280
|
+
return void 0;
|
|
258
281
|
}
|
|
259
282
|
const { from, to } = value.range;
|
|
260
|
-
|
|
283
|
+
if (typeof from !== "number" || typeof to !== "number" || !Number.isInteger(from) || !Number.isInteger(to) || from < 0 || to <= from || to > text.length || text.slice(from, to) !== value.text) {
|
|
284
|
+
return void 0;
|
|
285
|
+
}
|
|
286
|
+
if (value.data !== void 0 && !isComposerEntityData(value.data)) return void 0;
|
|
287
|
+
const entity = {
|
|
288
|
+
id: value.id,
|
|
289
|
+
triggerId: value.triggerId,
|
|
290
|
+
trigger: value.trigger,
|
|
291
|
+
label: value.label,
|
|
292
|
+
text: value.text,
|
|
293
|
+
range: { from, to }
|
|
294
|
+
};
|
|
295
|
+
if (value.data !== void 0) entity.data = value.data;
|
|
296
|
+
return entity;
|
|
261
297
|
}
|
|
262
298
|
function isNonEmptyString(value) {
|
|
263
299
|
return typeof value === "string" && value.length > 0;
|
|
@@ -295,8 +331,7 @@ function messageEntityRehypeOptions() {
|
|
|
295
331
|
type: "element",
|
|
296
332
|
tagName: "span",
|
|
297
333
|
properties: {
|
|
298
|
-
|
|
299
|
-
dataAnviaEntityIndex: entityIndex === void 0 ? "" : String(entityIndex)
|
|
334
|
+
dataEntityIndex: entityIndex === void 0 ? "" : String(entityIndex)
|
|
300
335
|
},
|
|
301
336
|
children: [{ type: "text", value: node.value ?? "" }]
|
|
302
337
|
};
|
|
@@ -523,27 +558,29 @@ var MessageParts = forwardRef3(function MessageParts2({ children, filter, stream
|
|
|
523
558
|
{
|
|
524
559
|
...props,
|
|
525
560
|
children: renderMessagePartNodes(parts, children),
|
|
526
|
-
"data-
|
|
561
|
+
"data-role": "parts"
|
|
527
562
|
},
|
|
528
563
|
ref
|
|
529
564
|
);
|
|
530
565
|
});
|
|
531
566
|
var SmoothedMessageParts = forwardRef3(
|
|
532
567
|
function SmoothedMessageParts2({ children, parts, stream, ...props }, ref) {
|
|
533
|
-
const
|
|
568
|
+
const streamOptions = {
|
|
534
569
|
adapter: messagePartStreamAdapter,
|
|
535
570
|
isStreaming: stream.isStreaming,
|
|
536
|
-
resetKey: stream.resetKey
|
|
537
|
-
|
|
538
|
-
|
|
571
|
+
resetKey: stream.resetKey
|
|
572
|
+
};
|
|
573
|
+
if (stream.flushImmediately !== void 0) {
|
|
574
|
+
Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });
|
|
575
|
+
}
|
|
576
|
+
const smooth = useSmoothStreamItems(parts, streamOptions);
|
|
539
577
|
return renderPrimitive(
|
|
540
578
|
"div",
|
|
541
579
|
{
|
|
542
580
|
...props,
|
|
543
581
|
children: renderMessagePartNodes(smooth.items, children, smooth.liveItemKey),
|
|
544
|
-
"data-
|
|
545
|
-
"data-
|
|
546
|
-
"data-streaming": stream.isStreaming ? "" : void 0
|
|
582
|
+
"data-role": "parts",
|
|
583
|
+
"data-state": smooth.isDraining ? "draining" : stream.isStreaming ? "streaming" : "idle"
|
|
547
584
|
},
|
|
548
585
|
ref
|
|
549
586
|
);
|
|
@@ -569,8 +606,7 @@ var MessagePart = forwardRef3(function MessagePart2({ children, ...props }, ref)
|
|
|
569
606
|
{
|
|
570
607
|
...props,
|
|
571
608
|
children: renderedChildren,
|
|
572
|
-
"data-
|
|
573
|
-
"data-part": part.type
|
|
609
|
+
"data-role": part.type
|
|
574
610
|
},
|
|
575
611
|
ref
|
|
576
612
|
);
|
|
@@ -594,19 +630,21 @@ var MessageText = forwardRef3(function MessageText2(props, ref) {
|
|
|
594
630
|
var MessageTextContent = forwardRef3(
|
|
595
631
|
function MessageTextContent2({ content, partId, stream, streamControlled, ...props }, ref) {
|
|
596
632
|
const ownsStream = stream !== void 0 && !streamControlled && props.children === void 0;
|
|
597
|
-
const
|
|
633
|
+
const streamOptions = {
|
|
598
634
|
isStreaming: ownsStream ? stream.isStreaming : false,
|
|
599
|
-
resetKey: ownsStream ? stream.resetKey : partId
|
|
600
|
-
|
|
601
|
-
|
|
635
|
+
resetKey: ownsStream ? stream.resetKey : partId
|
|
636
|
+
};
|
|
637
|
+
if (ownsStream && stream.flushImmediately !== void 0) {
|
|
638
|
+
Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });
|
|
639
|
+
}
|
|
640
|
+
const smooth = useSmoothStreamText(content, streamOptions);
|
|
602
641
|
return renderPrimitive(
|
|
603
642
|
"span",
|
|
604
643
|
{
|
|
605
644
|
...props,
|
|
606
645
|
children: props.children ?? (ownsStream ? smooth.text : content),
|
|
607
|
-
"data-
|
|
608
|
-
"data-
|
|
609
|
-
"data-streaming": ownsStream && stream.isStreaming ? "" : void 0
|
|
646
|
+
"data-role": "text",
|
|
647
|
+
"data-state": ownsStream ? smooth.isDraining ? "draining" : stream.isStreaming ? "streaming" : "idle" : void 0
|
|
610
648
|
},
|
|
611
649
|
ref
|
|
612
650
|
);
|
|
@@ -656,11 +694,14 @@ var MessageMarkdownContent = forwardRef3(
|
|
|
656
694
|
...props
|
|
657
695
|
}, ref) {
|
|
658
696
|
const ownsStream = stream !== void 0 && !streamControlled;
|
|
659
|
-
const
|
|
697
|
+
const streamOptions = {
|
|
660
698
|
isStreaming: ownsStream ? stream.isStreaming : false,
|
|
661
|
-
resetKey: ownsStream ? stream.resetKey : resetKey
|
|
662
|
-
|
|
663
|
-
|
|
699
|
+
resetKey: ownsStream ? stream.resetKey : resetKey
|
|
700
|
+
};
|
|
701
|
+
if (ownsStream && stream.flushImmediately !== void 0) {
|
|
702
|
+
Object.assign(streamOptions, { flushImmediately: stream.flushImmediately });
|
|
703
|
+
}
|
|
704
|
+
const smooth = useSmoothStreamText(markdown, streamOptions);
|
|
664
705
|
const renderedMarkdown = ownsStream ? smooth.text : markdown;
|
|
665
706
|
const renderedEntities = useMemo(
|
|
666
707
|
() => entities.length === 0 ? entities : validComposerEntities(renderedMarkdown, {
|
|
@@ -686,9 +727,7 @@ var MessageMarkdownContent = forwardRef3(
|
|
|
686
727
|
...props,
|
|
687
728
|
components: renderedComponents,
|
|
688
729
|
content: renderedMarkdown,
|
|
689
|
-
"data-
|
|
690
|
-
"data-draining": ownsStream && smooth.isDraining ? "" : void 0,
|
|
691
|
-
"data-streaming": ownsStream && stream.isStreaming ? "" : void 0,
|
|
730
|
+
"data-state": ownsStream && smooth.isDraining ? "draining" : ownsStream && stream.isStreaming ? "streaming" : "idle",
|
|
692
731
|
live,
|
|
693
732
|
ref,
|
|
694
733
|
remarkPlugins: renderedRemarkPlugins,
|
|
@@ -705,20 +744,18 @@ function markdownComponents(components, entities, renderEntity) {
|
|
|
705
744
|
...components,
|
|
706
745
|
span(spanProps) {
|
|
707
746
|
const internalProps = spanProps;
|
|
708
|
-
const entityIndexValue = internalProps["data-
|
|
747
|
+
const entityIndexValue = internalProps["data-entity-index"];
|
|
709
748
|
const entityIndex = typeof entityIndexValue === "string" && /^\d+$/.test(entityIndexValue) ? Number(entityIndexValue) : void 0;
|
|
710
749
|
const entity = entityIndex === void 0 ? void 0 : entities[entityIndex];
|
|
711
750
|
const consumerProps = { ...internalProps };
|
|
712
|
-
delete consumerProps["data-
|
|
751
|
+
delete consumerProps["data-entity-index"];
|
|
713
752
|
if (entity !== void 0) {
|
|
714
753
|
if (renderEntity !== void 0) {
|
|
715
754
|
return renderEntity(entity);
|
|
716
755
|
}
|
|
717
756
|
const entityProps = {
|
|
718
757
|
...consumerProps,
|
|
719
|
-
"data-
|
|
720
|
-
"data-entity-id": entity.id,
|
|
721
|
-
"data-trigger-id": entity.triggerId
|
|
758
|
+
"data-role": "entity"
|
|
722
759
|
};
|
|
723
760
|
if (consumerSpan !== void 0) {
|
|
724
761
|
return createElement(consumerSpan, entityProps);
|
|
@@ -740,9 +777,8 @@ var MessageCodeBlock = forwardRef3(
|
|
|
740
777
|
"pre",
|
|
741
778
|
{
|
|
742
779
|
...props,
|
|
743
|
-
|
|
744
|
-
"
|
|
745
|
-
"data-language": language
|
|
780
|
+
"data-role": "code-block",
|
|
781
|
+
children: children ?? /* @__PURE__ */ jsx3("code", { className: language === void 0 ? void 0 : `language-${language}`, children: code ?? "" })
|
|
746
782
|
},
|
|
747
783
|
ref
|
|
748
784
|
);
|
|
@@ -761,8 +797,7 @@ var MessageReasoning = forwardRef3(
|
|
|
761
797
|
children: props.children ?? /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
762
798
|
/* @__PURE__ */ jsx3("summary", { children: "Reasoning" }),
|
|
763
799
|
/* @__PURE__ */ jsx3("pre", { children: part.text })
|
|
764
|
-
] })
|
|
765
|
-
"data-anvia-reasoning": ""
|
|
800
|
+
] })
|
|
766
801
|
},
|
|
767
802
|
ref
|
|
768
803
|
);
|
|
@@ -779,7 +814,7 @@ var MessageTool = forwardRef3(function MessageTool2({ children, renderWhen = "al
|
|
|
779
814
|
{
|
|
780
815
|
...props,
|
|
781
816
|
children: renderedChildren,
|
|
782
|
-
"data-
|
|
817
|
+
"data-role": "tool",
|
|
783
818
|
"data-state": part.state
|
|
784
819
|
},
|
|
785
820
|
ref
|
|
@@ -795,8 +830,7 @@ var MessageToolName = forwardRef3(
|
|
|
795
830
|
"span",
|
|
796
831
|
{
|
|
797
832
|
...props,
|
|
798
|
-
children: props.children ?? part.toolName
|
|
799
|
-
"data-anvia-tool-name": ""
|
|
833
|
+
children: props.children ?? part.toolName
|
|
800
834
|
},
|
|
801
835
|
ref
|
|
802
836
|
);
|
|
@@ -813,7 +847,6 @@ var MessageToolStatus = forwardRef3(
|
|
|
813
847
|
{
|
|
814
848
|
...props,
|
|
815
849
|
children: props.children ?? toolStateLabel(part.state),
|
|
816
|
-
"data-anvia-tool-status": "",
|
|
817
850
|
"data-state": part.state
|
|
818
851
|
},
|
|
819
852
|
ref
|
|
@@ -823,15 +856,14 @@ var MessageToolStatus = forwardRef3(
|
|
|
823
856
|
var MessageToolInput = forwardRef3(
|
|
824
857
|
function MessageToolInput2(props, ref) {
|
|
825
858
|
const { part } = useMessagePart();
|
|
826
|
-
if (part.type !== "tool"
|
|
859
|
+
if (part.type !== "tool") {
|
|
827
860
|
return null;
|
|
828
861
|
}
|
|
829
862
|
return renderPrimitive(
|
|
830
863
|
"pre",
|
|
831
864
|
{
|
|
832
865
|
...props,
|
|
833
|
-
children: props.children ?? stringifyValue(part.input)
|
|
834
|
-
"data-anvia-tool-input": ""
|
|
866
|
+
children: props.children ?? stringifyValue(part.input)
|
|
835
867
|
},
|
|
836
868
|
ref
|
|
837
869
|
);
|
|
@@ -840,15 +872,14 @@ var MessageToolInput = forwardRef3(
|
|
|
840
872
|
var MessageToolOutput = forwardRef3(
|
|
841
873
|
function MessageToolOutput2(props, ref) {
|
|
842
874
|
const { part } = useMessagePart();
|
|
843
|
-
if (part.type !== "tool" || part.
|
|
875
|
+
if (part.type !== "tool" || part.state !== "output-available") {
|
|
844
876
|
return null;
|
|
845
877
|
}
|
|
846
878
|
return renderPrimitive(
|
|
847
879
|
"pre",
|
|
848
880
|
{
|
|
849
881
|
...props,
|
|
850
|
-
children: props.children ?? stringifyValue(part.output)
|
|
851
|
-
"data-anvia-tool-output": ""
|
|
882
|
+
children: props.children ?? stringifyValue(part.output)
|
|
852
883
|
},
|
|
853
884
|
ref
|
|
854
885
|
);
|
|
@@ -857,7 +888,7 @@ var MessageToolOutput = forwardRef3(
|
|
|
857
888
|
var MessageToolError = forwardRef3(
|
|
858
889
|
function MessageToolError2(props, ref) {
|
|
859
890
|
const { part } = useMessagePart();
|
|
860
|
-
if (part.type !== "tool" || part.
|
|
891
|
+
if (part.type !== "tool" || part.state !== "error") {
|
|
861
892
|
return null;
|
|
862
893
|
}
|
|
863
894
|
return renderPrimitive(
|
|
@@ -865,7 +896,6 @@ var MessageToolError = forwardRef3(
|
|
|
865
896
|
{
|
|
866
897
|
...props,
|
|
867
898
|
children: props.children ?? part.error.message,
|
|
868
|
-
"data-anvia-tool-error": "",
|
|
869
899
|
role: props.role ?? "alert"
|
|
870
900
|
},
|
|
871
901
|
ref
|
|
@@ -878,13 +908,12 @@ var MessageAttachment = forwardRef3(
|
|
|
878
908
|
if (part.type !== "attachment") {
|
|
879
909
|
return null;
|
|
880
910
|
}
|
|
881
|
-
const renderedChildren = typeof children === "function" ? children(part.attachment) : children ?? /* @__PURE__ */ jsx3(
|
|
911
|
+
const renderedChildren = typeof children === "function" ? children(part.attachment) : children ?? /* @__PURE__ */ jsx3(AttachmentPrimitive.Root, {});
|
|
882
912
|
return /* @__PURE__ */ jsx3(InternalAttachmentProvider, { value: { attachment: part.attachment }, children: renderPrimitive(
|
|
883
913
|
"div",
|
|
884
914
|
{
|
|
885
915
|
...props,
|
|
886
|
-
children: renderedChildren
|
|
887
|
-
"data-anvia-message-attachment": ""
|
|
916
|
+
children: renderedChildren
|
|
888
917
|
},
|
|
889
918
|
ref
|
|
890
919
|
) });
|
|
@@ -900,9 +929,7 @@ var MessageData = forwardRef3(
|
|
|
900
929
|
"pre",
|
|
901
930
|
{
|
|
902
931
|
...props,
|
|
903
|
-
children: props.children ?? stringifyValue(part.data)
|
|
904
|
-
"data-anvia-data": "",
|
|
905
|
-
"data-name": part.name
|
|
932
|
+
children: props.children ?? stringifyValue(part.data)
|
|
906
933
|
},
|
|
907
934
|
ref
|
|
908
935
|
);
|
|
@@ -919,7 +946,6 @@ var MessageError = forwardRef3(
|
|
|
919
946
|
{
|
|
920
947
|
...props,
|
|
921
948
|
children: props.children ?? part.error.message,
|
|
922
|
-
"data-anvia-error": "",
|
|
923
949
|
role: props.role ?? "alert"
|
|
924
950
|
},
|
|
925
951
|
ref
|
|
@@ -959,18 +985,7 @@ function defaultCodeComponent({
|
|
|
959
985
|
node: _node,
|
|
960
986
|
...props
|
|
961
987
|
}) {
|
|
962
|
-
|
|
963
|
-
return /* @__PURE__ */ jsx3(
|
|
964
|
-
"code",
|
|
965
|
-
{
|
|
966
|
-
className,
|
|
967
|
-
"data-anvia-code": "",
|
|
968
|
-
"data-anvia-inline-code": language === void 0 ? "" : void 0,
|
|
969
|
-
"data-language": language,
|
|
970
|
-
...props,
|
|
971
|
-
children
|
|
972
|
-
}
|
|
973
|
-
);
|
|
988
|
+
return /* @__PURE__ */ jsx3("code", { className, ...props, children });
|
|
974
989
|
}
|
|
975
990
|
function defaultPreComponent({
|
|
976
991
|
children,
|
|
@@ -999,20 +1014,25 @@ function toolStateLabel(state) {
|
|
|
999
1014
|
}
|
|
1000
1015
|
|
|
1001
1016
|
// src/message/root.tsx
|
|
1002
|
-
import { forwardRef as forwardRef4 } from "react";
|
|
1017
|
+
import { forwardRef as forwardRef4, useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
|
1003
1018
|
var MessageRoot = forwardRef4(function MessageRoot2({ children, ...props }, ref) {
|
|
1004
1019
|
const { message } = useMessage();
|
|
1005
1020
|
const renderedChildren = typeof children === "function" ? children(message) : children;
|
|
1021
|
+
const registerElement = useCallback2(
|
|
1022
|
+
(element) => {
|
|
1023
|
+
if (element !== null) registerMessageElement(element, message.id);
|
|
1024
|
+
},
|
|
1025
|
+
[message.id]
|
|
1026
|
+
);
|
|
1027
|
+
const composedRef = useMemo2(() => composeRefs(ref, registerElement), [ref, registerElement]);
|
|
1006
1028
|
return renderPrimitive(
|
|
1007
1029
|
"article",
|
|
1008
1030
|
{
|
|
1009
1031
|
...props,
|
|
1010
1032
|
children: renderedChildren,
|
|
1011
|
-
"data-anvia-message": "",
|
|
1012
|
-
"data-anvia-message-id": message.id,
|
|
1013
1033
|
"data-role": message.role
|
|
1014
1034
|
},
|
|
1015
|
-
|
|
1035
|
+
composedRef
|
|
1016
1036
|
);
|
|
1017
1037
|
});
|
|
1018
1038
|
var MessageContent = forwardRef4(
|
|
@@ -1020,8 +1040,7 @@ var MessageContent = forwardRef4(
|
|
|
1020
1040
|
return renderPrimitive(
|
|
1021
1041
|
"div",
|
|
1022
1042
|
{
|
|
1023
|
-
...props
|
|
1024
|
-
"data-anvia-message-content": ""
|
|
1043
|
+
...props
|
|
1025
1044
|
},
|
|
1026
1045
|
ref
|
|
1027
1046
|
);
|
|
@@ -1029,7 +1048,7 @@ var MessageContent = forwardRef4(
|
|
|
1029
1048
|
);
|
|
1030
1049
|
|
|
1031
1050
|
// src/message/index.ts
|
|
1032
|
-
var
|
|
1051
|
+
var MessagePrimitive = {
|
|
1033
1052
|
Root: MessageRoot,
|
|
1034
1053
|
Content: MessageContent,
|
|
1035
1054
|
Parts: MessageParts,
|
|
@@ -1054,7 +1073,8 @@ var Message = {
|
|
|
1054
1073
|
};
|
|
1055
1074
|
|
|
1056
1075
|
export {
|
|
1076
|
+
isComposerEntityData,
|
|
1057
1077
|
shiftComposerEntityRanges,
|
|
1058
|
-
|
|
1078
|
+
MessagePrimitive
|
|
1059
1079
|
};
|
|
1060
|
-
//# sourceMappingURL=chunk-
|
|
1080
|
+
//# sourceMappingURL=chunk-CRXNFZRW.js.map
|