@a3s-lab/office 0.7.3 → 0.8.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/dist/9787.js CHANGED
@@ -138,10 +138,11 @@ function assertWorkOfficeCollaborationWritable(session, scope) {
138
138
  const normalizedScope = normalizedMutationScope(scope);
139
139
  if ('edit' === session.mode) return;
140
140
  if ('comment' === session.mode && 'document' === session.kind && 'document-comment' === normalizedScope) return;
141
- throw new WorkOfficeCollaborationError('office.collaboration.permission_denied', 'document-comment' === normalizedScope ? `The '${session.mode}' collaboration mode cannot modify Document review records.` : `The '${session.mode}' collaboration mode cannot modify canonical content.`);
141
+ if ('suggest' === session.mode && 'document' === session.kind && session.actor && 'document-suggestion' === normalizedScope) return;
142
+ throw new WorkOfficeCollaborationError('office.collaboration.permission_denied', 'document-comment' === normalizedScope ? `The '${session.mode}' collaboration mode cannot modify Document review records.` : 'document-suggestion' === normalizedScope ? `The '${session.mode}' collaboration mode cannot create Document suggestions.` : `The '${session.mode}' collaboration mode cannot modify canonical content.`);
142
143
  }
143
144
  function normalizedMutationScope(value) {
144
- if ('content' === value || 'document-comment' === value) return value;
145
+ if ('content' === value || 'document-comment' === value || 'document-suggestion' === value) return value;
145
146
  throw new WorkOfficeCollaborationError('office.collaboration.mutation_scope_invalid', `The collaboration mutation scope '${String(value)}' is invalid.`);
146
147
  }
