@arbidocs/blocks 0.4.41 → 0.4.42

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 (41) hide show
  1. package/dist/agents/index.cjs +220 -220
  2. package/dist/agents/index.js +1 -1
  3. package/dist/agents/tasks/TaskStartDialog.d.ts +1 -1
  4. package/dist/agents/tasks/testGrid.d.ts +1 -0
  5. package/dist/{chunk-PH7YTYYH.js → chunk-2MJWWPHY.js} +13 -2
  6. package/dist/chunk-2MJWWPHY.js.map +1 -0
  7. package/dist/{chunk-JH25QIZW.js → chunk-7RZML5UY.js} +28 -28
  8. package/dist/chunk-7RZML5UY.js.map +1 -0
  9. package/dist/{chunk-PG2RWOGF.js → chunk-BON2MHPG.js} +17 -8
  10. package/dist/chunk-BON2MHPG.js.map +1 -0
  11. package/dist/{chunk-DIOTMJTC.cjs → chunk-GDEHQSFX.cjs} +17 -8
  12. package/dist/chunk-GDEHQSFX.cjs.map +1 -0
  13. package/dist/{chunk-2EAE5JP6.cjs → chunk-PF3ZLM3E.cjs} +3 -3
  14. package/dist/{chunk-2EAE5JP6.cjs.map → chunk-PF3ZLM3E.cjs.map} +1 -1
  15. package/dist/{chunk-LPXAWW62.cjs → chunk-QI6AIHWP.cjs} +13 -2
  16. package/dist/chunk-QI6AIHWP.cjs.map +1 -0
  17. package/dist/{chunk-WYVCXY7R.js → chunk-WI3YE5GG.js} +3 -3
  18. package/dist/{chunk-WYVCXY7R.js.map → chunk-WI3YE5GG.js.map} +1 -1
  19. package/dist/{chunk-NUF2WGGF.cjs → chunk-ZAGRDGYB.cjs} +27 -27
  20. package/dist/chunk-ZAGRDGYB.cjs.map +1 -0
  21. package/dist/connect/docx.cjs +4 -4
  22. package/dist/connect/docx.js +1 -1
  23. package/dist/docx/index.cjs +14 -14
  24. package/dist/docx/index.js +2 -2
  25. package/dist/index.cjs +416 -416
  26. package/dist/index.js +5 -5
  27. package/dist/retrieval/SearchPage.d.ts +4 -2
  28. package/dist/retrieval/index.cjs +36 -36
  29. package/dist/retrieval/index.js +1 -1
  30. package/dist/settings/index.cjs +1 -1
  31. package/dist/settings/index.js +1 -1
  32. package/dist/shell/index.cjs +45 -45
  33. package/dist/shell/index.js +1 -1
  34. package/package.json +4 -4
  35. package/src/docx/styles.css +5 -10
  36. package/dist/chunk-DIOTMJTC.cjs.map +0 -1
  37. package/dist/chunk-JH25QIZW.js.map +0 -1
  38. package/dist/chunk-LPXAWW62.cjs.map +0 -1
  39. package/dist/chunk-NUF2WGGF.cjs.map +0 -1
  40. package/dist/chunk-PG2RWOGF.js.map +0 -1
  41. package/dist/chunk-PH7YTYYH.js.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":["document","useDocxEditor","useContext","createContext","useState","jsxs","jsx","useRef","useEffect","status","React","Fragment","useLayoutEffect"],"mappings":"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","file":"chunk-7RZML5UY.js","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 {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 <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 </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"]}
@@ -9,6 +9,7 @@ import { FilterInput } from './chunk-YU2KUMGE.js';
9
9
  import { ActionLink } from './chunk-S7PSMMRG.js';
10
10
  import { TabHeader } from './chunk-4WWM3GQ5.js';
11
11
  import { useMentionAutocomplete } from './chunk-3VQYJBOI.js';
12
+ import { useIsPhone } from './chunk-SLSBJRWW.js';
12
13
  import { useBlocksEnvironment } from './chunk-76JDDMSP.js';
13
14
  import { formatCount, initials } from './chunk-OXF2IFXG.js';
14
15
  import { ModalHeader } from './chunk-CPMNAJLF.js';
@@ -5145,6 +5146,7 @@ function ConversationListView(p) {
5145
5146
  const [query, setQuery] = useState("");
5146
5147
  const [selected, setSelected] = useState(/* @__PURE__ */ new Set());
5147
5148
  const q = `${query} ${p.filterText ?? ""}`.trim().toLowerCase();
5149
+ const isPhone = useIsPhone();
5148
5150
  const rows = useMemo(
5149
5151
  () => filterConversationRows(p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters),
5150
5152
  [p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters]
@@ -5198,6 +5200,7 @@ function ConversationListView(p) {
5198
5200
  colId: liveProps.current.renderBy ? "by" : "owner",
5199
5201
  headerName: liveProps.current.renderBy ? "Last message by" : "Owner",
5200
5202
  width: 160,
5203
+ hide: isPhone,
5201
5204
  cellRenderer: ({ data }) => data && (liveProps.current.renderBy || liveProps.current.renderOwner)?.(data)
5202
5205
  }
5203
5206
  ] : [],
@@ -5205,6 +5208,7 @@ function ConversationListView(p) {
5205
5208
  colId: "status",
5206
5209
  headerName: "Status",
5207
5210
  width: 150,
5211
+ hide: isPhone,
5208
5212
  valueGetter: ({ data }) => data?.status,
5209
5213
  cellRenderer: ({ data }) => data && (liveProps.current.renderStatus ? liveProps.current.renderStatus(data) : /* @__PURE__ */ jsx(TaskStatusPill, { id: data.external_id, status: data.status }))
5210
5214
  },
@@ -5213,6 +5217,7 @@ function ConversationListView(p) {
5213
5217
  colId: "messages",
5214
5218
  headerName: "Messages",
5215
5219
  width: 110,
5220
+ hide: isPhone,
5216
5221
  valueFormatter: ({ value }) => value == null ? "\u2014" : String(value),
5217
5222
  cellClass: "text-muted-foreground"
5218
5223
  },
@@ -5221,6 +5226,7 @@ function ConversationListView(p) {
5221
5226
  colId: "visibility",
5222
5227
  headerName: "Visibility",
5223
5228
  width: 170,
5229
+ hide: isPhone,
5224
5230
  cellClass: "cell-hcenter",
5225
5231
  sortable: false,
5226
5232
  resizable: false,
@@ -5241,6 +5247,7 @@ function ConversationListView(p) {
5241
5247
  initialSort: "desc",
5242
5248
  headerName: "Activity",
5243
5249
  width: 160,
5250
+ hide: isPhone,
5244
5251
  valueGetter: ({ data }) => data?.last_message_updated_at || data?.updated_at || data?.created_at || "",
5245
5252
  valueFormatter: ({ value }) => value ? liveProps.current.formatDate(value) : "\u2014",
5246
5253
  cellClass: "text-muted-foreground"
@@ -5252,7 +5259,8 @@ function ConversationListView(p) {
5252
5259
  Boolean(p.renderOwner),
5253
5260
  Boolean(p.renderBy),
5254
5261
  Boolean(p.renderStatus),
5255
- Boolean(p.onToggleShared)
5262
+ Boolean(p.onToggleShared),
5263
+ isPhone
5256
5264
  ]
5257
5265
  );
5258
5266
  return /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col", "data-testid": "conversation-list-view", children: [
@@ -5308,7 +5316,7 @@ function ConversationListView(p) {
5308
5316
  loadingMessage: "Loading threads\u2026",
5309
5317
  emptyState: {
5310
5318
  title: q ? "No threads match" : "No conversations yet",
5311
- message: "Start a conversation with people, ARBI, or both."
5319
+ message: "Use New Task to ask ARBI, bring in people, or both."
5312
5320
  },
5313
5321
  selection: p.selectionActions ? {
5314
5322
  mode: "multiple",
@@ -5362,6 +5370,7 @@ function TaskStartDialog({
5362
5370
  textareaRef
5363
5371
  });
5364
5372
  const todo = choice === "todo";
5373
+ const promptHint = todo ? "What needs doing?" : "What should ARBI do?";
5365
5374
  const workflowId = choice === "prompt" || todo ? null : choice;
5366
5375
  const assigneeId = todo ? assignee : "";
5367
5376
  const sharedNow = shared || assigneeId !== "";
@@ -5402,7 +5411,7 @@ function TaskStartDialog({
5402
5411
  ),
5403
5412
  /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-3 py-3", children: [
5404
5413
  !workflowId ? /* @__PURE__ */ jsxs(Fragment, { children: [
5405
- /* @__PURE__ */ jsx(Label, { className: "sr-only", htmlFor: "task-start-prompt", children: todo ? "What needs doing?" : "What should ARBI do?" }),
5414
+ /* @__PURE__ */ jsx(Label, { className: "sr-only", htmlFor: "task-start-prompt", children: promptHint }),
5406
5415
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
5407
5416
  /* @__PURE__ */ jsx(
5408
5417
  Textarea,
@@ -5416,7 +5425,7 @@ function TaskStartDialog({
5416
5425
  ...mention.isOpen ? mention.nav.comboboxProps : {},
5417
5426
  ...mention.textareaProps,
5418
5427
  disabled: isPending,
5419
- placeholder: "What needs doing?",
5428
+ placeholder: promptHint,
5420
5429
  className: "min-h-44 resize-y shadow-none"
5421
5430
  }
5422
5431
  ),
@@ -5454,7 +5463,7 @@ function TaskStartDialog({
5454
5463
  ),
5455
5464
  /* @__PURE__ */ jsxs(SelectContent, { children: [
5456
5465
  /* @__PURE__ */ jsx(SelectItem, { value: "prompt", children: "With ARBI" }),
5457
- /* @__PURE__ */ jsx(SelectItem, { value: "todo", children: "People only" }),
5466
+ /* @__PURE__ */ jsx(SelectItem, { value: "todo", children: "Send to a person" }),
5458
5467
  workflows.map((workflow) => /* @__PURE__ */ jsx(SelectItem, { value: workflow.external_id, children: workflow.name }, workflow.external_id))
5459
5468
  ] })
5460
5469
  ]
@@ -5524,7 +5533,7 @@ function TaskStartDialog({
5524
5533
  } catch {
5525
5534
  }
5526
5535
  },
5527
- children: isPending ? "Starting\u2026" : "Start now"
5536
+ children: isPending ? "Starting\u2026" : todo ? assigneeId ? "Send for review" : "Create task" : "Start now"
5528
5537
  }
5529
5538
  )
5530
5539
  ] })
@@ -10648,5 +10657,5 @@ function AgentCreateView({
10648
10657
  }
10649
10658
 
10650
10659
  export { AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentCard, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentGallery, AgentMainView, AgentSelect, AgentTypeSelector, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_REVIEW_ACTIONS_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_LABELS, DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, EMPTY_WORKFLOW_SCOPE, EntityChip, GoalCriteria, MAX_TASK_DEPTH, NewThreadDialog, PersonPill, PillSelect, RecurrenceBuilder, SKILL_PROMPT_FALLBACK_PLACEHOLDER, SKILL_PROMPT_LABEL, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, SchemaForm, SkillActionButton, SkillCard, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillGlobalBadge, SkillRow, SkillTile, SkillTypeBadge, SkillViewToggle, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TASK_COLUMN_ORDER, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskFlow, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskPlan, TaskReviewActions, TaskReviewDialog, TaskRunsDialog, TaskStartDialog, TaskStatusPill, TaskTable, TaskThreadChip, TaskTriggerChip, TasksToolbar, ThreadActivity, ThreadNotifyDialog, TupleArrayField, UploadTaskItem, UploadTaskList, WEEKDAYS, WORKFLOW_COLUMN_ORDER, WorkflowConfigDialog, WorkflowDocumentsField, WorkflowLauncher, WorkflowsTable, WorkflowsToolbar, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildLaunch, buildRRule, buildTaskRows, buildWorkflowScopeSource, compactThreadActivity, composePersona, composeWorkflowPrompt, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createTaskColumns, createWorkflowColumns, createsWork, defaultInputs, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveWorkflowName, descendantIds, describeRRule, filterConversationRows, firstWords, formatElapsed, goalProgress, hasTaskFields, hasTrigger, humanizeSection, indexTasks, inferType, inputDocumentIds, inputsFromContext, isAgenticWorkflow, isEmptyWorkflowScope, isOutOfBounds, isPlainTodo, isSkillRow, isValidAgentName, isWorkflowScope, isoToLocalInput, localInputToIso, matchWorkflowScope, moveTargets, newThreadToRequest, nextCriterionId, ownerExtId, parseRRule, prettifyKey, promptFieldName, resolveScopeInputs, skillToWorkflow, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, validateInputs, workflowAccepts, workflowFromFrontmatter, workflowStatus, workflowTaskFields, workflowToComposerValues, workflowTriggerType, workflowWhen, workflowsAccepting, workflowsForHost };
10651
- //# sourceMappingURL=chunk-PG2RWOGF.js.map
10652
- //# sourceMappingURL=chunk-PG2RWOGF.js.map
10660
+ //# sourceMappingURL=chunk-BON2MHPG.js.map
10661
+ //# sourceMappingURL=chunk-BON2MHPG.js.map