@a3s-lab/office 0.48.0 → 0.49.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 +14 -6
- package/README.md +26 -0
- package/dist/{0~3320.js → 0~5600.js} +271 -13
- package/dist/0~controlled-editor-composition.js +167 -15
- package/dist/0~document-editor.js +65 -10
- package/dist/0~work-docx-export.js +143 -9
- package/dist/0~work-docx-import.js +5 -120
- package/dist/0~work-office-diagnostics.js +16 -5
- package/dist/4174.js +93 -8
- package/dist/internal/features/work/editors/controlled-editor-composition.d.ts +53 -7
- package/dist/internal/features/work/editors/use-document-pagination.d.ts +3 -1
- package/dist/internal/features/work/work-document-changes.d.ts +4 -2
- package/dist/internal/features/work/work-docx-change-import.d.ts +10 -1
- package/dist/internal/features/work/work-docx-move-revision-export.d.ts +35 -0
- package/dist/internal/features/work/work-types.d.ts +3 -1
- package/dist/office-kernel.wasm +0 -0
- package/dist/styles.css +42 -0
- package/docs/latest/en/browser-editor-architecture.md +14 -2
- package/package.json +11 -3
package/dist/styles.css
CHANGED
|
@@ -7650,6 +7650,39 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
7650
7650
|
min-width: 12px;
|
|
7651
7651
|
}
|
|
7652
7652
|
|
|
7653
|
+
.work-document-selection-toolbar .work-document-underline-split-root > button, .work-document-selection-toolbar .work-document-strike-split-root > button {
|
|
7654
|
+
color: var(--a3s-muted);
|
|
7655
|
+
cursor: pointer;
|
|
7656
|
+
appearance: none;
|
|
7657
|
+
touch-action: manipulation;
|
|
7658
|
+
background: none;
|
|
7659
|
+
border: 1px solid #0000;
|
|
7660
|
+
flex: none;
|
|
7661
|
+
place-items: center;
|
|
7662
|
+
margin: 0;
|
|
7663
|
+
display: inline-grid;
|
|
7664
|
+
}
|
|
7665
|
+
|
|
7666
|
+
.work-document-selection-toolbar .work-document-underline-split-root > button:hover, .work-document-selection-toolbar .work-document-strike-split-root > button:hover {
|
|
7667
|
+
border-color: var(--a3s-line);
|
|
7668
|
+
background: var(--a3s-panel-soft);
|
|
7669
|
+
color: var(--a3s-ink);
|
|
7670
|
+
}
|
|
7671
|
+
|
|
7672
|
+
.work-document-selection-toolbar .work-document-underline-split-root > button[aria-pressed="true"], .work-document-selection-toolbar .work-document-strike-split-root > button[aria-pressed="true"] {
|
|
7673
|
+
border-color: color-mix(in srgb,
|
|
7674
|
+
var(--work-office-accent) 28%,
|
|
7675
|
+
var(--a3s-line));
|
|
7676
|
+
background: color-mix(in srgb,
|
|
7677
|
+
var(--work-office-accent) 11%,
|
|
7678
|
+
var(--a3s-panel));
|
|
7679
|
+
color: var(--work-office-accent);
|
|
7680
|
+
}
|
|
7681
|
+
|
|
7682
|
+
.work-document-selection-toolbar .work-document-underline-split-root > .work-document-underline-primary, .work-document-selection-toolbar .work-document-strike-split-root > .work-document-strike-primary, .work-document-selection-toolbar .work-document-underline-split-root > .work-document-underline-primary:hover, .work-document-selection-toolbar .work-document-strike-split-root > .work-document-strike-primary:hover, .work-document-selection-toolbar .work-document-underline-split-root > .work-document-underline-primary[aria-pressed="true"], .work-document-selection-toolbar .work-document-strike-split-root > .work-document-strike-primary[aria-pressed="true"] {
|
|
7683
|
+
border-right-color: #0000;
|
|
7684
|
+
}
|
|
7685
|
+
|
|
7653
7686
|
.work-document-selection-toolbar > .work-document-underline-control {
|
|
7654
7687
|
gap: 0;
|
|
7655
7688
|
height: 28px;
|
|
@@ -9223,6 +9256,10 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
9223
9256
|
border-left-color: #0f7b78;
|
|
9224
9257
|
}
|
|
9225
9258
|
|
|
9259
|
+
.work-document-change-item.move {
|
|
9260
|
+
border-left-color: #b06a1f;
|
|
9261
|
+
}
|
|
9262
|
+
|
|
9226
9263
|
.work-document-change-summary {
|
|
9227
9264
|
min-width: 0;
|
|
9228
9265
|
color: var(--a3s-ink);
|
|
@@ -9259,6 +9296,11 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
9259
9296
|
background: #e5f5f3;
|
|
9260
9297
|
}
|
|
9261
9298
|
|
|
9299
|
+
.work-document-change-list .work-document-change-item.move .work-document-change-summary > span {
|
|
9300
|
+
color: #8a4f0f;
|
|
9301
|
+
background: #fff3df;
|
|
9302
|
+
}
|
|
9303
|
+
|
|
9262
9304
|
.work-document-change-summary strong {
|
|
9263
9305
|
text-overflow: ellipsis;
|
|
9264
9306
|
white-space: nowrap;
|
|
@@ -283,6 +283,14 @@ DOCX import/export maps that model to strict or transitional `w:pPrChange`,
|
|
|
283
283
|
while Yjs stores the same node attributes and immutable decision audit without a
|
|
284
284
|
parallel transport model.
|
|
285
285
|
|
|
286
|
+
Text-only move revisions are a paired inline concern rather than two unrelated
|
|
287
|
+
insert/delete cards. A `move` identity keeps explicit `from` and `to` roles;
|
|
288
|
+
review navigation targets the destination side, while accept or reject validates
|
|
289
|
+
and resolves both equal-text sides in one transaction. Native DOCX import/export
|
|
290
|
+
maps the pair to strict or transitional `w:moveFrom`/`w:moveTo`, and the Yjs
|
|
291
|
+
sidecar stores one immutable `changeKind: "move"` decision record for the
|
|
292
|
+
complete intent.
|
|
293
|
+
|
|
286
294
|
Document comparison is a pure planning boundary before the editor transaction.
|
|
287
295
|
The current and imported TipTap/ProseMirror trees remain immutable while a
|
|
288
296
|
deterministic weighted block alignment pairs related paragraphs and headings;
|
|
@@ -291,7 +299,9 @@ and paragraph-property snapshots produce character- and paragraph-formatting
|
|
|
291
299
|
revisions. Stable semantic signatures seed generated identities, so the same
|
|
292
300
|
inputs and options produce the same ordering and IDs. Only a fully admitted
|
|
293
301
|
plan replaces the mounted document, and that replacement is one transaction,
|
|
294
|
-
one controlled publication, and one Undo record.
|
|
302
|
+
one controlled publication, and one Undo record. The planner does not infer
|
|
303
|
+
move pairs from arbitrary delete/insert similarities; native paired moves remain
|
|
304
|
+
reviewable when they already exist.
|
|
295
305
|
|
|
296
306
|
Combine validates rather than guesses. It rejects every imported revision on
|
|
297
307
|
an immutable reviewed snapshot and compares the resulting semantic signature
|
|
@@ -580,7 +590,9 @@ The public formatting fixture also exercises the non-windowed review boundary
|
|
|
580
590
|
with independent character- and paragraph-formatting cards. Focused A3S Test
|
|
581
591
|
suites reject each kind separately, verify that text and the other revision
|
|
582
592
|
remain intact, and prove full paragraph alignment, indentation, spacing, and
|
|
583
|
-
line-height restoration with clean browser diagnostics.
|
|
593
|
+
line-height restoration with clean browser diagnostics. Focused move fixtures
|
|
594
|
+
verify paired source/destination resolution, destination-only navigation,
|
|
595
|
+
immutable collaboration audit, and native DOCX reopen without marker leakage.
|
|
584
596
|
|
|
585
597
|
Spreadsheet now uses a persistent browser Rust/WASM calculation session. The
|
|
586
598
|
editor initializes it with a sparse workbook replacement, sends bounded cell
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a3s-lab/office",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.0",
|
|
4
4
|
"description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"office",
|
|
@@ -87,12 +87,14 @@
|
|
|
87
87
|
"playground:preview": "rspress preview -c website/rspress.config.ts --host 127.0.0.1 --port 4175",
|
|
88
88
|
"playground:typecheck": "tsc --noEmit -p playground/tsconfig.json",
|
|
89
89
|
"playground:ime:webkit": "playwright test --config playwright.ime.config.ts",
|
|
90
|
+
"playground:testkit": "playwright test --config playwright.testkit.config.ts",
|
|
90
91
|
"playground:visual": "playwright test --config playwright.config.ts",
|
|
91
92
|
"playground:visual:docs-changelog": "playwright test visual-tests/docs-changelog.functional.spec.ts --config playwright.config.ts",
|
|
92
93
|
"playground:visual:home": "playwright test visual-tests/playground-home.functional.spec.ts --config playwright.config.ts",
|
|
93
94
|
"playground:visual:document-emphasis": "playwright test visual-tests/document-emphasis.functional.spec.ts --config playwright.config.ts",
|
|
94
95
|
"playground:visual:document-index": "playwright test visual-tests/document-index.functional.spec.ts --config playwright.config.ts",
|
|
95
96
|
"playground:visual:document-comparison": "playwright test visual-tests/document-comparison.functional.spec.ts --config playwright.config.ts",
|
|
97
|
+
"playground:visual:document-move-revision": "playwright test visual-tests/document-move-revision.functional.spec.ts --config playwright.config.ts",
|
|
96
98
|
"playground:visual:document-hidden-text": "playwright test visual-tests/document-hidden-text.functional.spec.ts --config playwright.config.ts",
|
|
97
99
|
"playground:visual:document-legacy-text-effects": "playwright test visual-tests/document-legacy-text-effects.functional.spec.ts --config playwright.config.ts",
|
|
98
100
|
"playground:visual:document-proofing-languages": "playwright test visual-tests/document-proofing-languages.functional.spec.ts --config playwright.config.ts",
|
|
@@ -140,8 +142,12 @@
|
|
|
140
142
|
"performance:pdf": "bun .a3s-test/performance/generate-fixtures.ts --pdf-only && bun .a3s-test/performance/benchmark-pdf.ts --url http://127.0.0.1:4175/playground/ --runs 3 --timeout-ms 120000",
|
|
141
143
|
"performance:presentation": "bun .a3s-test/performance/generate-fixtures.ts --presentations-only && bun .a3s-test/performance/benchmark-presentation.ts --url http://127.0.0.1:4175/playground/ --runs 3 --timeout-ms 120000 --modes default,content-visibility",
|
|
142
144
|
"test": "rstest",
|
|
143
|
-
"test:e2e": "bun run test:e2e:fixtures &&
|
|
144
|
-
"test:e2e:check": "bun run test:e2e:fixtures &&
|
|
145
|
+
"test:e2e": "bun run test:e2e:fixtures && A3S_TEST_SUITE=all bash scripts/run-a3s-test-web-gate.sh && bun run test:e2e:testkit",
|
|
146
|
+
"test:e2e:check": "bun run test:e2e:fixtures && bun scripts/check-a3s-test-suites.ts",
|
|
147
|
+
"test:e2e:testkit": "bash scripts/run-a3s-testkit-ui-gate.sh",
|
|
148
|
+
"test:e2e:testkit:check": "A3S_TEST_SUITE=office-testkit-ui.acl bun scripts/check-a3s-test-suites.ts",
|
|
149
|
+
"test:e2e:all": "bun run test:e2e",
|
|
150
|
+
"test:e2e:all:check": "bun run test:e2e:check",
|
|
145
151
|
"test:e2e:writer-text-box": "bun run test:e2e:fixtures && A3S_TEST_SUITE=tests/e2e/word-text-box-phone.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
146
152
|
"test:e2e:writer-text-box:check": "a3s-test check tests/e2e/word-text-box-phone.acl --json",
|
|
147
153
|
"test:e2e:writer-content-control": "bun run test:e2e:fixtures && A3S_TEST_SUITE=tests/e2e/word-content-controls-phone.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
@@ -293,6 +299,8 @@
|
|
|
293
299
|
"test:e2e:writer-formatting-revision:check": "a3s-test check tests/e2e/word-formatting-revision.acl --json",
|
|
294
300
|
"test:e2e:writer-paragraph-formatting-revision": "a3s-test run tests/e2e/word-paragraph-formatting-revision.acl --json",
|
|
295
301
|
"test:e2e:writer-paragraph-formatting-revision:check": "a3s-test check tests/e2e/word-paragraph-formatting-revision.acl --json",
|
|
302
|
+
"test:e2e:writer-move-revision": "a3s-test run tests/e2e/word-move-revision.acl --json",
|
|
303
|
+
"test:e2e:writer-move-revision:check": "a3s-test check tests/e2e/word-move-revision.acl --json",
|
|
296
304
|
"test:e2e:writer-status": "a3s-test run tests/e2e/word-status-bar.acl --json",
|
|
297
305
|
"test:e2e:writer-status:check": "a3s-test check tests/e2e/word-status-bar.acl --json",
|
|
298
306
|
"test:wps-layout": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/test-wps-layout-parity.ps1",
|