@betteroffice/docx 0.0.1
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/LICENSE +201 -0
- package/README.md +41 -0
- package/dist/Subscribable-DOz6Ohoo.d.mts +33 -0
- package/dist/agent/index.d.mts +531 -0
- package/dist/agent/index.mjs +1 -0
- package/dist/chunk-34K66SY4.mjs +1 -0
- package/dist/chunk-3UBMCDME.mjs +1 -0
- package/dist/chunk-4RCISPPE.mjs +1 -0
- package/dist/chunk-4UD54UM5.mjs +1 -0
- package/dist/chunk-52GB3Y42.mjs +1 -0
- package/dist/chunk-6NEKRDXF.mjs +1 -0
- package/dist/chunk-6PW4CWUG.mjs +1 -0
- package/dist/chunk-7DEIW7FL.mjs +1 -0
- package/dist/chunk-7PCO5I2O.mjs +1 -0
- package/dist/chunk-BI3B33LI.mjs +1 -0
- package/dist/chunk-BIQWVK5P.mjs +2 -0
- package/dist/chunk-CIRN3LZA.mjs +1 -0
- package/dist/chunk-DXKG3HQ5.mjs +16 -0
- package/dist/chunk-EUUIJVM6.mjs +0 -0
- package/dist/chunk-FPZBTOD6.mjs +1 -0
- package/dist/chunk-FZIA7OFY.mjs +1 -0
- package/dist/chunk-GWKJ2Y4Y.mjs +1 -0
- package/dist/chunk-H3JCIGWK.mjs +1 -0
- package/dist/chunk-HJGAQIU7.mjs +2 -0
- package/dist/chunk-I6KKMUUC.mjs +1 -0
- package/dist/chunk-IL5JZJT7.mjs +1 -0
- package/dist/chunk-JY6ILTNS.mjs +1 -0
- package/dist/chunk-KEE52TT5.mjs +1 -0
- package/dist/chunk-KVKLLTDP.mjs +58 -0
- package/dist/chunk-KXNZFTTK.mjs +1 -0
- package/dist/chunk-L5ISVQ3W.mjs +1 -0
- package/dist/chunk-LDUWIM7M.mjs +1 -0
- package/dist/chunk-N5Q3YN64.mjs +1 -0
- package/dist/chunk-NEWOMDTX.mjs +1 -0
- package/dist/chunk-O2QSE2I7.mjs +1 -0
- package/dist/chunk-OBQGPMPQ.mjs +1 -0
- package/dist/chunk-OJOHXQNQ.mjs +1 -0
- package/dist/chunk-OMR3TWCD.mjs +2 -0
- package/dist/chunk-P3KDV4M2.mjs +1 -0
- package/dist/chunk-Q7PO7V73.mjs +1 -0
- package/dist/chunk-QOUFE3VX.mjs +1 -0
- package/dist/chunk-SINEY6ZF.mjs +1 -0
- package/dist/chunk-T4EZMUXM.mjs +1 -0
- package/dist/chunk-TTRUPDAB.mjs +1 -0
- package/dist/chunk-TYHI7RAD.mjs +1 -0
- package/dist/chunk-UIEJWORW.mjs +1 -0
- package/dist/chunk-VAOUFAUH.mjs +1 -0
- package/dist/chunk-VBOTMRXV.mjs +1 -0
- package/dist/chunk-VCER63GQ.mjs +1 -0
- package/dist/chunk-WAUF2UC7.mjs +2 -0
- package/dist/chunk-WRWRCBLK.mjs +1 -0
- package/dist/chunk-X4XDO3LZ.mjs +1 -0
- package/dist/chunk-XQBCCJBO.mjs +9 -0
- package/dist/chunk-XWUOLYRQ.mjs +2 -0
- package/dist/chunk-XYH6XWP3.mjs +10 -0
- package/dist/chunk-YBIM6UJV.mjs +8 -0
- package/dist/chunk-YCIH2Q3E.mjs +1 -0
- package/dist/chunk-YUOKI2HB.mjs +1 -0
- package/dist/chunk-ZOV5KL7C.mjs +1 -0
- package/dist/colorResolver-n0o7H7ep.d.mts +290 -0
- package/dist/content-sSHuWw49.d.mts +2202 -0
- package/dist/core-plugins.d.mts +37 -0
- package/dist/core-plugins.mjs +1 -0
- package/dist/core.d.mts +451 -0
- package/dist/core.mjs +1 -0
- package/dist/displayListQueries-p-ijSzdh.d.mts +222 -0
- package/dist/docx/index.d.mts +618 -0
- package/dist/docx/index.mjs +2 -0
- package/dist/docx/parser.d.mts +41 -0
- package/dist/docx/parser.mjs +1 -0
- package/dist/docx/rezip.d.mts +148 -0
- package/dist/docx/rezip.mjs +1 -0
- package/dist/docx/serializer/index.d.mts +42 -0
- package/dist/docx/serializer/index.mjs +1 -0
- package/dist/docx/wrapTypes.d.mts +19 -0
- package/dist/docx/wrapTypes.mjs +1 -0
- package/dist/docxInput-DTbCa48g.d.mts +21 -0
- package/dist/editor/index.d.mts +170 -0
- package/dist/editor/index.mjs +1 -0
- package/dist/editorTree-DO5PyDK8.d.mts +37 -0
- package/dist/executor-7O2RBJ2B.mjs +1 -0
- package/dist/fontLoader-Bx6DK6-2.d.mts +327 -0
- package/dist/formatting-DoL7KBSL.d.mts +823 -0
- package/dist/generated/edit/docx_edit_bg.wasm +0 -0
- package/dist/generated/layout/docx_layout_bg.wasm +0 -0
- package/dist/generated/opc/ooxml_opc_bg.wasm +0 -0
- package/dist/generated/parse/docx_parse_bg.wasm +0 -0
- package/dist/headerFooterLayout-0zPT64Qc.d.mts +316 -0
- package/dist/headless.d.mts +69 -0
- package/dist/headless.mjs +1 -0
- package/dist/layout/flow/index.d.mts +149 -0
- package/dist/layout/flow/index.mjs +1 -0
- package/dist/layout/index.d.mts +307 -0
- package/dist/layout/index.mjs +1 -0
- package/dist/layout/measure/index.d.mts +324 -0
- package/dist/layout/measure/index.mjs +1 -0
- package/dist/layout/pagination/index.d.mts +60 -0
- package/dist/layout/pagination/index.mjs +1 -0
- package/dist/layout/pagination/types.d.mts +4 -0
- package/dist/layout/pagination/types.mjs +1 -0
- package/dist/layout/render/index.d.mts +733 -0
- package/dist/layout/render/index.mjs +1 -0
- package/dist/loadWasmAsset-CMvnVkfA.d.mts +3 -0
- package/dist/managers/AutoSaveManager.d.mts +81 -0
- package/dist/managers/AutoSaveManager.mjs +1 -0
- package/dist/managers/TableSelectionManager.d.mts +74 -0
- package/dist/managers/TableSelectionManager.mjs +1 -0
- package/dist/managers/types.d.mts +113 -0
- package/dist/managers/types.mjs +0 -0
- package/dist/mcp-cli.mjs +142 -0
- package/dist/mcp.d.mts +162 -0
- package/dist/mcp.mjs +16 -0
- package/dist/measureBlocksPipeline-Df0Bbrwy.d.mts +109 -0
- package/dist/measuredBlock-DZwz8zhD.d.mts +26 -0
- package/dist/plugin-api/RenderedDomContext.d.mts +114 -0
- package/dist/plugin-api/RenderedDomContext.mjs +1 -0
- package/dist/plugin-api/index.d.mts +7 -0
- package/dist/plugin-api/index.mjs +0 -0
- package/dist/plugin-api/resolveItemPositions.d.mts +39 -0
- package/dist/plugin-api/resolveItemPositions.mjs +1 -0
- package/dist/plugin-api/types.d.mts +193 -0
- package/dist/plugin-api/types.mjs +0 -0
- package/dist/processTemplate-HDUIZFJ5.mjs +1 -0
- package/dist/registry-DMM5VTdT.d.mts +165 -0
- package/dist/rustDisplayList-dqunvwxH.d.mts +1036 -0
- package/dist/rustPagination-Bj2hq013.d.mts +106 -0
- package/dist/sectionConfigs-DW3J8q0X.d.mts +55 -0
- package/dist/selectionContext-Buc9BCU1.d.mts +570 -0
- package/dist/selectiveSave-oFBJ1n71.d.mts +16 -0
- package/dist/selectiveXmlPatch-ypkxlTD_.d.mts +23 -0
- package/dist/settingsParser-CcGvtmCK.d.mts +33 -0
- package/dist/styles/index.d.mts +162 -0
- package/dist/styles/index.mjs +1 -0
- package/dist/styles-VxNcXLdi.d.mts +189 -0
- package/dist/types/agentApi.d.mts +456 -0
- package/dist/types/agentApi.mjs +1 -0
- package/dist/types/content.d.mts +3 -0
- package/dist/types/content.mjs +1 -0
- package/dist/types/document.d.mts +117 -0
- package/dist/types/document.mjs +1 -0
- package/dist/types-DNrYr6yQ.d.mts +1754 -0
- package/dist/types-dYdjUZMo.d.mts +311 -0
- package/dist/units-O5Y02RKQ.d.mts +34 -0
- package/dist/utils/autoScroll.d.mts +24 -0
- package/dist/utils/autoScroll.mjs +1 -0
- package/dist/utils/cardStyles.d.mts +22 -0
- package/dist/utils/cardStyles.mjs +1 -0
- package/dist/utils/comments.d.mts +120 -0
- package/dist/utils/comments.mjs +4 -0
- package/dist/utils/findReplace.d.mts +114 -0
- package/dist/utils/findReplace.mjs +2 -0
- package/dist/utils/findVerticalScrollParent.d.mts +25 -0
- package/dist/utils/findVerticalScrollParent.mjs +1 -0
- package/dist/utils/fontOptions.d.mts +21 -0
- package/dist/utils/fontOptions.mjs +1 -0
- package/dist/utils/headingCollector.d.mts +28 -0
- package/dist/utils/headingCollector.mjs +1 -0
- package/dist/utils/highlightColors.d.mts +14 -0
- package/dist/utils/highlightColors.mjs +1 -0
- package/dist/utils/index.d.mts +956 -0
- package/dist/utils/index.mjs +84 -0
- package/dist/utils/listState.d.mts +27 -0
- package/dist/utils/listState.mjs +1 -0
- package/dist/utils/reportIssue.d.mts +23 -0
- package/dist/utils/reportIssue.mjs +2 -0
- package/dist/utils/sidebarConstants.d.mts +10 -0
- package/dist/utils/sidebarConstants.mjs +1 -0
- package/dist/utils/stylePreview.d.mts +70 -0
- package/dist/utils/stylePreview.mjs +1 -0
- package/dist/utils/textSelection.d.mts +92 -0
- package/dist/utils/textSelection.mjs +1 -0
- package/dist/utils/units.d.mts +78 -0
- package/dist/utils/units.mjs +1 -0
- package/dist/variableDetector-Borj29SF.d.mts +115 -0
- package/dist/wasm-FZQ5XB2Y.mjs +1 -0
- package/dist/wasm-SA237OSP.mjs +1 -0
- package/dist/wasm-edit.d.mts +473 -0
- package/dist/wasm-edit.mjs +1 -0
- package/dist/wasm-layout.d.mts +112 -0
- package/dist/wasm-layout.mjs +1 -0
- package/dist/wasm-opc.d.mts +16 -0
- package/dist/wasm-opc.mjs +1 -0
- package/dist/wasm-parse.d.mts +18 -0
- package/dist/wasm-parse.mjs +1 -0
- package/dist/watermarkApi-DCxjutkg.d.mts +38 -0
- package/dist/yrs/index.d.mts +882 -0
- package/dist/yrs/index.mjs +1 -0
- package/dist/yrs/residentEngineWorker.d.mts +2 -0
- package/dist/yrs/residentEngineWorker.mjs +1 -0
- package/package.json +365 -0
|
@@ -0,0 +1,1036 @@
|
|
|
1
|
+
import { a as Layout } from './types-DNrYr6yQ.mjs';
|
|
2
|
+
import { M as MeasuredBlock } from './measuredBlock-DZwz8zhD.mjs';
|
|
3
|
+
import { Z as DrawingScene, b0 as ShapeTextBodyProperties } from './content-sSHuWw49.mjs';
|
|
4
|
+
import { x as TextModernEffects } from './formatting-DoL7KBSL.mjs';
|
|
5
|
+
|
|
6
|
+
interface DisplayList {
|
|
7
|
+
/** Contract version. Undefined reads as legacy version 0. */
|
|
8
|
+
contractVersion?: number;
|
|
9
|
+
pages: DisplayPage[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Modern (`w14:*`) run text-effect payload carried on text/glyph primitives.
|
|
13
|
+
* Same shape as the document model's `TextModernEffects` — px distances,
|
|
14
|
+
* degree directions, 0..1 opacities, resolved `#rrggbb` colors.
|
|
15
|
+
*/
|
|
16
|
+
type DisplayTextModernEffects = TextModernEffects;
|
|
17
|
+
interface DisplayPage {
|
|
18
|
+
pageIndex: number;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
/** Authored body content box (page-local px), derived from page margins. */
|
|
22
|
+
contentBounds?: DisplayBounds;
|
|
23
|
+
/** Authored body column boxes in reading order (page-local px). */
|
|
24
|
+
columnBounds?: DisplayBounds[];
|
|
25
|
+
/** Stable section identity for this page. Undefined = legacy/global section. */
|
|
26
|
+
sectionId?: string;
|
|
27
|
+
/** Zero-based section ordinal. */
|
|
28
|
+
sectionIndex?: number;
|
|
29
|
+
/** Zero-based page ordinal within the section. */
|
|
30
|
+
sectionPageIndex?: number;
|
|
31
|
+
/** Effective page number within the section, after any restart. */
|
|
32
|
+
sectionPageNumber?: number;
|
|
33
|
+
/** Formatted PAGE label (for example, "vii"). */
|
|
34
|
+
pageLabel?: string;
|
|
35
|
+
primitives: DisplayPrimitive[];
|
|
36
|
+
/** Resolved page background. Undefined = transparent/host white. */
|
|
37
|
+
background?: string;
|
|
38
|
+
pageBorders?: PageBorderPrimitive[];
|
|
39
|
+
header?: HfRegion;
|
|
40
|
+
footer?: HfRegion;
|
|
41
|
+
/** Footnote/endnote regions in page coordinates. Undefined = none. */
|
|
42
|
+
noteAreas?: NoteRegion[];
|
|
43
|
+
}
|
|
44
|
+
/** A page-local rectangle emitted as display-list metadata. */
|
|
45
|
+
interface DisplayBounds {
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
}
|
|
51
|
+
/** Page note region; primitives retain normal doc/a11y metadata. */
|
|
52
|
+
interface NoteRegion {
|
|
53
|
+
kind?: 'footnote' | 'endnote';
|
|
54
|
+
sectionId?: string;
|
|
55
|
+
y?: number;
|
|
56
|
+
height?: number;
|
|
57
|
+
columns?: number;
|
|
58
|
+
separatorPrimitives?: DisplayPrimitive[];
|
|
59
|
+
primitives?: DisplayPrimitive[];
|
|
60
|
+
noteIds?: number[];
|
|
61
|
+
/**
|
|
62
|
+
* Per-note backlink metadata (W17): the body-doc PM range of each note's
|
|
63
|
+
* reference mark plus its formatted label, so the a11y mirror can wire
|
|
64
|
+
* note ↔ reference associations (doc-noteref / doc-backlink). Parallel to
|
|
65
|
+
* `noteIds`; undefined = legacy region without backlink data.
|
|
66
|
+
*/
|
|
67
|
+
notes?: NoteRegionNote[];
|
|
68
|
+
}
|
|
69
|
+
/** Backlink metadata for one note in a NoteRegion. */
|
|
70
|
+
interface NoteRegionNote {
|
|
71
|
+
id?: number;
|
|
72
|
+
/** Body-doc PM range of the reference mark anchoring this note. */
|
|
73
|
+
anchorDocStart?: number;
|
|
74
|
+
anchorDocEnd?: number;
|
|
75
|
+
/** Formatted reference label (display number / custom mark). File-derived. */
|
|
76
|
+
label?: string;
|
|
77
|
+
}
|
|
78
|
+
interface HfRegion {
|
|
79
|
+
rId: string;
|
|
80
|
+
kind: 'header' | 'footer';
|
|
81
|
+
y: number;
|
|
82
|
+
height: number;
|
|
83
|
+
primitives: DisplayPrimitive[];
|
|
84
|
+
}
|
|
85
|
+
type DisplayPrimitive = TextRunPrimitive | GlyphRunPrimitive | RectPrimitive | LinePrimitive | ImagePrimitive | ShapePrimitive | DecorationPrimitive;
|
|
86
|
+
interface TableCellRef {
|
|
87
|
+
row: number;
|
|
88
|
+
col: number;
|
|
89
|
+
rowSpan: number;
|
|
90
|
+
colSpan: number;
|
|
91
|
+
continuation?: boolean;
|
|
92
|
+
/** Stable semantic cell identity. */
|
|
93
|
+
cellId?: string;
|
|
94
|
+
/** Cell participates as a row/column header. */
|
|
95
|
+
isHeader?: boolean;
|
|
96
|
+
/** Header cell was repeated on a continuation page. */
|
|
97
|
+
repeatedHeader?: boolean;
|
|
98
|
+
/** Word `w:noWrap` cell behavior. */
|
|
99
|
+
noWrap?: boolean;
|
|
100
|
+
/** IDs of header cells that label this data cell. */
|
|
101
|
+
headerIds?: string[];
|
|
102
|
+
/** Collapsed-border ownership retained for exact fragment replay. */
|
|
103
|
+
ownsTopBorder?: boolean;
|
|
104
|
+
ownsRightBorder?: boolean;
|
|
105
|
+
ownsBottomBorder?: boolean;
|
|
106
|
+
ownsLeftBorder?: boolean;
|
|
107
|
+
}
|
|
108
|
+
/** Table-fragment semantics shared by every primitive emitted for that fragment. */
|
|
109
|
+
interface DisplayTableMetadata {
|
|
110
|
+
tableId?: string;
|
|
111
|
+
rowStart?: number;
|
|
112
|
+
rowEnd?: number;
|
|
113
|
+
rowCount?: number;
|
|
114
|
+
columnCount?: number;
|
|
115
|
+
headerRowCount?: number;
|
|
116
|
+
caption?: string;
|
|
117
|
+
description?: string;
|
|
118
|
+
parentTableId?: string;
|
|
119
|
+
}
|
|
120
|
+
/** Resolved review presentation for the primitive's `commentIds`. */
|
|
121
|
+
interface DisplayCommentMetadata {
|
|
122
|
+
status?: 'active' | 'resolved';
|
|
123
|
+
authorId?: string;
|
|
124
|
+
paletteIndex?: number;
|
|
125
|
+
color?: string;
|
|
126
|
+
selected?: boolean;
|
|
127
|
+
/** Reviewer display name (file-derived, attacker-controlled). */
|
|
128
|
+
authorName?: string;
|
|
129
|
+
/** Comment date string, passed through verbatim. */
|
|
130
|
+
date?: string;
|
|
131
|
+
/** Plain-text comment body excerpt (builder-capped, file-derived). */
|
|
132
|
+
text?: string;
|
|
133
|
+
/** Number of replies in the thread. */
|
|
134
|
+
replyCount?: number;
|
|
135
|
+
/** Reply summaries in thread order (builder-capped). */
|
|
136
|
+
replies?: DisplayCommentReply[];
|
|
137
|
+
}
|
|
138
|
+
/** One reply summary inside DisplayCommentMetadata. */
|
|
139
|
+
interface DisplayCommentReply {
|
|
140
|
+
authorName?: string;
|
|
141
|
+
date?: string;
|
|
142
|
+
text?: string;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Inert field identity for a11y announcement. `instruction` is the raw Word
|
|
146
|
+
* field instruction, carried for announcement/inspection ONLY — it is never
|
|
147
|
+
* parsed into behavior or executed by any consumer (see the repo security guidelines security).
|
|
148
|
+
*/
|
|
149
|
+
interface DisplayFieldMetadata {
|
|
150
|
+
/** Painter-resolved category (PAGE, NUMPAGES, DATE, TIME, OTHER). */
|
|
151
|
+
category?: string;
|
|
152
|
+
/** Raw Word field type token (e.g. TOC, PAGEREF, REF). */
|
|
153
|
+
type?: string;
|
|
154
|
+
/** Raw field instruction text (announce-only, builder-capped). */
|
|
155
|
+
instruction?: string;
|
|
156
|
+
}
|
|
157
|
+
/** Footnote/endnote reference identity on the body reference-mark primitive. */
|
|
158
|
+
interface DisplayNoteRef {
|
|
159
|
+
kind?: 'footnote' | 'endnote';
|
|
160
|
+
id?: number;
|
|
161
|
+
}
|
|
162
|
+
/** Scoped clip/group membership emitted by the Rust compiler. */
|
|
163
|
+
interface DisplayClipGroupMetadata {
|
|
164
|
+
id?: string;
|
|
165
|
+
clip?: {
|
|
166
|
+
x?: number;
|
|
167
|
+
y?: number;
|
|
168
|
+
w?: number;
|
|
169
|
+
h?: number;
|
|
170
|
+
};
|
|
171
|
+
opacity?: number;
|
|
172
|
+
}
|
|
173
|
+
interface StructuralRevision {
|
|
174
|
+
scope: 'pmark' | 'table' | 'row' | 'cell';
|
|
175
|
+
author: string;
|
|
176
|
+
date?: string;
|
|
177
|
+
revisionId: string;
|
|
178
|
+
kind: 'ins' | 'del' | 'merge';
|
|
179
|
+
rowIndex?: number;
|
|
180
|
+
colIndex?: number;
|
|
181
|
+
}
|
|
182
|
+
interface SdtAttrs {
|
|
183
|
+
groupId: string;
|
|
184
|
+
sdtType: string;
|
|
185
|
+
depth?: number;
|
|
186
|
+
tag?: string;
|
|
187
|
+
alias?: string;
|
|
188
|
+
lock?: string;
|
|
189
|
+
checked?: boolean;
|
|
190
|
+
bound?: boolean;
|
|
191
|
+
repeatingItem?: boolean;
|
|
192
|
+
}
|
|
193
|
+
interface InlineSdtWidgetAttrs {
|
|
194
|
+
kind: 'checkbox';
|
|
195
|
+
/** Rich control kind. Undefined = legacy checkbox. */
|
|
196
|
+
controlKind?: 'checkbox' | 'dropDownList' | 'comboBox' | 'date' | 'picture' | 'repeatingSection';
|
|
197
|
+
groupId: string;
|
|
198
|
+
pos: number;
|
|
199
|
+
tag?: string;
|
|
200
|
+
alias?: string;
|
|
201
|
+
checked?: boolean;
|
|
202
|
+
controlId?: number;
|
|
203
|
+
value?: string;
|
|
204
|
+
selectedIndex?: number;
|
|
205
|
+
listItems?: Array<{
|
|
206
|
+
displayText?: string;
|
|
207
|
+
value?: string;
|
|
208
|
+
}>;
|
|
209
|
+
dateFormat?: string;
|
|
210
|
+
dateLanguage?: string;
|
|
211
|
+
locked?: boolean;
|
|
212
|
+
}
|
|
213
|
+
interface ChartA11yAttrs {
|
|
214
|
+
label: string;
|
|
215
|
+
}
|
|
216
|
+
interface DocAttrs {
|
|
217
|
+
docStart?: number;
|
|
218
|
+
docEnd?: number;
|
|
219
|
+
blockId?: number;
|
|
220
|
+
blockKey?: string;
|
|
221
|
+
fragmentDocStart?: number;
|
|
222
|
+
fragmentDocEnd?: number;
|
|
223
|
+
paraId?: string;
|
|
224
|
+
fromLine?: number;
|
|
225
|
+
toLine?: number;
|
|
226
|
+
/**
|
|
227
|
+
* Table cell the primitive paints inside, when any. The a11y mirror builds
|
|
228
|
+
* real ARIA table semantics (role table/row/cell, aria-row/colindex) from
|
|
229
|
+
* this — without it a table block reads as a flat run of text.
|
|
230
|
+
*/
|
|
231
|
+
cell?: TableCellRef;
|
|
232
|
+
/** Sanitized hyperlink target when this primitive paints linked content. */
|
|
233
|
+
href?: string;
|
|
234
|
+
/** Optional hyperlink tooltip/title for popup UI. */
|
|
235
|
+
tooltip?: string;
|
|
236
|
+
/** ScreenTip exposed as DOM `title`; undefined falls back to `tooltip`. */
|
|
237
|
+
linkTitle?: string;
|
|
238
|
+
/** Safe hyperlink target frame. */
|
|
239
|
+
linkTarget?: string;
|
|
240
|
+
/** Link history bit. Undefined = host-unmanaged. */
|
|
241
|
+
linkHistory?: boolean;
|
|
242
|
+
/** Location within the target document. */
|
|
243
|
+
linkDocLocation?: string;
|
|
244
|
+
commentIds?: string[];
|
|
245
|
+
/**
|
|
246
|
+
* Inert field identity when this primitive paints a field result. The a11y
|
|
247
|
+
* mirror announces it (data-field-* + aria-description); nothing executes it.
|
|
248
|
+
*/
|
|
249
|
+
field?: DisplayFieldMetadata;
|
|
250
|
+
/**
|
|
251
|
+
* Footnote/endnote reference identity when this primitive is the body
|
|
252
|
+
* reference mark — the mirror renders it as a doc-noteref link to the
|
|
253
|
+
* note's mirror element (W17 backlinks).
|
|
254
|
+
*/
|
|
255
|
+
noteRef?: DisplayNoteRef;
|
|
256
|
+
revision?: {
|
|
257
|
+
author: string;
|
|
258
|
+
date: string;
|
|
259
|
+
revisionId: string;
|
|
260
|
+
kind: 'ins' | 'del';
|
|
261
|
+
};
|
|
262
|
+
/** Synthetic numbering glyph for the first line of a list paragraph. */
|
|
263
|
+
listMarker?: boolean;
|
|
264
|
+
/** Pending suggestion paint for a synthetic numbering glyph. */
|
|
265
|
+
listMarkerRevision?: 'ins' | 'del';
|
|
266
|
+
structuralRevision?: StructuralRevision;
|
|
267
|
+
/** Innermost block-level content-control identity for this primitive. */
|
|
268
|
+
sdt?: SdtAttrs;
|
|
269
|
+
/** Full outer-to-inner content-control ancestry. */
|
|
270
|
+
sdtPath?: SdtAttrs[];
|
|
271
|
+
/** Inline content-control widget metadata when this text run is its glyph. */
|
|
272
|
+
inlineSdtWidget?: InlineSdtWidgetAttrs;
|
|
273
|
+
/** Accessibility summary for primitives that compose one chart block. */
|
|
274
|
+
chart?: ChartA11yAttrs;
|
|
275
|
+
/** Logical/source order, independent of visual bidi paint order. */
|
|
276
|
+
logicalOrder?: number;
|
|
277
|
+
/** Resolved bidi embedding level. */
|
|
278
|
+
bidiLevel?: number;
|
|
279
|
+
/** BCP-47 language for a11y/font fallback. */
|
|
280
|
+
lang?: string;
|
|
281
|
+
/** Decorative content is omitted from the accessibility mirror. */
|
|
282
|
+
decorative?: boolean;
|
|
283
|
+
/** Authored accessibility name. */
|
|
284
|
+
ariaLabel?: string;
|
|
285
|
+
/** Authored accessibility description. */
|
|
286
|
+
ariaDescription?: string;
|
|
287
|
+
/** Hidden authored object. Undefined = visible. */
|
|
288
|
+
hiddenObject?: boolean;
|
|
289
|
+
/** Stable logical scene/group identity. */
|
|
290
|
+
groupId?: string;
|
|
291
|
+
/** Review presentation for comment-associated primitives. */
|
|
292
|
+
comment?: DisplayCommentMetadata;
|
|
293
|
+
/**
|
|
294
|
+
* Scoped clip/group membership. Undefined = ungrouped. Kept as metadata
|
|
295
|
+
* until the canvas/mirror batch activates `ClipGroupPrimitive` in the union.
|
|
296
|
+
*/
|
|
297
|
+
clipGroup?: DisplayClipGroupMetadata;
|
|
298
|
+
/** Enclosing table-fragment identity and accessibility semantics. */
|
|
299
|
+
table?: DisplayTableMetadata;
|
|
300
|
+
}
|
|
301
|
+
interface TextRunPrimitive extends DocAttrs {
|
|
302
|
+
kind: 'text';
|
|
303
|
+
text: string;
|
|
304
|
+
x: number;
|
|
305
|
+
baselineY: number;
|
|
306
|
+
width: number;
|
|
307
|
+
font: string;
|
|
308
|
+
color: string;
|
|
309
|
+
letterSpacing?: number;
|
|
310
|
+
wordSpacing?: number;
|
|
311
|
+
rtl?: boolean;
|
|
312
|
+
/** 0..1 alpha applied only to this run. Absent = opaque. */
|
|
313
|
+
opacity?: number;
|
|
314
|
+
/** Degrees clockwise around the primitive's geometry center. Absent = 0. */
|
|
315
|
+
rotationDeg?: number;
|
|
316
|
+
/** Horizontal text scale as a percentage (100 = normal). Absent = 100. */
|
|
317
|
+
horizontalScale?: number;
|
|
318
|
+
/** Render glyphs uppercase without changing the accessible source text. */
|
|
319
|
+
allCaps?: boolean;
|
|
320
|
+
/** Render lowercase glyphs as small uppercase. */
|
|
321
|
+
smallCaps?: boolean;
|
|
322
|
+
/** Hidden run shown in editing view as dimmed/dotted, matching the DOM painter. */
|
|
323
|
+
hidden?: boolean;
|
|
324
|
+
/** CSS-like shadow effect ported from run formatting. */
|
|
325
|
+
textShadow?: 'shadow' | 'emboss' | 'imprint';
|
|
326
|
+
/** Outlined / hollow text. */
|
|
327
|
+
textOutline?: boolean;
|
|
328
|
+
/** CJK emphasis mark. */
|
|
329
|
+
emphasisMark?: 'dot' | 'comma' | 'circle' | 'underDot';
|
|
330
|
+
/** Legacy text-effect class hook for the a11y mirror. */
|
|
331
|
+
textEffect?: 'blinkBackground' | 'lights' | 'antsBlack' | 'antsRed' | 'shimmer' | 'sparkle';
|
|
332
|
+
/** Modern w14 text effects (glow/shadow/reflection/textFill/textOutline). */
|
|
333
|
+
modernEffects?: DisplayTextModernEffects;
|
|
334
|
+
/** Shaped tab/TOC leader metadata. Undefined = ordinary text. */
|
|
335
|
+
leaderGlyphs?: Omit<LeaderGlyphPrimitive, 'kind'>;
|
|
336
|
+
}
|
|
337
|
+
interface PositionedGlyph {
|
|
338
|
+
id: number;
|
|
339
|
+
x: number;
|
|
340
|
+
y: number;
|
|
341
|
+
cluster: number;
|
|
342
|
+
advance?: number;
|
|
343
|
+
/** Logical cluster order before bidi reordering. */
|
|
344
|
+
logicalOrder?: number;
|
|
345
|
+
/** Bidi embedding level for this cluster. */
|
|
346
|
+
bidiLevel?: number;
|
|
347
|
+
}
|
|
348
|
+
interface GlyphRunPrimitive extends DocAttrs {
|
|
349
|
+
kind: 'glyphRun';
|
|
350
|
+
fontId: number;
|
|
351
|
+
size: number;
|
|
352
|
+
color: string;
|
|
353
|
+
text: string;
|
|
354
|
+
glyphs: PositionedGlyph[];
|
|
355
|
+
fallbackFont?: string;
|
|
356
|
+
wordSpacing?: number;
|
|
357
|
+
rtl?: boolean;
|
|
358
|
+
/** 0..1 alpha applied only to this run. Absent = opaque. */
|
|
359
|
+
opacity?: number;
|
|
360
|
+
/** Degrees clockwise around the primitive's geometry center. Absent = 0. */
|
|
361
|
+
rotationDeg?: number;
|
|
362
|
+
/** Horizontal text scale as a percentage (100 = normal). Absent = 100. */
|
|
363
|
+
horizontalScale?: number;
|
|
364
|
+
/** Render glyphs uppercase without changing the accessible source text. */
|
|
365
|
+
allCaps?: boolean;
|
|
366
|
+
/** Render lowercase glyphs as small uppercase. */
|
|
367
|
+
smallCaps?: boolean;
|
|
368
|
+
/** Hidden run shown in editing view as dimmed/dotted, matching the DOM painter. */
|
|
369
|
+
hidden?: boolean;
|
|
370
|
+
/** CSS-like shadow effect ported from run formatting. */
|
|
371
|
+
textShadow?: 'shadow' | 'emboss' | 'imprint';
|
|
372
|
+
/** Outlined / hollow text. */
|
|
373
|
+
textOutline?: boolean;
|
|
374
|
+
/** CJK emphasis mark. */
|
|
375
|
+
emphasisMark?: 'dot' | 'comma' | 'circle' | 'underDot';
|
|
376
|
+
/** Legacy text-effect class hook for the a11y mirror. */
|
|
377
|
+
textEffect?: 'blinkBackground' | 'lights' | 'antsBlack' | 'antsRed' | 'shimmer' | 'sparkle';
|
|
378
|
+
/** Modern w14 text effects (glow/shadow/reflection/textFill/textOutline). */
|
|
379
|
+
modernEffects?: DisplayTextModernEffects;
|
|
380
|
+
/** Shaped tab/TOC leader metadata. Undefined = ordinary glyph run. */
|
|
381
|
+
leaderGlyphs?: Omit<LeaderGlyphPrimitive, 'kind'>;
|
|
382
|
+
}
|
|
383
|
+
interface RectPrimitive extends DocAttrs {
|
|
384
|
+
kind: 'rect';
|
|
385
|
+
x: number;
|
|
386
|
+
y: number;
|
|
387
|
+
w: number;
|
|
388
|
+
h: number;
|
|
389
|
+
fill: string;
|
|
390
|
+
/** Alpha multiplier. Undefined = 1. */
|
|
391
|
+
opacity?: number;
|
|
392
|
+
}
|
|
393
|
+
/** Word/CSS line recipe retained instead of flattening to a solid stroke. */
|
|
394
|
+
type DisplayBorderStyle = 'solid' | 'double' | 'dotted' | 'dashed' | 'dashDot' | 'dashDotDot' | 'triple' | 'thinThick' | 'thickThin' | 'wave' | 'doubleWave' | 'groove' | 'ridge' | 'inset' | 'outset';
|
|
395
|
+
interface LinePrimitive extends DocAttrs {
|
|
396
|
+
kind: 'line';
|
|
397
|
+
x1: number;
|
|
398
|
+
y1: number;
|
|
399
|
+
x2: number;
|
|
400
|
+
y2: number;
|
|
401
|
+
strokeWidth: number;
|
|
402
|
+
color: string;
|
|
403
|
+
dash?: number[];
|
|
404
|
+
role?: 'border' | 'table-border' | 'table-cut' | 'separator';
|
|
405
|
+
/** Full border recipe. Undefined = infer solid/dash from `dash`. */
|
|
406
|
+
borderStyle?: DisplayBorderStyle;
|
|
407
|
+
/** Secondary color for 3-D/multi-stroke recipes. */
|
|
408
|
+
secondaryColor?: string;
|
|
409
|
+
/** Alpha multiplier. Undefined = 1. */
|
|
410
|
+
opacity?: number;
|
|
411
|
+
/** Owner of the retained Word border recipe. */
|
|
412
|
+
borderOwner?: 'cell' | 'fragment' | 'paragraph' | 'textBox';
|
|
413
|
+
}
|
|
414
|
+
interface PageBorderSide {
|
|
415
|
+
width: number;
|
|
416
|
+
color: string;
|
|
417
|
+
style: 'solid' | 'double' | 'dotted' | 'dashed' | 'groove' | 'ridge' | 'inset' | 'outset';
|
|
418
|
+
}
|
|
419
|
+
interface PageBorderPrimitive {
|
|
420
|
+
kind: 'pageBorder';
|
|
421
|
+
x: number;
|
|
422
|
+
y: number;
|
|
423
|
+
w: number;
|
|
424
|
+
h: number;
|
|
425
|
+
zOrder?: 'front' | 'back';
|
|
426
|
+
top?: PageBorderSide;
|
|
427
|
+
right?: PageBorderSide;
|
|
428
|
+
bottom?: PageBorderSide;
|
|
429
|
+
left?: PageBorderSide;
|
|
430
|
+
}
|
|
431
|
+
interface ImagePrimitive extends DocAttrs {
|
|
432
|
+
kind: 'image';
|
|
433
|
+
relId: string;
|
|
434
|
+
x: number;
|
|
435
|
+
y: number;
|
|
436
|
+
w: number;
|
|
437
|
+
h: number;
|
|
438
|
+
rotationDeg?: number;
|
|
439
|
+
/** 0..1 alpha applied only to this image. Absent = opaque. */
|
|
440
|
+
opacity?: number;
|
|
441
|
+
/** Flip about the content-frame center. Undefined = false. */
|
|
442
|
+
flipH?: boolean;
|
|
443
|
+
/** Flip about the content-frame center. Undefined = false. */
|
|
444
|
+
flipV?: boolean;
|
|
445
|
+
/** Original image frame when w/h are a transformed layout bbox. */
|
|
446
|
+
contentFrame?: {
|
|
447
|
+
x?: number;
|
|
448
|
+
y?: number;
|
|
449
|
+
w?: number;
|
|
450
|
+
h?: number;
|
|
451
|
+
};
|
|
452
|
+
/** Canvas/CSS filter string for renderer-owned effects, e.g. watermark washout. */
|
|
453
|
+
filter?: string;
|
|
454
|
+
/** True for decorative/non-content images such as picture watermarks. */
|
|
455
|
+
decorative?: boolean;
|
|
456
|
+
crop?: {
|
|
457
|
+
top: number;
|
|
458
|
+
right: number;
|
|
459
|
+
bottom: number;
|
|
460
|
+
left: number;
|
|
461
|
+
};
|
|
462
|
+
altText?: string;
|
|
463
|
+
/** Ordered image effects. Undefined = use legacy `filter` only. */
|
|
464
|
+
effects?: Array<{
|
|
465
|
+
kind?: string;
|
|
466
|
+
amount?: number;
|
|
467
|
+
threshold?: number;
|
|
468
|
+
colors?: string[];
|
|
469
|
+
rawName?: string;
|
|
470
|
+
}>;
|
|
471
|
+
/** Picture border recipe. Undefined = none. */
|
|
472
|
+
border?: {
|
|
473
|
+
width?: number;
|
|
474
|
+
color?: string;
|
|
475
|
+
style?: string;
|
|
476
|
+
dash?: number[];
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
type ShapePathCommand = {
|
|
480
|
+
type: 'move';
|
|
481
|
+
x: number;
|
|
482
|
+
y: number;
|
|
483
|
+
} | {
|
|
484
|
+
type: 'line';
|
|
485
|
+
x: number;
|
|
486
|
+
y: number;
|
|
487
|
+
} | {
|
|
488
|
+
type: 'quad';
|
|
489
|
+
cpx: number;
|
|
490
|
+
cpy: number;
|
|
491
|
+
x: number;
|
|
492
|
+
y: number;
|
|
493
|
+
} | {
|
|
494
|
+
type: 'cubic';
|
|
495
|
+
cp1x: number;
|
|
496
|
+
cp1y: number;
|
|
497
|
+
cp2x: number;
|
|
498
|
+
cp2y: number;
|
|
499
|
+
x: number;
|
|
500
|
+
y: number;
|
|
501
|
+
} | {
|
|
502
|
+
type: 'close';
|
|
503
|
+
};
|
|
504
|
+
interface ShapePrimitive extends DocAttrs {
|
|
505
|
+
kind: 'shape';
|
|
506
|
+
x: number;
|
|
507
|
+
y: number;
|
|
508
|
+
w: number;
|
|
509
|
+
h: number;
|
|
510
|
+
/** Page-local path commands scaled from the shape's normalized geometry. */
|
|
511
|
+
geometryPath: ShapePathCommand[];
|
|
512
|
+
fill?: string;
|
|
513
|
+
stroke?: {
|
|
514
|
+
color: string;
|
|
515
|
+
width: number;
|
|
516
|
+
/** DrawingML/CSS dash style token. */
|
|
517
|
+
dash?: string;
|
|
518
|
+
};
|
|
519
|
+
transform?: {
|
|
520
|
+
rotation?: number;
|
|
521
|
+
flipH?: boolean;
|
|
522
|
+
flipV?: boolean;
|
|
523
|
+
};
|
|
524
|
+
/** True when the shape carries no accessible inner text. */
|
|
525
|
+
decorative?: boolean;
|
|
526
|
+
/** Alpha multiplier. Undefined = 1. */
|
|
527
|
+
opacity?: number;
|
|
528
|
+
/** Lossless paint server; undefined = legacy `fill`. */
|
|
529
|
+
fillPaint?: {
|
|
530
|
+
kind?: 'none' | 'solid' | 'gradient' | 'pattern' | 'picture' | 'theme';
|
|
531
|
+
color?: string;
|
|
532
|
+
angle?: number;
|
|
533
|
+
gradientType?: string;
|
|
534
|
+
stops?: Array<{
|
|
535
|
+
position?: number;
|
|
536
|
+
color?: string;
|
|
537
|
+
}>;
|
|
538
|
+
patternPreset?: string;
|
|
539
|
+
foregroundColor?: string;
|
|
540
|
+
backgroundColor?: string;
|
|
541
|
+
pictureRelId?: string;
|
|
542
|
+
/**
|
|
543
|
+
* Resolved SAFE embedded source for a picture fill (`blob:`/`data:` only —
|
|
544
|
+
* external-mode blip relationships are never resolved, so opening a file
|
|
545
|
+
* cannot trigger a network fetch). The canvas image resolver rejects any
|
|
546
|
+
* other scheme as defense in depth. Absent = unresolvable, paint the
|
|
547
|
+
* legacy `fill`/`color` instead.
|
|
548
|
+
*/
|
|
549
|
+
pictureSrc?: string;
|
|
550
|
+
/** Picture source crop fractions (`a:srcRect`, 0..1; negative = outset). */
|
|
551
|
+
pictureSrcRect?: {
|
|
552
|
+
left?: number;
|
|
553
|
+
top?: number;
|
|
554
|
+
right?: number;
|
|
555
|
+
bottom?: number;
|
|
556
|
+
};
|
|
557
|
+
/** Picture fill mode. Absent = 'stretch' (`a:stretch`). */
|
|
558
|
+
pictureFillMode?: 'stretch' | 'tile';
|
|
559
|
+
/** Tile parameters when `pictureFillMode` = 'tile'. Offsets px, scales fractions. */
|
|
560
|
+
pictureTile?: {
|
|
561
|
+
offsetX?: number;
|
|
562
|
+
offsetY?: number;
|
|
563
|
+
scaleX?: number;
|
|
564
|
+
scaleY?: number;
|
|
565
|
+
alignment?: string;
|
|
566
|
+
flip?: 'none' | 'x' | 'y' | 'xy';
|
|
567
|
+
};
|
|
568
|
+
/** Stretch target rect fractions of the shape box (`a:fillRect`, 0..1). */
|
|
569
|
+
pictureStretchRect?: {
|
|
570
|
+
left?: number;
|
|
571
|
+
top?: number;
|
|
572
|
+
right?: number;
|
|
573
|
+
bottom?: number;
|
|
574
|
+
};
|
|
575
|
+
/** Picture alpha 0..1 (`a:alphaModFix`). Absent = opaque. */
|
|
576
|
+
pictureOpacity?: number;
|
|
577
|
+
themeRefIndex?: number;
|
|
578
|
+
};
|
|
579
|
+
/** Lossless DrawingML stroke details beyond the legacy `stroke` triple. */
|
|
580
|
+
strokePaint?: {
|
|
581
|
+
color?: string;
|
|
582
|
+
width?: number;
|
|
583
|
+
dash?: string;
|
|
584
|
+
customDash?: number[];
|
|
585
|
+
compound?: 'single' | 'double' | 'thickThin' | 'thinThick' | 'triple';
|
|
586
|
+
alignment?: 'center' | 'inset';
|
|
587
|
+
cap?: 'flat' | 'round' | 'square';
|
|
588
|
+
join?: 'bevel' | 'miter' | 'round';
|
|
589
|
+
miterLimit?: number;
|
|
590
|
+
headEnd?: {
|
|
591
|
+
type?: string;
|
|
592
|
+
width?: string;
|
|
593
|
+
length?: string;
|
|
594
|
+
};
|
|
595
|
+
tailEnd?: {
|
|
596
|
+
type?: string;
|
|
597
|
+
width?: string;
|
|
598
|
+
length?: string;
|
|
599
|
+
};
|
|
600
|
+
};
|
|
601
|
+
/** Ordered 2-D effects. Undefined = none. */
|
|
602
|
+
effects?: Array<{
|
|
603
|
+
kind?: string;
|
|
604
|
+
color?: string;
|
|
605
|
+
opacity?: number;
|
|
606
|
+
blurRadius?: number;
|
|
607
|
+
distance?: number;
|
|
608
|
+
direction?: number;
|
|
609
|
+
size?: number;
|
|
610
|
+
rawName?: string;
|
|
611
|
+
}>;
|
|
612
|
+
/** Effect extents in page px. Undefined = zero. */
|
|
613
|
+
effectExtent?: {
|
|
614
|
+
top?: number;
|
|
615
|
+
right?: number;
|
|
616
|
+
bottom?: number;
|
|
617
|
+
left?: number;
|
|
618
|
+
};
|
|
619
|
+
/** Versioned heterogeneous DrawingML group/canvas scene. */
|
|
620
|
+
drawingScene?: DrawingScene;
|
|
621
|
+
/** Full DrawingML `a:bodyPr` projection for shape text. */
|
|
622
|
+
textBodyProperties?: ShapeTextBodyProperties;
|
|
623
|
+
}
|
|
624
|
+
interface DecorationPrimitive extends DocAttrs {
|
|
625
|
+
kind: 'decoration';
|
|
626
|
+
deco: 'underline' | 'strike' | 'highlight' | 'comment-range' | 'spell';
|
|
627
|
+
x: number;
|
|
628
|
+
y: number;
|
|
629
|
+
w: number;
|
|
630
|
+
h: number;
|
|
631
|
+
color: string;
|
|
632
|
+
dashed?: boolean;
|
|
633
|
+
dotted?: boolean;
|
|
634
|
+
/** Exact highlight font-box/source slice. Undefined = legacy rect. */
|
|
635
|
+
highlightSlice?: {
|
|
636
|
+
sourceStart?: number;
|
|
637
|
+
sourceEnd?: number;
|
|
638
|
+
ascent?: number;
|
|
639
|
+
descent?: number;
|
|
640
|
+
includesTrailingWhitespace?: boolean;
|
|
641
|
+
};
|
|
642
|
+
/** Full border/decoration recipe. Undefined = solid/dashed/dotted flags. */
|
|
643
|
+
style?: DisplayBorderStyle;
|
|
644
|
+
}
|
|
645
|
+
/** Shaped tab/TOC leader glyphs; absent metrics mean no painted leader. */
|
|
646
|
+
interface LeaderGlyphPrimitive extends DocAttrs {
|
|
647
|
+
/** Primitive tag. Undefined when embedded as run metadata. */
|
|
648
|
+
kind?: 'leaderGlyphs';
|
|
649
|
+
glyph?: string;
|
|
650
|
+
count?: number;
|
|
651
|
+
x?: number;
|
|
652
|
+
baselineY?: number;
|
|
653
|
+
advance?: number;
|
|
654
|
+
width?: number;
|
|
655
|
+
font?: string;
|
|
656
|
+
fontId?: number;
|
|
657
|
+
size?: number;
|
|
658
|
+
color?: string;
|
|
659
|
+
rtl?: boolean;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
declare const FRAME_DELTA_VERSION = 1;
|
|
663
|
+
declare const FRAME_DELTA_HEADER_BYTES = 80;
|
|
664
|
+
declare const FRAME_DELTA_PAGE_OP_BYTES = 48;
|
|
665
|
+
type FrameDeltaErrorCode = 'invalid-frame' | 'unsupported-version' | 'stale-frame' | 'base-mismatch';
|
|
666
|
+
declare class FrameDeltaError extends Error {
|
|
667
|
+
readonly code: FrameDeltaErrorCode;
|
|
668
|
+
constructor(code: FrameDeltaErrorCode, message: string);
|
|
669
|
+
}
|
|
670
|
+
interface FramePageUpsert {
|
|
671
|
+
readonly kind: 'upsert';
|
|
672
|
+
readonly pageIndex: number;
|
|
673
|
+
readonly pageId: bigint;
|
|
674
|
+
readonly fingerprint: bigint;
|
|
675
|
+
/** Zero-copy view into {@link DecodedFrameDelta.bytes}. */
|
|
676
|
+
readonly primitiveIds: BigUint64Array;
|
|
677
|
+
readonly page: DisplayPage;
|
|
678
|
+
}
|
|
679
|
+
interface FramePageRemove {
|
|
680
|
+
readonly kind: 'remove';
|
|
681
|
+
readonly pageIndex: number;
|
|
682
|
+
readonly pageId: bigint;
|
|
683
|
+
}
|
|
684
|
+
interface FramePageMove {
|
|
685
|
+
readonly kind: 'move';
|
|
686
|
+
readonly pageIndex: number;
|
|
687
|
+
readonly pageId: bigint;
|
|
688
|
+
readonly fingerprint: bigint;
|
|
689
|
+
}
|
|
690
|
+
interface FramePrimitivePositionPatch {
|
|
691
|
+
readonly primitiveId: bigint;
|
|
692
|
+
readonly docStart?: number | null;
|
|
693
|
+
readonly docEnd?: number | null;
|
|
694
|
+
readonly fragmentDocStart?: number | null;
|
|
695
|
+
readonly fragmentDocEnd?: number | null;
|
|
696
|
+
readonly inlineWidgetPos?: number | null;
|
|
697
|
+
}
|
|
698
|
+
interface FramePagePositionPatch {
|
|
699
|
+
readonly kind: 'patch-positions';
|
|
700
|
+
readonly pageIndex: number;
|
|
701
|
+
readonly pageId: bigint;
|
|
702
|
+
readonly fingerprint: bigint;
|
|
703
|
+
readonly patches: readonly FramePrimitivePositionPatch[];
|
|
704
|
+
}
|
|
705
|
+
interface FramePositionShiftRun {
|
|
706
|
+
readonly start: number;
|
|
707
|
+
readonly count: number;
|
|
708
|
+
readonly changedMask: number;
|
|
709
|
+
readonly delta: number;
|
|
710
|
+
}
|
|
711
|
+
interface FramePagePositionShift {
|
|
712
|
+
readonly kind: 'shift-positions';
|
|
713
|
+
readonly pageIndex: number;
|
|
714
|
+
readonly pageId: bigint;
|
|
715
|
+
readonly fingerprint: bigint;
|
|
716
|
+
readonly runs: readonly FramePositionShiftRun[];
|
|
717
|
+
}
|
|
718
|
+
type FramePageOperation = FramePageUpsert | FramePageRemove | FramePageMove | FramePagePositionPatch | FramePagePositionShift;
|
|
719
|
+
interface DecodedFrameDelta {
|
|
720
|
+
readonly protocolVersion: typeof FRAME_DELTA_VERSION;
|
|
721
|
+
readonly full: boolean;
|
|
722
|
+
readonly docEpoch: number;
|
|
723
|
+
readonly layoutEpoch: number;
|
|
724
|
+
readonly frameEpoch: number;
|
|
725
|
+
readonly baseFrameEpoch: number;
|
|
726
|
+
readonly pageCount: number;
|
|
727
|
+
readonly contractVersion?: number;
|
|
728
|
+
readonly operations: readonly FramePageOperation[];
|
|
729
|
+
/** Complete binary frame; safe to transfer when the caller owns its buffer. */
|
|
730
|
+
readonly bytes: Uint8Array;
|
|
731
|
+
}
|
|
732
|
+
interface RetainedFramePage {
|
|
733
|
+
readonly pageIndex: number;
|
|
734
|
+
readonly pageId: bigint;
|
|
735
|
+
readonly fingerprint: bigint;
|
|
736
|
+
readonly primitiveIds: BigUint64Array;
|
|
737
|
+
readonly page: DisplayPage;
|
|
738
|
+
}
|
|
739
|
+
interface RetainedFrame {
|
|
740
|
+
readonly protocolVersion: typeof FRAME_DELTA_VERSION;
|
|
741
|
+
readonly docEpoch: number;
|
|
742
|
+
readonly layoutEpoch: number;
|
|
743
|
+
readonly frameEpoch: number;
|
|
744
|
+
readonly contractVersion?: number;
|
|
745
|
+
readonly pages: readonly RetainedFramePage[];
|
|
746
|
+
/** IDs whose canvas/mirror/interactive projections must be replaced. */
|
|
747
|
+
readonly damagedPageIds: ReadonlySet<bigint>;
|
|
748
|
+
/** Removed surfaces, retained separately because they are absent from pages. */
|
|
749
|
+
readonly removedPageIds: ReadonlySet<bigint>;
|
|
750
|
+
readonly displayList: DisplayList;
|
|
751
|
+
}
|
|
752
|
+
/**
|
|
753
|
+
* Decode and fully validate one binary FrameDelta v1 without mutating retained
|
|
754
|
+
* browser state. Page payloads are typed values, not embedded JSON strings.
|
|
755
|
+
*/
|
|
756
|
+
declare function decodeFrameDelta(input: Uint8Array | ArrayBuffer): DecodedFrameDelta;
|
|
757
|
+
/** Apply one already-validated frame atomically, rejecting stale generations. */
|
|
758
|
+
declare function applyFrameDelta(previous: RetainedFrame | null, delta: DecodedFrameDelta): RetainedFrame;
|
|
759
|
+
/**
|
|
760
|
+
* Apply a frame while reusing position-only page arenas owned exclusively by
|
|
761
|
+
* the caller. Worker/main resident-engine hot paths replace their outer frame
|
|
762
|
+
* atomically and have no concurrent readers; avoiding deep suffix clones keeps
|
|
763
|
+
* geometry shifts from creating periodic multi-megabyte GC stalls.
|
|
764
|
+
*/
|
|
765
|
+
declare function applyFrameDeltaOwned(previous: RetainedFrame | null, delta: DecodedFrameDelta): RetainedFrame;
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
* JS seam to the Rust display-list builder (crates/docx-layout).
|
|
769
|
+
*
|
|
770
|
+
* Marshals the same `{ measured, options, layout }` triple the golden
|
|
771
|
+
* fixtures pin (see scripts/export-displaylist-fixtures.ts) across the wasm
|
|
772
|
+
* boundary and parses the resulting DisplayList. All paint/geometry decisions
|
|
773
|
+
* happen in Rust — this module is serialization glue only.
|
|
774
|
+
*
|
|
775
|
+
* The wasm module is loaded lazily via dynamic import on first build, so the
|
|
776
|
+
* ~800KB inlined binary costs nothing until the experimental canvas renderer
|
|
777
|
+
* is actually enabled.
|
|
778
|
+
*
|
|
779
|
+
* @experimental part of the rust-canvas-engine change; shape may evolve.
|
|
780
|
+
*/
|
|
781
|
+
|
|
782
|
+
/**
|
|
783
|
+
* One header/footer part in the `headersFooters` envelope field: the measured
|
|
784
|
+
* blocks of the HF ProseMirror doc identified by `rId`, plus the band metrics
|
|
785
|
+
* `convertHeaderFooterPmDocToContent` computed (passed through verbatim — the
|
|
786
|
+
* Rust builder re-derives nothing).
|
|
787
|
+
*/
|
|
788
|
+
interface DisplayListHfVariant {
|
|
789
|
+
rId: string;
|
|
790
|
+
kind: 'header' | 'footer';
|
|
791
|
+
type: 'default' | 'first' | 'even';
|
|
792
|
+
/** `toMeasuredBlocks(content.blocks, content.measures)` — same schema as body `measured` */
|
|
793
|
+
measured: MeasuredBlock[];
|
|
794
|
+
/** HeaderFooterContent.height (in-flow stack incl. floating blocks) */
|
|
795
|
+
height: number;
|
|
796
|
+
/** HeaderFooterContent.flowHeight (in-flow band height; fallback: height) */
|
|
797
|
+
flowHeight?: number;
|
|
798
|
+
visualTop?: number;
|
|
799
|
+
visualBottom?: number;
|
|
800
|
+
/**
|
|
801
|
+
* Per-page resolved widths of PAGE/NUMPAGES field runs in this HF part, so a
|
|
802
|
+
* centered/right-aligned line carrying such a field re-centers per page. The
|
|
803
|
+
* line width is measured ONCE at the field's fallback text ("1"), so without
|
|
804
|
+
* this the builder holds the same centered position on every page even though
|
|
805
|
+
* "Page 2 of 3"/"Page 10 of 12" have different widths. Omitted ⇒ the fields
|
|
806
|
+
* ride the char-distributed fallback width (byte-identical to before).
|
|
807
|
+
*/
|
|
808
|
+
fieldWidths?: DisplayListFieldWidths[];
|
|
809
|
+
}
|
|
810
|
+
/**
|
|
811
|
+
* Per-page widths of one PAGE/NUMPAGES field run in an HF part. `pmStart` is the
|
|
812
|
+
* field run's position in the HF ProseMirror doc (the key the Rust builder
|
|
813
|
+
* matches). `fallbackWidth` is the width the measure baked into `line.width`
|
|
814
|
+
* (the field's fallback text); `perPage[i]` is the width of the field's resolved
|
|
815
|
+
* text on layout page index `i` (PAGE → that page's number, NUMPAGES → total).
|
|
816
|
+
*/
|
|
817
|
+
interface DisplayListFieldWidths {
|
|
818
|
+
pmStart: number;
|
|
819
|
+
fallbackWidth: number;
|
|
820
|
+
perPage: number[];
|
|
821
|
+
}
|
|
822
|
+
/**
|
|
823
|
+
* Optional header/footer payload of the builder envelope. Absent ⇒ the Rust
|
|
824
|
+
* output is byte-identical to the body-only build. Flags come off the section
|
|
825
|
+
* properties / settings the DOM painter uses; distances are the same px the
|
|
826
|
+
* painter resolves (`headerDistance ?? page.margins.header ?? 48`).
|
|
827
|
+
*/
|
|
828
|
+
interface DisplayListHeadersFooters {
|
|
829
|
+
titlePg?: boolean;
|
|
830
|
+
evenAndOddHeaders?: boolean;
|
|
831
|
+
headerDistance?: number;
|
|
832
|
+
footerDistance?: number;
|
|
833
|
+
/** Page-level Word watermark, painted behind body/header/footer content. */
|
|
834
|
+
watermark?: DisplayListWatermark;
|
|
835
|
+
variants: DisplayListHfVariant[];
|
|
836
|
+
/** Stable section identity. Undefined = document-global legacy envelope. */
|
|
837
|
+
sectionId?: string;
|
|
838
|
+
/** Zero-based section index. */
|
|
839
|
+
sectionIndex?: number;
|
|
840
|
+
}
|
|
841
|
+
type DisplayListWatermark = DisplayListTextWatermark | DisplayListPictureWatermark;
|
|
842
|
+
interface DisplayListTextWatermark {
|
|
843
|
+
kind: 'text';
|
|
844
|
+
text: string;
|
|
845
|
+
font: string;
|
|
846
|
+
color: string;
|
|
847
|
+
semitransparent: boolean;
|
|
848
|
+
layout: 'diagonal' | 'horizontal';
|
|
849
|
+
fontSize?: number;
|
|
850
|
+
/** Undefined defaults to true for watermarks. */
|
|
851
|
+
decorative?: boolean;
|
|
852
|
+
}
|
|
853
|
+
interface DisplayListPictureWatermark {
|
|
854
|
+
kind: 'picture';
|
|
855
|
+
relId?: string;
|
|
856
|
+
dataUrl?: string;
|
|
857
|
+
scale: number;
|
|
858
|
+
washout: boolean;
|
|
859
|
+
widthEmu?: number;
|
|
860
|
+
heightEmu?: number;
|
|
861
|
+
/** Undefined defaults to true for watermarks. */
|
|
862
|
+
decorative?: boolean;
|
|
863
|
+
}
|
|
864
|
+
/** One measured note in a page/section note area. */
|
|
865
|
+
interface DisplayListNoteItem {
|
|
866
|
+
kind?: 'footnote' | 'endnote';
|
|
867
|
+
id?: number;
|
|
868
|
+
displayLabel?: string;
|
|
869
|
+
measured?: MeasuredBlock[];
|
|
870
|
+
height?: number;
|
|
871
|
+
anchorDocStart?: number;
|
|
872
|
+
anchorDocEnd?: number;
|
|
873
|
+
customMarkFollows?: boolean;
|
|
874
|
+
}
|
|
875
|
+
/** Typed non-fragmented note-region input for the Rust display builder. */
|
|
876
|
+
interface DisplayListNoteArea {
|
|
877
|
+
pageIndex?: number;
|
|
878
|
+
sectionId?: string;
|
|
879
|
+
kind?: 'footnote' | 'endnote';
|
|
880
|
+
placement?: 'pageBottom' | 'beneathText' | 'sectEnd' | 'docEnd';
|
|
881
|
+
y?: number;
|
|
882
|
+
height?: number;
|
|
883
|
+
columns?: number;
|
|
884
|
+
separator?: DisplayListNoteItem;
|
|
885
|
+
notes?: DisplayListNoteItem[];
|
|
886
|
+
}
|
|
887
|
+
/** Stable reviewer palette entry for comments/revisions. */
|
|
888
|
+
interface DisplayListCommentAuthor {
|
|
889
|
+
id?: string;
|
|
890
|
+
name?: string;
|
|
891
|
+
paletteIndex?: number;
|
|
892
|
+
color?: string;
|
|
893
|
+
}
|
|
894
|
+
/** One reply of a comment thread (a11y announcement input). */
|
|
895
|
+
interface DisplayListCommentReply {
|
|
896
|
+
id?: number;
|
|
897
|
+
authorId?: string;
|
|
898
|
+
authorName?: string;
|
|
899
|
+
date?: string;
|
|
900
|
+
/** Plain-text body (the builder caps it before it reaches primitives). */
|
|
901
|
+
text?: string;
|
|
902
|
+
}
|
|
903
|
+
/**
|
|
904
|
+
* Per-comment thread metadata keyed by comment id, joined by the builder onto
|
|
905
|
+
* every primitive carrying that id in `commentIds` so the a11y mirror can
|
|
906
|
+
* announce the complete thread (author name, date, body, replies). All string
|
|
907
|
+
* values are file-derived/attacker-controlled; consumers must only ever
|
|
908
|
+
* assign them via textContent/setAttribute.
|
|
909
|
+
*/
|
|
910
|
+
interface DisplayListCommentThread {
|
|
911
|
+
/** Comment id — matches the numeric ids in `resolvedCommentIds`/`commentIds`. */
|
|
912
|
+
id?: number;
|
|
913
|
+
authorId?: string;
|
|
914
|
+
authorName?: string;
|
|
915
|
+
date?: string;
|
|
916
|
+
/** Plain-text body (builder-capped before emission). */
|
|
917
|
+
text?: string;
|
|
918
|
+
/** Replies in thread order (builder-capped count and text). */
|
|
919
|
+
replies?: DisplayListCommentReply[];
|
|
920
|
+
}
|
|
921
|
+
/** The `{ measured, options, layout }` envelope the Rust builder consumes. */
|
|
922
|
+
interface DisplayListBuildInputs {
|
|
923
|
+
/** Serialization contract version. Undefined reads as legacy version 0. */
|
|
924
|
+
contractVersion?: number;
|
|
925
|
+
measured: MeasuredBlock[];
|
|
926
|
+
options: unknown;
|
|
927
|
+
layout: Layout;
|
|
928
|
+
/** header/footer parts + section flags; omitted ⇒ body-only display list */
|
|
929
|
+
headersFooters?: DisplayListHeadersFooters;
|
|
930
|
+
/**
|
|
931
|
+
* Doc-wide font-id chains keyed `"<family lowercase>|<bold 0|1>|<italic 0|1>"`
|
|
932
|
+
* → measurement `FontStore` ids — the SAME map the measurement input carries.
|
|
933
|
+
* Present only under Rust measurement (the ids must belong to a populated
|
|
934
|
+
* store); its presence against that store is what gates GlyphRun emission.
|
|
935
|
+
* Omitted ⇒ every text run takes the browser-measured `TextRunPrimitive` path
|
|
936
|
+
* (byte-identical to the pre-glyph build).
|
|
937
|
+
*/
|
|
938
|
+
fontChains?: Record<string, number[]>;
|
|
939
|
+
/** Page/section note regions. Undefined = no note emission. */
|
|
940
|
+
noteAreas?: DisplayListNoteArea[];
|
|
941
|
+
/** Resolved comments suppressed from active tint. Undefined = none known. */
|
|
942
|
+
resolvedCommentIds?: number[];
|
|
943
|
+
/** Stable reviewer palette. Undefined = legacy hard-coded colors. */
|
|
944
|
+
commentAuthors?: DisplayListCommentAuthor[];
|
|
945
|
+
/** Per-comment thread metadata for a11y announcements. Undefined = none. */
|
|
946
|
+
commentThreads?: DisplayListCommentThread[];
|
|
947
|
+
}
|
|
948
|
+
/** Minimal engine surface, injectable so tests can fake the wasm module. */
|
|
949
|
+
interface RustDisplayListEngine {
|
|
950
|
+
buildDisplayListJson(input: string): string;
|
|
951
|
+
/** Resident editing engines expose binary deltas; the stateless layout wasm does not. */
|
|
952
|
+
buildDisplayListFrame?(input: string, expectedFrameEpoch: number): Uint8Array;
|
|
953
|
+
/** One-owner ordinary input path; available on the resident editing engine. */
|
|
954
|
+
applyInput?(text: string, expectedFrameEpoch: number): Uint8Array;
|
|
955
|
+
displayHitTestRegionsJson?(pageIndex: number, x: number, y: number): string;
|
|
956
|
+
displayRangeRectsJson?(from: number, to: number): string;
|
|
957
|
+
displayRangeRectsRegionJson?(region: 'body' | 'header' | 'footer', rId: string, from: number, to: number): string;
|
|
958
|
+
}
|
|
959
|
+
type RustDisplayListSourceErrorStage = 'load' | 'build' | 'parse' | 'decode' | 'apply';
|
|
960
|
+
interface RustDisplayFrameResult {
|
|
961
|
+
displayList: DisplayList;
|
|
962
|
+
/** Null only on the compatibility JSON engine path. */
|
|
963
|
+
frame: RetainedFrame | null;
|
|
964
|
+
transport: 'frame-delta-v1' | 'json';
|
|
965
|
+
}
|
|
966
|
+
/**
|
|
967
|
+
* Typed terminal error from the mandatory Rust display-list source. Hosts may
|
|
968
|
+
* surface this through their editor error boundary; it is never permission to
|
|
969
|
+
* silently substitute painter geometry.
|
|
970
|
+
*/
|
|
971
|
+
declare class RustDisplayListSourceError extends Error {
|
|
972
|
+
readonly stage: RustDisplayListSourceErrorStage;
|
|
973
|
+
constructor(stage: RustDisplayListSourceErrorStage, cause: unknown);
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Query surface over an already-built display list, injectable so tests can
|
|
977
|
+
* fake the wasm module.
|
|
978
|
+
*
|
|
979
|
+
* The `*Json` calls take the display-list JSON string as an argument (the Rust
|
|
980
|
+
* side re-parses it per query — callers should cache the string). The
|
|
981
|
+
* session-handle members parse the list ONCE (`openDisplayList` → handle) and
|
|
982
|
+
* answer many queries by handle with no re-serialization, reusing the same
|
|
983
|
+
* hit/range logic so results are byte-identical. The handle members are
|
|
984
|
+
* OPTIONAL: the embedded wasm carries them only after the integrator re-embeds,
|
|
985
|
+
* so `createDisplayListQueries` feature-detects `hasDisplayListSession` and
|
|
986
|
+
* falls back to the `*Json` path when they are absent.
|
|
987
|
+
*/
|
|
988
|
+
interface RustDisplayListQueryEngine {
|
|
989
|
+
/** region-aware hit test → `{"region","rId"?,"pos"}` or `"null"` JSON */
|
|
990
|
+
hitTestRegionsJson(displayList: string, pageIndex: number, x: number, y: number): string;
|
|
991
|
+
/** body PM range → JSON array of `{pageIndex,x,y,width,height}` rects */
|
|
992
|
+
rangeRectsJson(displayList: string, from: number, to: number): string;
|
|
993
|
+
/**
|
|
994
|
+
* Region-aware PM range → JSON array of rects. `region` is
|
|
995
|
+
* `'body' | 'header' | 'footer'`; `rId` scopes header/footer to one HF part
|
|
996
|
+
* (empty for body / match-any). OPTIONAL: the embedded wasm carries it only
|
|
997
|
+
* after the integrator re-embeds, so `createDisplayListQueries` falls back to
|
|
998
|
+
* `[]` when absent (HF selection geometry stays a documented gap until then).
|
|
999
|
+
*/
|
|
1000
|
+
rangeRectsRegionJson?(displayList: string, region: string, rId: string, from: number, to: number): string;
|
|
1001
|
+
/** true when the embedded wasm carries the region-aware range-rect exports */
|
|
1002
|
+
hasRangeRectsRegion?(): boolean;
|
|
1003
|
+
/** true when the embedded wasm carries the session-handle exports below */
|
|
1004
|
+
hasDisplayListSession?(): boolean;
|
|
1005
|
+
/** parse a display list once, return a handle for the by-handle queries */
|
|
1006
|
+
openDisplayList?(displayList: string): number;
|
|
1007
|
+
/** free a handle's parsed display list */
|
|
1008
|
+
closeDisplayList?(handle: number): void;
|
|
1009
|
+
/** region-aware hit test against a stored display list (by handle) */
|
|
1010
|
+
hitTestRegionsByHandle?(handle: number, pageIndex: number, x: number, y: number): string;
|
|
1011
|
+
/** body PM range against a stored display list (by handle) */
|
|
1012
|
+
rangeRectsByHandle?(handle: number, from: number, to: number): string;
|
|
1013
|
+
/** region-aware PM range against a stored display list (by handle) */
|
|
1014
|
+
rangeRectsRegionByHandle?(handle: number, region: string, rId: string, from: number, to: number): string;
|
|
1015
|
+
}
|
|
1016
|
+
/**
|
|
1017
|
+
* Lazily load the wasm query surface (hit-test + range-rects). Shares the
|
|
1018
|
+
* module promise with `buildRustDisplayList`, so on the canvas-renderer path
|
|
1019
|
+
* the engine is already resolved by the time the first display list lands.
|
|
1020
|
+
*/
|
|
1021
|
+
declare function loadRustDisplayListQueryEngine(): Promise<RustDisplayListQueryEngine>;
|
|
1022
|
+
/** Display-only fields sent to an engine that already retains pagination. */
|
|
1023
|
+
declare function encodeDisplayListFrameExtras(inputs: DisplayListBuildInputs): string;
|
|
1024
|
+
/**
|
|
1025
|
+
* Build a DisplayList for a computed layout through the Rust engine. Throws
|
|
1026
|
+
* when the wasm module fails to load or the builder rejects the input — the
|
|
1027
|
+
* caller is expected to fall back to the DOM painter.
|
|
1028
|
+
*/
|
|
1029
|
+
declare function buildRustDisplayList(inputs: DisplayListBuildInputs, engine?: RustDisplayListEngine): Promise<DisplayList>;
|
|
1030
|
+
/**
|
|
1031
|
+
* Production display build. Resident editing engines return FrameDelta v1;
|
|
1032
|
+
* older/stateless engines retain the full-JSON parity path.
|
|
1033
|
+
*/
|
|
1034
|
+
declare function buildRustDisplayFrame(inputs: DisplayListBuildInputs, engine?: RustDisplayListEngine, previous?: RetainedFrame | null): Promise<RustDisplayFrameResult>;
|
|
1035
|
+
|
|
1036
|
+
export { applyFrameDeltaOwned as A, buildRustDisplayFrame as B, buildRustDisplayList as C, type DisplayList as D, decodeFrameDelta as E, FRAME_DELTA_HEADER_BYTES as F, type GlyphRunPrimitive as G, type HfRegion as H, type ImagePrimitive as I, encodeDisplayListFrameExtras as J, loadRustDisplayListQueryEngine as K, type LinePrimitive as L, type PositionedGlyph as P, type RustDisplayListQueryEngine as R, type TextRunPrimitive as T, type DisplayListHeadersFooters as a, type DisplayPage as b, type DisplayPrimitive as c, type DecodedFrameDelta as d, type DecorationPrimitive as e, type DisplayBounds as f, type DisplayListBuildInputs as g, type DisplayListHfVariant as h, type DisplayListPictureWatermark as i, type DisplayListTextWatermark as j, type DisplayListWatermark as k, type DocAttrs as l, FRAME_DELTA_PAGE_OP_BYTES as m, FRAME_DELTA_VERSION as n, FrameDeltaError as o, type FrameDeltaErrorCode as p, type FramePageOperation as q, type RectPrimitive as r, type RetainedFrame as s, type RetainedFramePage as t, type RustDisplayFrameResult as u, type RustDisplayListEngine as v, RustDisplayListSourceError as w, type RustDisplayListSourceErrorStage as x, type TableCellRef as y, applyFrameDelta as z };
|