@arbidocs/blocks 0.4.33 → 0.4.38

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.
Files changed (78) hide show
  1. package/dist/agents/index.cjs +224 -224
  2. package/dist/agents/index.js +5 -5
  3. package/dist/chat/index.cjs +123 -123
  4. package/dist/chat/index.js +2 -2
  5. package/dist/{chunk-MZL67U2E.cjs → chunk-2EI7NCUA.cjs} +8 -3
  6. package/dist/chunk-2EI7NCUA.cjs.map +1 -0
  7. package/dist/{chunk-PXFJDX2C.js → chunk-4WWM3GQ5.js} +4 -3
  8. package/dist/chunk-4WWM3GQ5.js.map +1 -0
  9. package/dist/{chunk-6DNYPLCD.cjs → chunk-7RGLTF76.cjs} +4 -3
  10. package/dist/chunk-7RGLTF76.cjs.map +1 -0
  11. package/dist/{chunk-4AWS54US.js → chunk-CKB64Z4R.js} +4 -3
  12. package/dist/chunk-CKB64Z4R.js.map +1 -0
  13. package/dist/{chunk-6RXUMBTK.js → chunk-EA6YX3GR.js} +6 -6
  14. package/dist/{chunk-6RXUMBTK.js.map → chunk-EA6YX3GR.js.map} +1 -1
  15. package/dist/{chunk-AZ75JUIH.cjs → chunk-EEGPWOOG.cjs} +5 -5
  16. package/dist/{chunk-AZ75JUIH.cjs.map → chunk-EEGPWOOG.cjs.map} +1 -1
  17. package/dist/{chunk-6YVI74BC.js → chunk-JH25QIZW.js} +439 -12
  18. package/dist/chunk-JH25QIZW.js.map +1 -0
  19. package/dist/{chunk-DLVX6R6B.cjs → chunk-KMYLQIOH.cjs} +3 -3
  20. package/dist/{chunk-DLVX6R6B.cjs.map → chunk-KMYLQIOH.cjs.map} +1 -1
  21. package/dist/{chunk-V6U5KVAR.js → chunk-LQITIYBN.js} +3 -3
  22. package/dist/{chunk-V6U5KVAR.js.map → chunk-LQITIYBN.js.map} +1 -1
  23. package/dist/{chunk-VMCOH3AY.cjs → chunk-NUF2WGGF.cjs} +527 -96
  24. package/dist/chunk-NUF2WGGF.cjs.map +1 -0
  25. package/dist/{chunk-M2YGPC5N.cjs → chunk-SKFSJHVU.cjs} +4 -4
  26. package/dist/{chunk-M2YGPC5N.cjs.map → chunk-SKFSJHVU.cjs.map} +1 -1
  27. package/dist/{chunk-24KQJYSB.js → chunk-SWON6O45.js} +3 -3
  28. package/dist/{chunk-24KQJYSB.js.map → chunk-SWON6O45.js.map} +1 -1
  29. package/dist/{chunk-SEQWI6E4.cjs → chunk-XDTYENKC.cjs} +21 -21
  30. package/dist/{chunk-SEQWI6E4.cjs.map → chunk-XDTYENKC.cjs.map} +1 -1
  31. package/dist/{chunk-2QTT2RZE.cjs → chunk-YJQVLVBJ.cjs} +4 -3
  32. package/dist/chunk-YJQVLVBJ.cjs.map +1 -0
  33. package/dist/{chunk-C7FGONCM.js → chunk-YU2KUMGE.js} +8 -3
  34. package/dist/chunk-YU2KUMGE.js.map +1 -0
  35. package/dist/{chunk-XWEJ5LV2.js → chunk-ZXYHBQFW.js} +3 -3
  36. package/dist/{chunk-XWEJ5LV2.js.map → chunk-ZXYHBQFW.js.map} +1 -1
  37. package/dist/connect/docx.cjs +4 -4
  38. package/dist/connect/docx.js +1 -1
  39. package/dist/connect/index.cjs +12 -12
  40. package/dist/connect/index.js +3 -3
  41. package/dist/docx/NativeDocxEditor.d.ts +2 -2
  42. package/dist/docx/index.cjs +33 -30
  43. package/dist/docx/index.cjs.map +1 -1
  44. package/dist/docx/index.d.ts +2 -2
  45. package/dist/docx/index.js +3 -4
  46. package/dist/docx/index.js.map +1 -1
  47. package/dist/docx/review/DocxEditorReview.d.ts +16 -0
  48. package/dist/docx/review/index.d.ts +3 -0
  49. package/dist/docx/review/reviewModule.d.ts +6 -0
  50. package/dist/docx/review/useReview.d.ts +29 -0
  51. package/dist/facts/index.cjs +8 -8
  52. package/dist/facts/index.js +4 -4
  53. package/dist/files/ExplorerSurface.d.ts +6 -2
  54. package/dist/files/index.cjs +27 -14
  55. package/dist/files/index.cjs.map +1 -1
  56. package/dist/files/index.js +26 -13
  57. package/dist/files/index.js.map +1 -1
  58. package/dist/index.cjs +683 -683
  59. package/dist/index.js +13 -13
  60. package/dist/settings/TriStateFilterMenu.d.ts +3 -1
  61. package/dist/settings/index.cjs +9 -9
  62. package/dist/settings/index.js +2 -2
  63. package/dist/shell/FilterInput.d.ts +3 -1
  64. package/dist/shell/TabHeader.d.ts +2 -0
  65. package/dist/shell/index.cjs +7 -7
  66. package/dist/shell/index.js +2 -2
  67. package/dist/studio/index.cjs +3 -3
  68. package/dist/studio/index.js +2 -2
  69. package/package.json +9 -13
  70. package/src/docx/styles.css +488 -43
  71. package/dist/chunk-2QTT2RZE.cjs.map +0 -1
  72. package/dist/chunk-4AWS54US.js.map +0 -1
  73. package/dist/chunk-6DNYPLCD.cjs.map +0 -1
  74. package/dist/chunk-6YVI74BC.js.map +0 -1
  75. package/dist/chunk-C7FGONCM.js.map +0 -1
  76. package/dist/chunk-MZL67U2E.cjs.map +0 -1
  77. package/dist/chunk-PXFJDX2C.js.map +0 -1
  78. package/dist/chunk-VMCOH3AY.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docx/export.ts","../src/docx/review/reviewModule.ts","../src/docx/review/useReview.ts","../src/docx/review/DocxEditorReview.tsx","../src/docx/mentions.ts","../src/docx/DocxMentions.tsx","../src/docx/streamWordDocument.tsx","../src/docx/NativeDocxEditor.tsx","../src/docx/fonts.ts","../src/docx/StreamedWordArtifact.tsx"],"names":["unzipSync","strFromU8","strToU8","document","zipSync","revisionItemsOf","collectReviewItems","useDocxEditor","useEditorSnapshot","useMemo","createContext","useContext","jsxs","jsx","useState","Fragment","useRef","useEffect","ReviewRailContext","useCallback","useLayoutEffect","extractMentions","Dialog","DialogContent","DialogHeader","DialogTitle","filterMentionCandidates","status","findMentionQuery","createPortal","MentionMenu","renderToStaticMarkup","AiMarkdown","splitMarkdownBlocks","Y","React","useChromeTranslate","DocxEditor","Type","Ellipsis","createHocuspocusCollaboration","DOCUMENT_COLLABORATION_VERSIONS","collaborationModule","WifiOff","Check","Download","Save","RefreshCw","createFontSource"],"mappings":"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","file":"chunk-NUF2WGGF.cjs","sourcesContent":["import { strFromU8, strToU8, unzipSync, zipSync } from 'fflate'\n\n/** Repair Word package declarations and duplicate fragment revision IDs on export. */\nexport function normalizeDocxExport(data: ArrayBuffer): ArrayBuffer {\n const files = unzipSync(new Uint8Array(data))\n const part = '[Content_Types].xml'\n const xml = new DOMParser().parseFromString(strFromU8(files[part]), 'application/xml')\n if (xml.getElementsByTagName('parsererror').length) throw new Error('Invalid DOCX content types.')\n const namespace = 'http://schemas.openxmlformats.org/package/2006/content-types'\n const types: Record<string, string> = {\n 'word/comments.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml',\n 'word/commentsExtended.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml',\n 'word/commentsIds.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsIds+xml',\n 'word/commentsExtensible.xml':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtensible+xml',\n }\n let changed = false\n for (const [name, type] of Object.entries(types)) {\n if (!files[name]) continue\n let override = Array.from(xml.getElementsByTagNameNS(namespace, 'Override')).find(\n (node) => node.getAttribute('PartName') === '/' + name\n )\n if (!override) {\n override = xml.createElementNS(namespace, 'Override')\n override.setAttribute('PartName', '/' + name)\n xml.documentElement.appendChild(override)\n }\n if (override.getAttribute('ContentType') !== type) {\n override.setAttribute('ContentType', type)\n changed = true\n }\n }\n if (changed) files[part] = strToU8(new XMLSerializer().serializeToString(xml))\n const word = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'\n for (const name of Object.keys(files)) {\n if (!/^word\\/(document|header\\d*|footer\\d*|footnotes|endnotes|comments)\\.xml$/.test(name))\n continue\n const document = new DOMParser().parseFromString(strFromU8(files[name]), 'application/xml')\n if (document.getElementsByTagName('parsererror').length)\n throw new Error('Invalid Word document XML.')\n const elements = Array.from(document.getElementsByTagName('*'))\n const used = new Set(\n elements.map((element) => element.getAttributeNS(word, 'id')).filter(Boolean)\n )\n const seen = new Set<string>()\n let next = 1,\n repaired = false\n for (const element of elements) {\n if (\n element.namespaceURI !== word ||\n !['ins', 'del', 'moveFrom', 'moveTo'].includes(element.localName)\n )\n continue\n const id = element.getAttributeNS(word, 'id')\n if (!id) continue\n if (seen.has(id)) {\n while (used.has(String(next))) next++\n const unique = String(next++)\n const attribute = element.getAttributeNodeNS(word, 'id')!\n element.setAttributeNS(word, attribute.name, unique)\n used.add(unique)\n repaired = true\n } else seen.add(id)\n }\n if (repaired) {\n files[name] = strToU8(new XMLSerializer().serializeToString(document))\n changed = true\n }\n }\n if (!changed) return data\n return zipSync(files).slice().buffer as ArrayBuffer\n}\n","import type { EditorModule } from '@docx-editor.dev/core'\nimport { collectReviewItems, revisionItemsOf } from '@docx-editor.dev/core/store'\n\ntype Part = Parameters<typeof revisionItemsOf>[0]\ntype PartNode = { id: string; children?: readonly PartNode[] }\n\nfunction findNode(node: PartNode, id: string): PartNode | undefined {\n if (node.id === id) return node\n for (const child of node.children ?? []) {\n const found = findNode(child, id)\n if (found) return found\n }\n return undefined\n}\n\n/** Revisions wholly inside one paragraph, read from a paragraph-scoped view of the part. */\nfunction revisionItemsOfParagraph(part: Part, paragraphId: string) {\n const paragraph = findNode(part.root as unknown as PartNode, paragraphId)\n if (!paragraph) return []\n return revisionItemsOf({ ...part, root: paragraph as unknown as Part['root'] })\n}\n\n/**\n * Comments and tracked changes: the review queue derivation and the markup display modes, both\n * provided by the Apache-2.0 core engine.\n */\nexport function reviewModule(): EditorModule {\n return {\n id: 'review',\n review: {\n displayModes: ['all-markup', 'simple-markup', 'proposed', 'original'],\n collectReviewItems,\n revisionItemsOfParagraph,\n },\n }\n}\n","import { createContext, useContext, useMemo } from 'react'\nimport type { Editor, ExecResult, ReviewItemPlacement } from '@docx-editor.dev/core'\nimport { useDocxEditor, useEditorSnapshot } from '@docx-editor.dev/react'\n\nexport type ReviewEntry = ReviewItemPlacement\n\nexport interface ReviewApi {\n /** False until the editor has mounted. */\n ready: boolean\n /** Every pending decision, in document order. */\n items: readonly ReviewEntry[]\n activeKey: string | null\n paneOpen: boolean\n setPaneOpen(open: boolean): void\n /** Focus a card's range in the document. Returns false when the engine refuses. */\n setActive(key: string | null, options?: { reveal?: false }): boolean\n reply(entry: ReviewEntry, text: string): boolean\n accept(entry: ReviewEntry): boolean\n reject(entry: ReviewEntry): boolean\n resolve(entry: ReviewEntry, resolved: boolean): boolean\n remove(entry: ReviewEntry): boolean\n addComment(text: string): boolean\n /** Move the document caret to the next or previous tracked change, wrapping at the ends. */\n navigate(direction: 'next' | 'previous'): boolean\n /** Accept or reject every change shown, as one undo step. */\n resolveAll(action: 'accept' | 'reject'): boolean\n}\n\nconst NONE: readonly ReviewEntry[] = []\n\nconst ok = (result: ExecResult | undefined): boolean => result?.ok === true\n\nexport function useReview(): ReviewApi {\n const editor = useDocxEditor() as Editor | null\n // Re-render on every editor event so pane state and the active card stay current.\n const version = useEditorSnapshot(editor)\n const revision = editor?.getReviewRevision() ?? 0\n // The queue is re-derived only when the editor's review revision moves.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const items = useMemo(() => (editor ? editor.getReviewItems() : NONE), [editor, revision])\n const paneOpen = editor?.isReviewPaneOpen() ?? false\n const activeKey = items.find((item) => item.isActive)?.key ?? null\n\n return useMemo<ReviewApi>(\n () => ({\n ready: editor !== null,\n items,\n activeKey,\n paneOpen,\n setPaneOpen: (open) => {\n if (editor && editor.isReviewPaneOpen() !== open) editor.exec({ type: 'toggleReviewPane' })\n },\n setActive: (key, options) => ok(editor?.setActiveReviewItem(key, options)),\n reply: (entry, text) => ok(editor?.replyToReviewItem(entry.key, text)),\n accept: (entry) => ok(editor?.acceptReviewItem(entry.key)),\n reject: (entry) => ok(editor?.rejectReviewItem(entry.key)),\n resolve: (entry, resolved) => ok(editor?.setCommentResolved(entry.key, resolved)),\n remove: (entry) => ok(editor?.deleteReviewItem(entry.key)),\n addComment: (text) => ok(editor?.addComment(text)),\n navigate: (direction) => ok(editor?.exec({ type: 'navigateReviewChange', direction })),\n resolveAll: (action) => ok(editor?.exec({ type: 'resolveAllReviewChanges', action })),\n }),\n [editor, items, activeKey, paneOpen, version]\n )\n}\n\nexport const ReviewItemContext = createContext<ReviewEntry | null>(null)\n\n/** The card being rendered. Null outside a card. */\nexport function useReviewItem(): ReviewEntry | null {\n return useContext(ReviewItemContext)\n}\n","import React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport type { Editor } from '@docx-editor.dev/core'\nimport { ReviewRailContext, useDocxEditor } from '@docx-editor.dev/react'\nimport { ReviewItemContext, useReview, type ReviewEntry } from './useReview'\n\nconst CARD_GAP = 8\n\nconst REVISION_LABELS: Record<string, string> = {\n insert: 'Inserted',\n delete: 'Deleted',\n replace: 'Replaced',\n moveFrom: 'Moved from here',\n moveTo: 'Moved to here',\n format: 'Formatted',\n paragraphMark: 'Paragraph break',\n structural: 'Table change',\n}\n\nfunction isTopLevel(entry: ReviewEntry): boolean {\n if (entry.kind === 'comment') return !entry.parentId && !entry.parentRevisionId\n if (entry.kind === 'custom') return entry.item.carded\n return true\n}\n\nfunction formatDate(value: string | undefined): string {\n if (!value) return ''\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? '' : date.toLocaleString()\n}\n\nfunction Avatar({ entry }: { entry: ReviewEntry }) {\n return (\n <span className=\"native-docx-review-avatar\" aria-hidden=\"true\">\n {entry.initials}\n </span>\n )\n}\n\nfunction Message({ entry }: { entry: ReviewEntry }) {\n return (\n <div className=\"native-docx-review-message\">\n <div className=\"native-docx-review-byline\">\n <Avatar entry={entry} />\n <span className=\"native-docx-review-author\">{entry.author || 'Reviewer'}</span>\n <time className=\"native-docx-review-date\">{formatDate(entry.date)}</time>\n </div>\n <p className=\"native-docx-review-text\" data-testid=\"review-text\">\n {entry.text}\n </p>\n </div>\n )\n}\n\nfunction ReplyForm({\n entry,\n review,\n}: {\n entry: ReviewEntry\n review: ReturnType<typeof useReview>\n}) {\n const [text, setText] = useState('')\n return (\n <form\n className=\"native-docx-review-reply\"\n onSubmit={(event) => {\n event.preventDefault()\n const value = text.trim()\n if (value && review.reply(entry, value)) setText('')\n }}\n >\n <input\n data-testid=\"review-reply-input\"\n aria-label=\"Reply\"\n placeholder=\"Reply\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation()\n review.setActive(null)\n }\n }}\n />\n <button type=\"submit\" disabled={!text.trim()}>\n Reply\n </button>\n <button\n type=\"button\"\n data-testid=\"review-reply-cancel\"\n onClick={() => review.setActive(null)}\n >\n Cancel\n </button>\n </form>\n )\n}\n\nfunction Card({\n entry,\n replies,\n review,\n extra,\n cardRef,\n top,\n}: {\n entry: ReviewEntry\n replies: readonly ReviewEntry[]\n review: ReturnType<typeof useReview>\n extra?: React.ReactNode\n cardRef: (element: HTMLElement | null) => void\n top: number\n}) {\n const resolved = entry.kind === 'comment' && entry.resolved\n return (\n <ReviewItemContext.Provider value={entry}>\n <article\n ref={cardRef}\n className=\"native-docx-review-card\"\n tabIndex={0}\n aria-label={`${entry.kind === 'revision' ? 'Change' : 'Comment'} by ${entry.author || 'reviewer'}`}\n onKeyDown={(event) => {\n if (event.target !== event.currentTarget) return\n if ((event.key === 'Enter' || event.key === ' ') && entry.activatable) {\n event.preventDefault()\n review.setActive(entry.key)\n }\n }}\n data-testid=\"review-card\"\n data-kind={entry.kind}\n data-active={entry.isActive || undefined}\n data-resolved={resolved || undefined}\n style={{ top }}\n onClick={() => {\n if (entry.activatable && !entry.isActive) review.setActive(entry.key)\n }}\n >\n {entry.kind === 'revision' && (\n <div className=\"native-docx-review-kind\">\n {REVISION_LABELS[entry.revisionKind] ?? 'Change'}\n </div>\n )}\n <Message entry={entry} />\n {replies.map((reply) => (\n <Message key={reply.key} entry={reply} />\n ))}\n {extra}\n <div className=\"native-docx-review-actions\">\n {entry.kind === 'revision' && !entry.readOnly && (\n <>\n <button\n type=\"button\"\n data-testid=\"review-accept\"\n onClick={() => review.accept(entry)}\n >\n Accept\n </button>\n <button\n type=\"button\"\n data-testid=\"review-reject\"\n onClick={() => review.reject(entry)}\n >\n Reject\n </button>\n </>\n )}\n {entry.kind === 'comment' && (\n <>\n <button\n type=\"button\"\n data-testid=\"review-resolve\"\n onClick={() => review.resolve(entry, !entry.resolved)}\n >\n {entry.resolved ? 'Reopen' : 'Resolve'}\n </button>\n <button\n type=\"button\"\n data-testid=\"review-delete\"\n onClick={() => review.remove(entry)}\n >\n Delete\n </button>\n </>\n )}\n </div>\n {entry.isActive && entry.kind !== 'custom' && <ReplyForm entry={entry} review={review} />}\n </article>\n </ReviewItemContext.Provider>\n )\n}\n\nfunction Draft({\n top,\n onSubmit,\n onCancel,\n formRef,\n}: {\n top: number\n formRef: (element: HTMLElement | null) => void\n onSubmit: (text: string) => void\n onCancel: () => void\n}) {\n const [text, setText] = useState('')\n const input = useRef<HTMLInputElement>(null)\n useEffect(() => input.current?.focus(), [])\n return (\n <form\n ref={formRef}\n className=\"native-docx-review-card native-docx-review-draft\"\n data-testid=\"review-draft\"\n style={{ top }}\n onSubmit={(event) => {\n event.preventDefault()\n if (text.trim()) onSubmit(text.trim())\n }}\n >\n <input\n ref={input}\n data-testid=\"review-draft-input\"\n aria-label=\"Comment\"\n placeholder=\"Add a comment\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') onCancel()\n }}\n />\n <div className=\"native-docx-review-actions\">\n <button type=\"submit\" disabled={!text.trim()}>\n Comment\n </button>\n <button type=\"button\" data-testid=\"review-draft-cancel\" onClick={onCancel}>\n Cancel\n </button>\n </div>\n </form>\n )\n}\n\n/**\n * The review rail: one card per comment thread or tracked change, aligned to its place in the page.\n * Everything it shows and every action it takes goes through the editor's own review API.\n */\nfunction DocxEditorReviewRail({\n children,\n}: {\n children?: (entry: ReviewEntry) => React.ReactNode\n}) {\n const editor = useDocxEditor() as Editor | null\n const registry = useContext(ReviewRailContext)\n const review = useReview()\n const [draft, setDraft] = useState<{ anchorY: number } | null>(null)\n const [tops, setTops] = useState<Record<string, number>>({})\n const [showResolved, setShowResolved] = useState(true)\n const elements = useRef(new Map<string, HTMLElement>())\n\n const openDraft = useCallback(() => {\n const placement = editor?.getSelectionPlacement()\n if (!placement) return\n review.setPaneOpen(true)\n setDraft({ anchorY: placement.anchorY })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor, review.setPaneOpen])\n\n useEffect(() => registry?.register(), [registry])\n useEffect(() => registry?.registerCommentDraft(openDraft), [registry, openDraft])\n\n const scale = editor?.getRenderScale() ?? 1\n const top = review.items\n .filter(isTopLevel)\n .filter((entry) => entry.anchorY !== null)\n .filter((entry) => showResolved || entry.kind !== 'comment' || !entry.resolved)\n const hasChanges = review.items.some((entry) => entry.kind === 'revision')\n const hasResolved = review.items.some((entry) => entry.kind === 'comment' && entry.resolved)\n const repliesOf = useCallback(\n (entry: ReviewEntry) =>\n review.items.filter(\n (other) =>\n other.kind === 'comment' &&\n (other.parentId === entry.id || other.parentRevisionId === entry.id)\n ),\n [review.items]\n )\n\n // Stack cards downward from their anchors so none overlaps the one above it.\n useLayoutEffect(() => {\n if (!review.paneOpen) return\n const next: Record<string, number> = {}\n let floor = 0\n const rows: { key: string; y: number }[] = top.map((entry) => ({\n key: entry.key,\n y: (entry.anchorY ?? 0) * scale,\n }))\n if (draft) rows.push({ key: '__draft', y: draft.anchorY * scale })\n rows.sort((a, b) => a.y - b.y)\n for (const row of rows) {\n const y = Math.max(row.y, floor)\n next[row.key] = y\n const height = elements.current.get(row.key)?.offsetHeight ?? 96\n floor = y + height + CARD_GAP\n }\n setTops((previous) => {\n const same =\n Object.keys(next).length === Object.keys(previous).length &&\n Object.entries(next).every(([key, value]) => previous[key] === value)\n return same ? previous : next\n })\n })\n\n if (!review.ready) return null\n\n const selection = editor?.getSelectionPlacement()\n const addComment = selection && (\n <button\n type=\"button\"\n className=\"native-docx-review-add\"\n data-testid=\"review-add-comment\"\n aria-label=\"Add comment\"\n style={{ top: selection.anchorY * scale }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={openDraft}\n >\n +\n </button>\n )\n\n if (!review.paneOpen) {\n return (\n <div className=\"native-docx-review-markers\" data-testid=\"review-markers\">\n {addComment}\n {top.map((entry) => (\n <button\n key={entry.key}\n type=\"button\"\n className=\"native-docx-review-marker\"\n data-testid=\"review-marker\"\n data-kind={entry.kind}\n aria-label={`${entry.author}: ${entry.text.slice(0, 60)}`}\n style={{ top: (entry.anchorY ?? 0) * scale }}\n onClick={() => {\n review.setPaneOpen(true)\n review.setActive(entry.key)\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <aside className=\"native-docx-review-pane\" data-testid=\"review-pane\" aria-label=\"Review\">\n {addComment}\n <div className=\"native-docx-review-toolbar\" data-testid=\"review-toolbar\">\n {hasChanges && (\n <>\n <button\n type=\"button\"\n data-testid=\"review-previous\"\n onClick={() => review.navigate('previous')}\n >\n Previous change\n </button>\n <button type=\"button\" data-testid=\"review-next\" onClick={() => review.navigate('next')}>\n Next change\n </button>\n <button\n type=\"button\"\n data-testid=\"review-accept-all\"\n onClick={() => review.resolveAll('accept')}\n >\n Accept all\n </button>\n <button\n type=\"button\"\n data-testid=\"review-reject-all\"\n onClick={() => review.resolveAll('reject')}\n >\n Reject all\n </button>\n </>\n )}\n {hasResolved && (\n <label>\n <input\n type=\"checkbox\"\n data-testid=\"review-show-resolved\"\n checked={showResolved}\n onChange={(event) => setShowResolved(event.target.checked)}\n />\n Show resolved\n </label>\n )}\n </div>\n {draft && (\n <Draft\n top={tops.__draft ?? draft.anchorY * scale}\n formRef={(element) => {\n if (element) elements.current.set('__draft', element)\n }}\n onCancel={() => setDraft(null)}\n onSubmit={(text) => {\n if (review.addComment(text)) setDraft(null)\n }}\n />\n )}\n {top.map((entry) => (\n <Card\n key={entry.key}\n entry={entry}\n replies={repliesOf(entry)}\n review={review}\n extra={children?.(entry)}\n top={tops[entry.key] ?? (entry.anchorY ?? 0) * scale}\n cardRef={(element) => {\n if (element) elements.current.set(entry.key, element)\n else elements.current.delete(entry.key)\n }}\n />\n ))}\n {top.length === 0 && !draft && (\n <p className=\"native-docx-review-empty\" data-testid=\"review-empty\">\n No comments or changes.\n </p>\n )}\n </aside>\n )\n}\n\nfunction ReviewCardSlot({ children }: { children?: React.ReactNode }) {\n return <div className=\"native-docx-review-extra\">{children}</div>\n}\n\nexport const DocxEditorReview = Object.assign(DocxEditorReviewRail, { Card: ReviewCardSlot })\n","import { extractMentions, type MentionCandidate } from '../chat/mentions'\n\nexport interface DocxMention {\n id: string\n name: string\n kind: 'human' | 'agent'\n}\n\nexport function mentionCandidates(mentions: readonly DocxMention[]): MentionCandidate[] {\n return [\n { id: 'arbi', label: 'ARBI', kind: 'assistant' as const },\n ...mentions\n .filter((person) => person.name.trim())\n .map((person) => ({\n id: person.id,\n label: person.name,\n kind: person.kind === 'agent' ? ('assistant' as const) : ('user' as const),\n })),\n ]\n}\n\nexport function mentionedDocxRecipients(text: string, mentions: readonly DocxMention[]): string[] {\n return extractMentions(text, mentionCandidates(mentions)).map((person) => person.id)\n}\n","import React, { createContext, useContext, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useReview, useReviewItem } from './review'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@arbidocs/react/ui'\nimport { MentionMenu } from '../chat/MentionMenu'\nimport { filterMentionCandidates, findMentionQuery } from '../chat/mentions'\nimport { mentionCandidates, mentionedDocxRecipients, type DocxMention } from './mentions'\nexport type { DocxMention } from './mentions'\n\nexport interface DocxAgentCommentRequest {\n commentId: string\n instruction: string\n requestId: string\n recipientIds: string[]\n}\n\nexport type DocxAgentRunStatus =\n 'queued' | 'in_progress' | 'completed' | 'failed' | 'cancelled' | 'incomplete'\nexport interface DocxMentionDelivery {\n responseIds: string[]\n}\ntype Activity = {\n commentId: string\n label: string\n status: DocxAgentRunStatus | 'delivering' | 'unknown'\n}\nconst ActivityContext = createContext<Record<string, Activity>>({})\n\n/** Extra card content using the upstream review context, including a full-thread reader. */\nexport function DocxCommentActivity() {\n const item = useReviewItem()\n const review = useReview()\n const activity = useContext(ActivityContext)\n const [reading, setReading] = useState(false)\n if (!item || item.kind !== 'comment') return null\n const commentId = item.parentId || item.item.id\n const thread = review.items.filter(\n (entry) =>\n entry.kind === 'comment' && (entry.item.id === commentId || entry.parentId === commentId)\n )\n const statuses = Object.entries(activity).filter(([, run]) => run.commentId === commentId)\n const labels = {\n delivering: 'Delivering mention…',\n queued: 'Queued…',\n in_progress: 'Working…',\n completed: 'Finished',\n failed: 'Failed',\n cancelled: 'Stopped',\n incomplete: 'Incomplete',\n unknown: 'Status unavailable',\n }\n return (\n <div className=\"native-docx-comment-extra\" data-review-selectable=\"\">\n {statuses.map(([id, run]) => (\n <div\n key={id}\n role=\"status\"\n data-testid=\"docx-comment-agent-status\"\n data-status={run.status}\n className=\"native-docx-comment-activity\"\n >\n {['delivering', 'queued', 'in_progress'].includes(run.status) && (\n <span className=\"native-docx-agent-spinner\" aria-hidden=\"true\" />\n )}\n {run.label}: {labels[run.status]}\n </div>\n ))}\n <button\n type=\"button\"\n data-testid=\"docx-read-full-thread\"\n onClick={(event) => {\n event.stopPropagation()\n setReading(true)\n }}\n >\n Read full thread\n </button>\n <Dialog open={reading} onOpenChange={setReading}>\n <DialogContent\n className=\"max-h-[85dvh] overflow-y-auto\"\n onClick={(event) => event.stopPropagation()}\n >\n <DialogHeader>\n <DialogTitle>Document comment</DialogTitle>\n </DialogHeader>\n {thread.map((entry) => (\n <div key={entry.key} className=\"space-y-1 border-b pb-4 last:border-0\">\n <p className=\"text-sm font-medium\">{entry.author || 'Reviewer'}</p>\n <p\n className=\"whitespace-pre-wrap break-words text-sm\"\n data-testid=\"docx-full-comment-text\"\n >\n {entry.text}\n </p>\n </div>\n ))}\n {statuses.map(([id, run]) => (\n <p key={id} role=\"status\" className=\"text-sm\">\n {run.label}: {labels[run.status]}\n </p>\n ))}\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n\n/** Adds mentions to the upstream comment inputs without replacing its review layout. */\nexport function DocxMentions({\n children,\n mentions = [],\n initialCommentId,\n requestAgent,\n getAgentStatus,\n notify,\n}: {\n children: React.ReactNode\n mentions?: readonly DocxMention[]\n initialCommentId?: string\n requestAgent?: (request: DocxAgentCommentRequest) => Promise<DocxMentionDelivery | void>\n getAgentStatus?: (responseId: string) => Promise<DocxAgentRunStatus>\n notify?: (message: string, kind: 'success' | 'error') => void\n}) {\n const review = useReview()\n const [activity, setActivity] = useState<Record<string, Activity>>({})\n const root = useRef<HTMLDivElement>(null)\n const [composers, setComposers] = useState<HTMLInputElement[]>([])\n useEffect(() => {\n const element = root.current\n if (!element || !requestAgent) return\n const discover = () => {\n const fields = Array.from(\n element.querySelectorAll<HTMLInputElement>(\n '[data-testid=\"review-draft-input\"], [data-testid=\"review-reply-input\"]'\n )\n ).filter((field) => !field.readOnly && !!field.closest('form'))\n setComposers((previous) =>\n previous.length === fields.length &&\n previous.every((field, index) => field === fields[index])\n ? previous\n : fields\n )\n }\n discover()\n const observer = new MutationObserver(discover)\n observer.observe(element, { childList: true, subtree: true })\n return () => observer.disconnect()\n }, [requestAgent])\n const prefixMention = (field: HTMLInputElement, name = 'ARBI') => {\n const value = `@${name} ${field.value}`\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set?.call(field, value)\n field.dispatchEvent(new Event('input', { bubbles: true }))\n field.focus()\n field.setSelectionRange(value.length, value.length)\n setSuggestions(null)\n }\n const alive = useRef(true)\n useEffect(() => {\n alive.current = true\n return () => {\n alive.current = false\n }\n }, [])\n const activated = useRef<string | undefined>(undefined)\n useEffect(() => {\n if (!initialCommentId || activated.current === initialCommentId || !review.ready) return\n const target = review.items.find(\n (item) => item.kind === 'comment' && item.item.id === initialCommentId\n )\n if (!target) return\n review.setPaneOpen(true)\n if (review.setActive(target.key)) activated.current = initialCommentId\n }, [initialCommentId, review])\n const input = useRef<HTMLInputElement | null>(null)\n const replyTarget = useRef<{ field: HTMLInputElement; key: string } | null>(null)\n const pending = useRef<{\n ids: Set<string>\n text: string\n requestId: string\n recipientIds: string[]\n } | null>(null)\n const [suggestions, setSuggestions] = useState<{\n query: string\n from: number\n left: number\n top: number\n } | null>(null)\n const [selected, setSelected] = useState(0)\n const candidates = filterMentionCandidates(\n mentionCandidates(mentions),\n suggestions?.query || ''\n ).slice(0, 8)\n\n useEffect(() => {\n const submission = pending.current\n if (!submission || !requestAgent) return\n const created = review.items.find(\n (item) =>\n item.kind === 'comment' &&\n !submission.ids.has(item.item.id) &&\n item.text.trim() === submission.text\n )\n if (!created || created.kind !== 'comment') return\n pending.current = null\n const commentId = created.parentId || created.item.id\n const label = submission.recipientIds.includes('arbi') ? 'ARBI' : 'Mentioned agent'\n const update = (status: Activity['status']) => {\n if (alive.current)\n setActivity((previous) => ({\n ...previous,\n [submission.requestId]: { commentId, label, status },\n }))\n }\n // Human-only mentions deliver notifications without showing an agent spinner.\n const hasAgent = submission.recipientIds.some(\n (id) =>\n id === 'arbi' || mentions.some((person) => person.id === id && person.kind === 'agent')\n )\n if (hasAgent) update('delivering')\n void requestAgent({\n commentId,\n instruction: submission.text,\n requestId: submission.requestId,\n recipientIds: submission.recipientIds,\n })\n .then(async (delivery) => {\n if (!delivery?.responseIds.length || !getAgentStatus) {\n if (hasAgent) update('unknown')\n return\n }\n update('queued')\n while (alive.current) {\n try {\n const states = await Promise.all(delivery.responseIds.map((id) => getAgentStatus(id)))\n if (!alive.current) return\n const active =\n states.find((status) => status === 'in_progress') ||\n states.find((status) => status === 'queued')\n const status = active || states.find((status) => status !== 'completed') || 'completed'\n update(status)\n if (!active) return\n } catch {\n // A polling failure is not proof that the agent failed.\n update('unknown')\n }\n await new Promise((resolve) => setTimeout(resolve, 2000))\n }\n })\n .catch((error: unknown) => {\n if (hasAgent) update('failed')\n notify?.(\n error instanceof Error ? error.message : 'Could not start the document agent.',\n 'error'\n )\n })\n }, [review.items, requestAgent, getAgentStatus, mentions, notify])\n\n const choose = (name: string) => {\n const field = input.current\n if (!field || !suggestions) return\n const end = field.selectionStart ?? field.value.length\n const value = field.value.slice(0, suggestions.from) + '@' + name + ' ' + field.value.slice(end)\n // The native setter and input event preserve the upstream controlled input's state.\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set?.call(field, value)\n field.dispatchEvent(new Event('input', { bubbles: true }))\n field.focus()\n field.setSelectionRange(suggestions.from + name.length + 2, suggestions.from + name.length + 2)\n setSuggestions(null)\n }\n const captureSubmission = (target: EventTarget): boolean => {\n const form = (target as HTMLElement).closest('form')\n const field = form?.querySelector<HTMLInputElement>(\n '[data-testid=\"review-draft-input\"], [data-testid=\"review-reply-input\"]'\n )\n if (!field || field.readOnly || !requestAgent) return false\n const recipientIds = mentionedDocxRecipients(field.value, mentions)\n if (!recipientIds.length) return false\n pending.current = {\n ids: new Set(review.items.filter((i) => i.kind === 'comment').map((i) => i.item.id)),\n text: field.value.trim(),\n requestId: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,\n recipientIds,\n }\n // The engine may move its caret to an overlapping tracked revision while\n // an input selection changes. Bind a mentioned reply to the card where\n // composition started, rather than whichever range happens to be active.\n const pinned = replyTarget.current\n const thread = pinned\n ? review.items.find((item) => item.key === pinned.key && item.kind === 'comment')\n : undefined\n if (field.dataset.testid === 'review-reply-input' && pinned && !thread) {\n pending.current = null\n notify?.('This comment was removed. Open a current thread before replying.', 'error')\n return true\n }\n if (field.dataset.testid === 'review-reply-input' && thread) {\n if (!review.reply(thread, field.value.trim())) {\n pending.current = null\n notify?.('Could not post this reply. The comment may have been removed.', 'error')\n } else {\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set?.call(field, '')\n field.dispatchEvent(new Event('input', { bubbles: true }))\n replyTarget.current = null\n review.setActive(thread.key, { reveal: false })\n }\n return true\n }\n return false\n }\n return (\n <ActivityContext.Provider value={activity}>\n <div\n className=\"native-docx-mentions\"\n ref={root}\n onFocusCapture={(event) => {\n const field = event.target\n if (\n !(field instanceof HTMLInputElement) ||\n field.dataset.testid !== 'review-reply-input' ||\n field.value ||\n !requestAgent\n )\n return\n const target = review.items.find(\n (entry) => entry.key === review.activeKey && entry.kind === 'comment'\n )\n if (!target || target.kind !== 'comment') return\n const commentId = target.parentId || target.item.id\n const replies = review.items.filter(\n (entry) => entry.kind === 'comment' && entry.parentId === commentId\n )\n const author = replies.at(-1)?.author || target.author\n const agent = mentions.find((person) => person.kind === 'agent' && person.name === author)\n if (agent || author === 'ARBI' || author === 'Assistant')\n prefixMention(\n field,\n author === 'ARBI' || author === 'Assistant' ? 'ARBI' : agent?.name || 'ARBI'\n )\n }}\n onInputCapture={(event) => {\n const field = event.target\n if (!(field instanceof HTMLInputElement) || !field.dataset.testid?.startsWith('review-'))\n return\n if (!replyTarget.current && review.activeKey)\n replyTarget.current = { field, key: review.activeKey }\n input.current = field\n const before = field.value.slice(0, field.selectionStart ?? field.value.length)\n const match = findMentionQuery(before, before.length)\n if (!match) return setSuggestions(null)\n const rect = field.getBoundingClientRect()\n setSelected(0)\n setSuggestions({\n query: match.query,\n from: match.start,\n left: rect.left,\n top: rect.bottom,\n })\n }}\n onPointerDownCapture={(event) => {\n const target = event.target\n if (\n target instanceof HTMLElement &&\n target.closest('[data-testid=\"review-marker\"], [data-testid=\"review-reply-cancel\"]')\n )\n replyTarget.current = null\n }}\n onSubmitCapture={(event) => {\n if (captureSubmission(event.target)) {\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n onKeyDownCapture={(event) => {\n if (suggestions && candidates.length) {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault()\n event.stopPropagation()\n setSelected(\n (s) =>\n (s + (event.key === 'ArrowDown' ? 1 : candidates.length - 1)) % candidates.length\n )\n return\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault()\n event.stopPropagation()\n choose(candidates[selected]?.label || candidates[0].label)\n return\n }\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n setSuggestions(null)\n return\n }\n }\n if (event.key === 'Enter' && captureSubmission(event.target)) {\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n >\n {children}\n {composers\n .filter((field) => field.isConnected && field.closest('form'))\n .map((field, index) =>\n createPortal(\n <button\n type=\"button\"\n className=\"native-docx-include-arbi\"\n data-testid=\"docx-include-arbi\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => {\n event.stopPropagation()\n if (!mentionedDocxRecipients(field.value, mentions).includes('arbi'))\n prefixMention(field)\n else field.focus()\n }}\n >\n Include ARBI\n </button>,\n field.closest('form')!,\n `mention-${index}`\n )\n )}\n {suggestions && candidates.length > 0 && (\n <div\n onPointerDown={(event) => event.stopPropagation()}\n onMouseDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => event.stopPropagation()}\n style={{\n position: 'fixed',\n left: suggestions.left,\n top: suggestions.top,\n width: 280,\n zIndex: 1000,\n }}\n >\n <MentionMenu\n open\n placement=\"below\"\n items={candidates}\n selectedIndex={selected}\n setSelectedIndex={setSelected}\n onSelect={(person) => choose(person.label)}\n labels={{ list: 'Mention workspace member' }}\n />\n </div>\n )}\n </div>\n </ActivityContext.Provider>\n )\n}\n","import React from 'react'\nimport { renderToStaticMarkup } from 'react-dom/server'\nimport { AiMarkdown, splitMarkdownBlocks } from '@arbidocs/react/ui'\nimport type { Editor } from '@docx-editor.dev/core'\n\n/** Use the existing renderer; remove presentation controls, not Markdown syntax. */\nexport function wordDraftHtml(markdown: string): string {\n const template = document.createElement('template')\n template.innerHTML = renderToStaticMarkup(<AiMarkdown>{markdown}</AiMarkdown>)\n template.content\n .querySelectorAll('button, svg, [data-testid=\"code-block-header\"]')\n .forEach((node) => node.remove())\n // Code labels and copy controls belong to the preview, not the Word document.\n template.content.querySelectorAll('[data-testid=\"markdown-code-block\"]').forEach((node) => {\n const pre = node.querySelector('pre')\n if (pre) node.replaceWith(pre)\n })\n return template.innerHTML\n}\n\nfunction requireEdit(result: ReturnType<Editor['exec']>) {\n if (!result.ok) throw new Error(result.reason)\n}\n\n/** Completed blocks are immutable; only the unfinished block is replaced. */\nexport class WordDraftStream {\n private committed: string[] = []\n private pending?: { start: string; end: string }\n private resetAfterFailure = false\n constructor(private readonly editor: Editor) {}\n\n update(content: string, complete: boolean) {\n const blocks = splitMarkdownBlocks(content)\n const completeCount = complete ? blocks.length : Math.max(0, blocks.length - 1)\n requireEdit(this.editor.setEditingMode('editing'))\n try {\n if (\n this.resetAfterFailure ||\n this.committed.some((block, index) => blocks[index] !== block)\n ) {\n requireEdit(this.editor.exec({ type: 'selectAll' }))\n requireEdit(this.editor.exec({ type: 'deleteText' }))\n this.committed = []\n this.pending = undefined\n this.resetAfterFailure = false\n }\n for (let index = this.committed.length; index < blocks.length; index++) {\n const tail = this.editor.query({ type: 'paragraphs' }).at(-1)\n const start = this.pending?.start || tail?.paraId\n if (!start) throw new Error('The draft insertion paragraph is unavailable.')\n requireEdit(\n this.editor.exec(\n this.pending\n ? {\n type: 'setSelection',\n range: { from: { paraId: start }, to: { paraId: this.pending.end } },\n }\n : { type: 'setSelection', anchor: { paraId: start } }\n )\n )\n const html = wordDraftHtml(blocks[index]) + '<p></p>'\n const element = document.createElement('div')\n element.innerHTML = html\n const startIndex = this.editor\n .query({ type: 'paragraphs' })\n .findIndex((p) => p.paraId === start)\n requireEdit(this.editor.exec({ type: 'paste', html, text: element.textContent || '' }))\n const inserted = this.editor.query({ type: 'paragraphs' }).slice(startIndex)\n let headingIndex = 0\n for (const heading of Array.from(element.querySelectorAll('h1,h2,h3,h4,h5,h6'))) {\n const match = inserted.findIndex(\n (p, i) => i >= headingIndex && p.text === heading.textContent\n )\n if (match >= 0 && inserted[match].paraId) {\n requireEdit(\n this.editor.exec({\n type: 'setSelection',\n anchor: { paraId: inserted[match].paraId! },\n })\n )\n requireEdit(\n this.editor.exec({\n type: 'setParagraphStyle',\n styleId: `Heading${heading.tagName.slice(1)}`,\n })\n )\n headingIndex = match + 1\n }\n }\n const end = this.editor.query({ type: 'paragraphs' }).at(-1)?.paraId\n if (!end) throw new Error('The draft continuation paragraph is unavailable.')\n if (index < completeCount) {\n this.committed.push(blocks[index])\n this.pending = undefined\n } else this.pending = { start, end }\n }\n } catch (error) {\n // A public command can fail after paste succeeded. Rebuild the locked draft\n // on retry rather than appending the same partial block again.\n this.resetAfterFailure = true\n throw error\n } finally {\n requireEdit(this.editor.setEditingMode('viewing'))\n }\n }\n}\n","import { normalizeDocxExport } from './export'\nimport { WordDraftStream } from './streamWordDocument'\nimport {\n DocxMentions,\n DocxCommentActivity,\n type DocxMention,\n type DocxAgentCommentRequest,\n type DocxMentionDelivery,\n type DocxAgentRunStatus,\n} from './DocxMentions'\nimport * as Y from 'yjs'\nimport type { DocumentHandle } from '@docx-editor.dev/core'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { DocxEditor, useChromeTranslate, type FontConfiguration } from '@docx-editor.dev/react'\nimport { collaborationModule, DOCUMENT_COLLABORATION_VERSIONS } from '@arbidocs/coedit'\nimport type { DocxCollaborationSession } from '@arbidocs/coedit'\nimport {\n createHocuspocusCollaboration,\n type HocuspocusCollaborationRoom,\n} from '@arbidocs/coedit/hocuspocus'\nimport { DocxEditorReview, reviewModule } from './review'\nimport type { EditorModule } from '@docx-editor.dev/core'\nimport type { Editor } from '@docx-editor.dev/core'\nimport { Download, Save, RefreshCw, WifiOff, Check, Type, Ellipsis } from 'lucide-react'\n\n/** Host integration: no application store, router, or authentication singleton is required. */\nexport interface NativeDocxAdapter {\n request: (path: string, options?: RequestInit) => Promise<Response>\n open: (documentId: string) => Promise<{\n room_id: string\n token: string\n websocket_path: string\n can_edit: boolean\n identity: { actorId: string; name: string; role: 'human' | 'agent' }\n filename: string\n }>\n save: (\n documentId: string,\n state?: string\n ) => Promise<{ document_ext_id: string; unchanged?: boolean }>\n loadFonts: () => Promise<FontConfiguration>\n baseUrl?: string\n author?: string\n subscribeTokenChanges?: (listener: () => void) => () => void\n onDirtyChange?: (dirty: boolean) => void\n onVersionSaved?: (documentId: string) => void | Promise<void>\n notify?: (message: string, kind: 'success' | 'error') => void\n mentions?: readonly DocxMention[]\n requestAgent?: (\n documentId: string,\n request: DocxAgentCommentRequest\n ) => Promise<DocxMentionDelivery | void>\n getAgentStatus?: (responseId: string) => Promise<DocxAgentRunStatus>\n}\n\nexport interface NativeDocxEditorProps {\n adapter: NativeDocxAdapter\n documentId: string\n title: string\n draftContent?: string\n initialCommentId?: string\n /** Immutable history/compare snapshots must not join the live editing room. */\n snapshot?: boolean\n onSaved?: (id: string) => void\n /** Generated Markdown stays read-only until its first native DOCX is stored. */\n stream?: {\n content: string\n busy: boolean\n error?: string | null\n onGenerated: (bytes: ArrayBuffer) => Promise<void>\n }\n}\ninterface Ready {\n document: DocumentHandle | Uint8Array\n modules: readonly EditorModule[]\n fonts: FontConfiguration\n room?: HocuspocusCollaborationRoom\n canEdit: boolean\n author: string\n filename: string\n}\n// Local unsaved notes survive tab switches. Persisted artifacts use server state.\nconst drafts = new Map<string, ArrayBuffer>()\nconst stateBytes = (room: HocuspocusCollaborationRoom) => Y.encodeStateAsUpdate(room.ydoc)\nconst encodeState = (room: HocuspocusCollaborationRoom) => {\n let binary = ''\n for (const byte of stateBytes(room)) binary += String.fromCharCode(byte)\n return btoa(binary)\n}\nfunction covered(room: HocuspocusCollaborationRoom, vector: string, receipt: string) {\n const decode = (value: string) => Uint8Array.from(atob(value), (c) => c.charCodeAt(0))\n const server = Y.decodeStateVector(decode(vector)),\n local = Y.decodeStateVector(Y.encodeStateVector(room.ydoc))\n for (const [client, clock] of local) if ((server.get(client) || 0) < clock) return false\n const deleted = Y.decodeUpdate(stateBytes(room)).ds.clients\n const saved = Y.decodeUpdate(decode(receipt)).ds.clients\n for (const [client, ranges] of deleted)\n for (const range of ranges) {\n if (\n !(saved.get(client) || []).some(\n (s) => s.clock <= range.clock && s.clock + s.len >= range.clock + range.len\n )\n )\n return false\n }\n return true\n}\nclass EditorBoundary extends React.Component<{ children: React.ReactNode }, { error?: Error }> {\n state: { error?: Error } = {}\n static getDerivedStateFromError(error: Error) {\n return { error }\n }\n render() {\n return this.state.error ? (\n <div role=\"alert\" className=\"native-docx-error\">\n Could not render this Word document: {this.state.error.message}\n </div>\n ) : (\n this.props.children\n )\n }\n}\nexport function DocxParticipants({ session }: { session?: DocxCollaborationSession }) {\n const [people, setPeople] = useState<readonly { actorId: string; name: string }[]>([])\n useEffect(() => {\n if (!session) return\n setPeople(session.participants())\n return session.subscribeParticipants(setPeople)\n }, [session])\n return (\n <div className=\"native-docx-presence\" aria-label=\"People viewing this document\">\n {people.map((p) => (\n <span className=\"native-docx-avatar\" key={p.actorId} title={p.name}>\n {p.name\n .split(' ')\n .map((s) => s[0])\n .slice(0, 2)\n .join('')}\n </span>\n ))}\n </div>\n )\n}\nfunction RibbonMenu({\n label,\n icon,\n children,\n}: {\n label: string\n icon: React.ReactNode\n children: React.ReactNode\n}) {\n const [open, setOpen] = useState(false)\n const element = useRef<HTMLDivElement>(null)\n useEffect(() => {\n if (!open) return\n const dismiss = (event: PointerEvent) => {\n if (!element.current?.contains(event.target as Node)) setOpen(false)\n }\n const escape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') setOpen(false)\n }\n document.addEventListener('pointerdown', dismiss)\n document.addEventListener('keydown', escape)\n return () => {\n document.removeEventListener('pointerdown', dismiss)\n document.removeEventListener('keydown', escape)\n }\n }, [open])\n return (\n <div className=\"native-docx-ribbon-menu\" ref={element}>\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={label}\n title={label}\n aria-expanded={open}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => setOpen((value) => !value)}\n >\n {icon}\n </button>\n {open && (\n <div\n className=\"native-docx-ribbon-popover\"\n role=\"group\"\n aria-label={label}\n onMouseDown={(event) => {\n if (!(\n event.target instanceof HTMLInputElement || event.target instanceof HTMLSelectElement\n ))\n event.preventDefault()\n }}\n >\n {children}\n </div>\n )}\n </div>\n )\n}\n\nexport function DocxRibbon({ onSave }: { onSave: () => void }) {\n const [tab, setTab] = useState('Home')\n const t = useChromeTranslate()\n return (\n <div className=\"native-docx-ribbon\">\n <select aria-label=\"Ribbon tab\" value={tab} onChange={(event) => setTab(event.target.value)}>\n <option>Home</option>\n <option>Insert</option>\n <option>Review</option>\n </select>\n <DocxEditor.Toolbar t={t} preset={false} onSave={onSave}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n {tab === 'Home' && (\n <>\n <DocxEditor.Toolbar.Bold />\n <DocxEditor.Toolbar.Italic />\n <DocxEditor.Toolbar.Underline />\n <RibbonMenu label=\"Font\" icon={<Type size={16} />}>\n <DocxEditor.Toolbar.FontFamily />\n <DocxEditor.Toolbar.FontSize />\n <DocxEditor.Toolbar.FontColor />\n <DocxEditor.Toolbar.Highlight />\n </RibbonMenu>\n <RibbonMenu label=\"More formatting\" icon={<Ellipsis size={16} />}>\n <DocxEditor.Toolbar.StylePicker />\n <DocxEditor.Toolbar.Alignment />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.LineSpacing />\n <DocxEditor.Toolbar.Indent />\n <DocxEditor.Toolbar.Outdent />\n <DocxEditor.Toolbar.Strike />\n <DocxEditor.Toolbar.ClearFormatting />\n </RibbonMenu>\n </>\n )}\n {tab === 'Insert' && (\n <>\n <DocxEditor.Toolbar.TableInsert />\n <DocxEditor.Toolbar.ImageInsert />\n <DocxEditor.Toolbar.Link />\n </>\n )}\n {tab === 'Review' && (\n <>\n <DocxEditor.Toolbar.EditingMode />\n <DocxEditor.Toolbar.Comments />\n <RibbonMenu label=\"Review options\" icon={<Ellipsis size={16} />}>\n <DocxEditor.Toolbar.Reviewers />\n </RibbonMenu>\n </>\n )}\n </DocxEditor.Toolbar>\n </div>\n )\n}\n\nconst fixedZoomMode = { type: 'fixed' } as const\n\nexport function NativeDocxEditor({\n documentId,\n title,\n draftContent,\n initialCommentId,\n snapshot = false,\n onSaved,\n stream,\n adapter,\n}: NativeDocxEditorProps) {\n const [ready, setReady] = useState<Ready>(),\n [error, setError] = useState(''),\n [retry, setRetry] = useState(0)\n const [status, setStatus] = useState('Connecting…'),\n [dirty, setDirty] = useState(false),\n [saving, setSaving] = useState(false),\n [offline, setOffline] = useState(false)\n const revision = useRef(0)\n const stageRef = useRef<HTMLDivElement>(null),\n fitCleanup = useRef<(() => void) | undefined>(undefined)\n const ref = useRef<Editor | null>(null),\n dirtyRef = useRef(false),\n draftTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const isDraft = draftContent !== undefined\n const streamRef = useRef(stream)\n streamRef.current = stream\n const streamWriter = useRef<WordDraftStream | null>(null)\n const streamFinished = useRef(false)\n const streamTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const [streamAttempt, setStreamAttempt] = useState(0)\n function updateStream() {\n const current = streamRef.current\n if (!current || !streamWriter.current || streamFinished.current) return\n try {\n streamWriter.current.update(current.content, !current.busy)\n setStatus(\n current.busy\n ? 'Generating · editing is locked'\n : current.error\n ? 'Generation stopped · draft retained'\n : 'Saving generated Word document…'\n )\n if (!current.busy && !current.error && current.content.trim()) {\n streamFinished.current = true\n void ref\n .current!.save()\n .then(current.onGenerated)\n .catch((failure: unknown) => {\n streamFinished.current = false\n setError(\n failure instanceof Error ? failure.message : 'Could not store the generated document.'\n )\n })\n }\n } catch (failure) {\n setError(\n failure instanceof Error ? failure.message : 'Could not import the generated document.'\n )\n }\n }\n useEffect(() => {\n if (!streamRef.current) return\n if (!streamRef.current.busy) {\n clearTimeout(streamTimer.current)\n streamTimer.current = undefined\n updateStream()\n } else if (!streamTimer.current) {\n streamTimer.current = setTimeout(() => {\n streamTimer.current = undefined\n updateStream()\n }, 120)\n }\n }, [stream?.content, stream?.busy, stream?.error, streamAttempt])\n useEffect(() => () => clearTimeout(streamTimer.current), [])\n useEffect(() => {\n let cancelled = false\n let room: HocuspocusCollaborationRoom | undefined\n const cleanups: (() => void)[] = []\n setReady(undefined)\n setError('')\n setStatus('Connecting…')\n setDirty(false)\n dirtyRef.current = false\n async function start() {\n const fonts = await adapter.loadFonts()\n if (isDraft || snapshot) {\n const data = isDraft\n ? (!streamRef.current && drafts.get(documentId)) ||\n (await (\n await adapter.request('/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ content: draftContent }),\n })\n ).arrayBuffer())\n : await (await adapter.request(`/${documentId}/content`)).arrayBuffer()\n if (!cancelled) {\n setReady({\n document: new Uint8Array(data),\n fonts,\n modules: [reviewModule()],\n canEdit: !snapshot,\n author: adapter.author || 'You',\n filename: title,\n })\n setStatus(snapshot ? 'Saved version · read only' : 'Unsaved note')\n }\n return\n }\n const session = await adapter.open(documentId)\n const ws = new URL(session.websocket_path, adapter.baseUrl || location.origin)\n ws.protocol = ws.protocol === 'https:' ? 'wss:' : 'ws:'\n let initial = true\n room = await createHocuspocusCollaboration({\n url: ws.toString(),\n roomId: session.room_id,\n identity: session.identity,\n offlineEditing: true,\n token: async () => {\n const next = initial ? session : await adapter.open(documentId)\n initial = false\n if (!cancelled)\n setReady((previous) => (previous ? { ...previous, canEdit: next.can_edit } : previous))\n return JSON.stringify({\n capability: next.token,\n versions: DOCUMENT_COLLABORATION_VERSIONS,\n })\n },\n })\n if (cancelled) {\n room.destroy()\n return\n }\n const current = room\n cleanups.push(\n current.session.subscribeStatus((s, _reason, detail) => {\n const disconnected = s === 'disconnected'\n setOffline(disconnected)\n if (s === 'error') {\n setError(\n detail ||\n 'The collaboration session failed. Export your local document before reconnecting.'\n )\n setStatus('Connection failed')\n } else if (disconnected) setStatus('Offline · edits buffered locally')\n else if (s === 'ready') {\n setError('')\n setStatus(dirtyRef.current ? 'Saving changes…' : 'Connected')\n }\n })\n )\n const stateless = ({ payload }: { payload: string }) => {\n try {\n const message = JSON.parse(payload) as {\n type: string\n message?: string\n hash?: string\n vector?: string\n receipt?: string\n }\n if (message.type === 'persisted') {\n if (\n !cancelled &&\n message.vector &&\n message.receipt &&\n covered(current, message.vector, message.receipt)\n ) {\n dirtyRef.current = false\n setDirty(false)\n setStatus('All changes saved')\n }\n }\n if (message.type === 'pending') setStatus('Saving changes…')\n if (message.type === 'save-error') setStatus(message.message || 'Autosave failed')\n } catch {\n /* Ignore unrelated provider messages. */\n }\n }\n current.provider.on('stateless', stateless)\n cleanups.push(() => current.provider.off('stateless', stateless))\n if (adapter.subscribeTokenChanges)\n cleanups.push(\n adapter.subscribeTokenChanges(() => {\n void current.provider\n .sendToken()\n .catch(() => setStatus('Could not renew the collaboration session'))\n })\n )\n const refresh = setInterval(\n () => {\n void current.provider\n .sendToken()\n .catch(() => setStatus('Could not renew the collaboration session'))\n },\n 5 * 60 * 1000\n )\n cleanups.push(() => clearInterval(refresh))\n setReady({\n document: current.document,\n fonts,\n modules: [reviewModule(), collaborationModule({ session: current.session })],\n room: current,\n canEdit: session.can_edit,\n author: session.identity.name,\n filename: session.filename,\n })\n setStatus(session.can_edit ? 'All changes saved' : 'Read only · live')\n }\n void start().catch((e) => {\n if (!cancelled) setError(e instanceof Error ? e.message : String(e))\n })\n return () => {\n cancelled = true\n cleanups.forEach((f) => f())\n clearTimeout(draftTimer.current)\n fitCleanup.current?.()\n room?.destroy()\n }\n }, [documentId, isDraft, snapshot, retry]) // draftContent seeds once, never remount on typing.\n useEffect(() => {\n adapter.onDirtyChange?.(dirty)\n const beforeUnload = (e: BeforeUnloadEvent) => {\n if (dirtyRef.current) e.preventDefault()\n }\n window.addEventListener('beforeunload', beforeUnload)\n return () => {\n window.removeEventListener('beforeunload', beforeUnload)\n adapter.onDirtyChange?.(false)\n }\n }, [dirty])\n async function exportDocument() {\n const data = await ref.current?.save()\n if (!data) return\n const url = URL.createObjectURL(\n new Blob([normalizeDocxExport(data)], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n })\n )\n const a = document.createElement('a')\n a.href = url\n a.download = title.replace(/\\.[^.]+$/, '') + '.docx'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 5000)\n }\n useLayoutEffect(() => {\n const editor = ref.current\n return () => {\n if (isDraft && editor && dirtyRef.current)\n void editor\n .save()\n .then((bytes) => {\n if (bytes) drafts.set(documentId, bytes)\n })\n .catch(() => {})\n }\n }, [documentId, isDraft, ready])\n async function saveVersion() {\n if (!ready || saving || stream) return\n setSaving(true)\n const atRevision = revision.current\n try {\n const result = isDraft\n ? await (async () => {\n const bytes = await ref.current?.save()\n if (!bytes) throw new Error('The editor is not ready.')\n return (\n await adapter.request(`/notes?${new URLSearchParams({ title })}`, {\n method: 'POST',\n headers: {\n 'Content-Type':\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n },\n body: bytes,\n })\n ).json() as Promise<{ document_ext_id: string }>\n })()\n : await adapter.save(documentId, ready.room ? encodeState(ready.room) : undefined)\n if (revision.current === atRevision) {\n dirtyRef.current = false\n setDirty(false)\n drafts.delete(documentId)\n }\n await Promise.resolve(adapter.onVersionSaved?.(result.document_ext_id)).catch(() => {\n /* The saved document remains accessible by its ID. */\n })\n onSaved?.(result.document_ext_id)\n adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n } catch (e) {\n adapter.notify?.(e instanceof Error ? e.message : 'Could not save this document.', 'error')\n setStatus('Save failed · your draft is retained')\n } finally {\n setSaving(false)\n }\n }\n function editorReady(editor: Editor) {\n ref.current = editor\n if (streamRef.current) {\n streamWriter.current = new WordDraftStream(editor)\n updateStream()\n }\n fitCleanup.current?.()\n const viewport = stageRef.current?.querySelector<HTMLElement>('.native-docx-viewport')\n if (!viewport) return\n const fit = () => {\n const pageWidth = editor.getPageGeometry()[0]?.box.width\n if (!pageWidth) return\n const style = getComputedStyle(viewport)\n const available =\n viewport.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight)\n const zoom = Math.max(0.1, Math.min(2.5, available / pageWidth))\n if (Math.abs(editor.getZoom() - zoom) > 0.001) editor.setZoom(zoom)\n }\n const resize = new ResizeObserver(fit)\n const chrome = new MutationObserver(fit)\n resize.observe(viewport)\n chrome.observe(viewport, { attributes: true, attributeFilter: ['style', 'data-review-pane'] })\n fit()\n fitCleanup.current = () => {\n resize.disconnect()\n chrome.disconnect()\n }\n }\n function changed() {\n if (snapshot) return\n revision.current += 1\n dirtyRef.current = true\n setDirty(true)\n setStatus(\n isDraft ? 'Unsaved note' : offline ? 'Offline · edits buffered locally' : 'Saving changes…'\n )\n if (isDraft) {\n clearTimeout(draftTimer.current)\n draftTimer.current = setTimeout(() => {\n void ref.current?.save().then((bytes) => {\n if (bytes) drafts.set(documentId, bytes)\n })\n }, 200)\n }\n }\n return (\n <section\n className=\"native-docx-viewer\"\n data-testid=\"native-docx-editor\"\n aria-busy={!!stream?.busy}\n data-generation-state={\n stream ? (stream.busy ? 'generating' : stream.error ? 'stopped' : 'persisting') : 'ready'\n }\n >\n <div className=\"native-docx-actions\">\n <span className=\"native-docx-status\" role=\"status\">\n {offline ? <WifiOff size={14} /> : !dirty && ready ? <Check size={14} /> : null}\n {status}\n </span>\n <DocxParticipants session={ready?.room?.session} />\n <button onClick={() => void exportDocument()} disabled={!ready} aria-label=\"Download DOCX\">\n <Download size={14} />\n DOCX\n </button>\n {!snapshot && !stream && ready?.canEdit && (\n <button\n className=\"native-docx-save\"\n onClick={() => void saveVersion()}\n disabled={!ready || saving || offline}\n data-testid=\"native-docx-save\"\n >\n <Save size={14} />\n {saving ? 'Saving…' : isDraft ? 'Save note' : 'Save version'}\n </button>\n )}\n </div>\n {offline && (\n <div className=\"native-docx-notice\">\n Changes are buffered in this browser. Keep this tab open until the connection returns, or\n download your DOCX.\n </div>\n )}\n {error && (\n <div className=\"native-docx-notice\" data-error=\"true\" role=\"alert\">\n {error}{' '}\n <button\n disabled={!stream && dirty}\n title={dirty ? 'Download your unsaved DOCX before reopening the editor' : undefined}\n onClick={() =>\n stream ? (setError(''), setStreamAttempt((x) => x + 1)) : setRetry((x) => x + 1)\n }\n >\n <RefreshCw size={12} />\n Retry\n </button>\n </div>\n )}\n {!ready && !error && (\n <div className=\"native-docx-error\" role=\"status\">\n Opening Word document…\n </div>\n )}\n {ready && (\n <div className=\"native-docx-body docx-editor\">\n <EditorBoundary key={retry}>\n <DocxEditor.Root\n document={ready.document}\n modules={ready.modules}\n fonts={ready.fonts}\n mode={stream ? 'edit' : !ready.canEdit || snapshot ? 'view' : 'suggesting'}\n reviewDisplayMode=\"all-markup\"\n zoomMode={fixedZoomMode}\n author={ready.author}\n onReady={editorReady}\n onChange={(change) => {\n if (change.source !== 'load') changed()\n }}\n onFontError={(e) => setError(e.message)}\n >\n <DocxEditor.RevisionMarkup\n insertions={{ mark: 'underline', color: 'blue' }}\n deletions={{ mark: 'strikethrough', color: 'red' }}\n movedFrom={{ mark: 'doubleStrikethrough', color: 'green' }}\n movedTo={{ mark: 'doubleUnderline', color: 'green' }}\n trackMoves\n />\n {!stream && <DocxRibbon onSave={() => void saveVersion()} />}\n <div\n className=\"native-docx-stage\"\n ref={stageRef}\n onMouseDownCapture={(event) => {\n if (event.button === 2 && ref.current?.getSelectionPlacement())\n event.preventDefault()\n }}\n >\n <DocxEditor.Viewport className=\"native-docx-viewport\">\n <DocxEditor.Content />\n <DocxMentions\n initialCommentId={initialCommentId}\n mentions={adapter.mentions}\n notify={adapter.notify}\n getAgentStatus={adapter.getAgentStatus}\n requestAgent={\n adapter.requestAgent\n ? (request) => adapter.requestAgent!(documentId, request)\n : undefined\n }\n >\n <DocxEditorReview>\n {() => (\n <DocxEditorReview.Card>\n <DocxCommentActivity />\n </DocxEditorReview.Card>\n )}\n </DocxEditorReview>\n </DocxMentions>\n <DocxEditor.HeaderFooterChrome />\n <DocxEditor.NotesChrome />\n <DocxEditor.Equation />\n <DocxEditor.HyperLink />\n <DocxEditor.ContextMenu />\n </DocxEditor.Viewport>\n <DocxEditor.PageNumber />\n </div>\n </DocxEditor.Root>\n </EditorBoundary>\n </div>\n )}\n </section>\n )\n}\n","import { createFontSource, type FontConfiguration } from '@docx-editor.dev/react'\nconst loaded = new Map<string, Promise<FontConfiguration>>()\nexport function loadDocxFonts(baseUrl = '/native-docx/fonts'): Promise<FontConfiguration> {\n let promise = loaded.get(baseUrl)\n if (!promise) {\n promise = loadFonts(baseUrl).catch((error) => {\n loaded.delete(baseUrl)\n throw error\n })\n loaded.set(baseUrl, promise)\n }\n return promise\n}\nasync function loadFonts(baseUrl: string): Promise<FontConfiguration> {\n const families = ['Liberation Serif', 'Liberation Sans', 'Liberation Mono']\n const variants = [\n { suffix: 'Regular', weight: 400, style: 'normal' },\n { suffix: 'Bold', weight: 700, style: 'normal' },\n { suffix: 'Italic', weight: 400, style: 'italic' },\n { suffix: 'BoldItalic', weight: 700, style: 'italic' },\n ] as const\n const sources = await Promise.all(\n families.flatMap((family) =>\n variants.map(async (face) => {\n const r = await fetch(\n `${baseUrl.replace(/\\/$/, '')}/${family.replace(' ', '')}-${face.suffix}.ttf`\n )\n if (!r.ok) throw new Error(`Could not load the document font ${family}.`)\n const result = createFontSource(new Uint8Array(await r.arrayBuffer()), {\n family,\n weight: face.weight,\n style: face.style,\n })\n if ('failure' in result)\n throw new Error(`Could not initialize the document font ${family}.`)\n return result.source\n })\n )\n )\n const aliases: Record<string, string> = {\n 'Times New Roman': 'Liberation Serif',\n Cambria: 'Liberation Serif',\n 'DejaVu Serif': 'Liberation Serif',\n Calibri: 'Liberation Sans',\n Aptos: 'Liberation Sans',\n Arial: 'Liberation Sans',\n Helvetica: 'Liberation Sans',\n 'Courier New': 'Liberation Mono',\n 'DejaVu Sans Mono': 'Liberation Mono',\n }\n return {\n epoch: 1,\n maxFontBytes: 12 * 1024 * 1024,\n sources,\n defaultFont: { family: 'Liberation Serif', sizeHalfPoints: 22 },\n supportedFamilies: [...families, ...Object.keys(aliases)],\n substitutions: Object.entries(aliases).flatMap(([from, to]) =>\n variants.map((face) => ({\n from: { family: from, weight: face.weight, style: face.style },\n to: { family: to, weight: face.weight, style: face.style },\n }))\n ),\n }\n}\n","import { useRef, useState } from 'react'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface StreamedWordArtifactProps {\n adapter: NativeDocxAdapter\n content: string\n title: string\n busy: boolean\n error?: string | null\n /** Stable identity for this generation, not the ID of a persisted Markdown preview. */\n draftId: string\n /** Preserve version lineage when the stream already has a stored source artifact. */\n sourceDocumentId?: string\n onSaved?: (documentId: string) => void\n}\n\n/** One shared native drafting surface, from Markdown stream to saved collaborative DOCX. */\nexport function StreamedWordArtifact({\n adapter,\n content,\n title,\n busy,\n error,\n draftId,\n sourceDocumentId,\n onSaved,\n}: StreamedWordArtifactProps) {\n const [documentId, setDocumentId] = useState<string>()\n const saving = useRef<Promise<void> | null>(null)\n async function persist(bytes: ArrayBuffer) {\n if (saving.current) return saving.current\n saving.current = (async () => {\n const query = new URLSearchParams({ title })\n if (sourceDocumentId) query.set('parent_ext_id', sourceDocumentId)\n const response = await adapter.request(`/notes?${query}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n },\n body: bytes,\n })\n if (!response.ok) throw new Error('Could not store the generated Word document.')\n const result = (await response.json()) as { document_ext_id: string }\n if (!result.document_ext_id) throw new Error('The generated document has no ID.')\n await Promise.resolve(adapter.onVersionSaved?.(result.document_ext_id)).catch(() => {})\n setDocumentId(result.document_ext_id)\n onSaved?.(result.document_ext_id)\n })()\n try {\n await saving.current\n } finally {\n saving.current = null\n }\n }\n return (\n <NativeDocxEditor\n key={documentId || draftId}\n adapter={adapter}\n documentId={documentId || draftId}\n title={title}\n draftContent={documentId ? undefined : ''}\n stream={documentId ? undefined : { content, busy, error, onGenerated: persist }}\n onSaved={onSaved}\n />\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkDLVX6R6B_cjs = require('./chunk-DLVX6R6B.cjs');
4
+ var chunkKMYLQIOH_cjs = require('./chunk-KMYLQIOH.cjs');
5
5
  var chunkTLQQV7WW_cjs = require('./chunk-TLQQV7WW.cjs');
6
6
  var react$1 = require('react');
7
7
  var react = require('@arbidocs/react');
@@ -61,7 +61,7 @@ function useConnectedChat(options) {
61
61
  }
62
62
  function ConnectedAssistantDock(props) {
63
63
  const chat = useConnectedChat();
64
- return /* @__PURE__ */ jsxRuntime.jsx(chunkDLVX6R6B_cjs.AssistantDock, { ...props, chat });
64
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkKMYLQIOH_cjs.AssistantDock, { ...props, chat });
65
65
  }
66
66
 
67
67
  Object.defineProperty(exports, "redlineStats", {
@@ -81,5 +81,5 @@ exports.useConnectedAiTask = useConnectedAiTask;
81
81
  exports.useConnectedChat = useConnectedChat;
82
82
  exports.useSemanticSearch = useSemanticSearch;
83
83
  exports.useWorkspaceDocs = useWorkspaceDocs;
84
- //# sourceMappingURL=chunk-M2YGPC5N.cjs.map
85
- //# sourceMappingURL=chunk-M2YGPC5N.cjs.map
84
+ //# sourceMappingURL=chunk-SKFSJHVU.cjs.map
85
+ //# sourceMappingURL=chunk-SKFSJHVU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","jsx","AssistantDock"],"mappings":"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","file":"chunk-M2YGPC5N.cjs","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n ...options,\n workspaceId: workspaceId ?? fallbackWorkspaceId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","jsx","AssistantDock"],"mappings":"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","file":"chunk-SKFSJHVU.cjs","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n ...options,\n workspaceId: workspaceId ?? fallbackWorkspaceId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { AssistantDock } from './chunk-XWEJ5LV2.js';
2
+ import { AssistantDock } from './chunk-ZXYHBQFW.js';
3
3
  import { useConnection } from './chunk-EHXSBH6U.js';
4
4
  import { useCallback } from 'react';
5
5
  import { useAiTask, useWorkspaceDocs as useWorkspaceDocs$1, useSemanticSearch as useSemanticSearch$1, useWorkspaceUsers, useArbiChat } from '@arbidocs/react';
@@ -64,5 +64,5 @@ function ConnectedAssistantDock(props) {
64
64
  }
65
65
 
66
66
  export { ConnectedAssistantDock, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs };
67
- //# sourceMappingURL=chunk-24KQJYSB.js.map
68
- //# sourceMappingURL=chunk-24KQJYSB.js.map
67
+ //# sourceMappingURL=chunk-SWON6O45.js.map
68
+ //# sourceMappingURL=chunk-SWON6O45.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useKitAiTask","useKitWorkspaceDocs","useKitSemanticSearch"],"mappings":"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","file":"chunk-24KQJYSB.js","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n ...options,\n workspaceId: workspaceId ?? fallbackWorkspaceId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useKitAiTask","useKitWorkspaceDocs","useKitSemanticSearch"],"mappings":"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","file":"chunk-SWON6O45.js","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n ...options,\n workspaceId: workspaceId ?? fallbackWorkspaceId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}