@arbidocs/blocks 0.5.126 → 0.5.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/dist/{ConnectedCallDock-733O5M36.cjs → ConnectedCallDock-XJOYVVAH.cjs} +5 -5
- package/dist/{ConnectedCallDock-733O5M36.cjs.map → ConnectedCallDock-XJOYVVAH.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-TAUGSRGV.cjs → ConnectedCallRoom-CUDYAPQK.cjs} +5 -5
- package/dist/{ConnectedCallRoom-TAUGSRGV.cjs.map → ConnectedCallRoom-CUDYAPQK.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-HDE522YC.cjs → ConnectedNativeDocxComparison-JUF2TI2P.cjs} +9 -9
- package/dist/{ConnectedNativeDocxComparison-HDE522YC.cjs.map → ConnectedNativeDocxComparison-JUF2TI2P.cjs.map} +1 -1
- package/dist/ConnectedPresentation-SI3L77J4.cjs +1 -1
- package/dist/{ConnectedSlidesTab-JSPU6EY5.cjs → ConnectedSlidesTab-E76OVY34.cjs} +3 -3
- package/dist/{ConnectedSlidesTab-JSPU6EY5.cjs.map → ConnectedSlidesTab-E76OVY34.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-4FHPOAFZ.cjs → ConnectedStreamedWordArtifact-Q64DRRQD.cjs} +9 -9
- package/dist/{ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map → ConnectedStreamedWordArtifact-Q64DRRQD.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-BDNXP3D4.cjs → DocumentReviewCard-M53XFLI2.cjs} +4 -4
- package/dist/{DocumentReviewCard-BDNXP3D4.cjs.map → DocumentReviewCard-M53XFLI2.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-WQRNSKWM.cjs → FilesViewerDialog-V6FSRQTP.cjs} +8 -8
- package/dist/{FilesViewerDialog-WQRNSKWM.cjs.map → FilesViewerDialog-V6FSRQTP.cjs.map} +1 -1
- package/dist/{NativeDocxEditor-SUDULUN3.cjs → NativeDocxEditor-2PTEK6ND.cjs} +6 -6
- package/dist/{NativeDocxEditor-SUDULUN3.cjs.map → NativeDocxEditor-2PTEK6ND.cjs.map} +1 -1
- package/dist/WorkspaceTableView-3XYAV4BV.cjs +1 -1
- package/dist/agents/index.cjs +1 -1
- package/dist/ai-IEIR7SC2.cjs +1 -1
- package/dist/calls/index.cjs +2 -2
- package/dist/{chunk-Q6N5D3R5.cjs → chunk-23I5EUZA.cjs} +45 -15
- package/dist/chunk-23I5EUZA.cjs.map +1 -0
- package/dist/{chunk-OHHKBURG.cjs → chunk-2SU37RZA.cjs} +378 -11
- package/dist/chunk-2SU37RZA.cjs.map +1 -0
- package/dist/{chunk-6B4CCDDB.cjs → chunk-ESVRVZ53.cjs} +5 -5
- package/dist/{chunk-6B4CCDDB.cjs.map → chunk-ESVRVZ53.cjs.map} +1 -1
- package/dist/{chunk-KA3F6TIH.cjs → chunk-IWHP7FAB.cjs} +12 -5
- package/dist/chunk-IWHP7FAB.cjs.map +1 -0
- package/dist/{chunk-FB3JXSQT.cjs → chunk-JVLOIIA7.cjs} +8 -8
- package/dist/{chunk-FB3JXSQT.cjs.map → chunk-JVLOIIA7.cjs.map} +1 -1
- package/dist/{chunk-FGOJBOZX.cjs → chunk-M6WVIGYP.cjs} +4 -4
- package/dist/{chunk-FGOJBOZX.cjs.map → chunk-M6WVIGYP.cjs.map} +1 -1
- package/dist/{chunk-I4X72WUT.cjs → chunk-MMSHIIKG.cjs} +6 -6
- package/dist/{chunk-I4X72WUT.cjs.map → chunk-MMSHIIKG.cjs.map} +1 -1
- package/dist/{chunk-LXM5QXII.cjs → chunk-MXBXZXXQ.cjs} +3 -3
- package/dist/{chunk-LXM5QXII.cjs.map → chunk-MXBXZXXQ.cjs.map} +1 -1
- package/dist/{chunk-463QM764.cjs → chunk-NG2EE7HR.cjs} +3 -3
- package/dist/{chunk-463QM764.cjs.map → chunk-NG2EE7HR.cjs.map} +1 -1
- package/dist/chunk-NTDQQLDD.cjs +18 -0
- package/dist/{chunk-OALQGO5C.cjs.map → chunk-NTDQQLDD.cjs.map} +1 -1
- package/dist/{chunk-XNB27POJ.cjs → chunk-Q6IKXWPG.cjs} +4 -4
- package/dist/{chunk-XNB27POJ.cjs.map → chunk-Q6IKXWPG.cjs.map} +1 -1
- package/dist/{chunk-LOB2ATS5.cjs → chunk-VLQCLQAS.cjs} +5 -5
- package/dist/{chunk-LOB2ATS5.cjs.map → chunk-VLQCLQAS.cjs.map} +1 -1
- package/dist/{chunk-4KEQ62SL.cjs → chunk-YP5EBGLU.cjs} +6 -6
- package/dist/{chunk-4KEQ62SL.cjs.map → chunk-YP5EBGLU.cjs.map} +1 -1
- package/dist/{chunk-CMPHJRVV.cjs → chunk-ZYGAXD3N.cjs} +3 -3
- package/dist/{chunk-CMPHJRVV.cjs.map → chunk-ZYGAXD3N.cjs.map} +1 -1
- package/dist/connect/docx.cjs +13 -13
- package/dist/connect/index.cjs +233 -287
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +6 -6
- package/dist/connection/remote-control/ConnectedRemoteControlConsent.js +6 -3
- package/dist/connection/remote-control/ConnectedRemoteControlConsent.js.map +2 -2
- package/dist/connection/remote-control/ConnectedRemoteControlIndicator.js +12 -2
- package/dist/connection/remote-control/ConnectedRemoteControlIndicator.js.map +2 -2
- package/dist/connection/remote-control/ConnectedRemoteControlSwitch.js +1 -1
- package/dist/connection/remote-control/ConnectedRemoteControlSwitch.js.map +1 -1
- package/dist/connection/remote-control/browser-diagnostics.d.ts +7 -0
- package/dist/connection/remote-control/browser-diagnostics.js +109 -0
- package/dist/connection/remote-control/browser-diagnostics.js.map +7 -0
- package/dist/connection/remote-control/remoteControl.d.ts +9 -1
- package/dist/connection/remote-control/remoteControl.js +130 -10
- package/dist/connection/remote-control/remoteControl.js.map +2 -2
- package/dist/connection/remote-control/screen-sharing.d.ts +11 -0
- package/dist/connection/remote-control/screen-sharing.js +78 -0
- package/dist/connection/remote-control/screen-sharing.js.map +7 -0
- package/dist/connection/report-problem/screen-capture.d.ts +1 -0
- package/dist/connection/report-problem/screen-capture.js +2 -1
- package/dist/connection/report-problem/screen-capture.js.map +2 -2
- package/dist/docx/NativeDocxEditor.js +14 -12
- package/dist/docx/NativeDocxEditor.js.map +2 -2
- package/dist/docx/index.cjs +38 -38
- package/dist/docx/useVersionAutosave.d.ts +10 -0
- package/dist/docx/useVersionAutosave.js +36 -0
- package/dist/docx/useVersionAutosave.js.map +7 -0
- package/dist/embed/index.cjs +9 -9
- package/dist/facts/index.cjs +43 -43
- package/dist/index.cjs +97 -97
- package/dist/settings/index.cjs +1 -1
- package/dist/shell/RemoteControlPill.d.ts +2 -1
- package/dist/shell/RemoteControlPill.js +10 -3
- package/dist/shell/RemoteControlPill.js.map +2 -2
- package/dist/shell/index.cjs +21 -21
- package/dist/studio/index.cjs +1 -1
- package/dist/workflow-canvas/index.cjs +12 -12
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/chunk-KA3F6TIH.cjs.map +0 -1
- package/dist/chunk-OALQGO5C.cjs +0 -18
- package/dist/chunk-OHHKBURG.cjs.map +0 -1
- package/dist/chunk-Q6N5D3R5.cjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/docx/NativeDocxEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["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 {\n DocxEditor,\n useChromeTranslate,\n useDocxEditor,\n type FontConfiguration,\n} from '@docx-editor.dev/react'\nimport { collaborationModule, DOCUMENT_COLLABORATION_VERSIONS } from '@arbidocs/coedit'\nimport { awaitMatchingEditor } from './coedit-update'\nimport type { DocxCollaborationSession } from '@arbidocs/coedit'\nimport {\n createHocuspocusCollaboration,\n type HocuspocusCollaborationRoom,\n} from '@arbidocs/coedit/hocuspocus'\nimport { DocxEditorReview, reviewModule } from './review'\nimport { AgentUndo, AgentUndoRoom } from './AgentUndo'\nimport type { EditorModule } from '@docx-editor.dev/core'\nimport type { Editor } from '@docx-editor.dev/core'\nimport {\n Download,\n Save,\n RefreshCw,\n WifiOff,\n Check,\n Type,\n Pilcrow,\n UsersRound,\n BookA,\n} from 'lucide-react'\nimport { DefinedTermsProvider, useDefinedTerms } from './definitions/DefinedTerms'\nimport { RibbonMenu } from './RibbonMenu'\nimport { DocxCommandMenu } from './DocxCommandMenu'\nimport { RibbonItem, RibbonOverflow } from './RibbonOverflow'\nimport { StyleGallery } from './StyleGallery'\nimport { NoteButtons, WordShortcuts } from './WordReferences'\nimport type { DefinitionSource } from '../tags/definitions'\nimport { CrossReferencesProvider, type DocxReferencesAdapter } from './references/CrossReferences'\nimport {\n CrossReferenceButton,\n DocxContextMenuExtras,\n UpdateCrossReferencesButton,\n} from './references/EditorMenus'\nimport { runBeforeSave } from './beforeSave'\nimport { LayoutTabContent, LAYOUT_TAB, useContextualTabs } from './layout/LayoutTabs'\nimport {\n GenerateImageButton,\n useGenerateImageTarget,\n type DocxImageGeneration,\n} from './layout/GenerateImage'\nimport { TableTabKeys } from './layout/TableKeys'\nimport { newFromTemplate } from '@arbidocs/coedit/template'\nimport {\n HouseTemplateProvider,\n resolveHouseTemplate,\n templateFileName,\n type HouseTemplateHost,\n} from './template/HouseTemplate'\nimport { QuickParts } from './template/QuickParts'\nimport {\n MySignatureContextItems,\n SignatureFieldContextItem,\n MySignatureMenu,\n SignatureFieldMenu,\n SignatureFieldsProvider,\n type DocxSavedSignature,\n type DocxSigner,\n} from './signatures/SignatureFields'\nimport { HouseTemplatePanel } from './template/HouseTemplatePanel'\nimport { DocxAuthorContext } from './structural/useTrackedOrNoted'\n\nimport { contentPath } from './content-path'\n\nexport { contentPath }\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 the live room as the document's next version (same document id). */\n save: (\n documentId: string,\n state?: string,\n autosave?: boolean\n ) => Promise<{ document_ext_id: string; version?: number; unchanged?: boolean }>\n loadFonts: () => Promise<FontConfiguration>\n baseUrl?: string\n author?: string\n subscribeTokenChanges?: (listener: () => void) => () => void\n registerTurnFlush?: (documentId: string, flush: () => Promise<void>) => () => void\n onDirtyChange?: (dirty: boolean) => void\n onVersionSaved?: (documentId: string, version?: number) => 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 * The workspace's definitions: facts labelled \"Definitions\". Present: the Insert tab offers\n * Defined term, and typing `@@` in the body opens the term type-ahead.\n */\n definitions?: () => Promise<DefinitionSource[]>\n /**\n * References to the workspace's other documents. Present: Insert cross-reference also offers a\n * passage of another document, inserted as a link that opens it there.\n */\n references?: DocxReferencesAdapter\n /** The platform's image generation. Present: the Insert tab offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /**\n * The workspace's house template. Present: a blank note starts from it (its styles, numbering,\n * page setup, headers and footers), Insert offers its Quick Parts, and the Design tab and the\n * style box show where the document's styles differ from it.\n */\n houseTemplate?: HouseTemplateHost\n /** Workspace members who may sign. Present: Insert offers Signature field (or anyone by email). */\n signatureSigners?: readonly DocxSigner[]\n /** One's saved signature. Present: Insert offers My signature (an informal one, as a picture). */\n savedSignature?: DocxSavedSignature\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 /**\n * Read-only preview of generated Markdown. The server stores the DOCX itself; when the\n * stream ends the caller swaps this preview for the stored document.\n */\n stream?: {\n content: string\n busy: boolean\n error?: string | null\n }\n /**\n * Embedded as a body field (an email draft): a small formatting toolbar instead of the ribbon, no\n * page furniture or save bar (the host saves), and the person types directly; others' edits (ARBI's)\n * still arrive as tracked changes to accept or reject.\n */\n compact?: boolean\n /** Receives a reader of the live room's state, so the host's save can include the latest keystrokes. */\n stateRef?: React.MutableRefObject<(() => string | undefined) | null>\n /** Save the current live room before leaving the editor; false means the caller must stay. */\n saveRef?: React.MutableRefObject<(() => Promise<boolean | number>) | null>\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}\n/**\n * The room writes below the editor's input buffer, so it gets the editor's pending-input flush: it\n * lands queued typing before a peer's change and lays that change out at once, which is when the\n * editor carries its caret (otherwise a fast keystroke lands where the caret was before the change).\n */\nfunction RoomInputBinding({\n session,\n flushRef,\n}: {\n session?: DocxCollaborationSession\n flushRef: React.MutableRefObject<(() => void) | null>\n}) {\n const editor = useDocxEditor()\n useEffect(() => {\n if (!editor) return\n const flush = () => editor.surface?.flushPendingInput()\n flushRef.current = flush\n const unbind = session?.bindEditorInput(flush)\n return () => {\n if (flushRef.current === flush) flushRef.current = null\n unbind?.()\n }\n }, [editor, session, flushRef])\n return null\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}\n\n/** Insert tab: a defined term at the caret (when definitions are offered). */\nfunction DefinedTermButtons() {\n const terms = useDefinedTerms()\n if (!terms) return null\n return (\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={terms.labels.insert}\n title={`${terms.labels.insert} (type @@)`}\n data-testid=\"docx-insert-defined-term\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => terms.openPicker(event.currentTarget)}\n >\n <BookA size={16} />\n </button>\n )\n}\n\nconst DOCUMENT_STATES = {\n 'co-editing': {\n label: 'Co-editing',\n title: 'Edits sync live with everyone who has this document open',\n },\n 'read-only': {\n label: 'Read-only',\n title: 'This copy cannot be edited: an earlier version, or the last saved copy',\n },\n draft: { label: 'Private draft', title: 'Only you can see this until you save it' },\n} as const\n\n/** Which document is on screen: shared live, read-only, or a draft only its author sees. */\nfunction DocumentStateBadge({ state }: { state?: keyof typeof DOCUMENT_STATES }) {\n if (!state) return null\n const { label, title } = DOCUMENT_STATES[state]\n return (\n <span data-state={state} title={title}>\n {label}\n </span>\n )\n}\n\nexport function DocxRibbon({\n onSave,\n badge,\n imageGeneration,\n}: {\n onSave: () => void\n /** Insert \u203A Generate image, when the host can generate images. */\n imageGeneration?: DocxImageGeneration\n /** A short state label at the end of the row, such as \"Co-editing\". */\n badge?: React.ReactNode\n}) {\n const [selected, setTab] = useState('Home')\n const contextual = useContextualTabs(selected)\n useGenerateImageTarget()\n const tab = contextual.shown\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>Design</option>\n <option>{LAYOUT_TAB}</option>\n <option>References</option>\n <option>Review</option>\n {contextual.tabs.map((name) => (\n <option key={name}>{name}</option>\n ))}\n </select>\n <DocxEditor.Toolbar t={t} preset={false} onSave={onSave}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Save />\n {/* Undo, Redo and Save stay put, like Word's Quick Access Toolbar; the tab's own\n controls collapse into its More menu when the ribbon is too narrow for them. */}\n <RibbonOverflow tab={tab}>\n {tab === 'Home' && (\n <>\n <RibbonItem id=\"home-style\" label=\"Styles\" priority={80}>\n <StyleGallery />\n </RibbonItem>\n <RibbonItem id=\"home-bold\" label=\"Bold\" priority={100}>\n <DocxEditor.Toolbar.Bold />\n </RibbonItem>\n <RibbonItem id=\"home-italic\" label=\"Italic\" priority={95}>\n <DocxEditor.Toolbar.Italic />\n </RibbonItem>\n <RibbonItem id=\"home-underline\" label=\"Underline\" priority={90}>\n <DocxEditor.Toolbar.Underline />\n </RibbonItem>\n <RibbonItem id=\"home-font\" label=\"Font\" priority={60}>\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 </RibbonItem>\n <RibbonItem id=\"home-more-formatting\" label=\"More formatting\" priority={50}>\n <RibbonMenu label=\"More formatting\" icon={<Pilcrow size={16} />}>\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 </RibbonItem>\n </>\n )}\n {tab === 'Insert' && (\n <>\n <RibbonItem id=\"insert-table\" label=\"Table\">\n <DocxEditor.Toolbar.TableInsert />\n </RibbonItem>\n <RibbonItem id=\"insert-picture\" label=\"Picture\">\n <DocxEditor.Toolbar.ImageInsert />\n </RibbonItem>\n {imageGeneration && (\n <RibbonItem id=\"insert-generate-image\" label=\"Generate image\">\n <GenerateImageButton generation={imageGeneration} />\n </RibbonItem>\n )}\n <RibbonItem id=\"insert-page-break\" label=\"Page break\">\n <DocxEditor.Toolbar.Button slotId=\"insert.pageBreak\" />\n </RibbonItem>\n <RibbonItem id=\"insert-link\" label=\"Link\">\n <DocxEditor.Toolbar.Link />\n </RibbonItem>\n <RibbonItem id=\"insert-defined-term\" label=\"Defined term\">\n <DefinedTermButtons />\n </RibbonItem>\n <RibbonItem id=\"insert-quick-parts\" label=\"Quick Parts\">\n <QuickParts />\n </RibbonItem>\n <RibbonItem id=\"insert-signature-field\" label=\"Signature field\">\n <SignatureFieldMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-my-signature\" label=\"My signature\">\n <MySignatureMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n </>\n )}\n <LayoutTabContent tab={tab} />\n {tab === 'Design' && (\n <RibbonItem id=\"design-house-template\" label=\"House template\">\n <HouseTemplatePanel />\n </RibbonItem>\n )}\n {tab === 'References' && (\n <>\n <NoteButtons />\n <RibbonItem id=\"references-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n <RibbonItem id=\"references-update-cross-references\" label=\"Update cross-references\">\n <UpdateCrossReferencesButton />\n </RibbonItem>\n </>\n )}\n {tab === 'Review' && (\n <>\n <RibbonItem id=\"review-editing-mode\" label=\"Editing mode\" priority={10}>\n <DocxEditor.Toolbar.EditingMode />\n </RibbonItem>\n <RibbonItem id=\"review-comments\" label=\"Comments\">\n <DocxEditor.Toolbar.Comments />\n </RibbonItem>\n <RibbonItem id=\"review-options\" label=\"Review options\">\n <RibbonMenu label=\"Review options\" icon={<UsersRound size={16} />}>\n <DocxEditor.Toolbar.Reviewers />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n </RibbonOverflow>\n {/* The toolbar provides its table chrome context only to a direct table-chrome child: this\n hidden one keeps it mounted for the Table tab's borders and shading. */}\n <DocxEditor.Toolbar.TableCellFill hidden />\n </DocxEditor.Toolbar>\n {badge && (\n <span className=\"native-docx-ribbon-badge\" data-testid=\"docx-ribbon-badge\">\n {badge}\n </span>\n )}\n </div>\n )\n}\n\n/** The compact editor's formatting: what an email needs. */\nfunction CompactToolbar() {\n const t = useChromeTranslate()\n return (\n <DocxEditor.Toolbar t={t} preset={false}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Bold />\n <DocxEditor.Toolbar.Italic />\n <DocxEditor.Toolbar.Underline />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.Link />\n </DocxEditor.Toolbar>\n )\n}\n\nconst fixedZoomMode = { type: 'fixed' } as const\n/** The zoom menu's levels, in percent, beside Fit width. */\nconst ZOOM_LEVELS = [50, 75, 100, 125, 150, 200]\n\nexport function NativeDocxEditor({\n documentId,\n title,\n draftContent,\n initialCommentId,\n snapshot = false,\n onSaved,\n stream,\n adapter,\n compact = false,\n stateRef,\n saveRef,\n}: NativeDocxEditorProps) {\n const [ready, setReady] = useState<Ready>(),\n [error, setError] = useState(''),\n [retry, setRetry] = useState(0)\n const [status, setStatus] = useState('Connecting\u2026'),\n [dirty, setDirty] = useState(false),\n [saving, setSaving] = useState(false),\n [offline, setOffline] = useState(false)\n const revision = useRef(0)\n const savingRef = useRef(false)\n const flushInputRef = useRef<(() => void) | null>(null)\n const stageRef = useRef<HTMLDivElement>(null),\n fitCleanup = useRef<(() => void) | undefined>(undefined),\n refit = useRef<(() => void) | undefined>(undefined)\n // Fit width until the reader picks a zoom (the zoom menu, or Ctrl +/-/0), then keep theirs until\n // they pick Fit width again. `fitted` is the zoom the fit last applied: any other zoom is theirs.\n const fitting = useRef(true),\n fitted = useRef<number | undefined>(undefined)\n const [fitWidth, setFitWidth] = useState(true),\n [zoomPercent, setZoomPercent] = useState(100)\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 \u00B7 editing is locked'\n : current.error\n ? 'Generation stopped \u00B7 draft retained'\n : 'Opening the saved document\u2026'\n )\n if (!current.busy && !current.error) streamFinished.current = true\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\u2026')\n setDirty(false)\n dirtyRef.current = false\n // A refusal for another room format: \"Updating\u2026\" while the matching editor or server arrives.\n const updating = (reason: string | undefined): boolean => {\n const cancel = awaitMatchingEditor(reason, () => setRetry((x) => x + 1))\n if (!cancel) return false\n cleanups.push(cancel)\n setError('')\n setStatus('Updating\u2026')\n return true\n }\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 (draftContent === '' && adapter.houseTemplate\n ? await (async () => {\n // A blank note starts from the house template, as File \u203A New from it does.\n const template = await resolveHouseTemplate(adapter.houseTemplate)\n return newFromTemplate(template.bytes, {\n attachedTemplate: templateFileName(template),\n })\n })()\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(contentPath(documentId))).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 \u00B7 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 if (updating(detail)) return\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 \u00B7 edits buffered locally')\n else if (s === 'ready') {\n setError('')\n setStatus(dirtyRef.current ? 'Saving changes\u2026' : '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\u2026')\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 \u00B7 live')\n }\n void start().catch((e) => {\n const message = e instanceof Error ? e.message : String(e)\n if (!cancelled && !updating(message)) setError(message)\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 if (!stateRef) return\n const room = ready?.room\n stateRef.current = () => (room ? encodeState(room) : undefined)\n return () => {\n stateRef.current = null\n }\n }, [stateRef, ready?.room])\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 runBeforeSave(ref.current)\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 const [editRevision, setEditRevision] = useState(0)\n const [checkpoint, setCheckpoint] = useState<{\n version?: number\n autosave: boolean\n revision: number\n } | null>(null)\n useEffect(() => {\n setEditRevision(0)\n setCheckpoint(null)\n }, [documentId])\n async function saveVersion(autosave = false) {\n if (!ready || savingRef.current || stream) return false\n if (snapshot || !ready.canEdit) return true\n if (offline) return false\n savingRef.current = true\n setSaving(true)\n try {\n if (!flushInputRef.current) throw new Error('The editor is not ready to save yet.')\n flushInputRef.current()\n runBeforeSave(ref.current)\n const atRevision = revision.current\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, autosave)\n if (revision.current === atRevision) {\n dirtyRef.current = false\n setDirty(false)\n drafts.delete(documentId)\n }\n const savedVersion =\n 'version' in result && typeof result.version === 'number' ? result.version : undefined\n if (!isDraft && !savedVersion) throw new Error('Could not confirm the saved version.')\n await adapter.onVersionSaved?.(result.document_ext_id, savedVersion)\n onSaved?.(result.document_ext_id)\n if (revision.current !== atRevision) {\n adapter.notify?.('The document changed while saving. Please try again.', 'error')\n return false\n }\n setCheckpoint({ version: savedVersion, autosave: autosave && !isDraft, revision: atRevision })\n if (!autosave) adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n return savedVersion ?? true\n } catch (e) {\n adapter.notify?.(e instanceof Error ? e.message : 'Could not save this document.', 'error')\n setStatus('Save failed \u00B7 your draft is retained')\n return false\n } finally {\n savingRef.current = false\n setSaving(false)\n }\n }\n useEffect(() => {\n if (!saveRef) return\n saveRef.current = () => saveVersion()\n return () => {\n saveRef.current = null\n }\n })\n const latestSaveVersion = useRef(saveVersion)\n latestSaveVersion.current = saveVersion\n useEffect(() => {\n if (!editRevision || compact || snapshot || offline || stream) return\n const timer = setTimeout(() => {\n void latestSaveVersion.current(true)\n }, 2500)\n return () => clearTimeout(timer)\n }, [editRevision, documentId, compact, snapshot, offline, stream])\n useEffect(() => {\n if (compact || snapshot) return\n return adapter.registerTurnFlush?.(documentId, async () => {\n if (!ready?.canEdit) return\n if (!(await saveVersion()))\n throw new Error('The Word document could not be saved before this turn.')\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 fitted.current = undefined\n const viewport = stageRef.current?.querySelector<HTMLElement>('.native-docx-viewport')\n if (!viewport) return\n let surface: Element | null = null\n const fit = () => {\n // The page itself: laid out after the editor is ready, and resized by every zoom.\n const page = viewport.querySelector('.docx-paginated-surface')\n if (page && page !== surface) resize.observe((surface = page))\n const current = editor.getZoom()\n // A zoom the fit did not apply is the reader's: stop fitting until they pick Fit width again.\n if (\n fitting.current &&\n fitted.current !== undefined &&\n Math.abs(current - fitted.current) > 0.001\n )\n fitting.current = false\n setFitWidth(fitting.current)\n setZoomPercent(Math.round(current * 100))\n if (!fitting.current) return\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 // The page fills the viewer, its padding the only gutter. Compact (an email body) never\n // magnifies: its text stays the size the email is read at.\n const zoom = Math.max(0.1, Math.min(compact ? 1 : 5, available / pageWidth))\n if (Math.abs(current - zoom) > 0.001) editor.setZoom(zoom)\n fitted.current = editor.getZoom()\n setZoomPercent(Math.round(fitted.current * 100))\n }\n refit.current = fit\n const resize = new ResizeObserver(fit)\n const chrome = new MutationObserver(fit)\n resize.observe(viewport)\n chrome.observe(viewport, {\n attributes: true,\n attributeFilter: ['style', 'data-review-pane', 'data-review-margin'],\n })\n // Where the page mounts, to start watching it if it is laid out after the editor is ready.\n const mount = viewport.querySelector('.docx-content-mount')\n if (mount) chrome.observe(mount, { childList: true })\n if (!fitting.current) editor.setZoom(zoomPercent / 100)\n fit()\n fitCleanup.current = () => {\n resize.disconnect()\n chrome.disconnect()\n refit.current = undefined\n }\n }\n function pickZoom(value: string) {\n const editor = ref.current\n if (!editor) return\n if (value === 'fit') {\n fitting.current = true\n fitted.current = undefined\n refit.current?.()\n return\n }\n fitting.current = false\n setFitWidth(false)\n setZoomPercent(Number(value))\n editor.setZoom(Number(value) / 100)\n }\n function changed() {\n if (snapshot) return\n revision.current += 1\n setEditRevision(revision.current)\n dirtyRef.current = true\n setDirty(true)\n setStatus(\n isDraft ? 'Unsaved note' : offline ? 'Offline \u00B7 edits buffered locally' : 'Saving changes\u2026'\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={compact ? 'native-docx-viewer native-docx-compact' : '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' : 'generated') : '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\u2026\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={\n stream || (isDraft && ready.canEdit && !snapshot) || (compact && ready.canEdit)\n ? 'edit'\n : !ready.canEdit || snapshot\n ? 'view'\n : 'suggesting'\n }\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 <DocxAuthorContext.Provider value={ready.author}>\n <DefinedTermsProvider\n load={adapter.definitions}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <HouseTemplateProvider\n enabled={!stream}\n host={adapter.houseTemplate}\n documentId={isDraft || snapshot ? undefined : documentId}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <CrossReferencesProvider\n editable={!stream && !snapshot && ready.canEdit}\n references={adapter.references}\n documentId={documentId}\n notify={adapter.notify}\n >\n <SignatureFieldsProvider\n signers={adapter.signatureSigners}\n mySignature={adapter.savedSignature}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\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 {compact && !stream && <CompactToolbar />}\n {!compact && !stream && (\n <DocxCommandMenu\n onSave={() => void saveVersion()}\n imageGeneration={\n adapter.imageGeneration && {\n notify: adapter.notify,\n ...adapter.imageGeneration,\n }\n }\n badge={\n // The document's state, in place of a title row above the ribbon.\n <DocumentStateBadge\n state={\n snapshot || !ready.canEdit\n ? 'read-only'\n : ready.room\n ? 'co-editing'\n : isDraft\n ? 'draft'\n : undefined\n }\n />\n }\n />\n )}\n {!stream && <WordShortcuts scope={stageRef} />}\n {!stream && <TableTabKeys scope={stageRef} />}\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 <RoomInputBinding\n session={ready.room?.session}\n flushRef={flushInputRef}\n />\n <AgentUndoRoom.Provider value={ready.room?.ydoc ?? null}>\n <DocxEditorReview>\n {() => (\n <DocxEditorReview.Card>\n <DocxCommentActivity />\n <AgentUndo />\n </DocxEditorReview.Card>\n )}\n </DocxEditorReview>\n </AgentUndoRoom.Provider>\n </DocxMentions>\n {!compact && <DocxEditor.HeaderFooterChrome />}\n {!compact && <DocxEditor.NotesChrome />}\n <DocxEditor.Equation />\n <DocxEditor.HyperLink />\n <DocxEditor.ContextMenu>\n <DocxContextMenuExtras />\n <MySignatureContextItems />\n <SignatureFieldContextItem />\n </DocxEditor.ContextMenu>\n </DocxEditor.Viewport>\n {!compact && <DocxEditor.PageNumber />}\n </div>\n </SignatureFieldsProvider>\n </CrossReferencesProvider>\n </HouseTemplateProvider>\n </DefinedTermsProvider>\n </DocxAuthorContext.Provider>\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 {checkpoint?.autosave && checkpoint.revision === editRevision\n ? `v${checkpoint.version} \u00B7 Autosaved`\n : status}\n </span>\n <DocxParticipants session={ready?.room?.session} />\n {!compact && (\n <select\n className=\"native-docx-zoom\"\n aria-label=\"Zoom\"\n data-testid=\"native-docx-zoom\"\n disabled={!ready}\n value={fitWidth ? 'fit' : String(zoomPercent)}\n onChange={(event) => pickZoom(event.target.value)}\n >\n <option value=\"fit\">Fit width</option>\n {[...new Set([...ZOOM_LEVELS, ...(fitWidth ? [] : [zoomPercent])])]\n .sort((a, b) => a - b)\n .map((level) => (\n <option key={level} value={String(level)}>\n {level}%\n </option>\n ))}\n </select>\n )}\n {!compact && (\n <button\n onClick={() => void exportDocument()}\n disabled={!ready}\n aria-label=\"Download DOCX\"\n >\n <Download size={14} />\n DOCX\n </button>\n )}\n {!compact && !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\u2026' : isDraft ? 'Save note' : 'Save version'}\n </button>\n )}\n </div>\n </section>\n )\n}\n"],
|
|
5
|
-
"mappings": ";AAoNM,SAuIM,UA3FJ,KA5CF;AApNN,SAAS,2BAA2B;AACpC,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,OAKK;AACP,YAAY,OAAO;AAEnB,OAAO,SAAS,WAAW,iBAAiB,QAAQ,gBAAgB;AACpE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,qBAAqB,uCAAuC;AACrE,SAAS,2BAA2B;AAEpC;AAAA,EACE;AAAA,OAEK;AACP,SAAS,kBAAkB,oBAAoB;AAC/C,SAAS,WAAW,qBAAqB;AAGzC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB,uBAAuB;AACtD,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,YAAY,sBAAsB;AAC3C,SAAS,oBAAoB;AAC7B,SAAS,aAAa,qBAAqB;AAE3C,SAAS,+BAA2D;AACpE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB,YAAY,yBAAyB;AAChE;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,0BAA0B;AACnC,SAAS,yBAAyB;AAElC,SAAS,mBAAmB;AAkG5B,MAAM,SAAS,oBAAI,IAAyB;AAC5C,MAAM,aAAa,CAAC,SAAsC,EAAE,oBAAoB,KAAK,IAAI;AACzF,MAAM,cAAc,CAAC,SAAsC;AACzD,MAAI,SAAS;AACb,aAAW,QAAQ,WAAW,IAAI,EAAG,WAAU,OAAO,aAAa,IAAI;AACvE,SAAO,KAAK,MAAM;AACpB;AACA,SAAS,QAAQ,MAAmC,QAAgB,SAAiB;AACnF,QAAM,SAAS,CAAC,UAAkB,WAAW,KAAK,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACrF,QAAM,SAAS,EAAE,kBAAkB,OAAO,MAAM,CAAC,GAC/C,QAAQ,EAAE,kBAAkB,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAC5D,aAAW,CAAC,QAAQ,KAAK,KAAK,MAAO,MAAK,OAAO,IAAI,MAAM,KAAK,KAAK,MAAO,QAAO;AACnF,QAAM,UAAU,EAAE,aAAa,WAAW,IAAI,CAAC,EAAE,GAAG;AACpD,QAAM,QAAQ,EAAE,aAAa,OAAO,OAAO,CAAC,EAAE,GAAG;AACjD,aAAW,CAAC,QAAQ,MAAM,KAAK;AAC7B,eAAW,SAAS,QAAQ;AAC1B,UACE,EAAE,MAAM,IAAI,MAAM,KAAK,CAAC,GAAG;AAAA,QACzB,CAAC,MAAM,EAAE,SAAS,MAAM,SAAS,EAAE,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM;AAAA,MAC1E;AAEA,eAAO;AAAA,IACX;AACF,SAAO;AACT;AACA,MAAM,uBAAuB,MAAM,UAA4D;AAAA,EAC7F,QAA2B,CAAC;AAAA,EAC5B,OAAO,yBAAyB,OAAc;AAC5C,WAAO,EAAE,MAAM;AAAA,EACjB;AAAA,EACA,SAAS;AACP,WAAO,KAAK,MAAM,QAChB,qBAAC,SAAI,MAAK,SAAQ,WAAU,qBAAoB;AAAA;AAAA,MACR,KAAK,MAAM,MAAM;AAAA,OACzD,IAEA,KAAK,MAAM;AAAA,EAEf;AACF;AAMA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AACF,GAGG;AACD,QAAM,SAAS,cAAc;AAC7B,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,UAAM,QAAQ,MAAM,OAAO,SAAS,kBAAkB;AACtD,aAAS,UAAU;AACnB,UAAM,SAAS,SAAS,gBAAgB,KAAK;AAC7C,WAAO,MAAM;AACX,UAAI,SAAS,YAAY,MAAO,UAAS,UAAU;AACnD,eAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,QAAQ,CAAC;AAC9B,SAAO;AACT;AAEO,SAAS,iBAAiB,EAAE,QAAQ,GAA2C;AACpF,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAuD,CAAC,CAAC;AACrF,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,cAAU,QAAQ,aAAa,CAAC;AAChC,WAAO,QAAQ,sBAAsB,SAAS;AAAA,EAChD,GAAG,CAAC,OAAO,CAAC;AACZ,SACE,oBAAC,SAAI,WAAU,wBAAuB,cAAW,gCAC9C,iBAAO,IAAI,CAAC,MACX,oBAAC,UAAK,WAAU,sBAAqC,OAAO,EAAE,MAC3D,YAAE,KACA,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EACf,MAAM,GAAG,CAAC,EACV,KAAK,EAAE,KAL8B,EAAE,OAM5C,CACD,GACH;AAEJ;AAGA,SAAS,qBAAqB;AAC5B,QAAM,QAAQ,gBAAgB;AAC9B,MAAI,CAAC,MAAO,QAAO;AACnB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,cAAY,MAAM,OAAO;AAAA,MACzB,OAAO,GAAG,MAAM,OAAO,MAAM;AAAA,MAC7B,eAAY;AAAA,MACZ,aAAa,CAAC,UAAU,MAAM,eAAe;AAAA,MAC7C,SAAS,CAAC,UAAU,MAAM,WAAW,MAAM,aAAa;AAAA,MAExD,8BAAC,SAAM,MAAM,IAAI;AAAA;AAAA,EACnB;AAEJ;AAEA,MAAM,kBAAkB;AAAA,EACtB,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,OAAO,EAAE,OAAO,iBAAiB,OAAO,0CAA0C;AACpF;AAGA,SAAS,mBAAmB,EAAE,MAAM,GAA6C;AAC/E,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,EAAE,OAAO,MAAM,IAAI,gBAAgB,KAAK;AAC9C,SACE,oBAAC,UAAK,cAAY,OAAO,OACtB,iBACH;AAEJ;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,CAAC,UAAU,MAAM,IAAI,SAAS,MAAM;AAC1C,QAAM,aAAa,kBAAkB,QAAQ;AAC7C,yBAAuB;AACvB,QAAM,MAAM,WAAW;AACvB,QAAM,IAAI,mBAAmB;AAC7B,SACE,qBAAC,SAAI,WAAU,sBACb;AAAA,yBAAC,YAAO,cAAW,cAAa,OAAO,KAAK,UAAU,CAAC,UAAU,OAAO,MAAM,OAAO,KAAK,GACxF;AAAA,0BAAC,YAAO,kBAAI;AAAA,MACZ,oBAAC,YAAO,oBAAM;AAAA,MACd,oBAAC,YAAO,oBAAM;AAAA,MACd,oBAAC,YAAQ,sBAAW;AAAA,MACpB,oBAAC,YAAO,wBAAU;AAAA,MAClB,oBAAC,YAAO,oBAAM;AAAA,MACb,WAAW,KAAK,IAAI,CAAC,SACpB,oBAAC,YAAmB,kBAAP,IAAY,CAC1B;AAAA,OACH;AAAA,IACA,qBAAC,WAAW,SAAX,EAAmB,GAAM,QAAQ,OAAO,QACvC;AAAA,0BAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,MACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,MACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,MAGzB,qBAAC,kBAAe,KACb;AAAA,gBAAQ,UACP,iCACE;AAAA,8BAAC,cAAW,IAAG,cAAa,OAAM,UAAS,UAAU,IACnD,8BAAC,gBAAa,GAChB;AAAA,UACA,oBAAC,cAAW,IAAG,aAAY,OAAM,QAAO,UAAU,KAChD,8BAAC,WAAW,QAAQ,MAAnB,EAAwB,GAC3B;AAAA,UACA,oBAAC,cAAW,IAAG,eAAc,OAAM,UAAS,UAAU,IACpD,8BAAC,WAAW,QAAQ,QAAnB,EAA0B,GAC7B;AAAA,UACA,oBAAC,cAAW,IAAG,kBAAiB,OAAM,aAAY,UAAU,IAC1D,8BAAC,WAAW,QAAQ,WAAnB,EAA6B,GAChC;AAAA,UACA,oBAAC,cAAW,IAAG,aAAY,OAAM,QAAO,UAAU,IAChD,+BAAC,cAAW,OAAM,QAAO,MAAM,oBAAC,QAAK,MAAM,IAAI,GAC7C;AAAA,gCAAC,WAAW,QAAQ,YAAnB,EAA8B;AAAA,YAC/B,oBAAC,WAAW,QAAQ,UAAnB,EAA4B;AAAA,YAC7B,oBAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,YAC9B,oBAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,aAChC,GACF;AAAA,UACA,oBAAC,cAAW,IAAG,wBAAuB,OAAM,mBAAkB,UAAU,IACtE,+BAAC,cAAW,OAAM,mBAAkB,MAAM,oBAAC,WAAQ,MAAM,IAAI,GAC3D;AAAA,gCAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,YAC9B,oBAAC,WAAW,QAAQ,YAAnB,EAA8B;AAAA,YAC/B,oBAAC,WAAW,QAAQ,cAAnB,EAAgC;AAAA,YACjC,oBAAC,WAAW,QAAQ,aAAnB,EAA+B;AAAA,YAChC,oBAAC,WAAW,QAAQ,QAAnB,EAA0B;AAAA,YAC3B,oBAAC,WAAW,QAAQ,SAAnB,EAA2B;AAAA,YAC5B,oBAAC,WAAW,QAAQ,QAAnB,EAA0B;AAAA,YAC3B,oBAAC,WAAW,QAAQ,iBAAnB,EAAmC;AAAA,aACtC,GACF;AAAA,WACF;AAAA,QAED,QAAQ,YACP,iCACE;AAAA,8BAAC,cAAW,IAAG,gBAAe,OAAM,SAClC,8BAAC,WAAW,QAAQ,aAAnB,EAA+B,GAClC;AAAA,UACA,oBAAC,cAAW,IAAG,kBAAiB,OAAM,WACpC,8BAAC,WAAW,QAAQ,aAAnB,EAA+B,GAClC;AAAA,UACC,mBACC,oBAAC,cAAW,IAAG,yBAAwB,OAAM,kBAC3C,8BAAC,uBAAoB,YAAY,iBAAiB,GACpD;AAAA,UAEF,oBAAC,cAAW,IAAG,qBAAoB,OAAM,cACvC,8BAAC,WAAW,QAAQ,QAAnB,EAA0B,QAAO,oBAAmB,GACvD;AAAA,UACA,oBAAC,cAAW,IAAG,eAAc,OAAM,QACjC,8BAAC,WAAW,QAAQ,MAAnB,EAAwB,GAC3B;AAAA,UACA,oBAAC,cAAW,IAAG,uBAAsB,OAAM,gBACzC,8BAAC,sBAAmB,GACtB;AAAA,UACA,oBAAC,cAAW,IAAG,sBAAqB,OAAM,eACxC,8BAAC,cAAW,GACd;AAAA,UACA,oBAAC,cAAW,IAAG,0BAAyB,OAAM,mBAC5C,8BAAC,sBAAmB,GACtB;AAAA,UACA,oBAAC,cAAW,IAAG,uBAAsB,OAAM,gBACzC,8BAAC,mBAAgB,GACnB;AAAA,UACA,oBAAC,cAAW,IAAG,0BAAyB,OAAM,mBAC5C,8BAAC,wBAAqB,GACxB;AAAA,WACF;AAAA,QAEF,oBAAC,oBAAiB,KAAU;AAAA,QAC3B,QAAQ,YACP,oBAAC,cAAW,IAAG,yBAAwB,OAAM,kBAC3C,8BAAC,sBAAmB,GACtB;AAAA,QAED,QAAQ,gBACP,iCACE;AAAA,8BAAC,eAAY;AAAA,UACb,oBAAC,cAAW,IAAG,8BAA6B,OAAM,mBAChD,8BAAC,wBAAqB,GACxB;AAAA,UACA,oBAAC,cAAW,IAAG,sCAAqC,OAAM,2BACxD,8BAAC,+BAA4B,GAC/B;AAAA,WACF;AAAA,QAED,QAAQ,YACP,iCACE;AAAA,8BAAC,cAAW,IAAG,uBAAsB,OAAM,gBAAe,UAAU,IAClE,8BAAC,WAAW,QAAQ,aAAnB,EAA+B,GAClC;AAAA,UACA,oBAAC,cAAW,IAAG,mBAAkB,OAAM,YACrC,8BAAC,WAAW,QAAQ,UAAnB,EAA4B,GAC/B;AAAA,UACA,oBAAC,cAAW,IAAG,kBAAiB,OAAM,kBACpC,8BAAC,cAAW,OAAM,kBAAiB,MAAM,oBAAC,cAAW,MAAM,IAAI,GAC7D,8BAAC,WAAW,QAAQ,WAAnB,EAA6B,GAChC,GACF;AAAA,WACF;AAAA,SAEJ;AAAA,MAGA,oBAAC,WAAW,QAAQ,eAAnB,EAAiC,QAAM,MAAC;AAAA,OAC3C;AAAA,IACC,SACC,oBAAC,UAAK,WAAU,4BAA2B,eAAY,qBACpD,iBACH;AAAA,KAEJ;AAEJ;AAGA,SAAS,iBAAiB;AACxB,QAAM,IAAI,mBAAmB;AAC7B,SACE,qBAAC,WAAW,SAAX,EAAmB,GAAM,QAAQ,OAChC;AAAA,wBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,IACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,IACzB,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,IACzB,oBAAC,WAAW,QAAQ,QAAnB,EAA0B;AAAA,IAC3B,oBAAC,WAAW,QAAQ,WAAnB,EAA6B;AAAA,IAC9B,oBAAC,WAAW,QAAQ,YAAnB,EAA8B;AAAA,IAC/B,oBAAC,WAAW,QAAQ,cAAnB,EAAgC;AAAA,IACjC,oBAAC,WAAW,QAAQ,MAAnB,EAAwB;AAAA,KAC3B;AAEJ;AAEA,MAAM,gBAAgB,EAAE,MAAM,QAAQ;AAEtC,MAAM,cAAc,CAAC,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAExC,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAgB,GACxC,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE,GAC/B,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAChC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,kBAAa,GAChD,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK,GAClC,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK,GACpC,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AACxC,QAAM,WAAW,OAAO,CAAC;AACzB,QAAM,YAAY,OAAO,KAAK;AAC9B,QAAM,gBAAgB,OAA4B,IAAI;AACtD,QAAM,WAAW,OAAuB,IAAI,GAC1C,aAAa,OAAiC,MAAS,GACvD,QAAQ,OAAiC,MAAS;AAGpD,QAAM,UAAU,OAAO,IAAI,GACzB,SAAS,OAA2B,MAAS;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,IAAI,GAC3C,CAAC,aAAa,cAAc,IAAI,SAAS,GAAG;AAC9C,QAAM,MAAM,OAAsB,IAAI,GACpC,WAAW,OAAO,KAAK,GACvB,aAAa,OAAkD,MAAS;AAC1E,QAAM,UAAU,iBAAiB;AACjC,QAAM,YAAY,OAAO,MAAM;AAC/B,YAAU,UAAU;AACpB,QAAM,eAAe,OAA+B,IAAI;AACxD,QAAM,iBAAiB,OAAO,KAAK;AACnC,QAAM,cAAc,OAAkD,MAAS;AAC/E,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,CAAC;AACpD,WAAS,eAAe;AACtB,UAAM,UAAU,UAAU;AAC1B,QAAI,CAAC,WAAW,CAAC,aAAa,WAAW,eAAe,QAAS;AACjE,QAAI;AACF,mBAAa,QAAQ,OAAO,QAAQ,SAAS,CAAC,QAAQ,IAAI;AAC1D;AAAA,QACE,QAAQ,OACJ,sCACA,QAAQ,QACN,2CACA;AAAA,MACR;AACA,UAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,MAAO,gBAAe,UAAU;AAAA,IAChE,SAAS,SAAS;AAChB;AAAA,QACE,mBAAmB,QAAQ,QAAQ,UAAU;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACA,YAAU,MAAM;AACd,QAAI,CAAC,UAAU,QAAS;AACxB,QAAI,CAAC,UAAU,QAAQ,MAAM;AAC3B,mBAAa,YAAY,OAAO;AAChC,kBAAY,UAAU;AACtB,mBAAa;AAAA,IACf,WAAW,CAAC,YAAY,SAAS;AAC/B,kBAAY,UAAU,WAAW,MAAM;AACrC,oBAAY,UAAU;AACtB,qBAAa;AAAA,MACf,GAAG,GAAG;AAAA,IACR;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,QAAQ,MAAM,QAAQ,OAAO,aAAa,CAAC;AAChE,YAAU,MAAM,MAAM,aAAa,YAAY,OAAO,GAAG,CAAC,CAAC;AAC3D,YAAU,MAAM;AACd,QAAI,YAAY;AAChB,QAAI;AACJ,UAAM,WAA2B,CAAC;AAClC,aAAS,MAAS;AAClB,aAAS,EAAE;AACX,cAAU,kBAAa;AACvB,aAAS,KAAK;AACd,aAAS,UAAU;AAEnB,UAAM,WAAW,CAAC,WAAwC;AACxD,YAAM,SAAS,oBAAoB,QAAQ,MAAM,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;AACvE,UAAI,CAAC,OAAQ,QAAO;AACpB,eAAS,KAAK,MAAM;AACpB,eAAS,EAAE;AACX,gBAAU,gBAAW;AACrB,aAAO;AAAA,IACT;AACA,mBAAe,QAAQ;AACrB,YAAM,QAAQ,MAAM,QAAQ,UAAU;AACtC,UAAI,WAAW,UAAU;AACvB,cAAM,OAAO,UACR,CAAC,UAAU,WAAW,OAAO,IAAI,UAAU,MAC3C,iBAAiB,MAAM,QAAQ,gBAC5B,OAAO,YAAY;AAEjB,gBAAM,WAAW,MAAM,qBAAqB,QAAQ,aAAa;AACjE,iBAAO,gBAAgB,SAAS,OAAO;AAAA,YACrC,kBAAkB,iBAAiB,QAAQ;AAAA,UAC7C,CAAC;AAAA,QACH,GAAG,IACH,OACE,MAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAC9C,MAAM,KAAK,UAAU,EAAE,SAAS,aAAa,CAAC;AAAA,QAChD,CAAC,GACD,YAAY,KAClB,OAAO,MAAM,QAAQ,QAAQ,YAAY,UAAU,CAAC,GAAG,YAAY;AACvE,YAAI,CAAC,WAAW;AACd,mBAAS;AAAA,YACP,UAAU,IAAI,WAAW,IAAI;AAAA,YAC7B;AAAA,YACA,SAAS,CAAC,aAAa,CAAC;AAAA,YACxB,SAAS,CAAC;AAAA,YACV,QAAQ,QAAQ,UAAU;AAAA,YAC1B,UAAU;AAAA,UACZ,CAAC;AACD,oBAAU,WAAW,iCAA8B,cAAc;AAAA,QACnE;AACA;AAAA,MACF;AACA,YAAM,UAAU,MAAM,QAAQ,KAAK,UAAU;AAC7C,YAAM,KAAK,IAAI,IAAI,QAAQ,gBAAgB,QAAQ,WAAW,SAAS,MAAM;AAC7E,SAAG,WAAW,GAAG,aAAa,WAAW,SAAS;AAClD,UAAI,UAAU;AACd,aAAO,MAAM,8BAA8B;AAAA,QACzC,KAAK,GAAG,SAAS;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB,UAAU,QAAQ;AAAA,QAClB,gBAAgB;AAAA,QAChB,OAAO,YAAY;AACjB,gBAAM,OAAO,UAAU,UAAU,MAAM,QAAQ,KAAK,UAAU;AAC9D,oBAAU;AACV,cAAI,CAAC;AACH,qBAAS,CAAC,aAAc,WAAW,EAAE,GAAG,UAAU,SAAS,KAAK,SAAS,IAAI,QAAS;AACxF,iBAAO,KAAK,UAAU;AAAA,YACpB,YAAY,KAAK;AAAA,YACjB,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AACD,UAAI,WAAW;AACb,aAAK,QAAQ;AACb;AAAA,MACF;AACA,YAAM,UAAU;AAChB,eAAS;AAAA,QACP,QAAQ,QAAQ,gBAAgB,CAAC,GAAG,SAAS,WAAW;AACtD,gBAAM,eAAe,MAAM;AAC3B,qBAAW,YAAY;AACvB,cAAI,MAAM,SAAS;AACjB,gBAAI,SAAS,MAAM,EAAG;AACtB;AAAA,cACE,UACE;AAAA,YACJ;AACA,sBAAU,mBAAmB;AAAA,UAC/B,WAAW,aAAc,WAAU,qCAAkC;AAAA,mBAC5D,MAAM,SAAS;AACtB,qBAAS,EAAE;AACX,sBAAU,SAAS,UAAU,yBAAoB,WAAW;AAAA,UAC9D;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,YAAY,CAAC,EAAE,QAAQ,MAA2B;AACtD,YAAI;AACF,gBAAM,UAAU,KAAK,MAAM,OAAO;AAOlC,cAAI,QAAQ,SAAS,aAAa;AAChC,gBACE,CAAC,aACD,QAAQ,UACR,QAAQ,WACR,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,OAAO,GAChD;AACA,uBAAS,UAAU;AACnB,uBAAS,KAAK;AACd,wBAAU,mBAAmB;AAAA,YAC/B;AAAA,UACF;AACA,cAAI,QAAQ,SAAS,UAAW,WAAU,sBAAiB;AAC3D,cAAI,QAAQ,SAAS,aAAc,WAAU,QAAQ,WAAW,iBAAiB;AAAA,QACnF,QAAQ;AAAA,QAER;AAAA,MACF;AACA,cAAQ,SAAS,GAAG,aAAa,SAAS;AAC1C,eAAS,KAAK,MAAM,QAAQ,SAAS,IAAI,aAAa,SAAS,CAAC;AAChE,UAAI,QAAQ;AACV,iBAAS;AAAA,UACP,QAAQ,sBAAsB,MAAM;AAClC,iBAAK,QAAQ,SACV,UAAU,EACV,MAAM,MAAM,UAAU,2CAA2C,CAAC;AAAA,UACvE,CAAC;AAAA,QACH;AACF,YAAM,UAAU;AAAA,QACd,MAAM;AACJ,eAAK,QAAQ,SACV,UAAU,EACV,MAAM,MAAM,UAAU,2CAA2C,CAAC;AAAA,QACvE;AAAA,QACA,IAAI,KAAK;AAAA,MACX;AACA,eAAS,KAAK,MAAM,cAAc,OAAO,CAAC;AAC1C,eAAS;AAAA,QACP,UAAU,QAAQ;AAAA,QAClB;AAAA,QACA,SAAS,CAAC,aAAa,GAAG,oBAAoB,EAAE,SAAS,QAAQ,QAAQ,CAAC,CAAC;AAAA,QAC3E,MAAM;AAAA,QACN,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ,SAAS;AAAA,QACzB,UAAU,QAAQ;AAAA,MACpB,CAAC;AACD,gBAAU,QAAQ,WAAW,sBAAsB,qBAAkB;AAAA,IACvE;AACA,SAAK,MAAM,EAAE,MAAM,CAAC,MAAM;AACxB,YAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACzD,UAAI,CAAC,aAAa,CAAC,SAAS,OAAO,EAAG,UAAS,OAAO;AAAA,IACxD,CAAC;AACD,WAAO,MAAM;AACX,kBAAY;AACZ,eAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC3B,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU;AACrB,YAAM,QAAQ;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,UAAU,KAAK,CAAC;AACzC,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,UAAM,OAAO,OAAO;AACpB,aAAS,UAAU,MAAO,OAAO,YAAY,IAAI,IAAI;AACrD,WAAO,MAAM;AACX,eAAS,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,UAAU,OAAO,IAAI,CAAC;AAC1B,YAAU,MAAM;AACd,YAAQ,gBAAgB,KAAK;AAC7B,UAAM,eAAe,CAAC,MAAyB;AAC7C,UAAI,SAAS,QAAS,GAAE,eAAe;AAAA,IACzC;AACA,WAAO,iBAAiB,gBAAgB,YAAY;AACpD,WAAO,MAAM;AACX,aAAO,oBAAoB,gBAAgB,YAAY;AACvD,cAAQ,gBAAgB,KAAK;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AACV,iBAAe,iBAAiB;AAC9B,kBAAc,IAAI,OAAO;AACzB,UAAM,OAAO,MAAM,IAAI,SAAS,KAAK;AACrC,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,IAAI;AAAA,MACd,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,GAAG;AAAA,QACpC,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,UAAM,IAAI,SAAS,cAAc,GAAG;AACpC,MAAE,OAAO;AACT,MAAE,WAAW,MAAM,QAAQ,YAAY,EAAE,IAAI;AAC7C,MAAE,MAAM;AACR,eAAW,MAAM,IAAI,gBAAgB,GAAG,GAAG,GAAI;AAAA,EACjD;AACA,kBAAgB,MAAM;AACpB,UAAM,SAAS,IAAI;AACnB,WAAO,MAAM;AACX,UAAI,WAAW,UAAU,SAAS;AAChC,aAAK,OACF,KAAK,EACL,KAAK,CAAC,UAAU;AACf,cAAI,MAAO,QAAO,IAAI,YAAY,KAAK;AAAA,QACzC,CAAC,EACA,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,KAAK,CAAC;AAC/B,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAClD,QAAM,CAAC,YAAY,aAAa,IAAI,SAI1B,IAAI;AACd,YAAU,MAAM;AACd,oBAAgB,CAAC;AACjB,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAC,UAAU,CAAC;AACf,iBAAe,YAAY,WAAW,OAAO;AAC3C,QAAI,CAAC,SAAS,UAAU,WAAW,OAAQ,QAAO;AAClD,QAAI,YAAY,CAAC,MAAM,QAAS,QAAO;AACvC,QAAI,QAAS,QAAO;AACpB,cAAU,UAAU;AACpB,cAAU,IAAI;AACd,QAAI;AACF,UAAI,CAAC,cAAc,QAAS,OAAM,IAAI,MAAM,sCAAsC;AAClF,oBAAc,QAAQ;AACtB,oBAAc,IAAI,OAAO;AACzB,YAAM,aAAa,SAAS;AAC5B,YAAM,SAAS,UACX,OAAO,YAAY;AACjB,cAAM,QAAQ,MAAM,IAAI,SAAS,KAAK;AACtC,YAAI,CAAC,MAAO,OAAM,IAAI,MAAM,0BAA0B;AACtD,gBACE,MAAM,QAAQ,QAAQ,UAAU,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAAC,IAAI;AAAA,UAChE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBACE;AAAA,UACJ;AAAA,UACA,MAAM;AAAA,QACR,CAAC,GACD,KAAK;AAAA,MACT,GAAG,IACH,MAAM,QAAQ,KAAK,YAAY,MAAM,OAAO,YAAY,MAAM,IAAI,IAAI,QAAW,QAAQ;AAC7F,UAAI,SAAS,YAAY,YAAY;AACnC,iBAAS,UAAU;AACnB,iBAAS,KAAK;AACd,eAAO,OAAO,UAAU;AAAA,MAC1B;AACA,YAAM,eACJ,aAAa,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAC/E,UAAI,CAAC,WAAW,CAAC,aAAc,OAAM,IAAI,MAAM,sCAAsC;AACrF,YAAM,QAAQ,iBAAiB,OAAO,iBAAiB,YAAY;AACnE,gBAAU,OAAO,eAAe;AAChC,UAAI,SAAS,YAAY,YAAY;AACnC,gBAAQ,SAAS,wDAAwD,OAAO;AAChF,eAAO;AAAA,MACT;AACA,oBAAc,EAAE,SAAS,cAAc,UAAU,YAAY,CAAC,SAAS,UAAU,WAAW,CAAC;AAC7F,UAAI,CAAC,SAAU,SAAQ,SAAS,UAAU,oBAAoB,sBAAsB,SAAS;AAC7F,aAAO,gBAAgB;AAAA,IACzB,SAAS,GAAG;AACV,cAAQ,SAAS,aAAa,QAAQ,EAAE,UAAU,iCAAiC,OAAO;AAC1F,gBAAU,yCAAsC;AAChD,aAAO;AAAA,IACT,UAAE;AACA,gBAAU,UAAU;AACpB,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AACA,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,YAAQ,UAAU,MAAM,YAAY;AACpC,WAAO,MAAM;AACX,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,CAAC;AACD,QAAM,oBAAoB,OAAO,WAAW;AAC5C,oBAAkB,UAAU;AAC5B,YAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,WAAW,YAAY,WAAW,OAAQ;AAC/D,UAAM,QAAQ,WAAW,MAAM;AAC7B,WAAK,kBAAkB,QAAQ,IAAI;AAAA,IACrC,GAAG,IAAI;AACP,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,cAAc,YAAY,SAAS,UAAU,SAAS,MAAM,CAAC;AACjE,YAAU,MAAM;AACd,QAAI,WAAW,SAAU;AACzB,WAAO,QAAQ,oBAAoB,YAAY,YAAY;AACzD,UAAI,CAAC,OAAO,QAAS;AACrB,UAAI,CAAE,MAAM,YAAY;AACtB,cAAM,IAAI,MAAM,wDAAwD;AAAA,IAC5E,CAAC;AAAA,EACH,CAAC;AACD,WAAS,YAAY,QAAgB;AACnC,QAAI,UAAU;AACd,QAAI,UAAU,SAAS;AACrB,mBAAa,UAAU,IAAI,gBAAgB,MAAM;AACjD,mBAAa;AAAA,IACf;AACA,eAAW,UAAU;AACrB,WAAO,UAAU;AACjB,UAAM,WAAW,SAAS,SAAS,cAA2B,uBAAuB;AACrF,QAAI,CAAC,SAAU;AACf,QAAI,UAA0B;AAC9B,UAAM,MAAM,MAAM;AAEhB,YAAM,OAAO,SAAS,cAAc,yBAAyB;AAC7D,UAAI,QAAQ,SAAS,QAAS,QAAO,QAAS,UAAU,IAAK;AAC7D,YAAM,UAAU,OAAO,QAAQ;AAE/B,UACE,QAAQ,WACR,OAAO,YAAY,UACnB,KAAK,IAAI,UAAU,OAAO,OAAO,IAAI;AAErC,gBAAQ,UAAU;AACpB,kBAAY,QAAQ,OAAO;AAC3B,qBAAe,KAAK,MAAM,UAAU,GAAG,CAAC;AACxC,UAAI,CAAC,QAAQ,QAAS;AACtB,YAAM,YAAY,OAAO,gBAAgB,EAAE,CAAC,GAAG,IAAI;AACnD,UAAI,CAAC,UAAW;AAChB,YAAM,QAAQ,iBAAiB,QAAQ;AACvC,YAAM,YACJ,SAAS,cAAc,WAAW,MAAM,WAAW,IAAI,WAAW,MAAM,YAAY;AAGtF,YAAM,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,UAAU,IAAI,GAAG,YAAY,SAAS,CAAC;AAC3E,UAAI,KAAK,IAAI,UAAU,IAAI,IAAI,KAAO,QAAO,QAAQ,IAAI;AACzD,aAAO,UAAU,OAAO,QAAQ;AAChC,qBAAe,KAAK,MAAM,OAAO,UAAU,GAAG,CAAC;AAAA,IACjD;AACA,UAAM,UAAU;AAChB,UAAM,SAAS,IAAI,eAAe,GAAG;AACrC,UAAM,SAAS,IAAI,iBAAiB,GAAG;AACvC,WAAO,QAAQ,QAAQ;AACvB,WAAO,QAAQ,UAAU;AAAA,MACvB,YAAY;AAAA,MACZ,iBAAiB,CAAC,SAAS,oBAAoB,oBAAoB;AAAA,IACrE,CAAC;AAED,UAAM,QAAQ,SAAS,cAAc,qBAAqB;AAC1D,QAAI,MAAO,QAAO,QAAQ,OAAO,EAAE,WAAW,KAAK,CAAC;AACpD,QAAI,CAAC,QAAQ,QAAS,QAAO,QAAQ,cAAc,GAAG;AACtD,QAAI;AACJ,eAAW,UAAU,MAAM;AACzB,aAAO,WAAW;AAClB,aAAO,WAAW;AAClB,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AACA,WAAS,SAAS,OAAe;AAC/B,UAAM,SAAS,IAAI;AACnB,QAAI,CAAC,OAAQ;AACb,QAAI,UAAU,OAAO;AACnB,cAAQ,UAAU;AAClB,aAAO,UAAU;AACjB,YAAM,UAAU;AAChB;AAAA,IACF;AACA,YAAQ,UAAU;AAClB,gBAAY,KAAK;AACjB,mBAAe,OAAO,KAAK,CAAC;AAC5B,WAAO,QAAQ,OAAO,KAAK,IAAI,GAAG;AAAA,EACpC;AACA,WAAS,UAAU;AACjB,QAAI,SAAU;AACd,aAAS,WAAW;AACpB,oBAAgB,SAAS,OAAO;AAChC,aAAS,UAAU;AACnB,aAAS,IAAI;AACb;AAAA,MACE,UAAU,iBAAiB,UAAU,wCAAqC;AAAA,IAC5E;AACA,QAAI,SAAS;AACX,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU,WAAW,MAAM;AACpC,aAAK,IAAI,SAAS,KAAK,EAAE,KAAK,CAAC,UAAU;AACvC,cAAI,MAAO,QAAO,IAAI,YAAY,KAAK;AAAA,QACzC,CAAC;AAAA,MACH,GAAG,GAAG;AAAA,IACR;AAAA,EACF;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,UAAU,2CAA2C;AAAA,MAChE,eAAY;AAAA,MACZ,aAAW,CAAC,CAAC,QAAQ;AAAA,MACrB,yBACE,SAAU,OAAO,OAAO,eAAe,OAAO,QAAQ,YAAY,cAAe;AAAA,MAGlF;AAAA,mBACC,oBAAC,SAAI,WAAU,sBAAqB,2HAGpC;AAAA,QAED,SACC,qBAAC,SAAI,WAAU,sBAAqB,cAAW,QAAO,MAAK,SACxD;AAAA;AAAA,UAAO;AAAA,UACR;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,CAAC,UAAU;AAAA,cACrB,OAAO,QAAQ,2DAA2D;AAAA,cAC1E,SAAS,MACP,UAAU,SAAS,EAAE,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,cAGjF;AAAA,oCAAC,aAAU,MAAM,IAAI;AAAA,gBAAE;AAAA;AAAA;AAAA,UAEzB;AAAA,WACF;AAAA,QAED,CAAC,SAAS,CAAC,SACV,oBAAC,SAAI,WAAU,qBAAoB,MAAK,UAAS,yCAEjD;AAAA,QAED,SACC,oBAAC,SAAI,WAAU,gCACb,8BAAC,kBACC;AAAA,UAAC,WAAW;AAAA,UAAX;AAAA,YACC,UAAU,MAAM;AAAA,YAChB,SAAS,MAAM;AAAA,YACf,OAAO,MAAM;AAAA,YACb,MACE,UAAW,WAAW,MAAM,WAAW,CAAC,YAAc,WAAW,MAAM,UACnE,SACA,CAAC,MAAM,WAAW,WAChB,SACA;AAAA,YAER,mBAAkB;AAAA,YAClB,UAAU;AAAA,YACV,QAAQ,MAAM;AAAA,YACd,SAAS;AAAA,YACT,UAAU,CAAC,WAAW;AACpB,kBAAI,OAAO,WAAW,OAAQ,SAAQ;AAAA,YACxC;AAAA,YACA,aAAa,CAAC,MAAM,SAAS,EAAE,OAAO;AAAA,YAEtC,8BAAC,kBAAkB,UAAlB,EAA2B,OAAO,MAAM,QACvC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM,QAAQ;AAAA,gBACd,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,gBACxC,QAAQ,QAAQ;AAAA,gBAEhB;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS,CAAC;AAAA,oBACV,MAAM,QAAQ;AAAA,oBACd,YAAY,WAAW,WAAW,SAAY;AAAA,oBAC9C,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,oBACxC,QAAQ,QAAQ;AAAA,oBAEhB;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,wBACxC,YAAY,QAAQ;AAAA,wBACpB;AAAA,wBACA,QAAQ,QAAQ;AAAA,wBAEhB;AAAA,0BAAC;AAAA;AAAA,4BACC,SAAS,QAAQ;AAAA,4BACjB,aAAa,QAAQ;AAAA,4BACrB,UAAU,CAAC,UAAU,CAAC,YAAY,MAAM;AAAA,4BACxC,QAAQ,QAAQ;AAAA,4BAEhB;AAAA;AAAA,gCAAC,WAAW;AAAA,gCAAX;AAAA,kCACC,YAAY,EAAE,MAAM,aAAa,OAAO,OAAO;AAAA,kCAC/C,WAAW,EAAE,MAAM,iBAAiB,OAAO,MAAM;AAAA,kCACjD,WAAW,EAAE,MAAM,uBAAuB,OAAO,QAAQ;AAAA,kCACzD,SAAS,EAAE,MAAM,mBAAmB,OAAO,QAAQ;AAAA,kCACnD,YAAU;AAAA;AAAA,8BACZ;AAAA,8BACC,WAAW,CAAC,UAAU,oBAAC,kBAAe;AAAA,8BACtC,CAAC,WAAW,CAAC,UACZ;AAAA,gCAAC;AAAA;AAAA,kCACC,QAAQ,MAAM,KAAK,YAAY;AAAA,kCAC/B,iBACE,QAAQ,mBAAmB;AAAA,oCACzB,QAAQ,QAAQ;AAAA,oCAChB,GAAG,QAAQ;AAAA,kCACb;AAAA,kCAEF;AAAA;AAAA,oCAEE;AAAA,sCAAC;AAAA;AAAA,wCACC,OACE,YAAY,CAAC,MAAM,UACf,cACA,MAAM,OACJ,eACA,UACE,UACA;AAAA;AAAA,oCAEZ;AAAA;AAAA;AAAA,8BAEJ;AAAA,8BAED,CAAC,UAAU,oBAAC,iBAAc,OAAO,UAAU;AAAA,8BAC3C,CAAC,UAAU,oBAAC,gBAAa,OAAO,UAAU;AAAA,8BAC3C;AAAA,gCAAC;AAAA;AAAA,kCACC,WAAU;AAAA,kCACV,KAAK;AAAA,kCACL,oBAAoB,CAAC,UAAU;AAC7B,wCAAI,MAAM,WAAW,KAAK,IAAI,SAAS,sBAAsB;AAC3D,4CAAM,eAAe;AAAA,kCACzB;AAAA,kCAEA;AAAA,yDAAC,WAAW,UAAX,EAAoB,WAAU,wBAC7B;AAAA,0DAAC,WAAW,SAAX,EAAmB;AAAA,sCACpB;AAAA,wCAAC;AAAA;AAAA,0CACC;AAAA,0CACA,UAAU,QAAQ;AAAA,0CAClB,QAAQ,QAAQ;AAAA,0CAChB,gBAAgB,QAAQ;AAAA,0CACxB,cACE,QAAQ,eACJ,CAAC,YAAY,QAAQ,aAAc,YAAY,OAAO,IACtD;AAAA,0CAGN;AAAA;AAAA,8CAAC;AAAA;AAAA,gDACC,SAAS,MAAM,MAAM;AAAA,gDACrB,UAAU;AAAA;AAAA,4CACZ;AAAA,4CACA,oBAAC,cAAc,UAAd,EAAuB,OAAO,MAAM,MAAM,QAAQ,MACjD,8BAAC,oBACE,gBACC,qBAAC,iBAAiB,MAAjB,EACC;AAAA,kEAAC,uBAAoB;AAAA,8CACrB,oBAAC,aAAU;AAAA,+CACb,GAEJ,GACF;AAAA;AAAA;AAAA,sCACF;AAAA,sCACC,CAAC,WAAW,oBAAC,WAAW,oBAAX,EAA8B;AAAA,sCAC3C,CAAC,WAAW,oBAAC,WAAW,aAAX,EAAuB;AAAA,sCACrC,oBAAC,WAAW,UAAX,EAAoB;AAAA,sCACrB,oBAAC,WAAW,WAAX,EAAqB;AAAA,sCACtB,qBAAC,WAAW,aAAX,EACC;AAAA,4DAAC,yBAAsB;AAAA,wCACvB,oBAAC,2BAAwB;AAAA,wCACzB,oBAAC,6BAA0B;AAAA,yCAC7B;AAAA,uCACF;AAAA,oCACC,CAAC,WAAW,oBAAC,WAAW,YAAX,EAAsB;AAAA;AAAA;AAAA,8BACtC;AAAA;AAAA;AAAA,wBACF;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA;AAAA,YACF,GACF;AAAA;AAAA,QACF,KAtImB,KAuIrB,GACF;AAAA,QAEF,qBAAC,SAAI,WAAU,uBACb;AAAA,+BAAC,UAAK,WAAU,sBAAqB,MAAK,UACvC;AAAA,sBAAU,oBAAC,WAAQ,MAAM,IAAI,IAAK,CAAC,SAAS,QAAQ,oBAAC,SAAM,MAAM,IAAI,IAAK;AAAA,YAC1E,YAAY,YAAY,WAAW,aAAa,eAC7C,IAAI,WAAW,OAAO,oBACtB;AAAA,aACN;AAAA,UACA,oBAAC,oBAAiB,SAAS,OAAO,MAAM,SAAS;AAAA,UAChD,CAAC,WACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,cAAW;AAAA,cACX,eAAY;AAAA,cACZ,UAAU,CAAC;AAAA,cACX,OAAO,WAAW,QAAQ,OAAO,WAAW;AAAA,cAC5C,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,cAEhD;AAAA,oCAAC,YAAO,OAAM,OAAM,uBAAS;AAAA,gBAC5B,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,aAAa,GAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,CAAC,EAC/D,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,EACpB,IAAI,CAAC,UACJ,qBAAC,YAAmB,OAAO,OAAO,KAAK,GACpC;AAAA;AAAA,kBAAM;AAAA,qBADI,KAEb,CACD;AAAA;AAAA;AAAA,UACL;AAAA,UAED,CAAC,WACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,KAAK,eAAe;AAAA,cACnC,UAAU,CAAC;AAAA,cACX,cAAW;AAAA,cAEX;AAAA,oCAAC,YAAS,MAAM,IAAI;AAAA,gBAAE;AAAA;AAAA;AAAA,UAExB;AAAA,UAED,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,OAAO,WAC1C;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,MAAM,KAAK,YAAY;AAAA,cAChC,UAAU,CAAC,SAAS,UAAU;AAAA,cAC9B,eAAY;AAAA,cAEZ;AAAA,oCAAC,QAAK,MAAM,IAAI;AAAA,gBACf,SAAS,iBAAY,UAAU,cAAc;AAAA;AAAA;AAAA,UAChD;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;",
|
|
4
|
+
"sourcesContent": ["import { useVersionAutosave, useVersionSaveQueue } from './useVersionAutosave'\nimport { 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 {\n DocxEditor,\n useChromeTranslate,\n useDocxEditor,\n type FontConfiguration,\n} from '@docx-editor.dev/react'\nimport { collaborationModule, DOCUMENT_COLLABORATION_VERSIONS } from '@arbidocs/coedit'\nimport { awaitMatchingEditor } from './coedit-update'\nimport type { DocxCollaborationSession } from '@arbidocs/coedit'\nimport {\n createHocuspocusCollaboration,\n type HocuspocusCollaborationRoom,\n} from '@arbidocs/coedit/hocuspocus'\nimport { DocxEditorReview, reviewModule } from './review'\nimport { AgentUndo, AgentUndoRoom } from './AgentUndo'\nimport type { EditorModule } from '@docx-editor.dev/core'\nimport type { Editor } from '@docx-editor.dev/core'\nimport {\n Download,\n Save,\n RefreshCw,\n WifiOff,\n Check,\n Type,\n Pilcrow,\n UsersRound,\n BookA,\n} from 'lucide-react'\nimport { DefinedTermsProvider, useDefinedTerms } from './definitions/DefinedTerms'\nimport { RibbonMenu } from './RibbonMenu'\nimport { DocxCommandMenu } from './DocxCommandMenu'\nimport { RibbonItem, RibbonOverflow } from './RibbonOverflow'\nimport { StyleGallery } from './StyleGallery'\nimport { NoteButtons, WordShortcuts } from './WordReferences'\nimport type { DefinitionSource } from '../tags/definitions'\nimport { CrossReferencesProvider, type DocxReferencesAdapter } from './references/CrossReferences'\nimport {\n CrossReferenceButton,\n DocxContextMenuExtras,\n UpdateCrossReferencesButton,\n} from './references/EditorMenus'\nimport { runBeforeSave } from './beforeSave'\nimport { LayoutTabContent, LAYOUT_TAB, useContextualTabs } from './layout/LayoutTabs'\nimport {\n GenerateImageButton,\n useGenerateImageTarget,\n type DocxImageGeneration,\n} from './layout/GenerateImage'\nimport { TableTabKeys } from './layout/TableKeys'\nimport { newFromTemplate } from '@arbidocs/coedit/template'\nimport {\n HouseTemplateProvider,\n resolveHouseTemplate,\n templateFileName,\n type HouseTemplateHost,\n} from './template/HouseTemplate'\nimport { QuickParts } from './template/QuickParts'\nimport {\n MySignatureContextItems,\n SignatureFieldContextItem,\n MySignatureMenu,\n SignatureFieldMenu,\n SignatureFieldsProvider,\n type DocxSavedSignature,\n type DocxSigner,\n} from './signatures/SignatureFields'\nimport { HouseTemplatePanel } from './template/HouseTemplatePanel'\nimport { DocxAuthorContext } from './structural/useTrackedOrNoted'\n\nimport { contentPath } from './content-path'\n\nexport { contentPath }\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 the live room as the document's next version (same document id). */\n save: (\n documentId: string,\n state?: string,\n autosave?: boolean\n ) => Promise<{ document_ext_id: string; version?: number; unchanged?: boolean }>\n loadFonts: () => Promise<FontConfiguration>\n baseUrl?: string\n author?: string\n subscribeTokenChanges?: (listener: () => void) => () => void\n registerTurnFlush?: (documentId: string, flush: () => Promise<void>) => () => void\n onDirtyChange?: (dirty: boolean) => void\n onVersionSaved?: (documentId: string, version?: number) => 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 * The workspace's definitions: facts labelled \"Definitions\". Present: the Insert tab offers\n * Defined term, and typing `@@` in the body opens the term type-ahead.\n */\n definitions?: () => Promise<DefinitionSource[]>\n /**\n * References to the workspace's other documents. Present: Insert cross-reference also offers a\n * passage of another document, inserted as a link that opens it there.\n */\n references?: DocxReferencesAdapter\n /** The platform's image generation. Present: the Insert tab offers Generate image. */\n imageGeneration?: DocxImageGeneration\n /**\n * The workspace's house template. Present: a blank note starts from it (its styles, numbering,\n * page setup, headers and footers), Insert offers its Quick Parts, and the Design tab and the\n * style box show where the document's styles differ from it.\n */\n houseTemplate?: HouseTemplateHost\n /** Workspace members who may sign. Present: Insert offers Signature field (or anyone by email). */\n signatureSigners?: readonly DocxSigner[]\n /** One's saved signature. Present: Insert offers My signature (an informal one, as a picture). */\n savedSignature?: DocxSavedSignature\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 /**\n * Read-only preview of generated Markdown. The server stores the DOCX itself; when the\n * stream ends the caller swaps this preview for the stored document.\n */\n stream?: {\n content: string\n busy: boolean\n error?: string | null\n }\n /**\n * Embedded as a body field (an email draft): a small formatting toolbar instead of the ribbon, no\n * page furniture or save bar (the host saves), and the person types directly; others' edits (ARBI's)\n * still arrive as tracked changes to accept or reject.\n */\n compact?: boolean\n /** Receives a reader of the live room's state, so the host's save can include the latest keystrokes. */\n stateRef?: React.MutableRefObject<(() => string | undefined) | null>\n /** Save the current live room before leaving the editor; false means the caller must stay. */\n saveRef?: React.MutableRefObject<(() => Promise<boolean | number>) | null>\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}\n/**\n * The room writes below the editor's input buffer, so it gets the editor's pending-input flush: it\n * lands queued typing before a peer's change and lays that change out at once, which is when the\n * editor carries its caret (otherwise a fast keystroke lands where the caret was before the change).\n */\nfunction RoomInputBinding({\n session,\n flushRef,\n}: {\n session?: DocxCollaborationSession\n flushRef: React.MutableRefObject<(() => void) | null>\n}) {\n const editor = useDocxEditor()\n useEffect(() => {\n if (!editor) return\n const flush = () => editor.surface?.flushPendingInput()\n flushRef.current = flush\n const unbind = session?.bindEditorInput(flush)\n return () => {\n if (flushRef.current === flush) flushRef.current = null\n unbind?.()\n }\n }, [editor, session, flushRef])\n return null\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}\n\n/** Insert tab: a defined term at the caret (when definitions are offered). */\nfunction DefinedTermButtons() {\n const terms = useDefinedTerms()\n if (!terms) return null\n return (\n <button\n type=\"button\"\n className=\"native-docx-ribbon-trigger\"\n aria-label={terms.labels.insert}\n title={`${terms.labels.insert} (type @@)`}\n data-testid=\"docx-insert-defined-term\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => terms.openPicker(event.currentTarget)}\n >\n <BookA size={16} />\n </button>\n )\n}\n\nconst DOCUMENT_STATES = {\n 'co-editing': {\n label: 'Co-editing',\n title: 'Edits sync live with everyone who has this document open',\n },\n 'read-only': {\n label: 'Read-only',\n title: 'This copy cannot be edited: an earlier version, or the last saved copy',\n },\n draft: { label: 'Private draft', title: 'Only you can see this until you save it' },\n} as const\n\n/** Which document is on screen: shared live, read-only, or a draft only its author sees. */\nfunction DocumentStateBadge({ state }: { state?: keyof typeof DOCUMENT_STATES }) {\n if (!state) return null\n const { label, title } = DOCUMENT_STATES[state]\n return (\n <span data-state={state} title={title}>\n {label}\n </span>\n )\n}\n\nexport function DocxRibbon({\n onSave,\n badge,\n imageGeneration,\n}: {\n onSave: () => void\n /** Insert \u203A Generate image, when the host can generate images. */\n imageGeneration?: DocxImageGeneration\n /** A short state label at the end of the row, such as \"Co-editing\". */\n badge?: React.ReactNode\n}) {\n const [selected, setTab] = useState('Home')\n const contextual = useContextualTabs(selected)\n useGenerateImageTarget()\n const tab = contextual.shown\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>Design</option>\n <option>{LAYOUT_TAB}</option>\n <option>References</option>\n <option>Review</option>\n {contextual.tabs.map((name) => (\n <option key={name}>{name}</option>\n ))}\n </select>\n <DocxEditor.Toolbar t={t} preset={false} onSave={onSave}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Save />\n {/* Undo, Redo and Save stay put, like Word's Quick Access Toolbar; the tab's own\n controls collapse into its More menu when the ribbon is too narrow for them. */}\n <RibbonOverflow tab={tab}>\n {tab === 'Home' && (\n <>\n <RibbonItem id=\"home-style\" label=\"Styles\" priority={80}>\n <StyleGallery />\n </RibbonItem>\n <RibbonItem id=\"home-bold\" label=\"Bold\" priority={100}>\n <DocxEditor.Toolbar.Bold />\n </RibbonItem>\n <RibbonItem id=\"home-italic\" label=\"Italic\" priority={95}>\n <DocxEditor.Toolbar.Italic />\n </RibbonItem>\n <RibbonItem id=\"home-underline\" label=\"Underline\" priority={90}>\n <DocxEditor.Toolbar.Underline />\n </RibbonItem>\n <RibbonItem id=\"home-font\" label=\"Font\" priority={60}>\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 </RibbonItem>\n <RibbonItem id=\"home-more-formatting\" label=\"More formatting\" priority={50}>\n <RibbonMenu label=\"More formatting\" icon={<Pilcrow size={16} />}>\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 </RibbonItem>\n </>\n )}\n {tab === 'Insert' && (\n <>\n <RibbonItem id=\"insert-table\" label=\"Table\">\n <DocxEditor.Toolbar.TableInsert />\n </RibbonItem>\n <RibbonItem id=\"insert-picture\" label=\"Picture\">\n <DocxEditor.Toolbar.ImageInsert />\n </RibbonItem>\n {imageGeneration && (\n <RibbonItem id=\"insert-generate-image\" label=\"Generate image\">\n <GenerateImageButton generation={imageGeneration} />\n </RibbonItem>\n )}\n <RibbonItem id=\"insert-page-break\" label=\"Page break\">\n <DocxEditor.Toolbar.Button slotId=\"insert.pageBreak\" />\n </RibbonItem>\n <RibbonItem id=\"insert-link\" label=\"Link\">\n <DocxEditor.Toolbar.Link />\n </RibbonItem>\n <RibbonItem id=\"insert-defined-term\" label=\"Defined term\">\n <DefinedTermButtons />\n </RibbonItem>\n <RibbonItem id=\"insert-quick-parts\" label=\"Quick Parts\">\n <QuickParts />\n </RibbonItem>\n <RibbonItem id=\"insert-signature-field\" label=\"Signature field\">\n <SignatureFieldMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-my-signature\" label=\"My signature\">\n <MySignatureMenu />\n </RibbonItem>\n <RibbonItem id=\"insert-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n </>\n )}\n <LayoutTabContent tab={tab} />\n {tab === 'Design' && (\n <RibbonItem id=\"design-house-template\" label=\"House template\">\n <HouseTemplatePanel />\n </RibbonItem>\n )}\n {tab === 'References' && (\n <>\n <NoteButtons />\n <RibbonItem id=\"references-cross-reference\" label=\"Cross-reference\">\n <CrossReferenceButton />\n </RibbonItem>\n <RibbonItem id=\"references-update-cross-references\" label=\"Update cross-references\">\n <UpdateCrossReferencesButton />\n </RibbonItem>\n </>\n )}\n {tab === 'Review' && (\n <>\n <RibbonItem id=\"review-editing-mode\" label=\"Editing mode\" priority={10}>\n <DocxEditor.Toolbar.EditingMode />\n </RibbonItem>\n <RibbonItem id=\"review-comments\" label=\"Comments\">\n <DocxEditor.Toolbar.Comments />\n </RibbonItem>\n <RibbonItem id=\"review-options\" label=\"Review options\">\n <RibbonMenu label=\"Review options\" icon={<UsersRound size={16} />}>\n <DocxEditor.Toolbar.Reviewers />\n </RibbonMenu>\n </RibbonItem>\n </>\n )}\n </RibbonOverflow>\n {/* The toolbar provides its table chrome context only to a direct table-chrome child: this\n hidden one keeps it mounted for the Table tab's borders and shading. */}\n <DocxEditor.Toolbar.TableCellFill hidden />\n </DocxEditor.Toolbar>\n {badge && (\n <span className=\"native-docx-ribbon-badge\" data-testid=\"docx-ribbon-badge\">\n {badge}\n </span>\n )}\n </div>\n )\n}\n\n/** The compact editor's formatting: what an email needs. */\nfunction CompactToolbar() {\n const t = useChromeTranslate()\n return (\n <DocxEditor.Toolbar t={t} preset={false}>\n <DocxEditor.Toolbar.Undo />\n <DocxEditor.Toolbar.Redo />\n <DocxEditor.Toolbar.Bold />\n <DocxEditor.Toolbar.Italic />\n <DocxEditor.Toolbar.Underline />\n <DocxEditor.Toolbar.BulletList />\n <DocxEditor.Toolbar.NumberedList />\n <DocxEditor.Toolbar.Link />\n </DocxEditor.Toolbar>\n )\n}\n\nconst fixedZoomMode = { type: 'fixed' } as const\n/** The zoom menu's levels, in percent, beside Fit width. */\nconst ZOOM_LEVELS = [50, 75, 100, 125, 150, 200]\n\nexport function NativeDocxEditor({\n documentId,\n title,\n draftContent,\n initialCommentId,\n snapshot = false,\n onSaved,\n stream,\n adapter,\n compact = false,\n stateRef,\n saveRef,\n}: NativeDocxEditorProps) {\n const [ready, setReady] = useState<Ready>(),\n [error, setError] = useState(''),\n [retry, setRetry] = useState(0)\n const [status, setStatus] = useState('Connecting\u2026'),\n [dirty, setDirty] = useState(false),\n [saving, setSaving] = useState(false),\n [offline, setOffline] = useState(false)\n const revision = useRef(0)\n const savingRef = useRef(false)\n const flushInputRef = useRef<(() => void) | null>(null)\n const stageRef = useRef<HTMLDivElement>(null),\n fitCleanup = useRef<(() => void) | undefined>(undefined),\n refit = useRef<(() => void) | undefined>(undefined)\n // Fit width until the reader picks a zoom (the zoom menu, or Ctrl +/-/0), then keep theirs until\n // they pick Fit width again. `fitted` is the zoom the fit last applied: any other zoom is theirs.\n const fitting = useRef(true),\n fitted = useRef<number | undefined>(undefined)\n const [fitWidth, setFitWidth] = useState(true),\n [zoomPercent, setZoomPercent] = useState(100)\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 \u00B7 editing is locked'\n : current.error\n ? 'Generation stopped \u00B7 draft retained'\n : 'Opening the saved document\u2026'\n )\n if (!current.busy && !current.error) streamFinished.current = true\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\u2026')\n setDirty(false)\n dirtyRef.current = false\n // A refusal for another room format: \"Updating\u2026\" while the matching editor or server arrives.\n const updating = (reason: string | undefined): boolean => {\n const cancel = awaitMatchingEditor(reason, () => setRetry((x) => x + 1))\n if (!cancel) return false\n cleanups.push(cancel)\n setError('')\n setStatus('Updating\u2026')\n return true\n }\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 (draftContent === '' && adapter.houseTemplate\n ? await (async () => {\n // A blank note starts from the house template, as File \u203A New from it does.\n const template = await resolveHouseTemplate(adapter.houseTemplate)\n return newFromTemplate(template.bytes, {\n attachedTemplate: templateFileName(template),\n })\n })()\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(contentPath(documentId))).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 \u00B7 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 if (updating(detail)) return\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 \u00B7 edits buffered locally')\n else if (s === 'ready') {\n setError('')\n setStatus(dirtyRef.current ? 'Saving changes\u2026' : '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\u2026')\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 \u00B7 live')\n }\n void start().catch((e) => {\n const message = e instanceof Error ? e.message : String(e)\n if (!cancelled && !updating(message)) setError(message)\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 if (!stateRef) return\n const room = ready?.room\n stateRef.current = () => (room ? encodeState(room) : undefined)\n return () => {\n stateRef.current = null\n }\n }, [stateRef, ready?.room])\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 runBeforeSave(ref.current)\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 const [editRevision, setEditRevision] = useState(0)\n const [checkpoint, setCheckpoint] = useState<{\n version?: number\n autosave: boolean\n revision: number\n } | null>(null)\n useEffect(() => {\n setEditRevision(0)\n setCheckpoint(null)\n }, [documentId])\n const saveVersion = useVersionSaveQueue(persistVersion)\n async function persistVersion(autosave = false) {\n if (!ready || savingRef.current || stream) return false\n if (snapshot || !ready.canEdit) return true\n if (offline) return false\n savingRef.current = true\n setSaving(true)\n try {\n if (!flushInputRef.current) throw new Error('The editor is not ready to save yet.')\n flushInputRef.current()\n runBeforeSave(ref.current)\n const atRevision = revision.current\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, autosave)\n if (revision.current === atRevision) {\n dirtyRef.current = false\n setDirty(false)\n drafts.delete(documentId)\n }\n const savedVersion =\n 'version' in result && typeof result.version === 'number' ? result.version : undefined\n if (!isDraft && !savedVersion) throw new Error('Could not confirm the saved version.')\n await adapter.onVersionSaved?.(result.document_ext_id, savedVersion)\n onSaved?.(result.document_ext_id)\n if (revision.current !== atRevision) {\n if (!autosave)\n adapter.notify?.('The document changed while saving. Please try again.', 'error')\n return false\n }\n setCheckpoint({ version: savedVersion, autosave: autosave && !isDraft, revision: atRevision })\n if (!autosave) adapter.notify?.(isDraft ? 'Word note saved' : 'DOCX version saved', 'success')\n return savedVersion ?? true\n } catch (e) {\n if (!autosave)\n adapter.notify?.(e instanceof Error ? e.message : 'Could not save this document.', 'error')\n setStatus('Save failed \u00B7 your draft is retained')\n return false\n } finally {\n savingRef.current = false\n setSaving(false)\n }\n }\n useEffect(() => {\n if (!saveRef) return\n saveRef.current = () => saveVersion()\n return () => {\n saveRef.current = null\n }\n })\n useVersionAutosave({\n documentId,\n revision: editRevision,\n savedRevision: checkpoint?.revision ?? 0,\n enabled: !!ready?.canEdit && !compact && !snapshot && !offline && !stream && !saving,\n save: () => saveVersion(true),\n })\n useEffect(() => {\n if (compact || snapshot) return\n return adapter.registerTurnFlush?.(documentId, async () => {\n if (!ready?.canEdit) return\n if (!(await saveVersion()))\n throw new Error('The Word document could not be saved before this turn.')\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 fitted.current = undefined\n const viewport = stageRef.current?.querySelector<HTMLElement>('.native-docx-viewport')\n if (!viewport) return\n let surface: Element | null = null\n const fit = () => {\n // The page itself: laid out after the editor is ready, and resized by every zoom.\n const page = viewport.querySelector('.docx-paginated-surface')\n if (page && page !== surface) resize.observe((surface = page))\n const current = editor.getZoom()\n // A zoom the fit did not apply is the reader's: stop fitting until they pick Fit width again.\n if (\n fitting.current &&\n fitted.current !== undefined &&\n Math.abs(current - fitted.current) > 0.001\n )\n fitting.current = false\n setFitWidth(fitting.current)\n setZoomPercent(Math.round(current * 100))\n if (!fitting.current) return\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 // The page fills the viewer, its padding the only gutter. Compact (an email body) never\n // magnifies: its text stays the size the email is read at.\n const zoom = Math.max(0.1, Math.min(compact ? 1 : 5, available / pageWidth))\n if (Math.abs(current - zoom) > 0.001) editor.setZoom(zoom)\n fitted.current = editor.getZoom()\n setZoomPercent(Math.round(fitted.current * 100))\n }\n refit.current = fit\n const resize = new ResizeObserver(fit)\n const chrome = new MutationObserver(fit)\n resize.observe(viewport)\n chrome.observe(viewport, {\n attributes: true,\n attributeFilter: ['style', 'data-review-pane', 'data-review-margin'],\n })\n // Where the page mounts, to start watching it if it is laid out after the editor is ready.\n const mount = viewport.querySelector('.docx-content-mount')\n if (mount) chrome.observe(mount, { childList: true })\n if (!fitting.current) editor.setZoom(zoomPercent / 100)\n fit()\n fitCleanup.current = () => {\n resize.disconnect()\n chrome.disconnect()\n refit.current = undefined\n }\n }\n function pickZoom(value: string) {\n const editor = ref.current\n if (!editor) return\n if (value === 'fit') {\n fitting.current = true\n fitted.current = undefined\n refit.current?.()\n return\n }\n fitting.current = false\n setFitWidth(false)\n setZoomPercent(Number(value))\n editor.setZoom(Number(value) / 100)\n }\n function changed() {\n if (snapshot) return\n revision.current += 1\n setEditRevision(revision.current)\n dirtyRef.current = true\n setDirty(true)\n setStatus(\n isDraft ? 'Unsaved note' : offline ? 'Offline \u00B7 edits buffered locally' : 'Saving changes\u2026'\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={compact ? 'native-docx-viewer native-docx-compact' : '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' : 'generated') : '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\u2026\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={\n stream || (isDraft && ready.canEdit && !snapshot) || (compact && ready.canEdit)\n ? 'edit'\n : !ready.canEdit || snapshot\n ? 'view'\n : 'suggesting'\n }\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 <DocxAuthorContext.Provider value={ready.author}>\n <DefinedTermsProvider\n load={adapter.definitions}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <HouseTemplateProvider\n enabled={!stream}\n host={adapter.houseTemplate}\n documentId={isDraft || snapshot ? undefined : documentId}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\n >\n <CrossReferencesProvider\n editable={!stream && !snapshot && ready.canEdit}\n references={adapter.references}\n documentId={documentId}\n notify={adapter.notify}\n >\n <SignatureFieldsProvider\n signers={adapter.signatureSigners}\n mySignature={adapter.savedSignature}\n editable={!stream && !snapshot && ready.canEdit}\n notify={adapter.notify}\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 {compact && !stream && <CompactToolbar />}\n {!compact && !stream && (\n <DocxCommandMenu\n onSave={() => void saveVersion()}\n imageGeneration={\n adapter.imageGeneration && {\n notify: adapter.notify,\n ...adapter.imageGeneration,\n }\n }\n badge={\n // The document's state, in place of a title row above the ribbon.\n <DocumentStateBadge\n state={\n snapshot || !ready.canEdit\n ? 'read-only'\n : ready.room\n ? 'co-editing'\n : isDraft\n ? 'draft'\n : undefined\n }\n />\n }\n />\n )}\n {!stream && <WordShortcuts scope={stageRef} />}\n {!stream && <TableTabKeys scope={stageRef} />}\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 <RoomInputBinding\n session={ready.room?.session}\n flushRef={flushInputRef}\n />\n <AgentUndoRoom.Provider value={ready.room?.ydoc ?? null}>\n <DocxEditorReview>\n {() => (\n <DocxEditorReview.Card>\n <DocxCommentActivity />\n <AgentUndo />\n </DocxEditorReview.Card>\n )}\n </DocxEditorReview>\n </AgentUndoRoom.Provider>\n </DocxMentions>\n {!compact && <DocxEditor.HeaderFooterChrome />}\n {!compact && <DocxEditor.NotesChrome />}\n <DocxEditor.Equation />\n <DocxEditor.HyperLink />\n <DocxEditor.ContextMenu>\n <DocxContextMenuExtras />\n <MySignatureContextItems />\n <SignatureFieldContextItem />\n </DocxEditor.ContextMenu>\n </DocxEditor.Viewport>\n {!compact && <DocxEditor.PageNumber />}\n </div>\n </SignatureFieldsProvider>\n </CrossReferencesProvider>\n </HouseTemplateProvider>\n </DefinedTermsProvider>\n </DocxAuthorContext.Provider>\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 {checkpoint?.autosave && checkpoint.revision === editRevision\n ? `v${checkpoint.version} \u00B7 Autosaved`\n : status}\n </span>\n <DocxParticipants session={ready?.room?.session} />\n {!compact && (\n <select\n className=\"native-docx-zoom\"\n aria-label=\"Zoom\"\n data-testid=\"native-docx-zoom\"\n disabled={!ready}\n value={fitWidth ? 'fit' : String(zoomPercent)}\n onChange={(event) => pickZoom(event.target.value)}\n >\n <option value=\"fit\">Fit width</option>\n {[...new Set([...ZOOM_LEVELS, ...(fitWidth ? [] : [zoomPercent])])]\n .sort((a, b) => a - b)\n .map((level) => (\n <option key={level} value={String(level)}>\n {level}%\n </option>\n ))}\n </select>\n )}\n {!compact && (\n <button\n onClick={() => void exportDocument()}\n disabled={!ready}\n aria-label=\"Download DOCX\"\n >\n <Download size={14} />\n DOCX\n </button>\n )}\n {!compact && !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\u2026' : isDraft ? 'Save note' : 'Save version'}\n </button>\n )}\n </div>\n </section>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/docx/index.cjs
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunk2BOTSU23_cjs = require('../chunk-2BOTSU23.cjs');
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
5
|
+
var chunkESVRVZ53_cjs = require('../chunk-ESVRVZ53.cjs');
|
|
6
|
+
var chunkQ6IKXWPG_cjs = require('../chunk-Q6IKXWPG.cjs');
|
|
7
|
+
var chunk23I5EUZA_cjs = require('../chunk-23I5EUZA.cjs');
|
|
8
8
|
var chunkGA5ZO4YA_cjs = require('../chunk-GA5ZO4YA.cjs');
|
|
9
9
|
var chunkVG5XNE4H_cjs = require('../chunk-VG5XNE4H.cjs');
|
|
10
10
|
require('../chunk-DDWLMYRO.cjs');
|
|
@@ -27,143 +27,143 @@ Object.defineProperty(exports, "loadDocxFonts", {
|
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "StreamedWordArtifact", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkESVRVZ53_cjs.StreamedWordArtifact; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "NativeDocxComparison", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkQ6IKXWPG_cjs.NativeDocxComparison; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "CrossReferencesProvider", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunk23I5EUZA_cjs.CrossReferencesProvider; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "DEFAULT_CROSS_REFERENCES_LABELS", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunk23I5EUZA_cjs.DEFAULT_CROSS_REFERENCES_LABELS; }
|
|
43
43
|
});
|
|
44
44
|
Object.defineProperty(exports, "DEFAULT_DEFINED_TERMS_LABELS", {
|
|
45
45
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunk23I5EUZA_cjs.DEFAULT_DEFINED_TERMS_LABELS; }
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "DEFINED_TERM_TRIGGER", {
|
|
49
49
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunk23I5EUZA_cjs.DEFINED_TERM_TRIGGER; }
|
|
51
51
|
});
|
|
52
52
|
Object.defineProperty(exports, "DefinedTermsProvider", {
|
|
53
53
|
enumerable: true,
|
|
54
|
-
get: function () { return
|
|
54
|
+
get: function () { return chunk23I5EUZA_cjs.DefinedTermsProvider; }
|
|
55
55
|
});
|
|
56
56
|
Object.defineProperty(exports, "DocxCommentActivity", {
|
|
57
57
|
enumerable: true,
|
|
58
|
-
get: function () { return
|
|
58
|
+
get: function () { return chunk23I5EUZA_cjs.DocxCommentActivity; }
|
|
59
59
|
});
|
|
60
60
|
Object.defineProperty(exports, "DocxEditorReview", {
|
|
61
61
|
enumerable: true,
|
|
62
|
-
get: function () { return
|
|
62
|
+
get: function () { return chunk23I5EUZA_cjs.DocxEditorReview; }
|
|
63
63
|
});
|
|
64
64
|
Object.defineProperty(exports, "DocxMentions", {
|
|
65
65
|
enumerable: true,
|
|
66
|
-
get: function () { return
|
|
66
|
+
get: function () { return chunk23I5EUZA_cjs.DocxMentions; }
|
|
67
67
|
});
|
|
68
68
|
Object.defineProperty(exports, "DocxParticipants", {
|
|
69
69
|
enumerable: true,
|
|
70
|
-
get: function () { return
|
|
70
|
+
get: function () { return chunk23I5EUZA_cjs.DocxParticipants; }
|
|
71
71
|
});
|
|
72
72
|
Object.defineProperty(exports, "DocxRibbon", {
|
|
73
73
|
enumerable: true,
|
|
74
|
-
get: function () { return
|
|
74
|
+
get: function () { return chunk23I5EUZA_cjs.DocxRibbon; }
|
|
75
75
|
});
|
|
76
76
|
Object.defineProperty(exports, "GenerateImageButton", {
|
|
77
77
|
enumerable: true,
|
|
78
|
-
get: function () { return
|
|
78
|
+
get: function () { return chunk23I5EUZA_cjs.GenerateImageButton; }
|
|
79
79
|
});
|
|
80
80
|
Object.defineProperty(exports, "LinkHoverCard", {
|
|
81
81
|
enumerable: true,
|
|
82
|
-
get: function () { return
|
|
82
|
+
get: function () { return chunk23I5EUZA_cjs.LinkHoverCard; }
|
|
83
83
|
});
|
|
84
84
|
Object.defineProperty(exports, "NativeDocxEditor", {
|
|
85
85
|
enumerable: true,
|
|
86
|
-
get: function () { return
|
|
86
|
+
get: function () { return chunk23I5EUZA_cjs.NativeDocxEditor; }
|
|
87
87
|
});
|
|
88
88
|
Object.defineProperty(exports, "SignatureFieldMenu", {
|
|
89
89
|
enumerable: true,
|
|
90
|
-
get: function () { return
|
|
90
|
+
get: function () { return chunk23I5EUZA_cjs.SignatureFieldMenu; }
|
|
91
91
|
});
|
|
92
92
|
Object.defineProperty(exports, "SignatureFieldsProvider", {
|
|
93
93
|
enumerable: true,
|
|
94
|
-
get: function () { return
|
|
94
|
+
get: function () { return chunk23I5EUZA_cjs.SignatureFieldsProvider; }
|
|
95
95
|
});
|
|
96
96
|
Object.defineProperty(exports, "editorPort", {
|
|
97
97
|
enumerable: true,
|
|
98
|
-
get: function () { return
|
|
98
|
+
get: function () { return chunk23I5EUZA_cjs.editorPort; }
|
|
99
99
|
});
|
|
100
100
|
Object.defineProperty(exports, "findDefinitionsSection", {
|
|
101
101
|
enumerable: true,
|
|
102
|
-
get: function () { return
|
|
102
|
+
get: function () { return chunk23I5EUZA_cjs.findDefinitionsSection; }
|
|
103
103
|
});
|
|
104
104
|
Object.defineProperty(exports, "insertCrossReference", {
|
|
105
105
|
enumerable: true,
|
|
106
|
-
get: function () { return
|
|
106
|
+
get: function () { return chunk23I5EUZA_cjs.insertCrossReference; }
|
|
107
107
|
});
|
|
108
108
|
Object.defineProperty(exports, "insertDefinedTerm", {
|
|
109
109
|
enumerable: true,
|
|
110
|
-
get: function () { return
|
|
110
|
+
get: function () { return chunk23I5EUZA_cjs.insertDefinedTerm; }
|
|
111
111
|
});
|
|
112
112
|
Object.defineProperty(exports, "insertDocumentReference", {
|
|
113
113
|
enumerable: true,
|
|
114
|
-
get: function () { return
|
|
114
|
+
get: function () { return chunk23I5EUZA_cjs.insertDocumentReference; }
|
|
115
115
|
});
|
|
116
116
|
Object.defineProperty(exports, "insertSignatureField", {
|
|
117
117
|
enumerable: true,
|
|
118
|
-
get: function () { return
|
|
118
|
+
get: function () { return chunk23I5EUZA_cjs.insertSignatureField; }
|
|
119
119
|
});
|
|
120
120
|
Object.defineProperty(exports, "listTargets", {
|
|
121
121
|
enumerable: true,
|
|
122
|
-
get: function () { return
|
|
122
|
+
get: function () { return chunk23I5EUZA_cjs.listTargets; }
|
|
123
123
|
});
|
|
124
124
|
Object.defineProperty(exports, "normalizeDocxExport", {
|
|
125
125
|
enumerable: true,
|
|
126
|
-
get: function () { return
|
|
126
|
+
get: function () { return chunk23I5EUZA_cjs.normalizeDocxExport; }
|
|
127
127
|
});
|
|
128
128
|
Object.defineProperty(exports, "paragraphNumber", {
|
|
129
129
|
enumerable: true,
|
|
130
|
-
get: function () { return
|
|
130
|
+
get: function () { return chunk23I5EUZA_cjs.paragraphNumber; }
|
|
131
131
|
});
|
|
132
132
|
Object.defineProperty(exports, "referenceText", {
|
|
133
133
|
enumerable: true,
|
|
134
|
-
get: function () { return
|
|
134
|
+
get: function () { return chunk23I5EUZA_cjs.referenceText; }
|
|
135
135
|
});
|
|
136
136
|
Object.defineProperty(exports, "referencesPort", {
|
|
137
137
|
enumerable: true,
|
|
138
|
-
get: function () { return
|
|
138
|
+
get: function () { return chunk23I5EUZA_cjs.referencesPort; }
|
|
139
139
|
});
|
|
140
140
|
Object.defineProperty(exports, "reviewModule", {
|
|
141
141
|
enumerable: true,
|
|
142
|
-
get: function () { return
|
|
142
|
+
get: function () { return chunk23I5EUZA_cjs.reviewModule; }
|
|
143
143
|
});
|
|
144
144
|
Object.defineProperty(exports, "shortTitle", {
|
|
145
145
|
enumerable: true,
|
|
146
|
-
get: function () { return
|
|
146
|
+
get: function () { return chunk23I5EUZA_cjs.shortTitle; }
|
|
147
147
|
});
|
|
148
148
|
Object.defineProperty(exports, "useCrossReferences", {
|
|
149
149
|
enumerable: true,
|
|
150
|
-
get: function () { return
|
|
150
|
+
get: function () { return chunk23I5EUZA_cjs.useCrossReferences; }
|
|
151
151
|
});
|
|
152
152
|
Object.defineProperty(exports, "useDefinedTerms", {
|
|
153
153
|
enumerable: true,
|
|
154
|
-
get: function () { return
|
|
154
|
+
get: function () { return chunk23I5EUZA_cjs.useDefinedTerms; }
|
|
155
155
|
});
|
|
156
156
|
Object.defineProperty(exports, "useReview", {
|
|
157
157
|
enumerable: true,
|
|
158
|
-
get: function () { return
|
|
158
|
+
get: function () { return chunk23I5EUZA_cjs.useReview; }
|
|
159
159
|
});
|
|
160
160
|
Object.defineProperty(exports, "useReviewItem", {
|
|
161
161
|
enumerable: true,
|
|
162
|
-
get: function () { return
|
|
162
|
+
get: function () { return chunk23I5EUZA_cjs.useReviewItem; }
|
|
163
163
|
});
|
|
164
164
|
Object.defineProperty(exports, "withDirectEditing", {
|
|
165
165
|
enumerable: true,
|
|
166
|
-
get: function () { return
|
|
166
|
+
get: function () { return chunk23I5EUZA_cjs.withDirectEditing; }
|
|
167
167
|
});
|
|
168
168
|
Object.defineProperty(exports, "DocxAuthorContext", {
|
|
169
169
|
enumerable: true,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Save the latest edit after typing settles, including edits made during an earlier save. */
|
|
2
|
+
export declare function useVersionAutosave({ documentId, revision, savedRevision, enabled, save, }: {
|
|
3
|
+
documentId: string;
|
|
4
|
+
revision: number;
|
|
5
|
+
savedRevision: number;
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
save: () => Promise<boolean | number>;
|
|
8
|
+
}): void;
|
|
9
|
+
/** A chat flush waits for any autosave already in flight before keeping the latest state. */
|
|
10
|
+
export declare function useVersionSaveQueue(persist: (autosave: boolean) => Promise<boolean | number>): (autosave?: boolean) => Promise<number | boolean>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
3
|
+
function useVersionAutosave({
|
|
4
|
+
documentId,
|
|
5
|
+
revision,
|
|
6
|
+
savedRevision,
|
|
7
|
+
enabled,
|
|
8
|
+
save
|
|
9
|
+
}) {
|
|
10
|
+
const latest = useRef(save);
|
|
11
|
+
latest.current = save;
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (!enabled || !revision || revision === savedRevision) return;
|
|
14
|
+
const timer = setTimeout(() => void latest.current(), 2500);
|
|
15
|
+
return () => clearTimeout(timer);
|
|
16
|
+
}, [documentId, revision, savedRevision, enabled]);
|
|
17
|
+
}
|
|
18
|
+
function useVersionSaveQueue(persist) {
|
|
19
|
+
const latest = useRef(persist);
|
|
20
|
+
latest.current = persist;
|
|
21
|
+
const pending = useRef(Promise.resolve());
|
|
22
|
+
return useCallback((autosave = false) => {
|
|
23
|
+
const save = latest.current;
|
|
24
|
+
const result = pending.current.then(() => save(autosave));
|
|
25
|
+
pending.current = result.then(
|
|
26
|
+
() => void 0,
|
|
27
|
+
() => void 0
|
|
28
|
+
);
|
|
29
|
+
return result;
|
|
30
|
+
}, []);
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
useVersionAutosave,
|
|
34
|
+
useVersionSaveQueue
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=useVersionAutosave.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/docx/useVersionAutosave.ts"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useRef } from 'react'\n\n/** Save the latest edit after typing settles, including edits made during an earlier save. */\nexport function useVersionAutosave({\n documentId,\n revision,\n savedRevision,\n enabled,\n save,\n}: {\n documentId: string\n revision: number\n savedRevision: number\n enabled: boolean\n save: () => Promise<boolean | number>\n}) {\n const latest = useRef(save)\n latest.current = save\n useEffect(() => {\n if (!enabled || !revision || revision === savedRevision) return\n const timer = setTimeout(() => void latest.current(), 2500)\n return () => clearTimeout(timer)\n }, [documentId, revision, savedRevision, enabled])\n}\n\n/** A chat flush waits for any autosave already in flight before keeping the latest state. */\nexport function useVersionSaveQueue(persist: (autosave: boolean) => Promise<boolean | number>) {\n const latest = useRef(persist)\n latest.current = persist\n const pending = useRef<Promise<unknown>>(Promise.resolve())\n return useCallback((autosave = false) => {\n const save = latest.current\n const result = pending.current.then(() => save(autosave))\n pending.current = result.then(\n () => undefined,\n () => undefined\n )\n return result\n }, [])\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,aAAa,WAAW,cAAc;AAGxC,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,SAAS,OAAO,IAAI;AAC1B,SAAO,UAAU;AACjB,YAAU,MAAM;AACd,QAAI,CAAC,WAAW,CAAC,YAAY,aAAa,cAAe;AACzD,UAAM,QAAQ,WAAW,MAAM,KAAK,OAAO,QAAQ,GAAG,IAAI;AAC1D,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,YAAY,UAAU,eAAe,OAAO,CAAC;AACnD;AAGO,SAAS,oBAAoB,SAA2D;AAC7F,QAAM,SAAS,OAAO,OAAO;AAC7B,SAAO,UAAU;AACjB,QAAM,UAAU,OAAyB,QAAQ,QAAQ,CAAC;AAC1D,SAAO,YAAY,CAAC,WAAW,UAAU;AACvC,UAAM,OAAO,OAAO;AACpB,UAAM,SAAS,QAAQ,QAAQ,KAAK,MAAM,KAAK,QAAQ,CAAC;AACxD,YAAQ,UAAU,OAAO;AAAA,MACvB,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|