@a3s-lab/office 0.31.0 → 0.32.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/README.md +6 -3
- package/dist/0~4808.js +1 -1
- package/dist/0~4980.js +1 -1
- package/dist/0~7240.js +1 -1
- package/dist/0~7614.js +1 -1
- package/dist/0~document-editor.js +1085 -4
- package/dist/0~spreadsheet-editor.js +2 -1
- package/dist/0~work-docx-export.js +1 -1
- package/dist/0~work-docx-import.js +10 -27
- package/dist/0~work-docx-large-document-import.js +1 -1
- package/dist/0~work-office-diagnostics.js +3 -3
- package/dist/0~work-pptx-import.js +1 -1
- package/dist/{1544.js → 3266.js} +17 -1862
- package/dist/4121.js +13 -0
- package/dist/4166.js +3848 -0
- package/dist/{6282.js → 4174.js} +383 -10
- package/dist/9333.js +1849 -0
- package/dist/core.js +5259 -4
- package/dist/index.js +3 -3
- package/dist/internal/features/work/editors/document-compare-dialog.d.ts +14 -0
- package/dist/internal/features/work/editors/document-toolbar.d.ts +3 -1
- package/dist/internal/features/work/editors/use-document-comparison.d.ts +9 -0
- package/dist/internal/features/work/work-document-changes.d.ts +5 -0
- package/dist/internal/features/work/work-document-compare-diff.d.ts +38 -0
- package/dist/internal/features/work/work-document-compare-stability.d.ts +5 -0
- package/dist/internal/features/work/work-document-compare.d.ts +27 -0
- package/dist/office-kernel.wasm +0 -0
- package/dist/styles.css +194 -0
- package/docs/latest/en/browser-editor-architecture.md +23 -0
- package/package.json +6 -3
- package/dist/4104.js +0 -9336
package/dist/index.js
CHANGED
|
@@ -2,14 +2,14 @@ var src_DOCUMENT_SNAPSHOT_VERSION = 1;
|
|
|
2
2
|
var src_DOCUMENT_SOURCE_VERSION = 1;
|
|
3
3
|
var src_OFFICE_COLLABORATION_VERSION = 1;
|
|
4
4
|
export { AGENT_PROPOSAL_PROTOCOL, OFFICE_NOTIFICATION_EVENT, createAgentProposalInstruction, createAgentProposalRequest, getAgentProposalStatus, subscribeOfficeNotifications } from "./6489.js";
|
|
5
|
-
export { DOCUMENT_SNAPSHOT_MEDIA_TYPE, DOCUMENT_SNAPSHOT_SCHEMA, DOCUMENT_SOURCE_MEDIA_TYPE, DOCUMENT_SOURCE_SCHEMA, OFFICE_COLLABORATION_DEFAULT_MAX_TRANSPORT_PAYLOAD_BYTES, OFFICE_COLLABORATION_MAX_TRANSPORT_PAYLOAD_BYTES, OFFICE_COLLABORATION_PRESENCE_FIELD, OFFICE_FILE_ACCEPT, applyDocumentSource, artifactExtension, artifactExtension as workArtifactExtension, artifactKindLabel, artifactKindLabel as workArtifactKindLabel, createArtifactBlob, createOfficeCollaborationPresence, createOfficeCollaborationTransportBinding, createPdfCollaborationContent, decodeDocumentSnapshot, defaultPptxRuntimeUrl, downloadArtifact, downloadArtifactPdf, encodeDocumentSnapshot,
|
|
5
|
+
export { DOCUMENT_SNAPSHOT_MEDIA_TYPE, DOCUMENT_SNAPSHOT_SCHEMA, DOCUMENT_SOURCE_MEDIA_TYPE, DOCUMENT_SOURCE_SCHEMA, OFFICE_COLLABORATION_DEFAULT_MAX_TRANSPORT_PAYLOAD_BYTES, OFFICE_COLLABORATION_MAX_TRANSPORT_PAYLOAD_BYTES, OFFICE_COLLABORATION_PRESENCE_FIELD, OFFICE_FILE_ACCEPT, applyDocumentSource, artifactExtension, artifactExtension as workArtifactExtension, artifactKindLabel, artifactKindLabel as workArtifactKindLabel, createArtifactBlob, createOfficeCollaborationPresence, createOfficeCollaborationTransportBinding, createPdfCollaborationContent, decodeDocumentSnapshot, defaultPptxRuntimeUrl, downloadArtifact, downloadArtifactPdf, encodeDocumentSnapshot, importOfficeFile, officeKindForFile, pdfPagesForExport, projectDocumentSource } from "./core.js";
|
|
6
6
|
export { DocumentEditor, MarkdownEditor, PDF_EVIDENCE_COORDINATE_BASIS, PdfViewer, PresentationEditor, SpreadsheetEditor, defaultDocumentArabicLayoutFontUrl, defaultDocumentHebrewLayoutFontUrl, defaultDocumentLatinLayoutFontUrl, defaultDocumentLayoutFontUrl, defaultDocumentLayoutFonts, defaultOfficeKernelWasmUrl, defaultPdfiumWasmUrl, preloadOfficeEditor } from "./432.js";
|
|
7
7
|
export { OFFICE_COLLABORATION_NAMESPACE, OFFICE_COLLABORATION_PROTOCOL, OfficeCollaborationError, createOfficeCollaborationSession, readOfficeCollaborationMetadata } from "./9787.js";
|
|
8
8
|
export { assertPdfCollaborationSource, createOfficePdfCollaborationBinding, initializeOfficePdfCollaboration, readOfficePdfCollaboration, readOfficePdfCollaborationSource, replaceOfficePdfCollaboration } from "./3818.js";
|
|
9
9
|
export { createArtifact, createOfficeId, officeTemplates } from "./4121.js";
|
|
10
|
-
export { createOfficeDocumentCollaborationBinding, initializeOfficeDocumentCollaboration, officeDocumentCollaborationFragment, readOfficeDocumentCollaboration } from "./
|
|
10
|
+
export { createOfficeDocumentCollaborationBinding, forgetSourceBlob, initializeOfficeDocumentCollaboration, officeDocumentCollaborationFragment, readOfficeDocumentCollaboration, readSourceBlob, registerSourceBlob } from "./4174.js";
|
|
11
11
|
export { createOfficeMarkdownCollaborationBinding, initializeOfficeMarkdownCollaboration, readOfficeMarkdownCollaboration, replaceOfficeMarkdownCollaboration } from "./2591.js";
|
|
12
12
|
export { createOfficePresentationCollaborationBinding, initializeOfficePresentationCollaboration, readOfficePresentationCollaboration, replaceOfficePresentationCollaboration } from "./4560.js";
|
|
13
|
-
export { createOfficeSpreadsheetCollaborationBinding, initializeOfficeSpreadsheetCollaboration, readOfficeSpreadsheetCollaboration, replaceOfficeSpreadsheetCollaboration } from "./
|
|
13
|
+
export { createOfficeSpreadsheetCollaborationBinding, initializeOfficeSpreadsheetCollaboration, readOfficeSpreadsheetCollaboration, replaceOfficeSpreadsheetCollaboration } from "./3266.js";
|
|
14
14
|
export { normalizeWorkSpreadsheetBubbleScale, normalizeWorkSpreadsheetBubbleSizeRepresents, normalizeWorkSpreadsheetChartAxisGroup, normalizeWorkSpreadsheetCombinationSeriesType, normalizeWorkSpreadsheetDataLabelPosition, normalizeWorkSpreadsheetDataLabels, normalizeWorkSpreadsheetDoughnutHoleSize, normalizeWorkSpreadsheetErrorBars, normalizeWorkSpreadsheetRadarStyle, normalizeWorkSpreadsheetScatterStyle, normalizeWorkSpreadsheetTrendline, normalizeWorkSpreadsheetTrendlineType, workSpreadsheetChartSupportsAxes, workSpreadsheetChartSupportsErrorBars, workSpreadsheetChartSupportsTrendlines, workSpreadsheetChartTypeLabel, workSpreadsheetChartUsesNumericXAxis, workSpreadsheetCombinationSeriesTypeLabel, workSpreadsheetDataLabelPositionLabel, workSpreadsheetErrorBarTypeLabel, workSpreadsheetErrorBarValueTypeLabel, workSpreadsheetTrendlineTypeLabel } from "./8715.js";
|
|
15
15
|
export { src_DOCUMENT_SNAPSHOT_VERSION as DOCUMENT_SNAPSHOT_VERSION, src_DOCUMENT_SOURCE_VERSION as DOCUMENT_SOURCE_VERSION, src_OFFICE_COLLABORATION_VERSION as OFFICE_COLLABORATION_VERSION };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DocumentComparisonApplyResult, DocumentComparisonMode } from '../work-document-compare';
|
|
2
|
+
export interface DocumentCompareDialogRequest {
|
|
3
|
+
author: string;
|
|
4
|
+
file: File;
|
|
5
|
+
mode: DocumentComparisonMode;
|
|
6
|
+
}
|
|
7
|
+
export interface DocumentCompareDialogProps {
|
|
8
|
+
initialMode: DocumentComparisonMode;
|
|
9
|
+
restoreFocusTarget: () => HTMLElement | null;
|
|
10
|
+
onApplied: (result: DocumentComparisonApplyResult) => void;
|
|
11
|
+
onClose: () => void;
|
|
12
|
+
onSubmit: (request: DocumentCompareDialogRequest) => Promise<DocumentComparisonApplyResult>;
|
|
13
|
+
}
|
|
14
|
+
export declare function DocumentCompareDialog({ initialMode, restoreFocusTarget, onApplied, onClose, onSubmit, }: DocumentCompareDialogProps): import("react").JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Editor } from '@tiptap/core';
|
|
2
2
|
import type { WorkDocumentCaptionKind } from '../work-document-captions';
|
|
3
3
|
import { type WorkDocumentChange } from '../work-document-changes';
|
|
4
|
+
import type { DocumentComparisonMode } from '../work-document-compare';
|
|
4
5
|
import type { WorkDocumentFieldKind } from '../work-document-fields';
|
|
5
6
|
import type { WorkDocumentLayoutFont } from '../work-document-fonts';
|
|
6
7
|
import type { WorkDocumentNoteKind } from '../work-document-notes';
|
|
@@ -80,9 +81,10 @@ interface DocumentToolbarProps {
|
|
|
80
81
|
onRibbonTabChange?: (tab: DocumentRibbonTabId) => boolean | undefined | Promise<boolean | undefined>;
|
|
81
82
|
onToggleTrackChanges: () => void;
|
|
82
83
|
onToggleChanges: () => void;
|
|
84
|
+
onOpenComparison: (mode: DocumentComparisonMode) => void;
|
|
83
85
|
onDecideChange?: (change: WorkDocumentChange, decision: 'accept' | 'reject') => boolean;
|
|
84
86
|
onOpenWordCount: () => void;
|
|
85
87
|
onOpenFindReplace: (mode: DocumentFindReplaceMode) => void;
|
|
86
88
|
}
|
|
87
|
-
export declare function DocumentToolbar({ editor, defaultRibbonCollapsed, reviewOnly, suggestionOnly, history, layoutOpen, layout, layoutFonts, navigationOpen, pageColor, showPageNumbers, showHiddenText, showRulers, spellcheckEnabled, viewMode, zoom, pageChromeEditor, pageChromeEditingPart, pageChromeShowPageNumber, onRequestImage, onPageChromeEditingPartChange, onClosePageChrome, onTogglePageChromePageNumber, onToggleLayout, onLayoutChange, onOpenLayout, onToggleNavigation, onTogglePageNumbers, onToggleHiddenText, onToggleRulers, onPageColorChange, onToggleSpellcheck, onViewModeChange, onZoomChange, onZoomFit, onInsertSection, onInsertNote, onInsertCaption, onInsertCrossReference, onOpenTableOfContents, onOpenIndexEntry, onOpenIndex, citationsOpen, citationSourceCount, onToggleCitations, onInsertField, onRefreshFields, onRefreshIndex, onRefreshTableOfContents, canInsertComment, onInsertComment, commentsOpen, commentCount, onToggleComments, trackChanges, changesOpen, changeCount, findReplaceMode, fileActions, onRibbonTabChange, onToggleTrackChanges, onToggleChanges, onDecideChange, onOpenWordCount, onOpenFindReplace, }: DocumentToolbarProps): import("react").JSX.Element;
|
|
89
|
+
export declare function DocumentToolbar({ editor, defaultRibbonCollapsed, reviewOnly, suggestionOnly, history, layoutOpen, layout, layoutFonts, navigationOpen, pageColor, showPageNumbers, showHiddenText, showRulers, spellcheckEnabled, viewMode, zoom, pageChromeEditor, pageChromeEditingPart, pageChromeShowPageNumber, onRequestImage, onPageChromeEditingPartChange, onClosePageChrome, onTogglePageChromePageNumber, onToggleLayout, onLayoutChange, onOpenLayout, onToggleNavigation, onTogglePageNumbers, onToggleHiddenText, onToggleRulers, onPageColorChange, onToggleSpellcheck, onViewModeChange, onZoomChange, onZoomFit, onInsertSection, onInsertNote, onInsertCaption, onInsertCrossReference, onOpenTableOfContents, onOpenIndexEntry, onOpenIndex, citationsOpen, citationSourceCount, onToggleCitations, onInsertField, onRefreshFields, onRefreshIndex, onRefreshTableOfContents, canInsertComment, onInsertComment, commentsOpen, commentCount, onToggleComments, trackChanges, changesOpen, changeCount, findReplaceMode, fileActions, onRibbonTabChange, onToggleTrackChanges, onToggleChanges, onOpenComparison, onDecideChange, onOpenWordCount, onOpenFindReplace, }: DocumentToolbarProps): import("react").JSX.Element;
|
|
88
90
|
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Editor } from '@tiptap/core';
|
|
2
|
+
import { type DocumentComparisonMode } from '../work-document-compare';
|
|
3
|
+
export declare function useDocumentComparison({ editor, onApplied, }: {
|
|
4
|
+
editor: Editor | null;
|
|
5
|
+
onApplied: () => void;
|
|
6
|
+
}): {
|
|
7
|
+
dialog: import("react").JSX.Element | null;
|
|
8
|
+
open: (mode: DocumentComparisonMode) => void;
|
|
9
|
+
};
|
|
@@ -36,3 +36,8 @@ declare module '@tiptap/core' {
|
|
|
36
36
|
}
|
|
37
37
|
export declare const DocumentChange: Mark<DocumentChangeOptions, any>;
|
|
38
38
|
export declare function collectDocumentChanges(document: ProseMirrorNode): WorkDocumentChange[];
|
|
39
|
+
/**
|
|
40
|
+
* Resolves every revision on an immutable document snapshot. A malformed
|
|
41
|
+
* formatting snapshot returns `null` instead of approximating the baseline.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveAllDocumentChanges(document: ProseMirrorNode, decision: 'accept' | 'reject'): ProseMirrorNode | null;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type DocumentSequenceDiff<T> = {
|
|
2
|
+
kind: 'equal';
|
|
3
|
+
left: T[];
|
|
4
|
+
right: T[];
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'delete';
|
|
7
|
+
left: T[];
|
|
8
|
+
right: [];
|
|
9
|
+
} | {
|
|
10
|
+
kind: 'insert';
|
|
11
|
+
left: [];
|
|
12
|
+
right: T[];
|
|
13
|
+
};
|
|
14
|
+
export type DocumentSequenceAlignment<T> = {
|
|
15
|
+
kind: 'equal' | 'substitute';
|
|
16
|
+
left: T;
|
|
17
|
+
right: T;
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'delete';
|
|
20
|
+
left: T;
|
|
21
|
+
right: null;
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'insert';
|
|
24
|
+
left: null;
|
|
25
|
+
right: T;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Computes a deterministic LCS diff while bounding the allocated matrix.
|
|
29
|
+
* Callers can fall back to one replacement when the requested matrix is too
|
|
30
|
+
* large instead of allowing adversarial documents to allocate without limit.
|
|
31
|
+
*/
|
|
32
|
+
export declare function boundedDocumentSequenceDiff<T>(left: readonly T[], right: readonly T[], equal: (left: T, right: T) => boolean, maximumCells: number): DocumentSequenceDiff<T>[] | null;
|
|
33
|
+
/**
|
|
34
|
+
* Aligns document blocks with a weighted substitution cost. A substitution
|
|
35
|
+
* cost below two pairs related blocks; a cost of two or more prefers an
|
|
36
|
+
* explicit deletion plus insertion.
|
|
37
|
+
*/
|
|
38
|
+
export declare function boundedDocumentSequenceAlignment<T>(left: readonly T[], right: readonly T[], substitutionCost: (left: T, right: T) => number, maximumCells: number): DocumentSequenceAlignment<T>[] | null;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function stableJson(value: unknown): string;
|
|
2
|
+
export declare function stableHash(value: string): string;
|
|
3
|
+
export declare function wordParagraphId(value: string): string;
|
|
4
|
+
export declare function normalizedDate(value: string): string;
|
|
5
|
+
export declare function boundedMetadata(value: string, maximum: number): string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Content, type Editor } from '@tiptap/core';
|
|
2
|
+
export type DocumentComparisonMode = 'compare' | 'combine';
|
|
3
|
+
export type DocumentComparisonDiagnosticCode = 'changed-complex-structure' | 'combine-baseline-mismatch' | 'combine-resolution-invalid' | 'combine-structural-revisions' | 'combine-without-revisions' | 'comparison-limit-exceeded' | 'current-revisions-present' | 'empty-structural-change' | 'invalid-revised-content' | 'revised-revisions-present' | 'section-layout-mismatch' | 'unsupported-inline-review-state';
|
|
4
|
+
export interface DocumentComparisonDiagnostic {
|
|
5
|
+
code: DocumentComparisonDiagnosticCode;
|
|
6
|
+
message: string;
|
|
7
|
+
section?: number;
|
|
8
|
+
block?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface DocumentComparisonSummary {
|
|
11
|
+
insertions: number;
|
|
12
|
+
deletions: number;
|
|
13
|
+
formatting: number;
|
|
14
|
+
paragraphFormatting: number;
|
|
15
|
+
}
|
|
16
|
+
export interface DocumentComparisonOptions {
|
|
17
|
+
mode: DocumentComparisonMode;
|
|
18
|
+
author: string;
|
|
19
|
+
date: string;
|
|
20
|
+
sourceName: string;
|
|
21
|
+
}
|
|
22
|
+
export interface DocumentComparisonApplyResult {
|
|
23
|
+
status: 'applied' | 'unchanged' | 'unsupported';
|
|
24
|
+
summary: DocumentComparisonSummary;
|
|
25
|
+
diagnostics: DocumentComparisonDiagnostic[];
|
|
26
|
+
}
|
|
27
|
+
export declare function applyDocumentComparison(editor: Editor, revisedContent: Content, options: DocumentComparisonOptions): DocumentComparisonApplyResult;
|
package/dist/office-kernel.wasm
CHANGED
|
Binary file
|
package/dist/styles.css
CHANGED
|
@@ -9930,6 +9930,200 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
9930
9930
|
}
|
|
9931
9931
|
}
|
|
9932
9932
|
|
|
9933
|
+
.work-document-compare-dialog {
|
|
9934
|
+
width: min(650px, 100%);
|
|
9935
|
+
}
|
|
9936
|
+
|
|
9937
|
+
.work-document-compare-dialog form {
|
|
9938
|
+
gap: 15px;
|
|
9939
|
+
display: grid;
|
|
9940
|
+
}
|
|
9941
|
+
|
|
9942
|
+
.work-document-compare-mode {
|
|
9943
|
+
border: 0;
|
|
9944
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
9945
|
+
gap: 10px;
|
|
9946
|
+
margin: 0;
|
|
9947
|
+
padding: 0;
|
|
9948
|
+
display: grid;
|
|
9949
|
+
}
|
|
9950
|
+
|
|
9951
|
+
.work-document-compare-mode > legend {
|
|
9952
|
+
color: var(--a3s-muted);
|
|
9953
|
+
margin-bottom: 8px;
|
|
9954
|
+
font-size: 11px;
|
|
9955
|
+
font-weight: 700;
|
|
9956
|
+
}
|
|
9957
|
+
|
|
9958
|
+
.work-document-compare-mode > label {
|
|
9959
|
+
cursor: pointer;
|
|
9960
|
+
min-width: 0;
|
|
9961
|
+
position: relative;
|
|
9962
|
+
}
|
|
9963
|
+
|
|
9964
|
+
.work-document-compare-mode input {
|
|
9965
|
+
opacity: 0;
|
|
9966
|
+
width: 1px;
|
|
9967
|
+
height: 1px;
|
|
9968
|
+
position: absolute;
|
|
9969
|
+
}
|
|
9970
|
+
|
|
9971
|
+
.work-document-compare-mode label > span {
|
|
9972
|
+
border: 1px solid var(--a3s-line);
|
|
9973
|
+
background: var(--a3s-panel);
|
|
9974
|
+
border-radius: 10px;
|
|
9975
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
9976
|
+
align-content: start;
|
|
9977
|
+
gap: 4px 9px;
|
|
9978
|
+
min-height: 94px;
|
|
9979
|
+
padding: 13px 14px;
|
|
9980
|
+
transition: border-color .14s, background-color .14s;
|
|
9981
|
+
display: grid;
|
|
9982
|
+
}
|
|
9983
|
+
|
|
9984
|
+
.work-document-compare-mode label:hover > span {
|
|
9985
|
+
border-color: var(--a3s-line-strong);
|
|
9986
|
+
background: var(--a3s-panel-soft);
|
|
9987
|
+
}
|
|
9988
|
+
|
|
9989
|
+
.work-document-compare-mode input:checked + span {
|
|
9990
|
+
border-color: var(--a3s-accent);
|
|
9991
|
+
background: color-mix(in srgb, var(--a3s-accent) 8%, var(--a3s-panel));
|
|
9992
|
+
}
|
|
9993
|
+
|
|
9994
|
+
.work-document-compare-mode input:focus-visible + span {
|
|
9995
|
+
outline: 2px solid var(--a3s-accent);
|
|
9996
|
+
outline-offset: 2px;
|
|
9997
|
+
}
|
|
9998
|
+
|
|
9999
|
+
.work-document-compare-mode svg {
|
|
10000
|
+
color: var(--a3s-accent);
|
|
10001
|
+
grid-row: 1 / span 2;
|
|
10002
|
+
}
|
|
10003
|
+
|
|
10004
|
+
.work-document-compare-mode strong {
|
|
10005
|
+
font-size: 13px;
|
|
10006
|
+
line-height: 1.2;
|
|
10007
|
+
}
|
|
10008
|
+
|
|
10009
|
+
.work-document-compare-mode small {
|
|
10010
|
+
color: var(--a3s-muted);
|
|
10011
|
+
font-size: 11px;
|
|
10012
|
+
line-height: 1.45;
|
|
10013
|
+
}
|
|
10014
|
+
|
|
10015
|
+
.work-document-compare-file {
|
|
10016
|
+
border: 1px dashed var(--a3s-line-strong);
|
|
10017
|
+
background: var(--a3s-panel-soft);
|
|
10018
|
+
width: 100%;
|
|
10019
|
+
min-height: 78px;
|
|
10020
|
+
color: var(--a3s-ink);
|
|
10021
|
+
text-align: left;
|
|
10022
|
+
cursor: pointer;
|
|
10023
|
+
border-radius: 10px;
|
|
10024
|
+
outline: 0;
|
|
10025
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
10026
|
+
align-items: center;
|
|
10027
|
+
gap: 12px;
|
|
10028
|
+
padding: 13px 15px;
|
|
10029
|
+
display: grid;
|
|
10030
|
+
}
|
|
10031
|
+
|
|
10032
|
+
.work-document-compare-file:hover:not(:disabled) {
|
|
10033
|
+
border-color: var(--a3s-accent);
|
|
10034
|
+
}
|
|
10035
|
+
|
|
10036
|
+
.work-document-compare-file:focus-visible {
|
|
10037
|
+
outline: 2px solid var(--a3s-accent);
|
|
10038
|
+
outline-offset: 2px;
|
|
10039
|
+
}
|
|
10040
|
+
|
|
10041
|
+
.work-document-compare-file:disabled {
|
|
10042
|
+
cursor: wait;
|
|
10043
|
+
opacity: .65;
|
|
10044
|
+
}
|
|
10045
|
+
|
|
10046
|
+
.work-document-compare-file > svg {
|
|
10047
|
+
color: var(--a3s-accent);
|
|
10048
|
+
}
|
|
10049
|
+
|
|
10050
|
+
.work-document-compare-file > span, .work-document-compare-author {
|
|
10051
|
+
gap: 4px;
|
|
10052
|
+
min-width: 0;
|
|
10053
|
+
display: grid;
|
|
10054
|
+
}
|
|
10055
|
+
|
|
10056
|
+
.work-document-compare-file strong {
|
|
10057
|
+
text-overflow: ellipsis;
|
|
10058
|
+
white-space: nowrap;
|
|
10059
|
+
font-size: 13px;
|
|
10060
|
+
overflow: hidden;
|
|
10061
|
+
}
|
|
10062
|
+
|
|
10063
|
+
.work-document-compare-file small, .work-document-compare-author small {
|
|
10064
|
+
color: var(--a3s-muted);
|
|
10065
|
+
font-size: 11px;
|
|
10066
|
+
line-height: 1.45;
|
|
10067
|
+
}
|
|
10068
|
+
|
|
10069
|
+
.work-document-compare-author > span {
|
|
10070
|
+
color: var(--a3s-muted);
|
|
10071
|
+
font-size: 11px;
|
|
10072
|
+
font-weight: 700;
|
|
10073
|
+
}
|
|
10074
|
+
|
|
10075
|
+
.work-document-compare-author .work-office-text-field {
|
|
10076
|
+
width: 100%;
|
|
10077
|
+
}
|
|
10078
|
+
|
|
10079
|
+
.work-document-compare-boundary, .work-document-compare-status, .work-document-compare-errors {
|
|
10080
|
+
border: 1px solid var(--a3s-line);
|
|
10081
|
+
border-radius: 9px;
|
|
10082
|
+
margin: 0;
|
|
10083
|
+
padding: 12px 14px;
|
|
10084
|
+
font-size: 11px;
|
|
10085
|
+
line-height: 1.5;
|
|
10086
|
+
}
|
|
10087
|
+
|
|
10088
|
+
.work-document-compare-boundary {
|
|
10089
|
+
background: var(--a3s-panel-soft);
|
|
10090
|
+
}
|
|
10091
|
+
|
|
10092
|
+
.work-document-compare-boundary > strong, .work-document-compare-errors > strong {
|
|
10093
|
+
font-size: 12px;
|
|
10094
|
+
}
|
|
10095
|
+
|
|
10096
|
+
.work-document-compare-boundary > p {
|
|
10097
|
+
color: var(--a3s-muted);
|
|
10098
|
+
margin: 3px 0 0;
|
|
10099
|
+
}
|
|
10100
|
+
|
|
10101
|
+
.work-document-compare-status {
|
|
10102
|
+
border-color: color-mix(in srgb, var(--a3s-green) 42%, var(--a3s-line));
|
|
10103
|
+
color: var(--a3s-green);
|
|
10104
|
+
}
|
|
10105
|
+
|
|
10106
|
+
.work-document-compare-errors {
|
|
10107
|
+
border-color: color-mix(in srgb, var(--a3s-red) 35%, var(--a3s-line));
|
|
10108
|
+
background: color-mix(in srgb, var(--a3s-red) 5%, var(--a3s-panel));
|
|
10109
|
+
color: var(--a3s-red);
|
|
10110
|
+
}
|
|
10111
|
+
|
|
10112
|
+
.work-document-compare-errors ul {
|
|
10113
|
+
margin: 5px 0 0;
|
|
10114
|
+
padding-left: 18px;
|
|
10115
|
+
}
|
|
10116
|
+
|
|
10117
|
+
@media (width <= 560px) {
|
|
10118
|
+
.work-document-compare-mode {
|
|
10119
|
+
grid-template-columns: minmax(0, 1fr);
|
|
10120
|
+
}
|
|
10121
|
+
|
|
10122
|
+
.work-document-compare-mode label > span {
|
|
10123
|
+
min-height: 0;
|
|
10124
|
+
}
|
|
10125
|
+
}
|
|
10126
|
+
|
|
9933
10127
|
[data-office-character-position-half-points] {
|
|
9934
10128
|
vertical-align: var(--work-document-character-position);
|
|
9935
10129
|
}
|
|
@@ -283,6 +283,29 @@ 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
|
+
Document comparison is a pure planning boundary before the editor transaction.
|
|
287
|
+
The current and imported TipTap/ProseMirror trees remain immutable while a
|
|
288
|
+
deterministic weighted block alignment pairs related paragraphs and headings;
|
|
289
|
+
an LCS token diff then produces insertion and deletion marks, while exact mark
|
|
290
|
+
and paragraph-property snapshots produce character- and paragraph-formatting
|
|
291
|
+
revisions. Stable semantic signatures seed generated identities, so the same
|
|
292
|
+
inputs and options produce the same ordering and IDs. Only a fully admitted
|
|
293
|
+
plan replaces the mounted document, and that replacement is one transaction,
|
|
294
|
+
one controlled publication, and one Undo record.
|
|
295
|
+
|
|
296
|
+
Combine validates rather than guesses. It rejects every imported revision on
|
|
297
|
+
an immutable reviewed snapshot and compares the resulting semantic signature
|
|
298
|
+
with the current baseline. Only an exact match can transfer the reviewed inline
|
|
299
|
+
and formatting revisions while retaining current paragraph and section
|
|
300
|
+
identities. Existing current revisions, malformed review snapshots, structural
|
|
301
|
+
block revisions, layout mismatches, and changed complex objects leave the
|
|
302
|
+
mounted document untouched. Compare is bounded to 1,024 blocks per version,
|
|
303
|
+
1,000,000 combined text characters, and about 1.1 million cells for block
|
|
304
|
+
alignment or any inline matrix. This planner currently runs on the main thread;
|
|
305
|
+
it does not claim a Worker or WASM diff path. The bounds and atomic commit keep
|
|
306
|
+
that synchronous work explicit until measured evidence justifies another
|
|
307
|
+
execution boundary.
|
|
308
|
+
|
|
286
309
|
Selected document text has a typed host-owned context-menu boundary.
|
|
287
310
|
`getSelectionMenuItems` receives an immutable snapshot containing the selected
|
|
288
311
|
plain text and structured fragment, bounded adjacent text, synchronized HTML,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a3s-lab/office",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"office",
|
|
@@ -89,6 +89,7 @@
|
|
|
89
89
|
"playground:visual": "playwright test --config playwright.config.ts",
|
|
90
90
|
"playground:visual:document-emphasis": "playwright test visual-tests/document-emphasis.functional.spec.ts --config playwright.config.ts",
|
|
91
91
|
"playground:visual:document-index": "playwright test visual-tests/document-index.functional.spec.ts --config playwright.config.ts",
|
|
92
|
+
"playground:visual:document-comparison": "playwright test visual-tests/document-comparison.functional.spec.ts --config playwright.config.ts",
|
|
92
93
|
"playground:visual:document-hidden-text": "playwright test visual-tests/document-hidden-text.functional.spec.ts --config playwright.config.ts",
|
|
93
94
|
"playground:visual:document-legacy-text-effects": "playwright test visual-tests/document-legacy-text-effects.functional.spec.ts --config playwright.config.ts",
|
|
94
95
|
"playground:visual:document-proofing-languages": "playwright test visual-tests/document-proofing-languages.functional.spec.ts --config playwright.config.ts",
|
|
@@ -122,8 +123,8 @@
|
|
|
122
123
|
"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/ --runs 3 --timeout-ms 120000",
|
|
123
124
|
"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/ --runs 3 --timeout-ms 120000 --modes default,content-visibility",
|
|
124
125
|
"test": "rstest",
|
|
125
|
-
"test:e2e": "bun run test:e2e:fixtures && a3s-test run tests/e2e/word-page-color.acl --json && a3s-test run tests/e2e/word-page-setup-phone.acl --json && a3s-test run tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test run tests/e2e/word-list-formatting-phone.acl --json && a3s-test run tests/e2e/word-font-picker-phone.acl --json && a3s-test run tests/e2e/word-comments-drawer.acl --json && a3s-test run tests/e2e/word-comment-windowing.acl --json && a3s-test run tests/e2e/word-citations-phone.acl --json && a3s-test run tests/e2e/word-navigation-search.acl --json && a3s-test run tests/e2e/word-navigation-windowing.acl --json && a3s-test run tests/e2e/word-find-replace-phone.acl --json && a3s-test run tests/e2e/word-page-navigation.acl --json && a3s-test run tests/e2e/word-page-windowing.acl --json && a3s-test run tests/e2e/word-ai-question.acl --json && a3s-test run tests/e2e/word-picture-insert.acl --json && a3s-test run tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test run tests/e2e/word-track-changes-phone.acl --json && a3s-test run tests/e2e/word-formatting-revision.acl --json && a3s-test run tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test run tests/e2e/word-review-conflict-phone.acl --json && a3s-test run tests/e2e/word-revision-windowing.acl --json && a3s-test run tests/e2e/word-table-phone.acl --json && a3s-test run tests/e2e/word-table-borders.acl --json && a3s-test run tests/e2e/word-theme-table.acl --json && a3s-test run tests/e2e/word-styled-table.acl --json && a3s-test run tests/e2e/word-multi-page-table.acl --json && a3s-test run tests/e2e/word-cross-reference-phone.acl --json && a3s-test run tests/e2e/word-bookmark-links-phone.acl --json && a3s-test run tests/e2e/word-notes-phone.acl --json && a3s-test run tests/e2e/word-fields-phone.acl --json && a3s-test run tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test run tests/e2e/spreadsheet-phone-find.acl --json && a3s-test run tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test run tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test run tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test run tests/e2e/spreadsheet-cell-style.acl --json && a3s-test run tests/e2e/spreadsheet-paste-special.acl --json && a3s-test run tests/e2e/spreadsheet-hyperlink.acl --json && a3s-test run tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test run tests/e2e/presentation-presenter-view.acl --json && a3s-test run tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test run tests/e2e/presentation-phone-comments.acl --json && a3s-test run tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test run tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test run tests/e2e/markdown-phone-modes.acl --json && a3s-test run tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test run tests/e2e/office-docs-navigation.acl --json && a3s-test run tests/e2e/collaboration-playground-entry.acl --json && a3s-test run tests/e2e/collaboration-document-comments.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-document-suggestions.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-participants.acl --json && a3s-test run tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test run tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test run tests/e2e/collaboration-presentation-elements.acl --json",
|
|
126
|
-
"test:e2e:check": "bun run test:e2e:fixtures && a3s-test check tests/e2e/word-page-color.acl --json && a3s-test check tests/e2e/word-page-setup-phone.acl --json && a3s-test check tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test check tests/e2e/word-list-formatting-phone.acl --json && a3s-test check tests/e2e/word-font-picker-phone.acl --json && a3s-test check tests/e2e/word-comments-drawer.acl --json && a3s-test check tests/e2e/word-comment-windowing.acl --json && a3s-test check tests/e2e/word-citations-phone.acl --json && a3s-test check tests/e2e/word-navigation-search.acl --json && a3s-test check tests/e2e/word-navigation-windowing.acl --json && a3s-test check tests/e2e/word-find-replace-phone.acl --json && a3s-test check tests/e2e/word-page-navigation.acl --json && a3s-test check tests/e2e/word-page-windowing.acl --json && a3s-test check tests/e2e/word-ai-question.acl --json && a3s-test check tests/e2e/word-picture-insert.acl --json && a3s-test check tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test check tests/e2e/word-track-changes-phone.acl --json && a3s-test check tests/e2e/word-formatting-revision.acl --json && a3s-test check tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test check tests/e2e/word-review-conflict-phone.acl --json && a3s-test check tests/e2e/word-revision-windowing.acl --json && a3s-test check tests/e2e/word-table-phone.acl --json && a3s-test check tests/e2e/word-table-borders.acl --json && a3s-test check tests/e2e/word-theme-table.acl --json && a3s-test check tests/e2e/word-styled-table.acl --json && a3s-test check tests/e2e/word-multi-page-table.acl --json && a3s-test check tests/e2e/word-cross-reference-phone.acl --json && a3s-test check tests/e2e/word-bookmark-links-phone.acl --json && a3s-test check tests/e2e/word-notes-phone.acl --json && a3s-test check tests/e2e/word-fields-phone.acl --json && a3s-test check tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test check tests/e2e/spreadsheet-phone-find.acl --json && a3s-test check tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test check tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test check tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test check tests/e2e/spreadsheet-cell-style.acl --json && a3s-test check tests/e2e/spreadsheet-paste-special.acl --json && a3s-test check tests/e2e/spreadsheet-hyperlink.acl --json && a3s-test check tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test check tests/e2e/presentation-presenter-view.acl --json && a3s-test check tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test check tests/e2e/presentation-phone-comments.acl --json && a3s-test check tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test check tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test check tests/e2e/markdown-phone-modes.acl --json && a3s-test check tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test check tests/e2e/office-docs-navigation.acl --json && a3s-test check tests/e2e/collaboration-playground-entry.acl --json && a3s-test check tests/e2e/collaboration-document-comments.acl --json && a3s-test check tests/e2e/collaboration-document-suggestions.acl --json && a3s-test check tests/e2e/collaboration-participants.acl --json && a3s-test check tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test check tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test check tests/e2e/collaboration-presentation-elements.acl --json",
|
|
126
|
+
"test:e2e": "bun run test:e2e:fixtures && a3s-test run tests/e2e/word-page-color.acl --json && a3s-test run tests/e2e/word-page-setup-phone.acl --json && a3s-test run tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test run tests/e2e/word-list-formatting-phone.acl --json && a3s-test run tests/e2e/word-font-picker-phone.acl --json && a3s-test run tests/e2e/word-comments-drawer.acl --json && a3s-test run tests/e2e/word-comment-windowing.acl --json && a3s-test run tests/e2e/word-citations-phone.acl --json && a3s-test run tests/e2e/word-navigation-search.acl --json && a3s-test run tests/e2e/word-navigation-windowing.acl --json && a3s-test run tests/e2e/word-find-replace-phone.acl --json && a3s-test run tests/e2e/word-page-navigation.acl --json && a3s-test run tests/e2e/word-page-windowing.acl --json && a3s-test run tests/e2e/word-ai-question.acl --json && a3s-test run tests/e2e/word-picture-insert.acl --json && a3s-test run tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test run tests/e2e/word-track-changes-phone.acl --json && a3s-test run tests/e2e/word-formatting-revision.acl --json && a3s-test run tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test run tests/e2e/word-document-comparison.acl --json && a3s-test run tests/e2e/word-review-conflict-phone.acl --json && a3s-test run tests/e2e/word-revision-windowing.acl --json && a3s-test run tests/e2e/word-table-phone.acl --json && a3s-test run tests/e2e/word-table-borders.acl --json && a3s-test run tests/e2e/word-theme-table.acl --json && a3s-test run tests/e2e/word-styled-table.acl --json && a3s-test run tests/e2e/word-multi-page-table.acl --json && a3s-test run tests/e2e/word-cross-reference-phone.acl --json && a3s-test run tests/e2e/word-bookmark-links-phone.acl --json && a3s-test run tests/e2e/word-notes-phone.acl --json && a3s-test run tests/e2e/word-fields-phone.acl --json && a3s-test run tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test run tests/e2e/spreadsheet-phone-find.acl --json && a3s-test run tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test run tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test run tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test run tests/e2e/spreadsheet-cell-style.acl --json && a3s-test run tests/e2e/spreadsheet-paste-special.acl --json && a3s-test run tests/e2e/spreadsheet-hyperlink.acl --json && a3s-test run tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test run tests/e2e/presentation-presenter-view.acl --json && a3s-test run tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test run tests/e2e/presentation-phone-comments.acl --json && a3s-test run tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test run tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test run tests/e2e/markdown-phone-modes.acl --json && a3s-test run tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test run tests/e2e/office-docs-navigation.acl --json && a3s-test run tests/e2e/collaboration-playground-entry.acl --json && a3s-test run tests/e2e/collaboration-document-comments.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-document-suggestions.acl --command-timeout-ms 120000 --json && a3s-test run tests/e2e/collaboration-participants.acl --json && a3s-test run tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test run tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test run tests/e2e/collaboration-presentation-elements.acl --json",
|
|
127
|
+
"test:e2e:check": "bun run test:e2e:fixtures && a3s-test check tests/e2e/word-page-color.acl --json && a3s-test check tests/e2e/word-page-setup-phone.acl --json && a3s-test check tests/e2e/word-paragraph-layout-phone.acl --json && a3s-test check tests/e2e/word-list-formatting-phone.acl --json && a3s-test check tests/e2e/word-font-picker-phone.acl --json && a3s-test check tests/e2e/word-comments-drawer.acl --json && a3s-test check tests/e2e/word-comment-windowing.acl --json && a3s-test check tests/e2e/word-citations-phone.acl --json && a3s-test check tests/e2e/word-navigation-search.acl --json && a3s-test check tests/e2e/word-navigation-windowing.acl --json && a3s-test check tests/e2e/word-find-replace-phone.acl --json && a3s-test check tests/e2e/word-page-navigation.acl --json && a3s-test check tests/e2e/word-page-windowing.acl --json && a3s-test check tests/e2e/word-ai-question.acl --json && a3s-test check tests/e2e/word-picture-insert.acl --json && a3s-test check tests/e2e/word-picture-alt-text-phone.acl --json && a3s-test check tests/e2e/word-track-changes-phone.acl --json && a3s-test check tests/e2e/word-formatting-revision.acl --json && a3s-test check tests/e2e/word-paragraph-formatting-revision.acl --json && a3s-test check tests/e2e/word-document-comparison.acl --json && a3s-test check tests/e2e/word-review-conflict-phone.acl --json && a3s-test check tests/e2e/word-revision-windowing.acl --json && a3s-test check tests/e2e/word-table-phone.acl --json && a3s-test check tests/e2e/word-table-borders.acl --json && a3s-test check tests/e2e/word-theme-table.acl --json && a3s-test check tests/e2e/word-styled-table.acl --json && a3s-test check tests/e2e/word-multi-page-table.acl --json && a3s-test check tests/e2e/word-cross-reference-phone.acl --json && a3s-test check tests/e2e/word-bookmark-links-phone.acl --json && a3s-test check tests/e2e/word-notes-phone.acl --json && a3s-test check tests/e2e/word-fields-phone.acl --json && a3s-test check tests/e2e/spreadsheet-phone-rename.acl --json && a3s-test check tests/e2e/spreadsheet-phone-find.acl --json && a3s-test check tests/e2e/spreadsheet-phone-context-menu.acl --json && a3s-test check tests/e2e/spreadsheet-phone-task-pane.acl --json && a3s-test check tests/e2e/spreadsheet-maximum-sparse.acl --json && a3s-test check tests/e2e/spreadsheet-cell-style.acl --json && a3s-test check tests/e2e/spreadsheet-paste-special.acl --json && a3s-test check tests/e2e/spreadsheet-hyperlink.acl --json && a3s-test check tests/e2e/presentation-cut-paste-focus.acl --json && a3s-test check tests/e2e/presentation-presenter-view.acl --json && a3s-test check tests/e2e/presentation-phone-chart-pane.acl --json && a3s-test check tests/e2e/presentation-phone-comments.acl --json && a3s-test check tests/e2e/pdf-thumbnail-keyboard.acl --json && a3s-test check tests/e2e/pdf-page-drawer-phone.acl --json && a3s-test check tests/e2e/markdown-phone-modes.acl --json && a3s-test check tests/e2e/office-sidebar-breakpoint.acl --json && a3s-test check tests/e2e/office-docs-navigation.acl --json && a3s-test check tests/e2e/collaboration-playground-entry.acl --json && a3s-test check tests/e2e/collaboration-document-comments.acl --json && a3s-test check tests/e2e/collaboration-document-suggestions.acl --json && a3s-test check tests/e2e/collaboration-participants.acl --json && a3s-test check tests/e2e/collaboration-pdf-annotations.acl --json && a3s-test check tests/e2e/collaboration-spreadsheet-cells.acl --json && a3s-test check tests/e2e/collaboration-presentation-elements.acl --json",
|
|
127
128
|
"test:e2e:fixtures": "bun scripts/create-e2e-fixtures.ts",
|
|
128
129
|
"test:e2e:large-documents": "bun .a3s-test/performance/generate-fixtures.ts --documents-only && a3s-test run tests/e2e/word-large-document-windowing.acl --json",
|
|
129
130
|
"test:e2e:large-documents:check": "a3s-test check tests/e2e/word-large-document-windowing.acl --json",
|
|
@@ -213,6 +214,8 @@
|
|
|
213
214
|
"test:e2e:writer-table-of-contents:check": "a3s-test check tests/e2e/word-table-of-contents.acl --json",
|
|
214
215
|
"test:e2e:writer-document-index": "A3S_TEST_SUITE=tests/e2e/word-document-index.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
215
216
|
"test:e2e:writer-document-index:check": "a3s-test check tests/e2e/word-document-index.acl --json",
|
|
217
|
+
"test:e2e:writer-document-comparison": "A3S_TEST_SUITE=tests/e2e/word-document-comparison.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
218
|
+
"test:e2e:writer-document-comparison:check": "a3s-test check tests/e2e/word-document-comparison.acl --json",
|
|
216
219
|
"test:e2e:writer-run-border": "A3S_TEST_SUITE=tests/e2e/word-run-border.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
217
220
|
"test:e2e:writer-run-border:check": "a3s-test check tests/e2e/word-run-border.acl --json",
|
|
218
221
|
"test:e2e:writer-run-shading": "A3S_TEST_SUITE=tests/e2e/word-run-shading.acl bash scripts/run-a3s-test-web-gate.sh",
|