147
148
  function assertSessionMetadata(session) {
package/dist/core.d.ts CHANGED
@@ -4,7 +4,7 @@ export type { WorkOfficeCollaborationParticipant as OfficeCollaborationParticipa
4
4
  export { createWorkOfficeCollaborationPresence as createOfficeCollaborationPresence, WORK_OFFICE_COLLABORATION_PRESENCE_FIELD as OFFICE_COLLABORATION_PRESENCE_FIELD, } from './internal/collaboration/office-collaboration-presence';
5
5
  export type { WorkOfficeCollaborationTransport as OfficeCollaborationTransport, WorkOfficeCollaborationTransportBinding as OfficeCollaborationTransportBinding, WorkOfficeCollaborationTransportBindingOptions as OfficeCollaborationTransportBindingOptions, WorkOfficeCollaborationTransportMessage as OfficeCollaborationTransportMessage, WorkOfficeCollaborationTransportMessageType as OfficeCollaborationTransportMessageType, } from './internal/collaboration/office-collaboration-transport';
6
6
  export { createWorkOfficeCollaborationTransportBinding as createOfficeCollaborationTransportBinding, WORK_OFFICE_COLLABORATION_DEFAULT_MAX_TRANSPORT_PAYLOAD_BYTES as OFFICE_COLLABORATION_DEFAULT_MAX_TRANSPORT_PAYLOAD_BYTES, WORK_OFFICE_COLLABORATION_MAX_TRANSPORT_PAYLOAD_BYTES as OFFICE_COLLABORATION_MAX_TRANSPORT_PAYLOAD_BYTES, } from './internal/collaboration/office-collaboration-transport';
7
- export type { WorkOfficeDocumentCollaborationBinding as OfficeDocumentCollaborationBinding, WorkOfficeDocumentCollaborationBindingOptions as OfficeDocumentCollaborationBindingOptions, WorkOfficeDocumentCollaborationChange as OfficeDocumentCollaborationChange, } from './internal/collaboration/office-document-collaboration';
7
+ export type { WorkOfficeDocumentCollaborationBinding as OfficeDocumentCollaborationBinding, WorkOfficeDocumentCollaborationBindingOptions as OfficeDocumentCollaborationBindingOptions, WorkOfficeDocumentCollaborationChange as OfficeDocumentCollaborationChange, WorkOfficeDocumentChangeDecisionOptions as OfficeDocumentChangeDecisionOptions, } from './internal/collaboration/office-document-collaboration';
8
8
  export { createWorkOfficeDocumentCollaborationBinding as createOfficeDocumentCollaborationBinding, initializeWorkOfficeDocumentCollaboration as initializeOfficeDocumentCollaboration, readWorkOfficeDocumentCollaboration as readOfficeDocumentCollaboration, workOfficeDocumentCollaborationFragment as officeDocumentCollaborationFragment, } from './internal/collaboration/office-document-collaboration';
9
9
  export type { WorkOfficeMarkdownCollaborationBinding as OfficeMarkdownCollaborationBinding, WorkOfficeMarkdownCollaborationBindingOptions as OfficeMarkdownCollaborationBindingOptions, WorkOfficeMarkdownCollaborationChange as OfficeMarkdownCollaborationChange, } from './internal/collaboration/office-markdown-collaboration';
10
10
  export { createWorkOfficeMarkdownCollaborationBinding as createOfficeMarkdownCollaborationBinding, initializeWorkOfficeMarkdownCollaboration as initializeOfficeMarkdownCollaboration, readWorkOfficeMarkdownCollaboration as readOfficeMarkdownCollaboration, replaceWorkOfficeMarkdownCollaboration as replaceOfficeMarkdownCollaboration, } from './internal/collaboration/office-markdown-collaboration';
@@ -13,7 +13,7 @@ export interface WorkOfficeCollaborationActor {
13
13
  kind?: WorkOfficeCollaborationActorKind;
14
14
  }
15
15
  export type WorkOfficeCollaborationOriginKind = 'bootstrap' | 'editor' | 'agent' | 'import' | 'system';
16
- export type WorkOfficeCollaborationMutationScope = 'content' | 'document-comment';
16
+ export type WorkOfficeCollaborationMutationScope = 'content' | 'document-comment' | 'document-suggestion';
17
17
  export interface WorkOfficeCollaborationOrigin {
18
18
  readonly protocol: typeof WORK_OFFICE_COLLABORATION_PROTOCOL;
19
19
  readonly kind: WorkOfficeCollaborationOriginKind;
@@ -0,0 +1,7 @@
1
+ import * as Y from 'yjs';
2
+ import type { WorkDocumentChangeDecision } from '../features/work/work-types';
3
+ export declare function validatedWorkOfficeDocumentChangeDecisions(value: unknown): WorkDocumentChangeDecision[];
4
+ export declare function initializeWorkOfficeDocumentChangeDecisions(records: Y.Map<unknown>, order: Y.Array<string>, decisions: WorkDocumentChangeDecision[]): void;
5
+ export declare function readWorkOfficeDocumentChangeDecisions(records: Y.Map<unknown>, order: Y.Array<string>): WorkDocumentChangeDecision[];
6
+ export declare function patchWorkOfficeDocumentChangeDecisions(records: Y.Map<unknown>, order: Y.Array<string>, previous: WorkDocumentChangeDecision[], next: WorkDocumentChangeDecision[]): void;
7
+ export declare function assertWorkOfficeDocumentChangeDecisionConflicts(previous: WorkDocumentChangeDecision[], next: WorkDocumentChangeDecision[], shared: WorkDocumentChangeDecision[]): void;
@@ -1,6 +1,7 @@
1
1
  import type * as Y from 'yjs';
2
- import type { WorkDocumentBibliography, WorkDocumentComment } from '../features/work/work-types';
2
+ import type { WorkDocumentBibliography, WorkDocumentChangeDecision, WorkDocumentComment } from '../features/work/work-types';
3
3
  interface ClaimableDocumentSidecars {
4
+ changeDecisions?: WorkDocumentChangeDecision[];
4
5
  comments?: WorkDocumentComment[];
5
6
  bibliography?: WorkDocumentBibliography;
6
7
  }
@@ -1,9 +1,10 @@
1
1
  import type * as Y from 'yjs';
2
- import type { WorkDocumentBibliography, WorkDocumentComment, WorkDocumentContent } from '../features/work/work-types';
2
+ import type { WorkDocumentBibliography, WorkDocumentChangeDecision, WorkDocumentComment, WorkDocumentContent } from '../features/work/work-types';
3
3
  import { type WorkOfficeCollaborationOrigin, type WorkOfficeCollaborationSession } from './office-collaboration';
4
4
  export interface WorkOfficeDocumentSidecars {
5
5
  pageColor?: string;
6
6
  trackChanges?: boolean;
7
+ changeDecisions?: WorkDocumentChangeDecision[];
7
8
  comments?: WorkDocumentComment[];
8
9
  bibliography?: WorkDocumentBibliography;
9
10
  }
@@ -12,5 +13,6 @@ export declare function initializeWorkOfficeDocumentSidecars(session: WorkOffice
12
13
  export declare function readWorkOfficeDocumentSidecars(session: WorkOfficeCollaborationSession): WorkOfficeDocumentSidecars;
13
14
  export declare function updateWorkOfficeDocumentSidecars(session: WorkOfficeCollaborationSession, previous: WorkDocumentContent, next: WorkDocumentContent, origin: WorkOfficeCollaborationOrigin): boolean;
14
15
  export declare function workOfficeDocumentSidecarUndoScope(session: WorkOfficeCollaborationSession): Array<Y.Map<unknown> | Y.Array<string>>;
16
+ export declare function workOfficeDocumentDecisionRootsChanged(session: WorkOfficeCollaborationSession, transaction: Y.Transaction): boolean;
15
17
  export declare function workOfficeDocumentSidecarsChanged(session: WorkOfficeCollaborationSession, transaction: Y.Transaction): boolean;
16
18
  export declare function validatedWorkOfficeDocumentSidecars(content: WorkDocumentContent): WorkOfficeDocumentSidecars;
@@ -0,0 +1,6 @@
1
+ import type { Transaction } from '@tiptap/pm/state';
2
+ import type { WorkDocumentChange } from '../features/work/work-document-changes';
3
+ import type { WorkDocumentChangeDecision, WorkDocumentChangeDecisionAction } from '../features/work/work-types';
4
+ import type { WorkOfficeCollaborationSession } from './office-collaboration';
5
+ export declare function workOfficeDocumentSuggestionTransactionAllowed(session: WorkOfficeCollaborationSession, transaction: Transaction): boolean;
6
+ export declare function createWorkOfficeDocumentChangeDecisions(session: WorkOfficeCollaborationSession, changes: readonly WorkDocumentChange[], decision: WorkDocumentChangeDecisionAction, decidedAt?: string): WorkDocumentChangeDecision[];
@@ -1,7 +1,7 @@
1
- import { type Extensions } from '@tiptap/core';
1
+ import { type Editor, type Extensions } from '@tiptap/core';
2
2
  import * as Y from 'yjs';
3
3
  import { createWorkDocumentExtensions } from '../features/work/work-document-extensions';
4
- import type { WorkDocumentContent, WorkDocumentNode } from '../features/work/work-types';
4
+ import type { WorkDocumentChangeDecisionAction, WorkDocumentContent, WorkDocumentNode } from '../features/work/work-types';
5
5
  import { type WorkOfficeCollaborationOrigin, type WorkOfficeCollaborationSession } from './office-collaboration';
6
6
  export interface WorkOfficeDocumentCollaborationBindingOptions {
7
7
  /**
@@ -19,12 +19,16 @@ export interface WorkOfficeDocumentCollaborationChange {
19
19
  local: boolean;
20
20
  origin: unknown;
21
21
  }
22
+ export interface WorkOfficeDocumentChangeDecisionOptions {
23
+ decidedAt?: string;
24
+ }
22
25
  export interface WorkOfficeDocumentCollaborationBinding {
23
26
  readonly extensions: Extensions;
24
27
  readonly fragment: Y.XmlFragment;
25
28
  readonly origin: WorkOfficeCollaborationOrigin;
26
29
  content(): WorkDocumentContent;
27
30
  updateSidecars(previous: WorkDocumentContent, next: WorkDocumentContent): boolean;
31
+ decideChanges(editor: Editor, changeIds: readonly string[], decision: WorkDocumentChangeDecisionAction, options?: WorkOfficeDocumentChangeDecisionOptions): boolean;
28
32
  canUndo(): boolean;
29
33
  canRedo(): boolean;
30
34
  undo(): boolean;
@@ -1,9 +1,15 @@
1
1
  import type { Editor } from '@tiptap/core';
2
2
  import type { WorkDocumentChange } from '../work-document-changes';
3
- export declare function DocumentChangesPanel({ editor, changes, trackChanges, onTrackChangesChange, onClose, }: {
3
+ import type { WorkDocumentChangeDecision } from '../work-types';
4
+ type DocumentChangeDecision = 'accept' | 'reject';
5
+ export declare function DocumentChangesPanel({ editor, changes, decisions, trackChanges, suggestionOnly, onDecideChanges, onTrackChangesChange, onClose, }: {
4
6
  editor: Editor;
5
7
  changes: WorkDocumentChange[];
8
+ decisions?: WorkDocumentChangeDecision[];
6
9
  trackChanges: boolean;
10
+ suggestionOnly?: boolean;
11
+ onDecideChanges?: (changes: readonly WorkDocumentChange[], decision: DocumentChangeDecision) => boolean;
7
12
  onTrackChangesChange: (enabled: boolean) => void;
8
13
  onClose: () => void;
9
14
  }): import("react").JSX.Element;
15
+ export {};
@@ -1,5 +1,6 @@
1
1
  import type { Editor } from '@tiptap/core';
2
2
  import type { WorkDocumentCaptionKind } from '../work-document-captions';
3
+ import { type WorkDocumentChange } from '../work-document-changes';
3
4
  import type { WorkDocumentFieldKind } from '../work-document-fields';
4
5
  import type { WorkDocumentLayoutFont } from '../work-document-fonts';
5
6
  import type { WorkDocumentNoteKind } from '../work-document-notes';
@@ -15,6 +16,7 @@ interface DocumentToolbarProps {
15
16
  editor: Editor;
16
17
  defaultRibbonCollapsed?: boolean;
17
18
  reviewOnly?: boolean;
19
+ suggestionOnly?: boolean;
18
20
  history?: {
19
21
  canRedo: boolean;
20
22
  canUndo: boolean;
@@ -71,8 +73,9 @@ interface DocumentToolbarProps {
71
73
  onRibbonTabChange?: (tab: DocumentRibbonTabId) => boolean | undefined | Promise<boolean | undefined>;
72
74
  onToggleTrackChanges: () => void;
73
75
  onToggleChanges: () => void;
76
+ onDecideChange?: (change: WorkDocumentChange, decision: 'accept' | 'reject') => boolean;
74
77
  onOpenWordCount: () => void;
75
78
  onOpenFindReplace: (mode: DocumentFindReplaceMode) => void;
76
79
  }
77
- export declare function DocumentToolbar({ editor, defaultRibbonCollapsed, reviewOnly, history, layoutOpen, layout, layoutFonts, navigationOpen, pageColor, showPageNumbers, showRulers, spellcheckEnabled, viewMode, zoom, pageChromeEditor, pageChromeEditingPart, pageChromeShowPageNumber, onRequestImage, onPageChromeEditingPartChange, onClosePageChrome, onTogglePageChromePageNumber, onToggleLayout, onLayoutChange, onOpenLayout, onToggleNavigation, onTogglePageNumbers, onToggleRulers, onPageColorChange, onToggleSpellcheck, onViewModeChange, onZoomChange, onZoomFit, onInsertSection, onInsertNote, onInsertCaption, onInsertCrossReference, citationsOpen, citationSourceCount, onToggleCitations, onInsertField, onRefreshFields, canInsertComment, onInsertComment, commentsOpen, commentCount, onToggleComments, trackChanges, changesOpen, changeCount, findReplaceMode, fileActions, onRibbonTabChange, onToggleTrackChanges, onToggleChanges, onOpenWordCount, onOpenFindReplace, }: DocumentToolbarProps): import("react").JSX.Element;
80
+ export declare function DocumentToolbar({ editor, defaultRibbonCollapsed, reviewOnly, suggestionOnly, history, layoutOpen, layout, layoutFonts, navigationOpen, pageColor, showPageNumbers, showRulers, spellcheckEnabled, viewMode, zoom, pageChromeEditor, pageChromeEditingPart, pageChromeShowPageNumber, onRequestImage, onPageChromeEditingPartChange, onClosePageChrome, onTogglePageChromePageNumber, onToggleLayout, onLayoutChange, onOpenLayout, onToggleNavigation, onTogglePageNumbers, onToggleRulers, onPageColorChange, onToggleSpellcheck, onViewModeChange, onZoomChange, onZoomFit, onInsertSection, onInsertNote, onInsertCaption, onInsertCrossReference, citationsOpen, citationSourceCount, onToggleCitations, onInsertField, onRefreshFields, canInsertComment, onInsertComment, commentsOpen, commentCount, onToggleComments, trackChanges, changesOpen, changeCount, findReplaceMode, fileActions, onRibbonTabChange, onToggleTrackChanges, onToggleChanges, onDecideChange, onOpenWordCount, onOpenFindReplace, }: DocumentToolbarProps): import("react").JSX.Element;
78
81
  export {};
@@ -1,8 +1,10 @@
1
1
  import { Mark } from '@tiptap/core';
2
2
  import { type Node as ProseMirrorNode } from '@tiptap/pm/model';
3
- export type WorkDocumentChangeKind = 'insertion' | 'deletion';
3
+ import type { WorkDocumentChangeKind } from './work-types';
4
+ export type { WorkDocumentChangeKind } from './work-types';
4
5
  export interface WorkDocumentChangeIdentity {
5
6
  id: string;
7
+ actorId?: string;
6
8
  author: string;
7
9
  date: string;
8
10
  }
@@ -22,8 +24,10 @@ declare module '@tiptap/core' {
22
24
  documentChange: {
23
25
  acceptAllDocumentChanges: () => ReturnType;
24
26
  acceptDocumentChange: (id: string) => ReturnType;
27
+ acceptDocumentChanges: (ids: readonly string[]) => ReturnType;
25
28
  rejectAllDocumentChanges: () => ReturnType;
26
29
  rejectDocumentChange: (id: string) => ReturnType;
30
+ rejectDocumentChanges: (ids: readonly string[]) => ReturnType;
27
31
  replaceDocumentTextWithTrackedChange: (from: number, to: number, text: string) => ReturnType;
28
32
  setDocumentTrackChanges: (enabled: boolean) => ReturnType;
29
33
  toggleDocumentTrackChanges: () => ReturnType;
@@ -32,4 +36,3 @@ declare module '@tiptap/core' {
32
36
  }
33
37
  export declare const DocumentChange: Mark<DocumentChangeOptions, any>;
34
38
  export declare function collectDocumentChanges(document: ProseMirrorNode): WorkDocumentChange[];
35
- export {};
@@ -8,5 +8,6 @@ export interface WorkDocumentExtensionOptions {
8
8
  createChange?: (kind: WorkDocumentChangeKind) => WorkDocumentChangeIdentity;
9
9
  onContentChange?: (content: WorkDocumentContent) => void;
10
10
  onTrackingChange?: (enabled: boolean) => void;
11
+ rotateTrackedTextIdentities?: () => boolean;
11
12
  }
12
13
  export declare function createWorkDocumentExtensions(options?: WorkDocumentExtensionOptions): Extensions;
@@ -11,6 +11,7 @@ export interface WorkDocumentParagraphIdentityRegistry {
11
11
  paragraphIds: Set<string>;
12
12
  }
13
13
  interface DocumentParagraphIdentityOptions {
14
+ rotateTextId: () => boolean;
14
15
  types: string[];
15
16
  }
16
17
  export declare const DOCUMENT_PARAGRAPH_ID_ATTRIBUTE = "data-office-paragraph-id";
@@ -9,7 +9,11 @@ export interface WorkDocumentTableRowIdentitySource {
9
9
  }
10
10
  export declare const DOCUMENT_TABLE_ROW_ID_ATTRIBUTE = "data-office-row-id";
11
11
  export declare const DOCUMENT_TABLE_ROW_TEXT_ID_ATTRIBUTE = "data-office-row-text-id";
12
- export declare const DocumentTableRowIdentity: Extension<any, any>;
12
+ interface DocumentTableRowIdentityOptions {
13
+ rotateTextId: () => boolean;
14
+ }
15
+ export declare const DocumentTableRowIdentity: Extension<DocumentTableRowIdentityOptions, any>;
13
16
  export declare function normalizeDocumentTableRowIdentity(source: WorkDocumentTableRowIdentitySource): WorkDocumentTableRowIdentity | null;
14
17
  export declare function documentTableRowIdentityFromElement(element: Element): WorkDocumentTableRowIdentity | null;
15
18
  export declare function applyDocumentTableRowIdentityToElement(element: Element, source: WorkDocumentTableRowIdentitySource): WorkDocumentTableRowIdentity | null;
19
+ export {};
@@ -102,9 +102,29 @@ export interface WorkDocumentContent {
102
102
  pageGeometry?: WorkDocumentPageGeometry;
103
103
  paperSource?: WorkDocumentPaperSource;
104
104
  trackChanges?: boolean;
105
+ changeDecisions?: WorkDocumentChangeDecision[];
105
106
  comments?: WorkDocumentComment[];
106
107
  bibliography?: WorkDocumentBibliography;
107
108
  }
109
+ export type WorkDocumentChangeKind = 'insertion' | 'deletion';
110
+ export type WorkDocumentChangeDecisionAction = 'accept' | 'reject';
111
+ /**
112
+ * Immutable audit record created when an editor accepts or rejects one
113
+ * collaborative tracked change.
114
+ */
115
+ export interface WorkDocumentChangeDecision {
116
+ id: string;
117
+ changeId: string;
118
+ changeKind: WorkDocumentChangeKind;
119
+ suggestedByActorId?: string;
120
+ suggestedBy: string;
121
+ suggestedAt: string;
122
+ text: string;
123
+ decision: WorkDocumentChangeDecisionAction;
124
+ decidedByActorId?: string;
125
+ decidedBy: string;
126
+ decidedAt: string;
127
+ }
108
128
  export interface WorkMarkdownContent {
109
129
  type: 'markdown';
110
130
  markdown: string;
Binary file
package/dist/styles.css CHANGED
@@ -11967,6 +11967,71 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
11967
11967
  grid-column: 2;
11968
11968
  }
11969
11969
 
11970
+ .work-document-change-decisions {
11971
+ border-top: 1px solid var(--a3s-line);
11972
+ background: var(--a3s-panel-soft);
11973
+ flex: none;
11974
+ gap: 7px;
11975
+ padding: 9px 10px 10px;
11976
+ display: grid;
11977
+ }
11978
+
11979
+ .work-document-change-decisions > header {
11980
+ color: var(--a3s-muted);
11981
+ justify-content: space-between;
11982
+ align-items: center;
11983
+ font-size: 10px;
11984
+ display: flex;
11985
+ }
11986
+
11987
+ .work-document-change-decisions > header strong {
11988
+ color: var(--a3s-ink);
11989
+ font-size: 11px;
11990
+ }
11991
+
11992
+ .work-document-change-decisions > ol {
11993
+ gap: 6px;
11994
+ max-height: 168px;
11995
+ margin: 0;
11996
+ padding: 0;
11997
+ list-style: none;
11998
+ display: grid;
11999
+ overflow: auto;
12000
+ }
12001
+
12002
+ .work-document-change-decisions li {
12003
+ border: 1px solid var(--a3s-line);
12004
+ background: var(--a3s-bg);
12005
+ border-radius: 6px;
12006
+ grid-template-columns: auto minmax(0, 1fr);
12007
+ gap: 3px 8px;
12008
+ padding: 7px 8px;
12009
+ display: grid;
12010
+ }
12011
+
12012
+ .work-document-change-decisions li > span {
12013
+ color: #267048;
12014
+ font-size: 9px;
12015
+ font-weight: 650;
12016
+ }
12017
+
12018
+ .work-document-change-decisions li[data-document-change-decision="reject"] > span {
12019
+ color: var(--a3s-red);
12020
+ }
12021
+
12022
+ .work-document-change-decisions li > strong {
12023
+ text-overflow: ellipsis;
12024
+ white-space: nowrap;
12025
+ font-size: 9px;
12026
+ overflow: hidden;
12027
+ }
12028
+
12029
+ .work-document-change-decisions li > small {
12030
+ color: var(--a3s-faint);
12031
+ grid-column: 2;
12032
+ font-size: 8px;
12033
+ }
12034
+
11970
12035
  .work-document-citations-panel.work-document-task-pane {
11971
12036
  max-height: none;
11972
12037
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a3s-lab/office",
3
- "version": "0.7.3",
3
+ "version": "0.8.0",
4
4
  "description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
5
5
  "keywords": [
6
6
  "office",
@@ -90,8 +90,8 @@
90
90
  "playground:visual:spreadsheet-ribbon": "playwright test visual-tests/spreadsheet-ribbon.functional.spec.ts --config playwright.config.ts",
91
91
  "playground:visual:update": "playwright test --config playwright.config.ts --update-snapshots",
92
92
  "test": "rstest",
93
- "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-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/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-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",
94
- "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-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/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-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",
93
+ "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-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/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",
94
+ "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-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/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",
95
95
  "test:e2e:fixtures": "bun scripts/create-e2e-fixtures.ts",
96
96
  "test:e2e:initial-focus": "a3s-test run tests/e2e/office-editor-initial-focus.acl --json",
97
97
  "test:e2e:initial-focus:check": "a3s-test check tests/e2e/office-editor-initial-focus.acl --json",
@@ -103,6 +103,8 @@
103
103
  "test:e2e:collaboration-playground:check": "a3s-test check tests/e2e/collaboration-playground-entry.acl --json",
104
104
  "test:e2e:collaboration-document-comments": "a3s-test run tests/e2e/collaboration-document-comments.acl --command-timeout-ms 120000 --json",
105
105
  "test:e2e:collaboration-document-comments:check": "a3s-test check tests/e2e/collaboration-document-comments.acl --json",
106
+ "test:e2e:collaboration-document-suggestions": "a3s-test run tests/e2e/collaboration-document-suggestions.acl --command-timeout-ms 120000 --json",
107
+ "test:e2e:collaboration-document-suggestions:check": "a3s-test check tests/e2e/collaboration-document-suggestions.acl --json",
106
108
  "test:e2e:collaboration-pdf-annotations": "a3s-test run tests/e2e/collaboration-pdf-annotations.acl --json",
107
109
  "test:e2e:collaboration-pdf-annotations:check": "a3s-test check tests/e2e/collaboration-pdf-annotations.acl --json",
108
110
  "test:e2e:collaboration-spreadsheet-cells": "a3s-test run tests/e2e/collaboration-spreadsheet-cells.acl --json",