@a3s-lab/office 0.45.0 → 0.47.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 +23 -0
- package/dist/{0~2330.js → 0~2133.js} +312 -6
- package/dist/0~document-editor.js +4311 -3876
- package/dist/0~work-docx-export.js +198 -3
- package/dist/0~work-docx-import.js +53 -8
- package/dist/0~work-office-diagnostics.js +28 -8
- package/dist/4174.js +2253 -1604
- package/dist/internal/features/work/editors/document-command-catalog.d.ts +15 -1
- package/dist/internal/features/work/editors/document-text-box-ribbon.d.ts +4 -0
- package/dist/internal/features/work/editors/document-toolbar.d.ts +2 -1
- package/dist/internal/features/work/editors/use-document-insert-commands.d.ts +1 -0
- package/dist/internal/features/work/work-document-field-node.d.ts +2 -2
- package/dist/internal/features/work/work-document-fields.d.ts +36 -2
- package/dist/internal/features/work/work-document-text-box.d.ts +64 -0
- package/dist/internal/features/work/work-docx-bookmark-import.d.ts +1 -1
- package/dist/internal/features/work/work-docx-field-import.d.ts +5 -1
- package/dist/internal/features/work/work-docx-import.d.ts +3 -1
- package/dist/internal/features/work/work-docx-text-box-export.d.ts +25 -0
- package/dist/internal/features/work/work-docx-text-box-import.d.ts +26 -0
- package/dist/styles.css +63 -0
- package/package.json +6 -3
|
@@ -23,6 +23,11 @@ export declare const documentPictureRibbonTab: {
|
|
|
23
23
|
readonly label: "图片";
|
|
24
24
|
readonly contextual: true;
|
|
25
25
|
};
|
|
26
|
+
export declare const documentTextBoxRibbonTab: {
|
|
27
|
+
readonly id: "textBox";
|
|
28
|
+
readonly label: "文本框";
|
|
29
|
+
readonly contextual: true;
|
|
30
|
+
};
|
|
26
31
|
export declare const documentTableRibbonTabs: readonly [{
|
|
27
32
|
readonly id: "tableDesign";
|
|
28
33
|
readonly label: "表格设计";
|
|
@@ -41,7 +46,7 @@ export declare const documentPageChromeRibbonTab: {
|
|
|
41
46
|
readonly contextual: true;
|
|
42
47
|
};
|
|
43
48
|
export type DocumentStandardRibbonTabId = (typeof documentRibbonTabs)[number]['id'];
|
|
44
|
-
export type DocumentRibbonTabId = DocumentStandardRibbonTabId | typeof documentPictureRibbonTab.id | (typeof documentTableRibbonTabs)[number]['id'] | typeof documentPageChromeRibbonTab.id;
|
|
49
|
+
export type DocumentRibbonTabId = DocumentStandardRibbonTabId | typeof documentPictureRibbonTab.id | typeof documentTextBoxRibbonTab.id | (typeof documentTableRibbonTabs)[number]['id'] | typeof documentPageChromeRibbonTab.id;
|
|
45
50
|
export interface DocumentCommandShortcut {
|
|
46
51
|
label: string;
|
|
47
52
|
aria: string;
|
|
@@ -533,6 +538,15 @@ export declare const documentCommandCatalog: {
|
|
|
533
538
|
readonly editor: readonly ["Mod-Enter"];
|
|
534
539
|
};
|
|
535
540
|
};
|
|
541
|
+
readonly insertTextBox: {
|
|
542
|
+
readonly id: "insert.textBox";
|
|
543
|
+
readonly label: "插入文本框";
|
|
544
|
+
readonly location: {
|
|
545
|
+
readonly area: "ribbon";
|
|
546
|
+
readonly tab: "insert";
|
|
547
|
+
readonly group: "text";
|
|
548
|
+
};
|
|
549
|
+
};
|
|
536
550
|
readonly hyperlink: {
|
|
537
551
|
readonly id: "insert.hyperlink";
|
|
538
552
|
readonly label: "添加链接";
|
|
@@ -39,6 +39,7 @@ interface DocumentToolbarProps {
|
|
|
39
39
|
pageChromeEditingPart: DocumentPageChromeEditingPart | null;
|
|
40
40
|
pageChromeShowPageNumber: boolean;
|
|
41
41
|
onRequestImage: () => void;
|
|
42
|
+
onInsertTextBox?: () => void;
|
|
42
43
|
onPageChromeEditingPartChange: (part: DocumentPageChromeEditingPart) => void;
|
|
43
44
|
onClosePageChrome: () => void;
|
|
44
45
|
onTogglePageChromePageNumber: () => void;
|
|
@@ -86,5 +87,5 @@ interface DocumentToolbarProps {
|
|
|
86
87
|
onOpenWordCount: () => void;
|
|
87
88
|
onOpenFindReplace: (mode: DocumentFindReplaceMode) => void;
|
|
88
89
|
}
|
|
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;
|
|
90
|
+
export declare function DocumentToolbar({ editor, defaultRibbonCollapsed, reviewOnly, suggestionOnly, history, layoutOpen, layout, layoutFonts, navigationOpen, pageColor, showPageNumbers, showHiddenText, showRulers, spellcheckEnabled, viewMode, zoom, pageChromeEditor, pageChromeEditingPart, pageChromeShowPageNumber, onRequestImage, onInsertTextBox, 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;
|
|
90
91
|
export {};
|
|
@@ -11,6 +11,7 @@ export interface DocumentInsertCommands {
|
|
|
11
11
|
insertField: (kind: WorkDocumentFieldKind) => void;
|
|
12
12
|
insertImage: (file: File) => Promise<void>;
|
|
13
13
|
insertNote: (kind: WorkDocumentNoteKind) => boolean;
|
|
14
|
+
insertTextBox: () => boolean;
|
|
14
15
|
openIndexEntry: () => void;
|
|
15
16
|
openIndex: () => void;
|
|
16
17
|
openTableOfContents: () => void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Node } from '@tiptap/core';
|
|
2
|
-
import { type WorkDocumentFieldKind, type WorkDocumentFieldRefreshOptions } from './work-document-fields';
|
|
2
|
+
import { type WorkDocumentFieldInsertOptions, type WorkDocumentFieldKind, type WorkDocumentFieldRefreshOptions } from './work-document-fields';
|
|
3
3
|
import type { WorkDocumentContent } from './work-types';
|
|
4
4
|
declare module '@tiptap/core' {
|
|
5
5
|
interface Commands<ReturnType> {
|
|
6
6
|
documentField: {
|
|
7
|
-
insertDocumentField: (kind: WorkDocumentFieldKind) => ReturnType;
|
|
7
|
+
insertDocumentField: (kind: WorkDocumentFieldKind, options?: WorkDocumentFieldInsertOptions) => ReturnType;
|
|
8
8
|
refreshDocumentFields: (content: WorkDocumentContent, options?: WorkDocumentFieldRefreshOptions) => ReturnType;
|
|
9
9
|
};
|
|
10
10
|
}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
export type WorkDocumentFieldKind = 'page' | 'numPages' | 'section' | 'sectionPages' | 'date' | 'time';
|
|
1
|
+
export type WorkDocumentFieldKind = 'page' | 'numPages' | 'section' | 'sectionPages' | 'date' | 'time' | 'wordCount' | 'characterCount' | 'pageReference';
|
|
2
2
|
export interface WorkDocumentFieldContext {
|
|
3
3
|
pageNumber: number;
|
|
4
4
|
totalPages: number;
|
|
5
5
|
sectionNumber: number;
|
|
6
6
|
sectionPages: number;
|
|
7
|
+
/** Number of visible body words, excluding generated field results. */
|
|
8
|
+
wordCount?: number;
|
|
9
|
+
/** Number of visible body characters, including spaces. */
|
|
10
|
+
characterCount?: number;
|
|
11
|
+
/** Page number resolved for a PAGEREF target, when the target is present. */
|
|
12
|
+
referencePageNumber?: number | null;
|
|
13
|
+
/** Page numbers keyed by `id:<bookmark-id>` or `name:<bookmark-name>`. */
|
|
14
|
+
bookmarkPageNumbers?: ReadonlyMap<string, number>;
|
|
7
15
|
now?: Date;
|
|
8
16
|
}
|
|
9
17
|
export type WorkDocumentFieldContextResolver = (position: number) => WorkDocumentFieldContext | null;
|
|
@@ -13,10 +21,36 @@ export interface WorkDocumentFieldRefreshOptions {
|
|
|
13
21
|
addToHistory?: boolean;
|
|
14
22
|
updateClock?: boolean;
|
|
15
23
|
}
|
|
24
|
+
export interface WorkDocumentFieldInsertOptions {
|
|
25
|
+
/** Bookmark identity used to keep a page reference stable across renames. */
|
|
26
|
+
targetId?: string;
|
|
27
|
+
/** Bookmark name emitted in the native PAGEREF instruction. */
|
|
28
|
+
targetName?: string;
|
|
29
|
+
}
|
|
16
30
|
export declare function documentFieldKind(value: string | undefined): WorkDocumentFieldKind | null;
|
|
17
31
|
export declare function docxDocumentFieldKind(instruction: string): WorkDocumentFieldKind | null;
|
|
18
|
-
export declare function documentFieldInstruction(kind: WorkDocumentFieldKind): string;
|
|
32
|
+
export declare function documentFieldInstruction(kind: WorkDocumentFieldKind, options?: WorkDocumentFieldInsertOptions): string;
|
|
33
|
+
/** Builds a stable PAGEREF instruction while retaining the supported switches. */
|
|
34
|
+
export declare function documentPageReferenceInstruction(targetName: unknown, source?: string, defaultHyperlink?: boolean): string;
|
|
19
35
|
export declare function documentFieldLabel(kind: WorkDocumentFieldKind): string;
|
|
20
36
|
export declare function documentFieldDisplay(kind: WorkDocumentFieldKind, context: WorkDocumentFieldContext, instruction?: string, cachedValue?: string): string;
|
|
21
37
|
export declare function normalizeDocumentFieldsHtml(source: string): string;
|
|
22
38
|
export declare function resolveDocumentFieldsHtml(source: string, context: WorkDocumentFieldContext): string;
|
|
39
|
+
/** Returns the bookmark name used by a bounded PAGEREF instruction. */
|
|
40
|
+
export declare function docxDocumentFieldTarget(instruction: string): string | null;
|
|
41
|
+
/**
|
|
42
|
+
* The editor intentionally accepts only switches whose result can be
|
|
43
|
+
* represented by one deterministic inline atom. Unknown switches remain
|
|
44
|
+
* cached text instead of being presented as an editable field with altered
|
|
45
|
+
* semantics.
|
|
46
|
+
*/
|
|
47
|
+
export declare function supportedDocxDocumentFieldInstruction(instruction: string): boolean;
|
|
48
|
+
export declare function documentFieldStatisticsFromText(source: string): {
|
|
49
|
+
wordCount: number;
|
|
50
|
+
characterCount: number;
|
|
51
|
+
};
|
|
52
|
+
/** Computes bounded body statistics while excluding generated field results. */
|
|
53
|
+
export declare function documentFieldStatisticsFromHtml(source: string): {
|
|
54
|
+
wordCount: number;
|
|
55
|
+
characterCount: number;
|
|
56
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type Editor, Node } from '@tiptap/core';
|
|
2
|
+
/** The intentionally small text-box surface supported by Writer. */
|
|
3
|
+
export type WorkDocumentTextBoxLayout = 'inline' | 'floating';
|
|
4
|
+
export type WorkDocumentTextBoxHorizontalReference = 'column' | 'margin' | 'page';
|
|
5
|
+
export type WorkDocumentTextBoxVerticalReference = 'paragraph' | 'margin' | 'page';
|
|
6
|
+
export type WorkDocumentTextBoxVerticalAlign = 'top' | 'center' | 'bottom';
|
|
7
|
+
export interface WorkDocumentTextBoxProperties {
|
|
8
|
+
id: string;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
layout: WorkDocumentTextBoxLayout;
|
|
12
|
+
horizontalOffset: number | null;
|
|
13
|
+
verticalOffset: number | null;
|
|
14
|
+
horizontalReference: WorkDocumentTextBoxHorizontalReference;
|
|
15
|
+
verticalReference: WorkDocumentTextBoxVerticalReference;
|
|
16
|
+
fill: string;
|
|
17
|
+
borderColor: string;
|
|
18
|
+
borderWidth: number;
|
|
19
|
+
padding: number;
|
|
20
|
+
verticalAlign: WorkDocumentTextBoxVerticalAlign;
|
|
21
|
+
docPropertiesId: number | null;
|
|
22
|
+
}
|
|
23
|
+
export interface DocumentTextBoxCommandOptions {
|
|
24
|
+
restoreFocus?: boolean;
|
|
25
|
+
}
|
|
26
|
+
declare module '@tiptap/core' {
|
|
27
|
+
interface Commands<ReturnType> {
|
|
28
|
+
documentTextBox: {
|
|
29
|
+
insertDocumentTextBox: (text?: string, options?: Partial<WorkDocumentTextBoxProperties>) => ReturnType;
|
|
30
|
+
setDocumentTextBoxProperties: (value: Partial<WorkDocumentTextBoxProperties>, options?: DocumentTextBoxCommandOptions) => ReturnType;
|
|
31
|
+
deleteDocumentTextBox: (options?: DocumentTextBoxCommandOptions) => ReturnType;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export declare const DOCUMENT_TEXT_BOX_DEFAULTS: WorkDocumentTextBoxProperties;
|
|
36
|
+
export declare const DOCUMENT_TEXT_BOX_LIMITS: {
|
|
37
|
+
readonly width: {
|
|
38
|
+
readonly min: 20;
|
|
39
|
+
readonly max: 558.7;
|
|
40
|
+
};
|
|
41
|
+
readonly height: {
|
|
42
|
+
readonly min: 10;
|
|
43
|
+
readonly max: 558.7;
|
|
44
|
+
};
|
|
45
|
+
readonly offset: {
|
|
46
|
+
readonly min: -558.7;
|
|
47
|
+
readonly max: 558.7;
|
|
48
|
+
};
|
|
49
|
+
readonly borderWidth: {
|
|
50
|
+
readonly min: 0;
|
|
51
|
+
readonly max: 10;
|
|
52
|
+
};
|
|
53
|
+
readonly padding: {
|
|
54
|
+
readonly min: 0;
|
|
55
|
+
readonly max: 25;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export declare const DocumentTextBox: Node<any, any>;
|
|
59
|
+
export declare function documentTextBoxProperties(editor: Editor): WorkDocumentTextBoxProperties;
|
|
60
|
+
export declare function setDocumentTextBoxProperties(editor: Editor, value: Partial<WorkDocumentTextBoxProperties>, options?: DocumentTextBoxCommandOptions): boolean;
|
|
61
|
+
export declare function normalizeDocumentTextBoxProperties(value: Partial<Record<keyof WorkDocumentTextBoxProperties, unknown>>): WorkDocumentTextBoxProperties;
|
|
62
|
+
export declare function textBoxCss(value: Partial<Record<keyof WorkDocumentTextBoxProperties, unknown>>): string;
|
|
63
|
+
export declare function textBoxDomAttributes(value: Partial<Record<keyof WorkDocumentTextBoxProperties, unknown>>): Record<string, string | undefined>;
|
|
64
|
+
export declare function documentTextBoxPropertiesFromElement(element: Element): WorkDocumentTextBoxProperties;
|
|
@@ -2,7 +2,7 @@ export interface ImportedDocxBookmarkMarkers {
|
|
|
2
2
|
bookmarks: ImportedDocxBookmarkMarker[];
|
|
3
3
|
references: ImportedDocxBookmarkReferenceMarker[];
|
|
4
4
|
}
|
|
5
|
-
interface ImportedDocxBookmarkMarker {
|
|
5
|
+
export interface ImportedDocxBookmarkMarker {
|
|
6
6
|
start: string;
|
|
7
7
|
end: string;
|
|
8
8
|
id: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type WorkDocumentFieldKind } from './work-document-fields';
|
|
2
|
+
import type { ImportedDocxBookmarkMarker } from './work-docx-bookmark-import';
|
|
2
3
|
export interface ImportedDocxFieldMarkers {
|
|
3
4
|
fields: ImportedDocxFieldMarker[];
|
|
4
5
|
}
|
|
@@ -9,8 +10,11 @@ interface ImportedDocxFieldMarker {
|
|
|
9
10
|
kind: WorkDocumentFieldKind;
|
|
10
11
|
instruction: string;
|
|
11
12
|
display: string;
|
|
13
|
+
targetId?: string;
|
|
14
|
+
targetName?: string;
|
|
15
|
+
orphaned?: boolean;
|
|
12
16
|
}
|
|
13
|
-
export declare function markDocxBodyFields(document: Document): ImportedDocxFieldMarkers;
|
|
17
|
+
export declare function markDocxBodyFields(document: Document, bookmarks?: readonly ImportedDocxBookmarkMarker[]): ImportedDocxFieldMarkers;
|
|
14
18
|
export declare function applyImportedDocxFieldMarkers(document: Document, markers: ImportedDocxFieldMarkers): void;
|
|
15
19
|
export declare function hasImportedDocxFieldMarkers(markers: ImportedDocxFieldMarkers): boolean;
|
|
16
20
|
export {};
|
|
@@ -24,6 +24,7 @@ import { type ImportedDocxTableCellMarkers } from './work-docx-table-cell-import
|
|
|
24
24
|
import { type ImportedDocxTableOfContentsMarkers } from './work-docx-table-of-contents-import';
|
|
25
25
|
import { type ImportedDocxTableRowMarkers } from './work-docx-table-row-import';
|
|
26
26
|
import { type ImportedDocxTableSizingMarkers } from './work-docx-table-sizing-import';
|
|
27
|
+
import { type ImportedDocxTextBoxMarkers } from './work-docx-text-box-import';
|
|
27
28
|
import { OoxmlPackage } from './work-ooxml-package';
|
|
28
29
|
import type { WorkDocumentContent, WorkDocumentSectionLayout } from './work-types';
|
|
29
30
|
type ImportedDocumentLayout = Omit<WorkDocumentContent, 'type' | 'html'>;
|
|
@@ -46,6 +47,7 @@ export interface PreparedDocxImport {
|
|
|
46
47
|
listMarkers: ImportedDocxListMarkers;
|
|
47
48
|
numberingChangeMarkers: ImportedDocxNumberingChangeMarkers;
|
|
48
49
|
imageLayoutMarkers: ImportedDocxImageLayoutMarkers;
|
|
50
|
+
textBoxMarkers: ImportedDocxTextBoxMarkers;
|
|
49
51
|
paragraphIdentityMarkers: ImportedDocxParagraphIdentityMarkers;
|
|
50
52
|
paragraphFormattingChangeMarkers: ImportedDocxParagraphFormattingChangeMarkers;
|
|
51
53
|
paragraphAlignmentMarkers: ImportedDocxParagraphAlignmentMarkers;
|
|
@@ -64,6 +66,6 @@ export interface PreparedDocxImport {
|
|
|
64
66
|
trackChanges: boolean;
|
|
65
67
|
}
|
|
66
68
|
export declare function prepareDocxImport(buffer: ArrayBuffer, sourcePackage?: OoxmlPackage): Promise<PreparedDocxImport>;
|
|
67
|
-
export declare function applyDocxSectionsToHtml(html: string, sections: PreparedDocxImport['sections'], captionMarkers?: ImportedDocxCaptionMarkers, bookmarkMarkers?: ImportedDocxBookmarkMarkers, changeMarkers?: ImportedDocxChangeMarkers, commentMarkers?: ImportedDocxCommentMarkers, fieldMarkers?: ImportedDocxFieldMarkers, tableOfContentsMarkers?: ImportedDocxTableOfContentsMarkers, indexMarkers?: ImportedDocxIndexMarkers, equationMarkers?: ImportedDocxEquationMarkers, citationMarkers?: ImportedDocxCitationMarkers, listMarkers?: ImportedDocxListMarkers, numberingChangeMarkers?: ImportedDocxNumberingChangeMarkers, imageLayoutMarkers?: ImportedDocxImageLayoutMarkers, paragraphIdentityMarkers?: ImportedDocxParagraphIdentityMarkers, paragraphFormattingChangeMarkers?: ImportedDocxParagraphFormattingChangeMarkers, paragraphAlignmentMarkers?: ImportedDocxParagraphAlignmentMarkers, runFormattingMarkers?: ImportedDocxRunFormattingMarkers, paragraphDirectionMarkers?: ImportedDocxParagraphDirectionMarkers, paragraphIndentMarkers?: ImportedDocxParagraphIndentMarkers, paragraphSpacingMarkers?: ImportedDocxParagraphSpacingMarkers, paragraphBorderMarkers?: ImportedDocxParagraphBorderMarkers, paragraphShadingMarkers?: ImportedDocxParagraphShadingMarkers, paragraphPaginationMarkers?: ImportedDocxParagraphPaginationMarkers, bibliography?: WorkDocumentContent['bibliography'], tabStopMarkers?: ImportedDocxParagraphTabStopMarkers, tableCellMarkers?: ImportedDocxTableCellMarkers, tableRowMarkers?: ImportedDocxTableRowMarkers, tableSizingMarkers?: ImportedDocxTableSizingMarkers): string;
|
|
69
|
+
export declare function applyDocxSectionsToHtml(html: string, sections: PreparedDocxImport['sections'], captionMarkers?: ImportedDocxCaptionMarkers, bookmarkMarkers?: ImportedDocxBookmarkMarkers, changeMarkers?: ImportedDocxChangeMarkers, commentMarkers?: ImportedDocxCommentMarkers, fieldMarkers?: ImportedDocxFieldMarkers, tableOfContentsMarkers?: ImportedDocxTableOfContentsMarkers, indexMarkers?: ImportedDocxIndexMarkers, equationMarkers?: ImportedDocxEquationMarkers, citationMarkers?: ImportedDocxCitationMarkers, listMarkers?: ImportedDocxListMarkers, numberingChangeMarkers?: ImportedDocxNumberingChangeMarkers, imageLayoutMarkers?: ImportedDocxImageLayoutMarkers, paragraphIdentityMarkers?: ImportedDocxParagraphIdentityMarkers, paragraphFormattingChangeMarkers?: ImportedDocxParagraphFormattingChangeMarkers, paragraphAlignmentMarkers?: ImportedDocxParagraphAlignmentMarkers, runFormattingMarkers?: ImportedDocxRunFormattingMarkers, paragraphDirectionMarkers?: ImportedDocxParagraphDirectionMarkers, paragraphIndentMarkers?: ImportedDocxParagraphIndentMarkers, paragraphSpacingMarkers?: ImportedDocxParagraphSpacingMarkers, paragraphBorderMarkers?: ImportedDocxParagraphBorderMarkers, paragraphShadingMarkers?: ImportedDocxParagraphShadingMarkers, paragraphPaginationMarkers?: ImportedDocxParagraphPaginationMarkers, bibliography?: WorkDocumentContent['bibliography'], tabStopMarkers?: ImportedDocxParagraphTabStopMarkers, tableCellMarkers?: ImportedDocxTableCellMarkers, tableRowMarkers?: ImportedDocxTableRowMarkers, tableSizingMarkers?: ImportedDocxTableSizingMarkers, textBoxMarkers?: ImportedDocxTextBoxMarkers): string;
|
|
68
70
|
export declare function readDocxLayout(buffer: ArrayBuffer): Promise<ImportedDocumentLayout>;
|
|
69
71
|
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { WorkDocumentTextBoxProperties } from './work-document-text-box';
|
|
2
|
+
interface DocxTextBoxIdentityPatch {
|
|
3
|
+
marker: string;
|
|
4
|
+
preferredId: number | null;
|
|
5
|
+
}
|
|
6
|
+
export interface DocxTextBoxIdentityRegistration {
|
|
7
|
+
marker: string;
|
|
8
|
+
docPropertiesId: number | null;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Allocates a marker for each text box and lets the package patcher assign a
|
|
12
|
+
* document-wide `wp:docPr/@id` after all image and shape IDs are known.
|
|
13
|
+
*
|
|
14
|
+
* The `docx` package creates a fresh ID generator per drawing instance, so
|
|
15
|
+
* relying on its default would give every WPS shape the same ID. Delaying the
|
|
16
|
+
* assignment also lets us preserve an imported ID when it is still available,
|
|
17
|
+
* while deterministically repairing collisions with images or other shapes.
|
|
18
|
+
*/
|
|
19
|
+
export declare class DocxTextBoxIdentityPatchCollector {
|
|
20
|
+
readonly patches: DocxTextBoxIdentityPatch[];
|
|
21
|
+
private nextMarker;
|
|
22
|
+
register(properties: WorkDocumentTextBoxProperties): DocxTextBoxIdentityRegistration;
|
|
23
|
+
}
|
|
24
|
+
export declare function patchDocxTextBoxIdentities(buffer: ArrayBuffer, patches: readonly DocxTextBoxIdentityPatch[]): Promise<ArrayBuffer>;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type WorkDocumentTextBoxProperties } from './work-document-text-box';
|
|
2
|
+
export interface ImportedDocxTextBoxMarker {
|
|
3
|
+
marker: string;
|
|
4
|
+
properties: WorkDocumentTextBoxProperties;
|
|
5
|
+
}
|
|
6
|
+
export interface ImportedDocxTextBoxMarkers {
|
|
7
|
+
textBoxes: ImportedDocxTextBoxMarker[];
|
|
8
|
+
}
|
|
9
|
+
export interface DocxTextBoxInspection {
|
|
10
|
+
supported: number;
|
|
11
|
+
unsupported: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Rewrites supported WPS text boxes into ordinary Word runs for Mammoth.
|
|
15
|
+
* Mammoth intentionally ignores `wps:txbxContent`; the marker is consumed
|
|
16
|
+
* after conversion and replaced with an editable HTML block.
|
|
17
|
+
*/
|
|
18
|
+
export declare function markDocxTextBoxes(document: Document): ImportedDocxTextBoxMarkers;
|
|
19
|
+
/**
|
|
20
|
+
* Inspects WPS text-box shapes without mutating the source package. The
|
|
21
|
+
* importer deliberately supports only a shape that is the sole drawing in a
|
|
22
|
+
* paragraph; mixed paragraphs remain on Mammoth's normal compatibility path.
|
|
23
|
+
*/
|
|
24
|
+
export declare function inspectDocxTextBoxes(document: Document): DocxTextBoxInspection;
|
|
25
|
+
export declare function applyImportedDocxTextBoxMarkers(document: Document, markers: ImportedDocxTextBoxMarkers): void;
|
|
26
|
+
export declare function hasImportedDocxTextBoxMarkers(markers: ImportedDocxTextBoxMarkers): boolean;
|
package/dist/styles.css
CHANGED
|
@@ -12807,6 +12807,69 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
|
|
|
12807
12807
|
border-bottom-color: #d69b9b;
|
|
12808
12808
|
}
|
|
12809
12809
|
|
|
12810
|
+
:where(.work-document-page .tiptap, .work-document-preview-page, .work-pdf-export-page.document) [data-document-text-box] {
|
|
12811
|
+
box-sizing: border-box;
|
|
12812
|
+
width: var(--work-document-text-box-width, 120mm);
|
|
12813
|
+
min-width: 20mm;
|
|
12814
|
+
max-width: 100%;
|
|
12815
|
+
height: var(--work-document-text-box-height, 45mm);
|
|
12816
|
+
min-height: 10mm;
|
|
12817
|
+
max-height: 558.7mm;
|
|
12818
|
+
padding: var(--work-document-text-box-padding, 3mm);
|
|
12819
|
+
border: var(--work-document-text-box-border-width, .35mm) solid
|
|
12820
|
+
var(--work-document-text-box-border-color, #4472c4);
|
|
12821
|
+
background: var(--work-document-text-box-fill, #fff2cc);
|
|
12822
|
+
color: inherit;
|
|
12823
|
+
white-space: pre-wrap;
|
|
12824
|
+
overflow-wrap: anywhere;
|
|
12825
|
+
border-radius: 3px;
|
|
12826
|
+
flex-direction: column;
|
|
12827
|
+
justify-content: flex-start;
|
|
12828
|
+
margin: 12px 0;
|
|
12829
|
+
display: flex;
|
|
12830
|
+
overflow: hidden;
|
|
12831
|
+
}
|
|
12832
|
+
|
|
12833
|
+
:where(.work-document-page .tiptap, .work-document-preview-page, .work-pdf-export-page.document) [data-document-text-box][data-text-box-vertical-align="center"] {
|
|
12834
|
+
justify-content: center;
|
|
12835
|
+
}
|
|
12836
|
+
|
|
12837
|
+
:where(.work-document-page .tiptap, .work-document-preview-page, .work-pdf-export-page.document) [data-document-text-box][data-text-box-vertical-align="bottom"] {
|
|
12838
|
+
justify-content: flex-end;
|
|
12839
|
+
}
|
|
12840
|
+
|
|
12841
|
+
:where(.work-document-page .tiptap, .work-document-preview-page, .work-pdf-export-page.document) [data-document-text-box][data-text-box-layout="floating"] {
|
|
12842
|
+
translate: var(--work-document-text-box-horizontal-offset, 0)
|
|
12843
|
+
var(--work-document-text-box-vertical-offset, 0);
|
|
12844
|
+
z-index: 1;
|
|
12845
|
+
position: relative;
|
|
12846
|
+
}
|
|
12847
|
+
|
|
12848
|
+
:where(.work-document-page .tiptap, .work-document-preview-page, .work-pdf-export-page.document) [data-document-text-box] > p {
|
|
12849
|
+
width: 100%;
|
|
12850
|
+
margin: 0;
|
|
12851
|
+
}
|
|
12852
|
+
|
|
12853
|
+
.work-document-page .tiptap [data-document-text-box].ProseMirror-selectednode {
|
|
12854
|
+
outline: 2px solid color-mix(in srgb, var(--a3s-blue) 75%, transparent);
|
|
12855
|
+
outline-offset: 3px;
|
|
12856
|
+
}
|
|
12857
|
+
|
|
12858
|
+
.work-document-text-box-size-field, .work-document-text-box-offset-field {
|
|
12859
|
+
width: 84px;
|
|
12860
|
+
}
|
|
12861
|
+
|
|
12862
|
+
.work-document-text-box-position-field {
|
|
12863
|
+
width: 96px;
|
|
12864
|
+
}
|
|
12865
|
+
|
|
12866
|
+
.work-document-text-box-size-field > span, .work-document-text-box-offset-field > span, .work-document-text-box-position-field > span {
|
|
12867
|
+
text-overflow: ellipsis;
|
|
12868
|
+
white-space: nowrap;
|
|
12869
|
+
max-width: 96px;
|
|
12870
|
+
overflow: hidden;
|
|
12871
|
+
}
|
|
12872
|
+
|
|
12810
12873
|
.work-document-citation {
|
|
12811
12874
|
color: #245fc4;
|
|
12812
12875
|
cursor: default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a3s-lab/office",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.0",
|
|
4
4
|
"description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"office",
|
|
@@ -105,6 +105,7 @@
|
|
|
105
105
|
"playground:visual:document-script-fonts": "playwright test visual-tests/document-script-fonts.functional.spec.ts --config playwright.config.ts",
|
|
106
106
|
"playground:visual:document-opentype": "playwright test visual-tests/document-opentype.functional.spec.ts --config playwright.config.ts",
|
|
107
107
|
"playground:visual:document-strike": "playwright test visual-tests/document-strike.functional.spec.ts --config playwright.config.ts",
|
|
108
|
+
"playground:visual:document-text-box": "playwright test visual-tests/document-text-box.functional.spec.ts --config playwright.config.ts",
|
|
108
109
|
"playground:visual:spreadsheet-data-validation": "playwright test visual-tests/spreadsheet-data-validation.functional.spec.ts --config playwright.config.ts",
|
|
109
110
|
"playground:visual:spreadsheet-conditional-format": "playwright test visual-tests/spreadsheet-conditional-format.functional.spec.ts --config playwright.config.ts",
|
|
110
111
|
"playground:visual:spreadsheet-date-time": "playwright test visual-tests/spreadsheet-date-time.functional.spec.ts --config playwright.config.ts",
|
|
@@ -138,8 +139,10 @@
|
|
|
138
139
|
"performance:pdf": "bun .a3s-test/performance/generate-fixtures.ts --pdf-only && bun .a3s-test/performance/benchmark-pdf.ts --url http://127.0.0.1:4175/playground/ --runs 3 --timeout-ms 120000",
|
|
139
140
|
"performance:presentation": "bun .a3s-test/performance/generate-fixtures.ts --presentations-only && bun .a3s-test/performance/benchmark-presentation.ts --url http://127.0.0.1:4175/playground/ --runs 3 --timeout-ms 120000 --modes default,content-visibility",
|
|
140
141
|
"test": "rstest",
|
|
141
|
-
"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-numbering-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",
|
|
142
|
-
"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-numbering-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",
|
|
142
|
+
"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-text-box-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-numbering-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",
|
|
143
|
+
"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-text-box-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-numbering-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",
|
|
144
|
+
"test:e2e:writer-text-box": "bun run test:e2e:fixtures && A3S_TEST_SUITE=tests/e2e/word-text-box-phone.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
145
|
+
"test:e2e:writer-text-box:check": "a3s-test check tests/e2e/word-text-box-phone.acl --json",
|
|
143
146
|
"test:e2e:fixtures": "bun scripts/create-e2e-fixtures.ts",
|
|
144
147
|
"test:e2e:numbering-revision": "A3S_TEST_SUITE=tests/e2e/word-numbering-revision.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
145
148
|
"test:e2e:numbering-revision:check": "a3s-test check tests/e2e/word-numbering-revision.acl --json",
|