@a3s-lab/office 0.2.2 → 0.4.0
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/COLLABORATION_ROADMAP.md +426 -0
- package/README.md +649 -10
- package/dist/0~1403.js +1 -1
- package/dist/0~2805.js +1279 -0
- package/dist/{0~use-office-draft.js → 0~345.js} +30 -1
- package/dist/0~3539.js +1 -1
- package/dist/0~3557.js +1 -1
- package/dist/0~3635.js +1 -1
- package/dist/0~4595.js +123 -12
- package/dist/0~4980.js +154 -0
- package/dist/0~5050.js +124 -113
- package/dist/{0~9512.js → 0~6090.js} +540 -3
- package/dist/0~7048.js +92 -66
- package/dist/0~7614.js +2 -1
- package/dist/0~7754.js +5653 -0
- package/dist/0~9445.js +1 -1
- package/dist/0~document-editor.js +4992 -3323
- package/dist/0~markdown-editor.js +250 -44
- package/dist/0~pdf-viewer.js +1016 -24
- package/dist/0~presentation-editor.js +179 -8
- package/dist/0~spreadsheet-editor.js +3371 -578
- package/dist/0~work-docx-export.js +6801 -658
- package/dist/0~work-docx-import.js +1388 -795
- package/dist/0~work-office-diagnostics.js +524 -30
- package/dist/0~work-pptx-export.js +2 -1
- package/dist/0~work-pptx-import.js +1 -2
- package/dist/0~work-presentation-charts.js +1 -1
- package/dist/2591.js +197 -0
- package/dist/3818.js +1090 -0
- package/dist/4104.js +970 -60
- package/dist/432.js +171 -14
- package/dist/4476.js +2008 -0
- package/dist/4560.js +674 -0
- package/dist/4650.js +70 -0
- package/dist/{1134.js → 5184.js} +183 -1
- package/dist/6489.js +18 -18
- package/dist/7060.js +132 -0
- package/dist/8715.js +2 -136
- package/dist/8928.js +16778 -0
- package/dist/9787.js +209 -0
- package/dist/core.d.ts +29 -9
- package/dist/core.js +10 -2
- package/dist/index.js +13 -3
- package/dist/internal/collaboration/office-collaboration-flat-json.d.ts +13 -0
- package/dist/internal/collaboration/office-collaboration-json.d.ts +4 -0
- package/dist/internal/collaboration/office-collaboration-presence.d.ts +86 -0
- package/dist/internal/collaboration/office-collaboration-transport.d.ts +42 -0
- package/dist/internal/collaboration/office-collaboration.d.ts +85 -0
- package/dist/internal/collaboration/office-document-collaboration-bibliography.d.ts +7 -0
- package/dist/internal/collaboration/office-document-collaboration-claims.d.ts +9 -0
- package/dist/internal/collaboration/office-document-collaboration-comments.d.ts +7 -0
- package/dist/internal/collaboration/office-document-collaboration-sidecar-utils.d.ts +27 -0
- package/dist/internal/collaboration/office-document-collaboration-sidecars.d.ts +16 -0
- package/dist/internal/collaboration/office-document-collaboration.d.ts +45 -0
- package/dist/internal/collaboration/office-markdown-collaboration.d.ts +31 -0
- package/dist/internal/collaboration/office-pdf-collaboration-claims.d.ts +4 -0
- package/dist/internal/collaboration/office-pdf-collaboration-conflicts.d.ts +2 -0
- package/dist/internal/collaboration/office-pdf-collaboration-model.d.ts +26 -0
- package/dist/internal/collaboration/office-pdf-collaboration-records.d.ts +21 -0
- package/dist/internal/collaboration/office-pdf-collaboration-types.d.ts +91 -0
- package/dist/internal/collaboration/office-pdf-collaboration-validation.d.ts +4 -0
- package/dist/internal/collaboration/office-pdf-collaboration.d.ts +35 -0
- package/dist/internal/collaboration/office-presentation-collaboration-model.d.ts +25 -0
- package/dist/internal/collaboration/office-presentation-collaboration-records.d.ts +22 -0
- package/dist/internal/collaboration/office-presentation-collaboration-validation.d.ts +4 -0
- package/dist/internal/collaboration/office-presentation-collaboration.d.ts +32 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration-cells.d.ts +13 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration-claims.d.ts +4 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration-conflicts.d.ts +2 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration-flat-json.d.ts +10 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration-model.d.ts +31 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration-records.d.ts +17 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration-validation.d.ts +4 -0
- package/dist/internal/collaboration/office-spreadsheet-collaboration.d.ts +32 -0
- package/dist/internal/design-system/primitives/navigation/tabs.d.ts +3 -1
- package/dist/internal/features/work/components/work-document-page-border.d.ts +6 -0
- package/dist/internal/features/work/editors/document-command-catalog.d.ts +536 -0
- package/dist/internal/features/work/editors/document-editor-focus.d.ts +1 -1
- package/dist/internal/features/work/editors/document-editor-support.d.ts +7 -3
- package/dist/internal/features/work/editors/document-editor.d.ts +8 -2
- package/dist/internal/features/work/editors/document-external-content.d.ts +14 -0
- package/dist/internal/features/work/editors/document-format-clipboard.d.ts +6 -0
- package/dist/internal/features/work/editors/document-format-tools.d.ts +4 -0
- package/dist/internal/features/work/editors/document-layout-panel.d.ts +4 -1
- package/dist/internal/features/work/editors/document-page-chrome-wps-shortcuts.d.ts +2 -0
- package/dist/internal/features/work/editors/document-page-layout-ribbon.d.ts +14 -0
- package/dist/internal/features/work/editors/document-page-stack.d.ts +10 -1
- package/dist/internal/features/work/editors/document-page-thumbnail.d.ts +2 -0
- package/dist/internal/features/work/editors/document-pagination-run-coordinator.d.ts +26 -0
- package/dist/internal/features/work/editors/document-picture-properties-dialog-model.d.ts +20 -1
- package/dist/internal/features/work/editors/document-review-navigation.d.ts +9 -0
- package/dist/internal/features/work/editors/document-statistics-dialog.d.ts +7 -0
- package/dist/internal/features/work/editors/document-status-bar.d.ts +2 -1
- package/dist/internal/features/work/editors/document-table-properties-dialog-model.d.ts +4 -1
- package/dist/internal/features/work/editors/document-toolbar.d.ts +19 -42
- package/dist/internal/features/work/editors/document-wps-shortcuts.d.ts +12 -0
- package/dist/internal/features/work/editors/document-zoom.d.ts +17 -0
- package/dist/internal/features/work/editors/markdown-editor-focus.d.ts +1 -1
- package/dist/internal/features/work/editors/markdown-editor.d.ts +5 -1
- package/dist/internal/features/work/editors/markdown-toolbar.d.ts +2 -1
- package/dist/internal/features/work/editors/office-collaboration-participants.d.ts +3 -0
- package/dist/internal/features/work/editors/office-collaboration-presence-context.d.ts +17 -0
- package/dist/internal/features/work/editors/office-collaboration-presence-ui.d.ts +25 -0
- package/dist/internal/features/work/editors/office-editor-focus-handoff.d.ts +27 -0
- package/dist/internal/features/work/editors/pdf-annotation-controller.d.ts +5 -0
- package/dist/internal/features/work/editors/pdf-collaboration-presence.d.ts +3 -0
- package/dist/internal/features/work/editors/pdf-collaboration-projection.d.ts +10 -0
- package/dist/internal/features/work/editors/pdf-evidence-contract.d.ts +36 -0
- package/dist/internal/features/work/editors/pdf-evidence-overlay.d.ts +37 -0
- package/dist/internal/features/work/editors/pdf-toolbar.d.ts +2 -1
- package/dist/internal/features/work/editors/pdf-viewer-controller.d.ts +7 -1
- package/dist/internal/features/work/editors/pdf-viewer.d.ts +11 -1
- package/dist/internal/features/work/editors/presentation-collaboration-presence.d.ts +5 -0
- package/dist/internal/features/work/editors/presentation-editor-focus.d.ts +3 -2
- package/dist/internal/features/work/editors/presentation-editor-types.d.ts +3 -0
- package/dist/internal/features/work/editors/presentation-editor.d.ts +1 -1
- package/dist/internal/features/work/editors/spreadsheet-auto-filter.d.ts +9 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-clear.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-merge.d.ts +12 -0
- package/dist/internal/features/work/editors/spreadsheet-clipboard-shortcuts.d.ts +3 -7
- package/dist/internal/features/work/editors/spreadsheet-collaboration-presence.d.ts +9 -0
- package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +464 -0
- package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +45 -9
- package/dist/internal/features/work/editors/spreadsheet-context-menu.d.ts +2 -0
- package/dist/internal/features/work/editors/spreadsheet-editor-ribbon.d.ts +9 -28
- package/dist/internal/features/work/editors/spreadsheet-editor.d.ts +8 -2
- package/dist/internal/features/work/editors/spreadsheet-format-painter.d.ts +27 -0
- package/dist/internal/features/work/editors/spreadsheet-freeze-panes.d.ts +14 -0
- package/dist/internal/features/work/editors/use-document-insert-commands.d.ts +3 -2
- package/dist/internal/features/work/editors/use-document-pagination.d.ts +6 -1
- package/dist/internal/features/work/editors/use-document-review-conflicts.d.ts +28 -0
- package/dist/internal/features/work/editors/use-spreadsheet-auto-filter.d.ts +21 -0
- package/dist/internal/features/work/editors/use-spreadsheet-collaboration.d.ts +27 -0
- package/dist/internal/features/work/editors/use-spreadsheet-format-painter.d.ts +18 -0
- package/dist/internal/features/work/editors/work-office-chrome.d.ts +22 -3
- package/dist/internal/features/work/editors/work-office-ribbon-overflow.d.ts +2 -0
- package/dist/internal/features/work/work-document-bookmark-references.d.ts +37 -0
- package/dist/internal/features/work/work-document-bookmarks.d.ts +29 -0
- package/dist/internal/features/work/work-document-caption-nodes.d.ts +4 -1
- package/dist/internal/features/work/work-document-comments.d.ts +1 -1
- package/dist/internal/features/work/work-document-equations.d.ts +513 -0
- package/dist/internal/features/work/work-document-extensions.d.ts +1 -0
- package/dist/internal/features/work/work-document-field-identity.d.ts +2 -0
- package/dist/internal/features/work/work-document-field-node.d.ts +2 -2
- package/dist/internal/features/work/work-document-fields.d.ts +7 -0
- package/dist/internal/features/work/work-document-image-identity.d.ts +30 -0
- package/dist/internal/features/work/work-document-image-layout.d.ts +46 -1
- package/dist/internal/features/work/work-document-image-wrap-contour.d.ts +16 -0
- package/dist/internal/features/work/work-document-incremental-layout.d.ts +2 -2
- package/dist/internal/features/work/work-document-model-codec.d.ts +4 -1
- package/dist/internal/features/work/work-document-note-integrity.d.ts +2 -0
- package/dist/internal/features/work/work-document-page-borders.d.ts +25 -0
- package/dist/internal/features/work/work-document-page-capture.d.ts +8 -0
- package/dist/internal/features/work/work-document-page-frames.d.ts +15 -0
- package/dist/internal/features/work/work-document-page-margins.d.ts +56 -0
- package/dist/internal/features/work/work-document-page-size.d.ts +47 -0
- package/dist/internal/features/work/work-document-pagination-measurement.d.ts +1 -2
- package/dist/internal/features/work/work-document-pagination-types.d.ts +7 -2
- package/dist/internal/features/work/work-document-pagination.d.ts +2 -2
- package/dist/internal/features/work/work-document-paragraph-borders.d.ts +32 -0
- package/dist/internal/features/work/work-document-paragraph-identity.d.ts +26 -0
- package/dist/internal/features/work/work-document-paragraph-shading.d.ts +18 -0
- package/dist/internal/features/work/work-document-review-conflicts.d.ts +35 -0
- package/dist/internal/features/work/work-document-section.d.ts +4 -0
- package/dist/internal/features/work/work-document-snapshot.d.ts +19 -0
- package/dist/internal/features/work/work-document-source.d.ts +23 -0
- package/dist/internal/features/work/work-document-table-column-widths.d.ts +7 -0
- package/dist/internal/features/work/work-document-table-property-changes.d.ts +3 -0
- package/dist/internal/features/work/work-document-table-row-identity.d.ts +15 -0
- package/dist/internal/features/work/work-document-table-sizing.d.ts +3 -0
- package/dist/internal/features/work/work-document-text-layout.d.ts +3 -1
- package/dist/internal/features/work/work-document-word-line-metrics.d.ts +2 -0
- package/dist/internal/features/work/work-docx-bookmark-diagnostics.d.ts +3 -0
- package/dist/internal/features/work/work-docx-bookmark-import.d.ts +24 -0
- package/dist/internal/features/work/work-docx-bookmarks.d.ts +17 -0
- package/dist/internal/features/work/work-docx-comment-durable-id-preservation.d.ts +2 -0
- package/dist/internal/features/work/work-docx-comment-export.d.ts +3 -0
- package/dist/internal/features/work/work-docx-comment-metadata.d.ts +2 -0
- package/dist/internal/features/work/work-docx-drawing-extension-preservation.d.ts +4 -0
- package/dist/internal/features/work/work-docx-equation-diagnostics.d.ts +3 -0
- package/dist/internal/features/work/work-docx-equation-export.d.ts +14 -0
- package/dist/internal/features/work/work-docx-equation-import.d.ts +30 -0
- package/dist/internal/features/work/work-docx-equation-story.d.ts +9 -0
- package/dist/internal/features/work/work-docx-export-formatting.d.ts +3 -1
- package/dist/internal/features/work/work-docx-export-image.d.ts +5 -1
- package/dist/internal/features/work/work-docx-export.d.ts +1 -1
- package/dist/internal/features/work/work-docx-field-instructions.d.ts +8 -0
- package/dist/internal/features/work/work-docx-font-table-preservation.d.ts +3 -0
- package/dist/internal/features/work/work-docx-ignorable-extension-preservation.d.ts +15 -0
- package/dist/internal/features/work/work-docx-image-crop.d.ts +12 -0
- package/dist/internal/features/work/work-docx-image-identity.d.ts +17 -0
- package/dist/internal/features/work/work-docx-image-layer.d.ts +12 -0
- package/dist/internal/features/work/work-docx-image-layout-import.d.ts +14 -2
- package/dist/internal/features/work/work-docx-image-wrap.d.ts +15 -0
- package/dist/internal/features/work/work-docx-import.d.ts +13 -3
- package/dist/internal/features/work/work-docx-list-export.d.ts +18 -0
- package/dist/internal/features/work/work-docx-list-import.d.ts +14 -0
- package/dist/internal/features/work/work-docx-note-comment-content-control-block-preservation.d.ts +18 -0
- package/dist/internal/features/work/work-docx-note-comment-content-control-model.d.ts +47 -0
- package/dist/internal/features/work/work-docx-note-comment-content-control-preservation.d.ts +4 -0
- package/dist/internal/features/work/work-docx-note-comment-content-control-properties.d.ts +17 -0
- package/dist/internal/features/work/work-docx-note-comment-content-control-table-model.d.ts +17 -0
- package/dist/internal/features/work/work-docx-note-comment-content-control-xml.d.ts +14 -0
- package/dist/internal/features/work/work-docx-note-comment-extension-preservation.d.ts +2 -0
- package/dist/internal/features/work/work-docx-note-comment-hyperlink-content.d.ts +40 -0
- package/dist/internal/features/work/work-docx-note-comment-hyperlink-preservation.d.ts +5 -0
- package/dist/internal/features/work/work-docx-note-comment-hyperlink-relationships.d.ts +35 -0
- package/dist/internal/features/work/work-docx-note-comment-identity.d.ts +15 -0
- package/dist/internal/features/work/work-docx-note-comment-run-preservation.d.ts +4 -0
- package/dist/internal/features/work/work-docx-note-comment-run-properties.d.ts +2 -0
- package/dist/internal/features/work/work-docx-note-image-import.d.ts +12 -0
- package/dist/internal/features/work/work-docx-note-image-relationships.d.ts +1 -0
- package/dist/internal/features/work/work-docx-numbering-extension-preservation.d.ts +6 -0
- package/dist/internal/features/work/work-docx-numbering.d.ts +1 -0
- package/dist/internal/features/work/work-docx-page-borders-diagnostics.d.ts +3 -0
- package/dist/internal/features/work/work-docx-page-borders-import.d.ts +10 -0
- package/dist/internal/features/work/work-docx-page-margins-diagnostics.d.ts +3 -0
- package/dist/internal/features/work/work-docx-page-margins-import.d.ts +18 -0
- package/dist/internal/features/work/work-docx-page-size-diagnostics.d.ts +2 -0
- package/dist/internal/features/work/work-docx-page-size-import.d.ts +17 -0
- package/dist/internal/features/work/work-docx-paragraph-borders-diagnostics.d.ts +3 -0
- package/dist/internal/features/work/work-docx-paragraph-borders-export.d.ts +18 -0
- package/dist/internal/features/work/work-docx-paragraph-borders-import.d.ts +24 -0
- package/dist/internal/features/work/work-docx-paragraph-default-collapsed.d.ts +19 -0
- package/dist/internal/features/work/work-docx-paragraph-extension-preservation.d.ts +2 -0
- package/dist/internal/features/work/work-docx-paragraph-identity-import.d.ts +10 -0
- package/dist/internal/features/work/work-docx-paragraph-identity.d.ts +18 -0
- package/dist/internal/features/work/work-docx-paragraph-pagination-import.d.ts +6 -1
- package/dist/internal/features/work/work-docx-paragraph-shading-diagnostics.d.ts +3 -0
- package/dist/internal/features/work/work-docx-paragraph-shading-export.d.ts +5 -0
- package/dist/internal/features/work/work-docx-paragraph-shading-import.d.ts +18 -0
- package/dist/internal/features/work/work-docx-run-formatting-import.d.ts +3 -0
- package/dist/internal/features/work/work-docx-settings-preservation.d.ts +10 -0
- package/dist/internal/features/work/work-docx-settings-xml.d.ts +16 -0
- package/dist/internal/features/work/work-docx-style-extension-preservation.d.ts +2 -0
- package/dist/internal/features/work/work-docx-table-cell-export.d.ts +2 -1
- package/dist/internal/features/work/work-docx-table-cell-import.d.ts +3 -0
- package/dist/internal/features/work/work-docx-table-extension-preservation.d.ts +2 -0
- package/dist/internal/features/work/work-docx-table-row-import.d.ts +2 -0
- package/dist/internal/features/work/work-docx-table-sizing-import.d.ts +1 -0
- package/dist/internal/features/work/work-docx-theme-reference.d.ts +23 -0
- package/dist/internal/features/work/work-docx-theme.d.ts +4 -1
- package/dist/internal/features/work/work-docx-twips.d.ts +12 -0
- package/dist/internal/features/work/work-file-contract.d.ts +1 -0
- package/dist/internal/features/work/work-file-io.d.ts +1 -1
- package/dist/internal/features/work/work-markdown-extensions.d.ts +4 -1
- package/dist/internal/features/work/work-ooxml-package-preservation.d.ts +12 -0
- package/dist/internal/features/work/work-ooxml-package-security.d.ts +6 -0
- package/dist/internal/features/work/work-ooxml-relationship-preservation.d.ts +10 -0
- package/dist/internal/features/work/work-ooxml-xml.d.ts +2 -0
- package/dist/internal/features/work/work-pdf-export.d.ts +10 -0
- package/dist/internal/features/work/work-repository.d.ts +2 -0
- package/dist/internal/features/work/work-types.d.ts +15 -2
- package/dist/internal/kernel/office-kernel-client-types.d.ts +1 -0
- package/dist/internal/kernel/office-kernel-protocol.d.ts +7 -0
- package/dist/internal/kernel/office-kernel-version.d.ts +1 -1
- package/dist/office-kernel.wasm +0 -0
- package/dist/office-kernel.worker.js +93 -41
- package/dist/react.d.ts +18 -12
- package/dist/react.js +1 -1
- package/dist/styles.css +1367 -16
- package/dist/vue.d.ts +48 -5
- package/dist/vue.js +42 -3
- package/dist/web-component.d.ts +24 -2
- package/dist/web-component.js +101 -2
- package/docs/latest/en/browser-editor-architecture.md +262 -47
- package/package.json +29 -4
- package/dist/0~152.js +0 -94
- package/dist/0~2582.js +0 -485
- package/dist/0~4750.js +0 -939
- package/dist/0~5861.js +0 -596
- package/dist/0~work-document-extensions.js +0 -3045
- package/dist/0~work-document-model-codec.js +0 -42
- package/dist/0~work-docx-bibliography.js +0 -347
- package/dist/0~work-docx-page-color.js +0 -42
- package/dist/2881.js +0 -1455
- package/dist/8728.js +0 -723
package/README.md
CHANGED
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
<a href="#five-format-native-surfaces">Editors</a> ·
|
|
26
26
|
<a href="#native-automation">Automation</a> ·
|
|
27
27
|
<a href="#architecture">Architecture</a> ·
|
|
28
|
+
<a href="ROADMAP.md">WPS gap roadmap</a> ·
|
|
29
|
+
<a href="COLLABORATION_ROADMAP.md">Collaboration roadmap</a> ·
|
|
28
30
|
<a href="CONTRIBUTING.md">Contributing</a>
|
|
29
31
|
</p>
|
|
30
32
|
|
|
@@ -81,7 +83,7 @@ The images below are committed visual-regression baselines from the real
|
|
|
81
83
|
<a href="visual-tests/__snapshots__/linux/desktop-1280/pdf.png">
|
|
82
84
|
<img src="visual-tests/__snapshots__/linux/desktop-1280/pdf.png" alt="A3S Office PDF editor with search, annotation, save, and download controls">
|
|
83
85
|
</a>
|
|
84
|
-
<br><sub><strong>PDF</strong> — PDFium rendering, forms, annotations, and save</sub>
|
|
86
|
+
<br><sub><strong>PDF</strong> — PDFium rendering, forms, annotations, Yjs overlays, and save</sub>
|
|
85
87
|
</td>
|
|
86
88
|
</tr>
|
|
87
89
|
</table>
|
|
@@ -99,6 +101,8 @@ The images below are committed visual-regression baselines from the real
|
|
|
99
101
|
unexpected blocking modal or steal focus from the workspace.
|
|
100
102
|
Shared color palettes expand to an eight-column touch layout on phones while
|
|
101
103
|
preserving spatial arrow-key navigation.
|
|
104
|
+
Shared Office selects use 44 px phone option rows and bounded internal
|
|
105
|
+
scrolling while retaining keyboard selection and exact focus restoration.
|
|
102
106
|
- **Editor-scoped zoom** — Status controls and Ctrl/Cmd + mouse-wheel gestures
|
|
103
107
|
share each surface's bounded zoom model without changing the host browser's
|
|
104
108
|
page scale.
|
|
@@ -109,7 +113,21 @@ The images below are committed visual-regression baselines from the real
|
|
|
109
113
|
export captures that same Worker/WASM page layout instead of rebuilding
|
|
110
114
|
content from compatibility HTML. Caption numbering and cross-reference
|
|
111
115
|
validity also update in that same transaction graph, including a truthful
|
|
112
|
-
missing-target state after deletion.
|
|
116
|
+
missing-target state after deletion. Paired Word bookmarks can span blocks,
|
|
117
|
+
retain stable native identities through edits, drive live editable REF
|
|
118
|
+
fields, and keep internal links distinct from external hyperlink
|
|
119
|
+
relationships; deleting a target exposes truthful missing-link and
|
|
120
|
+
missing-reference states that undo repairs. Footnote and endnote references
|
|
121
|
+
remain paired with one editable definition, renumber live in independent
|
|
122
|
+
reference-order sequences, receive new identities when copied, and are
|
|
123
|
+
deleted or restored together through one undoable transaction. Body `PAGE`,
|
|
124
|
+
`NUMPAGES`, `SECTION`, `SECTIONPAGES`, `DATE`, and `TIME` fields are atomic,
|
|
125
|
+
copied under fresh stable identities, and resolve from the live Worker/WASM
|
|
126
|
+
page containing each field. Automatic reflow updates numeric fields without
|
|
127
|
+
adding history or ticking clock fields; F9 refreshes every field in one
|
|
128
|
+
undoable action. Safe inline DOCX fields round-trip natively, while nested,
|
|
129
|
+
incomplete, cross-paragraph, deleted, or instructionless structures stay
|
|
130
|
+
text and produce an explicit compatibility warning.
|
|
113
131
|
- **Framework choice** — React components, Vue 3 adapters, Custom Elements,
|
|
114
132
|
and a framework-neutral Core API over the same engine.
|
|
115
133
|
- **Responsive computation** — Lazy editor chunks, cancellable Workers,
|
|
@@ -118,7 +136,11 @@ The images below are committed visual-regression baselines from the real
|
|
|
118
136
|
- **AI without UI scraping** — Typed agent ports and host-defined selection
|
|
119
137
|
actions receive structured context and editing commands.
|
|
120
138
|
- **Automation outside the browser** — The native Rust CLI, standard MCP
|
|
121
|
-
server, and Office Skill share bounded mutation contracts.
|
|
139
|
+
server, and Office Skill share bounded mutation contracts. Coding agents can
|
|
140
|
+
also keep a durable Yrs replica, exchange standard Yjs v1 updates and state
|
|
141
|
+
vectors, perform authorized typed Markdown, Document, and PDF annotation,
|
|
142
|
+
form-value, and review changes, retain browser/native actor attribution, and
|
|
143
|
+
checkpoint without replacing a whole Office file.
|
|
122
144
|
|
|
123
145
|
## Quick start
|
|
124
146
|
|
|
@@ -178,6 +200,32 @@ export function ProjectBrief() {
|
|
|
178
200
|
The editor owns editing, layout, import/export, and browser rendering. The host
|
|
179
201
|
owns persistence and decides when, where, and how the emitted content is saved.
|
|
180
202
|
|
|
203
|
+
### Persist a structured document snapshot
|
|
204
|
+
|
|
205
|
+
Hosts that round-trip controlled document values across a process or language
|
|
206
|
+
boundary should use the public versioned snapshot codec instead of converting
|
|
207
|
+
the editor value to Markdown or treating HTML as the complete document:
|
|
208
|
+
|
|
209
|
+
```ts
|
|
210
|
+
import {
|
|
211
|
+
decodeDocumentSnapshot,
|
|
212
|
+
encodeDocumentSnapshot,
|
|
213
|
+
} from '@a3s-lab/office/core';
|
|
214
|
+
|
|
215
|
+
const encoded = encodeDocumentSnapshot(content);
|
|
216
|
+
await storage.put(documentId, encoded);
|
|
217
|
+
|
|
218
|
+
const restored = decodeDocumentSnapshot(await storage.get(documentId));
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The v1 envelope uses the
|
|
222
|
+
`application/vnd.a3s.office.document-snapshot+json;version=1` media type. It
|
|
223
|
+
retains the synchronized HTML, structured ProseMirror model, page layout,
|
|
224
|
+
comments, review state, and bibliography as deterministic bounded JSON. Decode
|
|
225
|
+
fails closed for a different schema or version, malformed JSON, an oversized
|
|
226
|
+
payload, or a model whose HTML fingerprint is stale. Optional `undefined`
|
|
227
|
+
properties are omitted because they are outside the JSON data model.
|
|
228
|
+
|
|
181
229
|
### Export the live Word layout to PDF
|
|
182
230
|
|
|
183
231
|
Give each mounted document a stable `artifactId`, then pass the matching,
|
|
@@ -237,7 +285,8 @@ into the PDF; searchable text and vector output remain future fidelity work.
|
|
|
237
285
|
- `@a3s-lab/office/web-component` — Custom Elements for framework-agnostic UI
|
|
238
286
|
composition.
|
|
239
287
|
- `@a3s-lab/office/core` — Typed models, templates, import, export, and browser
|
|
240
|
-
file workflows
|
|
288
|
+
file workflows, plus transport-neutral Yjs bindings for Markdown, Document,
|
|
289
|
+
Spreadsheet, Presentation, and PDF collaboration.
|
|
241
290
|
- `@a3s-lab/office/styles.css` — Shared editor and interaction-system styles.
|
|
242
291
|
|
|
243
292
|
Copyable React, Vue, and Web Component examples live in the
|
|
@@ -255,7 +304,19 @@ interaction model.
|
|
|
255
304
|
long-document windows for page buttons, heading rows, full-text results, and
|
|
256
305
|
tracked-revision and anchored-comment review that preserve native scroll
|
|
257
306
|
distance, sparse current/selection/draft pins, and Home/End reachability;
|
|
258
|
-
|
|
307
|
+
a WPS-familiar command catalog, quick-access undo and redo, a priority-aware
|
|
308
|
+
adaptive and persistently collapsible ribbon whose tabs can temporarily
|
|
309
|
+
expose commands; WPS-oriented Insert groups and direct Page Layout presets
|
|
310
|
+
for margins, orientation, paper size, and columns, with matching advanced
|
|
311
|
+
Page Setup destinations; WPS-oriented References, Review, and View groups,
|
|
312
|
+
direct tracked-change navigation and decisions, contextual object tabs, and
|
|
313
|
+
viewport-calculated 100%, one-page, and page-width zoom; an actionable status
|
|
314
|
+
bar with live word-count details, WPS `Ctrl+Shift+G`, keyboard-traversable
|
|
315
|
+
view and zoom controls, and compact Web prioritization; editor-scoped WPS
|
|
316
|
+
formatting, paragraph, style, and review shortcuts, plus a permission-free
|
|
317
|
+
formatting clipboard and one-shot format painter shared with compatible
|
|
318
|
+
header and footer formatting, paragraph styles and phone-sized
|
|
319
|
+
paragraph-spacing and pagination controls
|
|
259
320
|
with touch targets and exact invoker-focus restoration; stable compact-ribbon
|
|
260
321
|
edge paging and viewport-bounded list galleries with touch-sized numbering
|
|
261
322
|
actions, selection-preserving bullet and numbering commands, and explicit
|
|
@@ -285,8 +346,28 @@ interaction model.
|
|
|
285
346
|
underline, strikethrough, fonts, and text colors are materialized before
|
|
286
347
|
direct table, cell, paragraph, and run formatting. Conditional paragraph
|
|
287
348
|
alignment, direction, indents, spacing and line rules, pagination rules, and
|
|
288
|
-
tab stops use the same precedence chain.
|
|
289
|
-
|
|
349
|
+
tab stops use the same precedence chain. Paragraph shading follows document
|
|
350
|
+
defaults, based-on paragraph styles, conditional table styles, and direct
|
|
351
|
+
formatting in that order. The complete Word `w:shd` pattern set, independent
|
|
352
|
+
foreground/background colors, `auto`, `nil` resets, and independently tinted
|
|
353
|
+
or shaded theme references remain structured through body and page-chrome
|
|
354
|
+
HTML; browser previews use bounded CSS masks while DOCX export restores the
|
|
355
|
+
native pattern and both theme channels. Preview follows Word's tint-over-shade
|
|
356
|
+
precedence when both transforms occur on one theme channel while retaining
|
|
357
|
+
both attributes for export. Malformed, duplicated,
|
|
358
|
+
namespace-spoofed, relationship-bound, or unresolved theme values fail closed
|
|
359
|
+
instead of inheriting stale shading. Theme tint and shade values resolve for
|
|
360
|
+
table borders and cell fills across edit, preview, and RGB-stable export.
|
|
361
|
+
Paragraph borders use the same precedence chain and retain the complete
|
|
362
|
+
`w:pBdr` model: schema-ordered `top`, `left`, `bottom`, `right`, `between`,
|
|
363
|
+
and facing-page `bar` edges; all 197 line and art styles; direct, automatic,
|
|
364
|
+
and theme colors; eighth-point or point widths; spacing; shadow; and frame.
|
|
365
|
+
Physical edges remain editable CSS, while art, between-paragraph, and
|
|
366
|
+
facing-page behavior uses a bounded browser approximation; DOCX export
|
|
367
|
+
restores the exact native edge set and attributes. Direct CSS edits replace
|
|
368
|
+
only the edited edge's theme binding, strict and transitional namespaces are
|
|
369
|
+
accepted, and malformed order, duplicates, spoofed namespaces, unsafe
|
|
370
|
+
attributes, invalid measures, and unresolved themes fail closed.
|
|
290
371
|
Splittable table rows that exceed a full physical page
|
|
291
372
|
continue at paragraph boundaries with repeated heading rows on every page,
|
|
292
373
|
viewport-safe comment drafting and focus-preserving citation drafts, tracked
|
|
@@ -336,6 +417,26 @@ interaction model.
|
|
|
336
417
|
phone layout, touch-sized controls, and exact grid-focus restoration,
|
|
337
418
|
desktop workbook task panes that become focus-contained phone dialogs with
|
|
338
419
|
an inert workbook background and exact ribbon-invoker restoration,
|
|
420
|
+
a WPS-familiar command catalog and tab order, quick-access Undo and Redo,
|
|
421
|
+
a priority-aware adaptive and collapsible ribbon with temporary tab
|
|
422
|
+
expansion, an executable Home clipboard group whose Paste, Cut, and Copy
|
|
423
|
+
commands share the permission-resilient local fallback with their WPS
|
|
424
|
+
shortcuts, a WPS-style Format Painter with single-use and double-click locked
|
|
425
|
+
sessions, cross-sheet range-pattern tiling, Escape cancellation, and native
|
|
426
|
+
style-only writes, Conditional Formatting under Home and Styles, executable
|
|
427
|
+
sorting plus WPS-style AutoFilter under Data, finite current-region discovery,
|
|
428
|
+
`Cmd/Ctrl+Shift+L` toggling, an `Alt+ArrowDown` keyboard filter menu,
|
|
429
|
+
a Home and Cells Rows and Columns menu for inserting above, below, left, or
|
|
430
|
+
right and deleting selected rows or columns through the shared structure
|
|
431
|
+
command port, a Home and Alignment Merge and Center split control with
|
|
432
|
+
Merge Cells, Merge Across, Unmerge Cells, Unmerge and Fill, and the WPS
|
|
433
|
+
`Ctrl+M` shortcut through one controlled native workbook batch,
|
|
434
|
+
a Home and Editing Clear menu for independently removing content, formats,
|
|
435
|
+
comments, hyperlinks, or all cell state while preserving merge geometry,
|
|
436
|
+
with Delete and Backspace mapped to Clear Contents,
|
|
437
|
+
a View and Window Freeze Panes menu for current-cell, top-row, first-column,
|
|
438
|
+
and unfreeze patterns with XLSX round trips, and visible F9 workbook
|
|
439
|
+
recalculation,
|
|
339
440
|
Shift+F11 creation, Ctrl/Cmd+PageUp/PageDown switching in edit and read-only
|
|
340
441
|
preview,
|
|
341
442
|
one shared cell/worksheet context-menu surface with executable shortcut
|
|
@@ -389,6 +490,18 @@ ports.
|
|
|
389
490
|
and collaboration; the application shell and navigation; AI providers,
|
|
390
491
|
prompts, policy, and request lifecycle.
|
|
391
492
|
|
|
493
|
+
For collaborative surfaces, pass the host-owned typed Presence controller as
|
|
494
|
+
`presence` beside its exact `collaboration` session. Every editor projects the
|
|
495
|
+
same responsive participant roster across editing and preview chrome, including
|
|
496
|
+
human/agent identity, mode, activity, and a format-specific location summary.
|
|
497
|
+
Editors publish their local location and project remote locations without
|
|
498
|
+
writing them into canonical content: Document and Markdown render text
|
|
499
|
+
selections/carets, Spreadsheet uses Fortune Sheet's native cell-presence layer,
|
|
500
|
+
Presentation frames stable object IDs, and PDF identifies peers on the current
|
|
501
|
+
page or annotation. A remote roster row explicitly navigates and focuses that
|
|
502
|
+
location; passive Awareness updates never move the local selection, viewport,
|
|
503
|
+
or focus. The host continues to synchronize Awareness and own both lifecycles.
|
|
504
|
+
|
|
392
505
|
Document and Markdown selection menus can be replaced with host-defined typed
|
|
393
506
|
actions. Each action receives an immutable selection snapshot, nearby text,
|
|
394
507
|
the complete controlled content, and conflict-aware `replaceText`,
|
|
@@ -419,6 +532,425 @@ const blankDeck = createArtifact('blank-presentation');
|
|
|
419
532
|
|
|
420
533
|
Use `downloadArtifact` to start a browser download or
|
|
421
534
|
`createArtifactBlob` when your application owns upload and persistence.
|
|
535
|
+
Imported DOCX artifacts are source-backed: safe source-only OPC parts,
|
|
536
|
+
content-type registrations, and relationships survive a regenerated export.
|
|
537
|
+
Persist the original Blob alongside the artifact and call `registerSourceBlob`
|
|
538
|
+
after a browser reload. If that source is unavailable, DOCX export fails
|
|
539
|
+
explicitly instead of silently dropping complex package state. The artifact's
|
|
540
|
+
source metadata carries a SHA-256 fingerprint, so registering a different DOCX
|
|
541
|
+
under the same artifact ID also fails. Generated core parts remain
|
|
542
|
+
authoritative; compatibility diagnostics identify known inline OOXML
|
|
543
|
+
normalization and the deliberate removal of invalid signatures, VBA, ActiveX,
|
|
544
|
+
and custom-ribbon parts. Within `word/settings.xml`, relationship-free
|
|
545
|
+
ignorable attributes, elements, and structurally valid, non-conflicting
|
|
546
|
+
`mc:AlternateContent` blocks survive strict or transitional UTF-8/UTF-16
|
|
547
|
+
sources. Generated Word settings still win, and this preservation does not yet
|
|
548
|
+
restore behavior-changing settings. Regenerated `word/styles.xml` and
|
|
549
|
+
`word/numbering.xml` also retain relationship-free passive extensions at the
|
|
550
|
+
root and on uniquely matched identities. Styles match by type plus style ID;
|
|
551
|
+
imported abstract-numbering, concrete-numbering, and level metadata follows
|
|
552
|
+
regenerated IDs. Source-only or duplicate identities, malformed trees,
|
|
553
|
+
relationship-bound content, and ambiguous one-to-many numbering mappings are
|
|
554
|
+
dropped. Generated Word style and numbering semantics still win. In regenerated
|
|
555
|
+
document, header, footer, footnote, and endnote parts, relationship-free passive
|
|
556
|
+
extensions from non-OOXML ignorable namespaces also follow uniquely matched
|
|
557
|
+
picture drawings, using normalized anchor and drawing-property IDs. Body,
|
|
558
|
+
header, footer, footnote, and endnote imports retain those image identities in
|
|
559
|
+
sanitized editable HTML. Passive extensions also follow uniquely matched,
|
|
560
|
+
unchanged paragraphs and their paragraph properties by native `w14:paraId`
|
|
561
|
+
plus `w14:textId`. Body and page-chrome HTML
|
|
562
|
+
retain these identities; text edits rotate `textId`, formatting-only edits and
|
|
563
|
+
moves keep it, and copies or splits receive new paragraph IDs. Source-only,
|
|
564
|
+
duplicate, changed-text, relationship-bound, Microsoft/OOXML semantic, and
|
|
565
|
+
ambiguous branches are dropped; generated paragraph and drawing semantics stay
|
|
566
|
+
authoritative. Office 2013 `w15:collapsed` paragraph metadata also round-trips
|
|
567
|
+
through body and page-chrome HTML as `data-office-default-collapsed`. Import
|
|
568
|
+
accepts only an empty leaf or the exact core Word `w:val` lexicals `true`,
|
|
569
|
+
`on`, `1`, `false`, `off`, and `0`; an omitted value means true, while a
|
|
570
|
+
malformed or duplicated direct value fails closed instead of inheriting stale
|
|
571
|
+
state. Export canonicalizes explicit states to `1` or `0`, declares the Word
|
|
572
|
+
2012 namespace, and adds its prefix to `mc:Ignorable`. This metadata remains
|
|
573
|
+
native-only: browser content stays expanded and editable, without conflating
|
|
574
|
+
Word's initial collapsed-heading view with navigation-pane state or hidden
|
|
575
|
+
text. Stable table hierarchies use native row `w14:paraId` plus
|
|
576
|
+
`w14:textId`, ordered directly owned row IDs for tables, and directly owned
|
|
577
|
+
paragraph IDs for cells. Passive extensions on `w:tbl`/`w:tblPr`,
|
|
578
|
+
`w:tr`/`w:trPr`, and `w:tc`/`w:tcPr` survive body or page-chrome regeneration.
|
|
579
|
+
Row text or structural edits rotate the row version; formatting-only edits and
|
|
580
|
+
moves retain it, copies receive independent IDs, and nested rows or cells are
|
|
581
|
+
isolated from their outer table. Duplicate or cross-kind identities and unsafe
|
|
582
|
+
extension branches fail closed, while generated table geometry and formatting
|
|
583
|
+
win. Imported footnotes and endnotes now retain their native positive `w:id`
|
|
584
|
+
across reorderings, while copies receive independent IDs. Signed native comment
|
|
585
|
+
and reply IDs, reply parentage, and resolved state also survive regeneration.
|
|
586
|
+
Native DrawingML pictures inside footnotes and endnotes retain their identity,
|
|
587
|
+
layout, wrapping, crop, and layer metadata through public import and artifact
|
|
588
|
+
export. Export repairs missing image relationships in generated note parts,
|
|
589
|
+
allocates collision-free relationship IDs, and validates each media payload.
|
|
590
|
+
Changed, duplicate, namespace-spoofed, relationship-bound, or semantic drawing
|
|
591
|
+
branches stay disconnected; generated geometry and media remain authoritative,
|
|
592
|
+
while legacy VML, shapes, and SmartArt normalize.
|
|
593
|
+
|
|
594
|
+
Supported native OMML equations now survive as bounded structured objects in
|
|
595
|
+
the document body, headers, footers, footnotes, and endnotes. Inline and display
|
|
596
|
+
math, Unicode runs with literal/normal-text semantics, math script/style,
|
|
597
|
+
manual-break, and alignment-point properties, common fractions, scripts,
|
|
598
|
+
left-side pre-sub/superscripts with empty script slots, radicals with optional
|
|
599
|
+
degrees, functions, n-ary operators, combining accents, overbars and underbars,
|
|
600
|
+
group characters with
|
|
601
|
+
explicit grouping-character placement and baseline justification, phantoms with
|
|
602
|
+
visible or hidden bases, independently zeroed width, ascent, or descent, and
|
|
603
|
+
transparent spacing, border boxes with independently visible edges and four
|
|
604
|
+
strike directions, semantic boxes with
|
|
605
|
+
operator-emulation, no-break, differential-spacing, manual-break, and alignment
|
|
606
|
+
properties, bounded rectangular matrices with explicit column alignment,
|
|
607
|
+
row-spacing and column-gap rules, and minimum column widths,
|
|
608
|
+
equation arrays with 1–64 rows, vertical base alignment, maximum/object
|
|
609
|
+
distribution, row-spacing rules, and `&` alignment/spacer markers, lower and
|
|
610
|
+
upper limit objects, and delimiters regenerate as `m:oMath` or `m:oMathPara` and
|
|
611
|
+
render an accessible MathML preview. Bar placement preserves the distinct OMML
|
|
612
|
+
defaults for an omitted `barPr` and an omitted `pos`. Group-character
|
|
613
|
+
normalization separately preserves an absent `chr` as U+23DF, an explicitly
|
|
614
|
+
empty `chr`, bottom `pos`, and the absent-versus-empty `vertJc` defaults.
|
|
615
|
+
Phantom normalization preserves the visible `show` default and disabled
|
|
616
|
+
`zeroWid`, `zeroAsc`, `zeroDesc`, and `transp` defaults; MathML preview uses
|
|
617
|
+
`mphantom` and `mpadded` without discarding the native spacing properties.
|
|
618
|
+
Pre-scripts preserve required `sub`, `sup`, and `e` ordering and map empty left
|
|
619
|
+
script slots to MathML `none` children after `mprescripts`.
|
|
620
|
+
Right-side `sSup`, `sSub`, and `sSubSup` objects enforce their property-first
|
|
621
|
+
argument order. `sSubSupPr` preserves `alnScr`, canonicalizes its absent or
|
|
622
|
+
disabled value to unaligned scripts, and retains the enabled state through
|
|
623
|
+
native export. Supported fraction, script, limit, radical, function, n-ary,
|
|
624
|
+
accent, bar, group-character, phantom, border-box, box, matrix,
|
|
625
|
+
equation-array, and delimiter property containers preserve one optional ordered
|
|
626
|
+
`m:ctrlPr` control format through the same bounded Word run-property model.
|
|
627
|
+
The control may contain a direct `w:rPr` or bounded tracked provenance rooted
|
|
628
|
+
at `w:ins`, `w:del`, `w:moveFrom`, or `w:moveTo`. Each revision retains a
|
|
629
|
+
non-negative 32-bit `w:id`, a bounded `w:author`, an optional validated
|
|
630
|
+
`w:date`, and optional Microsoft 365 `w16du:dateUtc` with a UTC `Z` suffix.
|
|
631
|
+
Word's legal `moveFrom/moveTo -> ins/del` and `ins -> del` chains are
|
|
632
|
+
preserved, with the optional `w:rPr` at the deepest level. Every supported
|
|
633
|
+
`deg`, `den`, `e`, `fName`, `lim`, `num`, `sub`, and `sup` argument slot
|
|
634
|
+
preserves the same direct or revision-wrapped control format after its
|
|
635
|
+
expressions. Empty `ctrlPr` or direct `w:rPr` values canonicalize away, while
|
|
636
|
+
an empty revision remains native provenance. Safe object-control values project
|
|
637
|
+
only onto separable MathML control/operator nodes; argument-slot formatting and
|
|
638
|
+
all revision provenance remain native metadata because professional MathML has
|
|
639
|
+
neither linear-build control characters nor Word review/move-range semantics.
|
|
640
|
+
Document-level move-range pairing is not inferred from an isolated equation.
|
|
641
|
+
Matrix properties follow the ordered
|
|
642
|
+
`baseJc -> plcHide -> rSpRule -> cGpRule -> rSp -> cSp -> cGp -> mcs -> ctrlPr`
|
|
643
|
+
grammar. Row and column rules accept single, 1.5, double, exact, and multiple
|
|
644
|
+
spacing. `rSp` and `cGp` are bounded to 65,535, while the minimum column width
|
|
645
|
+
`cSp` is bounded to 31,680 twips. If any spacing property is
|
|
646
|
+
present, omitted or attribute-free peers take their Word defaults and native
|
|
647
|
+
export emits a complete canonical spacing group. Row spacing and column gaps
|
|
648
|
+
project to MathML `rowspacing` and `columnspacing`; `cSp` remains native-only
|
|
649
|
+
for layout because MathML `columnwidth` is a fixed width rather than Word's
|
|
650
|
+
minimum.
|
|
651
|
+
Fractions enforce optional `fPr` before required `num` and `den` arguments.
|
|
652
|
+
An absent `type` or an attribute-free `type` canonicalizes to `bar`; `noBar`,
|
|
653
|
+
`skw`, and `lin` remain distinct through native export and MathML projection.
|
|
654
|
+
Radicals enforce `radPr`, optional `deg`, and `e` ordering. An omitted or empty
|
|
655
|
+
degree normalizes to a square root, while a visible nonempty degree remains an
|
|
656
|
+
nth root. Native export emits the canonical `radPr -> deg -> e` shape and uses
|
|
657
|
+
`degHide=1` with an empty degree slot for square roots.
|
|
658
|
+
Functions enforce optional `funcPr` before required `fName` and `e` slots. Both
|
|
659
|
+
required slots may be empty. Every supported `CT_OMathArg` slot may likewise be
|
|
660
|
+
empty and follows `argPr -> expressions -> ctrlPr`. Its optional trailing
|
|
661
|
+
`ctrlPr` retains one bounded direct or revision-wrapped Word control; fixed
|
|
662
|
+
slots use named metadata, while matrix cells, equation-array rows, and delimiter
|
|
663
|
+
arguments use strictly dimension-aligned metadata. Absent or empty
|
|
664
|
+
argument/control properties and
|
|
665
|
+
absent, empty, or zero `argSz` values normalize to the default. Bounded
|
|
666
|
+
`argSz` values from -2 through 2 round-trip as relative argument sizes. The
|
|
667
|
+
Word-effective `box/e`, `groupChr/e`, `limLow/lim`, `limUpp/lim`, `nary/sub`,
|
|
668
|
+
`nary/sup`, `rad/deg`, `sPre/sub`, `sPre/sup`, `sSub/sub`, `sSubSup/sub`,
|
|
669
|
+
`sSubSup/sup`, and `sSup/sup` pairs project to inverse-sign relative MathML
|
|
670
|
+
`scriptlevel`; valid sizes in other argument slots remain native metadata.
|
|
671
|
+
Out-of-range or malformed sizes, duplicate or misplaced properties, malformed
|
|
672
|
+
control-revision identities or nesting, and semantic argument properties fail
|
|
673
|
+
closed.
|
|
674
|
+
N-ary operators enforce optional `naryPr` before required `sub`, `sup`, and `e`
|
|
675
|
+
slots. An omitted `chr` defaults to U+222B, while an attribute-free `chr`
|
|
676
|
+
remains an explicitly empty unsupported operator; an attribute-free `limLoc`
|
|
677
|
+
defaults to `undOvr`. Omitted or disabled `grow` values normalize to the
|
|
678
|
+
non-growing default; an attribute-free or enabled `grow` round-trips and maps
|
|
679
|
+
to MathML `stretchy=true`. Native export always emits both limit slots with
|
|
680
|
+
`subHide` or `supHide` for absent scripts.
|
|
681
|
+
Delimiters require optional `dPr` before 1–32 `e` arguments and preserve empty
|
|
682
|
+
argument slots. Their properties follow
|
|
683
|
+
`begChr -> sepChr -> endChr -> grow -> shp -> ctrlPr`; omitted characters
|
|
684
|
+
normalize to `(`, U+2502, and `)`, while attribute-free character properties
|
|
685
|
+
remain explicitly empty. Omitted or enabled `grow` and omitted, attribute-free,
|
|
686
|
+
or `centered` shapes canonicalize to the growing centered defaults. Non-growing
|
|
687
|
+
and `match` shapes round-trip in schema order. MathML projects fixed delimiters
|
|
688
|
+
with `stretchy=false` and content-matched growing delimiters with
|
|
689
|
+
`symmetric=false`; Word ignores shape while delimiter growth is disabled.
|
|
690
|
+
Display equations preserve `left`, `right`, `center`, and `centerGroup`
|
|
691
|
+
paragraph justification. The bounded native grammar accepts one optional
|
|
692
|
+
`m:oMathParaPr` before one `m:oMath`, while absent properties, absent `m:jc`,
|
|
693
|
+
and an attribute-free `m:jc` all canonicalize to the `centerGroup` default.
|
|
694
|
+
Math-run properties preserve the ordered `lit`, `nor`, `scr`, `sty`, `brk`, and
|
|
695
|
+
`aln` grammar, canonicalize Roman/italic and disabled defaults, bound `alnAt` to
|
|
696
|
+
1–255, and project supported script/style combinations through MathML
|
|
697
|
+
`mathvariant` while retaining native break and alignment metadata.
|
|
698
|
+
Math runs also preserve the native `m:rPr -> w:rPr -> m:t/w:t` order. The
|
|
699
|
+
bounded Word run-property subset covers direct and theme font references,
|
|
700
|
+
Latin and complex-script bold/italic flags, all-caps and small-caps
|
|
701
|
+
presentation, strike and double-strike, outline, shadow, emboss, imprint,
|
|
702
|
+
proofing/grid flags, hidden and web-hidden states, direct and theme colors with
|
|
703
|
+
tint/shade, signed character
|
|
704
|
+
spacing through 31,680 twips, 1–600% horizontal scaling, half-point kerning
|
|
705
|
+
thresholds and signed baseline positions, half-point font sizes, colored
|
|
706
|
+
underline styles, all seven legacy text-animation values, all 27 line-border
|
|
707
|
+
styles with direct/theme colors, 2–96 eighth-point widths, 0–31 point spacing,
|
|
708
|
+
and explicit shadow/frame flags, all named highlight colors, complete patterned
|
|
709
|
+
run shading with direct or theme foreground/background colors, manual run
|
|
710
|
+
widths from 0 through 31,680 twips with optional signed 32-bit grouping IDs,
|
|
711
|
+
explicit baseline/superscript/subscript run alignment, all five Word
|
|
712
|
+
emphasis-mark values (`none`, `dot`, `comma`, `circle`, and `underDot`),
|
|
713
|
+
RTL/complex-script flags, Latin, East Asian, and bidi language tags, and East
|
|
714
|
+
Asian typography metadata with optional signed 32-bit run IDs, two-lines-in-one
|
|
715
|
+
flags, all five enclosing-bracket styles, horizontal-in-vertical rotation, and
|
|
716
|
+
rotated-text compression, plus explicit paragraph-mark always-hidden/reset
|
|
717
|
+
flags and Office 2010 text glow, shadow, reflection, text-outline, text-fill,
|
|
718
|
+
3D-scene, and 3D-property effects plus all 16 ligature combinations, all three
|
|
719
|
+
numeral forms, all three numeral-spacing modes, bounded lists of all 20
|
|
720
|
+
OpenType stylistic sets, and explicit contextual-alternate enable/reset values.
|
|
721
|
+
Glow preserves an optional
|
|
722
|
+
0 through
|
|
723
|
+
2,147,483,647 EMU
|
|
724
|
+
radius, exactly
|
|
725
|
+
one RGB or 17-slot theme color source, and up to 64 ordered, repeatable tint,
|
|
726
|
+
shade, alpha, hue-modulation, saturation, and luminance transform entries.
|
|
727
|
+
The distinct Office 2010 shadow effect preserves the same color model plus
|
|
728
|
+
optional 0 through 2,147,483,647 EMU blur and offset coordinates, a direction
|
|
729
|
+
from 0 inclusive to 360 degrees exclusive, signed horizontal and vertical
|
|
730
|
+
scales, skew angles strictly between -90 and 90 degrees, and all ten rectangle
|
|
731
|
+
alignments. Angles retain exact 1/60,000-degree units and scales retain exact
|
|
732
|
+
1/1,000-percent units.
|
|
733
|
+
The leaf Office 2010 reflection effect preserves optional blur and distance
|
|
734
|
+
coordinates, start/end opacity and position from 0 through 100 percent,
|
|
735
|
+
direction and fade direction from 0 inclusive to 360 degrees exclusive,
|
|
736
|
+
signed horizontal and vertical scales, skew angles strictly between -90 and 90
|
|
737
|
+
degrees, and the same ten rectangle alignments. Angles retain exact
|
|
738
|
+
1/60,000-degree units, while opacity, positions, and scales retain exact
|
|
739
|
+
1/1,000-percent units.
|
|
740
|
+
The structured Office 2010 text-outline effect preserves an optional width from
|
|
741
|
+
0 through 20,116,800 EMUs, all three line caps, five compound-line styles, and
|
|
742
|
+
both pen alignments. Its fill choice remains distinct among none, solid, and
|
|
743
|
+
gradient fills. Solid fills and optional lists of 2 through 10 gradient stops
|
|
744
|
+
retain RGB or theme colors and ordered transforms. Gradient shading retains an
|
|
745
|
+
optional exact linear angle and scale flag or a path shape with an optional
|
|
746
|
+
signed 32-bit relative fill rectangle. All 11 preset dashes and round, bevel,
|
|
747
|
+
or miter joins survive, including an optional exact nonnegative miter limit.
|
|
748
|
+
The Office 2010 text-fill effect reuses the same strict fill grammar without
|
|
749
|
+
outline geometry. It preserves explicit no-fill, empty or colored solid-fill,
|
|
750
|
+
and empty or bounded gradient-fill choices, including the same colors,
|
|
751
|
+
transforms, stop limits, shade geometry, and exact units.
|
|
752
|
+
The Office 2010 3D scene preserves all 62 camera presets, all 27 light-rig
|
|
753
|
+
presets, and all eight light directions. Its required camera then light-rig
|
|
754
|
+
structure remains exact; only the light rig may contain an optional rotation,
|
|
755
|
+
whose latitude, longitude, and revolution each retain exact 1/60,000-degree
|
|
756
|
+
units from 0 inclusive to 360 degrees exclusive.
|
|
757
|
+
The Office 2010 3D properties preserve optional extrusion height and contour
|
|
758
|
+
width from 0 through 2,147,483,647 EMUs, all 16 material presets, optional top
|
|
759
|
+
and bottom bevels with independently optional bounded width and height plus all
|
|
760
|
+
12 bevel presets, and ordered extrusion and contour RGB/theme colors with the
|
|
761
|
+
same bounded transform chains. The exact
|
|
762
|
+
`bevelT -> bevelB -> extrusionClr -> contourClr` order remains intact.
|
|
763
|
+
The Office 2010 ligature leaf requires one exact value and preserves every
|
|
764
|
+
combination of standard, contextual, historical, and discretional OpenType
|
|
765
|
+
ligatures, including explicit `none` and `all` values.
|
|
766
|
+
The Office 2010 numeral-form leaf likewise requires one exact value and retains
|
|
767
|
+
the font default, lining numerals, or oldstyle numerals without conflating an
|
|
768
|
+
explicit default reset with omission.
|
|
769
|
+
The Office 2010 numeral-spacing leaf also requires one exact value and retains
|
|
770
|
+
the font default, proportional numerals, or tabular numerals without conflating
|
|
771
|
+
an explicit default reset with omission.
|
|
772
|
+
The Office 2010 stylistic-set container accepts up to 4,096 raw entries and
|
|
773
|
+
canonicalizes enabled IDs from 1 through 20 into a unique list in first-enabled
|
|
774
|
+
order. An omitted `w14:val`, `true`, or `1` enables an entry; `false` or `0`
|
|
775
|
+
does not enable it.
|
|
776
|
+
The leaf Office 2010 contextual-alternates property has no child content and
|
|
777
|
+
accepts only the exact `true`, `false`, `1`, or `0` lexical values.
|
|
778
|
+
Explicit zero/default geometry values remain present so they can reset
|
|
779
|
+
inherited formatting. Strict universal font-size and position measures are
|
|
780
|
+
accepted only when they convert exactly to the bounded half-point model. Strict
|
|
781
|
+
universal manual widths are accepted only when they convert exactly to bounded
|
|
782
|
+
whole twips; omitted
|
|
783
|
+
grouping IDs remain distinct from explicit zero. Explicit baseline alignment
|
|
784
|
+
remains present so inherited superscript or subscript formatting can be reset;
|
|
785
|
+
explicit `none` emphasis likewise removes inherited emphasis marks.
|
|
786
|
+
Empty `w:eastAsianLayout` elements canonicalize away, while omitted flags stay
|
|
787
|
+
distinct from explicit `false` resets and signed run IDs retain explicit zero.
|
|
788
|
+
An empty `w:specVanish` is canonicalized to `true`; omission remains distinct
|
|
789
|
+
from an explicit `false` inheritance reset.
|
|
790
|
+
An omitted `w14:glow/@w14:rad` retains the schema default of zero while an
|
|
791
|
+
explicit zero remains present. Glow export declares the Office 2010 namespace
|
|
792
|
+
and adds its prefix to `mc:Ignorable` without replacing existing tokens.
|
|
793
|
+
Omitted `w14:shadow` geometry retains its zero/`none` schema defaults while
|
|
794
|
+
explicit zero and `none` values remain present; this effect stays distinct from
|
|
795
|
+
the legacy `w:shadow` on/off property.
|
|
796
|
+
A present empty `w14:reflection` remains distinct from omission. Its omitted
|
|
797
|
+
geometry retains zero/`none` schema defaults while explicit zero and `none`
|
|
798
|
+
values remain present.
|
|
799
|
+
A present empty `w14:textOutline` also remains distinct from omission and keeps
|
|
800
|
+
the schema's bevel default. Omitted fill, dash, and join choices retain their
|
|
801
|
+
defaults, while explicit zero/default attributes and empty child choices remain
|
|
802
|
+
present.
|
|
803
|
+
A missing `w14:textFill` continues to use `w:color`. A present empty text fill,
|
|
804
|
+
an empty solid fill, or a gradient without a stop list remains distinct and
|
|
805
|
+
retains its schema-defined black default.
|
|
806
|
+
A present empty `w14:props3d` remains distinct from omission and retains zero
|
|
807
|
+
extrusion and contour geometry, warm-matte material, and black color defaults.
|
|
808
|
+
Attribute-free bevels likewise remain present with zero width/height and circle
|
|
809
|
+
defaults.
|
|
810
|
+
An omitted `w14:ligatures` uses Word's no-ligature default. A present leaf must
|
|
811
|
+
carry `w14:val`; explicit `none` remains present so it can reset inherited
|
|
812
|
+
formatting.
|
|
813
|
+
An omitted `w14:numForm` uses the font's default numeral form. A present leaf
|
|
814
|
+
must carry `w14:val`, and explicit `default` remains present as an inheritance
|
|
815
|
+
reset.
|
|
816
|
+
An omitted `w14:stylisticSets` enables no stylistic sets. A present empty
|
|
817
|
+
container remains explicit so it can reset inherited sets; export emits one
|
|
818
|
+
canonical attribute-free `w14:styleSet` child for each enabled ID.
|
|
819
|
+
An omitted `w14:cntxtAlts` uses Word's disabled default. A present leaf with no
|
|
820
|
+
`w14:val` means `true`; explicit `false` remains present as an inheritance
|
|
821
|
+
reset, and export canonicalizes both states to `1` or `0`.
|
|
822
|
+
Explicit on/off values remain distinct, export uses canonical
|
|
823
|
+
`m:rPr -> w:rPr -> m:t`, and the MathML preview projects safe direct color,
|
|
824
|
+
exact transform-free Office 2010 RGB text fills and black fill defaults,
|
|
825
|
+
background, size, font, direction, language, emphasis, decoration, character
|
|
826
|
+
spacing, width, effective kerning, baseline-shift,
|
|
827
|
+
baseline/superscript/subscript alignment, Word emphasis marks, all-caps, and
|
|
828
|
+
small-caps values without changing source Unicode text. Emphasis marks project
|
|
829
|
+
as filled dots, a literal comma, or an open circle above the text, or a filled
|
|
830
|
+
dot below it. Superscript and subscript also project the smaller rendered size
|
|
831
|
+
required by Word. When `w:position` and `w:vertAlign` coexist, both remain in
|
|
832
|
+
native schema order and the later explicit alignment controls the CSS vertical
|
|
833
|
+
position. All 16 explicit ligature values map exactly to the OpenType `liga`,
|
|
834
|
+
`clig`, `hlig`, and `dlig` tags. Those controls compose with stylistic-set IDs
|
|
835
|
+
in exactly one CSS `font-feature-settings` declaration, using `"ss01" 1`
|
|
836
|
+
through `"ss20" 1`; an explicit empty stylistic-set list emits `normal` when
|
|
837
|
+
there are no ligature controls. `w14:cntxtAlts` maps independently to CSS
|
|
838
|
+
`font-variant-ligatures: contextual` or `no-contextual`, which controls the
|
|
839
|
+
OpenType `calt` feature without conflating it with the `clig` contextual
|
|
840
|
+
ligature feature. Numeral forms and spacing
|
|
841
|
+
compose into exactly one CSS `font-variant-numeric` declaration: forms map to
|
|
842
|
+
`normal`, `lining-nums`, or `oldstyle-nums`, while spacing maps to `normal`,
|
|
843
|
+
`proportional-nums`, or `tabular-nums`. A default paired with a non-default
|
|
844
|
+
category emits only the non-default token; two explicit defaults emit `normal`.
|
|
845
|
+
`w:em` remains after `w:rtl`/`w:cs` and before
|
|
846
|
+
`w:lang`, while
|
|
847
|
+
`w:eastAsianLayout` remains after `w:lang`, `w:specVanish` follows it,
|
|
848
|
+
`w14:glow` follows `w:specVanish`, `w14:shadow` follows `w14:glow`, and
|
|
849
|
+
`w14:reflection` follows `w14:shadow`, followed by `w14:textOutline`,
|
|
850
|
+
`w14:textFill`, `w14:scene3d`, `w14:props3d`, `w14:ligatures`, `w14:numForm`,
|
|
851
|
+
`w14:numSpacing`, `w14:stylisticSets`, and `w14:cntxtAlts`. Simple
|
|
852
|
+
explicitly sized solid, double, dotted, dashed, inset, and outset line borders
|
|
853
|
+
project through CSS with direct or automatic color and point padding; explicit
|
|
854
|
+
`nil`/`none` resets also project. Outline, shadow, emboss, imprint, legacy text
|
|
855
|
+
animations, complex
|
|
856
|
+
multi-line, wavy, or 3D line borders, border shadow/frame, theme-only border
|
|
857
|
+
colors, hidden, and web-hidden values remain native-only because Word rendering
|
|
858
|
+
and view settings govern them. Manual run widths also remain native-only
|
|
859
|
+
because Word ignores `w:fitText` inside Office Math, so the MathML preview
|
|
860
|
+
deliberately does not emulate them.
|
|
861
|
+
East Asian two-lines-in-one, enclosing brackets, horizontal-in-vertical
|
|
862
|
+
rotation, and rotated-text compression also remain native-only. CSS
|
|
863
|
+
`text-combine-upright`, writing modes, and transforms do not preserve Word's
|
|
864
|
+
two-sub-line distribution or its left-rotated inline line box, so approximating
|
|
865
|
+
them would introduce layout drift.
|
|
866
|
+
`w:specVanish` also remains native-only and never hides an equation preview.
|
|
867
|
+
The standard limits its display semantics to paragraph marks and allows it to
|
|
868
|
+
be ignored on any other run; Word additionally ignores it unless `w:vanish` is
|
|
869
|
+
set. Schema-valid values are still retained without inventing that dependency.
|
|
870
|
+
Office 2010 glow, shadow, reflection, text-outline, 3D-scene, and 3D-property
|
|
871
|
+
effects also remain native-only. CSS `text-shadow`, reflection, opacity, perspective,
|
|
872
|
+
transform, text-stroke, paint-order, and border approximations cannot preserve
|
|
873
|
+
theme-bound colors,
|
|
874
|
+
ordered color transforms, exact blur and offset coordinates, reflection
|
|
875
|
+
opacity/position/fade geometry, signed scaling and skew, rectangle alignment,
|
|
876
|
+
gradient or compound strokes, preset dashes, caps, joins, or pen alignment, so
|
|
877
|
+
previews retain readable equation text without inventing a visually misleading
|
|
878
|
+
effect.
|
|
879
|
+
Text `noFill`, theme or transformed text-fill colors, and nonempty gradients
|
|
880
|
+
remain native-only when no exact MathML color exists. CSS transparent text or
|
|
881
|
+
background-clipped gradient approximations would make previews fragile, so the
|
|
882
|
+
underlying readable color remains the fallback.
|
|
883
|
+
`w:highlight` takes display precedence over `w:shd`; named highlights, explicit
|
|
884
|
+
highlight removal, clear direct fills, solid direct foregrounds, and nil
|
|
885
|
+
shading map to MathML `mathbackground`. Pattern masks and theme-only colors
|
|
886
|
+
remain native metadata when no exact browser color is available.
|
|
887
|
+
Enabled mutually exclusive all-caps/small-caps, strike/double-strike, or relief
|
|
888
|
+
combinations, invalid animation values, art-border styles, out-of-range border
|
|
889
|
+
width/spacing, malformed border colors/flags, missing, malformed, fractional,
|
|
890
|
+
or out-of-range manual widths and grouping IDs, missing or unknown
|
|
891
|
+
vertical-alignment or emphasis-mark values, malformed or out-of-range East
|
|
892
|
+
Asian layout IDs, flags, or bracket styles, malformed paragraph-mark visibility
|
|
893
|
+
flags, malformed glow radii, shadow or reflection geometry, text-outline
|
|
894
|
+
fill/gradient/dash/join structure, text-fill wrapper/fill/gradient structure,
|
|
895
|
+
color choices or transform chains, 3D-scene camera/light structure,
|
|
896
|
+
3D-property extrusion/contour/bevel/color structure, bounded coordinates,
|
|
897
|
+
missing or malformed ligature values, non-leaf ligature content, preset values,
|
|
898
|
+
missing or malformed numeral-form values, non-leaf numeral-form content,
|
|
899
|
+
missing or malformed numeral-spacing values, non-leaf numeral-spacing content,
|
|
900
|
+
malformed or over-limit stylistic-set containers, entries, IDs, or on/off
|
|
901
|
+
values, malformed or non-leaf contextual-alternate values, directions, or
|
|
902
|
+
rotation angles, and unknown, duplicated, reordered,
|
|
903
|
+
namespace-spoofed, or relationship-bound Word run properties fail
|
|
904
|
+
closed instead of being silently discarded.
|
|
905
|
+
Border-box, box, and equation-array flags retain their semantic defaults, and
|
|
906
|
+
manual-break alignment indices are bounded to 1–255. Strict and transitional
|
|
907
|
+
UTF-8/UTF-16 math is normalized for editing. Invalid or non-combining accent
|
|
908
|
+
characters, malformed math-run or function structures, invalid or contradictory
|
|
909
|
+
fraction, radical, n-ary, delimiter, bar, group-character, phantom, border-box,
|
|
910
|
+
box, or equation-array properties,
|
|
911
|
+
malformed script-property, pre-script, math-paragraph, or lower/upper limit
|
|
912
|
+
structures,
|
|
913
|
+
malformed, duplicated, reordered, or out-of-range matrix spacing/gap
|
|
914
|
+
properties, ragged or over-limit matrices,
|
|
915
|
+
over-limit equation arrays,
|
|
916
|
+
malformed, misplaced, over-budget, namespace-spoofed, nested, or
|
|
917
|
+
relationship-bound math is flattened to bounded text and reported instead of
|
|
918
|
+
being trusted or silently attached to another equation.
|
|
919
|
+
Relationship-free passive extensions on uniquely matched `w:footnote`,
|
|
920
|
+
`w:endnote`, `w:comment`, and `w15:commentEx` roots are retained, and valid
|
|
921
|
+
`commentsIds` durable IDs are rebound to each regenerated final comment
|
|
922
|
+
paragraph. Duplicate or namespace-spoofed identities, deleted semantic records,
|
|
923
|
+
relationship-bound branches, and unsupported modern reaction/people sidecars
|
|
924
|
+
fail closed. Within uniquely matched note, comment, and reply records,
|
|
925
|
+
text-stable direct paragraphs and runs retain eligible passive extensions on
|
|
926
|
+
`w:p`, `w:r`, and `w:rPr`. Safe unmodeled note properties also survive, while
|
|
927
|
+
unchanged plain-text comments recover relationship-free source run boundaries
|
|
928
|
+
and formatting. Stable `w:hyperlink` wrappers now retain safe tooltips and
|
|
929
|
+
passive metadata. Generated note destinations remain authoritative; unchanged
|
|
930
|
+
comments and replies recover validated HTTP(S), `mailto`, or internal-anchor
|
|
931
|
+
destinations, with external relationship IDs deduplicated or rewritten after
|
|
932
|
+
collisions. Text-stable static rich-text and plain-text content controls also
|
|
933
|
+
recover eligible inline or contiguous block wrappers, aliases, tags, locking,
|
|
934
|
+
signed IDs, Word 2013 appearance and color, end-character formatting, passive
|
|
935
|
+
metadata, and stable runs. Editable footnote and endnote tables now regenerate
|
|
936
|
+
as native `w:tbl` blocks rather than flattened row text. Rich-text block
|
|
937
|
+
controls can safely span structurally stable paragraphs, tables, and nested
|
|
938
|
+
tables; matching includes row/cell shape, grid spans, merge state, nested block
|
|
939
|
+
shape, and exact paragraph text while generated table geometry wins. Colliding
|
|
940
|
+
control IDs are rewritten while unconflicted source IDs remain stable. Text or
|
|
941
|
+
table-structure edits, duplicate paragraphs or properties, missing or malformed
|
|
942
|
+
hyperlink relationships, wrong target types or modes, unsafe or relative
|
|
943
|
+
targets, combined external-plus-anchor destinations, namespace spoofing,
|
|
944
|
+
active data bindings or placeholder state, form or nested controls,
|
|
945
|
+
relationship-bound content, math, drawing-bearing control wrappers, and other
|
|
946
|
+
unsupported wrappers fail closed or normalize instead of being attached to the
|
|
947
|
+
wrong content. Source font-table metadata and source-only internal obfuscated
|
|
948
|
+
font payloads are also retained, with relationship references rewritten after
|
|
949
|
+
ID collisions. External fonts, wrong relationship or content types, duplicate
|
|
950
|
+
identities, and paths that collide with generated payloads are not reconnected.
|
|
951
|
+
Native DOCX consumers can use the retained embedded fonts; the browser editor,
|
|
952
|
+
preview, and PDF renderer do not load document-embedded font binaries and may
|
|
953
|
+
substitute fonts or wrap text differently.
|
|
422
954
|
|
|
423
955
|
## Native automation
|
|
424
956
|
|
|
@@ -436,8 +968,10 @@ selected pages from one previously validated complete inventory without
|
|
|
436
968
|
rescanning the full document; render still revalidates the immutable source and
|
|
437
969
|
actual page profile before publication. The same retained inventory now
|
|
438
970
|
authorizes bounded native PDF text-layer extraction with source-order Unicode,
|
|
439
|
-
exact UTF-8/UTF-16 ranges, optional glyph boxes
|
|
440
|
-
|
|
971
|
+
exact UTF-8/UTF-16 ranges, optional glyph boxes, and PDFium-native same-line,
|
|
972
|
+
same-style runs with exact PDF-coordinate bounds. Independent character and run
|
|
973
|
+
limits keep the result bounded. Document outlines retain exact page targets.
|
|
974
|
+
Text and outline calls revalidate
|
|
441
975
|
the immutable source, reuse inventory authority, and return typed limit or
|
|
442
976
|
unsupported failures without OCR or Browser access. Richer slides and formats
|
|
443
977
|
without an authoritative provider remain typed unsupported instead of being
|
|
@@ -454,11 +988,112 @@ cargo run -p a3s-office-cli -- set report.docx /body --find Draft --replace Fina
|
|
|
454
988
|
|
|
455
989
|
# Start the standard MCP server
|
|
456
990
|
cargo run -p a3s-office-cli -- mcp
|
|
991
|
+
|
|
992
|
+
# Join a browser-owned Yjs document as a durable coding-agent replica.
|
|
993
|
+
cargo run -p a3s-office-cli -- collab join .a3s/report.replica \
|
|
994
|
+
--artifact-id report --kind document --actor-id agent-7 \
|
|
995
|
+
--operation-id join-1 --input browser.update --json
|
|
996
|
+
|
|
997
|
+
# Export only the CRDT state missing from a remote state vector.
|
|
998
|
+
cargo run -p a3s-office-cli -- collab diff .a3s/report.replica \
|
|
999
|
+
--state-vector-input browser.state-vector --output agent.update --json
|
|
1000
|
+
|
|
1001
|
+
# Bridge that replica to a host-owned room over machine-readable JSONL.
|
|
1002
|
+
cargo run -p a3s-office-cli -- collab session .a3s/report.replica \
|
|
1003
|
+
--poll-ms 100 --json
|
|
1004
|
+
|
|
1005
|
+
# Make a typed local change in an initialized Markdown replica. A running
|
|
1006
|
+
# session publishes the resulting incremental Yjs update automatically.
|
|
1007
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/notes.replica \
|
|
1008
|
+
--artifact-id notes --kind markdown --actor-id agent-7 --mode edit \
|
|
1009
|
+
--operation-id edit-42 \
|
|
1010
|
+
--mutation '{"type":"markdown-replace","markdown":"# Shared notes"}' --json
|
|
1011
|
+
|
|
1012
|
+
# Document text replacement is fail-closed: the shared XmlText must contain
|
|
1013
|
+
# exactly the declared number of non-overlapping matches.
|
|
1014
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/report.replica \
|
|
1015
|
+
--artifact-id report --kind document --actor-id agent-7 --mode edit \
|
|
1016
|
+
--operation-id edit-43 \
|
|
1017
|
+
--mutation '{"type":"document-replace-text","search":"Draft","replacement":"Final","expectedMatches":1}' --json
|
|
1018
|
+
|
|
1019
|
+
# Insert one plain paragraph beside a stable paragraph in a supported block
|
|
1020
|
+
# container, including a nested list item or table cell.
|
|
1021
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/report.replica \
|
|
1022
|
+
--artifact-id report --kind document --actor-id agent-7 --mode edit \
|
|
1023
|
+
--operation-id edit-44 \
|
|
1024
|
+
--mutation '{"type":"document-insert-paragraph","anchorParagraphId":"00000001","position":"after","paragraphId":"00000012","textId":"00000013","text":"Native paragraph"}' --json
|
|
1025
|
+
|
|
1026
|
+
# Set one PDF form value through its stable fully-qualified field name.
|
|
1027
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/application.replica \
|
|
1028
|
+
--artifact-id application --kind pdf --actor-id agent-7 --mode edit \
|
|
1029
|
+
--operation-id edit-45 \
|
|
1030
|
+
--mutation '{"type":"pdf-set-form-value","fieldId":"Applicant.Name","value":"Grace Hopper"}' --json
|
|
1031
|
+
|
|
1032
|
+
# Create one portable highlight on source page 1. The nested rect and
|
|
1033
|
+
# segmentRects use EmbedPDF's browser annotation geometry.
|
|
1034
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/application.replica \
|
|
1035
|
+
--artifact-id application --kind pdf --actor-id agent-7 --mode edit \
|
|
1036
|
+
--operation-id annotation-create-1 \
|
|
1037
|
+
--mutation '{"type":"pdf-create-annotation","annotationId":"annotation-1","pageIndex":0,"annotation":{"id":"annotation-1","pageIndex":0,"type":9,"rect":{"origin":{"x":68,"y":78},"size":{"width":300,"height":28}},"segmentRects":[{"origin":{"x":68,"y":78},"size":{"width":300,"height":28}}],"strokeColor":"#f59e0b","color":"#f59e0b","opacity":0.48,"contents":"Review this heading"}}' --json
|
|
1038
|
+
|
|
1039
|
+
# Append one attributable redaction proposal. Geometry is expressed in source
|
|
1040
|
+
# page coordinates and the replica actor becomes proposedBy.
|
|
1041
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/application.replica \
|
|
1042
|
+
--artifact-id application --kind pdf --actor-id agent-7 --mode edit \
|
|
1043
|
+
--operation-id edit-46 \
|
|
1044
|
+
--mutation '{"type":"pdf-propose-redaction","proposalId":"redaction-1","pageIndex":0,"rects":[{"left":10,"top":20,"right":80,"bottom":40}],"proposedAt":"2026-08-15T03:00:00.000Z","reason":"Personal data"}' --json
|
|
1045
|
+
|
|
1046
|
+
# Append the one final decision for that review target. The replica actor
|
|
1047
|
+
# becomes actorId; it is never accepted from caller-authored JSON.
|
|
1048
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/application.replica \
|
|
1049
|
+
--artifact-id application --kind pdf --actor-id agent-7 --mode edit \
|
|
1050
|
+
--operation-id edit-47 \
|
|
1051
|
+
--mutation '{"type":"pdf-decide-review","decisionId":"decision-1","targetKind":"redaction","targetId":"redaction-1","decision":"approve","createdAt":"2026-08-15T03:05:00.000Z"}' --json
|
|
1052
|
+
|
|
1053
|
+
# Propose a clockwise rotation for selected immutable source pages. Deletion
|
|
1054
|
+
# and complete reorder use pdf-propose-page-deletion/page-reorder.
|
|
1055
|
+
cargo run -p a3s-office-cli -- collab mutate .a3s/application.replica \
|
|
1056
|
+
--artifact-id application --kind pdf --actor-id agent-7 --mode edit \
|
|
1057
|
+
--operation-id edit-48 \
|
|
1058
|
+
--mutation '{"type":"pdf-propose-page-rotation","pageOperationId":"page-operation-1","pageIndices":[0,2],"degrees":90,"proposedAt":"2026-08-15T03:10:00.000Z"}' --json
|
|
457
1059
|
```
|
|
458
1060
|
|
|
459
1061
|
CLI, MCP, the typed Rust API, and the packaged Office Skill share the same
|
|
460
1062
|
bounded contracts. They inspect and modify files without launching desktop
|
|
461
|
-
Office or scraping editor UI.
|
|
1063
|
+
Office or scraping editor UI. The collaboration replica is transport-neutral:
|
|
1064
|
+
the host still owns rooms, authentication, authorization, and delivery. Browser
|
|
1065
|
+
Core also provides a bounded host-channel adapter for Yjs state-vector/update
|
|
1066
|
+
sync and a typed, ephemeral Awareness controller for participants and
|
|
1067
|
+
format-specific locations. React, Vue, and Web Components can project that
|
|
1068
|
+
controller as a shared participant roster, remote canvas projection, and
|
|
1069
|
+
participant-to-location navigation; neither component creates an account or
|
|
1070
|
+
backend. The native CLI's JSONL session bridges the same host-channel envelope,
|
|
1071
|
+
including reconnect handshakes, durable agent updates, and remote-echo
|
|
1072
|
+
suppression, without opening its own network provider. Typed Markdown
|
|
1073
|
+
replace/splice operations use browser UTF-16 offsets. Document mutations edit
|
|
1074
|
+
ProseMirror `Y.XmlText` in place, rotate the affected Word `textId`, insert a
|
|
1075
|
+
plain paragraph beside a stable identity in a bounded section, list-item,
|
|
1076
|
+
table-cell/header, or blockquote container, or delete one only after its
|
|
1077
|
+
complete text and `textId` still match. Required container blocks and each list
|
|
1078
|
+
item's leading paragraph are preserved. Text or structural edits inside a
|
|
1079
|
+
table rotate every identified ancestor row's `rowTextId`; incomplete row
|
|
1080
|
+
identities fail before any write. Paragraphs containing inline atoms or review
|
|
1081
|
+
marks remain guarded.
|
|
1082
|
+
Page-color/track-changes sidecars remain independent conflict-local fields. All
|
|
1083
|
+
mutations use the same durable event path. PDF annotation creation accepts the
|
|
1084
|
+
portable browser record for FreeText, Highlight, Underline, StrikeOut, or Ink,
|
|
1085
|
+
writes `source: created`, and commits its immutable claim atomically. An update
|
|
1086
|
+
supplies complete `expectedAnnotation` and `nextAnnotation` values; recursive
|
|
1087
|
+
optimistic matching merges unrelated concurrent leaves and rejects a stale
|
|
1088
|
+
same-leaf edit. Deletion supplies expected source/page/type identity and writes
|
|
1089
|
+
an irreversible tombstone. PDF form mutations update the same field-addressed
|
|
1090
|
+
presence/fields/order roots as the browser binding. PDF redaction and
|
|
1091
|
+
rotate/delete/reorder page-operation proposals plus final decisions append
|
|
1092
|
+
immutable typed records and canonical claims in one transaction, derive actor
|
|
1093
|
+
attribution from the replica, and reject invalid source-page sets, missing
|
|
1094
|
+
targets, or a second final decision. None of these paths puts source or
|
|
1095
|
+
signature bytes in Yjs. Validated browser source origins survive native
|
|
1096
|
+
persistence and are re-emitted separately from host delivery IDs.
|
|
462
1097
|
|
|
463
1098
|
Read the [native engine design](docs/latest/en/native-office-engine.md), the
|
|
464
1099
|
complete [CLI reference](docs/latest/en/cli-reference.md), or the published
|
|
@@ -523,9 +1158,13 @@ without hard-coded return URLs.
|
|
|
523
1158
|
|
|
524
1159
|
- [Live Playground](https://a3s-lab.github.io/Office/)
|
|
525
1160
|
- [Documentation center](https://a3s-lab.github.io/Office/docs/)
|
|
1161
|
+
- [A3S Office 0.4.0 documentation](https://a3s-lab.github.io/Office/docs/0.4.0/)
|
|
1162
|
+
- [A3S Office 0.3.0 documentation](https://a3s-lab.github.io/Office/docs/0.3.0/)
|
|
526
1163
|
- [A3S Office 0.2.0 documentation](https://a3s-lab.github.io/Office/docs/0.2.0/)
|
|
527
1164
|
- [A3S Office 0.1.0 documentation](https://a3s-lab.github.io/Office/docs/0.1.0/)
|
|
528
1165
|
- [React, Vue, and Web Component integration](https://a3s-lab.github.io/Office/docs/components/)
|
|
1166
|
+
- [Real-time collaboration](https://a3s-lab.github.io/Office/docs/en/components/collaboration.html)
|
|
1167
|
+
- [Collaboration delivery roadmap](COLLABORATION_ROADMAP.md)
|
|
529
1168
|
- [Office CLI and coding-agent Skill](https://a3s-lab.github.io/Office/docs/automation/)
|
|
530
1169
|
- [Browser editor architecture](docs/latest/en/browser-editor-architecture.md)
|
|
531
1170
|
- [Native Office engine](docs/latest/en/native-office-engine.md)
|