@docx-editor.dev/core 2.7.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automation.cjs +1 -1
- package/dist/automation.d.cts +5 -6
- package/dist/automation.d.ts +5 -6
- package/dist/automation.js +1 -1
- package/dist/binding.cjs +1 -1
- package/dist/binding.d.cts +12 -12
- package/dist/binding.d.ts +12 -12
- package/dist/binding.js +1 -1
- package/dist/chunk-2RDMWJPF.cjs +2 -0
- package/dist/chunk-5VC5HGJA.js +2 -0
- package/dist/chunk-A2JIBG75.js +1 -0
- package/dist/chunk-DKMKH77K.cjs +5 -0
- package/dist/chunk-DTQPINIM.js +15 -0
- package/dist/chunk-HHFMXG25.js +2 -0
- package/dist/chunk-IEXDXWTA.cjs +1 -0
- package/dist/chunk-IMMAG4QP.cjs +10 -0
- package/dist/chunk-KBCC66CI.js +5 -0
- package/dist/chunk-P5YSGSYC.cjs +15 -0
- package/dist/chunk-Q66ZJFRE.js +18 -0
- package/dist/chunk-TP4EHWEX.cjs +18 -0
- package/dist/chunk-VUJGPCPU.js +10 -0
- package/dist/chunk-XMHWBL3K.cjs +2 -0
- package/dist/contracts/document.d.cts +25 -3
- package/dist/contracts/document.d.ts +25 -3
- package/dist/contracts/editor.d.cts +10 -10
- package/dist/contracts/editor.d.ts +10 -10
- package/dist/contracts/interaction.d.cts +9 -9
- package/dist/contracts/interaction.d.ts +9 -9
- package/dist/contracts/modules.d.cts +6 -5
- package/dist/contracts/modules.d.ts +6 -5
- package/dist/contracts/types.d.cts +101 -1
- package/dist/contracts/types.d.ts +101 -1
- package/dist/{custom-node-writes-BpOBjNzo.d.ts → custom-node-writes-7ERv0f_X.d.cts} +25 -11
- package/dist/{custom-node-writes-C_AlNvds.d.cts → custom-node-writes-QyVZdTUA.d.ts} +25 -11
- package/dist/{editor-CXaGlcUa.d.cts → editor-CojjwMmF.d.cts} +78 -67
- package/dist/{editor-C--WWCBA.d.ts → editor-PUlv5Pp7.d.ts} +78 -67
- package/dist/editor.cjs +1 -1
- package/dist/editor.css +124 -14
- package/dist/editor.d.cts +68 -36
- package/dist/editor.d.ts +68 -36
- package/dist/editor.js +1 -1
- package/dist/{hf-references-BdjsQNE_.d.ts → hf-references-Dvk6De4Q.d.cts} +1 -2
- package/dist/{hf-references-CgEOSw3i.d.cts → hf-references-z5Y4N1ab.d.ts} +1 -2
- package/dist/{image-resources-Bkmu1Jei.d.cts → image-resources-DQOiwOuE.d.cts} +2 -2
- package/dist/{image-resources-BWd5u-op.d.ts → image-resources-eZqD_-vC.d.ts} +2 -2
- package/dist/{index-QsE1xXyT.d.cts → index-DGPSeLI0.d.cts} +1632 -1435
- package/dist/{index-DW0TsrYl.d.ts → index-oN-v8DQ5.d.ts} +1632 -1435
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +19 -19
- package/dist/index.d.ts +19 -19
- package/dist/index.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.d.cts +545 -336
- package/dist/layout.d.ts +545 -336
- package/dist/layout.js +1 -1
- package/dist/{note-nodes-BPSTVDMr.d.ts → note-nodes-BNCANoGN.d.ts} +1 -1
- package/dist/{note-nodes-C6DLxlvj.d.cts → note-nodes-DL-Au22P.d.cts} +1 -1
- package/dist/note-properties-CQlxjic_.d.cts +67 -0
- package/dist/note-properties-jvnw_DGG.d.ts +67 -0
- package/dist/omml-equation-BD-LsmWE.d.cts +84 -0
- package/dist/omml-equation-Dd3mBep-.d.ts +84 -0
- package/dist/{ooxml-tree-BU0e3DVi.d.ts → ooxml-package-CdEy9ufK.d.cts} +352 -1
- package/dist/{ooxml-tree-BU0e3DVi.d.cts → ooxml-package-CdEy9ufK.d.ts} +352 -1
- package/dist/output.cjs +1 -1
- package/dist/output.d.cts +9 -8
- package/dist/output.d.ts +9 -8
- package/dist/output.js +1 -1
- package/dist/{protocol-CD7slqvl.d.cts → protocol-C7ahrdUx.d.ts} +28 -4
- package/dist/{protocol-DsbfgBwA.d.ts → protocol-UuZOcOp7.d.cts} +28 -4
- package/dist/{review-support-Cr2n7f1-.d.ts → review-items-D5SPFtsO.d.ts} +49 -102
- package/dist/{review-support-oQrX6Xu3.d.cts → review-items-DpsqTHio.d.cts} +49 -102
- package/dist/review-reads-B2Ji3fVU.d.ts +176 -0
- package/dist/review-reads-CP106AHp.d.cts +176 -0
- package/dist/{revision-projection-UKqvPa4-.d.ts → revision-projection-CILpvv4M.d.ts} +1 -1
- package/dist/{revision-projection-WzlQGBJx.d.cts → revision-projection-Cc4wz30g.d.cts} +1 -1
- package/dist/{semantic-cell-selection-C8RC0VnN.d.ts → semantic-cell-selection-BWhVAk5B.d.ts} +16 -4
- package/dist/{semantic-cell-selection-CQOgvtbT.d.cts → semantic-cell-selection-DJPjBWzf.d.cts} +16 -4
- package/dist/{semantic-interaction-f4GyBQ_1.d.cts → semantic-interaction-BjOcDB06.d.cts} +14 -2
- package/dist/{semantic-interaction-C45D_oG2.d.ts → semantic-interaction-Cca1-X_a.d.ts} +14 -2
- package/dist/{semantic-paint-DUkGLJ_L.d.ts → semantic-paint-CufpIQFw.d.ts} +7 -7
- package/dist/{semantic-paint-BUt0ePEW.d.cts → semantic-paint-Ur7pAINj.d.cts} +7 -7
- package/dist/{semantic-records-DoW_xNgJ.d.ts → semantic-records-C3Z76KeN.d.cts} +77 -31
- package/dist/{semantic-records-CuT3Wsd-.d.cts → semantic-records-Cc1MJrhM.d.ts} +77 -31
- package/dist/{shaped-measurer-CakZ7g1s.d.ts → shaped-measurer-CYSK20E2.d.cts} +2 -4
- package/dist/{shaped-measurer-CDcHzjhf.d.cts → shaped-measurer-CwlTPDJO.d.ts} +2 -4
- package/dist/store.cjs +1 -1
- package/dist/store.d.cts +90 -18
- package/dist/store.d.ts +90 -18
- package/dist/store.js +1 -1
- package/dist/{tree-op-types-fZgbrR5F.d.ts → tree-op-types-B0-sCtw-.d.cts} +79 -10
- package/dist/{tree-op-types-QujrzgCz.d.cts → tree-op-types-XMVsJSpe.d.ts} +79 -10
- package/dist/{tree-session-5UWKAQ41.d.cts → tree-session-D945D43B.d.cts} +45 -19
- package/dist/{tree-session--6LDTNjR.d.ts → tree-session-DBJgmdmc.d.ts} +45 -19
- package/dist/{tree-store-Dy9FZ1pa.d.ts → tree-store-C6vc8E_2.d.cts} +14 -3
- package/dist/{tree-store-DhYIACNE.d.cts → tree-store-ClA-qng4.d.ts} +14 -3
- package/package.json +2 -2
- package/dist/chunk-32HTRN7R.js +0 -10
- package/dist/chunk-42PRWWVE.js +0 -2
- package/dist/chunk-BRBRYJKE.cjs +0 -2
- package/dist/chunk-DTR64XCS.cjs +0 -2
- package/dist/chunk-EMQSFPJO.cjs +0 -15
- package/dist/chunk-GBK7Z6F4.cjs +0 -5
- package/dist/chunk-GPJXQDHC.js +0 -2
- package/dist/chunk-JLSB6KNZ.js +0 -5
- package/dist/chunk-LEV2X47E.cjs +0 -18
- package/dist/chunk-NDTLLSG7.js +0 -1
- package/dist/chunk-O4VILLOM.cjs +0 -1
- package/dist/chunk-OB6JFVYA.js +0 -15
- package/dist/chunk-QTUZFJ4O.js +0 -18
- package/dist/chunk-UE7KTQLK.js +0 -2
- package/dist/chunk-WC3LI6FC.cjs +0 -10
- package/dist/chunk-XRDTD4X3.cjs +0 -2
- package/dist/content-control-walk-CbTqHq6O.d.cts +0 -56
- package/dist/content-control-walk-D06GijR0.d.ts +0 -56
- package/dist/ooxml-package-CR5us6ad.d.cts +0 -354
- package/dist/ooxml-package-D_CtywTW.d.ts +0 -354
- package/dist/review-reads-C5E7u-pt.d.ts +0 -432
- package/dist/review-reads-ChgUq41I.d.cts +0 -432
package/dist/layout.d.ts
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
import { V as VersionedShapingLibrary, T as TextShaper, F as FontByteValidator, a as FixedPointRoundingMode, b as FixedPoint, c as TextDirection, S as ShapedRun } from './shaped-measurer-
|
|
2
|
-
export { C as CacheLookup, d as CacheMiss, e as CacheProvenance, D as DeclaredFontSubstitution, f as FontFingerprintInputs, g as FontRequest, h as FontResolutionError, i as FontResolutionErrorCode, j as FontResourceDefinition, k as FontResourceInstrumentation, l as FontResourceSnapshot, m as FontResourceSnapshotOptions, n as FontSubstitution, o as FontValidationResult, G as GlyphOutline, H as HARD_MAX_AGGREGATE_FONT_BYTES, p as HARD_MAX_FONT_BYTES, q as HARD_MAX_FONT_SOURCES, L as LayoutShapingOptions, N as NormalizationPolicy, O as OperationSnapshot, r as OperationSnapshotField, s as OperationSnapshotGuard, R as ResolvedCache, t as ResolvedFont, u as ResourceDependencyProvenance, v as ShapeInput, w as ShapedCluster, x as ShapedFontSpan, y as ShapedGlyph, z as ShapedMeasurerOptions, A as ShapedRunComparatorInputs, B as ShapedVerticalMetrics, E as ShapingEnvironment, I as ShapingEnvironmentFingerprintInputs, J as ShapingEnvironmentInput, K as boundedStructuralFontValidator, M as captureOperationSnapshot, P as createFontResourceSnapshot, Q as createShapedMeasurer, U as createShapedRun, W as createShapingEnvironment, X as fixedPoint, Y as fontRequestKey, Z as guardOperationSnapshot, _ as
|
|
3
|
-
import { d as LayoutBox, D as DrawingPoint, e as DrawingInsets, a as StyleSpanRecord, I as InlineDrawingRecord, M as ModelRange,
|
|
4
|
-
export {
|
|
5
|
-
import {
|
|
6
|
-
import { O as OoxmlProperty, C as ContentControlKind, n as ContentControlLevel, o as ContentControlLock, p as ContentControlDataBinding
|
|
7
|
-
export { m as TableBorderStyle } from './tree-op-types-
|
|
8
|
-
import { N as NoteKind, n as noteTypeOf } from './note-nodes-
|
|
9
|
-
import { R as ResolvedFootnoteProperties, a as ResolvedEndnoteProperties } from './
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export {
|
|
16
|
-
|
|
17
|
-
export {
|
|
18
|
-
import { S as SemanticPosition, b as SelectionRect, a as SemanticSelection } from './semantic-interaction-
|
|
19
|
-
export { c as CaretAtOptions, C as CaretGeometry, M as MoveCaretOptions, N as NavigationCommand, d as caretAt, e as caretStops, f as caretStopsForBlocks, g as compositionAnchor, h as contentControlAtSemantic, i as contentControlsInLayout, j as hitTestSemantic, m as moveCaret, p as paragraphTextFromLayout, s as spansInSelection } from './semantic-interaction-
|
|
20
|
-
import './image-resources-
|
|
21
|
-
import './
|
|
1
|
+
import { V as VersionedShapingLibrary, T as TextShaper, F as FontByteValidator, a as FixedPointRoundingMode, b as FixedPoint, c as TextDirection, S as ShapedRun } from './shaped-measurer-CwlTPDJO.js';
|
|
2
|
+
export { C as CacheLookup, d as CacheMiss, e as CacheProvenance, D as DeclaredFontSubstitution, f as FontFingerprintInputs, g as FontRequest, h as FontResolutionError, i as FontResolutionErrorCode, j as FontResourceDefinition, k as FontResourceInstrumentation, l as FontResourceSnapshot, m as FontResourceSnapshotOptions, n as FontSubstitution, o as FontValidationResult, G as GlyphOutline, H as HARD_MAX_AGGREGATE_FONT_BYTES, p as HARD_MAX_FONT_BYTES, q as HARD_MAX_FONT_SOURCES, L as LayoutShapingOptions, N as NormalizationPolicy, O as OperationSnapshot, r as OperationSnapshotField, s as OperationSnapshotGuard, R as ResolvedCache, t as ResolvedFont, u as ResourceDependencyProvenance, v as ShapeInput, w as ShapedCluster, x as ShapedFontSpan, y as ShapedGlyph, z as ShapedMeasurerOptions, A as ShapedRunComparatorInputs, B as ShapedVerticalMetrics, E as ShapingEnvironment, I as ShapingEnvironmentFingerprintInputs, J as ShapingEnvironmentInput, K as boundedStructuralFontValidator, M as captureOperationSnapshot, P as createFontResourceSnapshot, Q as createShapedMeasurer, U as createShapedRun, W as createShapingEnvironment, X as fixedPoint, Y as fontRequestKey, Z as guardOperationSnapshot, _ as shapedRunComparatorInputs, $ as shapingEnvironmentFingerprint, a0 as shapingEnvironmentFingerprintInputs } from './shaped-measurer-CwlTPDJO.js';
|
|
3
|
+
import { d as LayoutBox, D as DrawingPoint, e as DrawingInsets, a as StyleSpanRecord, I as InlineDrawingRecord, M as ModelRange, S as SemanticLayout, B as BlockFragmentRecord, A as AnchoredDrawingRecord, f as PageRecord, R as ResolvedRunStyle, g as ThemeFonts, h as ParagraphSpacing, i as ParagraphLineSpacing, j as ParagraphBorderEdge, k as ParagraphBorders, l as ResolvedTabStops, m as TableBorderSide, C as ContentControlBoundaryRecord$1, n as ContentControlLock, o as ParagraphFragmentRecord, L as LineRecord, p as InlineDrawingLayoutContext, T as TextMeasurer, H as HyperlinkProjector, F as FieldLinkProjector, q as StoryPageFieldNeeds, P as PageGeometry, r as CellBorderBox, s as TableBorderBox } from './semantic-records-Cc1MJrhM.js';
|
|
4
|
+
export { t as AUTO_PARAGRAPH_SPACING_PT, u as BorderGridGeometry, v as ContentControlGeometryFragment, w as ContentControlLevel, x as ContentControlMappedType, y as DEFAULT_PAGE_GEOMETRY, z as DEFAULT_RUN_STYLE, E as DEFAULT_TAB_INTERVAL_PT, G as DEFAULT_TAB_INTERVAL_TWIPS, J as EMPTY_TAB_STOPS, K as EquationFractionGeometry, N as EquationGeometry, O as EquationNaryGeometry, Q as EquationRadicalGeometry, U as EquationRowGeometry, V as EquationScriptGeometry, W as EquationSpanRecord, X as EquationTextGeometry, Y as FieldAtomMarker, Z as HeaderFooterStoryRecord, _ as HyperlinkFieldSpec, $ as LineSpacingRule, a0 as ListMarkerRecord, a1 as MAX_BORDER_SPACE_PT, a2 as MAX_BORDER_WIDTH_PT, a3 as MAX_PARAGRAPH_SPACING_PT, a4 as MAX_TABLE_BORDER_STROKES, a5 as MAX_TAB_POSITION_TWIPS, a6 as MAX_TAB_STOPS, a7 as PARAGRAPH_BORDER_SIDES, a8 as ParagraphAutoSpacingContext, a9 as ParagraphBorderSide, aa as ParagraphBorderStrokeRecord, ab as ParagraphBottomBorderRecord, ac as ParagraphIndent, ad as ResolvedCellBorders, ae as ResolvedTableBorderEdge, af as ResolvedTableBorderEdgeSegment, ag as ResolvedUnderline, ah as SINGLE_LINE_SPACING, ai as SourceRange, aj as SpanLinkRecord, ak as TAB_LEADER_GLYPH, al as TabAlignment, am as TabDestination, an as TabLeader, ao as TabStop, ap as TableBorderSideName, aq as TableBorderStrokeRecord, c as TableCellFragmentRecord, ar as TableFragmentRecord, b as TableRowFragmentRecord, as as VerticalAlign, at as appliedSpaceBefore, au as applyLineSpacing, av as baselineShiftPtOf, aw as borderExtentPt, ax as borderWeight, ay as bottomBorderExtentPt, az as cascadedParagraphBorders, aA as cascadedTabStops, aB as collapsedSpaceBefore, aC as defaultTabIntervalFromSettings, aD as displayText, aE as layoutEquation, aF as measureDisplayText, aG as nextTabDestination, aH as paragraphBorderExtentPt, aI as paragraphBorderStrokeWidthPt, aJ as paragraphBorders, aK as paragraphBordersFingerprint, aL as paragraphBreaksBefore, aM as paragraphContextualSpacing, aN as paragraphLineSpacing, aO as paragraphSpacing, aP as paragraphTabStops, aQ as readBorderSide, aR as readCellBorders, aS as readTableBorders, aT as resolveBorderConflict, aU as resolveRunStyle, aV as resolveTableCellBorderGrid, aW as runStylesEqual, aX as tabAdvanceWidth, aY as tabStopsFingerprint, aZ as withDefaultTabInterval } from './semantic-records-Cc1MJrhM.js';
|
|
5
|
+
import { a as OoxmlNode, b as OoxmlElement, O as OoxmlPart } from './ooxml-package-CdEy9ufK.js';
|
|
6
|
+
import { O as OoxmlProperty, I as ImpactClass, C as ContentControlKind, n as ContentControlLevel, o as ContentControlLock$1, p as ContentControlDataBinding } from './tree-op-types-XMVsJSpe.js';
|
|
7
|
+
export { m as TableBorderStyle } from './tree-op-types-XMVsJSpe.js';
|
|
8
|
+
import { N as NoteKind, n as noteTypeOf } from './note-nodes-BNCANoGN.js';
|
|
9
|
+
import { R as ResolvedFootnoteProperties, a as ResolvedEndnoteProperties } from './note-properties-jvnw_DGG.js';
|
|
10
|
+
import { T as TreeModelChange, D as DocumentProperties } from './tree-store-ClA-qng4.js';
|
|
11
|
+
import { R as RevisionDisplayMode } from './revision-projection-CILpvv4M.js';
|
|
12
|
+
export { D as DEFAULT_REVISION_DISPLAY_MODE, a as RevisionAttribution, b as RevisionKind, f as formatRevisionOf, m as markRevisionRemovesMark, p as paragraphMarkFormatRevisionOf, c as paragraphMarkRevisionOf, d as paragraphMarkRevisionsOf, r as revisionsAreDeletion, e as revisionsVisible, s as shownMarkRevision } from './revision-projection-CILpvv4M.js';
|
|
13
|
+
import { a as SectionColumns } from './semantic-cell-selection-BWhVAk5B.js';
|
|
14
|
+
export { C as CellSelection, D as DEFAULT_SECTION_PROPERTIES, b as DEFAULT_VERTICAL_WEIGHT, c as DocumentSection, d as DocumentSectionsEnumeration, e as DrawingOverlayFrame, H as HitPoint, f as HitTestOptions, M as MAX_DOCUMENT_SECTIONS, P as PlacedCell, g as SectionBreakType, h as SectionColumnDefinition, i as SectionMargins, j as SectionPageNumbering, S as SectionProperties, k as SemanticHit, l as SemanticHitDrawing, T as TableCellAddress, m as TableCellContext, n as caretBoxOnLine, o as cellSelectionBetween, p as cellSelectionRects, q as cellSelectionText, r as contentControlAtPoint, s as enumerateDocumentSections, t as enumerateDocumentSectionsBounded, u as findDrawingOverlayFrameInLayout, v as geometryOfSection, w as hitTestPage, x as hitTestSheet, y as isFurniturePoint, z as lineEndOffset, A as pageAtY, B as paragraphSectionNode, E as paragraphsInCells, F as parsePageNumbering, G as parseSectionProperties, I as readSectionProperties, J as spanOffsetX, K as spansInCells, L as tableContextAt } from './semantic-cell-selection-BWhVAk5B.js';
|
|
15
|
+
export { M as MAX_SDT_NESTING, c as collectFlowBlocks, a as commentBodyText, b as commentInitials, d as contentControlContentChildren, i as isContentControl, e as isContentControlContent, p as paragraphOrderOfPart } from './review-reads-B2Ji3fVU.js';
|
|
16
|
+
import { a as ReviewItem } from './review-items-D5SPFtsO.js';
|
|
17
|
+
export { i as CommentAnchor, j as CommentPosition, C as CommentRecord, h as CommentThreadState, c as ReviewCommentItem, d as ReviewCustomItem, R as ReviewModelInput, e as ReviewPosition, f as ReviewRange, b as ReviewRevisionItem, g as ReviewRevisionKind, W as W15_NAMESPACE_URI, k as activeReviewItem, l as firstReviewRange, r as reviewItemKey, m as reviewItemPositionRank, n as reviewItemRanges, o as reviewItemsAt, p as reviewThreadRootOf } from './review-items-D5SPFtsO.js';
|
|
18
|
+
import { S as SemanticPosition, b as SelectionRect, a as SemanticSelection } from './semantic-interaction-Cca1-X_a.js';
|
|
19
|
+
export { c as CaretAtOptions, C as CaretGeometry, M as MoveCaretOptions, N as NavigationCommand, d as caretAt, e as caretStops, f as caretStopsForBlocks, g as compositionAnchor, h as contentControlAtSemantic, i as contentControlsInLayout, j as hitTestSemantic, m as moveCaret, p as paragraphTextFromLayout, s as spansInSelection } from './semantic-interaction-Cca1-X_a.js';
|
|
20
|
+
import './image-resources-eZqD_-vC.js';
|
|
21
|
+
import './omml-equation-Dd3mBep-.js';
|
|
22
|
+
import './contracts/types.js';
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* Page-field evaluation context for furniture projection.
|
|
@@ -398,6 +399,246 @@ declare function resolveNumberingLevel(index: NumberingIndex, numId: string, ilv
|
|
|
398
399
|
/** Empty index for tests / documents without numbering. */
|
|
399
400
|
declare const EMPTY_NUMBERING_INDEX: NumberingIndex;
|
|
400
401
|
|
|
402
|
+
/**
|
|
403
|
+
* What a batch of commits can affect.
|
|
404
|
+
*
|
|
405
|
+
* `paragraphIds` is the set the commits touched directly. What that set MEANS depends on
|
|
406
|
+
* `impact`: for a local impact it bounds the work, for a structural one it only says where
|
|
407
|
+
* the reflow starts.
|
|
408
|
+
*/
|
|
409
|
+
interface LayoutScope {
|
|
410
|
+
readonly impact: ImpactClass;
|
|
411
|
+
/** Node ids touched directly by the coalesced commits. */
|
|
412
|
+
readonly paragraphIds: ReadonlySet<string>;
|
|
413
|
+
/** Ids the commits created — no previous layout exists for these. */
|
|
414
|
+
readonly created: ReadonlySet<string>;
|
|
415
|
+
/** Ids the commits removed — any retained layout for these must be released. */
|
|
416
|
+
readonly deleted: ReadonlySet<string>;
|
|
417
|
+
/** Cache keys the commits invalidated (styles, numbering, fonts). */
|
|
418
|
+
readonly dependencyKeys: ReadonlySet<string>;
|
|
419
|
+
/** True when the block SEQUENCE changed, so ids alone cannot bound the reflow. */
|
|
420
|
+
readonly structural: boolean;
|
|
421
|
+
/** The revision this scope describes — the layout result must carry the same one. */
|
|
422
|
+
readonly revision: number;
|
|
423
|
+
}
|
|
424
|
+
/** How the scheduler produces layouts and when it publishes them. */
|
|
425
|
+
interface LayoutSchedulerOptions {
|
|
426
|
+
/**
|
|
427
|
+
* Produce a complete layout for the CURRENT model state.
|
|
428
|
+
*
|
|
429
|
+
* Given the accumulated scope so an incremental implementation can use it. It must tag
|
|
430
|
+
* the result with the revision it actually read, which is what makes staleness detectable
|
|
431
|
+
* rather than assumed.
|
|
432
|
+
*/
|
|
433
|
+
readonly run: (scope: LayoutScope) => SemanticLayout;
|
|
434
|
+
/** The model's revision right now. Read at publish time, never cached. */
|
|
435
|
+
readonly currentRevision: () => number;
|
|
436
|
+
/** Called with a layout that is known current. Never called with a stale one. */
|
|
437
|
+
readonly publish: (layout: SemanticLayout, scope: LayoutScope) => void;
|
|
438
|
+
/**
|
|
439
|
+
* Defer work to a later turn, returning a canceller.
|
|
440
|
+
*
|
|
441
|
+
* Injected rather than assumed: the browser wants an animation frame, tests want to step
|
|
442
|
+
* the queue by hand, and a server has neither.
|
|
443
|
+
*/
|
|
444
|
+
readonly schedule?: (run: () => void) => () => void;
|
|
445
|
+
/**
|
|
446
|
+
* Run a layout in slices instead of in one call (task 9.5).
|
|
447
|
+
*
|
|
448
|
+
* Optional: without it `run` is used and completes in one turn, which is right for a
|
|
449
|
+
* document small enough that slicing costs more than it saves.
|
|
450
|
+
*/
|
|
451
|
+
readonly runCooperatively?: (scope: LayoutScope) => CooperativeRun;
|
|
452
|
+
}
|
|
453
|
+
interface CooperativeRun {
|
|
454
|
+
/**
|
|
455
|
+
* Advance the work. Returns the finished layout, or null to be called again.
|
|
456
|
+
*
|
|
457
|
+
* Split so a global relayout does not hold the main thread for the whole document: the
|
|
458
|
+
* scheduler yields between slices and a newer revision can cancel the run mid-flight
|
|
459
|
+
* rather than the user waiting for work whose result is already stale.
|
|
460
|
+
*/
|
|
461
|
+
step(): SemanticLayout | null;
|
|
462
|
+
/** Abandon the run. Nothing partial is ever published. */
|
|
463
|
+
cancel(): void;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Coalesces commits into layout passes.
|
|
467
|
+
*
|
|
468
|
+
* A keystroke is one commit but must not be one full layout pass, so changes accumulate into a
|
|
469
|
+
* scope and are laid out together. Every published layout is tagged with the revision it actually
|
|
470
|
+
* read, which is what makes a stale result detectable rather than merely late.
|
|
471
|
+
*/
|
|
472
|
+
interface LayoutScheduler {
|
|
473
|
+
/** Record a commit. Coalesces with anything already pending. */
|
|
474
|
+
notify(change: TreeModelChange): void;
|
|
475
|
+
/** Request a relayout for a reason the store did not report (page size, zoom, fonts). */
|
|
476
|
+
invalidateAll(revision: number, reason?: string): void;
|
|
477
|
+
/** Run any pending work now, synchronously. Returns whether a layout was published. */
|
|
478
|
+
flush(): boolean;
|
|
479
|
+
/** The scope that would be used if `flush` ran now, or null when nothing is pending. */
|
|
480
|
+
pending(): LayoutScope | null;
|
|
481
|
+
/** Drop pending work without publishing — for teardown. */
|
|
482
|
+
cancel(): void;
|
|
483
|
+
/** How many layouts were discarded for being stale. Diagnostics, and a test hook. */
|
|
484
|
+
readonly staleDiscards: number;
|
|
485
|
+
/** How many cooperative runs were abandoned because a newer revision arrived. */
|
|
486
|
+
readonly cancelledRuns: number;
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Build the scheduler that turns a stream of commits into coalesced layout passes.
|
|
490
|
+
*
|
|
491
|
+
* Keystrokes arrive faster than a document can be laid out, so changes accumulate into one scope
|
|
492
|
+
* and are laid out together rather than once per commit.
|
|
493
|
+
*/
|
|
494
|
+
declare function createLayoutScheduler(options: LayoutSchedulerOptions): LayoutScheduler;
|
|
495
|
+
|
|
496
|
+
/** The flow state as it stood immediately before one block was placed. */
|
|
497
|
+
interface FlowCheckpoint {
|
|
498
|
+
/** Completed pages at this point. The prefix of the previous layout that still stands. */
|
|
499
|
+
readonly pageCount: number;
|
|
500
|
+
/** Fragments already on the page being built. */
|
|
501
|
+
readonly pageFragments: readonly BlockFragmentRecord[];
|
|
502
|
+
/** Anchored drawings already collected for the open page. */
|
|
503
|
+
readonly pendingAnchoredDrawings: readonly AnchoredDrawingRecord[];
|
|
504
|
+
/**
|
|
505
|
+
* Anchored drawings overlap resolution pushed onto the NEXT page, and how many times each
|
|
506
|
+
* drawing has been pushed.
|
|
507
|
+
*
|
|
508
|
+
* Flow state like the rest of this record, and carried for the same reason: a resume that
|
|
509
|
+
* started with an empty list dropped a drawing that the previous pass had deferred but not
|
|
510
|
+
* yet placed, and a convergence that did not compare them accepted a flow that still owed
|
|
511
|
+
* the next page a drawing as equal to one that owed it nothing.
|
|
512
|
+
*/
|
|
513
|
+
readonly deferredAnchoredDrawings: readonly AnchoredDrawingRecord[];
|
|
514
|
+
readonly anchorPageDeferCounts: ReadonlyMap<string, number>;
|
|
515
|
+
readonly cursorY: number;
|
|
516
|
+
readonly lineCounter: number;
|
|
517
|
+
/** Trailing paragraph spacing participating in adjacent-spacing collapse. */
|
|
518
|
+
readonly previousSpaceAfter: number;
|
|
519
|
+
/** Active column index when the section uses multiple columns. */
|
|
520
|
+
readonly flowColumnIndex: number;
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* What the last layout pass actually did — the observable evidence that incremental layout is
|
|
524
|
+
* working.
|
|
525
|
+
*
|
|
526
|
+
* `reusedPages` and `fullPasses` are the ones that matter: a typing keystroke that rebuilds every
|
|
527
|
+
* page produces identical output and unusable performance, so the tests assert on these rather
|
|
528
|
+
* than on the rendered result.
|
|
529
|
+
*/
|
|
530
|
+
interface LayoutSessionStats {
|
|
531
|
+
/** Paragraphs placed by the last pass, against the number in the document. */
|
|
532
|
+
readonly placed: number;
|
|
533
|
+
readonly total: number;
|
|
534
|
+
/** Pages carried over from the previous layout without being rebuilt. */
|
|
535
|
+
readonly reusedPages: number;
|
|
536
|
+
/** Passes that could not resume and laid the document out from the top. */
|
|
537
|
+
readonly fullPasses: number;
|
|
538
|
+
}
|
|
539
|
+
/** One section's place on the previous document sheet stack. */
|
|
540
|
+
interface SectionStackSpan {
|
|
541
|
+
readonly startIndex: number;
|
|
542
|
+
readonly pageCount: number;
|
|
543
|
+
readonly sheetY: number;
|
|
544
|
+
/** Remapped pages (projectors intact) from the last pass for this section. */
|
|
545
|
+
readonly remappedPages: readonly PageRecord[];
|
|
546
|
+
}
|
|
547
|
+
/** Orchestrator state for multi-section incremental layout. */
|
|
548
|
+
interface MultiSectionLayoutState {
|
|
549
|
+
structureKey: string;
|
|
550
|
+
sections: LayoutSession[];
|
|
551
|
+
spans: SectionStackSpan[];
|
|
552
|
+
previousRemapped: readonly PageRecord[];
|
|
553
|
+
previousFinalized: SemanticLayout | null;
|
|
554
|
+
previousPageCount: number;
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Carried-over state that makes layout incremental.
|
|
558
|
+
*
|
|
559
|
+
* A caller creates one and hands the SAME object back each pass. It holds the previous pages, the
|
|
560
|
+
* per-block cache keys and the flow checkpoints a pass resumes from, so an edit low in a document
|
|
561
|
+
* re-lays only what follows it. A no-change pass returns the previous pages by identity.
|
|
562
|
+
*/
|
|
563
|
+
interface LayoutSession {
|
|
564
|
+
/** @internal Mutable across passes; a caller only creates one and passes it back. */
|
|
565
|
+
previous: SemanticLayout | null;
|
|
566
|
+
checkpoints: FlowCheckpoint[];
|
|
567
|
+
keys: string[];
|
|
568
|
+
/** Geometry and producer of the previous pass; a change to either forces a full pass. */
|
|
569
|
+
context: string;
|
|
570
|
+
/**
|
|
571
|
+
* Whether the previous pass read page PARITY: even/odd header variants, or an anchored
|
|
572
|
+
* drawing positioned against an inside/outside frame or alignment.
|
|
573
|
+
*
|
|
574
|
+
* The document page index is not part of {@link context} — page numbers re-project at
|
|
575
|
+
* finalize and page shells renumber at remap — so parity is the only page-position input
|
|
576
|
+
* that can invalidate a section's layout. Tracked separately so the common document pays
|
|
577
|
+
* nothing for a start-index shift.
|
|
578
|
+
*/
|
|
579
|
+
parityDependent: boolean;
|
|
580
|
+
/** Parity (0/1) of the document page index this session's layout started on. */
|
|
581
|
+
startPageParity: number;
|
|
582
|
+
/**
|
|
583
|
+
* The section's memoized prepass (prepared blocks, cache keys, flow keys, document
|
|
584
|
+
* order), reused verbatim while its inputs are unchanged. Opaque here: the shape is
|
|
585
|
+
* owned by `semantic-layout.ts`, which is the only reader and writer.
|
|
586
|
+
*/
|
|
587
|
+
prepass: unknown;
|
|
588
|
+
/**
|
|
589
|
+
* The notes pass's memoized state (reference hits, mark contexts, per-page attach
|
|
590
|
+
* results), reused while its inputs are unchanged. Opaque here: the shape is owned by
|
|
591
|
+
* `note-pagination.ts`, which is the only reader and writer.
|
|
592
|
+
*/
|
|
593
|
+
notes: unknown;
|
|
594
|
+
/** Line counter at the start of the previous pass, for translating reused section counts. */
|
|
595
|
+
startLineCounter: number;
|
|
596
|
+
/**
|
|
597
|
+
* Line counter after the last block of the previous pass.
|
|
598
|
+
*
|
|
599
|
+
* Multi-section orchestration threads a global line counter across sections; early-exit
|
|
600
|
+
* paths (unchanged / converged) must report this rather than the resume cursor.
|
|
601
|
+
*/
|
|
602
|
+
endLineCounter: number;
|
|
603
|
+
/**
|
|
604
|
+
* Flow state after the last block of the previous pass, for a section that CONTINUES
|
|
605
|
+
* onto this one's last sheet (`w:type="continuous"`).
|
|
606
|
+
*
|
|
607
|
+
* `endCursorY` is the used height of that sheet's content column; `endSpaceAfter` is the
|
|
608
|
+
* trailing paragraph spacing still eligible for adjacent-spacing collapse. Reported by
|
|
609
|
+
* the early-exit paths (unchanged / converged) for the same reason as
|
|
610
|
+
* {@link endLineCounter}: the resume cursor is not the end of the flow.
|
|
611
|
+
*/
|
|
612
|
+
endCursorY: number;
|
|
613
|
+
endSpaceAfter: number;
|
|
614
|
+
/** Whether the last page of that pass was still open (no trailing page break). */
|
|
615
|
+
endsOpenPage: boolean;
|
|
616
|
+
stats: LayoutSessionStats;
|
|
617
|
+
/**
|
|
618
|
+
* Column-height limit chosen by the last balanced multi-column pass, or null when the
|
|
619
|
+
* last pass did not balance.
|
|
620
|
+
*
|
|
621
|
+
* Lets the next pass try the remembered limit FIRST: an unchanged balanced section
|
|
622
|
+
* early-exits on that single attempt instead of re-running the natural pass and the
|
|
623
|
+
* whole balance search every time.
|
|
624
|
+
*/
|
|
625
|
+
balanceLimit: number | null;
|
|
626
|
+
/** Present when the last pass was multi-section; child sessions live here. */
|
|
627
|
+
multi: MultiSectionLayoutState | null;
|
|
628
|
+
/**
|
|
629
|
+
* Page-bottom footnote reserves from the last published notes layout.
|
|
630
|
+
*
|
|
631
|
+
* Seeded into the next {@link layoutSemanticDocumentWithNotes} call so the first body
|
|
632
|
+
* pass already matches the reserved context key — without this, every notes document
|
|
633
|
+
* starts empty, mismatches, and throws away the session on reflow.
|
|
634
|
+
*/
|
|
635
|
+
notePageBottomReserves: ReadonlyMap<number, number> | null;
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* A layout session, retained across revisions by the caller.
|
|
639
|
+
*/
|
|
640
|
+
declare function createLayoutSession(): LayoutSession;
|
|
641
|
+
|
|
401
642
|
/**
|
|
402
643
|
* A paragraph's list membership fully resolved: definition, level, marker text and geometry.
|
|
403
644
|
*
|
|
@@ -416,7 +657,7 @@ interface ResolvedListItem {
|
|
|
416
657
|
/** Effective indent after merging level + paragraph indents, in points. */
|
|
417
658
|
readonly indent: NumberingLevelIndent;
|
|
418
659
|
readonly markerStyle: ResolvedRunStyle;
|
|
419
|
-
/** Fingerprint for layout cache keys (indent
|
|
660
|
+
/** Fingerprint for layout cache keys (indent, marker text, marker face). */
|
|
420
661
|
readonly cacheToken: string;
|
|
421
662
|
}
|
|
422
663
|
/**
|
|
@@ -474,15 +715,6 @@ declare function withResolvedListItems<T extends {
|
|
|
474
715
|
readonly numberingIndex?: NumberingIndex;
|
|
475
716
|
readonly listItems?: ReadonlyMap<string, ResolvedListItem>;
|
|
476
717
|
readonly styleCascade?: StyleCascadeTable;
|
|
477
|
-
/**
|
|
478
|
-
* Host oracle for "is this font family really loaded". Supplied, a Symbol/Wingdings
|
|
479
|
-
* bullet keeps the file's own private-use codepoint so the authored typeface draws it;
|
|
480
|
-
* absent, it falls back to the Unicode equivalent rather than a tofu box.
|
|
481
|
-
*
|
|
482
|
-
* The resolve is memoized on this function's IDENTITY: a host whose answers change
|
|
483
|
-
* over time (a font finished loading) must supply a new closure at that point, or the
|
|
484
|
-
* memo will keep serving marker glyphs computed from the old answers.
|
|
485
|
-
*/
|
|
486
718
|
readonly isFontAvailable?: (family: string) => boolean;
|
|
487
719
|
}>(options: T, blocks: readonly OoxmlElement[]): T & {
|
|
488
720
|
readonly numberingIndex: NumberingIndex;
|
|
@@ -737,11 +969,76 @@ interface CompoundBorderMetrics {
|
|
|
737
969
|
*/
|
|
738
970
|
declare function computeDoubleBorderMetricsPt(widthPt: number): CompoundBorderMetrics;
|
|
739
971
|
|
|
972
|
+
/**
|
|
973
|
+
* Depth-first paragraph fragments of one page, in reading order.
|
|
974
|
+
*
|
|
975
|
+
* Table interiors flatten through rows and cells; header-repeat rows are skipped unless
|
|
976
|
+
* asked for, so interaction sees each caret stop exactly once while paint sees everything.
|
|
977
|
+
*/
|
|
978
|
+
declare function paragraphFragmentsOf(page: PageRecord, includeHeaderRepeats?: boolean): ParagraphFragmentRecord[];
|
|
979
|
+
declare function paragraphFragmentsOfBlocks(blocks: readonly BlockFragmentRecord[], includeHeaderRepeats?: boolean): ParagraphFragmentRecord[];
|
|
980
|
+
/** Every line in a layout, in reading order — the order caret navigation walks. */
|
|
981
|
+
declare function linesOf(layout: SemanticLayout): LineRecord[];
|
|
982
|
+
/** Every fragment belonging to one paragraph, in order, across page boundaries. */
|
|
983
|
+
declare function fragmentsOfParagraph(layout: SemanticLayout, paragraphId: string): ParagraphFragmentRecord[];
|
|
984
|
+
/** The line containing a model position, or null when the position is not laid out. */
|
|
985
|
+
declare function lineAtPosition(layout: SemanticLayout, paragraphId: string, offset: number,
|
|
986
|
+
/** Lines to test, when the caller already knows which ones can carry the paragraph. */
|
|
987
|
+
candidates?: Iterable<LineRecord>): LineRecord | null;
|
|
988
|
+
/** Every content-control boundary on a layout, preferring the layout-level list. */
|
|
989
|
+
declare function contentControlsOfLayout(layout: SemanticLayout): readonly ContentControlBoundaryRecord$1[];
|
|
990
|
+
/**
|
|
991
|
+
* Axis-aligned union of boxes, or null when the list is empty.
|
|
992
|
+
*
|
|
993
|
+
* Used when a control's content spans several fragments or spans on one page.
|
|
994
|
+
*/
|
|
995
|
+
declare function unionLayoutBoxes(boxes: readonly LayoutBox[]): LayoutBox | null;
|
|
996
|
+
/** Collapse raw + ancestor locks into one `ST_Lock` vocabulary value. */
|
|
997
|
+
declare function effectiveContentControlLock(locks: readonly ContentControlLock[]): ContentControlLock;
|
|
998
|
+
|
|
740
999
|
/** Paragraph ids in document order, deduplicated across fragments. */
|
|
741
1000
|
declare function documentOrder(layout: SemanticLayout): string[];
|
|
1001
|
+
/**
|
|
1002
|
+
* Paragraph ids of EVERY story the layout paints, in the order they sit on the page.
|
|
1003
|
+
*
|
|
1004
|
+
* Body, then each page's header and footer, then its note areas — per page, so a story's own
|
|
1005
|
+
* paragraphs stay adjacent and in reading order. That is all any caller needs: a selection
|
|
1006
|
+
* cannot span two stories (the engine refuses one), so only the order WITHIN a story is ever
|
|
1007
|
+
* compared, and this gets that right for all of them at once.
|
|
1008
|
+
*
|
|
1009
|
+
* What a caller passes when it has no story in hand — `selectionRects` and
|
|
1010
|
+
* `spansInSelection` both REQUIRE an order rather than defaulting to one, deliberately.
|
|
1011
|
+
* {@link documentOrder} is the body alone, and
|
|
1012
|
+
* using it as a default is what let selection reads silently answer about the wrong story —
|
|
1013
|
+
* two paragraphs selected in a header both ranked -1, the walk gave up, and the run properties
|
|
1014
|
+
* came back short. A caller that DOES know its story should still pass that story's order:
|
|
1015
|
+
* it is smaller, and it cannot match a paragraph the caret is not among.
|
|
1016
|
+
*/
|
|
1017
|
+
declare function everyStoryOrder(layout: SemanticLayout): string[];
|
|
742
1018
|
|
|
743
|
-
/**
|
|
744
|
-
|
|
1019
|
+
/**
|
|
1020
|
+
* The rectangles covering a selection, one per line it spans.
|
|
1021
|
+
*
|
|
1022
|
+
* BODY fragments only, and a selection outside the body paints nothing. That is a real gap —
|
|
1023
|
+
* a retained pin in a header shows no highlight, and a comment anchored in one draws no band
|
|
1024
|
+
* even though the review queue lists it — but it is the honest shape of what this can answer
|
|
1025
|
+
* today. Widening the walk to the other stories is not enough on its own: header and footer
|
|
1026
|
+
* fragments carry positions relative to their own story box, note fragments relative to their
|
|
1027
|
+
* note area, and one header story object is attached to EVERY page it applies to. Fed straight
|
|
1028
|
+
* into a page-content-relative rect, those produce a band per page, at coordinates belonging
|
|
1029
|
+
* to a different box. Measured, that put a header comment's band on all six pages of a
|
|
1030
|
+
* document at the top-left of the body text. Painting nothing is wrong; painting over the
|
|
1031
|
+
* wrong words is worse, so the walk stays here until the geometry is carried with it.
|
|
1032
|
+
*/
|
|
1033
|
+
declare function selectionRects(layout: SemanticLayout, selection: SemanticSelection,
|
|
1034
|
+
/**
|
|
1035
|
+
* Reading order of the ACTIVE story.
|
|
1036
|
+
*
|
|
1037
|
+
* REQUIRED, for the reason `spansInSelection` gives: any default is one story's order, and
|
|
1038
|
+
* it is wrong for every caret outside that story. A caller with no story in hand passes
|
|
1039
|
+
* {@link everyStoryOrder}.
|
|
1040
|
+
*/
|
|
1041
|
+
order: readonly string[]): SelectionRect[];
|
|
745
1042
|
/** A model range to highlight, and the key the caller knows it by. */
|
|
746
1043
|
interface KeyedRange {
|
|
747
1044
|
readonly key: string;
|
|
@@ -790,6 +1087,9 @@ declare function wordBoundary(text: string, offset: number, direction: -1 | 1):
|
|
|
790
1087
|
*/
|
|
791
1088
|
declare function positionPastDeletion(layout: SemanticLayout, position: SemanticPosition): SemanticPosition;
|
|
792
1089
|
|
|
1090
|
+
/** Synchronous platform-neutral SHA-256 used before font bytes cross into a shaping implementation. */
|
|
1091
|
+
declare const sha256FontBytes: (bytes: Uint8Array) => string;
|
|
1092
|
+
|
|
793
1093
|
/**
|
|
794
1094
|
* The exact HarfBuzz build this engine shapes against.
|
|
795
1095
|
*
|
|
@@ -1298,6 +1598,13 @@ interface LayoutNoteStoryOptions {
|
|
|
1298
1598
|
readonly producer: string;
|
|
1299
1599
|
readonly cache?: ParagraphLayoutCache<readonly PendingLine[]>;
|
|
1300
1600
|
readonly styleCascade?: StyleCascadeTable;
|
|
1601
|
+
/**
|
|
1602
|
+
* `numbering.xml`, so a `w:numPr` paragraph inside a note resolves a marker.
|
|
1603
|
+
*
|
|
1604
|
+
* Per story, like every other: `createListCounterState` is fresh per walk, so a numbered
|
|
1605
|
+
* list in a footnote starts at `w:start` rather than continuing the body's sequence.
|
|
1606
|
+
*/
|
|
1607
|
+
readonly numberingIndex?: NumberingIndex;
|
|
1301
1608
|
readonly defaultTabStopPt?: number;
|
|
1302
1609
|
/**
|
|
1303
1610
|
* Same projector seams the BODY walk uses. Without them a `w:hyperlink` or a HYPERLINK
|
|
@@ -1420,6 +1727,8 @@ interface NotesLayoutInput {
|
|
|
1420
1727
|
readonly producer: string;
|
|
1421
1728
|
readonly cache?: ParagraphLayoutCache<readonly PendingLine[]>;
|
|
1422
1729
|
readonly styleCascade?: StyleCascadeTable;
|
|
1730
|
+
/** `numbering.xml`, so a `w:numPr` paragraph inside a note resolves a marker. */
|
|
1731
|
+
readonly numberingIndex?: NumberingIndex;
|
|
1423
1732
|
readonly defaultTabStopPt?: number;
|
|
1424
1733
|
/**
|
|
1425
1734
|
* Link projector seams, same as the body walk's. Normally injected by `semantic-layout`
|
|
@@ -1501,232 +1810,114 @@ passMemo?: unknown): {
|
|
|
1501
1810
|
readonly stable: boolean;
|
|
1502
1811
|
readonly reasons: readonly NotePaginationFallbackReason[];
|
|
1503
1812
|
};
|
|
1504
|
-
/**
|
|
1505
|
-
* Attach footnote/endnote areas onto a body layout. Does not re-paginate — callers that
|
|
1506
|
-
* need reservation must re-run body layout with {@link pageBottomReserves} first.
|
|
1507
|
-
*/
|
|
1508
|
-
declare function attachNotesToLayout(layout: SemanticLayout, allRefs: readonly PageRefHit[], input: NotesLayoutInput, options?: {
|
|
1509
|
-
readonly fallbackReasons?: readonly NotePaginationFallbackReason[];
|
|
1510
|
-
readonly paragraphSectionIndex?: ReadonlyMap<string, number>;
|
|
1511
|
-
/**
|
|
1512
|
-
* Session-carried notes memo, already validated against `allRefs` and `input`.
|
|
1513
|
-
* Opaque at this boundary; the shape is owned by this module.
|
|
1514
|
-
*/
|
|
1515
|
-
readonly memo?: unknown;
|
|
1516
|
-
}): NotesAttachResult;
|
|
1517
|
-
/**
|
|
1518
|
-
* Build a continuous (pre-page) mark context for the first body layout pass.
|
|
1519
|
-
* eachPage reserves digit width; {@link reprojectBodyNoteMarks} publishes final marks
|
|
1520
|
-
* onto body citations after page assignment in {@link attachNotesToLayout}.
|
|
1521
|
-
*/
|
|
1522
|
-
declare function provisionalNoteMarks(refs: readonly PageRefHit[], input: NotesLayoutInput): NoteMarkContext;
|
|
1523
|
-
|
|
1524
|
-
/** Page geometry for header/footer anchored frame resolution (story-relative layout space). */
|
|
1525
|
-
interface HeaderFooterPageContext {
|
|
1526
|
-
readonly pageNumber: number;
|
|
1527
|
-
readonly pageWidth: number;
|
|
1528
|
-
readonly pageHeight: number;
|
|
1529
|
-
readonly marginLeft: number;
|
|
1530
|
-
readonly marginRight: number;
|
|
1531
|
-
readonly marginTop: number;
|
|
1532
|
-
readonly marginBottom: number;
|
|
1533
|
-
}
|
|
1534
|
-
interface HeaderFooterStoryLayout {
|
|
1535
|
-
readonly partName: string;
|
|
1536
|
-
/** Main-document relationship id when the furniture source knows it. */
|
|
1537
|
-
readonly rId?: string;
|
|
1538
|
-
/**
|
|
1539
|
-
* Bounded identity of the story's canonical OOXML content.
|
|
1540
|
-
*
|
|
1541
|
-
* Furniture cache keys must not rely on {@link flowHeight} alone: equal-height A→B edits
|
|
1542
|
-
* would otherwise reuse stale page furniture. Derived as a 16-hex FNV-1a over the part's
|
|
1543
|
-
* canonical fingerprint — never DOM identity or unbounded raw serialization in the key.
|
|
1544
|
-
* PAGE/NUMPAGES/SECTIONPAGES projection shares this key; page context is cached separately.
|
|
1545
|
-
*/
|
|
1546
|
-
readonly contentKey: string;
|
|
1547
|
-
/** Story-relative fragments; origin at the story box's top-left. */
|
|
1548
|
-
readonly fragments: readonly BlockFragmentRecord[];
|
|
1549
|
-
/** The height the blocks actually flow to — what sizes the box on every page. */
|
|
1550
|
-
readonly flowHeight: number;
|
|
1551
|
-
/**
|
|
1552
|
-
* Allowlisted complex PAGE / NUMPAGES / SECTIONPAGES presence detected for this story.
|
|
1553
|
-
*
|
|
1554
|
-
* Callers use this to skip attaching a page-field projector when the baseline is enough.
|
|
1555
|
-
*/
|
|
1556
|
-
readonly pageFieldNeeds: StoryPageFieldNeeds;
|
|
1557
|
-
/** Anchored drawings owned by this story, in story-relative coordinates. */
|
|
1558
|
-
readonly anchoredDrawings?: readonly AnchoredDrawingRecord[];
|
|
1559
|
-
/**
|
|
1560
|
-
* Re-layout this story under a page-field context.
|
|
1561
|
-
*
|
|
1562
|
-
* Field-free stories return `this`. Count-only stories cache by the counts they read.
|
|
1563
|
-
* PAGE stories cache by the distinct evaluated values (including format) with a bounded LRU.
|
|
1564
|
-
*/
|
|
1565
|
-
readonly withPageContext: (ctx: FieldPageContext) => HeaderFooterStoryLayout;
|
|
1566
|
-
}
|
|
1567
|
-
/**
|
|
1568
|
-
* Lay one header/footer part out at `contentWidth`.
|
|
1569
|
-
*
|
|
1570
|
-
* Line ids are namespaced by part so the body's `line-N` counter — which incremental
|
|
1571
|
-
* convergence compares — never moves because a header changed.
|
|
1572
|
-
*
|
|
1573
|
-
* When `pageContext` is set, allowlisted PAGE/NUMPAGES/SECTIONPAGES instructions project
|
|
1574
|
-
* live values; otherwise those fields contribute only cached result text (often empty).
|
|
1575
|
-
* Field-free stories ignore `pageContext` and share one baseline layout.
|
|
1576
|
-
*
|
|
1577
|
-
* `defaultTabStopPt` is the document's `w:settings/w:defaultTabStop` (ECMA-376 §17.15.1.25)
|
|
1578
|
-
* in points; absent keeps the 0.5" schema default. Furniture tabs on the SAME grid as the
|
|
1579
|
-
* body — a page-number tab in a metric-locale footer belongs on the document's interval, not
|
|
1580
|
-
* on a constant. It sits at the tail because the parameters ahead of it are already
|
|
1581
|
-
* positional; new callers should keep passing `undefined` for what they do not set.
|
|
1582
|
-
*/
|
|
1583
|
-
declare function layoutHeaderFooterStory(part: OoxmlPart, contentWidth: number, measurer: TextMeasurer, producer: string, cache?: ParagraphLayoutCache<readonly PendingLine[]>, styleCascade?: StyleCascadeTable, pageContext?: FieldPageContext, maxPageContextEntries?: number, defaultTabStopPt?: number, displayMode?: RevisionDisplayMode, inlineDrawingLayout?: InlineDrawingLayoutContext, drawingTokenForParagraph?: (paragraph: OoxmlNode) => string, drawingLayoutToken?: string, hfPageContext?: HeaderFooterPageContext, documentProperties?: DocumentProperties): HeaderFooterStoryLayout;
|
|
1584
|
-
|
|
1585
|
-
/** The flow state as it stood immediately before one block was placed. */
|
|
1586
|
-
interface FlowCheckpoint {
|
|
1587
|
-
/** Completed pages at this point. The prefix of the previous layout that still stands. */
|
|
1588
|
-
readonly pageCount: number;
|
|
1589
|
-
/** Fragments already on the page being built. */
|
|
1590
|
-
readonly pageFragments: readonly BlockFragmentRecord[];
|
|
1591
|
-
/** Anchored drawings already collected for the open page. */
|
|
1592
|
-
readonly pendingAnchoredDrawings: readonly AnchoredDrawingRecord[];
|
|
1593
|
-
/**
|
|
1594
|
-
* Anchored drawings overlap resolution pushed onto the NEXT page, and how many times each
|
|
1595
|
-
* drawing has been pushed.
|
|
1596
|
-
*
|
|
1597
|
-
* Flow state like the rest of this record, and carried for the same reason: a resume that
|
|
1598
|
-
* started with an empty list dropped a drawing that the previous pass had deferred but not
|
|
1599
|
-
* yet placed, and a convergence that did not compare them accepted a flow that still owed
|
|
1600
|
-
* the next page a drawing as equal to one that owed it nothing.
|
|
1601
|
-
*/
|
|
1602
|
-
readonly deferredAnchoredDrawings: readonly AnchoredDrawingRecord[];
|
|
1603
|
-
readonly anchorPageDeferCounts: ReadonlyMap<string, number>;
|
|
1604
|
-
readonly cursorY: number;
|
|
1605
|
-
readonly lineCounter: number;
|
|
1606
|
-
/** Trailing paragraph spacing participating in adjacent-spacing collapse. */
|
|
1607
|
-
readonly previousSpaceAfter: number;
|
|
1608
|
-
/** Active column index when the section uses multiple columns. */
|
|
1609
|
-
readonly flowColumnIndex: number;
|
|
1610
|
-
}
|
|
1611
|
-
/**
|
|
1612
|
-
* What the last layout pass actually did — the observable evidence that incremental layout is
|
|
1613
|
-
* working.
|
|
1614
|
-
*
|
|
1615
|
-
* `reusedPages` and `fullPasses` are the ones that matter: a typing keystroke that rebuilds every
|
|
1616
|
-
* page produces identical output and unusable performance, so the tests assert on these rather
|
|
1617
|
-
* than on the rendered result.
|
|
1618
|
-
*/
|
|
1619
|
-
interface LayoutSessionStats {
|
|
1620
|
-
/** Paragraphs placed by the last pass, against the number in the document. */
|
|
1621
|
-
readonly placed: number;
|
|
1622
|
-
readonly total: number;
|
|
1623
|
-
/** Pages carried over from the previous layout without being rebuilt. */
|
|
1624
|
-
readonly reusedPages: number;
|
|
1625
|
-
/** Passes that could not resume and laid the document out from the top. */
|
|
1626
|
-
readonly fullPasses: number;
|
|
1627
|
-
}
|
|
1628
|
-
/** One section's place on the previous document sheet stack. */
|
|
1629
|
-
interface SectionStackSpan {
|
|
1630
|
-
readonly startIndex: number;
|
|
1631
|
-
readonly pageCount: number;
|
|
1632
|
-
readonly sheetY: number;
|
|
1633
|
-
/** Remapped pages (projectors intact) from the last pass for this section. */
|
|
1634
|
-
readonly remappedPages: readonly PageRecord[];
|
|
1635
|
-
}
|
|
1636
|
-
/** Orchestrator state for multi-section incremental layout. */
|
|
1637
|
-
interface MultiSectionLayoutState {
|
|
1638
|
-
structureKey: string;
|
|
1639
|
-
sections: LayoutSession[];
|
|
1640
|
-
spans: SectionStackSpan[];
|
|
1641
|
-
previousRemapped: readonly PageRecord[];
|
|
1642
|
-
previousFinalized: SemanticLayout | null;
|
|
1643
|
-
previousPageCount: number;
|
|
1644
|
-
}
|
|
1645
|
-
/**
|
|
1646
|
-
* Carried-over state that makes layout incremental.
|
|
1647
|
-
*
|
|
1648
|
-
* A caller creates one and hands the SAME object back each pass. It holds the previous pages, the
|
|
1649
|
-
* per-block cache keys and the flow checkpoints a pass resumes from, so an edit low in a document
|
|
1650
|
-
* re-lays only what follows it. A no-change pass returns the previous pages by identity.
|
|
1813
|
+
/**
|
|
1814
|
+
* Attach footnote/endnote areas onto a body layout. Does not re-paginate — callers that
|
|
1815
|
+
* need reservation must re-run body layout with {@link pageBottomReserves} first.
|
|
1651
1816
|
*/
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
checkpoints: FlowCheckpoint[];
|
|
1656
|
-
keys: string[];
|
|
1657
|
-
/** Geometry and producer of the previous pass; a change to either forces a full pass. */
|
|
1658
|
-
context: string;
|
|
1659
|
-
/**
|
|
1660
|
-
* Whether the previous pass read page PARITY: even/odd header variants, or an anchored
|
|
1661
|
-
* drawing positioned against an inside/outside frame or alignment.
|
|
1662
|
-
*
|
|
1663
|
-
* The document page index is not part of {@link context} — page numbers re-project at
|
|
1664
|
-
* finalize and page shells renumber at remap — so parity is the only page-position input
|
|
1665
|
-
* that can invalidate a section's layout. Tracked separately so the common document pays
|
|
1666
|
-
* nothing for a start-index shift.
|
|
1667
|
-
*/
|
|
1668
|
-
parityDependent: boolean;
|
|
1669
|
-
/** Parity (0/1) of the document page index this session's layout started on. */
|
|
1670
|
-
startPageParity: number;
|
|
1817
|
+
declare function attachNotesToLayout(layout: SemanticLayout, allRefs: readonly PageRefHit[], input: NotesLayoutInput, options?: {
|
|
1818
|
+
readonly fallbackReasons?: readonly NotePaginationFallbackReason[];
|
|
1819
|
+
readonly paragraphSectionIndex?: ReadonlyMap<string, number>;
|
|
1671
1820
|
/**
|
|
1672
|
-
*
|
|
1673
|
-
*
|
|
1674
|
-
* owned by `semantic-layout.ts`, which is the only reader and writer.
|
|
1821
|
+
* Session-carried notes memo, already validated against `allRefs` and `input`.
|
|
1822
|
+
* Opaque at this boundary; the shape is owned by this module.
|
|
1675
1823
|
*/
|
|
1676
|
-
|
|
1824
|
+
readonly memo?: unknown;
|
|
1825
|
+
}): NotesAttachResult;
|
|
1826
|
+
/**
|
|
1827
|
+
* Build a continuous (pre-page) mark context for the first body layout pass.
|
|
1828
|
+
* eachPage reserves digit width; {@link reprojectBodyNoteMarks} publishes final marks
|
|
1829
|
+
* onto body citations after page assignment in {@link attachNotesToLayout}.
|
|
1830
|
+
*/
|
|
1831
|
+
declare function provisionalNoteMarks(refs: readonly PageRefHit[], input: NotesLayoutInput): NoteMarkContext;
|
|
1832
|
+
|
|
1833
|
+
/** Page geometry for header/footer anchored frame resolution (story-relative layout space). */
|
|
1834
|
+
interface HeaderFooterPageContext {
|
|
1835
|
+
readonly pageNumber: number;
|
|
1836
|
+
readonly pageWidth: number;
|
|
1837
|
+
readonly pageHeight: number;
|
|
1838
|
+
readonly marginLeft: number;
|
|
1839
|
+
readonly marginRight: number;
|
|
1840
|
+
readonly marginTop: number;
|
|
1841
|
+
readonly marginBottom: number;
|
|
1842
|
+
}
|
|
1843
|
+
interface HeaderFooterStoryLayout {
|
|
1844
|
+
readonly partName: string;
|
|
1677
1845
|
/**
|
|
1678
|
-
* The
|
|
1679
|
-
*
|
|
1680
|
-
*
|
|
1846
|
+
* The part this story was laid out from.
|
|
1847
|
+
*
|
|
1848
|
+
* Carried because a derivation that runs over the finished layout cannot reach it otherwise:
|
|
1849
|
+
* the layout receives furniture as fragments plus a NAME, and a name is not a tree. The
|
|
1850
|
+
* content-control boundary pass needs the tree to know which controls exist at all.
|
|
1681
1851
|
*/
|
|
1682
|
-
|
|
1683
|
-
/**
|
|
1684
|
-
|
|
1852
|
+
readonly part?: OoxmlPart;
|
|
1853
|
+
/** Main-document relationship id when the furniture source knows it. */
|
|
1854
|
+
readonly rId?: string;
|
|
1685
1855
|
/**
|
|
1686
|
-
*
|
|
1856
|
+
* Bounded identity of the story's canonical OOXML content.
|
|
1687
1857
|
*
|
|
1688
|
-
*
|
|
1689
|
-
*
|
|
1858
|
+
* Furniture cache keys must not rely on {@link flowHeight} alone: equal-height A→B edits
|
|
1859
|
+
* would otherwise reuse stale page furniture. Derived as a 16-hex FNV-1a over the part's
|
|
1860
|
+
* canonical fingerprint — never DOM identity or unbounded raw serialization in the key.
|
|
1861
|
+
* PAGE/NUMPAGES/SECTIONPAGES projection shares this key; page context is cached separately.
|
|
1690
1862
|
*/
|
|
1691
|
-
|
|
1863
|
+
readonly contentKey: string;
|
|
1864
|
+
/** Story-relative fragments; origin at the story box's top-left. */
|
|
1865
|
+
readonly fragments: readonly BlockFragmentRecord[];
|
|
1866
|
+
/** The height the blocks actually flow to — what sizes the box on every page. */
|
|
1867
|
+
readonly flowHeight: number;
|
|
1692
1868
|
/**
|
|
1693
|
-
*
|
|
1694
|
-
* onto this one's last sheet (`w:type="continuous"`).
|
|
1869
|
+
* Allowlisted complex PAGE / NUMPAGES / SECTIONPAGES presence detected for this story.
|
|
1695
1870
|
*
|
|
1696
|
-
*
|
|
1697
|
-
* trailing paragraph spacing still eligible for adjacent-spacing collapse. Reported by
|
|
1698
|
-
* the early-exit paths (unchanged / converged) for the same reason as
|
|
1699
|
-
* {@link endLineCounter}: the resume cursor is not the end of the flow.
|
|
1871
|
+
* Callers use this to skip attaching a page-field projector when the baseline is enough.
|
|
1700
1872
|
*/
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
endsOpenPage: boolean;
|
|
1705
|
-
stats: LayoutSessionStats;
|
|
1873
|
+
readonly pageFieldNeeds: StoryPageFieldNeeds;
|
|
1874
|
+
/** Anchored drawings owned by this story, in story-relative coordinates. */
|
|
1875
|
+
readonly anchoredDrawings?: readonly AnchoredDrawingRecord[];
|
|
1706
1876
|
/**
|
|
1707
|
-
*
|
|
1708
|
-
* last pass did not balance.
|
|
1877
|
+
* Re-layout this story under a page-field context.
|
|
1709
1878
|
*
|
|
1710
|
-
*
|
|
1711
|
-
*
|
|
1712
|
-
* whole balance search every time.
|
|
1879
|
+
* Field-free stories return `this`. Count-only stories cache by the counts they read.
|
|
1880
|
+
* PAGE stories cache by the distinct evaluated values (including format) with a bounded LRU.
|
|
1713
1881
|
*/
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1882
|
+
readonly withPageContext: (ctx: FieldPageContext) => HeaderFooterStoryLayout;
|
|
1883
|
+
}
|
|
1884
|
+
/**
|
|
1885
|
+
* Story-level inputs the body path has always had and furniture never did.
|
|
1886
|
+
*
|
|
1887
|
+
* A BAG, not more positional parameters. The signature below already carries fifteen, and its
|
|
1888
|
+
* own doc comment used to tell new callers to "keep passing `undefined` for what they do not
|
|
1889
|
+
* set" — which is why `numberingIndex` was never added and a numbered paragraph in a header
|
|
1890
|
+
* painted no marker for as long as headers have been editable. Everything new goes here.
|
|
1891
|
+
*/
|
|
1892
|
+
interface HeaderFooterStoryInputs {
|
|
1717
1893
|
/**
|
|
1718
|
-
*
|
|
1894
|
+
* `numbering.xml`, so a `w:numPr` paragraph in this story resolves a marker.
|
|
1719
1895
|
*
|
|
1720
|
-
*
|
|
1721
|
-
*
|
|
1722
|
-
* starts empty, mismatches, and throws away the session on reflow.
|
|
1896
|
+
* Absent, the story lays out exactly as before: no marker record, and no numbering indent
|
|
1897
|
+
* merged into the paragraph's own.
|
|
1723
1898
|
*/
|
|
1724
|
-
|
|
1899
|
+
readonly numberingIndex?: NumberingIndex;
|
|
1725
1900
|
}
|
|
1726
1901
|
/**
|
|
1727
|
-
*
|
|
1902
|
+
* Lay one header/footer part out at `contentWidth`.
|
|
1903
|
+
*
|
|
1904
|
+
* Line ids are namespaced by part so the body's `line-N` counter — which incremental
|
|
1905
|
+
* convergence compares — never moves because a header changed.
|
|
1906
|
+
*
|
|
1907
|
+
* When `pageContext` is set, allowlisted PAGE/NUMPAGES/SECTIONPAGES instructions project
|
|
1908
|
+
* live values; otherwise those fields contribute only cached result text (often empty).
|
|
1909
|
+
* Field-free stories ignore `pageContext` and share one baseline layout.
|
|
1910
|
+
*
|
|
1911
|
+
* `defaultTabStopPt` is the document's `w:settings/w:defaultTabStop` (ECMA-376 §17.15.1.25)
|
|
1912
|
+
* in points; absent keeps the 0.5" schema default. Furniture tabs on the SAME grid as the
|
|
1913
|
+
* body — a page-number tab in a metric-locale footer belongs on the document's interval, not
|
|
1914
|
+
* on a constant. It sits at the tail because the parameters ahead of it are already
|
|
1915
|
+
* positional; new callers should keep passing `undefined` for what they do not set.
|
|
1916
|
+
*
|
|
1917
|
+
* NEW inputs belong in {@link HeaderFooterStoryInputs}, the trailing bag, rather than as a
|
|
1918
|
+
* sixteenth position. Fifteen is what stopped `numberingIndex` being threaded here at all.
|
|
1728
1919
|
*/
|
|
1729
|
-
declare function
|
|
1920
|
+
declare function layoutHeaderFooterStory(part: OoxmlPart, contentWidth: number, measurer: TextMeasurer, producer: string, cache?: ParagraphLayoutCache<readonly PendingLine[]>, styleCascade?: StyleCascadeTable, pageContext?: FieldPageContext, maxPageContextEntries?: number, defaultTabStopPt?: number, displayMode?: RevisionDisplayMode, inlineDrawingLayout?: InlineDrawingLayoutContext, drawingTokenForParagraph?: (paragraph: OoxmlNode) => string, drawingLayoutToken?: string, hfPageContext?: HeaderFooterPageContext, documentProperties?: DocumentProperties, inputs?: HeaderFooterStoryInputs): HeaderFooterStoryLayout;
|
|
1730
1921
|
|
|
1731
1922
|
/**
|
|
1732
1923
|
* A deterministic measurer for tests and headless use.
|
|
@@ -1737,6 +1928,31 @@ declare function createLayoutSession(): LayoutSession;
|
|
|
1737
1928
|
*/
|
|
1738
1929
|
declare function createFixedMeasurer(charWidth?: number, lineHeight?: number): TextMeasurer;
|
|
1739
1930
|
|
|
1931
|
+
/**
|
|
1932
|
+
* Every content control a part declares, in document order, WITHOUT geometry.
|
|
1933
|
+
*
|
|
1934
|
+
* For callers that want the ROSTER rather than the rectangles — the Tab walk through form
|
|
1935
|
+
* fields is the one, and it needs story order, not boxes. `fragments` comes back empty here
|
|
1936
|
+
* by design; a caller that needs geometry reads `layout.contentControls`, which covers every
|
|
1937
|
+
* story the layout draws.
|
|
1938
|
+
*/
|
|
1939
|
+
declare function contentControlRecordsInPart(part: OoxmlPart,
|
|
1940
|
+
/**
|
|
1941
|
+
* Keep only controls holding one of these paragraphs.
|
|
1942
|
+
*
|
|
1943
|
+
* For a notes PART, which holds every note in the document rather than one story. Rostered
|
|
1944
|
+
* whole, Tab walked out of the open footnote and into the next one, and the keystrokes after
|
|
1945
|
+
* it landed in a note the reader was not in.
|
|
1946
|
+
*/
|
|
1947
|
+
withinParagraphs?: ReadonlySet<string>): readonly ContentControlBoundaryRecord$1[];
|
|
1948
|
+
/**
|
|
1949
|
+
* The innermost content control holding `paragraphId`, in `part`.
|
|
1950
|
+
*
|
|
1951
|
+
* Deepest wins, matching the geometry path's innermost-by-nesting rule: a control inside a
|
|
1952
|
+
* control is the one the caret is actually in.
|
|
1953
|
+
*/
|
|
1954
|
+
declare function contentControlHoldingParagraph(part: OoxmlPart, paragraphId: string): ContentControlBoundaryRecord$1 | null;
|
|
1955
|
+
|
|
1740
1956
|
/** Which header/footer variant a page shows (ECMA-376 §17.10.5). */
|
|
1741
1957
|
type HeaderFooterVariantName = 'default' | 'first' | 'even';
|
|
1742
1958
|
/**
|
|
@@ -2173,9 +2389,9 @@ interface ContentControlBoundaryRecord {
|
|
|
2173
2389
|
readonly level: ContentControlLevel;
|
|
2174
2390
|
/** 0 for a top-level control; the nesting depth otherwise. */
|
|
2175
2391
|
readonly depth: number;
|
|
2176
|
-
readonly lock: ContentControlLock;
|
|
2392
|
+
readonly lock: ContentControlLock$1;
|
|
2177
2393
|
/** The lock in force here, including every lock an enclosing control imposes. */
|
|
2178
|
-
readonly effectiveLock: ContentControlLock;
|
|
2394
|
+
readonly effectiveLock: ContentControlLock$1;
|
|
2179
2395
|
readonly showingPlaceholder: boolean;
|
|
2180
2396
|
readonly temporary: boolean;
|
|
2181
2397
|
readonly tag?: string;
|
|
@@ -2197,6 +2413,93 @@ interface ContentControlBoundaryRecord {
|
|
|
2197
2413
|
*/
|
|
2198
2414
|
declare function contentControlBoundaries(part: OoxmlPart, layout: SemanticLayout): readonly ContentControlBoundaryRecord[];
|
|
2199
2415
|
|
|
2416
|
+
/** Where one paragraph sits, resolved once so a card is an O(1) lookup. */
|
|
2417
|
+
interface ReviewParagraphAnchor {
|
|
2418
|
+
readonly pageIndex: number;
|
|
2419
|
+
/** Sheet-absolute y of the page's content box. */
|
|
2420
|
+
readonly contentY: number;
|
|
2421
|
+
/** The fragment's own y, measured from that content box. */
|
|
2422
|
+
readonly fragmentY: number;
|
|
2423
|
+
readonly lines?: readonly {
|
|
2424
|
+
readonly range: {
|
|
2425
|
+
readonly end: number;
|
|
2426
|
+
};
|
|
2427
|
+
readonly box: {
|
|
2428
|
+
readonly y: number;
|
|
2429
|
+
};
|
|
2430
|
+
/**
|
|
2431
|
+
* Present on a real line. A merged fragment's join line carries spans from two
|
|
2432
|
+
* paragraphs, and its `range` can only name one of them, so the OTHER paragraph's extent
|
|
2433
|
+
* on that line is readable here and nowhere else.
|
|
2434
|
+
*/
|
|
2435
|
+
readonly spans?: readonly {
|
|
2436
|
+
readonly range: {
|
|
2437
|
+
readonly paragraphId: string;
|
|
2438
|
+
readonly end: number;
|
|
2439
|
+
};
|
|
2440
|
+
}[];
|
|
2441
|
+
}[];
|
|
2442
|
+
}
|
|
2443
|
+
/**
|
|
2444
|
+
* The y of the line a position sits on, measured from the anchor's own origin.
|
|
2445
|
+
*
|
|
2446
|
+
* An ordinary line answers from its own range, exactly as it always did. On a merged
|
|
2447
|
+
* fragment's join line the range names one of the two paragraphs, so an offset compared
|
|
2448
|
+
* against it either overshot — putting a card in the absorbed half beside the wrong line —
|
|
2449
|
+
* or matched the first line every time.
|
|
2450
|
+
*/
|
|
2451
|
+
declare function anchorLineY(anchor: ReviewParagraphAnchor, paragraphId: string, offset: number): number;
|
|
2452
|
+
/**
|
|
2453
|
+
* Paragraph id to its place on the page, in ONE pass over the layout.
|
|
2454
|
+
*
|
|
2455
|
+
* Built once per layout and reused by every card. The straightforward version — scan the
|
|
2456
|
+
* pages until the paragraph turns up, per card — is a full-document walk per card, and a
|
|
2457
|
+
* contract with two hundred comments walked the document two hundred times every time the
|
|
2458
|
+
* caret moved. Toggling the pane was visibly slow for exactly that reason.
|
|
2459
|
+
*/
|
|
2460
|
+
declare function reviewAnchorIndex<TPage extends {
|
|
2461
|
+
readonly index: number;
|
|
2462
|
+
readonly contentBox: {
|
|
2463
|
+
readonly y: number;
|
|
2464
|
+
};
|
|
2465
|
+
}>(layout: {
|
|
2466
|
+
readonly pages: readonly TPage[];
|
|
2467
|
+
}, paragraphFragments: (page: TPage) => readonly {
|
|
2468
|
+
readonly paragraphId: string;
|
|
2469
|
+
readonly box: {
|
|
2470
|
+
readonly y: number;
|
|
2471
|
+
};
|
|
2472
|
+
readonly lines?: readonly {
|
|
2473
|
+
readonly range: {
|
|
2474
|
+
readonly end: number;
|
|
2475
|
+
};
|
|
2476
|
+
readonly box: {
|
|
2477
|
+
readonly y: number;
|
|
2478
|
+
};
|
|
2479
|
+
/** Present on a real line; a merged one carries spans from more than one paragraph. */
|
|
2480
|
+
readonly spans?: readonly {
|
|
2481
|
+
readonly range: {
|
|
2482
|
+
readonly paragraphId: string;
|
|
2483
|
+
readonly end: number;
|
|
2484
|
+
};
|
|
2485
|
+
}[];
|
|
2486
|
+
}[];
|
|
2487
|
+
}[]): Map<string, ReviewParagraphAnchor>;
|
|
2488
|
+
/**
|
|
2489
|
+
* Where a card belongs beside the page, from LAYOUT RECORDS.
|
|
2490
|
+
*
|
|
2491
|
+
* The one question the tree cannot answer, and the one a surface must not answer for itself:
|
|
2492
|
+
* measuring painted DOM puts the sidebar a repaint behind the document and breaks outright
|
|
2493
|
+
* while pagination is in flight.
|
|
2494
|
+
*
|
|
2495
|
+
* Returns null when the item has no resolvable range, or when its paragraph is not in this
|
|
2496
|
+
* layout — a comment anchored in a header belongs to a story the body layout never saw.
|
|
2497
|
+
*/
|
|
2498
|
+
declare function reviewItemGeometry(item: ReviewItem, index: ReadonlyMap<string, ReviewParagraphAnchor>): {
|
|
2499
|
+
readonly pageIndex: number;
|
|
2500
|
+
readonly y: number;
|
|
2501
|
+
} | null;
|
|
2502
|
+
|
|
2200
2503
|
/** The visible band of the document, in layout units. */
|
|
2201
2504
|
interface ViewportWindow {
|
|
2202
2505
|
/** Distance from the top of the document to the top of the visible area, in layout units. */
|
|
@@ -2226,100 +2529,6 @@ interface MaterializationInput {
|
|
|
2226
2529
|
*/
|
|
2227
2530
|
declare function pagesToMaterialize(input: MaterializationInput): Set<number>;
|
|
2228
2531
|
|
|
2229
|
-
/**
|
|
2230
|
-
* What a batch of commits can affect.
|
|
2231
|
-
*
|
|
2232
|
-
* `paragraphIds` is the set the commits touched directly. What that set MEANS depends on
|
|
2233
|
-
* `impact`: for a local impact it bounds the work, for a structural one it only says where
|
|
2234
|
-
* the reflow starts.
|
|
2235
|
-
*/
|
|
2236
|
-
interface LayoutScope {
|
|
2237
|
-
readonly impact: ImpactClass;
|
|
2238
|
-
/** Node ids touched directly by the coalesced commits. */
|
|
2239
|
-
readonly paragraphIds: ReadonlySet<string>;
|
|
2240
|
-
/** Ids the commits created — no previous layout exists for these. */
|
|
2241
|
-
readonly created: ReadonlySet<string>;
|
|
2242
|
-
/** Ids the commits removed — any retained layout for these must be released. */
|
|
2243
|
-
readonly deleted: ReadonlySet<string>;
|
|
2244
|
-
/** Cache keys the commits invalidated (styles, numbering, fonts). */
|
|
2245
|
-
readonly dependencyKeys: ReadonlySet<string>;
|
|
2246
|
-
/** True when the block SEQUENCE changed, so ids alone cannot bound the reflow. */
|
|
2247
|
-
readonly structural: boolean;
|
|
2248
|
-
/** The revision this scope describes — the layout result must carry the same one. */
|
|
2249
|
-
readonly revision: number;
|
|
2250
|
-
}
|
|
2251
|
-
/** How the scheduler produces layouts and when it publishes them. */
|
|
2252
|
-
interface LayoutSchedulerOptions {
|
|
2253
|
-
/**
|
|
2254
|
-
* Produce a complete layout for the CURRENT model state.
|
|
2255
|
-
*
|
|
2256
|
-
* Given the accumulated scope so an incremental implementation can use it. It must tag
|
|
2257
|
-
* the result with the revision it actually read, which is what makes staleness detectable
|
|
2258
|
-
* rather than assumed.
|
|
2259
|
-
*/
|
|
2260
|
-
readonly run: (scope: LayoutScope) => SemanticLayout;
|
|
2261
|
-
/** The model's revision right now. Read at publish time, never cached. */
|
|
2262
|
-
readonly currentRevision: () => number;
|
|
2263
|
-
/** Called with a layout that is known current. Never called with a stale one. */
|
|
2264
|
-
readonly publish: (layout: SemanticLayout, scope: LayoutScope) => void;
|
|
2265
|
-
/**
|
|
2266
|
-
* Defer work to a later turn, returning a canceller.
|
|
2267
|
-
*
|
|
2268
|
-
* Injected rather than assumed: the browser wants an animation frame, tests want to step
|
|
2269
|
-
* the queue by hand, and a server has neither.
|
|
2270
|
-
*/
|
|
2271
|
-
readonly schedule?: (run: () => void) => () => void;
|
|
2272
|
-
/**
|
|
2273
|
-
* Run a layout in slices instead of in one call (task 9.5).
|
|
2274
|
-
*
|
|
2275
|
-
* Optional: without it `run` is used and completes in one turn, which is right for a
|
|
2276
|
-
* document small enough that slicing costs more than it saves.
|
|
2277
|
-
*/
|
|
2278
|
-
readonly runCooperatively?: (scope: LayoutScope) => CooperativeRun;
|
|
2279
|
-
}
|
|
2280
|
-
interface CooperativeRun {
|
|
2281
|
-
/**
|
|
2282
|
-
* Advance the work. Returns the finished layout, or null to be called again.
|
|
2283
|
-
*
|
|
2284
|
-
* Split so a global relayout does not hold the main thread for the whole document: the
|
|
2285
|
-
* scheduler yields between slices and a newer revision can cancel the run mid-flight
|
|
2286
|
-
* rather than the user waiting for work whose result is already stale.
|
|
2287
|
-
*/
|
|
2288
|
-
step(): SemanticLayout | null;
|
|
2289
|
-
/** Abandon the run. Nothing partial is ever published. */
|
|
2290
|
-
cancel(): void;
|
|
2291
|
-
}
|
|
2292
|
-
/**
|
|
2293
|
-
* Coalesces commits into layout passes.
|
|
2294
|
-
*
|
|
2295
|
-
* A keystroke is one commit but must not be one full layout pass, so changes accumulate into a
|
|
2296
|
-
* scope and are laid out together. Every published layout is tagged with the revision it actually
|
|
2297
|
-
* read, which is what makes a stale result detectable rather than merely late.
|
|
2298
|
-
*/
|
|
2299
|
-
interface LayoutScheduler {
|
|
2300
|
-
/** Record a commit. Coalesces with anything already pending. */
|
|
2301
|
-
notify(change: TreeModelChange): void;
|
|
2302
|
-
/** Request a relayout for a reason the store did not report (page size, zoom, fonts). */
|
|
2303
|
-
invalidateAll(revision: number, reason?: string): void;
|
|
2304
|
-
/** Run any pending work now, synchronously. Returns whether a layout was published. */
|
|
2305
|
-
flush(): boolean;
|
|
2306
|
-
/** The scope that would be used if `flush` ran now, or null when nothing is pending. */
|
|
2307
|
-
pending(): LayoutScope | null;
|
|
2308
|
-
/** Drop pending work without publishing — for teardown. */
|
|
2309
|
-
cancel(): void;
|
|
2310
|
-
/** How many layouts were discarded for being stale. Diagnostics, and a test hook. */
|
|
2311
|
-
readonly staleDiscards: number;
|
|
2312
|
-
/** How many cooperative runs were abandoned because a newer revision arrived. */
|
|
2313
|
-
readonly cancelledRuns: number;
|
|
2314
|
-
}
|
|
2315
|
-
/**
|
|
2316
|
-
* Build the scheduler that turns a stream of commits into coalesced layout passes.
|
|
2317
|
-
*
|
|
2318
|
-
* Keystrokes arrive faster than a document can be laid out, so changes accumulate into one scope
|
|
2319
|
-
* and are laid out together rather than once per commit.
|
|
2320
|
-
*/
|
|
2321
|
-
declare function createLayoutScheduler(options: LayoutSchedulerOptions): LayoutScheduler;
|
|
2322
|
-
|
|
2323
2532
|
/** Far above anything Word authors (its UI caps at 63) while keeping allocation bounded. */
|
|
2324
2533
|
declare const MAX_TABLE_COLUMNS = 1024;
|
|
2325
2534
|
|
|
@@ -2588,4 +2797,4 @@ declare class TablePaginationError extends Error {
|
|
|
2588
2797
|
constructor(code: TablePaginationErrorCode, message: string);
|
|
2589
2798
|
}
|
|
2590
2799
|
|
|
2591
|
-
export { AUTO_PREFERRED_WIDTH, type AbstractNumDefinition, type BidiEmbeddingLevels, BlockFragmentRecord, CELL_PAD, COMPOUND_BORDER_MIN_GAP_PT, COMPOUND_BORDER_MIN_STROKE_PT, type CanvasMeasurerOptions, type CanvasTextContext, type CanvasTextMetrics, type CascadedParagraphFormatting, CellBorderBox, type CellMarginsPt, type CellVerticalAlign, type CompoundBorderMetrics, type ContentControlFragmentRecord, DEFAULT_CANVAS_FONT_STACK, DEFAULT_CELL_MARGINS, EMPTY_NUMBERING_INDEX, FieldLinkProjector, FixedPoint, FixedPointRoundingMode, FontByteValidator, type FontSlot, GRAPHEME_SEGMENTER_LOCALE, type GraphemeBoundary, type GraphemeSegment, type GraphemeWordSegmentRecord, HARFBUZZ_SHAPING_LIBRARY, type HarfBuzzFaceCacheEvent, type HarfBuzzOutlineCacheEvent, type HarfBuzzShapeCacheEvent, HarfBuzzShapingError, type HarfBuzzShapingErrorCode, type HarfBuzzTextShaper, type HarfBuzzTextShaperInstrumentation, type HarfBuzzTextShaperOptions, type HeaderFooterVariantName, HyperlinkProjector, type KeyedRange, LayoutBox, type LayoutCacheStats, type LayoutScheduler, type LayoutSchedulerOptions, type LayoutScope, type LayoutSession, type LayoutSessionStats, type LevelOverride, type ListCounterAdvance, type ListCounterState, type ListMarkerAlign, type ListSuffix, MAX_EACH_PAGE_MARK_CANDIDATES, MAX_LVL_OVERRIDES, MAX_LVL_TEXT_LENGTH, MAX_MARKER_TEXT_LENGTH, MAX_NOTES_LAID_OUT, MAX_NOTE_FRAGMENTS, MAX_NOTE_OVERFLOW_PAGES, MAX_NOTE_REFLOW_ATTEMPTS, MAX_NUMBERING_DEFINITIONS, MAX_STYLE_BASED_ON_DEPTH, MAX_STYLE_DEFINITIONS, MAX_TABLE_COLUMNS, MAX_TABLE_NESTING, MAX_TABLE_ROW_FRAGMENTS, MAX_TABLE_ROW_HEIGHT_PT, type MaterializationInput, type NoteDisplayMark, type NoteLayoutFallbackReason, type NoteMarkContext, type NotePaginationFallbackReason, type NoteReferenceSite, type NoteSeparatorLayout, type NoteSeparatorRuleStyle, type NoteStoryDrawings, type NoteStoryLayout, type NotesAttachResult, type NotesLayoutInput, type NumDefinition, type NumberingIndex, type NumberingLevel, type NumberingLevelIndent, type PageFurniture, PageGeometry, PageRecord, type PageRefIndex, ParagraphBorderEdge, ParagraphBorders, ParagraphFragmentRecord, type ParagraphKeyInputs, type ParagraphLayoutCache, type ParagraphLayoutCacheOptions, type ParagraphLayoutInputs, ParagraphLineSpacing, ParagraphSpacing, type PreferredWidth, type PreferredWidthType, type ResolvedListItem, ResolvedRunStyle, type ResolvedSurfaceMeasurer, ResolvedTabStops, RevisionDisplayMode, type ScriptItem, SectionColumns, SelectionRect, SemanticLayout, type SemanticLayoutOptions, SemanticPosition, SemanticSelection, type SemanticTableCell, type SemanticTableRow, type SemanticTableStructure, ShapedRun, type StyleCascadeTable, type StyleDefinition, StyleSpanRecord, type TableAlignment, TableBorderBox, TableBorderSide, type TableCellStyleFormatting, TablePaginationError, type TablePaginationErrorCode, type TableRowHeight, type TableRowHeightRule, TextDirection, TextMeasurer, TextShaper, UnsupportedScriptError, VersionedShapingLibrary, type ViewportWindow, WORD_SEGMENTER_LOCALE, type WordBoundary, type WordBoundaryResolverDeps, type WordSegment, attachNotesToLayout, boundedFallbackWordSegments, buildNumberingIndex, buildPageRefIndex, buildStyleCascadeTable, cascadeParagraphFormatting, cascadeRunProperties, cascadedBottomBorder, clampListValue, computeDoubleBorderMetricsPt, computeFootnoteReserves, contentControlBoundaries, createBoundedFallbackWordBoundary, createDefaultWordBoundary, createFixedMeasurer, createHarfBuzzTextShaper, createIntlWordBoundary, createLayoutScheduler, createLayoutSession, createListCounterState, createParagraphLayoutCache, defaultNoteSeparatorRuleStyle, deriveNoteDisplayMarks, deriveNoteDisplayMarksResolved, documentOrder, effectiveBorderSide, emptyTocPlaceholderParagraphIds, emptyTocSuppressedResultParagraphIds, expandLvlText, filterRefsOnPage, findSeparatorNote, formatDecimal, formatDecimalZero, formatLowerLetter, formatLowerRoman, formatNumFmt, formatPageNumber, formatUpperLetter, formatUpperRoman, fragmentOwnsAtomOffset, graphemeBoundaryEpoch, graphemeCount, graphemeOffsetToUtf16, harfBuzzFontValidator, initializeHarfBuzz, intlGraphemeBoundary, isCanvasMeasurementAvailable, isCumulativeGeometryTrustedFromLineOrigin, isGeometryTrustedCaretOffset, isHarfBuzzInitialized, isIntlSegmenterAvailable, isIntlWordSegmenterAvailable, isMarkerOnlySeparatorNote, isValidStyleId, isWholeGraphemeHorizontalBoundary, itemizeScriptFontSlots, keyedRangeRects, layoutHeaderFooterStory, layoutNoteById, layoutNoteSeparator, layoutNoteStory, layoutSemanticDocument, listMarkerBox, mergeListIndent, normalNotesOf, noteDisplayMarkMap, noteLineIdPrefix, noteMarkKey, noteSeparatorAreaBox, noteStoryBlocks, pagesToMaterialize, paragraphLayoutKey, paragraphMarkDeleted, paragraphShading, paragraphShadingBox, positionPastDeletion, projectedNoteMarkText, provisionalNoteMarks, readNumPr, readTableStructure, resetGraphemeBoundary, resolveDefaultSurfaceMeasurer, resolveDefaultWordBoundary, resolveNumberingLevel, resolveOoxmlShadingFill, resolveParagraphLayoutInputs, resolveStoryListItems, resolveStrictHexFill, revisionRemovesParagraph, roundFontUnitToFixedPoint, segmentGraphemes, segmentWords, selectionRects, semanticHorizontalBoundaries, setGraphemeBoundary, setHarfBuzzWasmUrl, shadingFillFromElement, shapedHorizontalBoundaries, storyBlocks, syntheticSeparatorBox, tableOriginX, tocFieldChromeParagraphIds, tryCreateCanvasMeasurer, utf16OffsetToGrapheme, walkStoryParagraphs, withNumberingStyleLinks, withResolvedListItems, wordBoundary, wordSegmentsToGraphemeRecords };
|
|
2800
|
+
export { AUTO_PREFERRED_WIDTH, type AbstractNumDefinition, type BidiEmbeddingLevels, BlockFragmentRecord, CELL_PAD, COMPOUND_BORDER_MIN_GAP_PT, COMPOUND_BORDER_MIN_STROKE_PT, type CanvasMeasurerOptions, type CanvasTextContext, type CanvasTextMetrics, type CascadedParagraphFormatting, CellBorderBox, type CellMarginsPt, type CellVerticalAlign, type CompoundBorderMetrics, ContentControlBoundaryRecord$1 as ContentControlBoundaryRecord, type ContentControlFragmentRecord, ContentControlLock, DEFAULT_CANVAS_FONT_STACK, DEFAULT_CELL_MARGINS, EMPTY_NUMBERING_INDEX, FieldLinkProjector, FixedPoint, FixedPointRoundingMode, FontByteValidator, type FontSlot, GRAPHEME_SEGMENTER_LOCALE, type GraphemeBoundary, type GraphemeSegment, type GraphemeWordSegmentRecord, HARFBUZZ_SHAPING_LIBRARY, type HarfBuzzFaceCacheEvent, type HarfBuzzOutlineCacheEvent, type HarfBuzzShapeCacheEvent, HarfBuzzShapingError, type HarfBuzzShapingErrorCode, type HarfBuzzTextShaper, type HarfBuzzTextShaperInstrumentation, type HarfBuzzTextShaperOptions, type HeaderFooterVariantName, HyperlinkProjector, type KeyedRange, LayoutBox, type LayoutCacheStats, type LayoutScheduler, type LayoutSchedulerOptions, type LayoutScope, type LayoutSession, type LayoutSessionStats, type LevelOverride, LineRecord, type ListCounterAdvance, type ListCounterState, type ListMarkerAlign, type ListSuffix, MAX_EACH_PAGE_MARK_CANDIDATES, MAX_LVL_OVERRIDES, MAX_LVL_TEXT_LENGTH, MAX_MARKER_TEXT_LENGTH, MAX_NOTES_LAID_OUT, MAX_NOTE_FRAGMENTS, MAX_NOTE_OVERFLOW_PAGES, MAX_NOTE_REFLOW_ATTEMPTS, MAX_NUMBERING_DEFINITIONS, MAX_STYLE_BASED_ON_DEPTH, MAX_STYLE_DEFINITIONS, MAX_TABLE_COLUMNS, MAX_TABLE_NESTING, MAX_TABLE_ROW_FRAGMENTS, MAX_TABLE_ROW_HEIGHT_PT, type MaterializationInput, type NoteDisplayMark, type NoteLayoutFallbackReason, type NoteMarkContext, type NotePaginationFallbackReason, type NoteReferenceSite, type NoteSeparatorLayout, type NoteSeparatorRuleStyle, type NoteStoryDrawings, type NoteStoryLayout, type NotesAttachResult, type NotesLayoutInput, type NumDefinition, type NumberingIndex, type NumberingLevel, type NumberingLevelIndent, type PageFurniture, PageGeometry, PageRecord, type PageRefIndex, ParagraphBorderEdge, ParagraphBorders, ParagraphFragmentRecord, type ParagraphKeyInputs, type ParagraphLayoutCache, type ParagraphLayoutCacheOptions, type ParagraphLayoutInputs, ParagraphLineSpacing, ParagraphSpacing, type PreferredWidth, type PreferredWidthType, type ResolvedListItem, ResolvedRunStyle, type ResolvedSurfaceMeasurer, ResolvedTabStops, ReviewItem, type ReviewParagraphAnchor, RevisionDisplayMode, type ScriptItem, SectionColumns, SelectionRect, SemanticLayout, type SemanticLayoutOptions, SemanticPosition, SemanticSelection, type SemanticTableCell, type SemanticTableRow, type SemanticTableStructure, ShapedRun, type StyleCascadeTable, type StyleDefinition, StyleSpanRecord, type TableAlignment, TableBorderBox, TableBorderSide, type TableCellStyleFormatting, TablePaginationError, type TablePaginationErrorCode, type TableRowHeight, type TableRowHeightRule, TextDirection, TextMeasurer, TextShaper, UnsupportedScriptError, VersionedShapingLibrary, type ViewportWindow, WORD_SEGMENTER_LOCALE, type WordBoundary, type WordBoundaryResolverDeps, type WordSegment, anchorLineY, attachNotesToLayout, boundedFallbackWordSegments, buildNumberingIndex, buildPageRefIndex, buildStyleCascadeTable, cascadeParagraphFormatting, cascadeRunProperties, cascadedBottomBorder, clampListValue, computeDoubleBorderMetricsPt, computeFootnoteReserves, contentControlBoundaries, contentControlHoldingParagraph, contentControlRecordsInPart, contentControlsOfLayout, createBoundedFallbackWordBoundary, createDefaultWordBoundary, createFixedMeasurer, createHarfBuzzTextShaper, createIntlWordBoundary, createLayoutScheduler, createLayoutSession, createListCounterState, createParagraphLayoutCache, defaultNoteSeparatorRuleStyle, deriveNoteDisplayMarks, deriveNoteDisplayMarksResolved, documentOrder, effectiveBorderSide, effectiveContentControlLock, emptyTocPlaceholderParagraphIds, emptyTocSuppressedResultParagraphIds, everyStoryOrder, expandLvlText, filterRefsOnPage, findSeparatorNote, formatDecimal, formatDecimalZero, formatLowerLetter, formatLowerRoman, formatNumFmt, formatPageNumber, formatUpperLetter, formatUpperRoman, fragmentOwnsAtomOffset, fragmentsOfParagraph, graphemeBoundaryEpoch, graphemeCount, graphemeOffsetToUtf16, harfBuzzFontValidator, initializeHarfBuzz, intlGraphemeBoundary, isCanvasMeasurementAvailable, isCumulativeGeometryTrustedFromLineOrigin, isGeometryTrustedCaretOffset, isHarfBuzzInitialized, isIntlSegmenterAvailable, isIntlWordSegmenterAvailable, isMarkerOnlySeparatorNote, isValidStyleId, isWholeGraphemeHorizontalBoundary, itemizeScriptFontSlots, keyedRangeRects, layoutHeaderFooterStory, layoutNoteById, layoutNoteSeparator, layoutNoteStory, layoutSemanticDocument, lineAtPosition, linesOf, listMarkerBox, mergeListIndent, normalNotesOf, noteDisplayMarkMap, noteLineIdPrefix, noteMarkKey, noteSeparatorAreaBox, noteStoryBlocks, pagesToMaterialize, paragraphFragmentsOf, paragraphFragmentsOfBlocks, paragraphLayoutKey, paragraphMarkDeleted, paragraphShading, paragraphShadingBox, positionPastDeletion, projectedNoteMarkText, provisionalNoteMarks, readNumPr, readTableStructure, resetGraphemeBoundary, resolveDefaultSurfaceMeasurer, resolveDefaultWordBoundary, resolveNumberingLevel, resolveOoxmlShadingFill, resolveParagraphLayoutInputs, resolveStoryListItems, resolveStrictHexFill, reviewAnchorIndex, reviewItemGeometry, revisionRemovesParagraph, roundFontUnitToFixedPoint, segmentGraphemes, segmentWords, selectionRects, semanticHorizontalBoundaries, setGraphemeBoundary, setHarfBuzzWasmUrl, sha256FontBytes, shadingFillFromElement, shapedHorizontalBoundaries, storyBlocks, syntheticSeparatorBox, tableOriginX, tocFieldChromeParagraphIds, tryCreateCanvasMeasurer, unionLayoutBoxes, utf16OffsetToGrapheme, walkStoryParagraphs, withNumberingStyleLinks, withResolvedListItems, wordBoundary, wordSegmentsToGraphemeRecords };
|