@a3s-lab/office 0.7.2 → 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/COLLABORATION_ROADMAP.md +81 -26
- package/README.md +48 -4
- package/dist/0~document-editor.js +414 -247
- package/dist/8928.js +689 -49
- package/dist/9787.js +14 -4
- package/dist/core.d.ts +2 -2
- package/dist/internal/collaboration/office-collaboration.d.ts +4 -2
- package/dist/internal/collaboration/office-document-collaboration-change-decisions.d.ts +7 -0
- package/dist/internal/collaboration/office-document-collaboration-claims.d.ts +2 -1
- package/dist/internal/collaboration/office-document-collaboration-comment-permissions.d.ts +3 -0
- package/dist/internal/collaboration/office-document-collaboration-sidecars.d.ts +3 -1
- package/dist/internal/collaboration/office-document-collaboration-suggestions.d.ts +6 -0
- package/dist/internal/collaboration/office-document-collaboration.d.ts +6 -2
- package/dist/internal/features/work/editors/document-changes-panel.d.ts +7 -1
- package/dist/internal/features/work/editors/document-comment-composer.d.ts +1 -0
- package/dist/internal/features/work/editors/document-comments-panel.d.ts +3 -1
- package/dist/internal/features/work/editors/document-selection-toolbar.d.ts +2 -1
- package/dist/internal/features/work/editors/document-toolbar.d.ts +5 -1
- package/dist/internal/features/work/editors/use-document-comments.d.ts +6 -1
- package/dist/internal/features/work/work-document-changes.d.ts +5 -2
- package/dist/internal/features/work/work-document-comments.d.ts +5 -1
- package/dist/internal/features/work/work-document-extensions.d.ts +1 -0
- package/dist/internal/features/work/work-document-paragraph-identity.d.ts +1 -0
- package/dist/internal/features/work/work-document-table-row-identity.d.ts +5 -1
- package/dist/internal/features/work/work-types.d.ts +22 -0
- package/dist/office-kernel.wasm +0 -0
- package/dist/styles.css +76 -0
- package/package.json +12 -3
package/dist/9787.js
CHANGED
|
@@ -52,9 +52,9 @@ class WorkOfficeCollaborationSessionImpl {
|
|
|
52
52
|
operationId: void 0 === operationId ? void 0 : normalizedIdentifier(operationId, 'operation ID')
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
transact(operation, origin = this.localOrigin) {
|
|
55
|
+
transact(operation, origin = this.localOrigin, scope = 'content') {
|
|
56
56
|
this.ensureActive();
|
|
57
|
-
|
|
57
|
+
assertWorkOfficeCollaborationWritable(this, scope);
|
|
58
58
|
assertWorkOfficeCollaborationOrigin(origin);
|
|
59
59
|
let result;
|
|
60
60
|
this.document.transact((transaction)=>{
|
|
@@ -132,8 +132,18 @@ function registerWorkOfficeCollaborationInitializer(session) {
|
|
|
132
132
|
]);
|
|
133
133
|
}
|
|
134
134
|
function assertWorkOfficeCollaborationEditable(session) {
|
|
135
|
+
assertWorkOfficeCollaborationWritable(session, 'content');
|
|
136
|
+
}
|
|
137
|
+
function assertWorkOfficeCollaborationWritable(session, scope) {
|
|
138
|
+
const normalizedScope = normalizedMutationScope(scope);
|
|
135
139
|
if ('edit' === session.mode) return;
|
|
136
|
-
|
|
140
|
+
if ('comment' === session.mode && 'document' === session.kind && 'document-comment' === normalizedScope) return;
|
|
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.`);
|
|
143
|
+
}
|
|
144
|
+
function normalizedMutationScope(value) {
|
|
145
|
+
if ('content' === value || 'document-comment' === value || 'document-suggestion' === value) return value;
|
|
146
|
+
throw new WorkOfficeCollaborationError('office.collaboration.mutation_scope_invalid', `The collaboration mutation scope '${String(value)}' is invalid.`);
|
|
137
147
|
}
|
|
138
148
|
function assertSessionMetadata(session) {
|
|
139
149
|
readWorkOfficeCollaborationMetadata(session);
|
|
@@ -206,4 +216,4 @@ function normalizedRootSuffix(value) {
|
|
|
206
216
|
function isWorkArtifactKind(value) {
|
|
207
217
|
return 'document' === value || 'markdown' === value || 'spreadsheet' === value || 'presentation' === value || 'pdf' === value;
|
|
208
218
|
}
|
|
209
|
-
export { WORK_OFFICE_COLLABORATION_NAMESPACE as OFFICE_COLLABORATION_NAMESPACE, WORK_OFFICE_COLLABORATION_PROTOCOL as OFFICE_COLLABORATION_PROTOCOL, WorkOfficeCollaborationError as OfficeCollaborationError, assertWorkOfficeCollaborationEditable, assertWorkOfficeCollaborationOrigin, createWorkOfficeCollaborationSession as createOfficeCollaborationSession, initializeWorkOfficeCollaborationMetadata, markWorkOfficeCollaborationInitialized, readWorkOfficeCollaborationMetadata as readOfficeCollaborationMetadata, registerWorkOfficeCollaborationInitializer };
|
|
219
|
+
export { WORK_OFFICE_COLLABORATION_NAMESPACE as OFFICE_COLLABORATION_NAMESPACE, WORK_OFFICE_COLLABORATION_PROTOCOL as OFFICE_COLLABORATION_PROTOCOL, WorkOfficeCollaborationError as OfficeCollaborationError, assertWorkOfficeCollaborationEditable, assertWorkOfficeCollaborationOrigin, assertWorkOfficeCollaborationWritable, createWorkOfficeCollaborationSession as createOfficeCollaborationSession, initializeWorkOfficeCollaborationMetadata, markWorkOfficeCollaborationInitialized, readWorkOfficeCollaborationMetadata as readOfficeCollaborationMetadata, registerWorkOfficeCollaborationInitializer };
|
package/dist/core.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export type { WorkOfficeCollaborationActor as OfficeCollaborationActor, WorkOfficeCollaborationActorKind as OfficeCollaborationActorKind, WorkOfficeCollaborationAwareness as OfficeCollaborationAwareness, WorkOfficeCollaborationErrorCode as OfficeCollaborationErrorCode, WorkOfficeCollaborationMetadata as OfficeCollaborationMetadata, WorkOfficeCollaborationMode as OfficeCollaborationMode, WorkOfficeCollaborationOrigin as OfficeCollaborationOrigin, WorkOfficeCollaborationOriginKind as OfficeCollaborationOriginKind, WorkOfficeCollaborationSession as OfficeCollaborationSession, WorkOfficeCollaborationSessionOptions as OfficeCollaborationSessionOptions, } from './internal/collaboration/office-collaboration';
|
|
1
|
+
export type { WorkOfficeCollaborationActor as OfficeCollaborationActor, WorkOfficeCollaborationActorKind as OfficeCollaborationActorKind, WorkOfficeCollaborationAwareness as OfficeCollaborationAwareness, WorkOfficeCollaborationErrorCode as OfficeCollaborationErrorCode, WorkOfficeCollaborationMetadata as OfficeCollaborationMetadata, WorkOfficeCollaborationMode as OfficeCollaborationMode, WorkOfficeCollaborationMutationScope as OfficeCollaborationMutationScope, WorkOfficeCollaborationOrigin as OfficeCollaborationOrigin, WorkOfficeCollaborationOriginKind as OfficeCollaborationOriginKind, WorkOfficeCollaborationSession as OfficeCollaborationSession, WorkOfficeCollaborationSessionOptions as OfficeCollaborationSessionOptions, } from './internal/collaboration/office-collaboration';
|
|
2
2
|
export { createWorkOfficeCollaborationSession as createOfficeCollaborationSession, readWorkOfficeCollaborationMetadata as readOfficeCollaborationMetadata, WORK_OFFICE_COLLABORATION_NAMESPACE as OFFICE_COLLABORATION_NAMESPACE, WORK_OFFICE_COLLABORATION_PROTOCOL as OFFICE_COLLABORATION_PROTOCOL, WORK_OFFICE_COLLABORATION_VERSION as OFFICE_COLLABORATION_VERSION, WorkOfficeCollaborationError as OfficeCollaborationError, } from './internal/collaboration/office-collaboration';
|
|
3
3
|
export type { WorkOfficeCollaborationParticipant as OfficeCollaborationParticipant, WorkOfficeCollaborationPresence as OfficeCollaborationPresence, WorkOfficeCollaborationPresenceActivity as OfficeCollaborationPresenceActivity, WorkOfficeCollaborationPresenceActor as OfficeCollaborationPresenceActor, WorkOfficeCollaborationPresenceLocation as OfficeCollaborationPresenceLocation, WorkOfficeCollaborationPresenceSnapshot as OfficeCollaborationPresenceSnapshot, WorkOfficeCollaborationPresenceState as OfficeCollaborationPresenceState, WorkOfficeCollaborationPresenceUpdate as OfficeCollaborationPresenceUpdate, WorkOfficeDocumentPresenceLocation as OfficeDocumentPresenceLocation, WorkOfficeMarkdownPresenceLocation as OfficeMarkdownPresenceLocation, WorkOfficePdfPresenceLocation as OfficePdfPresenceLocation, WorkOfficePresentationPresenceLocation as OfficePresentationPresenceLocation, WorkOfficeSpreadsheetPresenceCell as OfficeSpreadsheetPresenceCell, WorkOfficeSpreadsheetPresenceLocation as OfficeSpreadsheetPresenceLocation, WorkOfficeSpreadsheetPresenceRange as OfficeSpreadsheetPresenceRange, WorkOfficeTextPresenceLocation as OfficeTextPresenceLocation, } from './internal/collaboration/office-collaboration-presence';
|
|
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,6 +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' | 'document-suggestion';
|
|
16
17
|
export interface WorkOfficeCollaborationOrigin {
|
|
17
18
|
readonly protocol: typeof WORK_OFFICE_COLLABORATION_PROTOCOL;
|
|
18
19
|
readonly kind: WorkOfficeCollaborationOriginKind;
|
|
@@ -68,10 +69,10 @@ export interface WorkOfficeCollaborationSession {
|
|
|
68
69
|
metadata(): WorkOfficeCollaborationMetadata | null;
|
|
69
70
|
rootName(suffix: string): string;
|
|
70
71
|
createOrigin(kind: WorkOfficeCollaborationOriginKind, operationId?: string): WorkOfficeCollaborationOrigin;
|
|
71
|
-
transact<T>(operation: (transaction: Y.Transaction) => T, origin?: WorkOfficeCollaborationOrigin): T;
|
|
72
|
+
transact<T>(operation: (transaction: Y.Transaction) => T, origin?: WorkOfficeCollaborationOrigin, scope?: WorkOfficeCollaborationMutationScope): T;
|
|
72
73
|
destroy(): void;
|
|
73
74
|
}
|
|
74
|
-
export type WorkOfficeCollaborationErrorCode = 'office.collaboration.actor_invalid' | 'office.collaboration.artifact_mismatch' | 'office.collaboration.binding_destroyed' | 'office.collaboration.bootstrap_ambiguous' | 'office.collaboration.bootstrap_invalid' | 'office.collaboration.content_invalid' | 'office.collaboration.identifier_invalid' | 'office.collaboration.kind_invalid' | 'office.collaboration.kind_mismatch' | 'office.collaboration.metadata_invalid' | 'office.collaboration.metadata_missing' | 'office.collaboration.mode_invalid' | 'office.collaboration.namespace_invalid' | 'office.collaboration.not_initialized' | 'office.collaboration.origin_invalid' | 'office.collaboration.permission_denied' | 'office.collaboration.presence_conflict' | 'office.collaboration.presence_invalid' | 'office.collaboration.presence_unavailable' | 'office.collaboration.root_invalid' | 'office.collaboration.session_destroyed' | 'office.collaboration.transport_identity_mismatch' | 'office.collaboration.transport_invalid' | 'office.collaboration.transport_message_invalid' | 'office.collaboration.transport_message_too_large';
|
|
75
|
+
export type WorkOfficeCollaborationErrorCode = 'office.collaboration.actor_invalid' | 'office.collaboration.artifact_mismatch' | 'office.collaboration.binding_destroyed' | 'office.collaboration.bootstrap_ambiguous' | 'office.collaboration.bootstrap_invalid' | 'office.collaboration.content_invalid' | 'office.collaboration.identifier_invalid' | 'office.collaboration.kind_invalid' | 'office.collaboration.kind_mismatch' | 'office.collaboration.metadata_invalid' | 'office.collaboration.metadata_missing' | 'office.collaboration.mode_invalid' | 'office.collaboration.mutation_scope_invalid' | 'office.collaboration.namespace_invalid' | 'office.collaboration.not_initialized' | 'office.collaboration.origin_invalid' | 'office.collaboration.permission_denied' | 'office.collaboration.presence_conflict' | 'office.collaboration.presence_invalid' | 'office.collaboration.presence_unavailable' | 'office.collaboration.root_invalid' | 'office.collaboration.session_destroyed' | 'office.collaboration.transport_identity_mismatch' | 'office.collaboration.transport_invalid' | 'office.collaboration.transport_message_invalid' | 'office.collaboration.transport_message_too_large';
|
|
75
76
|
export declare class WorkOfficeCollaborationError extends Error {
|
|
76
77
|
readonly code: WorkOfficeCollaborationErrorCode;
|
|
77
78
|
constructor(code: WorkOfficeCollaborationErrorCode, message: string);
|
|
@@ -82,4 +83,5 @@ export declare function initializeWorkOfficeCollaborationMetadata(session: WorkO
|
|
|
82
83
|
export declare function markWorkOfficeCollaborationInitialized(session: WorkOfficeCollaborationSession): void;
|
|
83
84
|
export declare function registerWorkOfficeCollaborationInitializer(session: WorkOfficeCollaborationSession): void;
|
|
84
85
|
export declare function assertWorkOfficeCollaborationEditable(session: WorkOfficeCollaborationSession): void;
|
|
86
|
+
export declare function assertWorkOfficeCollaborationWritable(session: WorkOfficeCollaborationSession, scope: WorkOfficeCollaborationMutationScope): void;
|
|
85
87
|
export declare function assertWorkOfficeCollaborationOrigin(origin: WorkOfficeCollaborationOrigin): void;
|
|
@@ -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
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { WorkDocumentComment } from '../features/work/work-types';
|
|
2
|
+
import { type WorkOfficeCollaborationSession } from './office-collaboration';
|
|
3
|
+
export declare function assertWorkOfficeDocumentCommentMutationAllowed(session: WorkOfficeCollaborationSession, previous: readonly WorkDocumentComment[], next: readonly WorkDocumentComment[]): void;
|
|
@@ -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
|
-
|
|
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 {};
|
|
@@ -2,10 +2,12 @@ import type { Editor } from '@tiptap/core';
|
|
|
2
2
|
import { type RefObject } from 'react';
|
|
3
3
|
import { type WorkDocumentCommentView } from '../work-document-comments';
|
|
4
4
|
import { type DocumentCommentDraft } from './document-comment-composer';
|
|
5
|
-
export declare function DocumentCommentsPanel({ editor, comments, draft, surfaceRef, onReply, onToggleResolved, onDelete, onCancelDraft, onSubmitDraft, onClose, onDirtyChange, }: {
|
|
5
|
+
export declare function DocumentCommentsPanel({ editor, comments, canDelete, draft, draftAuthor, surfaceRef, onReply, onToggleResolved, onDelete, onCancelDraft, onSubmitDraft, onClose, onDirtyChange, }: {
|
|
6
6
|
editor: Editor;
|
|
7
7
|
comments: WorkDocumentCommentView[];
|
|
8
|
+
canDelete?: (id: string) => boolean;
|
|
8
9
|
draft: DocumentCommentDraft | null;
|
|
10
|
+
draftAuthor?: string;
|
|
9
11
|
surfaceRef: RefObject<HTMLDivElement | null>;
|
|
10
12
|
onReply: (id: string, text: string) => void;
|
|
11
13
|
onToggleResolved: (id: string) => void;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Editor } from '@tiptap/core';
|
|
2
2
|
import type { WorkDocumentLayoutFont } from '../work-document-fonts';
|
|
3
|
-
export declare function DocumentSelectionToolbar({ editor, canInsertComment, layoutFonts, onInsertComment, }: {
|
|
3
|
+
export declare function DocumentSelectionToolbar({ editor, canInsertComment, layoutFonts, onInsertComment, reviewOnly, }: {
|
|
4
4
|
editor: Editor;
|
|
5
5
|
canInsertComment: boolean;
|
|
6
6
|
layoutFonts?: readonly WorkDocumentLayoutFont[];
|
|
7
7
|
onInsertComment: () => void;
|
|
8
|
+
reviewOnly?: boolean;
|
|
8
9
|
}): import("react").JSX.Element;
|
|
@@ -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';
|
|
@@ -14,6 +15,8 @@ export type DocumentViewMode = 'page' | 'web';
|
|
|
14
15
|
interface DocumentToolbarProps {
|
|
15
16
|
editor: Editor;
|
|
16
17
|
defaultRibbonCollapsed?: boolean;
|
|
18
|
+
reviewOnly?: boolean;
|
|
19
|
+
suggestionOnly?: boolean;
|
|
17
20
|
history?: {
|
|
18
21
|
canRedo: boolean;
|
|
19
22
|
canUndo: boolean;
|
|
@@ -70,8 +73,9 @@ interface DocumentToolbarProps {
|
|
|
70
73
|
onRibbonTabChange?: (tab: DocumentRibbonTabId) => boolean | undefined | Promise<boolean | undefined>;
|
|
71
74
|
onToggleTrackChanges: () => void;
|
|
72
75
|
onToggleChanges: () => void;
|
|
76
|
+
onDecideChange?: (change: WorkDocumentChange, decision: 'accept' | 'reject') => boolean;
|
|
73
77
|
onOpenWordCount: () => void;
|
|
74
78
|
onOpenFindReplace: (mode: DocumentFindReplaceMode) => void;
|
|
75
79
|
}
|
|
76
|
-
export declare function DocumentToolbar({ editor, defaultRibbonCollapsed, 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;
|
|
77
81
|
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { Editor } from '@tiptap/core';
|
|
2
|
+
import type { WorkOfficeCollaborationActor } from '../../../collaboration/office-collaboration';
|
|
2
3
|
import { type WorkDocumentCommentView } from '../work-document-comments';
|
|
3
4
|
import type { WorkDocumentContent } from '../work-types';
|
|
4
5
|
import type { DocumentCommentDraft } from './document-comment-composer';
|
|
5
6
|
export interface DocumentCommentsController {
|
|
7
|
+
canDeleteComment: (id: string) => boolean;
|
|
6
8
|
canInsert: boolean;
|
|
7
9
|
close: () => void;
|
|
8
10
|
closeDraft: (restoreEditorFocus?: boolean) => void;
|
|
@@ -17,10 +19,13 @@ export interface DocumentCommentsController {
|
|
|
17
19
|
toggleOpen: () => void;
|
|
18
20
|
toggleResolved: (id: string) => void;
|
|
19
21
|
}
|
|
20
|
-
export declare function useDocumentComments({ contentRef, editor, onBeforeDraft, }: {
|
|
22
|
+
export declare function useDocumentComments({ actor, contentRef, deleteOwnOnly, editor, enabled, onBeforeDraft, }: {
|
|
23
|
+
actor?: WorkOfficeCollaborationActor;
|
|
21
24
|
contentRef: {
|
|
22
25
|
current: WorkDocumentContent;
|
|
23
26
|
};
|
|
27
|
+
deleteOwnOnly?: boolean;
|
|
24
28
|
editor: Editor | null;
|
|
29
|
+
enabled?: boolean;
|
|
25
30
|
onBeforeDraft?: () => void;
|
|
26
31
|
}): DocumentCommentsController;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Mark } from '@tiptap/core';
|
|
2
2
|
import { type Node as ProseMirrorNode } from '@tiptap/pm/model';
|
|
3
|
-
|
|
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 {};
|
|
@@ -7,7 +7,11 @@ export interface WorkDocumentCommentAnchor {
|
|
|
7
7
|
to: number;
|
|
8
8
|
anchorText: string;
|
|
9
9
|
}
|
|
10
|
-
export interface WorkDocumentCommentView extends WorkDocumentComment
|
|
10
|
+
export interface WorkDocumentCommentView extends WorkDocumentComment {
|
|
11
|
+
from: number | null;
|
|
12
|
+
to: number | null;
|
|
13
|
+
anchorText: string;
|
|
14
|
+
detached: boolean;
|
|
11
15
|
}
|
|
12
16
|
export interface WorkDocumentCommentRange {
|
|
13
17
|
from: number;
|
|
@@ -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
|
-
|
|
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;
|
|
@@ -148,12 +168,14 @@ export interface WorkDocumentBibliography {
|
|
|
148
168
|
}
|
|
149
169
|
export interface WorkDocumentCommentReply {
|
|
150
170
|
id: string;
|
|
171
|
+
actorId?: string;
|
|
151
172
|
author: string;
|
|
152
173
|
date: string;
|
|
153
174
|
text: string;
|
|
154
175
|
}
|
|
155
176
|
export interface WorkDocumentComment {
|
|
156
177
|
id: string;
|
|
178
|
+
actorId?: string;
|
|
157
179
|
author: string;
|
|
158
180
|
date: string;
|
|
159
181
|
text: string;
|
package/dist/office-kernel.wasm
CHANGED
|
Binary file
|
package/dist/styles.css
CHANGED
|
@@ -8742,6 +8742,10 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
8742
8742
|
opacity: .64;
|
|
8743
8743
|
}
|
|
8744
8744
|
|
|
8745
|
+
.work-document-comment-track > .work-document-comment-card.detached {
|
|
8746
|
+
border-left-color: var(--a3s-faint);
|
|
8747
|
+
}
|
|
8748
|
+
|
|
8745
8749
|
.work-document-comment-draft-item, .work-document-comment-empty-item {
|
|
8746
8750
|
display: contents;
|
|
8747
8751
|
}
|
|
@@ -8860,10 +8864,17 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
8860
8864
|
color: var(--a3s-faint);
|
|
8861
8865
|
text-overflow: ellipsis;
|
|
8862
8866
|
white-space: nowrap;
|
|
8867
|
+
align-items: center;
|
|
8868
|
+
gap: 4px;
|
|
8863
8869
|
font-size: 8px;
|
|
8870
|
+
display: flex;
|
|
8864
8871
|
overflow: hidden;
|
|
8865
8872
|
}
|
|
8866
8873
|
|
|
8874
|
+
.work-document-comment-card.detached .work-document-comment-quote {
|
|
8875
|
+
color: var(--a3s-amber, #9a6700);
|
|
8876
|
+
}
|
|
8877
|
+
|
|
8867
8878
|
.work-document-comment-thread {
|
|
8868
8879
|
gap: 5px;
|
|
8869
8880
|
padding-left: 38px;
|
|
@@ -11956,6 +11967,71 @@ button.work-office-collaboration-participant:hover .work-office-collaboration-lo
|
|
|
11956
11967
|
grid-column: 2;
|
|
11957
11968
|
}
|
|
11958
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
|
+
|
|
11959
12035
|
.work-document-citations-panel.work-document-task-pane {
|
|
11960
12036
|
max-height: none;
|
|
11961
12037
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a3s-lab/office",
|
|
3
|
-
"version": "0.
|
|
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,15 +90,21 @@
|
|
|
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-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-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",
|
|
98
|
+
"test:e2e:docs": "a3s-test run tests/e2e/office-docs-navigation.acl --json",
|
|
99
|
+
"test:e2e:docs:check": "a3s-test check tests/e2e/office-docs-navigation.acl --json",
|
|
98
100
|
"test:e2e:collaboration-participants": "a3s-test run tests/e2e/collaboration-participants.acl --json",
|
|
99
101
|
"test:e2e:collaboration-participants:check": "a3s-test check tests/e2e/collaboration-participants.acl --json",
|
|
100
102
|
"test:e2e:collaboration-playground": "a3s-test run tests/e2e/collaboration-playground-entry.acl --json",
|
|
101
103
|
"test:e2e:collaboration-playground:check": "a3s-test check tests/e2e/collaboration-playground-entry.acl --json",
|
|
104
|
+
"test:e2e:collaboration-document-comments": "a3s-test run tests/e2e/collaboration-document-comments.acl --command-timeout-ms 120000 --json",
|
|
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",
|
|
102
108
|
"test:e2e:collaboration-pdf-annotations": "a3s-test run tests/e2e/collaboration-pdf-annotations.acl --json",
|
|
103
109
|
"test:e2e:collaboration-pdf-annotations:check": "a3s-test check tests/e2e/collaboration-pdf-annotations.acl --json",
|
|
104
110
|
"test:e2e:collaboration-spreadsheet-cells": "a3s-test run tests/e2e/collaboration-spreadsheet-cells.acl --json",
|
|
@@ -175,7 +181,10 @@
|
|
|
175
181
|
},
|
|
176
182
|
"devDependencies": {
|
|
177
183
|
"@biomejs/biome": "2.4.15",
|
|
184
|
+
"@fontsource-variable/geist": "^5.3.0",
|
|
185
|
+
"@fontsource-variable/geist-mono": "^5.3.0",
|
|
178
186
|
"@rspress/core": "^2.0.17",
|
|
187
|
+
"@rspress/shared": "2.0.19",
|
|
179
188
|
"@playwright/test": "1.61.1",
|
|
180
189
|
"@rsbuild/core": "^2.1.5",
|
|
181
190
|
"@rsbuild/plugin-react": "^2.1.0",
|