@docx-editor.dev/core 2.21.1 → 2.23.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.
Files changed (108) hide show
  1. package/README.md +11 -5
  2. package/dist/automation.cjs +1 -1
  3. package/dist/automation.d.ts +13 -12
  4. package/dist/automation.js +1 -1
  5. package/dist/binding.cjs +1 -1
  6. package/dist/binding.d.ts +11 -10
  7. package/dist/binding.js +1 -1
  8. package/dist/chunk-4OAXZNBU.js +5 -0
  9. package/dist/chunk-6745I4XF.cjs +20 -0
  10. package/dist/chunk-6KA3L3FR.cjs +11 -0
  11. package/dist/chunk-6QS5WL63.js +1 -0
  12. package/dist/{chunk-E5OUYRNM.cjs → chunk-BUDXZ7T2.cjs} +5 -5
  13. package/dist/chunk-DYRXA5UJ.cjs +2 -0
  14. package/dist/chunk-DZOGUV7O.js +1 -0
  15. package/dist/chunk-EHT4LKKZ.cjs +1 -0
  16. package/dist/chunk-F5LAOPAD.js +20 -0
  17. package/dist/chunk-FWX535CS.cjs +1 -0
  18. package/dist/chunk-GRVRQBKU.js +1 -0
  19. package/dist/chunk-JN62FLHE.cjs +4 -0
  20. package/dist/{chunk-BF2TOG2V.js → chunk-KRBBWATQ.js} +1 -1
  21. package/dist/chunk-KV5HFE23.cjs +2 -0
  22. package/dist/{chunk-T5B4NMKF.cjs → chunk-PCPBDYEL.cjs} +1 -1
  23. package/dist/chunk-Q4RDWB3U.cjs +18 -0
  24. package/dist/{chunk-4TYA4RLP.cjs → chunk-QK23BSRK.cjs} +1 -1
  25. package/dist/chunk-QTFAXWVI.cjs +1 -0
  26. package/dist/chunk-RLO64PHP.cjs +1 -0
  27. package/dist/chunk-T7RGKBCE.cjs +5 -0
  28. package/dist/{chunk-FPDIJ4RF.js → chunk-UMBHUW6R.js} +1 -1
  29. package/dist/chunk-VE6H5EJA.js +5 -0
  30. package/dist/chunk-WHG23WNI.js +1 -0
  31. package/dist/chunk-XBYZTDF7.js +4 -0
  32. package/dist/chunk-XRBPZCNK.js +11 -0
  33. package/dist/chunk-Y5JCIWTF.js +2 -0
  34. package/dist/chunk-ZA6HEWUM.js +2 -0
  35. package/dist/chunk-ZCRSPN4Q.js +18 -0
  36. package/dist/collaboration/replication.cjs +1 -1
  37. package/dist/collaboration/replication.d.ts +6 -5
  38. package/dist/collaboration/replication.js +1 -1
  39. package/dist/collaboration.d.ts +7 -6
  40. package/dist/contracts/document.d.ts +4 -3
  41. package/dist/contracts/editor.d.ts +9 -9
  42. package/dist/contracts/interaction.d.ts +2 -1
  43. package/dist/contracts/modules.d.ts +9 -8
  44. package/dist/contracts/types.d.ts +1 -1
  45. package/dist/{custom-node-writes-CncR6KfC.d.ts → custom-node-writes-77rvPW2-.d.ts} +4 -3
  46. package/dist/{document-protection-DM6mA8Rf.d.ts → document-protection-CYIjO-li.d.ts} +3 -2
  47. package/dist/{editor-BRh7GuZF.d.ts → editor-DhUQsWWH.d.ts} +179 -52
  48. package/dist/editor.cjs +1 -1
  49. package/dist/editor.css +1 -1
  50. package/dist/editor.d.ts +181 -28
  51. package/dist/editor.js +1 -1
  52. package/dist/export.cjs +2 -2
  53. package/dist/export.d.ts +36 -18
  54. package/dist/export.js +2 -2
  55. package/dist/{failure-DNNmwsgD.d.ts → failure-BIPVQbRm.d.ts} +2 -1
  56. package/dist/{font-resolver-DwuQYj3P.d.ts → font-resolver-BwoHFBlr.d.ts} +3 -2
  57. package/dist/{headless-document-view-C3fc_jV0.d.ts → headless-document-view-Cc3fFWhv.d.ts} +4 -3
  58. package/dist/{image-resources-DxF-SN_8.d.ts → image-resources-DkuzBnTM.d.ts} +3 -2
  59. package/dist/{index-3pNnG4z4.d.ts → index-BYaCkGKO.d.ts} +179 -26
  60. package/dist/index.cjs +1 -1
  61. package/dist/index.d.ts +18 -18
  62. package/dist/index.js +1 -1
  63. package/dist/{layout-shaping-_GGjhhVc.d.ts → layout-shaping-DpWQG26a.d.ts} +7 -3
  64. package/dist/layout.cjs +1 -1
  65. package/dist/layout.d.ts +473 -64
  66. package/dist/layout.js +1 -1
  67. package/dist/{note-properties-CjT31AuP.d.ts → note-properties-DMfKK3QU.d.ts} +3 -2
  68. package/dist/{omml-equation-Bk3OP1fv.d.ts → omml-equation-BY7OdfGY.d.ts} +3 -2
  69. package/dist/output.cjs +1 -1
  70. package/dist/output.d.ts +9 -8
  71. package/dist/output.js +1 -1
  72. package/dist/{protocol-CrbTIW2Z.d.ts → protocol-CPAakntQ.d.ts} +4 -3
  73. package/dist/{review-paragraph-order-D3KZohIL.d.ts → review-paragraph-order-B0BP_wJP.d.ts} +1 -1
  74. package/dist/{revision-projection-kVd7p6Wd.d.ts → revision-projection-CVJeA2jp.d.ts} +3 -2
  75. package/dist/{semantic-cell-selection-CkSsZHDL.d.ts → semantic-cell-selection-B8GF_H2e.d.ts} +10 -6
  76. package/dist/{semantic-interaction-Z2Xa68U5.d.ts → semantic-interaction-DQjtIruQ.d.ts} +3 -2
  77. package/dist/{semantic-paint-BHKprI9P.d.ts → semantic-paint-DoPl85nR.d.ts} +4 -3
  78. package/dist/{semantic-records-StH-AnHK.d.ts → semantic-records-DB0VgWsr.d.ts} +1125 -1039
  79. package/dist/store.cjs +1 -1
  80. package/dist/store.d.ts +17 -16
  81. package/dist/store.js +1 -1
  82. package/dist/{tree-package-fragment-CpEV1gl3.d.ts → tree-package-fragment-BIyGh6L8.d.ts} +4 -3
  83. package/dist/{tree-session-contract-CTT9nM7Z.d.ts → tree-session-contract-CHcCnz3W.d.ts} +7 -6
  84. package/dist/{types-barrel-PwcfEkaX.d.ts → types-barrel-DN_-gaRX.d.ts} +72 -5
  85. package/package.json +3 -3
  86. package/dist/chunk-25OQBAKA.js +0 -2
  87. package/dist/chunk-3B3DQMSL.js +0 -11
  88. package/dist/chunk-3P3DNJYM.js +0 -5
  89. package/dist/chunk-3PA64KPK.js +0 -5
  90. package/dist/chunk-7N77EN2Z.cjs +0 -2
  91. package/dist/chunk-AGWWNVIJ.cjs +0 -1
  92. package/dist/chunk-DFTVN25X.cjs +0 -5
  93. package/dist/chunk-DGONGMAV.js +0 -2
  94. package/dist/chunk-DZYKU2HG.js +0 -1
  95. package/dist/chunk-F4H3LC6M.cjs +0 -2
  96. package/dist/chunk-FGBADUSK.cjs +0 -1
  97. package/dist/chunk-IUTTOBQW.cjs +0 -20
  98. package/dist/chunk-IYCXQAFT.cjs +0 -4
  99. package/dist/chunk-JL3SI5SZ.js +0 -18
  100. package/dist/chunk-OFWUHH52.js +0 -20
  101. package/dist/chunk-OKY6JRJL.js +0 -4
  102. package/dist/chunk-P24FHMQW.cjs +0 -1
  103. package/dist/chunk-QBKAOSVF.cjs +0 -18
  104. package/dist/chunk-RA2TDTEQ.cjs +0 -1
  105. package/dist/chunk-U5GUJKTS.js +0 -1
  106. package/dist/chunk-VP7SDFCM.js +0 -1
  107. package/dist/chunk-XRYSPKKC.js +0 -1
  108. package/dist/chunk-ZZRCVDQU.cjs +0 -11
@@ -1324,6 +1324,8 @@ interface LegacyGraphicProjection {
1324
1324
  * @public
1325
1325
  */
1326
1326
  interface DrawingImageEffects {
1327
+ /** Fixed alpha multiplier for raster painting; omitted means opaque. */
1328
+ readonly opacity?: number;
1327
1329
  readonly grayscale: boolean;
1328
1330
  readonly brightness: number;
1329
1331
  readonly contrast: number;
@@ -1481,6 +1483,12 @@ interface VectorShapeComponent {
1481
1483
  readonly strokeHex: string | null;
1482
1484
  readonly strokeAlpha: number;
1483
1485
  readonly strokeWidthEmu: number;
1486
+ /**
1487
+ * The outline sits inside the closed geometry (`a:ln algn="in"`): painters draw it at twice
1488
+ * its width clipped to the path, so the authored width stays inside the shape and adds no
1489
+ * reach past the extent. Set only for a closed outline with area.
1490
+ */
1491
+ readonly strokeInset?: boolean;
1484
1492
  }
1485
1493
  /**
1486
1494
  * The story carried by a `wps:wsp` text box (`wps:txbx` → `w:txbxContent`).
@@ -1513,6 +1521,33 @@ interface TextboxStoryProjection {
1513
1521
  readonly strokeWidthEmu: number;
1514
1522
  }
1515
1523
 
1524
+ /** One picture painted as a member of a drawing group. */
1525
+ interface GroupPictureProjection {
1526
+ readonly embeddedRelationshipId: string | null;
1527
+ readonly linkedRelationshipId: string | null;
1528
+ readonly crop: Readonly<{
1529
+ left: number;
1530
+ top: number;
1531
+ right: number;
1532
+ bottom: number;
1533
+ }>;
1534
+ /** The picture's rectangle inside the drawing extent, in extent EMU. */
1535
+ readonly frameEmu: Readonly<{
1536
+ x: number;
1537
+ y: number;
1538
+ cx: number;
1539
+ cy: number;
1540
+ }>;
1541
+ /** Canonical node id of the `pic:pic` member. The vector projection skips it. */
1542
+ readonly memberNodeId: string;
1543
+ /**
1544
+ * Whether the group is the chosen branch of a run-level `mc:AlternateContent`. Layout then
1545
+ * drops the whole group when the picture resource fails, as the projection drops other
1546
+ * MC payloads it cannot draw.
1547
+ */
1548
+ readonly alternateContent: boolean;
1549
+ }
1550
+
1516
1551
  /**
1517
1552
  * Whether a drawing sits in the text flow or is positioned against a frame.
1518
1553
  *
@@ -1623,6 +1658,8 @@ interface DrawingProjection {
1623
1658
  }> | null;
1624
1659
  readonly picture: PictureProjection | null;
1625
1660
  readonly vectorShape: VectorShapeProjection | null;
1661
+ /** The picture member of a `wpg:wgp` group; `picture` stays null for a group. */
1662
+ readonly groupPicture: GroupPictureProjection | null;
1626
1663
  readonly textboxStory: TextboxStoryProjection | null;
1627
1664
  /** Read-only preview of the supported native VML subset; the canonical XML is untouched. */
1628
1665
  readonly legacyGraphic?: LegacyGraphicProjection;
@@ -1630,8 +1667,14 @@ interface DrawingProjection {
1630
1667
  readonly effects: DrawingImageEffects;
1631
1668
  readonly compatibilityBranchNodeId: string | null;
1632
1669
  readonly diagnostics: readonly DrawingDiagnostic[];
1670
+ /** Layout-only wrap area of an MC payload that cannot paint (`wrapFootprintProjection`). */
1671
+ readonly footprintOnly?: true;
1633
1672
  }
1634
1673
  interface DrawingAccessibility {
1674
+ /**
1675
+ * The record takes part in layout only, for example the wrap area of a payload that cannot
1676
+ * paint. Outputs must not paint, hit-test, select, link, or export it.
1677
+ */
1635
1678
  readonly hidden: boolean;
1636
1679
  readonly decorative: boolean;
1637
1680
  readonly label: string | null;
@@ -2433,6 +2476,8 @@ type TableBorderStyle = (typeof TABLE_BORDER_STYLES)[number];
2433
2476
  /** Which paragraph-level reads the selection disagrees about. @public */
2434
2477
  interface ParagraphDisagreements {
2435
2478
  readonly alignment: boolean;
2479
+ /** The selection mixes left-to-right and right-to-left paragraphs. */
2480
+ readonly direction: boolean;
2436
2481
  readonly spaceBeforePt: boolean;
2437
2482
  readonly spaceAfterPt: boolean;
2438
2483
  readonly lineSpacing: boolean;
@@ -2463,6 +2508,11 @@ interface ParagraphFlags {
2463
2508
  */
2464
2509
  interface ParagraphFormatCommand {
2465
2510
  alignment?: 'left' | 'center' | 'right' | 'justify';
2511
+ /**
2512
+ * Paragraph base direction (`w:bidi`), Word's Direction setting. `ltr` writes an explicit
2513
+ * off value where a style would otherwise make the paragraph right-to-left.
2514
+ */
2515
+ direction?: 'ltr' | 'rtl';
2466
2516
  spaceBeforePt?: number | null;
2467
2517
  spaceAfterPt?: number | null;
2468
2518
  lineSpacing?: {
@@ -2649,8 +2699,16 @@ interface RunFormatting {
2649
2699
  readonly fontSizePt?: number;
2650
2700
  readonly superscript?: boolean;
2651
2701
  readonly subscript?: boolean;
2652
- /** Paragraph alignment at the selection. `both` is OOXML's spelling of justify. */
2702
+ /**
2703
+ * Paragraph alignment at the selection, as a PHYSICAL edge. `both` is OOXML's spelling of
2704
+ * justify. A right-to-left paragraph with no `w:jc` reads `right`.
2705
+ */
2653
2706
  readonly alignment?: 'left' | 'center' | 'right' | 'both';
2707
+ /**
2708
+ * Paragraph base direction at the selection (`w:bidi` through the style cascade). Absent
2709
+ * when the selection's paragraphs disagree; `disagrees.direction` then says so.
2710
+ */
2711
+ readonly direction?: 'ltr' | 'rtl';
2654
2712
  /** Paragraph style id (`w:pStyle`) at the selection. */
2655
2713
  readonly styleId?: string;
2656
2714
  /**
@@ -2725,9 +2783,12 @@ interface RunFormatting {
2725
2783
  * not know the cell.
2726
2784
  */
2727
2785
  interface IndentFormatting {
2728
- /** Left indent, signed. Negative pulls text into the margin, as Word allows. */
2786
+ /**
2787
+ * Leading indent (`w:left`), signed: the left one, or the right one in a right-to-left
2788
+ * paragraph. Negative pulls text into the margin, as Word allows.
2789
+ */
2729
2790
  readonly left: number;
2730
- /** Right indent, signed. */
2791
+ /** Trailing indent (`w:right`), signed: the right one, or the left one right to left. */
2731
2792
  readonly right: number;
2732
2793
  /** First-line offset from {@link left}, signed. Negative is a hanging indent. */
2733
2794
  readonly firstLine: number;
@@ -2737,6 +2798,11 @@ interface IndentFormatting {
2737
2798
  readonly right: boolean;
2738
2799
  readonly firstLine: boolean;
2739
2800
  };
2801
+ /**
2802
+ * The first selected paragraph reads right to left, so `left` and the first line sit on
2803
+ * the right margin. Absent for a left-to-right paragraph.
2804
+ */
2805
+ readonly rtl?: true;
2740
2806
  }
2741
2807
  /** A table: its rows, and the table style they resolve through. */
2742
2808
  interface Table {
@@ -3051,7 +3117,7 @@ interface TableBorderSpecInput {
3051
3117
  */
3052
3118
  declare const ACCEPTED_RUN_PROPERTIES: readonly ["rFonts", "sz", "szCs", "color", "b", "bCs", "i", "iCs", "u", "strike", "dstrike", "highlight", "vertAlign", "position", "caps", "smallCaps", "spacing", "w", "kern"];
3053
3119
  /** The accepted PARAGRAPH property boundary (design D8). */
3054
- declare const ACCEPTED_PARAGRAPH_PROPERTIES: readonly ["pStyle", "jc", "spacing", "ind", "tabs", "numPr", "keepNext", "keepLines", "widowControl", "pageBreakBefore", "contextualSpacing", "shd"];
3120
+ declare const ACCEPTED_PARAGRAPH_PROPERTIES: readonly ["pStyle", "jc", "spacing", "ind", "tabs", "numPr", "keepNext", "keepLines", "widowControl", "pageBreakBefore", "contextualSpacing", "shd", "bidi"];
3055
3121
  /**
3056
3122
  * One tab stop an op can author: where it sits, how it aligns, and what fills the gap.
3057
3123
  *
@@ -4061,4 +4127,5 @@ type TreeOpResult = {
4061
4127
  readonly detail?: string;
4062
4128
  };
4063
4129
 
4064
- export { type RevisionBatchSkipReason as $, type IndentFormatting as A, type Block as B, type CommentRecord as C, type DocxDocument as D, type ExecResult as E, type ParagraphFlags as F, type ParagraphTabStop as G, type HeaderFooterSet as H, type InsertableContentControlType as I, type RevisionType as J, type Section as K, type SectionProperties as L, type StyleDefinition as M, type Theme as N, type OoxmlPart as O, type Paragraph as P, type ThemeColorScheme as Q, type ReviewModelInput as R, type StyleDefinitions as S, type Table as T, type OoxmlNodeId as U, type OoxmlGenericElementNode as V, type TreeDocOp as W, type OoxmlPackageLimits as X, type OoxmlPackageRejection as Y, type RevisionBatchEntry as Z, type RevisionBatchResult as _, type ReviewItem as a, type CommentPosition as a$, type OoxmlProperty as a0, type OoxmlElement as a1, type OoxmlContentControlNode as a2, type OoxmlContentControlContentNode as a3, type DrawingProjection as a4, type TreeOpRejection as a5, type AutomationTableMutation as a6, type SourceCrop as a7, type DrawingKind as a8, type ImageWrapTarget as a9, type OoxmlSeparatorNode as aA, type DrawingTreeDocOp as aB, type ImpactClass as aC, type TreeDocColorValue as aD, IMAGE_WRAP_TARGETS as aE, TEXT_FORM_FORMATS as aF, type TableBorderStyle as aG, type DrawingAccessibility as aH, type DrawingImageEffects as aI, type DrawingTransform as aJ, type VectorShapeProjection as aK, type OoxmlDrawingNode as aL, type OoxmlInvariantResult as aM, type OoxmlFldCharNode as aN, type OoxmlFldSimpleNode as aO, type OoxmlInstrTextNode as aP, type OoxmlInvariantIssue as aQ, type TreeOpResult as aR, type RelationshipRecord as aS, type OoxmlHardBreakNode as aT, type OoxmlAttribute as aU, type CommentThreadState as aV, ACCEPTED_PARAGRAPH_PROPERTIES as aW, ACCEPTED_RUN_PROPERTIES as aX, CONTENT_CONTROL_ID_MAX as aY, CONTENT_CONTROL_PROPERTY_ORDER as aZ, type CommentAnchor as a_, type DrawingPositionInput as aa, type DrawingLocks as ab, type ParagraphFormatCommand as ac, type Watermark as ad, type Rect as ae, type SelectionPin as af, type Unsubscribe as ag, type DocxDocumentJSON as ah, type DrawingHorizontalReferenceFrame as ai, type DrawingVerticalReferenceFrame as aj, type FontDefinition as ak, type NumberingRef as al, type PageMargins as am, type ParagraphDisagreements as an, type Point as ao, type Run as ap, type TableCell as aq, type TableRow as ar, type RevisionAttributionInput as as, type OoxmlParagraphNode as at, type OoxmlNoteNode as au, type OoxmlContinuationSeparatorNode as av, type OoxmlEndnotesNode as aw, type OoxmlFootnotesNode as ax, type OoxmlNoteRefNode as ay, type OoxmlNoteReferenceNode as az, type ReviewRevisionItem as b, type OoxmlReadRejection as b$, type CommitTextFormFieldOp as b0, type ContentControlCheckbox as b1, type ContentControlCheckboxState as b2, type ContentControlDataBinding as b3, type ContentControlDateFormat as b4, type ContentControlEntry as b5, type ContentControlKind as b6, type ContentControlLevel as b7, type ContentControlListItem as b8, type ContentControlLock as b9, type OoxmlContentControlCalendarNode as bA, type OoxmlContentControlCheckboxNode as bB, type OoxmlContentControlCheckedNode as bC, type OoxmlContentControlCheckedStateNode as bD, type OoxmlContentControlComboBoxNode as bE, type OoxmlContentControlDataBindingNode as bF, type OoxmlContentControlDateFormatNode as bG, type OoxmlContentControlDateNode as bH, type OoxmlContentControlDropDownListNode as bI, type OoxmlContentControlEndPropertiesNode as bJ, type OoxmlContentControlLidNode as bK, type OoxmlContentControlListItemNode as bL, type OoxmlContentControlPropertiesNode as bM, type OoxmlContentControlStoreMappedDataAsNode as bN, type OoxmlContentControlTextNode as bO, type OoxmlContentControlUncheckedStateNode as bP, type OoxmlDocumentNode as bQ, type OoxmlExternalTarget as bR, type OoxmlGenericExtensionAttribute as bS, type OoxmlHyperlinkNode as bT, type OoxmlInvariantIssueCode as bU, type OoxmlKnownNodeAttribute as bV, type OoxmlNamespaceBinding as bW, type OoxmlNodeIdentityRules as bX, type OoxmlPackageResult as bY, type OoxmlParagraphPropertiesNode as bZ, type OoxmlPartMetadata as b_, type ContentControlProperties as ba, type ContentTypeError as bb, type ContentTypeIndex as bc, type ContentTypeRecords as bd, DEFAULT_OOXML_PACKAGE_LIMITS as be, DEFAULT_ZIP_LIMITS as bf, type DefaultRecord as bg, type DeleteTextOp as bh, HYPERLINK_RELATIONSHIP_TYPE as bi, type HyperlinkKind as bj, type HyperlinkTarget as bk, IMAGE_RELATIONSHIP_TYPE as bl, type ImageRelationshipResolution as bm, type IndexResult as bn, type InsertBuildingBlockOp as bo, type InsertTextOp as bp, type LegacyCheckboxFieldRange as bq, MAX_CONTENT_CONTROLS_PER_PART as br, MAX_CONTENT_CONTROL_NESTING as bs, type NameRejection as bt, type NameResult as bu, OFFICE_RELATIONSHIP_NAMESPACE_URI as bv, OOXML_NODE_IDENTITY_RULES as bw, type OoxmlBodyNode as bx, type OoxmlBookmarkEndNode as by, type OoxmlBookmarkStartNode as bz, type ReviewCommentItem as c, isContentControlWrapper as c$, type OoxmlReadResult as c0, type OoxmlRunNode as c1, type OoxmlRunPropertiesNode as c2, type OoxmlTabNode as c3, type OoxmlTextElementNode as c4, type OoxmlTextNode as c5, type OoxmlWmlValAttribute as c6, type OoxmlXmlSpaceAttribute as c7, type OverrideRecord as c8, type RelationshipError as c9, allocateContentControlId as cA, asciiFold as cB, buildContentTypeIndex as cC, buildRelationshipSet as cD, childElements as cE, commentAnchorsOfStory as cF, commentsOfPart as cG, contentControlContentChildren as cH, contentControlContentNodeOf as cI, contentControlEndPropertiesNodeOf as cJ, contentControlLevelOf as cK, contentControlPropertiesNodeOf as cL, contentControlPropertiesOf as cM, contentControlTextOf as cN, contentControlsIn as cO, detectDuplicateNames as cP, extensionKey as cQ, findContentControl as cR, findElement as cS, firstReviewRange as cT, flattenContentControls as cU, hasAnyComment as cV, hyperlinkAnchorOf as cW, hyperlinkRelationshipIdOf as cX, hyperlinkTargetOf as cY, isContentControlContentNode as cZ, isContentControlNode as c_, type RelationshipSetResult as ca, type RelationshipTargetResolver as cb, type ResolveResult as cc, type ResolvedRelationship as cd, type SetLegacyCheckboxOp as ce, type SetLegacyDropdownOp as cf, type SetTextFormFieldDefaultOp as cg, TABLE_BORDER_STYLES as ch, type TabStopWrite as ci, type TargetMode as cj, type TextFormFieldOptions as ck, type TextFormFieldRange as cl, type TextFormFieldType as cm, type TreeDocOpKind as cn, type TreeOpEffect as co, W15_NAMESPACE_URI as cp, WML_NAMESPACE_URI as cq, XMLNS_NAMESPACE_URI as cr, XML_NAMESPACE_URI as cs, type XmlLimits as ct, type XmlNode as cu, type XmlRejection as cv, type XmlResult as cw, type ZipLimits as cx, type ZipReadResult as cy, type ZipRejection as cz, type ReviewCustomItem as d, isContentRevisionKind as d0, isHyperlinkNode as d1, isRangeMarkerKind as d2, isValidMime as d3, legacyCheckboxFieldsOf as d4, lockForbidsEdit as d5, lockForbidsRemoval as d6, normalizePartName as d7, orderedContentControlProperties as d8, parseContentControlId as d9, reviewItemsAt as dA, reviewThreadRootOf as dB, partNameKey as da, planRevisionBatch as db, projectDrawing as dc, readOnOffChild as dd, readOoxmlPackage as de, readOoxmlPart as df, readXml as dg, readZip as dh, resolveContentControlLock as di, resolveContentType as dj, resolveImageRelationship as dk, resolveInternalTarget as dl, resolveRelationship as dm, reviewItemKey as dn, reviewItemRanges as dp, textContent as dq, textFormFieldsOf as dr, threadStateOfPart as ds, validateExternalTarget as dt, withPart as du, writeOoxmlPackage as dv, writeZip as dw, type VectorShapeComponent as dx, activeReviewItem as dy, reviewItemPositionRank as dz, type ReviewPosition as e, type ReviewRange as f, type ReviewRevisionKind as g, type RevisionAddress as h, type OoxmlNode as i, type OoxmlPackage as j, type ContentControlType as k, type DocTarget as l, type RunFormatting as m, type Extent as n, type ContainerRef as o, type ContentControlFilter as p, type DocRange as q, type Revision as r, type DocComment as s, type ColorValue as t, type ContentControl as u, type DocAnchor as v, type DocAnchorRange as w, type DocLocation as x, type DocumentBody as y, type ExecErrorCode as z };
4130
+ export { IMAGE_WRAP_TARGETS as aE, TEXT_FORM_FORMATS as aF, ACCEPTED_PARAGRAPH_PROPERTIES as aW, ACCEPTED_RUN_PROPERTIES as aX, CONTENT_CONTROL_ID_MAX as aY, CONTENT_CONTROL_PROPERTY_ORDER as aZ, DEFAULT_OOXML_PACKAGE_LIMITS as be, DEFAULT_ZIP_LIMITS as bf, HYPERLINK_RELATIONSHIP_TYPE as bi, IMAGE_RELATIONSHIP_TYPE as bl, MAX_CONTENT_CONTROLS_PER_PART as br, MAX_CONTENT_CONTROL_NESTING as bs, OFFICE_RELATIONSHIP_NAMESPACE_URI as bv, OOXML_NODE_IDENTITY_RULES as bw, isContentControlWrapper as c$, allocateContentControlId as cA, asciiFold as cB, buildContentTypeIndex as cC, buildRelationshipSet as cD, childElements as cE, commentAnchorsOfStory as cF, commentsOfPart as cG, contentControlContentChildren as cH, contentControlContentNodeOf as cI, contentControlEndPropertiesNodeOf as cJ, contentControlLevelOf as cK, contentControlPropertiesNodeOf as cL, contentControlPropertiesOf as cM, contentControlTextOf as cN, contentControlsIn as cO, detectDuplicateNames as cP, extensionKey as cQ, findContentControl as cR, findElement as cS, firstReviewRange as cT, flattenContentControls as cU, hasAnyComment as cV, hyperlinkAnchorOf as cW, hyperlinkRelationshipIdOf as cX, hyperlinkTargetOf as cY, isContentControlContentNode as cZ, isContentControlNode as c_, TABLE_BORDER_STYLES as ch, W15_NAMESPACE_URI as cp, WML_NAMESPACE_URI as cq, XMLNS_NAMESPACE_URI as cr, XML_NAMESPACE_URI as cs, isContentRevisionKind as d0, isHyperlinkNode as d1, isRangeMarkerKind as d2, isValidMime as d3, legacyCheckboxFieldsOf as d4, lockForbidsEdit as d5, lockForbidsRemoval as d6, normalizePartName as d7, orderedContentControlProperties as d8, parseContentControlId as d9, reviewItemsAt as dA, reviewThreadRootOf as dB, partNameKey as da, planRevisionBatch as db, projectDrawing as dc, readOnOffChild as dd, readOoxmlPackage as de, readOoxmlPart as df, readXml as dg, readZip as dh, resolveContentControlLock as di, resolveContentType as dj, resolveImageRelationship as dk, resolveInternalTarget as dl, resolveRelationship as dm, reviewItemKey as dn, reviewItemRanges as dp, textContent as dq, textFormFieldsOf as dr, threadStateOfPart as ds, validateExternalTarget as dt, withPart as du, writeOoxmlPackage as dv, writeZip as dw, activeReviewItem as dy, reviewItemPositionRank as dz };
4131
+ export type { RevisionBatchSkipReason as $, ParagraphTabStop as A, Block as B, CommentRecord as C, DocxDocument as D, ExecResult as E, RevisionType as F, Section as G, HeaderFooterSet as H, InsertableContentControlType as I, SectionProperties as J, StyleDefinition as K, Theme as L, ThemeColorScheme as M, OoxmlNode as N, OoxmlPart as O, Paragraph as P, OoxmlPackage as Q, ReviewModelInput as R, StyleDefinitions as S, Table as T, OoxmlNodeId as U, OoxmlGenericElementNode as V, TreeDocOp as W, OoxmlPackageLimits as X, OoxmlPackageRejection as Y, RevisionBatchEntry as Z, RevisionBatchResult as _, ReviewItem as a, CommentPosition as a$, OoxmlProperty as a0, OoxmlElement as a1, OoxmlContentControlNode as a2, OoxmlContentControlContentNode as a3, DrawingProjection as a4, TreeOpRejection as a5, AutomationTableMutation as a6, RevisionAttributionInput as a7, SourceCrop as a8, DrawingKind as a9, OoxmlSeparatorNode as aA, DrawingTreeDocOp as aB, ImpactClass as aC, TreeDocColorValue as aD, TableBorderStyle as aG, DrawingAccessibility as aH, DrawingImageEffects as aI, DrawingTransform as aJ, VectorShapeProjection as aK, OoxmlDrawingNode as aL, OoxmlInvariantResult as aM, OoxmlFldCharNode as aN, OoxmlFldSimpleNode as aO, OoxmlInstrTextNode as aP, OoxmlInvariantIssue as aQ, TreeOpResult as aR, RelationshipRecord as aS, OoxmlHardBreakNode as aT, OoxmlAttribute as aU, CommentThreadState as aV, CommentAnchor as a_, ImageWrapTarget as aa, DrawingPositionInput as ab, DrawingLocks as ac, ParagraphFormatCommand as ad, Watermark as ae, Rect as af, SelectionPin as ag, Unsubscribe as ah, DocxDocumentJSON as ai, DrawingHorizontalReferenceFrame as aj, DrawingVerticalReferenceFrame as ak, FontDefinition as al, NumberingRef as am, PageMargins as an, ParagraphDisagreements as ao, Point as ap, Run as aq, TableCell as ar, TableRow as as, OoxmlParagraphNode as at, OoxmlNoteNode as au, OoxmlContinuationSeparatorNode as av, OoxmlEndnotesNode as aw, OoxmlFootnotesNode as ax, OoxmlNoteRefNode as ay, OoxmlNoteReferenceNode as az, ReviewRevisionItem as b, OoxmlReadRejection as b$, CommitTextFormFieldOp as b0, ContentControlCheckbox as b1, ContentControlCheckboxState as b2, ContentControlDataBinding as b3, ContentControlDateFormat as b4, ContentControlEntry as b5, ContentControlKind as b6, ContentControlLevel as b7, ContentControlListItem as b8, ContentControlLock as b9, OoxmlContentControlCalendarNode as bA, OoxmlContentControlCheckboxNode as bB, OoxmlContentControlCheckedNode as bC, OoxmlContentControlCheckedStateNode as bD, OoxmlContentControlComboBoxNode as bE, OoxmlContentControlDataBindingNode as bF, OoxmlContentControlDateFormatNode as bG, OoxmlContentControlDateNode as bH, OoxmlContentControlDropDownListNode as bI, OoxmlContentControlEndPropertiesNode as bJ, OoxmlContentControlLidNode as bK, OoxmlContentControlListItemNode as bL, OoxmlContentControlPropertiesNode as bM, OoxmlContentControlStoreMappedDataAsNode as bN, OoxmlContentControlTextNode as bO, OoxmlContentControlUncheckedStateNode as bP, OoxmlDocumentNode as bQ, OoxmlExternalTarget as bR, OoxmlGenericExtensionAttribute as bS, OoxmlHyperlinkNode as bT, OoxmlInvariantIssueCode as bU, OoxmlKnownNodeAttribute as bV, OoxmlNamespaceBinding as bW, OoxmlNodeIdentityRules as bX, OoxmlPackageResult as bY, OoxmlParagraphPropertiesNode as bZ, OoxmlPartMetadata as b_, ContentControlProperties as ba, ContentTypeError as bb, ContentTypeIndex as bc, ContentTypeRecords as bd, DefaultRecord as bg, DeleteTextOp as bh, HyperlinkKind as bj, HyperlinkTarget as bk, ImageRelationshipResolution as bm, IndexResult as bn, InsertBuildingBlockOp as bo, InsertTextOp as bp, LegacyCheckboxFieldRange as bq, NameRejection as bt, NameResult as bu, OoxmlBodyNode as bx, OoxmlBookmarkEndNode as by, OoxmlBookmarkStartNode as bz, ReviewCommentItem as c, OoxmlReadResult as c0, OoxmlRunNode as c1, OoxmlRunPropertiesNode as c2, OoxmlTabNode as c3, OoxmlTextElementNode as c4, OoxmlTextNode as c5, OoxmlWmlValAttribute as c6, OoxmlXmlSpaceAttribute as c7, OverrideRecord as c8, RelationshipError as c9, RelationshipSetResult as ca, RelationshipTargetResolver as cb, ResolveResult as cc, ResolvedRelationship as cd, SetLegacyCheckboxOp as ce, SetLegacyDropdownOp as cf, SetTextFormFieldDefaultOp as cg, TabStopWrite as ci, TargetMode as cj, TextFormFieldOptions as ck, TextFormFieldRange as cl, TextFormFieldType as cm, TreeDocOpKind as cn, TreeOpEffect as co, XmlLimits as ct, XmlNode as cu, XmlRejection as cv, XmlResult as cw, ZipLimits as cx, ZipReadResult as cy, ZipRejection as cz, ReviewCustomItem as d, VectorShapeComponent as dx, ReviewPosition as e, ReviewRange as f, ReviewRevisionKind as g, RevisionAddress as h, ContentControlType as i, DocTarget as j, RunFormatting as k, Extent as l, ContainerRef as m, ContentControlFilter as n, DocRange as o, Revision as p, DocComment as q, ColorValue as r, ContentControl as s, DocAnchor as t, DocAnchorRange as u, DocLocation as v, DocumentBody as w, ExecErrorCode as x, IndentFormatting as y, ParagraphFlags as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docx-editor.dev/core",
3
- "version": "2.21.1",
3
+ "version": "2.23.0",
4
4
  "description": "Framework-agnostic core for docx-editor.dev: OOXML parse/serialize, the canonical document tree, layout and paint, and the Editor contract the adapters render.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -87,7 +87,7 @@
87
87
  "./package.json": "./package.json"
88
88
  },
89
89
  "scripts": {
90
- "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsup && node ../../scripts/build-core-styles.mjs",
90
+ "build": "node ../../scripts/check-built-siblings.mjs && node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsup && node ../../scripts/build-core-declarations.mjs && node ../../scripts/build-core-styles.mjs",
91
91
  "typecheck": "tsc --noEmit"
92
92
  },
93
93
  "devDependencies": {
@@ -105,7 +105,7 @@
105
105
  "directory": "packages/core"
106
106
  },
107
107
  "dependencies": {
108
- "@docx-editor.dev/i18n": "^2.21.1",
108
+ "@docx-editor.dev/i18n": "^2.23.0",
109
109
  "bidi-js": "1.1.0",
110
110
  "emf-converter": "2.0.2",
111
111
  "fast-xml-parser": "^5.10.1",
@@ -1,2 +0,0 @@
1
- import {e}from'./chunk-XRYSPKKC.js';import {lc}from'./chunk-JL3SI5SZ.js';import {b,c,a}from'./chunk-DZYKU2HG.js';import {ja as ja$1,ba as ba$1,aa as aa$1,Ca as Ca$1,_a as _a$1,Da as Da$1,P,Q,S,R,ta,ra as ra$1,za as za$1,ya as ya$1,Ba as Ba$1,Xa as Xa$1,Oa as Oa$1,X,Y,Pa as Pa$1,Ka as Ka$1}from'./chunk-3P3DNJYM.js';import {Ha as Ha$1,Se,Pd,Wf,hd,kd,id,rd,Nd,nf,mf,Ad,vd,O,di as di$1,Bd,Fb,Jc,cf,af,Pi as Pi$1,Cd,Qe,Oe,Qi,Ui,Ri,Ti,Si,Hc,Lc,Ue as Ue$1,Nc,Hh,xh,yf,ab,Af,_a as _a$2,Pe,yd,Je,Me as Me$1,Oi,gc,ai as ai$1,nb,Re,yh,Ff,Zh,ni as ni$1,da as da$1,Ia as Ia$1,yg,zg,wg,ui as ui$1,Fa as Fa$1,Ma as Ma$1,sf,ub,zb,_b,Xb,$b,Zb,th,ie,xa as xa$1,Za as Za$1,df,bf}from'./chunk-3B3DQMSL.js';function ra(t){let e=[];for(let o of t.pages){let n=o.pageFieldSource?.pageNumber??o.index+1,i=lc(n,o.pageFieldSource?.format),s=l=>{for(let c of l)if(c.kind==="paragraph")for(let u of c.lines)e.push({...u.range,pageNumber:n,pageNumberText:i});else for(let u of c.rows)for(let m of u.cells)s(m.blocks);};s(o.fragments),o.header&&s(o.header.fragments),o.footer&&s(o.footer.fragments);for(let l of o.footnotes?.notes??[])s(l.fragments);for(let l of o.endnotes?.notes??[])s(l.fragments);}return {pageCount:t.pages.length,ranges:e}}function xi(t,e,o,n){if(!t||!Number.isInteger(t.pageCount)||t.pageCount<1)return null;let i=Ha$1(e,o);if(!i||i.kind!=="paragraph")return null;let s=Se(i).find(c=>c.node.id===n);if(!s)return null;let l=t.ranges.find(c=>c.paragraphId===o&&c.start<=s.start&&c.end>s.start);return !l||!Number.isInteger(l.pageNumber)||l.pageNumber<1?null:{pageNumber:l.pageNumber,pageNumberText:l.pageNumberText,pageCount:t.pageCount}}function Ai(t){return async e$1=>{let o=e(e$1,{measurer:t.measurer,producer:t.producer,displayMode:"proposed"});if(!o.ok)throw new Error("field pagination could not open the document");try{return ra(await o.session.layout())}finally{o.session.dispose();}}}var Ce=Object.freeze(["default","first","even"]),Ft=Object.freeze({kind:"body"});function G(t){switch(t.kind){case "body":return "body";case "note":return `note:${t.noteKind}:${String(t.noteId)}`;default:return `${t.kind}:${String(t.sectionIndex)}:${t.variant}`}}function So(t){if(typeof t!="object"||t===null)return false;let e=t;return e.kind==="body"?true:e.kind==="note"?(e.noteKind==="footnote"||e.noteKind==="endnote")&&Number.isInteger(e.noteId):e.kind!=="header"&&e.kind!=="footer"?false:Number.isInteger(e.sectionIndex)&&e.sectionIndex>=0&&Ce.includes(e.variant)}var Pi=["getTables","getTable","getTableRows","getTableCells","getTableCell","getTableCellProperties","getTableCellBody","getFields","getField","getInlinePictures","getInlinePicture","getChangeTrackingMode","getDocument","getBody","getParagraphs","getRange","getSpanParagraphs","getText","getSpanText","getParagraphId","search","getFont","getParagraphFormat","getStyle","getSections","getPageSetup","getFurniture","getNotes","getNoteBody","getNoteText","getNoteKind","getLists","getListId","getListById","getListParagraphs","getParagraphList","getListLevel","getHyperlink","getBookmarks","getBookmarkName","getBookmarkRange","getComments","getCommentReplies","getCommentId","getCommentAuthor","getCommentDate","getCommentText","getCommentRange","getCommentResolved","getRevisions","getRevisionType","getRevisionAuthor","getRevisionDate","getRevisionRange","getContentControls","getContentControlById","getContentControlsByTag","getContentControlsByTitle","getContentControlTag","getContentControlTitle","getContentControlFileId","getContentControlSubtype","getContentControlLock","getContentControlIsBound","getContentControlPlaceholderShown","getContentControlTemporary","getContentControlText","getContentControlParagraphs","getContentControlRange"],aa=["insertTable","updateTable","updateTableCell","setInlinePicture","deleteInlinePicture","insertField","setFieldCode","deleteField","updateFieldResult","insertInlinePicture","insertBreak","setChangeTrackingMode","proposeInsertion","proposeDeletion","proposeReplacement","insertText","replaceSpan","replaceStoryBlocks","insertParagraph","splitParagraph","deleteParagraph","selectSpan","selectBookmark","setFont","setParagraphFormat","setStyle","setPageSetup","deleteNote","setListLevel","startNewList","attachToList","detachFromList","setListLevelFormat","insertListParagraph","setHyperlink","insertComment","setCommentResolved","replyToComment","deleteComment","acceptRevision","rejectRevision","resolveRevisionBatch","acceptAllRevisions","rejectAllRevisions","setContentControlValue","setContentControlProperties","deleteContentControl","insertContentControlText","insertContentControl","insertCustomNode"],ia=["resolveRevisionBatch","insertTable","insertInlinePicture","insertBreak","startNewList","deleteNote","insertComment","setCommentResolved","replyToComment","insertCustomNode"],sa=new Set(ia);function rn(t){return sa.has(t.op)||t.op==="updateTable"&&["addRows","addColumns","deleteRows","deleteColumns","delete"].includes(t.mutation.kind)}var la=new Set(aa);function Wt(t){return la.has(t.op)}var da=63360;function Tt(t){return Math.round(cf(af(t))*100)/100}function ua(t,e){if(typeof t!="number"||!Number.isFinite(t))return null;let o=df(bf(t));return o>da||o<0||o===0&&!e?null:o}var ca=[["pageWidth","pageWidthTwips",false],["pageHeight","pageHeightTwips",false],["topMargin","marginTopTwips",true],["rightMargin","marginRightTwips",true],["bottomMargin","marginBottomTwips",true],["leftMargin","marginLeftTwips",true]];function Co(t){if(typeof t!="object"||t===null)return {ok:false,reason:"that is not a page setup",detail:"not-an-object"};let e=t,o={},n=0;for(let[s,l,c]of ca){let u=e[s];if(u===void 0)continue;let m=ua(u,c);if(m===null)return {ok:false,reason:`that is not a value for ${s}`,detail:String(u)};o[l]=m,n+=1;}let i=e.orientation;if(i!==void 0){if(i!=="portrait"&&i!=="landscape")return {ok:false,reason:"that is not an orientation",detail:String(i)};o.orientation=i,n+=1;}return n===0?{ok:false,reason:"that page setup names nothing to write",detail:"empty"}:{ok:true,value:o}}function pa(t){let e=di$1(t),o=e.widthTwips>e.heightTwips?"landscape":"portrait";return Object.freeze({pageWidth:Tt(e.widthTwips),pageHeight:Tt(e.heightTwips),orientation:o,topMargin:Tt(e.topTwips),rightMargin:Tt(e.rightTwips),bottomMargin:Tt(e.bottomTwips),leftMargin:Tt(e.leftTwips),headerDistance:Tt(e.headerTwips),footerDistance:Tt(e.footerTwips),gutter:Tt(e.gutterTwips)})}function ma(t,e){if(!e)return null;let o=null,n=(i,s,l)=>{if(o!==null||i.kind==="textValue"||l>64)return;let c=i.kind==="paragraph"?i.id:s;if(i.id===e.id){o=c;return}for(let u of i.children)n(u,c,l+1);};return n(t.root,null,0),o}function wo(t,e,o){let n=Nd(e.root);return Object.freeze(n.map((i,s)=>{let l=o[s];return Object.freeze({index:s,markParagraphId:ma(e,i),pageSetup:pa(i),titlePage:l?.titlePage??false,evenAndOddHeaders:l?.evenAndOddHeaders??false})}))}var fa=255,ga=Object.freeze({nameOf:()=>null,idOf:()=>null,defaultId:null,present:false});function To(t){let e=nf(t);if(!e)return ga;let o=new Map,n=new Map,i=null;for(let s of mf(e).values())if(s.type==="paragraph"){if(o.set(s.styleId,s.name),s.name!==null){let l=s.name.trim().toLowerCase();n.has(l)||n.set(l,s.styleId);}s.isDefault&&i===null&&(i=s.styleId);}return Object.freeze({nameOf:s=>o.get(s)??null,idOf:s=>n.get(s.trim().toLowerCase())??null,defaultId:i,present:true})}function we(t,e,o){let n=Ha$1(t,e);if(!n||n.kind!=="paragraph")return null;let i=ya(Qe(Oe(n),"pStyle"));return i!==null?o.nameOf(i):o.defaultId===null?null:o.nameOf(o.defaultId)}function ya(t){if(!t)return null;for(let e of t.attributes)if(e.localName==="val")return e.value;return null}function Te(t,e){if(typeof t!="string"||t.trim().length===0)return {ok:false,detail:"style: not a name"};if(t.length>fa)return {ok:false,detail:"style: name too long"};if(!O(t))return {ok:false,detail:"style: not valid XML text"};if(!e.present)return {ok:false,detail:"style: this document defines no styles"};let o=e.idOf(t);return o===null?{ok:false,detail:"style: this document defines no paragraph style with that name"}:{ok:true,styleId:o}}function No(t,e,o){return e>=o?null:{text:t.text.slice(e-t.rawStart,o-t.rawStart),rawStart:e,rawEnd:o}}function ha(t,e){let o=[],n=0;for(let i of t){for(;n<e.length&&e[n].end<=i.rawStart;)n+=1;let s=i.rawEnd-i.rawStart;if(i.text.length!==s){let u=e[n];(!u||u.start>=i.rawEnd)&&o.push(i);continue}let l=i.rawStart;for(;n<e.length;){let u=e[n];if(u.end<=l){n+=1;continue}if(u.start>=i.rawEnd)break;let m=No(i,l,Math.min(u.start,i.rawEnd));if(m&&o.push(m),l=Math.max(l,u.end),u.end<=i.rawEnd&&(n+=1),l>=i.rawEnd)break}let c=No(i,l,i.rawEnd);c&&o.push(c);}return o}function Ne(t,e,o){if(o==="model")return b(e);let n=c(t,e,o);if(o==="allMarkup")return a(n);let i=ka(t);if(i.length===0)return a(n);let s=ha(n,i);return a(s)}function ka(t){let e=Ue$1(t),o=[],n=(s,l)=>{if(!(l>64||s.kind==="textValue")){if(s.kind==="revisionInsert"||s.kind==="revisionMoveTo"){let c=e.spanOf(s);c&&c.end>c.start&&o.push({start:c.start,end:c.end});return}for(let c of s.children)n(c,l+1);}};n(t,0),o.sort((s,l)=>s.start-l.start||l.end-s.end);let i=[];for(let s of o){let l=i[i.length-1];l&&s.start<=l.end?l.end=Math.max(l.end,s.end):i.push({...s});}return i}var an="\r",ba=Object.freeze({nameOf:()=>null,idOf:()=>null,defaultId:null,present:false}),xa=Object.freeze([]),Aa=Object.freeze([]),Eo=Object.freeze([]),va=Object.freeze({package:null,body:null,story:()=>null,storyOf:()=>null,sections:()=>Aa,furniture:()=>Eo,noteIds:()=>({ok:true,ids:Lo}),styles:()=>ba});function Ia(t){return t.kind==="textValue"?xa:Object.freeze(t.children.filter(e=>e.kind!=="textValue").map(e=>{let o=[];Cd([e],o,0);let n=e.kind==="paragraph"?"paragraph":e.kind==="table"?"table":"other",i=e.kind==="paragraph"&&Qe(Oe(e),"sectPr")!==void 0;return Object.freeze({id:e.id,kind:n,paragraphIds:Object.freeze(o.map(s=>s.id)),removable:n!=="other"&&!i})}))}function Ee(t,e,o,n,i){let s=Bd(n),l=Object.freeze(s.map(k=>k.id)),c=new Map,u=new Map;s.forEach((k,b)=>{c.set(k.id,b),u.set(k.id,k);});let m=new Map,A=k=>{if(!c.has(k))return null;let b=m.get(k);if(b!==void 0)return b;let v=Pi$1(e,k)??"";return m.set(k,v),v},g=new Map,x=(k,b="allMarkup")=>{let v=u.get(k);if(!v||v.kind!=="paragraph")return null;let S=`${k}:${b}`,w=g.get(S);if(w)return w;let H=Ne(v,A(k)??"",b);return g.set(S,H),H};return {story:t,part:e,root:n,scope:o,paragraphIds:l,blocks:Ia(n),has:k=>c.has(k),indexOf:k=>c.get(k)??-1,paragraph(k){let b=u.get(k);return b?{nodeId:k,paraId:Fb(b),text:x(k)?.text??""}:null},node:k=>u.get(k)??null,rawText:A,paragraphText:(k,b)=>x(k,b)?.text??null,projectedText:x,text:k=>l.map(b=>x(b,k)?.text??"").join(an),styles:i}}function Le(t,e){let o=Ee(t.story,t.part,t.scope,e,t.styles);return {...o,indexOf:n=>o.has(n)?t.indexOf(n):-1}}function ue(t){let e=t.parts.get(t.mainDocumentPart);if(!e)return va;let o,n=()=>o??=To(t),i,s=()=>i??=Pd(t),l,c=new Map,u=new Map,m=b=>{let v=u.get(b);if(v)return v;let S=Wf(t,b);if(!S){let C={ok:true,ids:Lo};return u.set(b,C),C}let w=[],H=new Set,E=new Set,j=0,F=false;for(let C of S.root.children){if(hd(C)!==b)continue;if(j+=1,C.kind!=="note"){F=true;continue}if(!kd(C))continue;let D=id(C);if(D===null){F=true;continue}H.has(D)?E.add(D):(H.add(D),w.push(D));}let z=j>rd?{ok:false,reason:"truncated"}:F?{ok:false,reason:"malformed"}:E.size>0?{ok:false,reason:"duplicates",duplicateIds:Object.freeze([...E])}:{ok:true,ids:Object.freeze(w)};return u.set(b,z),z},A=b=>{let v=s()[b.sectionIndex];return v?(b.kind==="header"?v.headers:v.footers).get(b.variant)??null:null},g=b=>{if(b.kind==="body"){let S=Ad(e);return S?Ee(b,e,{kind:"body"},S,n):null}if(b.kind==="note"){let S=m(b.noteKind);if(!S.ok||!S.ids.includes(b.noteId))return null;let w=Wf(t,b.noteKind);if(!w)return null;let H=vd(w.root,b.noteId);return !H||!kd(H)?null:Ee(b,w,{kind:"notesPart",noteKind:b.noteKind},H,n)}let v=A(b);return v?Ee(b,v.part,{kind:"headerFooter",rId:v.rId},v.part.root,n):null},x=b=>{let v=G(b);if(c.has(v))return c.get(v)??null;let S=g(b);return c.set(v,S),S};return {package:t,get body(){return x(Ft)},story:x,storyOf:b=>{if(x(Ft)?.has(b))return Ft;for(let[S]of s().entries())for(let w of ["header","footer"])for(let H of Ce){let E={kind:w,sectionIndex:S,variant:H};if(x(E)?.has(b))return E}for(let S of ["footnote","endnote"]){let w=m(S);if(w.ok)for(let H of w.ids){let E={kind:"note",noteKind:S,noteId:H};if(x(E)?.has(b))return E}}return null},sections:()=>l??=wo(t,e,s()),furniture(b){let v=s()[b];if(!v)return Eo;let S=[];for(let w of ["header","footer"]){let H=w==="header"?v.headers:v.footers;for(let E of Ce){let j=H.get(E);j&&S.push(Object.freeze({kind:w,variant:E,declared:!j.inherited}));}}return Object.freeze(S)},noteIds:m,styles:n}}var Lo=Object.freeze([]);function Ho(t,e,o){let n=i=>({state:o,step:{ok:false,error:{code:"unsupported-capability",message:i,detail:"changeTrackingMode"}}});return t.op==="getChangeTrackingMode"||t.op==="setChangeTrackingMode"?e?t.op==="getChangeTrackingMode"?{state:o,step:{ok:true,kind:"query",value:{kind:"text",text:o.mode}}}:t.mode!=="Off"&&t.mode!=="TrackMineOnly"?n("TrackAll requires shared tracking enforcement for every peer and is not supported"):t.mode==="TrackMineOnly"&&(typeof t.author!="string"||!t.author.trim()||!O(t.author))?n("TrackMineOnly requires a non-empty XML-safe runtime author"):{state:{mode:t.mode,...t.mode==="TrackMineOnly"?{author:t.author.trim()}:{}},step:{ok:true,kind:"query",value:{kind:"applied"}}}:n("this host does not support runtime-local change tracking"):o.mode==="Off"||sn(t)?null:n(`${t.op} does not support TrackMineOnly; no permanent edit was applied`)}function sn(t){return !Wt(t)||t.op==="setChangeTrackingMode"||t.op==="insertText"||t.op==="replaceSpan"&&!("body"in t.span)?true:["proposeInsertion","proposeDeletion","proposeReplacement","insertComment","replyToComment","deleteComment","setCommentResolved","acceptRevision","rejectRevision","resolveRevisionBatch","acceptAllRevisions","rejectAllRevisions","selectSpan","selectBookmark"].includes(t.op)}function Pa(){let t=globalThis.crypto,e=t?.getRandomValues;if(typeof e!="function")throw new Error("automation: no secure random source. globalThis.crypto.getRandomValues is required to scope document handles to one host.");let o=e.call(t,new Uint8Array(16)),n="";for(let i of o)n+=i.toString(16).padStart(2,"0");return n}function Oa(t){return typeof t=="object"&&t!==null&&"kind"in t&&"ref"in t}function Fo(){let t=new Map,e=new Map,o=new Map,n=new Map,i=Pa(),s=null,l=(u,m)=>{let A=(n.get(u)??0)+1;n.set(u,A);let g=`${u}:${i}:${String(A)}`;return t.set(g,m),Object.freeze({kind:u,ref:g})},c=(u,m,A)=>{let g=`${u}\0${m}`,x=o.get(g);if(x)return Object.freeze({kind:u,ref:x});let k=l(u,A);return o.set(g,k.ref),k};return {document(){return s??=l("document",{kind:"document"}),s},body(u,m){return c("body",`${G(u)}:${m??""}`,{kind:"body",story:u,...m?{rootNodeId:m}:{}})},table(u,m){return c("table",`${G(m)}:${u}`,{kind:"table",nodeId:u,story:m})},tableRow(u,m){return c("tableRow",`${G(m)}:${u}`,{kind:"tableRow",nodeId:u,story:m})},tableCell(u,m){return c("tableCell",`${G(m)}:${u}`,{kind:"tableCell",nodeId:u,story:m})},field(u,m,A){return c("field",`${G(A)}:${m}`,{kind:"field",paragraphId:u,fieldNodeId:m,story:A})},inlinePicture(u,m){return c("inlinePicture",`${G(m)}:${u}`,{kind:"inlinePicture",drawingNodeId:u,story:m})},paragraph(u,m){let A=e.get(u);if(A)return Object.freeze({kind:"paragraph",ref:A});let g=l("paragraph",{kind:"paragraph",paragraphId:u,story:m});return e.set(u,g.ref),g},section(u){return c("section",String(u),{kind:"section",index:u})},note(u,m){return c("note",`${u}:${String(m)}`,{kind:"note",noteKind:u,noteId:m})},comment(u,m){return c("comment",`${G(m)}\0${u}`,{kind:"comment",commentId:u,story:m})},revision(u,m){return c("revision",`${G(m)}\0${u}`,{kind:"revision",revisionId:u,story:m})},bookmark(u,m){return c("bookmark",`${G(m)}\0${u}`,{kind:"bookmark",name:u,story:m})},list(u,m){return c("list",`${G(m)}\0${u}`,{kind:"list",numId:u,story:m})},contentControl(u,m){return c("contentControl",`${G(m)}\0${u}`,{kind:"contentControl",nodeId:u,story:m})},retarget(u,m){let A=e.get(u);if(!A||u===m)return;let g=t.get(A);!g||g.kind!=="paragraph"||(e.delete(u),t.set(A,{kind:"paragraph",paragraphId:m,story:g.story}),e.has(m)||e.set(m,A));},resolve(u,m){if(!Oa(u)||u.kind!==m||typeof u.ref!="string")return null;let A=t.get(u.ref);return !A||A.kind!==m?null:A}}}function bt(t,e){return {ok:false,code:t,detail:e}}function xt(t){return {ok:true,value:t}}function rt(t,e,o,n){let i=o.resolve(t,e);if(!i||i.kind!=="body"&&i.kind!=="paragraph")return bt("invalid-handle",`not-a-${e}-handle`);let s=n.story(i.story);if(!s)return bt("invalid-handle",`no-such-story:${G(i.story)}`);if(i.kind==="body"&&i.rootNodeId){let l=Ha$1(s.part,i.rootNodeId);return !l||l.kind!=="tableCell"?bt("invalid-handle","cell no longer exists"):xt(Le(s,l))}return xt(s)}function pt(t,e,o){let n=e.resolve(t,"paragraph");if(!n||n.kind!=="paragraph")return bt("invalid-handle","not-a-paragraph-handle");let i=o.story(n.story);if(!i)return bt("invalid-handle",`no-such-story:${G(n.story)}`);let s=i.indexOf(n.paragraphId);return s<0?bt("invalid-handle","paragraph-not-in-body"):xt({story:n.story,paragraphId:n.paragraphId,index:s,offset:0})}function Ra(t,e,o){let n=pt(t.paragraph,e,o);if(!n.ok)return n;let s=(o.story(n.value.story)?.rawText(n.value.paragraphId)??"").length,{offset:l}=t;return !Number.isInteger(l)||l<0||l>s?bt("invalid-offset",`offset ${String(l)} outside 0..${String(s)}`):xt({...n.value,offset:l})}function qt(t,e,o){if("paragraph"in t){if(!("at"in t))return Ra(t,e,o);let c=pt(t.paragraph,e,o);if(!c.ok||t.at==="start")return c;let m=(o.story(c.value.story)?.rawText(c.value.paragraphId)??"").length;return xt({...c.value,offset:m})}let n=rt(t.body,"body",e,o);if(!n.ok)return n;let i=n.value.paragraphIds;if(i.length===0)return bt("invalid-offset","empty-story");if(t.at==="start")return xt({story:n.value.story,paragraphId:i[0],index:n.value.indexOf(i[0]),offset:0});let s=i.length-1,l=i[s];return xt({story:n.value.story,paragraphId:l,index:n.value.indexOf(l),offset:(n.value.rawText(l)??"").length})}function Sa(t,e){return t.index<e.index||t.index===e.index&&t.offset<=e.offset}function Ca(t){let e=t.paragraphIds;if(e.length===0)return null;let o=e.length-1,n=e[o];return {start:{story:t.story,paragraphId:e[0],index:t.indexOf(e[0]),offset:0},end:{story:t.story,paragraphId:n,index:t.indexOf(n),offset:(t.rawText(n)??"").length}}}function K(t,e,o){if("body"in t){let s=rt(t.body,"body",e,o);return s.ok?xt(Ca(s.value)):s}if("paragraph"in t){let s=pt(t.paragraph,e,o);if(!s.ok)return s;let c=(o.story(s.value.story)?.rawText(s.value.paragraphId)??"").length;return xt({start:s.value,end:{...s.value,offset:c}})}let n=qt(t.start,e,o);if(!n.ok)return n;let i=qt(t.end,e,o);return i.ok?G(n.value.story)!==G(i.value.story)?bt("invalid-handle","span-crosses-stories"):Sa(n.value,i.value)?xt({start:n.value,end:i.value}):bt("invalid-offset","span-start-after-end"):i}function ot(t,e,o){if("body"in t)return rt(t.body,"body",e,o);if("paragraph"in t)return rt(t.paragraph,"paragraph",e,o);let n=t.start;return "paragraph"in n?rt(n.paragraph,"paragraph",e,o):rt(n.body,"body",e,o)}function He(t,e,o){if("paragraph"in t)return pt(t.paragraph,e,o);let n=rt(t.body,"body",e,o);if(!n.ok)return n;let i=n.value.paragraphIds;if(i.length===0)return bt("invalid-offset","empty-story");let s=t.at==="first"?0:i.length-1;return xt({story:n.value.story,paragraphId:i[s],index:s,offset:0})}function At(t,e){if(!t)return [];let o=e.paragraphIds,n=o[t.start.index]===t.start.paragraphId?t.start.index:o.indexOf(t.start.paragraphId),i=o[t.end.index]===t.end.paragraphId?t.end.index:o.indexOf(t.end.paragraphId);return n<0||i<n?[]:o.slice(n,i+1)}function Ut(t,e){if(!t)return [];let o=At(t,e),n=o.length-1;return o.map((i,s)=>{let l=(e.rawText(i)??"").length,c=s===0?t.start.offset:0,u=s===n?t.end.offset:l;return {paragraphId:i,start:c,end:u,whole:c===0&&u===l}})}function Mo(t,e,o,n="allMarkup"){if(!t)return "";let i=At(t,e);return i.length===1?e.projectedText(t.start.paragraphId,n)?.sliceRaw(t.start.offset,t.end.offset)??"":i.map((s,l)=>{let c=e.projectedText(s,n);if(!c)return "";let u=(e.rawText(s)??"").length;return l===0?c.sliceRaw(t.start.offset,u):l===i.length-1?c.sliceRaw(0,t.end.offset):c.text}).join(o)}function Nt(t,e){return {start:{paragraph:e.paragraph(t.start.paragraphId,t.start.story),offset:t.start.offset},end:{paragraph:e.paragraph(t.end.paragraphId,t.end.story),offset:t.end.offset}}}function wa(t){return t?.kind!=="paragraph"?false:t.children.every(e=>e.namespaceUri!==da$1?false:e.localName==="pPr"?true:e.kind==="run"&&e.children.every(o=>o.namespaceUri===da$1&&(o.localName==="rPr"||o.localName==="t"&&o.children.every(n=>n.kind==="textValue"))))}function ln(t,e,o){return wa(Ha$1(t,e))&&ui$1(t,e,o)===null}function jo(t,e,o,n){let i=ui$1(t,e,o);if(!i)return null;let s=o===i.offset?Oi(t,{op:"insertText",paragraphId:e,offset:o,text:n}):null;return s?.ok&&Pi$1(s.part,e)?.slice(o,o+n.length)===n?null:{ok:false,error:{code:"unsupported-capability",message:"insert at the placeholder start or replace the complete prompt",detail:"placeholder-insertion-offset"}}}function Ta(t,e,o){return t.start===t.end?e<t.start&&t.start<o:e===o?t.start<e&&e<t.end:Math.max(t.start,e)<Math.min(t.end,o)}var Fe=class{#t=new Map;has(e){return this.#t.has(e)}append(e,o,n,i,s=false){let l=this.#t.get(e)??[];if(l.some(g=>Ta(g,o,n)))return null;let c=o,u=n;for(let g of l){let x=g.length-(g.end-g.start);g.end<=o&&!(s&&g.start===o&&g.end===o)&&(c+=x),(g.end<n||g.end===n&&g.start!==g.end)&&(u+=x);}o===n&&(u=c);let m=i-(n-o);for(let g of l)n<=g.start&&!(o===n&&g.start===g.end&&o===g.start&&!s)&&(g.result.start+=m,g.result.end+=m);let A={start:c,end:c+i};return l.push({start:o,end:n,length:i,result:A}),this.#t.set(e,l),{start:c,end:u,result:A}}};function Do(t,e,o,n,i=false){let s=e.start.paragraphId,l=t.append(s,e.start.offset,e.end.offset,o.length,i);return l?{ok:true,kind:"command",ops:Bo(s,l.start,l.end,o),story:e.start.story,answer:()=>({kind:"span",span:Nt({start:{...e.start,offset:l.result.start},end:{...e.start,offset:l.result.end}},n)})}:{ok:false,error:{code:"conflicting-operations",message:"text edits overlap in the batch snapshot",detail:s}}}function Bo(t,e,o,n){let i=[];return n.length&&i.push({op:"insertText",paragraphId:t,offset:e,text:n,...o>e?{bias:"right"}:{}}),o>e&&i.push({op:"deleteText",paragraphId:t,start:e+n.length,end:o+n.length}),i}function _o(t,e,o,n){let i=e.start.paragraphId,s=Pi$1(t,i),l=ui$1(t,i,e.start.offset),c=l&&o.length?[{op:"insertText",paragraphId:i,offset:e.start.offset,text:o,bias:"right"}]:Bo(i,e.start.offset,e.end.offset,o),u=t;for(let A of c){let g=Oi(u,A);if(!g.ok)return {ok:false,error:{code:"unsupported-content",message:"that replacement cannot preserve the targeted text safely",detail:g.reason}};u=g.part;}let m=Pi$1(u,i);return s===null||m!==s.slice(0,e.start.offset)+o+s.slice(e.end.offset)?{ok:false,error:{code:l?"unsupported-capability":"unsupported-content",message:l?"replace the complete placeholder prompt to avoid consuming unrelated text":"that replacement changes the expected text positions",detail:i}}:{ok:true,kind:"command",ops:c,story:e.start.story,answer:()=>({kind:"span",span:Nt({start:e.start,end:{...e.start,offset:e.start.offset+o.length}},n)})}}var Vo=/\s/;function Wo(t,e){let o=[],n=0;for(;n<t.length;){let i=null;for(let s of e){let l=t.indexOf(s,n);l<0||(!i||l<i.start||l===i.start&&s.length>i.length)&&(i={start:l,length:s.length});}if(!i)break;o.push(i),n=i.start+i.length;}return o}function Uo(t,e,o){let n=e[o]?.markParagraphId??null;if(n!==null)return n;let i=t.paragraphIds,s=i[i.length-1];return s===void 0||new Set(e.map(c=>c.markParagraphId).filter(c=>c!==null)).has(s)?null:s}function $o(t,e){for(let o of [t.start,t.end]){let n=e.rawText(o.paragraphId);if(n===null||o.offset>n.length)return false}return true}function Ko(t,e,o){let n=e,i=o;for(;n<i&&Vo.test(t[n]);)n+=1;for(;i>n&&Vo.test(t[i-1]);)i-=1;return [n,i]}function Me(t,e){let o=Ha$1(t,e);if(!o||o.kind!=="paragraph")return [];let n=Se(o);return th(o).flatMap(i=>{let s=n.find(c=>c.node.id===i.fieldNodeId),l=Ha$1(t,i.fieldNodeId);return s?[{paragraphId:e,fieldNodeId:i.fieldNodeId,code:i.instruction,start:s.start,end:s.end,rewritable:i.rewritable,locked:!!l&&ie(l,"fldLock")===true}]:[]})}function zo(t){let o=xa$1(`<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body><w:p><w:fldSimple w:instr="${t==="PAGE"?"PAGE":"NUMPAGES"}"><w:r><w:t/></w:r></w:fldSimple></w:p></w:body></w:document>`,{name:"/word/document.xml",contentType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"});if(!o.ok)throw new Error("could not build a page field");let n=o.part.root.children.find(s=>s.kind==="body"),i=n&&Bd(n)[0];if(!i||i.kind!=="paragraph")throw new Error("could not build a page field paragraph");return i}var dt=(t,e="unsupported-content")=>({ok:false,error:{code:e,message:t}});function Go(t,e,o,n,i){if(t.op==="getFields"||t.op==="insertField"){let A=K(t.span,e,o),g=ot(t.span,e,o);if(!A.ok||!g.ok)return dt("that field range no longer exists","invalid-handle");let x=g.value;if(t.op==="getFields")return {ok:true,kind:"query",value:{kind:"handles",handles:Ut(A.value,x).flatMap(F=>Me(x.part,F.paragraphId).filter(z=>z.start>=F.start&&z.end<=F.end)).map(F=>e.field(F.paragraphId,F.fieldNodeId,x.story))}};if(!A.value)return dt("insert a paragraph before inserting a field");if(t.removeFormatting!==void 0&&t.removeFormatting!==false)return dt("removeFormatting is not supported");if(t.text!==void 0&&typeof t.text!="string")return dt("field text must be a string");if(t.fieldType!==void 0&&typeof t.fieldType!="string")return dt("field type must be a string");let k=t.fieldType??"Empty",b=null;if(k==="Page"||k==="NumPages"){if(t.text!==void 0&&t.text.trim()!=="")return dt("field switches are not supported");b=k==="Page"?"PAGE":"NUMPAGES";}else k==="Empty"&&(b=yh(t.text??""));if(!b)return dt("only PAGE and NUMPAGES fields are supported");let{start:v,end:S}=A.value;if(!["Before","After","Start","End","Replace"].includes(t.location))return dt("unsupported field insert location");if(t.location==="Replace"&&v.paragraphId!==S.paragraphId)return dt("field replacement requires one paragraph");let w=t.location==="After"||t.location==="End"?S:v,H=n(x,w.paragraphId);if(H)return H;let E=[];return t.location==="Replace"&&S.offset>v.offset&&E.push({op:"deleteText",paragraphId:v.paragraphId,start:v.offset,end:S.offset}),E.push({op:"insertFragment",paragraphId:w.paragraphId,offset:w.offset,blocks:[zo(b)],lastMarkCovered:false}),{ok:true,kind:"command",story:x.story,ops:E,answer:j=>{let F=j.story(x.story)?.part,z=F&&Me(F,w.paragraphId).find(C=>C.start===w.offset);if(!z)throw new Error("inserted field was not committed");return {kind:"handle",handle:e.field(w.paragraphId,z.fieldNodeId,x.story)}}}}let s=e.resolve(t.field,"field");if(!s||s.kind!=="field")return dt("that is not a field handle","invalid-handle");let l=o.story(s.story),c=l&&Me(l.part,s.paragraphId).find(A=>A.fieldNodeId===s.fieldNodeId);if(!l||!l.has(s.paragraphId)||!c)return dt("that field no longer exists","invalid-handle");if(t.op==="getField")return {ok:true,kind:"query",value:{kind:"field",field:{code:c.code}}};if(c.locked||Je(l.part,s.fieldNodeId).content||Me$1(l.part,s.fieldNodeId))return dt("field is protected");let u=n(l,s.paragraphId,t.op==="updateFieldResult");if(u)return u;let m=[];if(t.op==="deleteField")m.push({op:"deleteText",paragraphId:s.paragraphId,start:c.start,end:c.end});else if(t.op==="setFieldCode"){if(!yh(c.code)||!yh(t.code))return dt("only PAGE and NUMPAGES code writes are supported");m.push({op:"setFieldCode",paragraphId:s.paragraphId,fieldNodeId:s.fieldNodeId,code:t.code});}else {let A=yh(c.code);if(!A||!c.rewritable)return dt("this field result cannot be evaluated","unsupported-capability");let g=i?.(l.story,s.paragraphId,s.fieldNodeId);if(!g||!Number.isInteger(g.pageNumber)||g.pageNumber<1||!Number.isInteger(g.pageCount)||g.pageCount<1)return dt("field update requires actual semantic pagination","unsupported-capability");let x=A==="PAGE"?g.pageNumberText??String(g.pageNumber):String(g.pageCount);m.push({op:"refreshFieldResults",updates:[{paragraphId:s.paragraphId,fieldNodeId:s.fieldNodeId,text:x}]});}return {ok:true,kind:"command",story:l.story,ops:m,answer:()=>({kind:"applied"})}}var it=(t,e)=>({ok:false,error:{code:t,message:e,detail:e}}),$t=t=>({ok:true,kind:"query",value:t}),Na=new Set(["getTables","getTable","getTableRows","getTableCells","getTableCell","getTableCellProperties","getTableCellBody","updateTable","updateTableCell","insertTable"]);function ce(t){let e=new Set,o=[t];for(;o.length;){let n=o.pop();n.kind==="paragraph"&&e.add(n.id),n.kind!=="textValue"&&o.push(...n.children);}return e}function Xo(t,e){let o=ce(t);return [...ce(e)].filter(n=>!o.has(n)).length}function Ea(t,e){let o=[{node:t}];for(;o.length;){let{node:n,table:i}=o.pop();if(n.id===e)return i;if(n.kind==="textValue")continue;let s=n.kind==="table"?n:i;for(let l of n.children)o.push({node:l,table:s});}}function Yo(t){let e=t.package&&nf(t.package);return e?[...mf(e).values()].filter(o=>o.type==="table"):[]}function Jo(t,e){if(!Na.has(t.op))return null;let{handles:o,reads:n}=e;if(t.op==="getTables"||t.op==="insertTable"){let g=t.op==="getTables"?t.scope:t.span,x=ot(g,o,n);if(!x.ok)return it(x.code,x.detail);let k=K(g,o,n);if(!k.ok)return it(k.code,k.detail);let b=x.value;if(t.op==="getTables"){let E=k.value,j=Qi(b.root).filter(F=>{if("body"in g)return true;if(!E)return false;let z=[...ce(F)].sort((Z,et)=>b.indexOf(Z)-b.indexOf(et)),C=z[0],D=z[z.length-1];return !C||!D?false:b.indexOf(C)>=E.start.index&&b.indexOf(D)<=E.end.index});return $t({kind:"handles",handles:j.map(F=>o.table(F.id,b.story))})}if(!k.value)return it("invalid-offset","empty-table-insertion-range");if(!["Before","After"].includes(t.location))return it("unsupported-content","table-insertion-location");let v=t.location==="Before"?k.value.start:k.value.end,S=Ui(b,v.paragraphId,v.offset,t.rowCount,t.columnCount,t.values);if(!S.ok)return it("unsupported-content",S.reason);let w=e.admitWrite(b,Xo(b.part.root,S.resultPart.root),[v.paragraphId]);if(w)return w;let H=new Set(Qi(b.root).map(E=>E.id));return {ok:true,kind:"command",story:b.story,ops:[{op:"authorTable",action:{kind:"insert",paragraphId:v.paragraphId,offset:v.offset,rowCount:t.rowCount,columnCount:t.columnCount,...t.values?{values:t.values}:{}}}],answer:E=>{let j=E.story(b.story),F=j&&Qi(j.root).find(z=>!H.has(z.id));return F?{kind:"handle",handle:o.table(F.id,b.story)}:{kind:"applied"}}}}let i=t.op==="getTableCells"?"tableRow":"cell"in t?"tableCell":"table",s=t.op==="getTableCells"?t.row:"cell"in t?t.cell:"table"in t?t.table:{kind:"document",ref:""},l=o.resolve(s,i);if(!l||!("nodeId"in l)||!("story"in l))return it("invalid-handle","unknown-table-object");let c=n.story(l.story);if(!c)return it("invalid-handle","missing-table-story");let u=Ha$1(c.part,l.nodeId);if(!u||u.kind!==i)return it("invalid-handle","deleted-table-object");let m=i==="table"?u:Ea(c.root,l.nodeId);if(!m)return it("invalid-handle","missing-parent-table");let A=Ri(c,m.id);if(!A)return it("unsupported-content","unsupported-table-topology");switch(t.op){case "getTable":return $t({kind:"table",table:{values:A.values,headerRowCount:A.headerRowCount,rowCount:A.rowIds.length,columnCount:A.columnCount,style:Yo(n).find(g=>g.styleId===A.styleId)?.name??""}});case "getTableRows":return $t({kind:"handles",handles:A.rowIds.map(g=>o.tableRow(g,c.story))});case "getTableCells":{let g=A.rowIds.indexOf(l.nodeId);return $t({kind:"handles",handles:(A.cellIds[g]??[]).map(x=>o.tableCell(x,c.story))})}case "getTableCell":{if(!Number.isInteger(t.rowIndex)||!Number.isInteger(t.cellIndex))return it("invalid-offset","invalid-cell-index");let g=A.cellIds[t.rowIndex]?.[t.cellIndex];return g?$t({kind:"handle",handle:o.tableCell(g,c.story)}):it("invalid-handle","cell-not-found")}case "getTableCellBody":return $t({kind:"handle",handle:o.body(c.story,l.nodeId)});case "getTableCellProperties":{let g=Si(c,m.id,l.nodeId);return g?$t({kind:"tableCell",cell:{value:g.value,columnWidth:g.columnWidth,shadingColor:g.shadingColor,verticalAlignment:g.verticalAlignment}}):it("invalid-handle","cell-not-found")}case "updateTable":case "updateTableCell":{let g=t.op==="updateTable"?t.mutation:{...t.properties,kind:"cell",cellId:l.nodeId};if(g.kind==="properties"&&g.styleId!==void 0){let v=g.styleId;if(typeof v!="string"||v.trim().length===0)return it("unsupported-content","invalid-table-style-name");let S=Yo(n).find(w=>w.name?.trim().toLowerCase()===v.trim().toLowerCase());if(!S)return it("unsupported-content","table-style-not-defined");g={...g,styleId:S.styleId};}let x=Ti(c,m.id,g);if(!x.ok)return it("unsupported-content",x.reason);let k=e.admitWrite(c,Xo(c.part.root,x.resultPart.root),g.kind==="values"?[...ce(m)]:g.kind==="cell"&&g.value!==void 0?[...ce(u)]:[]);if(k)return k;let b=new Set(A.rowIds);return {ok:true,kind:"command",story:c.story,ops:[{op:"authorTable",action:{kind:"existing",tableId:m.id,mutation:g}}],answer:v=>{if(g.kind!=="addRows")return {kind:"applied"};let S=v.story(c.story);return {kind:"handles",handles:((S&&Ri(S,m.id))?.rowIds??[]).filter(H=>!b.has(H)).map(H=>o.tableRow(H,c.story))}}}}default:return it("unsupported-content","unknown-table-operation")}}var Qo=t=>({ok:false,error:{code:"unsupported-content",message:t}});function La(t){if(t.op==="getText")return t.target;if("body"in t)return t.body;if(t.op==="insertText"&&"body"in t.at)return t.at.body;if(t.op==="replaceSpan"&&"body"in t.span)return t.span.body;if(t.op==="insertParagraph"&&"body"in t.anchor)return t.anchor.body}function Zo(t,e,o){let n=La(t);if(!n)return null;let i=e.handles.resolve(n,"body");if(!i||i.kind!=="body"||i.story.kind!=="header"&&i.story.kind!=="footer")return null;let s=i.story,l=e.reads.package;if(!l||e.reads.story(s))return null;if(!e.reads.sections()[s.sectionIndex])return Qo("that section no longer exists");if(t.op==="getText")return {ok:true,kind:"query",value:{kind:"text",text:""}};if(t.op==="getParagraphs"||t.op==="getLists")return {ok:true,kind:"query",value:{kind:"handles",handles:[]}};if(t.op!=="insertText"&&t.op!=="replaceSpan"&&t.op!=="insertParagraph")return null;let c=m=>{let A=Ff(m,{op:"createHeaderFooter",sectionIndex:s.sectionIndex,kind:s.kind,variant:s.variant,...s.variant==="first"?{titlePage:true}:{},...s.variant==="even"?{evenAndOddHeaders:true}:{}});if(!A.ok||!A.createdPartName)return null;let g=ue(A.package),x=o(g),k=x.plan(t);if(!k.ok||k.kind!=="command"||k.relate||k.lifecycle||k.packageEdits?.length)return null;let b=A.package.parts.get(A.createdPartName);if(!b)return null;for(let S of k.ops){let w=Oi(b,S);if(!w.ok)return null;b=w.part;}let v=gc(A.package,b);return x.settle(ue(v)).ok?{pkg:v,planner:x,step:k}:null},u=c(l);return u?{ok:true,kind:"command",story:{kind:"body"},ops:[],solitary:true,packageEdits:[m=>{let A=c(m);if(!A)throw new Error("header/footer creation changed during transaction");return u=A,A.pkg}],answer:m=>u.step.answer(m)}:Qo("cannot create this header or footer with that content")}var Ha=20*1024*1024;function Fa(t){if(typeof t!="string"||t.length===0||t.length>Math.ceil(Ha/3)*4||t.length%4!==0)return null;let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=t.endsWith("==")?2:t.endsWith("=")?1:0,n=new Uint8Array(t.length/4*3-o),i=0;for(let s=0;s<t.length;s+=4){let l=s+4===t.length,c=l?4-o:4,u=[0,0,0,0];for(let A=0;A<c;A++){let g=e.indexOf(t[s+A]);if(g<0)return null;u[A]=g;}if(l&&(o===2&&(u[1]&15)!==0||o===1&&(u[2]&3)!==0))return null;let m=u[0]<<18|u[1]<<12|u[2]<<6|u[3];i<n.length&&(n[i++]=m>>>16),i<n.length&&(n[i++]=m>>>8),i<n.length&&(n[i++]=m);}return n}function qo(t,e,o,n,i){let s=Fa(i);if(!s)return {ok:false,detail:"picture: invalid or oversized base64 (20 MiB maximum)"};let l=ub(s);if(l!=="image/png"&&l!=="image/jpeg")return {ok:false,detail:"picture: only PNG and JPEG are supported"};if(!Ma(s,l))return {ok:false,detail:"picture: truncated raster container"};let c=zb(s,l);if(!c||c.pixelWidth*c.pixelHeight>4e7)return {ok:false,detail:"picture: invalid or oversized raster dimensions"};let u=c.pixelWidth*72/(c.dpiX??96),m=c.pixelHeight*72/(c.dpiY??96),A=_b(u),g=_b(m);if(A===null||g===null)return {ok:false,detail:"picture: invalid physical dimensions"};let x=Xb(t,e,{bytes:s,mime:l});if(!x.ok)return {ok:false,detail:`picture: ${x.reason}`};let k=$b({docPrId:x.docPrId,lockAspectRatio:true,relationshipId:x.relationshipId,extentEmu:{cx:A,cy:g}});return {ok:true,docPrId:x.docPrId,ops:[{op:"insertDrawing",paragraphId:o,offset:n,drawing:k}],packageEdits:[b=>{let v=Xb(b,e,{bytes:s,mime:l});if(!v.ok||v.relationshipId!==x.relationshipId||v.docPrId!==x.docPrId||v.partName!==x.partName)throw new Error("picture allocation changed during the batch");return v.pkg}]}}function tr(t,e){return nb(t).find(o=>o.drawingNodeId===e&&o.kind==="inline"&&o.picture!==null)??null}function er(t){return {width:t.extentEmu.cx/Zb,height:t.extentEmu.cy/Zb,lockAspectRatio:t.locks.changeAspect,altTextDescription:t.description}}function nr(t,e){let o=new Set(nb(t).filter(i=>i.kind==="inline"&&i.picture!==null).map(i=>i.drawingNodeId)),n=[];for(let i of e){let s=Ha$1(t,i.paragraphId);if(!(!s||s.kind!=="paragraph"))for(let l of Se(s))l.start>=i.start&&l.end<=i.end&&o.has(l.node.id)&&n.push(l.node.id);}return n}function or(t,e){let o=[],n=t.drawingNodeId;if(e.lockAspectRatio!==void 0&&typeof e.lockAspectRatio!="boolean")return {ok:false,detail:"lockAspectRatio: not a boolean"};let i=e.lockAspectRatio??t.locks.changeAspect;if(e.lockAspectRatio===false&&o.push({op:"setDrawingLocks",drawingNodeId:n,locks:{changeAspect:false}}),e.width!==void 0||e.height!==void 0){let s=e.width??t.extentEmu.cx/Zb,l=e.height??t.extentEmu.cy/Zb;if(i){let m=t.extentEmu.cx/t.extentEmu.cy;if(e.width!==void 0&&e.height!==void 0&&Math.abs(s/l-m)>1e-6)return {ok:false,detail:"picture: width and height disagree with the locked aspect ratio"};e.width!==void 0&&e.height===void 0&&(l=s/m),e.height!==void 0&&e.width===void 0&&(s=l*m);}let c=_b(s),u=_b(l);if(c===null||u===null)return {ok:false,detail:"picture: dimensions must be finite positive points"};o.push({op:"resizeDrawing",drawingNodeId:n,extentEmu:{cx:c,cy:u}});}if(e.lockAspectRatio===true&&o.push({op:"setDrawingLocks",drawingNodeId:n,locks:{changeAspect:true}}),e.altTextDescription!==void 0){if(typeof e.altTextDescription!="string"||e.altTextDescription.length>32767||!O(e.altTextDescription))return {ok:false,detail:"altTextDescription: invalid XML text or length"};o.push({op:"setDrawingMetadata",drawingNodeId:n,title:t.title,description:e.altTextDescription});}return o.length?{ok:true,ops:o}:{ok:false,detail:"picture: no properties requested"}}function Ma(t,e){if(e==="image/jpeg")return t.length>=4&&t[t.length-2]===255&&t[t.length-1]===217;let o=new DataView(t.buffer,t.byteOffset,t.byteLength),n=8,i=false;for(;n+12<=t.length;){let s=o.getUint32(n);if(s>t.length-n-12)return false;let l=String.fromCharCode(t[n+4],t[n+5],t[n+6],t[n+7]);if(l==="IDAT"&&s>0&&(i=true),n+=s+12,l==="IEND")return i&&s===0&&n===t.length}return false}var vt=(t,e="unsupported-content")=>({ok:false,error:{code:e,message:t}});function rr(t,e,o,n){if(t.op==="getInlinePictures"||t.op==="insertInlinePicture"){let A=K(t.span,e,o),g=ot(t.span,e,o);if(!A.ok||!g.ok)return vt("that picture range no longer exists","invalid-handle");let x=g.value;if(t.op==="getInlinePictures")return {ok:true,kind:"query",value:{kind:"handles",handles:nr(x.part,Ut(A.value,x)).map(j=>e.inlinePicture(j,x.story))}};if(!A.value||!o.package)return vt("insert a paragraph before inserting a picture");let{start:k,end:b}=A.value;if(!["Before","After","Start","End","Replace"].includes(t.location))return vt("unsupported picture insert location");if(t.location==="Replace"&&k.paragraphId!==b.paragraphId)return vt("picture replacement requires a single paragraph");let v=t.location==="After"||t.location==="End"?b:k;if(Je(x.part,v.paragraphId).content||Me$1(x.part,v.paragraphId))return vt("picture insertion is inside protected content");let S=Ha$1(x.part,v.paragraphId);if(S?.kind==="paragraph"){for(let j of Se(S))if((t.location==="Replace"?j.start<b.offset&&j.end>k.offset:j.start<v.offset&&j.end>v.offset)&&(Je(x.part,j.node.id).content||Me$1(x.part,j.node.id)))return vt("picture insertion touches protected content")}let w=n(x,v.paragraphId);if(w)return w;let H=qo(o.package,x.part.name,v.paragraphId,v.offset,t.base64);if(!H.ok)return vt(H.detail);let E=[];return t.location==="Replace"&&b.offset>k.offset&&E.push({op:"deleteText",paragraphId:k.paragraphId,start:k.offset,end:b.offset}),E.push(...H.ops),{ok:true,kind:"command",story:x.story,ops:E,packageEdits:H.packageEdits,answer:j=>{let F=j.story(x.story)?.part,z=F&&nb(F).find(C=>C.docPrId===H.docPrId&&C.kind==="inline");if(!z)throw new Error("inserted picture was not committed");return {kind:"handle",handle:e.inlinePicture(z.drawingNodeId,x.story)}}}}let i=e.resolve(t.picture,"inlinePicture");if(!i||i.kind!=="inlinePicture")return vt("that is not a picture handle","invalid-handle");let s=o.story(i.story),l=s&&tr(s.part,i.drawingNodeId);if(!s||!l)return vt("that inline picture no longer exists","invalid-handle");if(t.op==="getInlinePicture")return {ok:true,kind:"query",value:{kind:"inlinePicture",picture:er(l)}};let c=Ha$1(s.part,i.drawingNodeId);for(;c&&c.kind!=="paragraph";)c=Re(s.part,c.id);if(!c||!s.has(c.id))return vt("picture is outside this story","invalid-handle");let u=n(s,c.id);if(u)return u;let m=t.op==="deleteInlinePicture"?{ok:true,ops:[{op:"deleteDrawing",drawingNodeId:i.drawingNodeId}]}:or(l,t.properties);return m.ok?{ok:true,kind:"command",story:s.story,ops:m.ops,answer:()=>({kind:"applied"})}:vt(m.detail)}function ar(t,e,o,n){let i=x=>({ok:false,error:{code:"unsupported-content",message:x}});if(t.breakType!=="Page"&&t.breakType!=="SectionNext")return i("only Page and SectionNext breaks are supported");if(!["Before","After","Start","End","Replace"].includes(t.location))return i("invalid break insertion location");let s=K(t.span,e,o);if(!s.ok)return {ok:false,error:{code:s.code,message:s.detail}};let l=s.value;if(!l)return i("empty story has no break position");let c=t.location==="After"||t.location==="End"?l.end:l.start,u=o.story(c.story);if(!u)return i("missing story");if(t.location==="Replace"&&l.start.paragraphId!==l.end.paragraphId)return i("break replacement must remain in one paragraph");let m=t.breakType==="SectionNext";if(m&&(u.story.kind!=="body"||ai$1(u.part,c.paragraphId)))return i("section breaks require a body paragraph outside a table");let A=n(u,c.paragraphId,m?1:0);if(A)return A;let g=[];return t.location==="Replace"&&l.end.offset>l.start.offset&&g.push({op:"deleteText",paragraphId:c.paragraphId,start:l.start.offset,end:l.end.offset}),m?g.push({op:"splitParagraph",paragraphId:c.paragraphId,offset:c.offset},{op:"setSectionMark",paragraphId:c.paragraphId,breakType:"nextPage"}):g.push({op:"insertPageBreak",paragraphId:c.paragraphId,offset:c.offset}),{ok:true,kind:"command",story:u.story,ops:g,answer:()=>({kind:"applied"})}}var St=(t,e)=>t.children.find(o=>o.kind!=="textValue"&&o.namespaceUri===da$1&&o.localName===e),It=(t,e)=>t.attributes.find(o=>o.namespaceUri===da$1&&o.localName===e)?.value,je=t=>t.replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;"),dn=t=>typeof t=="string"&&t.length<=255&&!/[\x00-\x08\x0b\x0c\x0e-\x1f\uFFFE\uFFFF]/.test(t),ir={None:"none",Arabic:"decimal",UpperRoman:"upperRoman",LowerRoman:"lowerRoman",UpperLetter:"upperLetter",LowerLetter:"lowerLetter"},sr={Solid:["\uF0B7","Symbol"],Hollow:["o","Courier New"],Square:["\uF0A7","Wingdings"],Diamonds:["\uF076","Wingdings"],Arrow:["\uF0D8","Wingdings"],Checkmark:["\uF0FC","Wingdings"]};function un(t){let e=sf(t,"bullet");if(!e)return null;let o=e.pkg;for(let n=0;n<=8;n+=1)if(!pe(o,e.numId,n)){let i=De(o,e.numId,n,{bullet:n%3===0?"Solid":n%3===1?"Hollow":"Square"});if(!i)return null;o=i;}return {pkg:o,numId:e.numId}}function pe(t,e,o){let n=t.parts.get("/word/numbering.xml")?.root;if(!n)return false;let i=n.children,s=i.find(m=>m.kind!=="textValue"&&m.namespaceUri===da$1&&m.localName==="num"&&It(m,"numId")===e);if(!s)return false;let l=s.children.find(m=>m.kind!=="textValue"&&m.namespaceUri===da$1&&m.localName==="lvlOverride"&&It(m,"ilvl")===String(o));if(l&&St(l,"lvl"))return true;let c=St(s,"abstractNumId"),u=c&&i.find(m=>m.kind!=="textValue"&&m.namespaceUri===da$1&&m.localName==="abstractNum"&&It(m,"abstractNumId")===It(c,"val"));return !!u&&!St(u,"numStyleLink")&&u.children.some(m=>m.kind!=="textValue"&&m.namespaceUri===da$1&&m.localName==="lvl"&&It(m,"ilvl")===String(o))}function cn(t,e){if(!Number.isInteger(t)||t<0||t>8||!e||typeof e!="object")return false;if(e.bullet!==void 0){if(e.numbering!==void 0)return false;if(e.bullet==="Custom"){if(!Number.isInteger(e.charCode)||e.charCode<1||e.charCode>65535||e.charCode>=55296&&e.charCode<=57343||!dn(String.fromCharCode(e.charCode)))return false}else if(!Object.hasOwn(sr,e.bullet))return false;if(e.fontName!==void 0&&(!dn(e.fontName)||!e.fontName.trim()))return false}if(e.numbering!==void 0&&!Object.hasOwn(ir,e.numbering)||e.formatString!==void 0&&(!Array.isArray(e.formatString)||e.formatString.length>32||e.formatString.some(n=>typeof n=="number"?!Number.isInteger(n)||n<0||n>t:!dn(n)||/%[1-9]/.test(n)))||e.startingNumber!==void 0&&(!Number.isInteger(e.startingNumber)||e.startingNumber<0||e.startingNumber>2147483647))return false;for(let n of [e.textIndent,e.bulletNumberPictureIndent])if(n!==void 0&&(!Number.isFinite(n)||Math.abs(n)>1584))return false;let o=["bullet","charCode","fontName","numbering","formatString","startingNumber","textIndent","bulletNumberPictureIndent"];return Object.keys(e).some(n=>!o.includes(n))||e.bullet===void 0&&(e.charCode!==void 0||e.fontName!==void 0)||e.numbering===void 0&&e.formatString!==void 0?false:Object.keys(e).length>0}function De(t,e,o,n){if(!cn(o,n))return null;let i=t.parts.get("/word/numbering.xml");if(!i)return null;let s=i.root.children.find(C=>C.kind!=="textValue"&&C.namespaceUri===da$1&&C.localName==="num"&&It(C,"numId")===e),l=s&&St(s,"abstractNumId");if(!s||!l)return null;let c=i.root.children.find(C=>C.kind!=="textValue"&&C.namespaceUri===da$1&&C.localName==="abstractNum"&&It(C,"abstractNumId")===It(l,"val"));if(!c||St(c,"numStyleLink"))return null;let u=s.children.find(C=>C.kind!=="textValue"&&C.namespaceUri===da$1&&C.localName==="lvlOverride"&&It(C,"ilvl")===String(o)),m=(u&&St(u,"lvl"))??c.children.find(C=>C.kind!=="textValue"&&C.namespaceUri===da$1&&C.localName==="lvl"&&It(C,"ilvl")===String(o));if(m&&St(m,"lvlPicBulletId"))return null;let A=Fa$1(i),g=C=>C.kind==="textValue"?{...C,id:A()}:{...C,id:A(),children:C.children.map(g)},x=C=>{let D=xa$1(`<w:numbering xmlns:w="${da$1}">${C}</w:numbering>`,{name:i.name,contentType:i.contentType}),Z=D.ok?D.part.root.children[0]:void 0;return Z&&Z.kind!=="textValue"?g(Z):null};if(m??=x(`<w:lvl w:ilvl="${o}"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%${o+1}."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="${720*(o+1)}" w:hanging="360"/></w:pPr></w:lvl>`)??void 0,!m)return null;let k=[...m.children],b=["start","numFmt","lvlRestart","pStyle","isLgl","suff","lvlText","lvlPicBulletId","legacy","lvlJc","pPr","rPr"],v=(C,D)=>{let Z=x(D);if(!Z)return false;let et=k.findIndex(_=>_.kind!=="textValue"&&_.namespaceUri===da$1&&_.localName===C);if(et>=0){let _=k[et];k.splice(et,1,{..._,attributes:[..._.attributes.filter(nt=>!Z.attributes.some(at=>at.namespaceUri===nt.namespaceUri&&at.localName===nt.localName)),...Z.attributes]});}else {let _=k.findIndex(nt=>nt.kind!=="textValue"&&nt.namespaceUri===da$1&&b.indexOf(nt.localName)>b.indexOf(C));k.splice(_<0?k.length:_,0,Z);}return true};if(n.startingNumber!==void 0&&!v("start",`<w:start w:val="${n.startingNumber}"/>`))return null;if(n.numbering!==void 0){let C=n.formatString?.map(D=>typeof D=="number"?`%${D+1}`:D).join("")??(n.numbering==="None"?"":`%${o+1}.`);if(!v("numFmt",`<w:numFmt w:val="${ir[n.numbering]}"/>`)||!v("lvlText",`<w:lvlText w:val="${je(C)}"/>`))return null}if(n.numbering!==void 0&&(k=k.map(C=>C.kind!=="textValue"&&C.namespaceUri===da$1&&C.localName==="rPr"?{...C,children:C.children.filter(D=>D.kind==="textValue"||D.namespaceUri!==da$1||D.localName!=="rFonts")}:C)),n.bullet!==void 0){let[C,D]=n.bullet==="Custom"?[String.fromCharCode(n.charCode),n.fontName??"Symbol"]:sr[n.bullet];if(!v("numFmt",'<w:numFmt w:val="bullet"/>')||!v("lvlText",`<w:lvlText w:val="${je(C)}"/>`))return null;let Z=St(m,"rPr"),et=x(`<w:rFonts w:ascii="${je(D)}" w:hAnsi="${je(D)}"/>`);if(!et)return null;let _=Z?.children.filter(ct=>ct.kind==="textValue"||ct.namespaceUri!==da$1||ct.localName!=="rFonts")??[],nt=Z?{...Z,children:[et,..._]}:x("<w:rPr/>");if(!nt)return null;let at=k.findIndex(ct=>ct.kind!=="textValue"&&ct.namespaceUri===da$1&&ct.localName==="rPr");at<0?k.push({...nt,children:[et,..._]}):k[at]={...nt,children:[et,..._]};}if(n.textIndent!==void 0||n.bulletNumberPictureIndent!==void 0){let C=St(m,"pPr"),D=C&&St(C,"ind"),Z=D?.attributes.filter(Q=>Q.namespaceUri!==da$1||!["left","start","firstLine","hanging"].includes(Q.localName))??[],et=n.textIndent===void 0?It(D??m,"left")??"0":String(Math.round(n.textIndent*20)),_=n.bulletNumberPictureIndent,nt=_===void 0?D?.attributes.filter(Q=>Q.namespaceUri===da$1&&["firstLine","hanging"].includes(Q.localName))??[]:[],at=x(`<w:ind w:left="${et}"${_===void 0?"":` w:${_<0?"hanging":"firstLine"}="${Math.abs(Math.round(_*20))}"`}/>`);if(!at)return null;let ct={...at,attributes:[...Z,...nt,...at.attributes]},Mt=C?.children.filter(Q=>Q.kind==="textValue"||Q.namespaceUri!==da$1||Q.localName!=="ind")??[],Et=C??x("<w:pPr/>");if(!Et)return null;let ne=D?C.children.indexOf(D):-1,V=[...Mt],Pt=["contextualSpacing","mirrorIndents","suppressOverlap","jc","textDirection","textAlignment","textboxTightWrap","outlineLvl","divId","cnfStyle","rPr","sectPr","pPrChange"],ht=V.findIndex(Q=>Q.kind!=="textValue"&&Q.namespaceUri===da$1&&Pt.includes(Q.localName));V.splice(ne>=0?ne:ht>=0?ht:V.length,0,ct);let q={...Et,children:V},gt=k.findIndex(Q=>Q.kind!=="textValue"&&Q.namespaceUri===da$1&&Q.localName==="pPr");if(gt>=0)k[gt]=q;else {let Q=k.findIndex(Ot=>Ot.kind!=="textValue"&&Ot.localName==="rPr"&&Ot.namespaceUri===da$1);k.splice(Q<0?k.length:Q,0,q);}}let S=g({...m,children:k}),w=u?.children.filter(C=>C.kind==="textValue"||C.namespaceUri!==da$1||C.localName!=="lvl"&&(n.startingNumber===void 0||C.localName!=="startOverride"))??[],H=u??x(`<w:lvlOverride w:ilvl="${o}"/>`);if(!H)return null;let E={...H,children:[...w,S]},j=[...s.children],F=u?j.indexOf(u):-1;F>=0?j[F]=E:j.push(E);let z=Ma$1(i,s.id,{...s,children:j});return z.ok?gc(t,z.part):null}var te=8;function lr(t){if(!t||t.kind==="textValue")return null;for(let e of t.attributes)if(e.namespaceUri===da$1&&e.localName==="val")return e.value;return null}function Be(t){let e=Qe(Oe(t),"numPr");if(!e)return null;let o=lr(Qe(e,"numId"));if(o===null||!/^\d{1,10}$/.test(o)||o==="0")return null;let n=lr(Qe(e,"ilvl")),i=n===null?0:Number(n);return !Number.isInteger(i)||i<0||i>te?null:{numId:o,level:i}}function Kt(t){let e=new Map;for(let o of t.paragraphIds){let n=t.node(o);if(!n)continue;let i=Be(n);if(!i)continue;let s=e.get(i.numId);s?s.push(o):e.set(i.numId,[o]);}return Object.freeze([...e].map(([o,n])=>Object.freeze({numId:o,paragraphIds:Object.freeze(n)})))}function me(t,e){let o=t.node(e);return o?Be(o):null}var mt=t=>({ok:false,error:{code:"unsupported-content",message:t}});function ja(t,e){if(t.root.namespaceUri!==da$1||t.root.localName!=="styles")return false;let o=[t.root];for(;o.length;){let n=o.pop();if(n.kind!=="textValue"){if(n.namespaceUri===da$1&&n.localName==="numId"&&n.attributes.some(i=>i.namespaceUri===da$1&&i.localName==="val"&&i.value===e))return true;for(let i of n.children)o.push(i);}}return false}function dr(t,e,o,n){let i=o.package;if(!i)return mt("no document");if(t.op==="setListLevelFormat"){let x=e.resolve(t.list,"list");if(!x||x.kind!=="list")return mt("that is not a list");let k=o.story(x.story),b=k&&Kt(k).find(v=>v.numId===x.numId);if(!k||!b)return mt("that list no longer exists");if(!cn(t.level,t.format))return mt("invalid list level format");for(let v of i.parts.values()){if(ja(v,x.numId))return mt("list is referenced by a style");for(let S of yd(v))for(let w of Bd(S.root))if(Be(w)?.numId===x.numId&&!k.has(w.id))return mt("list is shared across stories")}for(let v of b.paragraphIds){if(Je(k.part,v).content||Me$1(k.part,v))return mt("list contains protected content");let S=n(k,v,{numId:x.numId,level:t.level});if(S)return S}return De(i,x.numId,t.level,t.format)?{ok:true,kind:"command",story:k.story,ops:[],packageEdits:[v=>{let S=De(v,x.numId,t.level,t.format);if(!S)throw new Error("list definition changed during transaction");return S}],answer:()=>({kind:"applied"})}:mt("cannot format this list")}let s=pt(t.paragraph,e,o);if(!s.ok)return {ok:false,error:{code:s.code,message:s.detail}};let l=o.story(s.value.story);if(!l)return mt("missing story");let c=n(l,s.value.paragraphId);if(c)return c;let u=null,m=0,A=[];if(t.op==="startNewList"){let x=un(i);if(!x)return mt("cannot create numbering definition");let k=s.value.paragraphId;if(!Oi(l.part,{op:"setListNumbering",paragraphId:k,numId:x.numId,level:0}).ok)return mt("cannot number this paragraph");let v=x.numId;return {ok:true,kind:"command",story:l.story,ops:[],packageEdits:[S=>{let w=un(S),H=w?.pkg.parts.get(l.part.name);if(!w||!H)throw new Error("cannot create numbering definition");let E=Oi(H,{op:"setListNumbering",paragraphId:k,numId:w.numId,level:0});if(!E.ok)throw new Error("cannot number this paragraph");return v=w.numId,gc(w.pkg,E.part)}],answer:()=>({kind:"handle",handle:e.list(v,l.story)})}}else if(t.op==="attachToList"){if(!Number.isSafeInteger(t.listId)||t.listId<=0||!Number.isInteger(t.level)||t.level<0||t.level>8)return mt("invalid list identity or level");if(u=String(t.listId),m=t.level,!pe(i,u,m))return mt("list level is not defined; configure that level first");if(!Kt(l).some(x=>x.numId===u))return mt("that list does not exist in this story")}let g=u;return {ok:true,kind:"command",story:l.story,ops:[{op:"setListNumbering",paragraphId:s.value.paragraphId,numId:t.op==="detachFromList"?"0":u,level:m}],packageEdits:A,answer:()=>g===null?{kind:"applied"}:{kind:"handle",handle:e.list(g,l.story)}}}var pn=Object.freeze({None:"none",Single:"single",Word:"words",Double:"double",Thick:"thick",Dotted:"dotted",DottedHeavy:"dottedHeavy",DashLine:"dash",DashLineHeavy:"dashedHeavy",DashLineLong:"dashLong",DashLineLongHeavy:"dashLongHeavy",DotDashLine:"dotDash",DotDashLineHeavy:"dashDotHeavy",TwoDotDashLine:"dotDotDash",TwoDotDashLineHeavy:"dashDotDotHeavy",Wave:"wave",WaveHeavy:"wavyHeavy",WaveDouble:"wavyDouble"}),ur=[["Yellow","yellow","#FFFF00"],["Lime","green","#00FF00"],["Turquoise","cyan","#00FFFF"],["Pink","magenta","#FF00FF"],["Blue","blue","#0000FF"],["Red","red","#FF0000"],["DarkBlue","darkBlue","#000080"],["Teal","darkCyan","#008080"],["Green","darkGreen","#008000"],["Purple","darkMagenta","#800080"],["DarkRed","darkRed","#800000"],["Olive","darkYellow","#808000"],["Gray","darkGray","#808080"],["LightGray","lightGray","#C0C0C0"],["Black","black","#000000"],["White","white","#FFFFFF"]];function cr(t){return Object.entries(pn).find(([,e])=>e===t)?.[0]??null}function pr(t){return ur.find(([,e])=>e===t)?.[2]??null}function mr(t){let e=[];if(t.underline!==void 0){let o=typeof t.underline=="string"&&Object.hasOwn(pn,t.underline)?pn[t.underline]:void 0;if(!o)return {ok:false,detail:"underline: unsupported underline style"};e.push({localName:"u",attributes:{val:o}});}if(t.strikeThrough!==void 0){if(typeof t.strikeThrough!="boolean")return {ok:false,detail:"strikeThrough: not a boolean"};e.push({localName:"strike",attributes:{val:t.strikeThrough?"1":"0"}});}for(let o of ["subscript","superscript"])if(t[o]!==void 0&&typeof t[o]!="boolean")return {ok:false,detail:`${o}: not a boolean`};if(t.subscript===true&&t.superscript===true)return {ok:false,detail:"subscript and superscript are mutually exclusive"};if(t.highlightColor!==void 0){let o=t.highlightColor,n=typeof o=="string"?ur.find(([i,,s])=>i.toLowerCase()===o.toLowerCase()||s===o.toUpperCase()):void 0;if(o!==null&&!n)return {ok:false,detail:"highlightColor: use an exact Word palette color or null to clear"};e.push({localName:"highlight",attributes:{val:n?.[1]??"none"}});}return {ok:true,value:e}}var Da=31680,Ba=1999,_a=Object.freeze({bold:null,italic:null,underline:null,strikeThrough:null,highlightColor:null,subscript:null,superscript:null,name:null,size:null,color:null});function st(t,e){if(!t)return null;for(let o of t.attributes)if(o.localName===e)return o.value;return null}function Ve(t){if(!t)return null;let e=st(t,"val");if(e===null)return true;let o=e.trim().toLowerCase();return !(o==="0"||o==="false"||o==="off"||o==="none")}function Va(t){if(t===null)return null;let e=t.trim();return /^[0-9a-fA-F]{6}$/.test(e)?`#${e.toUpperCase()}`:null}function Wa(t){if(t===null)return null;let e=Number(t.trim());return !Number.isFinite(e)||e<=0?null:e/2}function zt(t){if(t===null)return null;let e=Number(t.trim());return Number.isFinite(e)?cf(af(e)):null}function Ct(t){if(t.length===0)return null;let e=t[0];if(e===null)return null;for(let o of t)if(o!==e)return null;return e}function yr(t,e,o=ja$1){let n=[];for(let i of e)for(let s of Ba$1(t,i.paragraphId,i.start,i.end,o))n.push(Pe(s));return n.length===0?_a:{bold:Ct(n.map(i=>Ve(Qe(i,"b")))),italic:Ct(n.map(i=>Ve(Qe(i,"i")))),underline:Ct(n.map(i=>cr(st(Qe(i,"u"),"val")))),strikeThrough:Ct(n.map(i=>Ve(Qe(i,"strike")))),highlightColor:Ct(n.map(i=>pr(st(Qe(i,"highlight"),"val")))),subscript:Ct(n.map(i=>gr(i,"subscript"))),superscript:Ct(n.map(i=>gr(i,"superscript"))),name:Ct(n.map(i=>{let s=Qe(i,"rFonts"),l=st(s,"ascii");return l===null||l.length===0?null:l})),size:Ct(n.map(i=>Wa(st(Qe(i,"sz"),"val")))),color:Ct(n.map(i=>Va(st(Qe(i,"color"),"val"))))}}var Ua=Object.freeze({left:"Left",start:"Left",center:"Centered",right:"Right",end:"Right",both:"Justified",distribute:"Justified"}),$a=Object.freeze({Left:"left",Centered:"center",Right:"right",Justified:"both"});function Ka(t){let e=st(Qe(t,"jc"),"val");return e===null?"Unknown":Ua[e.trim().toLowerCase()]??"Unknown"}function hr(t,e,o){let n=Ha$1(t,e);if(!n||n.kind!=="paragraph")return null;let i=Oe(n),s=Qe(i,"spacing"),l=Qe(i,"ind");return {alignment:Ka(i),style:we(t,e,o),firstLineIndent:za(l),leftIndent:zt(st(l,"left")??st(l,"start")),rightIndent:zt(st(l,"right")??st(l,"end")),lineSpacing:zt(st(s,"line")),spaceBefore:zt(st(s,"before")),spaceAfter:zt(st(s,"after")),widowControl:Ve(Qe(i,"widowControl"))}}function za(t){let e=zt(st(t,"hanging"));if(e!==null&&e>0)return -e;let o=zt(st(t,"firstLine"));return o!==null?o:e===null?null:-e}function _e(t,e){if(typeof t!="number"||!Number.isFinite(t))return {ok:false,detail:`${e}: not a measurement`};let o=df(bf(t));return Math.abs(o)>Da?{ok:false,detail:`${e}: out of range`}:{ok:true,value:o}}function kr(t){let e=mr(t);if(!e.ok)return e;let o=e.value;if(t.bold!==void 0){if(typeof t.bold!="boolean")return {ok:false,detail:"bold: not a boolean"};o.push({localName:"b",...t.bold?{}:{attributes:{val:"0"}}});}if(t.italic!==void 0){if(typeof t.italic!="boolean")return {ok:false,detail:"italic: not a boolean"};o.push({localName:"i",...t.italic?{}:{attributes:{val:"0"}}});}if(t.name!==void 0){let n=t.name;if(typeof n!="string"||n.length===0||n.length>128)return {ok:false,detail:"name: not a font name"};if(!O(n))return {ok:false,detail:"name: not valid XML text"};o.push({localName:"rFonts",attributes:{ascii:n,hAnsi:n}});}if(t.size!==void 0){let n=t.size;if(typeof n!="number"||!Number.isFinite(n)||n<=0)return {ok:false,detail:"size: not a positive number of points"};let i=Math.round(n*2);if(i<1||i>Ba)return {ok:false,detail:"size: out of range"};o.push({localName:"sz",attributes:{val:String(i)}}),o.push({localName:"szCs",attributes:{val:String(i)}});}if(t.color!==void 0){let n=t.color;if(typeof n!="string"||!/^#[0-9a-fA-F]{6}$/.test(n.trim()))return {ok:false,detail:"color: not a #RRGGBB triplet"};o.push({localName:"color",attributes:{val:n.trim().slice(1).toUpperCase()}});}return o.length===0&&t.subscript===void 0&&t.superscript===void 0?{ok:false,detail:"no formatting was asked for"}:{ok:true,value:o}}function br(t,e,o,n){let i=Ha$1(t,e);if(!i||i.kind!=="paragraph")return {ok:false,detail:"not a paragraph"};let s=Oe(i),l=[];if(o.style!==void 0){let k=Te(o.style,n);if(!k.ok)return {ok:false,detail:k.detail};l.push({localName:"pStyle",attributes:{val:k.styleId}});}if(o.alignment!==void 0){let k=$a[o.alignment];if(k===void 0)return {ok:false,detail:`alignment: ${String(o.alignment)}`};l.push({localName:"jc",attributes:{val:k}});}let c=Qe(s,"ind"),u=fr(c),m=false;if(o.firstLineIndent!==void 0){let k=_e(o.firstLineIndent,"firstLineIndent");if(!k.ok)return k;delete u.firstLine,delete u.hanging,k.value<0?u.hanging=String(-k.value):u.firstLine=String(k.value),m=true;}for(let[k,b,v]of [["leftIndent","left","start"],["rightIndent","right","end"]]){let S=o[k];if(S===void 0)continue;let w=_e(S,k);if(!w.ok)return w;delete u[v],u[b]=String(w.value),m=true;}m&&l.push({localName:"ind",attributes:u});let A=Qe(s,"spacing"),g=fr(A),x=false;for(let[k,b]of [["spaceBefore","before"],["spaceAfter","after"]]){let v=o[k];if(v===void 0)continue;let S=_e(v,k);if(!S.ok)return S;if(S.value<0)return {ok:false,detail:`${k}: out of range`};g[b]=String(S.value),x=true;}if(o.lineSpacing!==void 0){let k=_e(o.lineSpacing,"lineSpacing");if(!k.ok)return k;if(k.value<=0)return {ok:false,detail:"lineSpacing: out of range"};g.line=String(k.value),g.lineRule??="auto",x=true;}if(x&&l.push({localName:"spacing",attributes:g}),o.widowControl!==void 0){if(typeof o.widowControl!="boolean")return {ok:false,detail:"widowControl: not a boolean"};l.push({localName:"widowControl",...o.widowControl?{}:{attributes:{val:"0"}}});}return l.length===0?{ok:false,detail:"no formatting was asked for"}:{ok:true,value:ta(ra$1(t,e),l)}}function fr(t){let e=Object.create(null);if(!t)return e;for(let o of t.attributes)e[o.localName]=o.value;return e}function mn(t,e){if(e.subscript===void 0&&e.superscript===void 0)return [...t];let o=t.find(i=>i.localName==="vertAlign")?.attributes?.val,n=e.subscript===true?"subscript":e.superscript===true?"superscript":o==="subscript"&&e.subscript===false||o==="superscript"&&e.superscript===false?"baseline":o??"baseline";return ta(t,[{localName:"vertAlign",attributes:{val:n}}])}function gr(t,e){let o=st(Qe(t,"vertAlign"),"val");return o===null?null:o===e}function xr(){let t=false,e=false,o=false,n=false;return {conflict(i){let s=Wt(i),l=rn(i),c=i.op==="deleteComment",u=i.op==="updateFieldResult";return s&&(u&&t&&!n||n&&!u)?{message:"field result updates require a batch without other edits; sync document edits before updating fields",detail:i.op}:l&&t||e&&s?{message:"that command commits on its own and cannot share a batch",detail:i.op}:c&&t&&!o||o&&s&&!c?{message:"comment deletions may share a batch only with other comment deletions",detail:i.op}:null},note(i){Wt(i)&&(t=true,rn(i)&&(e=true),i.op==="deleteComment"&&(o=true),i.op==="updateFieldResult"&&(n=true));},get hasCommands(){return t}}}var Ga=256,Ar=1e4;function fn(t,e){if(t.kind!=="textValue"){for(let o of t.attributes)if(o.namespaceUri===da$1&&o.localName===e)return o.value}}function Xa(t){return t.startsWith("_")}function gn(t){let e=new Map,o=[],n=new Set;for(let i of t.paragraphIds){let s=t.node(i);if(s?.kind!=="paragraph")continue;let l=Ue$1(s),c=u=>{if(u.kind!=="textValue"){if(u.kind==="bookmarkStart"){if(o.length>=Ar||e.size>=Ar)return;let m=fn(u,"id"),A=fn(u,"name");if(m===void 0||A===void 0||A.length===0||A.length>Ga||Xa(A)||n.has(A)||e.has(m))return;let g=l.spanOf(u)?.start??0;e.set(m,{name:A,start:{paragraphId:i,offset:g}});return}if(u.kind==="bookmarkEnd"){let m=fn(u,"id");if(m===void 0)return;let A=e.get(m);if(!A)return;e.delete(m),n.add(A.name);let g=l.spanOf(u)?.start??0;o.push(Object.freeze({name:A.name,start:A.start,end:{paragraphId:i,offset:g}}));return}for(let m of u.children)c(m);}};for(let u of s.children)c(u);}return Object.freeze(o)}function yn(t,e){return gn(t).find(o=>o.name===e)??null}function vr(t,e){let o=t.node(e);if(o?.kind!=="paragraph")return Object.freeze([]);let n=Ue$1(o),i=[],s=(l,c)=>{if(!(l.kind==="textValue"||c>32)){if(Za$1(l)){let u=n.spanOf(l);u&&i.push(Object.freeze({id:l.id,paragraphId:e,start:u.start,end:u.end}));return}for(let u of l.children)s(u,c+1);}};for(let l of o.children)s(l,0);return Object.freeze(i)}function Ir(t,e,o){let n=ab(o,i=>Af(t,e,i));if(n.kind==="external")return n.href;if(n.kind==="internal"){let i=_a$2(o);return i===void 0||i.length===0?null:`#${i}`}return null}function Pr(t,e,o,n,i){let s=Math.min(i?.limit??2e3,2e3),l=[],c=At(e,t),u=c.length-1;for(let[m,A]of c.entries()){if(s<=0)break;let g=t.projectedText(A,i?.projection??"allMarkup");if(!g)continue;let x=g.findOccurrences(n,s,{matchCase:i?.matchCase===true,wholeWord:i?.matchWholeWord===true,...m===0&&e?{from:g.projectedOffset(e.start.offset)}:{},...m===u&&e?{to:g.projectedOffset(e.end.offset)}:{}});for(let k of x.matches){if(m===0&&e&&k.rawStart<e.start.offset||m===u&&e&&k.rawEnd>e.end.offset)continue;let b=o.paragraph(A,t.story);l.push({start:{paragraph:b,offset:k.rawStart},end:{paragraph:b,offset:k.rawEnd}}),s-=1;}}return {ok:true,spans:l}}var Ya={insert:"Insert",delete:"Delete",replace:"Replace",moveFrom:"MovedFrom",moveTo:"MovedTo",format:"Property",paragraphMark:"ParagraphProperty"};function Ja(t){return t.kind==="note"}function Qa(t,e){return e.length===0?!Ja(t.story):e.every(o=>t.has(o.start.paragraphId))}function Za(t){return Object.freeze(Oa$1(t.part).filter(e=>Qa(t,e.ranges)))}function hn(t){let e=[];for(let o of Za(t)){if(o.readOnly)continue;let n=o.structuralChanges?.length===1?o.structuralChanges[0]:void 0,i=o.revisionKind==="structural"?n==="rowInsert"?"Insert":n==="rowDelete"?"Delete":void 0:Ya[o.revisionKind];i!==void 0&&e.push(Object.freeze({id:o.id,type:i,author:o.author,date:o.date??"",item:o}));}return Object.freeze(e)}function qa(t,e){let o=t;for(let n=0;o!==void 0&&n<=64;n+=1){if(o.parentId===void 0)return o.range!==null;o=e.get(o.parentId);}return false}var ti=Object.freeze({items:Object.freeze([]),roots:Object.freeze([]),byId:()=>null,textOf:()=>""});function Or(t,e){let o=t.parts.get(X(t,e.part.name));if(!o)return ti;let n=t.parts.get(Y(t,e.part.name)),i=yg(o),s=n?zg(n):new Map,l=wg(e.part).filter(g=>e.has(g.start.paragraphId)),c=Pa$1(i,l,s),u=new Map(c.map(g=>[g.id,g])),m=c.filter(g=>qa(g,u)),A=new Map(m.map(g=>[g.id,g]));return Object.freeze({items:Object.freeze(m),roots:Object.freeze(m.filter(g=>g.parentId===void 0)),byId:g=>A.get(g)??null,textOf:g=>{let x=A.get(g);return x?Ka$1(x.comment):""}})}var ei=/[\r\n\v\f\u2028\u2029]/;function We(t,e,o){return {code:t,message:e,detail:o}}function Rr(t,e=false){if(typeof t.author!="string"||!t.author.trim()||!O(t.author))return We("unsupported-content","proposals need a non-empty XML-safe author","author");let o=t.op==="proposeInsertion";return !(t.op==="proposeDeletion")&&(typeof t.text!="string"||!e&&!t.text.length||ei.test(t.text)||!O(t.text))?We("unsupported-content","proposals need non-empty inline XML-safe text","text"):o&&t.where!=="Before"&&t.where!=="After"?We("unsupported-content","insertion needs Before or After","where"):null}function Sr(t,e,o,n){let i=Oa$1(t.part),s=new Set;if(i.some(c=>c.revisionKind==="structural"))for(let c=Ia$1(t.part,e);c!==null&&(s.add(c.id),c.id!==t.root.id);c=Ia$1(t.part,c.id));return i.some(c=>{if(c.revisionKind==="structural"){let u=Ca$1(c),m=0;for(let A of u){let g=Ia$1(t.part,A),x=g&&Ia$1(t.part,g.id),k=x?.kind==="tableRow"?"trPr":x?.kind==="tableCell"?"tcPr":null;if(!(!x||!k||Qe(x,k)?.id!==g?.id)){if(s.has(x.id))return true;m+=1;}}if(u.length>0&&m===u.length)return false}return c.ranges.some(u=>{let m=t.indexOf(u.start.paragraphId),A=t.indexOf(u.end.paragraphId),g=t.indexOf(e);if(m<0||A<0||g<m||g>A)return false;let x=g===m?u.start.offset:0,k=g===A?u.end.offset:1/0;return o<=k&&n>=x})})?We("unsupported-revision","proposal touches or overlaps a pending revision","span"):null}function Cr(t,e,o,n,i){let s=(F,z,C)=>({ok:false,error:{code:F,message:z,...C===void 0?{}:{detail:C}}}),l=F=>Nt(F,o),c=F=>({ok:true,kind:"query",value:F}),u=Rr(t,e);if(u)return {ok:false,error:u};let m=t.op==="proposeInsertion",A=t.op==="proposeDeletion",g=K(t.span,o,n);if(!g.ok)return s(g.code,"that span is not a place",g.detail);let x=g.value;if(!x||x.start.paragraphId!==x.end.paragraphId)return s("unsupported-content","proposals require a single paragraph range","span");if(!e&&!m&&x.start.offset===x.end.offset)return s("unsupported-content","deletion and replacement need a non-empty range","span");let k=ot(t.span,o,n);if(!k.ok)return s(k.code,"that story is not a place",k.detail);let b=x.start.paragraphId,v=m&&t.where==="After"?x.end.offset:x.start.offset,S=m?v:x.end.offset;if(e&&!A&&v===S&&t.text==="")return c({kind:"span",span:l({start:x.start,end:x.start})});let w=Sr(k.value,b,v,S);if(w)return {ok:false,error:w};let H=i(k.value,b);if(H)return H;let E={author:t.author.trim(),date:new Date().toISOString()},j=[];return !m&&S>v&&j.push({op:"deleteText",paragraphId:b,start:v,end:S,revision:E}),!A&&t.text.length>0&&j.push({op:"insertText",paragraphId:b,offset:m?v:S,text:t.text,revision:E}),{ok:true,kind:"command",ops:j,story:k.value.story,answer:()=>{if(!e)return {kind:"applied"};let F={...x.start,offset:m?v:S};return {kind:"span",span:l({start:F,end:{...F,offset:F.offset+(A?0:t.text.length)}})}}}}function kn(t,e,o){if("body"in t){let n=rt(t.body,"body",e,o);return n.ok?{ok:true,reads:n.value}:{ok:false,code:n.code,message:"that handle does not name a body",detail:n.detail}}return e.resolve(t.document,"document")?o.body?{ok:true,reads:o.body}:{ok:false,code:"document-unavailable",message:"this host holds no document"}:{ok:false,code:"invalid-handle",message:"that handle does not name a document",detail:"document"}}function ni(t,e){let o=t.op==="acceptAllRevisions",n=e.story.kind==="note"?{scopeRootId:e.root.id}:{};return [o?{op:"acceptAllRevisions",...n}:{op:"rejectAllRevisions",...n}]}function oi(t,e,o){let n=kn({op:"acceptAllRevisions",body:t.body},e,o);if(!n.ok)return n;if(!["accept","reject"].includes(t.action)||t.revisions!==void 0&&!Array.isArray(t.revisions))return {ok:false,code:"unsupported-content",message:"invalid revision batch"};let i=t.revisions===void 0?void 0:[];for(let l of t.revisions??[]){let c=e.resolve(l,"revision");if(!c||c.kind!=="revision"||G(c.story)!==G(n.reads.story))return {ok:false,code:"invalid-handle",message:"revision does not belong to this story"};i.push(`revision-${c.revisionId}`);}let s=_a$1(n.reads.part,t.action,i,n.reads.story.kind==="note"?n.reads.root:void 0);return {ok:true,reads:n.reads,...s}}function ri(t,e,o,n){let i=kn({op:"acceptAllRevisions",body:t},o,n);if(!i.ok)throw new Error("resolved story disappeared");let{part:s,root:l,story:c}=i.reads,u=Oa$1(c.kind==="note"&&l.kind!=="textValue"?{...s,root:l}:s).length;return {kind:"revisionBatch",result:{...e,remaining:u}}}function wr(t,e,o,n){if(t.op==="resolveRevisionBatch"){let l=oi(t,e,o);if(!l.ok)return {ok:false,error:{code:l.code,message:l.message}};let c=n(l.reads);return c||{ok:true,kind:"command",story:l.reads.story,ops:l.ops,answer:u=>ri(t.body,l.result,e,u)}}let i=kn(t,e,o);if(!i.ok)return {ok:false,error:{code:i.code,message:i.message,detail:i.detail}};let s=n(i.reads);return s||{ok:true,kind:"command",story:i.reads.story,ops:ni(t,i.reads),answer:()=>({kind:"applied"})}}function Tr(t,e,o){if(e.revisionKind==="structural"||Hh(t.root).length>0||e.revisionKind==="format"&&Ca$1(e).length>1){let n=_a$1(t.part,o,[Da$1(e)],t.story.kind==="note"?t.root:void 0);return n.result.skipped.length?[]:n.ops}return e.addresses.map(n=>({op:o==="accept"?"acceptRevision":"rejectRevision",revision:n}))}var ai=/[\r\n\u2028\u2029]/u,Er=Object.freeze({kind:"applied"});function ee(t,e,o){return {ok:false,error:Object.freeze(o===void 0?{code:t,message:e}:{code:t,message:e,detail:o})}}function bn(t,e){return ee("unsupported-content",t==="author"?"a comment records who wrote it":t==="date"?"a comment date must be a valid ISO-8601 instant":e==="reply"?"a reply says something":"a comment says something",t)}function xn(t){return P(t.author)?bn("author",t.kind):Q(t.text)?bn("text",t.kind):typeof t.text=="string"&&ai.test(t.text)?ee("unsupported-content",t.kind==="reply"?"a reply is one paragraph in this slice":"a comment is one paragraph in this slice","text"):S(t.date)?bn("date",t.kind):null}function An(t){if(t===void 0)return;let e=R(t);return e.ok?e.value:void 0}function Nr(t,e){let o=Ha$1(t.part,e);for(;o;){if(o.kind==="tableCell"||o.kind!=="textValue"&&o.namespaceUri===da$1&&o.localName==="tc")return o.id;o=Ia$1(t.part,o.id);}return null}function Lr(t,e,o,n){let i=xn({author:t.author,text:t.text,date:t.date,kind:"comment"});if(i)return i;let s=K(t.span,e,o);if(!s.ok)return ee(s.code,"that span is not a place",s.detail);if(s.value===null)return ee("invalid-handle","an empty story has no comment anchor");let l=ot(t.span,e,o);if(!l.ok)return ee(l.code,"that span is not a place",l.detail);let c=s.value;if(Nr(l.value,c.start.paragraphId)!==Nr(l.value,c.end.paragraphId))return ee("unsupported-content","a comment range cannot cross a table-cell boundary");let u=n(l.value);if(u)return u;let m=An(t.date);return {ok:true,kind:"commentWrite",write:{kind:"create",anchor:{paragraphId:c.start.paragraphId,start:c.start.offset,end:c.end.offset,...c.end.paragraphId===c.start.paragraphId?{}:{endParagraphId:c.end.paragraphId}},text:t.text,author:t.author,...m===void 0?{}:{date:m}},story:l.value.story,answer:(g,x)=>x===void 0?Er:{kind:"handle",handle:e.comment(x,l.value.story)}}}function Hr(t,e,o){let n=o(e);if(n)return n;let i=e.story;return {ok:true,kind:"commentWrite",write:{kind:"delete",commentId:t.id,...t.parentId===void 0?{}:{parentCommentId:t.parentId},...i.kind==="note"?{noteId:i.noteId}:{}},story:i,answer:()=>Er}}var ii=1e4;function Fr(t,e){let o=[],n=e.kind==="contentControl"?Hc(e):e;if(!n)return o;for(let i of Lc(n))if(!(i.ancestors.length>0)){if(o.length>=ii)break;o.push(_r(t,i.node));}return o}function Mr(t,e){for(let o of Lc(t.root))if(o.node.id===e)return _r(t,o.node);return null}function jr(t,e){for(let o of Lc(t.root))if(o.node.id===e)return o.node;return null}function Dr(t,e){for(let o of t.paragraphIds){let n=t.node(o);if(!(!n||n.kind!=="paragraph")&&Lc(n).some(i=>i.node.id===e))return n}return null}function Ue(t,e){let o=Vr(e);if(o.length>0){let s=o[0],l=o[o.length-1],c=t.rawText(l);return c===null||!t.has(s)?null:{start:{paragraphId:s,offset:0},end:{paragraphId:l,offset:c.length}}}let n=Dr(t,e.id);if(!n)return null;let i=Ue$1(n).spanOf(e);return i?{start:{paragraphId:n.id,offset:i.start},end:{paragraphId:n.id,offset:i.end}}:null}function si(t,e,o){let n=Dr(t,e.id),i=Hc(e);if(!n||!i)return null;let s={...n,children:i.children},l=Zh(s);return Ne(s,l,o).text}function Br(t,e,o="allMarkup"){if(o==="allMarkup")return Nc(e);let n=si(t,e,o);if(n!==null)return n;let i=Ue(t,e);if(!i)return "";let s=t.indexOf(i.start.paragraphId),l=t.indexOf(i.end.paragraphId);if(s<0||l<s)return "";let c=[];for(let u=s;u<=l;u+=1){let m=t.paragraphIds[u],A=t.projectedText(m,o),g=t.rawText(m);if(!A||g===null)return "";c.push(A.sliceRaw(u===s?i.start.offset:0,u===l?i.end.offset:g.length));}return c.join("\r")}function _r(t,e){return {nodeId:e.id,properties:Jc(e),lock:ni$1(t.part,e.id),paragraphIds:Vr(e)}}function Vr(t){let e=Hc(t);if(!e)return [];let o=[];return Cd(e.children,o,0),o.map(n=>n.id)}function fe(t){let e=t.kind==="contentControl"?Hc(t):t;return e?Lc(e).map(o=>o.node):[]}var Wr=new Set(["unlocked","sdtLocked","contentLocked","sdtContentLocked"]),Ur=new Set(["whole","content","start","end","before","after"]),$r=new Set(["richText","plainText","dropDownList","comboBox","date"]),li=4096;function Kr(t){let e=(i,s)=>({ok:false,code:"unsupported-content",message:i,detail:s});if(typeof t!="object"||t===null||!("kind"in t))return e("a control value states its kind","value");let o=t,n=o.kind;if(n==="text"||n==="listItem"){let i=n==="text"?o.text:o.value;return typeof i!="string"?e("that value is not a string",String(n)):i.length>li?e("that value is too long",String(i.length)):{ok:true,value:n==="text"?{kind:"text",text:i}:{kind:"listItem",value:i}}}if(n==="checkbox"){let i=o.checked;return typeof i!="boolean"?e("a checkbox is checked or not","checked"):{ok:true,value:{kind:"checkbox",checked:i}}}if(n==="date"){let i=o.iso;return typeof i!="string"?e("a date is an ISO-8601 string","iso"):i.length>64?e("that is not a date",String(i.length)):{ok:true,value:{kind:"date",iso:i}}}return e("that is not a value any control accepts",String(n))}var di=new Set(["unlocked","sdtLocked","contentLocked","sdtContentLocked"]),ui=4096,zr=64;function Gr(t){if(t===void 0)return {ok:true,value:null};if(typeof t!="object"||t===null)return {ok:false,field:"payload"};let e=t;for(let o of ["namespaceUri","rootLocalName","nodeId"]){let n=e[o];if(typeof n!="string"||n.length===0||n.length>ui)return {ok:false,field:o}}return typeof e.label!="string"||e.label.length>ba$1?{ok:false,field:"label"}:typeof e.data!="string"||e.data.length===0||e.data.length>aa$1?{ok:false,field:"data"}:{ok:true,value:{namespaceUri:e.namespaceUri,rootLocalName:e.rootLocalName,nodeId:e.nodeId,label:e.label,data:e.data}}}function Xr(t){let e=t.at!==void 0,o=t.span!==void 0;return e===o?{message:"a custom node goes at a position or over a span, not both",detail:e?"at+span":"no-place"}:typeof t.tag!="string"||t.tag.length===0?{message:"a custom node carries its identity in its tag",detail:"tag"}:t.tag.length>zr?{message:`w:tag caps at ${String(zr)} characters; a longer payload belongs in the store`,detail:"tag"}:typeof t.text!="string"||t.text.length===0?{message:"a custom node shows some text",detail:"text"}:t.lock!==void 0&&!di.has(t.lock)?{message:"that is not a lock",detail:String(t.lock)}:null}function Yr(t,e,o,n){return {paragraphId:e.paragraphId,offset:e.offset,...o.offset>e.offset?{replaceUntil:o.offset}:{},tag:t.tag,text:t.text,...t.title===void 0?{}:{alias:t.title},...t.lock===void 0||t.lock==="unlocked"?{}:{lock:t.lock},...n===null?{}:{payload:n}}}function Jr(t,e,o){if(t.span){let i=K(t.span,e,o);return i.ok?i.value?i.value.start.paragraphId!==i.value.end.paragraphId?{code:"unsupported-content",message:"a custom node wraps text inside one paragraph",detail:"multi-paragraph"}:{range:i.value}:{code:"invalid-offset",message:"that story holds nothing to wrap",detail:"empty-story"}:{code:i.code,message:"that span is not a place",detail:i.detail}}let n=qt(t.at,e,o);return n.ok?{range:{start:n.value,end:n.value}}:{code:n.code,message:"that is not a place",detail:n.detail}}var ge=/[\r\n\v\f\u2028\u2029]/,ci=16,pi=64;function mi(t,e,o){return Object.freeze(o===void 0?{code:t,message:e}:{code:t,message:e,detail:o})}function f(t,e,o){return {ok:false,error:mi(t,e,o)}}var tt=Object.freeze({kind:"applied"});function N(t){return {ok:true,kind:"query",value:t}}function vn(t){let{handles:e,capabilities:o}=t,n=t.reads,i=new Map,s=new Map,l=a=>{let p=`${G(a.story)}:${a.root.id}`,y=i.get(p);if(y)return y;let I=new Map,O=a.paragraphIds.map(d=>{let h={id:d};return I.set(d,h),h}),r={externalCreatedCount:0,reads:a,order:O,slotById:I,created:[],restructured:new Set,touched:new Set,textEdits:new Fe,formatted:new Set,selected:new Set,retargets:[]};return i.set(p,r),r},c=[],u=xr(),m=false,A=null,g=a=>A===null?(A=a,null):A===a?null:f("conflicting-operations","one batch writes into one story",`${G(A.reads.story)} then ${G(a.reads.story)}`),x=a=>g(l(a)),k=a=>{let p=n.package;return p===null?null:Or(p,a)},b=a=>{let p=e.resolve(a,"comment");if(!p||p.kind!=="comment")return {ok:false,planned:f("invalid-handle","that handle does not name a comment","comment")};let y=n.story(p.story);if(!y)return {ok:false,planned:f("invalid-handle","that story is not in this document")};let O=k(y)?.byId(p.commentId)??null;return O?{ok:true,reads:y,item:O}:{ok:false,planned:f("invalid-handle","this document no longer holds that comment",p.commentId)}},v=a=>{let p=e.resolve(a,"revision");if(!p||p.kind!=="revision")return {ok:false,planned:f("invalid-handle","that handle does not name a tracked change","revision")};let y=n.story(p.story);if(!y)return {ok:false,planned:f("invalid-handle","that story is not in this document")};let I=hn(y).find(O=>O.id===p.revisionId)??null;return I?{ok:true,reads:y,item:I}:{ok:false,planned:f("invalid-handle","this document no longer holds that tracked change",p.revisionId)}},S=(a,p)=>{let y=a.rawText(p.start.paragraphId),I=a.rawText(p.end.paragraphId);if(y===null||I===null)return null;let O={story:a.story,paragraphId:p.start.paragraphId,index:a.indexOf(p.start.paragraphId),offset:Math.min(p.start.offset,y.length)},r={story:a.story,paragraphId:p.end.paragraphId,index:a.indexOf(p.end.paragraphId),offset:Math.min(p.end.offset,I.length)};return C({start:O,end:r})},w=(a,p)=>a.order.indexOf(p),H=(a,p)=>a.selected.has(p)?f("conflicting-operations","this batch selects a paragraph it also edits",p):null,E=(a,p)=>{let y=H(a,p);return y||(a.restructured.has(p)||a.touched.has(p)?f("conflicting-operations","another operation in this batch already changes that paragraph",p):(a.restructured.add(p),a.touched.add(p),null))},j=(a,p)=>{let y=H(a,p);return y||(a.restructured.has(p)||a.textEdits.has(p)?f("conflicting-operations","another operation in this batch restructures that paragraph",p):(a.touched.add(p),null))},F=(a,p,y)=>{let I=`${y}:${p}`;if(a.formatted.has(I))return f("conflicting-operations","another operation in this batch already writes that formatting",p);let O=j(a,p);return O||(a.formatted.add(I),null)},z=(a,p)=>{let y={id:null};return a.order.splice(p,0,y),a.created.push(y),y},C=a=>Nt(a,e),D=a=>a===null?null:n.story(a.start.story),Z=a=>a===void 0||a==="allMarkup"||a==="original"||a==="model",et=(a,p,y,I)=>{if(!Z(I?.projection))return f("unsupported-content","unknown text projection","projection");if(I?.matchWildcards===true)return f("unsupported-capability","wildcard search is not implemented","matchWildcards");if(I?.ignorePunct===true)return f("unsupported-capability","ignoring punctuation is not implemented","ignorePunct");if(I?.ignoreSpace===true)return f("unsupported-capability","ignoring whitespace is not implemented","ignoreSpace");if(!Xa$1(y))return f("unsupported-content","that is not a query this host will scan for","text");let O=I?.limit;if(O!==void 0&&(!Number.isInteger(O)||O<0))return f("invalid-offset","limit must be a non-negative integer",String(O));let r=Pr(a,p,e,y,I);return N({kind:"spans",spans:r.spans})},_=(a,p,y,I=false)=>{let O=p.start.paragraphId,r=a.textEdits.has(O)?H(a,O):a.touched.has(O)?f("conflicting-operations","text edits cannot share a paragraph with other edits",O):j(a,O);return r||Do(a.textEdits,p,y,e,I)},nt=(a,p,y,I=false)=>{if(typeof y!="string"||ge.test(y))return f("unsupported-content","insertText needs text without paragraph marks","text");let O=g(a);if(O)return O;let r=t.replacementLanding?.(p.paragraphId,p.offset,p.offset)!=null,d=!r&&jo(a.reads.part,p.paragraphId,p.offset,y);if(d)return d;if(!r&&ln(a.reads.part,p.paragraphId,p.offset))return _(a,{start:p,end:p},y,I);let h=E(a,p.paragraphId);return h||{ok:true,kind:"command",ops:y.length?[{op:"insertText",paragraphId:p.paragraphId,offset:p.offset,text:y}]:[],story:a.reads.story,answer:()=>({kind:"span",span:C({start:p,end:{...p,offset:p.offset+y.length}})})}},at=(a,p,y)=>{let I=a.reads;if(typeof y!="string")return f("unsupported-content","replaceSpan needs text","text");if(ge.test(y))return f("unsupported-content","text carrying a paragraph mark is not written by this host","paragraph-mark-in-text");let O=At(p,I),r=p.start.paragraphId,d=[],h=g(a);if(h)return h;let P=O.length===1?p.end.offset:(I.rawText(r)??"").length,R=t.replacementLanding?.(r,p.start.offset,P);if(O.length===1&&R==null&&ln(I.part,r,p.start.offset))return _(a,p,y);if(O.length===1){let X=E(a,r);if(X)return X;if(R==null)return _o(I.part,p,y,e);p.end.offset>p.start.offset&&d.push({op:"deleteText",paragraphId:r,start:p.start.offset,end:p.end.offset});}else {for(let M of O){let B=E(a,M);if(B)return B}let X=p.end.paragraphId,U=(I.rawText(r)??"").length;p.start.offset<U&&d.push({op:"deleteText",paragraphId:r,start:p.start.offset,end:U}),p.end.offset>0&&d.push({op:"deleteText",paragraphId:X,start:0,end:p.end.offset});for(let M of O.slice(1,-1))d.push({op:"deleteBlock",blockId:M});d.push({op:"joinParagraphs",firstId:r,secondId:X});for(let M of O.slice(1)){let B=a.slotById.get(M);B&&a.order.splice(w(a,B),1);}}let T=R??p.start.offset;y.length>0&&d.push({op:"insertText",paragraphId:r,offset:T,text:y});let L={...p.start,paragraphId:r,offset:T},$=()=>({kind:"span",span:C({start:L,end:{...L,offset:L.offset+y.length}})});return {ok:true,kind:"command",ops:d,story:a.reads.story,answer:$}},ct=(a,p)=>{let y=a.reads;if(typeof p!="string")return f("unsupported-content","replaceSpan needs text","text");if(ge.test(p))return f("unsupported-content","text carrying a paragraph mark is not written by this host","paragraph-mark-in-text");let I=y.blocks,O=I.filter(M=>M.removable),r=I.filter(M=>!M.removable).flatMap(M=>M.paragraphIds),d=r.length===0?O.find(M=>M.kind==="paragraph"):void 0;if(!d&&r.length===0)return f("invalid-offset","that story holds no paragraph this host can write into","no-top-level-paragraph");let h=g(a);if(h)return h;for(let M of y.paragraphIds){let B=E(a,M);if(B)return B}let P=[],R=(d?[d.id]:[...r]).sort((M,B)=>y.indexOf(M)-y.indexOf(B)),T=R[0],L=(y.rawText(T)??"").length;for(let M of R){let B=(y.rawText(M)??"").length;B>0&&P.push({op:"deleteText",paragraphId:M,start:0,end:B});}for(let M of O)M.id!==d?.id&&P.push({op:"deleteBlock",blockId:M.id});let $=t.replacementLanding?.(T,0,L)??0;p.length>0&&P.push({op:"insertText",paragraphId:T,offset:$,text:p});for(let M of O)if(M.id!==d?.id)for(let B of M.paragraphIds){let kt=a.slotById.get(B);kt&&a.order.splice(w(a,kt),1);}let X={story:y.story,paragraphId:T,index:y.indexOf(T),offset:$},U=()=>({kind:"span",span:C({start:X,end:{...X,offset:$+p.length}})});return {ok:true,kind:"command",ops:P,story:y.story,answer:U}},Mt=(a,p)=>{if(!Array.isArray(p)||p.length<1||p.length>1e4||p.some(I=>typeof I!="string"||ge.test(I)||!O(I)))return f("unsupported-content","replaceStoryBlocks needs 1-10000 valid XML text strings without paragraph marks","paragraphs");let y=g(a);if(y)return y;for(let I of a.reads.paragraphIds){let O=E(a,I);if(O)return O}a.order.splice(0,a.order.length);for(let I=0;I<p.length;I+=1)z(a,I);return {ok:true,kind:"command",ops:[{op:"replaceStoryBlocks",storyRootId:a.reads.root.id,paragraphs:p}],story:a.reads.story,answer:()=>tt}},Et=(a,p,y,I)=>{let O=a.reads;if(typeof I!="string")return f("unsupported-content","insertParagraph needs text","text");if(ge.test(I))return f("unsupported-content","a paragraph mark inside a paragraph\u2019s text is not written by this host","paragraph-mark-in-text");let r=g(a);if(r)return r;let d=E(a,p.paragraphId);if(d)return d;let h=a.slotById.get(p.paragraphId);if(!h)return f("invalid-handle","that paragraph is not in the body");let P=(O.rawText(p.paragraphId)??"").length,R=[];y==="after"?(I.length>0&&R.push({op:"insertText",paragraphId:p.paragraphId,offset:P,text:I}),R.push({op:"splitParagraph",paragraphId:p.paragraphId,offset:P})):(I.length>0&&R.push({op:"insertText",paragraphId:p.paragraphId,offset:0,text:I}),R.push({op:"splitParagraph",paragraphId:p.paragraphId,offset:I.length}));let T=z(a,w(a,h)+1);y==="before"&&a.retargets.push({from:p.paragraphId,slot:T});let L=()=>{let $=y==="after"?T.id:p.paragraphId;return $===null?tt:{kind:"handle",handle:e.paragraph($,O.story)}};return {ok:true,kind:"command",ops:R,story:O.story,answer:L}},ne=(a,p,y,I,O)=>{let r=a.reads;if(!Array.isArray(y)||y.length===0)return f("unsupported-content","split needs at least one delimiter","delimiters");if(y.length>ci)return f("unsupported-content","too many delimiters",String(y.length));for(let B of y){if(typeof B!="string"||B.length===0)return f("unsupported-content","a delimiter must be a non-empty string","delimiters");if(B.length>pi)return f("unsupported-content","that delimiter is too long","delimiters")}let d=g(a);if(d)return d;let h=E(a,p.paragraphId);if(h)return h;let P=a.slotById.get(p.paragraphId);if(!P)return f("invalid-handle","that paragraph is not in the body");let R=r.rawText(p.paragraphId)??"",T=Wo(R,y),L=[],$=[],X=[];if(T.length===0)X.push(R);else if(I){for(let lt of [...T].reverse())L.push({op:"deleteText",paragraphId:p.paragraphId,start:lt.start,end:lt.start+lt.length});let B=0,kt=0;for(let lt of T){let Ke=lt.start-B;$.push(Ke),X.push(R.slice(kt,lt.start)),kt=lt.start+lt.length,B+=lt.length;}X.push(R.slice(kt));}else {let B=0;for(let kt of T){let lt=kt.start+kt.length;$.push(lt),X.push(R.slice(B,lt)),B=lt;}X.push(R.slice(B));}$.length>0&&L.push({op:"splitParagraphMany",paragraphId:p.paragraphId,offsets:$});let U=[P];for(let B=0;B<$.length;B+=1)U.push(z(a,w(a,P)+1+B));let M=B=>{let kt=B.story(r.story),lt=[];return U.forEach((Ke,ea)=>{let ze=Ke.id;if(ze===null)return;let Ge=kt?.rawText(ze)??X[ea]??"",[na,oa]=O?Ko(Ge,0,Ge.length):[0,Ge.length],Rn=e.paragraph(ze,r.story);lt.push({start:{paragraph:Rn,offset:na},end:{paragraph:Rn,offset:oa}});}),{kind:"spans",spans:lt}};return {ok:true,kind:"command",ops:L,story:r.story,answer:M}},V=(a,p)=>{let y=g(a);if(y)return y;let I=E(a,p.paragraphId);if(I)return I;let O=a.slotById.get(p.paragraphId);return O&&a.order.splice(w(a,O),1),{ok:true,kind:"command",ops:[{op:"deleteBlock",blockId:p.paragraphId}],story:a.reads.story,answer:()=>tt}},Pt=(a,p,y)=>{let I=a.reads,O=I.part,r=g(a);if(r)return r;let d=kr(y??{});if(!d.ok)return f("unsupported-content","that is not formatting this host writes",d.detail);let h=[];for(let P of Ut(p,I)){if(P.end<=P.start&&!P.whole)continue;let R=F(a,P.paragraphId,"runs");if(R)return R;for(let T of za$1(O,P.paragraphId,P.start,P.end,d.value.filter(L=>L.localName!=="vertAlign"),t.displayMode))h.push({op:"setRunProperties",paragraphId:P.paragraphId,start:T.start,end:T.end,properties:mn(T.properties,y),...T.targetRunIds?{targetRunIds:T.targetRunIds}:{}});P.whole&&h.push({op:"setParagraphMarkProperties",paragraphId:P.paragraphId,properties:mn(ya$1(O,P.paragraphId,d.value.filter(T=>T.localName!=="vertAlign")),y)});}return h.length===0?f("invalid-offset","that range covers no characters to format","collapsed-range"):{ok:true,kind:"command",ops:h,story:I.story,answer:()=>tt}},ht=(a,p,y)=>{let I=a.reads,O=I.part,r=g(a);if(r)return r;let d=Te(y,I.styles());if(!d.ok)return f("unsupported-content","that is not a style this document has",d.detail);let h={localName:"pStyle",attributes:{val:d.styleId}},P=[];for(let R of At(p,I)){let T=F(a,R,"paragraph");if(T)return T;P.push({op:"setParagraphProperties",paragraphId:R,properties:ta(ra$1(O,R),h)});}return P.length===0?f("invalid-offset","that story holds no paragraph to style","empty-story"):{ok:true,kind:"command",ops:P,story:I.story,answer:()=>tt}},q=(a,p,y)=>{let I=a.reads,O=I.part,r=g(a);if(r)return r;let d=br(O,p.paragraphId,y??{},I.styles());if(!d.ok)return f("unsupported-content","that is not paragraph formatting this host writes",d.detail);let h=F(a,p.paragraphId,"paragraph");return h||{ok:true,kind:"command",ops:[{op:"setParagraphProperties",paragraphId:p.paragraphId,properties:d.value}],story:I.story,answer:()=>tt}},gt=(a,p)=>{let y=n.body;if(!y)return f("document-unavailable","this host holds no document right now");let I=n.sections();if(!I[a])return f("invalid-handle","that section is not in this document");let r=Co(p);if(!r.ok)return f("unsupported-content",r.reason,r.detail);let d=Uo(y,I,a);if(d===null)return f("unsupported-content","that section holds no paragraph to address it by","no-anchor");let h=l(y),P=g(h);return P||{ok:true,kind:"command",ops:[{op:"setSectionProperties",...r.value,anchorParagraphId:d}],story:Ft,answer:()=>tt}},Q=(a,p)=>({ok:true,kind:"command",ops:[{op:"deleteNote",noteKind:a,noteId:p}],story:Ft,lifecycle:true,answer:()=>tt}),Ot=a=>{let p=e.resolve(a,"list");if(!p||p.kind!=="list")return f("invalid-handle","that handle does not name a list","list");let y=n.story(p.story);if(!y)return f("invalid-handle","that story is not in this document");let I=Kt(y).find(O=>O.numId===p.numId);return I?{ok:true,plan:l(y),list:I}:f("invalid-handle","this story numbers nothing with that list",p.numId)},$e=a=>{if(typeof a!="object"||a===null)return f("invalid-handle","that is not a scope a control lives in","scope");let p=a;if("body"in a){let y=rt(p.body,"body",e,n);return y.ok?{reads:y.value,node:y.value.root}:f(y.code,"that handle does not name a body",y.detail)}if("contentControl"in a){let y=Rt(p.contentControl);return "control"in y?{reads:y.reads,node:y.node}:y}return f("invalid-handle","that is not a scope a control lives in","scope")},Rt=a=>{let p=e.resolve(a,"contentControl");if(!p||p.kind!=="contentControl")return f("invalid-handle","that handle does not name a content control","contentControl");let y=n.story(p.story);if(!y)return f("invalid-handle","that story is not in this document");let I=Mr(y,p.nodeId),O=jr(y,p.nodeId);return !I||!O?f("invalid-handle","this document no longer holds that content control"):{reads:y,control:I,node:O}},Qr=(a,p,y)=>{if(!Number.isInteger(y)||y<0||y>te)return f("invalid-offset",`a list level is 0 to ${String(te)}`,String(y));let I=me(a.reads,p);if(!I)return f("unsupported-content","that paragraph is not in a list",p);if(!n.package||!pe(n.package,I.numId,y))return f("unsupported-content","list level is not defined; configure that level first",p);let O=g(a);if(O)return O;let r=F(a,p,"paragraph");return r||{ok:true,kind:"command",ops:[{op:"setListLevel",paragraphId:p,level:y}],story:a.reads.story,answer:()=>tt}},Zr=(a,p,y,I)=>{if(y!=="start"&&y!=="end")return f("unknown-operation","a list takes an item at its start or its end",String(y));let O=a.reads,r=y==="start"?p.paragraphIds[0]:p.paragraphIds[p.paragraphIds.length-1];if(r===void 0)return f("invalid-handle","that list holds no paragraph");let d={story:O.story,paragraphId:r,index:O.indexOf(r)};return Et(a,d,y==="start"?"before":"after",I)},In=(a,p)=>{if(p.start.paragraphId!==p.end.paragraphId)return null;for(let y of vr(a,p.start.paragraphId))if(y.start<=p.start.offset&&y.end>=p.end.offset)return y;return null},qr=(a,p,y)=>{if(typeof y!="string")return f("unsupported-content","a hyperlink target is a string","target");let I=a.reads,O=In(I,p),r=p.start.paragraphId===p.end.paragraphId&&p.start.offset===p.end.offset,d=O&&(p.start.offset!==O.start||p.end.offset!==O.end),h=d?{range:{start:p.start.offset,end:p.end.offset}}:{};if(d){let U=I.node(O.paragraphId),M=U?.kind==="paragraph"?U.children.find(B=>B.id===O.id):void 0;if(r||!M||!xh(M)||U?.kind!=="paragraph"||!U.children.some(B=>B.id===O.id))return f("unsupported-capability","partial hyperlink edits require ordinary text in a paragraph")}if(y.length===0){if(!O)return f("unsupported-content","that text is not a link","no-link");let U=g(a);if(U)return U;let M=j(a,O.paragraphId);return M||{ok:true,kind:"command",ops:[{op:"removeHyperlink",linkId:O.id,...h}],story:I.story,answer:()=>tt}}let P={},R=null;if(y.startsWith("#")){let U=y.slice(1);if(U.length===0||!yn(I,U))return f("unsupported-content","this document declares no such bookmark",y);P={anchor:U};}else {if(yf(y)===null)return f("unsupported-content","this engine will not author that target","target");R=y;}let T=g(a);if(T)return T;let L=U=>R===null?{ok:true,kind:"command",ops:[U(P)],story:I.story,answer:()=>tt}:{ok:true,kind:"command",ops:[],relate:{url:R,ops:M=>[U({relationshipId:M})]},story:I.story,answer:()=>tt};if(O){let U=j(a,O.paragraphId);return U||L(M=>({op:"setHyperlinkTarget",linkId:O.id,...h,...M}))}if(r)return f("unsupported-content","a link with no text has nothing to click","collapsed");if(p.start.paragraphId!==p.end.paragraphId)return f("unsupported-content","a link lives inside one paragraph","crosses-paragraph-mark");let $=j(a,p.start.paragraphId);if($)return $;let X=I.styles().idOf("hyperlink");return L(U=>({op:"insertHyperlink",paragraphId:p.start.paragraphId,start:p.start.offset,end:p.end.offset,...U,...X===null?{}:{styleId:X}}))},Pn=(a,p,y)=>{let I=a.reads;if(!o.selection||!t.select)return f("unsupported-capability","this host has no reader to move","selection");if(y!=="select"&&y!=="start"&&y!=="end")return f("unknown-operation","that is not a selection mode",String(y));let O=At(p,I);for(let r of O)if(a.touched.has(r))return f("conflicting-operations","this batch edits a paragraph the selection covers",r);for(let r of O)a.selected.add(r);return c.push({range:p,mode:y}),{ok:true,kind:"command",ops:[],story:I.story,answer:()=>tt}},On=a=>{let p=e.resolve(a,"bookmark");if(!p||p.kind!=="bookmark")return f("invalid-handle","that handle does not name a bookmark","bookmark");let y=n.story(p.story);if(!y)return f("invalid-handle","that story is not in this document");let I=yn(y,p.name);if(!I)return f("invalid-handle","this document no longer declares that bookmark",p.name);let O=r=>({story:y.story,paragraphId:r.paragraphId,index:y.indexOf(r.paragraphId),offset:r.offset});return {reads:y,range:{start:O(I.start),end:O(I.end)}}},ta$1=(a,p)=>{let y=Zo(a,t,r=>vn({...t,reads:r}));if(y)return p&&y.ok&&y.kind==="command"?f("unsupported-content","header/footer creation cannot be tracked"):y;let I=Jo(a,{handles:e,reads:n,admitWrite:(r,d,h)=>{let P=l(r),R=g(P);if(R)return R;for(let T of h){let L=E(P,T);if(L)return L}return P.externalCreatedCount+=d,null}});if(I)return I;let O=p!==void 0;switch(O&&a.op==="insertText"?a={op:"proposeInsertion",span:{start:a.at,end:a.at},text:a.text,where:"Before",author:p}:O&&a.op==="replaceSpan"&&(a={op:"proposeReplacement",span:a.span,text:a.text,author:p}),a.op){case "getFields":case "getField":case "setFieldCode":case "deleteField":case "updateFieldResult":case "insertField":return Go(a,e,n,(r,d,h)=>{let P=l(r);return g(P)??(h?null:E(P,d))},t.fieldPageContext);case "getInlinePictures":case "getInlinePicture":case "setInlinePicture":case "deleteInlinePicture":case "insertInlinePicture":return rr(a,e,n,(r,d)=>{let h=l(r);return g(h)??E(h,d)});case "insertBreak":return ar(a,e,n,(r,d,h)=>{let P=l(r),R=g(P)??E(P,d);return R||(P.externalCreatedCount+=h),R});case "startNewList":case "attachToList":case "detachFromList":case "setListLevelFormat":return dr(a,e,n,(r,d,h)=>{let P=l(r);return g(P)??F(P,d,h?`list:${h.numId}:${h.level}`:"paragraph")});case "getDocument":return N({kind:"handle",handle:e.document()});case "getBody":return e.resolve(a.document,"document")?n.body?N({kind:"handle",handle:e.body(Ft)}):f("document-unavailable","this host holds no document right now"):f("invalid-handle","that handle does not name a document","document");case "getParagraphs":{let r=rt(a.body,"body",e,n);return r.ok?N({kind:"handles",handles:r.value.paragraphIds.map(d=>e.paragraph(d,r.value.story))}):f(r.code,"that handle does not name a body",r.detail)}case "getRange":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);if(!r.value)return f("invalid-offset","empty story");if(!["Whole","Content","Start","End"].includes(a.location))return f("unsupported-content","unsupported range location");let d=r.value,h=a.location==="Start"?{start:d.start,end:d.start}:a.location==="End"?{start:d.end,end:d.end}:d;return N({kind:"span",span:Nt(h,e)})}case "getSpanParagraphs":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);let d=ot(a.span,e,n);return d.ok?N({kind:"handles",handles:At(r.value,d.value).map(h=>e.paragraph(h,d.value.story))}):f(d.code,"that span is not a place",d.detail)}case "getText":{if(!Z(a.projection))return f("unsupported-content","unknown text projection","projection");if(e.resolve(a.target,"body")){let P=rt(a.target,"body",e,n);return P.ok?N({kind:"text",text:P.value.text(a.projection??"allMarkup")}):f(P.code,"that handle does not name a body",P.detail)}let d=pt(a.target,e,n);if(!d.ok)return f(d.code,"that handle does not name a body or a paragraph",d.detail);let h=n.story(d.value.story);return N({kind:"text",text:h?.paragraphText(d.value.paragraphId,a.projection??"allMarkup")??""})}case "getSpanText":{if(!Z(a.projection))return f("unsupported-content","unknown text projection","projection");let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);let d=ot(a.span,e,n);return d.ok?N({kind:"text",text:Mo(r.value,d.value,an,a.projection??"allMarkup")}):f(d.code,"that span is not a place",d.detail)}case "getParagraphId":{let r=pt(a.paragraph,e,n);if(!r.ok)return f(r.code,"that handle does not name a paragraph",r.detail);let h=n.story(r.value.story)?.paragraph(r.value.paragraphId);return N({kind:"text",text:h?.paraId??""})}case "search":{let r=K(a.scope,e,n);if(!r.ok)return f(r.code,"that is not a scope to search",r.detail);let d=ot(a.scope,e,n);return d.ok?et(d.value,r.value,a.text,a.options):f(d.code,"that is not a scope to search",d.detail)}case "proposeInsertion":case "proposeDeletion":case "proposeReplacement":return Cr(a,O,e,n,(r,d)=>{let h=l(r);return g(h)??E(h,d)});case "insertText":{let r=qt(a.at,e,n);if(!r.ok)return f(r.code,"that is not a place to insert at",r.detail);let d=n.story(r.value.story);return d?nt(l(d),r.value,a.text,"at"in a.at&&a.at.at==="start"):f("invalid-handle","that story is not in this document")}case "replaceSpan":{if("body"in a.span){let h=rt(a.span.body,"body",e,n);return h.ok?ct(l(h.value),a.text):f(h.code,"that handle does not name a body",h.detail)}let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);if(!r.value)return f("invalid-offset","that story holds no paragraph to write into","empty-story");let d=D(r.value);return d?at(l(d),r.value,a.text):f("invalid-handle","that story is not in this document")}case "replaceStoryBlocks":{let r=rt(a.body,"body",e,n);return r.ok?Mt(l(r.value),a.paragraphs):f(r.code,"that handle does not name a body",r.detail)}case "insertParagraph":{let r=He(a.anchor,e,n);if(!r.ok)return f(r.code,"that is not a paragraph to insert beside",r.detail);if(a.where!=="before"&&a.where!=="after")return f("unknown-operation","that is not a place to insert",String(a.where));let d=n.story(r.value.story);return d?Et(l(d),r.value,a.where,a.text):f("invalid-handle","that story is not in this document")}case "splitParagraph":{let r=pt(a.paragraph,e,n);if(!r.ok)return f(r.code,"that handle does not name a paragraph",r.detail);let d=n.story(r.value.story);return d?ne(l(d),r.value,a.delimiters,a.trimDelimiters===true,a.trimSpacing===true):f("invalid-handle","that story is not in this document")}case "getFont":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);let d=ot(a.span,e,n);if(!d.ok)return f(d.code,"that span is not a place",d.detail);let h=Ut(r.value,d.value);return N({kind:"font",font:yr(d.value.part,h,t.displayMode)})}case "setFont":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);if(!r.value)return f("invalid-offset","that story holds no paragraph to format","empty-story");let d=D(r.value);return d?Pt(l(d),r.value,a.font):f("invalid-handle","that story is not in this document")}case "getStyle":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);let d=ot(a.span,e,n);if(!d.ok)return f(d.code,"that span is not a place",d.detail);let h=d.value.part,P=d.value.styles(),R=At(r.value,d.value).map(L=>we(h,L,P)),T=R.length>0&&R.every(L=>L!==null&&L===R[0])?R[0]:null;return N({kind:"style",name:T})}case "setStyle":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);if(!r.value)return f("invalid-offset","that story holds no paragraph to style","empty-story");let d=D(r.value);return d?ht(l(d),r.value,a.name):f("invalid-handle","that story is not in this document")}case "getParagraphFormat":{let r=He(a.paragraph,e,n);if(!r.ok)return f(r.code,"that is not a paragraph",r.detail);let d=n.story(r.value.story);if(!d)return f("document-unavailable","this host holds no document right now");let h=hr(d.part,r.value.paragraphId,d.styles());return h?N({kind:"paragraphFormat",format:h}):f("invalid-handle","that handle does not name a paragraph")}case "setParagraphFormat":{let r=He(a.paragraph,e,n);if(!r.ok)return f(r.code,"that is not a paragraph",r.detail);let d=n.story(r.value.story);return d?q(l(d),r.value,a.format):f("invalid-handle","that story is not in this document")}case "deleteParagraph":{let r=pt(a.paragraph,e,n);if(!r.ok)return f(r.code,"that handle does not name a paragraph",r.detail);let d=n.story(r.value.story);return d?V(l(d),r.value):f("invalid-handle","that story is not in this document")}case "getSections":return e.resolve(a.document,"document")?N({kind:"handles",handles:n.sections().map(r=>e.section(r.index))}):f("invalid-handle","that handle does not name a document","document");case "getPageSetup":{let r=e.resolve(a.section,"section");if(!r||r.kind!=="section")return f("invalid-handle","that handle does not name a section","section");let d=n.sections()[r.index];return d?N({kind:"pageSetup",setup:d.pageSetup}):f("invalid-handle","that section is not in this document")}case "setPageSetup":{let r=e.resolve(a.section,"section");return !r||r.kind!=="section"?f("invalid-handle","that handle does not name a section","section"):gt(r.index,a.setup)}case "getFurniture":{let r=e.resolve(a.section,"section");if(!r||r.kind!=="section")return f("invalid-handle","that handle does not name a section","section");if(a.kind!=="header"&&a.kind!=="footer")return f("unknown-operation","that is not furniture",String(a.kind));let d={kind:a.kind,sectionIndex:r.index,variant:a.variant};return So(d)?n.sections()[r.index]?N({kind:"handle",handle:e.body(d)}):f("invalid-handle","that section no longer exists"):f("unknown-operation","that is not a furniture variant",String(a.variant))}case "getNotes":{if(!e.resolve(a.document,"document"))return f("invalid-handle","that handle does not name a document","document");if(a.noteKind!=="footnote"&&a.noteKind!=="endnote")return f("unknown-operation","that is not a kind of note",String(a.noteKind));let r=a.noteKind,d=n.noteIds(r);return d.ok?N({kind:"handles",handles:d.ids.map(h=>e.note(r,h))}):f("ambiguous-document",`${r} identities are not completely and unambiguously enumerable`,d.reason==="duplicates"?d.duplicateIds.join(","):d.reason)}case "getNoteBody":case "getNoteText":{let r=e.resolve(a.note,"note");if(!r||r.kind!=="note")return f("invalid-handle","that handle does not name a note","note");let d=r,h=n.story(d);return h?a.op==="getNoteText"?N({kind:"text",text:h.text(a.projection)}):N({kind:"handle",handle:e.body(d)}):f("invalid-handle","that note is not in this document",G(d))}case "getNoteKind":{let r=e.resolve(a.note,"note");return !r||r.kind!=="note"?f("invalid-handle","that handle does not name a note","note"):N({kind:"text",text:r.noteKind})}case "deleteNote":{let r=e.resolve(a.note,"note");if(!r||r.kind!=="note")return f("invalid-handle","that handle does not name a note","note");let d=n.noteIds(r.noteKind);return d.ok?d.ids.includes(r.noteId)?Q(r.noteKind,r.noteId):f("invalid-handle","that note is not in this document"):f("ambiguous-document",`${r.noteKind} identities are not completely and unambiguously enumerable`,d.reason==="duplicates"?d.duplicateIds.join(","):d.reason)}case "getLists":{let r=rt(a.body,"body",e,n);return r.ok?N({kind:"handles",handles:Kt(r.value).map(d=>e.list(d.numId,r.value.story))}):f(r.code,"that handle does not name a body",r.detail)}case "getListId":{let r=Ot(a.list);return "list"in r?N({kind:"number",value:Number(r.list.numId)}):r}case "getListById":{let r=rt(a.body,"body",e,n);if(!r.ok)return f(r.code,"that handle does not name a body",r.detail);if(!Number.isInteger(a.id)||a.id<=0)return f("unsupported-content","a list is numbered from one",String(a.id));let d=String(a.id),h=Kt(r.value).find(P=>P.numId===d);return h?N({kind:"handle",handle:e.list(h.numId,r.value.story)}):f("invalid-handle","no list in that story carries that number",d)}case "getListParagraphs":{let r=Ot(a.list);if(!("list"in r))return r;let d=a.level;if(d!==void 0&&(!Number.isInteger(d)||d<0||d>te))return f("invalid-offset",`a list level is 0 to ${String(te)}`,String(d));let h=r.plan.reads,P=d===void 0?r.list.paragraphIds:r.list.paragraphIds.filter(R=>me(h,R)?.level===d);return N({kind:"handles",handles:P.map(R=>e.paragraph(R,h.story))})}case "getParagraphList":{let r=pt(a.paragraph,e,n);if(!r.ok)return f(r.code,"that handle does not name a paragraph",r.detail);let d=n.story(r.value.story);if(!d)return f("invalid-handle","that story is not in this document");let h=me(d,r.value.paragraphId);return h?N({kind:"handle",handle:e.list(h.numId,d.story)}):f("unsupported-content","that paragraph is not in a list",r.value.paragraphId)}case "getListLevel":{let r=pt(a.paragraph,e,n);if(!r.ok)return f(r.code,"that handle does not name a paragraph",r.detail);let d=n.story(r.value.story);if(!d)return f("invalid-handle","that story is not in this document");let h=me(d,r.value.paragraphId);return h?N({kind:"number",value:h.level}):f("unsupported-content","that paragraph is not in a list",r.value.paragraphId)}case "setListLevel":{let r=pt(a.paragraph,e,n);if(!r.ok)return f(r.code,"that handle does not name a paragraph",r.detail);let d=n.story(r.value.story);return d?Qr(l(d),r.value.paragraphId,a.level):f("invalid-handle","that story is not in this document")}case "insertListParagraph":{let r=Ot(a.list);return "list"in r?Zr(r.plan,r.list,a.where,a.text):r}case "getHyperlink":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);let d=ot(a.span,e,n);if(!d.ok)return f(d.code,"that span is not a place",d.detail);let h=n.package;if(!h||!r.value)return N({kind:"text",text:""});let P=In(d.value,r.value);if(!P)return N({kind:"text",text:""});let R=Ha$1(d.value.part,P.id),T=R?Ir(h,d.value.part.name,R):null;return N({kind:"text",text:T??""})}case "setHyperlink":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);if(!r.value)return f("invalid-offset","that story holds no text to link","empty-story");let d=D(r.value);return d?qr(l(d),r.value,a.target):f("invalid-handle","that story is not in this document")}case "getBookmarks":{let r=K(a.scope,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);let d=ot(a.scope,e,n);if(!d.ok)return f(d.code,"that span is not a place",d.detail);let h=d.value,P=r.value,R=P===null?null:new Set(At(P,h)),T=gn(h).filter(L=>{if(!R||!R.has(L.start.paragraphId)&&!R.has(L.end.paragraphId)||P===null)return false;let $=L.start.paragraphId===P.end.paragraphId&&L.start.offset>P.end.offset,X=L.end.paragraphId===P.start.paragraphId&&L.end.offset<P.start.offset;return !$&&!X});return N({kind:"handles",handles:T.map(L=>e.bookmark(L.name,h.story))})}case "getBookmarkName":{let r=e.resolve(a.bookmark,"bookmark");return !r||r.kind!=="bookmark"?f("invalid-handle","that handle does not name a bookmark","bookmark"):N({kind:"text",text:r.name})}case "getBookmarkRange":{let r=On(a.bookmark);return "reads"in r?N({kind:"span",span:C(r.range)}):r}case "getComments":{let r=K(a.scope,e,n);if(!r.ok)return f(r.code,"that scope is not a place",r.detail);let d=ot(a.scope,e,n);if(!d.ok)return f(d.code,"that scope names no story",d.detail);let h=d.value,P=k(h);if(!P)return f("document-unavailable","this host holds no document");let R=r.value,T=P.roots.filter(L=>{if(!R)return true;let $=L.range;if(!$)return false;let X=h.indexOf($.start.paragraphId),U=h.indexOf($.end.paragraphId),M=h.indexOf(R.start.paragraphId),B=h.indexOf(R.end.paragraphId);return U<M||X>B?false:U===M&&X===M&&B===M?$.end.offset>R.start.offset&&$.start.offset<R.end.offset:true});return N({kind:"handles",handles:T.map(L=>e.comment(L.id,h.story))})}case "getCommentReplies":{let r=b(a.comment);return r.ok?N({kind:"handles",handles:r.item.replyIds.map(d=>e.comment(d,r.reads.story))}):r.planned}case "getCommentId":{let r=b(a.comment);return r.ok?N({kind:"text",text:r.item.id}):r.planned}case "getCommentAuthor":{let r=b(a.comment);return r.ok?N({kind:"text",text:r.item.comment.author}):r.planned}case "getCommentDate":{let r=b(a.comment);return r.ok?N({kind:"text",text:r.item.comment.date??""}):r.planned}case "getCommentText":{let r=b(a.comment);if(!r.ok)return r.planned;let d=k(r.reads);return N({kind:"text",text:d?.textOf(r.item.id)??""})}case "getCommentRange":{let r=b(a.comment);if(!r.ok)return r.planned;let d=r.item.range;if(!d||r.item.orphaned)return f("invalid-handle","that comment has no range in this document");let h=S(r.reads,d);return h?N({kind:"span",span:h}):f("invalid-handle","that comment\u2019s range is no longer in the story")}case "getCommentResolved":{let r=b(a.comment);return r.ok?N({kind:"flag",value:r.item.resolved}):r.planned}case "insertComment":return Lr(a,e,n,x);case "setCommentResolved":{let r=b(a.comment);if(!r.ok)return r.planned;if(typeof a.resolved!="boolean")return f("unsupported-content","resolved is a yes or a no",String(a.resolved));let d=g(l(r.reads));return d||{ok:true,kind:"commentWrite",write:{kind:"resolve",commentId:r.item.id,resolved:a.resolved},story:r.reads.story,answer:()=>tt}}case "replyToComment":{let r=b(a.comment);if(!r.ok)return r.planned;let d=xn({author:a.author,text:a.text,date:a.date,kind:"reply"});if(d)return d;let h=r.item.range;if(!h||r.item.orphaned)return f("invalid-handle","that comment has no range to reply over");let P=g(l(r.reads));if(P)return P;let R=r.reads.story,T=An(a.date);return {ok:true,kind:"commentWrite",write:{kind:"reply",parentCommentId:r.item.id,anchor:{paragraphId:h.start.paragraphId,start:h.start.offset,end:h.end.offset,...h.end.paragraphId===h.start.paragraphId?{}:{endParagraphId:h.end.paragraphId}},text:a.text,author:a.author,...T===void 0?{}:{date:T}},story:r.reads.story,answer:(L,$)=>$===void 0?tt:{kind:"handle",handle:e.comment($,R)}}}case "deleteComment":{let r=b(a.comment);return r.ok?Hr(r.item,r.reads,d=>g(l(d))):r.planned}case "getRevisions":{let r=rt(a.body,"body",e,n);if(!r.ok)return f(r.code,"that handle does not name a body",r.detail);let d=r.value;return N({kind:"handles",handles:hn(d).map(h=>e.revision(h.id,d.story))})}case "getRevisionType":{let r=v(a.revision);return r.ok?N({kind:"text",text:r.item.type}):r.planned}case "getRevisionAuthor":{let r=v(a.revision);return r.ok?N({kind:"text",text:r.item.author}):r.planned}case "getRevisionDate":{let r=v(a.revision);return r.ok?N({kind:"text",text:r.item.date}):r.planned}case "getRevisionRange":{let r=v(a.revision);if(!r.ok)return r.planned;let[d]=r.item.item.ranges;if(!d)return f("invalid-handle","that change covers no characters");let h=S(r.reads,d);return h?N({kind:"span",span:h}):f("invalid-handle","that change\u2019s range is no longer in the story")}case "acceptRevision":case "rejectRevision":{let r=v(a.revision);if(!r.ok)return r.planned;let d=l(r.reads),h=g(d);if(h)return h;let P=Tr(r.reads,r.item.item,a.op==="acceptRevision"?"accept":"reject");return P.length?{ok:true,kind:"command",story:r.reads.story,ops:P,answer:()=>tt}:f("unsupported-revision","the table decision has unresolved dependencies")}case "resolveRevisionBatch":case "acceptAllRevisions":case "rejectAllRevisions":return wr(a,e,n,r=>g(l(r)));case "selectSpan":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);if(!r.value)return f("invalid-offset","that story holds no paragraph to select","empty-story");let d=D(r.value);return d?Pn(l(d),r.value,a.mode):f("invalid-handle","that story is not in this document")}case "selectBookmark":{let r=On(a.bookmark);return "reads"in r?Pn(l(r.reads),r.range,a.mode):r}case "getContentControls":{let r=$e(a.scope);return "reads"in r?N({kind:"handles",handles:Fr(r.reads,r.node).map(d=>e.contentControl(d.nodeId,r.reads.story))}):r}case "getContentControlById":{let r=$e(a.scope);if(!("reads"in r))return r;if(!Number.isInteger(a.id))return f("unsupported-content","a control id is a whole number",String(a.id));let d=fe(r.node).find(h=>Jc(h).id===a.id);return d?N({kind:"handle",handle:e.contentControl(d.id,r.reads.story)}):f("invalid-handle","no control in that scope carries that id",String(a.id))}case "getContentControlsByTag":case "getContentControlsByTitle":{let r=$e(a.scope);if(!("reads"in r))return r;let d=a.op==="getContentControlsByTag"?a.tag:a.title;if(typeof d!="string"||d.length===0)return f("unsupported-content","a tag or title to match is required",a.op);let h=fe(r.node).filter(P=>{let R=Jc(P);return a.op==="getContentControlsByTag"?R.tag===d:R.alias===d});return N({kind:"handles",handles:h.map(P=>e.contentControl(P.id,r.reads.story))})}case "getContentControlTag":case "getContentControlTitle":case "getContentControlFileId":case "getContentControlSubtype":case "getContentControlLock":{let r=Rt(a.contentControl);if(!("control"in r))return r;let d=r.control.properties;if(a.op==="getContentControlLock")return N({kind:"text",text:r.control.lock});if(a.op==="getContentControlSubtype")return N({kind:"text",text:d.type});if(a.op==="getContentControlFileId")return N({kind:"text",text:d.id===void 0?"":String(d.id)});let h=a.op==="getContentControlTag"?d.tag:d.alias;return N({kind:"text",text:h??""})}case "getContentControlIsBound":case "getContentControlPlaceholderShown":case "getContentControlTemporary":{let r=Rt(a.contentControl);if(!("control"in r))return r;let d=a.op==="getContentControlIsBound"?r.control.properties.dataBinding!==void 0:a.op==="getContentControlPlaceholderShown"?r.control.properties.showingPlaceholder:r.control.properties.temporary;return N({kind:"flag",value:d})}case "getContentControlText":{let r=Rt(a.contentControl);return "control"in r?N({kind:"text",text:Br(r.reads,r.node,a.projection)}):r}case "getContentControlParagraphs":{let r=Rt(a.contentControl);return "control"in r?N({kind:"handles",handles:r.control.paragraphIds.map(d=>e.paragraph(d,r.reads.story))}):r}case "getContentControlRange":{let r=Rt(a.contentControl);if(!("control"in r))return r;let d=a.location??"whole";if(!Ur.has(d))return f("unsupported-content","that is not a place in a control",d);let h=Ue(r.reads,r.node);if(!h)return f("unsupported-content","that control holds nothing addressable","empty");let P=d==="start"||d==="before"?h.start:h.end,R=d!=="whole"&&d!=="content",T=L=>({story:r.reads.story,paragraphId:L.paragraphId,index:r.reads.indexOf(L.paragraphId),offset:L.offset});return N({kind:"span",span:Nt(R?{start:T(P),end:T(P)}:{start:T(h.start),end:T(h.end)},e)})}case "setContentControlValue":{let r=Rt(a.contentControl);if(!("control"in r))return r;let d=Kr(a.value);if(!d.ok)return f(d.code,d.message,d.detail);let h=l(r.reads),P=g(h);return P||{ok:true,kind:"command",story:r.reads.story,ops:[{op:"setContentControlValue",controlId:r.control.nodeId,value:d.value}],answer:()=>tt}}case "setContentControlProperties":{let r=Rt(a.contentControl);if(!("control"in r))return r;if(a.tag===void 0&&a.title===void 0&&a.lock===void 0&&a.cannotEdit===void 0&&a.cannotDelete===void 0)return f("unsupported-content","nothing to write","no-properties");if(a.lock!==void 0&&!Wr.has(a.lock))return f("unsupported-content","that is not a lock this schema declares",a.lock);for(let R of [a.cannotEdit,a.cannotDelete])if(R!==void 0&&typeof R!="boolean")return f("unsupported-content","lock flags must be boolean");let d=l(r.reads),h=a.lock;if(a.cannotEdit!==void 0||a.cannotDelete!==void 0){let R=h??s.get(d)?.get(r.control.nodeId)??r.control.properties.lock,T=a.cannotEdit??(R==="contentLocked"||R==="sdtContentLocked"),L=a.cannotDelete??(R==="sdtLocked"||R==="sdtContentLocked");h=T?L?"sdtContentLocked":"contentLocked":L?"sdtLocked":"unlocked";}let P=g(d);if(P)return P;if(h!==void 0){let R=s.get(d)??new Map;R.set(r.control.nodeId,h),s.set(d,R);}return {ok:true,kind:"command",story:r.reads.story,ops:[{op:"setContentControlProperties",controlId:r.control.nodeId,...a.tag===void 0?{}:{tag:a.tag},...a.title===void 0?{}:{alias:a.title},...h===void 0?{}:{lock:h}}],answer:()=>tt}}case "insertContentControlText":{let r=Rt(a.contentControl);if(!("control"in r))return r;if(typeof a.text!="string")return f("unsupported-content","text is required","text");if(a.at!=="replace"&&a.at!=="start"&&a.at!=="end")return f("unsupported-content","that is not a place to insert at",String(a.at));let d=l(r.reads),h=g(d);if(h)return h;let P=Ue(r.reads,r.node);if(!P)return f("unsupported-content","that control holds nothing addressable","empty");let R=a.at==="end"?P.end:P.start,T=()=>({kind:"span",span:C({start:{story:r.reads.story,paragraphId:R.paragraphId,index:r.reads.indexOf(R.paragraphId),offset:R.offset},end:{story:r.reads.story,paragraphId:R.paragraphId,index:r.reads.indexOf(R.paragraphId),offset:R.offset+a.text.length}})});return a.at==="replace"?{ok:true,kind:"command",story:r.reads.story,ops:[{op:"setContentControlValue",controlId:r.control.nodeId,value:{kind:"text",text:a.text}}],answer:T}:{ok:true,kind:"command",story:r.reads.story,ops:a.text.length===0?[]:[{op:"insertText",paragraphId:R.paragraphId,offset:R.offset,text:a.text,inside:r.node.id}],answer:T}}case "deleteContentControl":{let r=Rt(a.contentControl);if(!("control"in r))return r;if(typeof a.keepContent!="boolean")return f("unsupported-content","keepContent is required","keepContent");let d=l(r.reads),h=g(d);return h||{ok:true,kind:"command",story:r.reads.story,ops:[{op:"removeContentControl",controlId:r.control.nodeId,keepContent:a.keepContent}],answer:()=>tt}}case "insertContentControl":{let r=K(a.span,e,n);if(!r.ok)return f(r.code,"that span is not a place",r.detail);if(!r.value)return f("invalid-offset","that story holds nothing to wrap","empty-story");let d=D(r.value);if(!d)return f("invalid-handle","that story is not in this document");let h=r.value;if(h.start.paragraphId!==h.end.paragraphId)return f("unsupported-content","wrapping several paragraphs in one control is not supported here","multi-paragraph");if(!$r.has(a.subtype))return f("unsupported-content","that control type cannot be inserted",a.subtype);let P=new Set(fe(d.root).map($=>$.id)),R=l(d),T=g(R);if(T)return T;let L=E(R,h.start.paragraphId);return L||{ok:true,kind:"command",story:d.story,ops:[{op:"insertContentControl",paragraphId:h.start.paragraphId,start:h.start.offset,end:h.end.offset,type:a.subtype,...a.tag===void 0?{}:{tag:a.tag},...a.title===void 0?{}:{alias:a.title}}],answer:$=>{if(!a.returnHandle)return tt;let X=$.story(d.story),U=X&&fe(X.root).find(M=>!P.has(M.id));if(!U)throw new Error("content control insertion did not create a control");return {kind:"handle",handle:e.contentControl(U.id,d.story)}}}}case "insertCustomNode":{let r=Xr(a);if(r)return f("unsupported-content",r.message,r.detail);let d=Gr(a.payload);if(!d.ok)return f("unsupported-content","that payload cannot be written",d.field);let h=Jr(a,e,n);if("code"in h)return f(h.code,h.message,h.detail);let{start:P,end:R}=h.range,T=D(h.range);if(!T)return f("invalid-handle","that story is not in this document");let L=g(l(T));return L||{ok:true,kind:"customNodeWrite",story:T.story,write:Yr(a,P,R,d.value),answer:()=>tt}}default:return f("unknown-operation","this host does not implement that operation",String(a.op))}};return {plan(a,p){if(m&&Wt(a))return f("conflicting-operations","header/footer creation must commit alone");let y=u.conflict(a);if(y)return f("conflicting-operations",y.message,y.detail);let I=ta$1(a,p);if(I.ok&&I.kind==="command"&&I.solitary){if(u.hasCommands)return f("conflicting-operations","header/footer creation must commit alone");m=true;}return I.ok&&u.note(a),I},get hasCommands(){return u.hasCommands},get writeScope(){return A?.reads.scope??null},settle(a){let p=A;if(p){let y=a.story(p.reads.story),I=y&&Ha$1(y.part,p.reads.root.id),O=y&&I&&I.id!==y.root.id?Le(y,I):y;if(!O)return {ok:false,detail:`the story this batch wrote is gone: ${G(p.reads.story)}`};let r=new Set(p.reads.paragraphIds),d=O.paragraphIds.filter(P=>!r.has(P));if(d.length!==p.created.length+p.externalCreatedCount)return {ok:false,detail:`planned ${String(p.created.length+p.externalCreatedCount)} new paragraphs, the transaction made ${String(d.length)}`};p.order.filter(P=>P.id===null).forEach((P,R)=>{P.id=d[R]??null;});for(let P of p.retargets)P.slot.id&&e.retarget(P.from,P.slot.id);}for(let y of c){let I=a.story(y.range.start.story);!I||!$o(y.range,I)||t.select?.(y.range,y.mode);}return {ok:true}}}}var fi=Object.freeze({status:"skipped"});function ut(t,e,o){return Object.freeze(o===void 0?{code:t,message:e}:{code:t,message:e,detail:o})}function gi(t){if(t==="review-module-required"||t==="automation-structural-tracking-unsupported")return ut("unsupported-capability","this edit requires a supported review mode",t);let e=t==="unsupported-revision"||t.startsWith("unsupported-revision:");return ut(e?"unsupported-revision":"transaction-refused",e?"that story contains a tracked change this engine cannot resolve":"the document store refused the transaction",t)}function yt(t,e,o,n){return {ok:false,results:t.map((i,s)=>s===e?{status:"error",error:o}:fi),revision:n,changed:false}}function du(t){let{port:e}=t,o=Object.freeze({...t.capabilities}),n=Fo(),i=new Set,s=false,l={mode:"Off"},c=0,u=null,m=null,A=o.events?e.subscribe(()=>{if(s)return;let b=Object.freeze({revision:e.revision()});if(c>0)u=b;else for(let v of [...i])v(b);}):()=>{},g=b=>{if(m&&m.pkg===b)return m.value;let v=ue(b);return m={pkg:b,value:v},v},x=b=>{let v=Array.isArray(b?.operations)?b.operations:[],S=e.revision();if(s)return yt(v,0,ut("disposed","this host was disposed"),S);if(!o.document)return yt(v,0,ut("unsupported-capability","this host has no document","document"),S);let w=e.currentPackage();if(!w)return yt(v,0,ut("document-unavailable","this host holds no document right now"),S);if(b.expectedRevision!==void 0&&b.expectedRevision!==S)return yt(v,0,ut("stale-revision","the document moved since that revision",`expected ${String(b.expectedRevision)}, at ${S}`),S);let H=vn({handles:n,reads:g(w),capabilities:o,...e.revisionDisplayMode?{displayMode:e.revisionDisplayMode()}:{},...e.replacementLanding?{replacementLanding:e.replacementLanding.bind(e)}:{},...e.fieldPageContext?{fieldPageContext:e.fieldPageContext.bind(e)}:{},...e.select?{select:e.select.bind(e)}:{}}),E=[],j=[],F=null,z=[],C=[],D=null,Z,et=null,_=-1,nt=l;for(let V=0;V<v.length;V+=1){let Pt=v[V];if(e.suggesting?.()&&Pt.op!=="replaceSpan"&&!sn(Pt))return yt(v,V,ut("unsupported-capability","this operation has no supported tracked form in suggesting mode"),S);let ht=Ho(Pt,e.localChangeTracking===true,nt),q=ht?.step??H.plan(Pt,nt.author);if(ht&&(nt=ht.state),!q.ok)return yt(v,V,q.error,S);if(E.push(q),q.kind==="command")if(q.packageEdits&&z.push(...q.packageEdits),_<0&&(_=V),q.lifecycle)F=q.ops[0]??null;else if(q.relate){let gt=q.relate;j.push(Q=>{let Ot=Q(gt.url);return Ot===null?null:gt.ops(Ot)});}else {let{ops:gt}=q;j.push(()=>gt);}else q.kind==="commentWrite"?(_<0&&(_=V),C.push(q.write),D=H.writeScope??{kind:"body"}):q.kind==="customNodeWrite"&&(_<0&&(_=V),et={write:q.write,scope:H.writeScope??{kind:"body"}});}let at=false;if(C.length>0){let V=e.applyCommentWrites(C,D??{kind:"body"});if(!V.ok)return yt(v,_<0?0:_,ut("transaction-refused","the document store refused the comment write",V.reason),S);at=V.changed,Z=V.commentId;}if(et){let V=e.applyCustomNodeWrite(et.write,et.scope);if(!V.ok)return yt(v,_<0?0:_,ut("transaction-refused","the document store refused the custom-node write",V.reason),S);at=V.changed;}if(F){let V=e.applyLifecycle(F);if(!V.ok)return yt(v,_<0?0:_,ut("transaction-refused","the document store refused the transaction",V.reason),S);at=V.changed;}if(j.length>0){let V=e.apply(Pt=>{let ht=[];for(let q of j){let gt=q(Pt);if(gt===null)return null;ht.push(...gt);}return ht},H.writeScope??{kind:"body"},z);if(!V.ok)return yt(v,_<0?0:_,gi(V.reason),S);at=V.changed;}let ct=e.currentPackage();if(!ct)return yt(v,0,ut("document-unavailable","this host holds no document right now"),S);let Mt=g(ct),Et=H.settle(Mt);return Et.ok?(l=nt,{ok:true,results:E.map(V=>({status:"ok",value:V.kind==="query"?V.value:V.kind==="customNodeWrite"?V.answer(Mt):V.answer(Mt,Z)})),revision:e.revision(),changed:at}):yt(v,_<0?0:_,ut("transaction-refused","the transaction did not produce the document the batch planned",Et.detail),e.revision())};return {capabilities:o,revision:()=>e.revision(),execute:b=>{c+=1;try{return x(b)}finally{if(c-=1,c===0&&u){let v=u;u=null;for(let S of [...i])S(v);}}},...e.prepare?{prepare:e.prepare.bind(e)}:{},save(){if(s)return {ok:false,error:ut("disposed","this host was disposed")};if(!o.save)return {ok:false,error:ut("unsupported-capability","this host cannot save","save")};let b=e.save();return b?{ok:true,bytes:b}:{ok:false,error:ut("document-unavailable","this host holds no document right now")}},subscribe(b){return s||!o.events?()=>{}:(i.add(b),()=>{i.delete(b);})},dispose(){s||(s=true,i.clear(),A(),e.dispose(),m=null);}}}
2
- export{ra as a,xi as b,Ai as c,Ce as d,ue as e,Pi as f,aa as g,ia as h,rn as i,Wt as j,du as k};