@arbidocs/blocks 0.4.101 → 0.4.102

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 (180) hide show
  1. package/dist/chunk-6MG62I5B.cjs +272 -0
  2. package/dist/chunk-6MG62I5B.cjs.map +1 -0
  3. package/dist/chunk-EQB3WELX.js +269 -0
  4. package/dist/chunk-EQB3WELX.js.map +1 -0
  5. package/dist/document-tools/AdoptSignatureDialog.d.ts +25 -0
  6. package/dist/document-tools/DocumentToolButtons.d.ts +2 -0
  7. package/dist/document-tools/SignatureRequestBanner.d.ts +18 -0
  8. package/dist/document-tools/index.cjs +175 -0
  9. package/dist/document-tools/index.cjs.map +1 -1
  10. package/dist/document-tools/index.d.ts +3 -1
  11. package/dist/document-tools/index.js +168 -3
  12. package/dist/document-tools/index.js.map +1 -1
  13. package/dist/document-tools/viewer/GuidedSigningViewer.d.ts +26 -0
  14. package/dist/document-tools/viewer/SignatureFieldsOverlay.d.ts +41 -0
  15. package/dist/document-tools/viewer/SignatureRequestEditor.d.ts +26 -0
  16. package/dist/document-tools/viewer/index.cjs +983 -0
  17. package/dist/document-tools/viewer/index.cjs.map +1 -1
  18. package/dist/document-tools/viewer/index.d.ts +3 -0
  19. package/dist/document-tools/viewer/index.js +983 -5
  20. package/dist/document-tools/viewer/index.js.map +1 -1
  21. package/node_modules/@arbidocs/coedit/LICENSE +21 -0
  22. package/node_modules/@arbidocs/coedit/dist/encoding.cjs +751 -0
  23. package/node_modules/@arbidocs/coedit/dist/encoding.cjs.map +1 -0
  24. package/node_modules/@arbidocs/coedit/dist/encoding.d.cts +192 -0
  25. package/node_modules/@arbidocs/coedit/dist/encoding.d.ts +192 -0
  26. package/node_modules/@arbidocs/coedit/dist/encoding.js +716 -0
  27. package/node_modules/@arbidocs/coedit/dist/encoding.js.map +1 -0
  28. package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs +1759 -0
  29. package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs.map +1 -0
  30. package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.cts +39 -0
  31. package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.ts +39 -0
  32. package/node_modules/@arbidocs/coedit/dist/hocuspocus.js +1736 -0
  33. package/node_modules/@arbidocs/coedit/dist/hocuspocus.js.map +1 -0
  34. package/node_modules/@arbidocs/coedit/dist/index.cjs +1692 -0
  35. package/node_modules/@arbidocs/coedit/dist/index.cjs.map +1 -0
  36. package/node_modules/@arbidocs/coedit/dist/index.d.cts +16 -0
  37. package/node_modules/@arbidocs/coedit/dist/index.d.ts +16 -0
  38. package/node_modules/@arbidocs/coedit/dist/index.js +1664 -0
  39. package/node_modules/@arbidocs/coedit/dist/index.js.map +1 -0
  40. package/node_modules/@arbidocs/coedit/dist/server.cjs +1852 -0
  41. package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -0
  42. package/node_modules/@arbidocs/coedit/dist/server.d.cts +43 -0
  43. package/node_modules/@arbidocs/coedit/dist/server.d.ts +43 -0
  44. package/node_modules/@arbidocs/coedit/dist/server.js +1822 -0
  45. package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -0
  46. package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.cts +82 -0
  47. package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.ts +82 -0
  48. package/node_modules/@arbidocs/coedit/dist/template.cjs +1627 -0
  49. package/node_modules/@arbidocs/coedit/dist/template.cjs.map +1 -0
  50. package/node_modules/@arbidocs/coedit/dist/template.d.cts +125 -0
  51. package/node_modules/@arbidocs/coedit/dist/template.d.ts +125 -0
  52. package/node_modules/@arbidocs/coedit/dist/template.js +1612 -0
  53. package/node_modules/@arbidocs/coedit/dist/template.js.map +1 -0
  54. package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.cts +8 -0
  55. package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.ts +8 -0
  56. package/node_modules/@arbidocs/coedit/package.json +68 -0
  57. package/node_modules/@docx-editor.dev/core/LICENSE +201 -0
  58. package/node_modules/@docx-editor.dev/core/README.md +125 -0
  59. package/node_modules/@docx-editor.dev/core/THIRD_PARTY_NOTICES.md +56 -0
  60. package/node_modules/@docx-editor.dev/core/dist/automation.cjs +1 -0
  61. package/node_modules/@docx-editor.dev/core/dist/automation.d.ts +162 -0
  62. package/node_modules/@docx-editor.dev/core/dist/automation.js +1 -0
  63. package/node_modules/@docx-editor.dev/core/dist/binding.cjs +1 -0
  64. package/node_modules/@docx-editor.dev/core/dist/binding.d.ts +164 -0
  65. package/node_modules/@docx-editor.dev/core/dist/binding.js +1 -0
  66. package/node_modules/@docx-editor.dev/core/dist/chunk-2GO5T2JU.cjs +1 -0
  67. package/node_modules/@docx-editor.dev/core/dist/chunk-2RC2EPND.js +3 -0
  68. package/node_modules/@docx-editor.dev/core/dist/chunk-4GBTELJV.cjs +28 -0
  69. package/node_modules/@docx-editor.dev/core/dist/chunk-4R3TEXMN.js +18 -0
  70. package/node_modules/@docx-editor.dev/core/dist/chunk-5CSUYANV.js +1 -0
  71. package/node_modules/@docx-editor.dev/core/dist/chunk-6APGXLBB.cjs +3 -0
  72. package/node_modules/@docx-editor.dev/core/dist/chunk-6AWEKBLB.cjs +1 -0
  73. package/node_modules/@docx-editor.dev/core/dist/chunk-6EYYL7FL.js +1 -0
  74. package/node_modules/@docx-editor.dev/core/dist/chunk-6JIJOZDW.js +1 -0
  75. package/node_modules/@docx-editor.dev/core/dist/chunk-BTQKU64Q.cjs +1 -0
  76. package/node_modules/@docx-editor.dev/core/dist/chunk-E7BQA6UP.js +2 -0
  77. package/node_modules/@docx-editor.dev/core/dist/chunk-EO4C5QJW.cjs +2 -0
  78. package/node_modules/@docx-editor.dev/core/dist/chunk-ETTO6GK3.js +1 -0
  79. package/node_modules/@docx-editor.dev/core/dist/chunk-FIJZIQXA.cjs +18 -0
  80. package/node_modules/@docx-editor.dev/core/dist/chunk-FRXAOVTB.js +28 -0
  81. package/node_modules/@docx-editor.dev/core/dist/chunk-J6BVWIDB.js +2 -0
  82. package/node_modules/@docx-editor.dev/core/dist/chunk-JGNVNT2A.cjs +2 -0
  83. package/node_modules/@docx-editor.dev/core/dist/chunk-K5U2PLDP.cjs +2 -0
  84. package/node_modules/@docx-editor.dev/core/dist/chunk-KKIJG3C6.js +2 -0
  85. package/node_modules/@docx-editor.dev/core/dist/chunk-LWDSDCMO.js +27 -0
  86. package/node_modules/@docx-editor.dev/core/dist/chunk-NBCVVZOM.cjs +1 -0
  87. package/node_modules/@docx-editor.dev/core/dist/chunk-O2AL2HSJ.cjs +1 -0
  88. package/node_modules/@docx-editor.dev/core/dist/chunk-O5INAWZQ.js +1 -0
  89. package/node_modules/@docx-editor.dev/core/dist/chunk-QMLCVPCD.cjs +1 -0
  90. package/node_modules/@docx-editor.dev/core/dist/chunk-RCHS4ZEH.cjs +27 -0
  91. package/node_modules/@docx-editor.dev/core/dist/chunk-RIYSCEFQ.js +2 -0
  92. package/node_modules/@docx-editor.dev/core/dist/chunk-S6J4O5XP.js +1 -0
  93. package/node_modules/@docx-editor.dev/core/dist/chunk-SRPILEWV.cjs +5 -0
  94. package/node_modules/@docx-editor.dev/core/dist/chunk-TSLBZ26X.js +1 -0
  95. package/node_modules/@docx-editor.dev/core/dist/chunk-UKVVUHZL.cjs +1 -0
  96. package/node_modules/@docx-editor.dev/core/dist/chunk-VDNNLG6X.js +2 -0
  97. package/node_modules/@docx-editor.dev/core/dist/chunk-VHAVHCQY.js +7 -0
  98. package/node_modules/@docx-editor.dev/core/dist/chunk-VX43VBAX.cjs +7 -0
  99. package/node_modules/@docx-editor.dev/core/dist/chunk-Z6WBFXJU.js +5 -0
  100. package/node_modules/@docx-editor.dev/core/dist/chunk-ZUHOMK52.cjs +2 -0
  101. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.cjs +1 -0
  102. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.d.ts +270 -0
  103. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.js +1 -0
  104. package/node_modules/@docx-editor.dev/core/dist/collaboration.cjs +1 -0
  105. package/node_modules/@docx-editor.dev/core/dist/collaboration.d.ts +269 -0
  106. package/node_modules/@docx-editor.dev/core/dist/collaboration.js +1 -0
  107. package/node_modules/@docx-editor.dev/core/dist/contracts/document.cjs +1 -0
  108. package/node_modules/@docx-editor.dev/core/dist/contracts/document.d.ts +290 -0
  109. package/node_modules/@docx-editor.dev/core/dist/contracts/document.js +0 -0
  110. package/node_modules/@docx-editor.dev/core/dist/contracts/editor.cjs +1 -0
  111. package/node_modules/@docx-editor.dev/core/dist/contracts/editor.d.ts +22 -0
  112. package/node_modules/@docx-editor.dev/core/dist/contracts/editor.js +1 -0
  113. package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.cjs +1 -0
  114. package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.d.ts +103 -0
  115. package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.js +0 -0
  116. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.cjs +1 -0
  117. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.d.ts +143 -0
  118. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.js +1 -0
  119. package/node_modules/@docx-editor.dev/core/dist/contracts/types.cjs +1 -0
  120. package/node_modules/@docx-editor.dev/core/dist/contracts/types.d.ts +11 -0
  121. package/node_modules/@docx-editor.dev/core/dist/contracts/types.js +0 -0
  122. package/node_modules/@docx-editor.dev/core/dist/custom-node-writes-cvL5rhcD.d.ts +323 -0
  123. package/node_modules/@docx-editor.dev/core/dist/dist-PKZR6RSH.js +2 -0
  124. package/node_modules/@docx-editor.dev/core/dist/document-protection-BAGVGqaP.d.ts +20 -0
  125. package/node_modules/@docx-editor.dev/core/dist/editor-Ci7IZGmG.d.ts +2448 -0
  126. package/node_modules/@docx-editor.dev/core/dist/editor-scope-OHPwVQ5l.d.ts +84 -0
  127. package/node_modules/@docx-editor.dev/core/dist/editor.cjs +1 -0
  128. package/node_modules/@docx-editor.dev/core/dist/editor.css +15 -0
  129. package/node_modules/@docx-editor.dev/core/dist/editor.d.ts +1394 -0
  130. package/node_modules/@docx-editor.dev/core/dist/editor.js +1 -0
  131. package/node_modules/@docx-editor.dev/core/dist/export.cjs +2 -0
  132. package/node_modules/@docx-editor.dev/core/dist/export.d.ts +391 -0
  133. package/node_modules/@docx-editor.dev/core/dist/export.js +2 -0
  134. package/node_modules/@docx-editor.dev/core/dist/failure-NS2lsya4.d.ts +115 -0
  135. package/node_modules/@docx-editor.dev/core/dist/font-resolver-BVQB14qT.d.ts +256 -0
  136. package/node_modules/@docx-editor.dev/core/dist/harfbuzz.wasm +0 -0
  137. package/node_modules/@docx-editor.dev/core/dist/headless-document-view-qH331moE.d.ts +143 -0
  138. package/node_modules/@docx-editor.dev/core/dist/image-resources-BN-hUgCn.d.ts +211 -0
  139. package/node_modules/@docx-editor.dev/core/dist/index-Bsg7oIKP.d.ts +3869 -0
  140. package/node_modules/@docx-editor.dev/core/dist/index.cjs +1 -0
  141. package/node_modules/@docx-editor.dev/core/dist/index.d.ts +53 -0
  142. package/node_modules/@docx-editor.dev/core/dist/index.js +1 -0
  143. package/node_modules/@docx-editor.dev/core/dist/layout-shaping-BEyuiQOk.d.ts +246 -0
  144. package/node_modules/@docx-editor.dev/core/dist/layout.cjs +1 -0
  145. package/node_modules/@docx-editor.dev/core/dist/layout.d.ts +3151 -0
  146. package/node_modules/@docx-editor.dev/core/dist/layout.js +1 -0
  147. package/node_modules/@docx-editor.dev/core/dist/node-module-shim-TTKTT66I.js +1 -0
  148. package/node_modules/@docx-editor.dev/core/dist/note-properties-4Y9o6Gyk.d.ts +68 -0
  149. package/node_modules/@docx-editor.dev/core/dist/omml-equation-CuzBL5DD.d.ts +85 -0
  150. package/node_modules/@docx-editor.dev/core/dist/output.cjs +1 -0
  151. package/node_modules/@docx-editor.dev/core/dist/output.d.ts +97 -0
  152. package/node_modules/@docx-editor.dev/core/dist/output.js +1 -0
  153. package/node_modules/@docx-editor.dev/core/dist/protocol-Bqk4Izjc.d.ts +1651 -0
  154. package/node_modules/@docx-editor.dev/core/dist/review-pane-D9jm8DcY.d.ts +128 -0
  155. package/node_modules/@docx-editor.dev/core/dist/review-paragraph-order-DT-n6ouC.d.ts +85 -0
  156. package/node_modules/@docx-editor.dev/core/dist/revision-projection-DZ4kKVev.d.ts +242 -0
  157. package/node_modules/@docx-editor.dev/core/dist/semantic-cell-selection-D9D1KSXq.d.ts +464 -0
  158. package/node_modules/@docx-editor.dev/core/dist/semantic-interaction-CIC-PooQ.d.ts +135 -0
  159. package/node_modules/@docx-editor.dev/core/dist/semantic-paint-BME37OMv.d.ts +326 -0
  160. package/node_modules/@docx-editor.dev/core/dist/semantic-record-queries-CBlZqZNa.d.ts +177 -0
  161. package/node_modules/@docx-editor.dev/core/dist/semantic-records-4B3WwFAi.d.ts +3532 -0
  162. package/node_modules/@docx-editor.dev/core/dist/store.cjs +1 -0
  163. package/node_modules/@docx-editor.dev/core/dist/store.d.ts +2706 -0
  164. package/node_modules/@docx-editor.dev/core/dist/store.js +1 -0
  165. package/node_modules/@docx-editor.dev/core/dist/tree-package-fragment-BeeKxDw8.d.ts +1201 -0
  166. package/node_modules/@docx-editor.dev/core/dist/tree-session-contract-CVbmlMlq.d.ts +664 -0
  167. package/node_modules/@docx-editor.dev/core/dist/types-barrel-D3xCgQX6.d.ts +4269 -0
  168. package/node_modules/@docx-editor.dev/core/licenses/HarfBuzz-COPYING.txt +42 -0
  169. package/node_modules/@docx-editor.dev/core/package.json +140 -0
  170. package/node_modules/@docx-editor.dev/react/LICENSE +201 -0
  171. package/node_modules/@docx-editor.dev/react/README.md +141 -0
  172. package/node_modules/@docx-editor.dev/react/THIRD_PARTY_NOTICES.md +18 -0
  173. package/node_modules/@docx-editor.dev/react/dist/index.d.mts +4928 -0
  174. package/node_modules/@docx-editor.dev/react/dist/index.d.ts +4928 -0
  175. package/node_modules/@docx-editor.dev/react/dist/index.js +4 -0
  176. package/node_modules/@docx-editor.dev/react/dist/index.mjs +4 -0
  177. package/node_modules/@docx-editor.dev/react/package.json +74 -0
  178. package/node_modules/@docx-editor.dev/react/src/styles/editor.css +6 -0
  179. package/node_modules/@docx-editor.dev/react/src/styles/zIndex.ts +28 -0
  180. package/package.json +26 -15
@@ -0,0 +1,1394 @@
1
+ /**
2
+ * `@docx-editor.dev/core/editor` — the editor facade and its chrome vocabulary.
3
+ *
4
+ * `createDocxEditor` implements the full `Editor` contract over a paginated surface, and the
5
+ * chrome registry (`CHROME_GROUPS`, `ChromeSlotId`) is the toolbar taxonomy both adapters derive
6
+ * their default arrangement from. Enabled state has exactly one source — `toolbarCommandState`,
7
+ * which asks the engine — so a control and the engine can never disagree.
8
+ *
9
+ * @packageDocumentation
10
+ * @public
11
+ */
12
+ export { k as FieldResultsMode } from './tree-package-fragment-BeeKxDw8.js';
13
+ import { O as OoxmlPart, aG as TreeDocColorValue, r as ColorValue, ao as DrawingPositionInput, A as ParagraphTabStop } from './types-barrel-D3xCgQX6.js';
14
+ export { aH as IMAGE_WRAP_TARGETS, an as ImageWrapTarget, z as ParagraphFlags, R as ReviewModelInput, aI as TEXT_FORM_FORMATS } from './types-barrel-D3xCgQX6.js';
15
+ export { D as DEFAULT_IMAGE_RESOURCE_LIMITS, a as ImageDecodePort, I as ImageResourceLimits, R as RenderableImageMime, S as SupportedImageMime, c as VectorImageMime, r as resolveImageResourceLimits, d as resolveSvgIntrinsicSize, s as sniffImageMime, v as validateRasterHeader } from './image-resources-BN-hUgCn.js';
16
+ export { CollectReviewItems, EditorModule, EditorModuleRegistry, ReviewModuleContribution, RevisionMarkupDialog, RevisionMarkupDialogHost, resolveEditorModules } from './contracts/modules.js';
17
+ import { T as TreeDocxSessionView, f as DocumentThemeColorEntry } from './tree-session-contract-CVbmlMlq.js';
18
+ export { a as TreeApplyResult } from './tree-session-contract-CVbmlMlq.js';
19
+ import { a as FontConfiguration, E as EditorFontError, d as EditorSnapshot, e as EditorCommand, C as CanResult, Z as ZoomMode, f as ClearAnchorHighlightOptions, A as AnchorHighlightOptions, S as ScrollToAnchorOptions, g as ScrollPlacement, h as AnchorHighlightAnimation, H as HighlightRange, i as Editor, j as HighlightResult, k as HighlightOptions, T as TextMatch } from './editor-Ci7IZGmG.js';
20
+ export { l as HighlightHit, m as HighlightRect, I as ImageContext, n as ImageCropPercent, o as ImageCropPermille, R as ReviewItemHit, p as SelectedImageState, q as TrackedChangeFilterMode, r as TrackedChangePredicate, s as cropPercentFromCropPermille, t as cropPercentFromPermille, u as cropPercentFromSourceCrop, v as cropPermilleFromCropPercent, w as cropPermilleFromPercent, x as sourceCropFromCropPercent, y as validateImageCropPercent } from './editor-Ci7IZGmG.js';
21
+ import { L as LayoutShapingInstrumentation, a as LayoutShapingOptions } from './layout-shaping-BEyuiQOk.js';
22
+ export { d as disposeLayoutShaping } from './layout-shaping-BEyuiQOk.js';
23
+ export { C as ComposeFontOriginsOptions, D as DEFAULT_FONT, b as FONT_RESOLVER_BRAND, c as FONT_RESOLVER_MARK_KEY, d as FontConfigurationBase, e as FontConfigurationFragment, a as FontOrigin, F as FontOriginFailure, f as FontResolutionRequest, g as FontResolver, h as FontResolverMark, M as MAX_RESOLVER_FAMILIES, i as MarkedFontResolver, W as WORD_DEFAULT_FONT, j as composeFontConfiguration, k as composeFontOrigins, l as defineFontResolver, m as isFontResolver } from './font-resolver-BVQB14qT.js';
24
+ import { P as PaginatedSurfaceOptions, O as OpenPaginatedResult, a as PaginatedSurface, T as TableCommandPlan, D as DocxEditorInstance } from './index-Bsg7oIKP.js';
25
+ export { A as AnchorFrameOrigin, C as CHROME_GROUPS, b as CHROME_MENUS, c as CHROME_UNAVAILABLE_KEY, d as ChromeControl, e as ChromeControlId, f as ChromeControlState, g as ChromeExportError, h as ChromeExportFormat, i as ChromeExportHandlers, j as ChromeExportResult, k as ChromeExportView, l as ChromeGroup, m as ChromeGroupId, n as ChromeMenu, o as ChromeMenuEntry, p as ChromeMenuId, q as ChromeMenuItemEntry, r as ChromeMenuSeparatorEntry, s as ChromeMenuSubmenuEntry, t as ChromePrintError, u as ChromePrintErrorCode, v as ChromePrintJob, w as ChromePrintOptions, x as ChromeSlotId, y as ContentControlWidgetChromeHandlers, z as ContentControlWidgetSession, B as CustomFontsOptions, E as CustomFontsResolver, F as DEFAULT_TABLE_CHROME_DRAFT, G as DocxEditorConfig, H as DrawingSelectionIntent, I as EMU_PER_POINT, J as EditorCommandExecute, K as EquationActivation, L as EquationChromeHandlers, M as EquationOps, N as FinalizedImageOverlayInteraction, Q as FontLoadFailure, R as FontLoadFailureReason, S as FontMeasurementState, U as FontUrlSource, V as HistoryGroupBinding, W as HistoryGroupBindingOptions, X as HyperlinkActivation, Y as HyperlinkChromeHandlers, Z as HyperlinkOps, _ as IMAGE_OVERLAY_NUDGE_PT, $ as IMAGE_OVERLAY_NUDGE_SHIFT_PT, a0 as ImageInteractionSession, a1 as ImageOverlayScrollPort, a2 as ImageResizeHandle, a3 as ImageResizeResult, a4 as InvalidTextFormFieldChromeHandlers, a5 as InvalidTextFormFieldSession, a6 as LoadFontsRequest, a7 as LoadFontsResult, a8 as OpeningIndicatorHost, a9 as OverlayFrameRect, aa as PaginatedSurfaceState, ab as ParagraphPropertyEdit, ac as PopupChromeRegistrationOptions, ad as RemoteCaretLabelAnchor, ae as RemoteCaretLabelHost, af as ReviewWriteIntent, ag as RunTableChromeCommandResult, ah as SectionAnchor, ai as SectionBreakInsertType, aj as SelectedDrawingOverlayTarget, ak as SurfaceEquation, al as SurfaceFormatting, am as SurfaceHyperlink, an as SurfaceInsertImageInput, ao as SurfaceNavigation, ap as SurfaceOverlayCoordinates, aq as SurfaceParagraphFormat, ar as TABLE_BORDER_STYLE_OPTIONS, as as TABLE_BORDER_TARGET_OPTIONS, at as TABLE_BORDER_WIDTH_OPTIONS, au as TABLE_CHROME_SLOT_IDS, av as TableBorderStyleOption, aw as TableBorderTargetOption, ax as TableBorderTargetValue, ay as TableBorderWidthOption, az as TableChromeDraft, aA as TableChromePick, aB as TableChromeSlotId, aC as TableInteractionLabelKey, aD as TextFormFieldChromeHandlers, aE as TextFormFieldDialogSession, aF as ToolbarCommandState, aG as ToolbarSlotValue, aH as ToolbarValueMap, aI as ToolbarValueSlot, aJ as applyTableChromePick, aK as bindHistoryGroup, aL as blankDocumentBytes, aM as canExecuteImageCommand, aN as captureImageMutationPreconditions, aO as chromeControlCount, aP as chromeMenuSlots, aQ as chromeProbeForSlot, aR as chromeSlotId, aS as chromeSlotIsToggle, aT as commandExecOptions, aU as commandForSlot, aV as commandForSlotValue, aW as commandForTableChromeSlotValue, aX as computeImageResizeResult, aY as computeMovedImagePosition, aZ as computeResizedImageExtentEmu, a_ as createDocxEditor, a$ as createFontSource, b0 as createImageOverlayScrollPort, b1 as cssPixelsToLayoutPoints, b2 as customFonts, b3 as defaultChromeGroups, b4 as defaultTableLabel, b5 as emuToOverlayPoints, b6 as equationAtPosition, b7 as executeImageCommand, b8 as finalizeImageOverlayInteraction, b9 as formattingBarChromeGroups, ba as isChromePrintShortcut, bb as isStaleImageInteractionCommit, bc as isTableChromeSlot, bd as layoutPointsToCssPixels, be as loadFonts, bf as overlayFrameToSheetCssPixels, bg as overlayHostOrigin, bh as pointsToEmu, bi as probeTableChromeCommand, bj as resizePreservesAspect, bk as runChromeExport, bl as runChromePrint, bm as runSave, bn as runTableChromeCommand, bo as runTableCommand, bp as runToolbarCommand, bq as selectedDrawingOverlayTargetOf, br as selectedImageStateOf, bs as surfacePaintScale, bt as tableChromeIconPaths, bu as tableChromeLabelKeyForTarget, bv as tableChromeToolbarState, bw as tableChromeVisible, bx as tableCommandToolbarState, by as toolbarCommandState, bz as toolbarCommandStates } from './index-Bsg7oIKP.js';
26
+ import { a as AutomationCapabilities, b as AutomationHost } from './protocol-Bqk4Izjc.js';
27
+ import { S as SemanticLayout } from './semantic-records-4B3WwFAi.js';
28
+ export { T as TextMeasurer } from './semantic-records-4B3WwFAi.js';
29
+ import { b as ReviewPaneOverflow } from './review-pane-D9jm8DcY.js';
30
+ export { C as CommentMarkerStyle, D as DEFAULT_REVIEW_PANE, a as ResolvedReviewPane, c as ReviewPaneItemFields, d as ReviewPaneOpening, R as ReviewPaneOptions, e as RevisionDisplay, r as resolveReviewPane, f as reviewPaneListsItem } from './review-pane-D9jm8DcY.js';
31
+ export { D as DEFAULT_REVISION_MARKUP, f as REVISION_MARKUP_COLORS, d as ResolvedRevisionMarkup, a as ReviewDisplayMode, g as RevisionChangedLinesMark, h as RevisionDeletionMark, i as RevisionMarkupChromeHandlers, j as RevisionMarkupColor, R as RevisionMarkupDialogSession, k as RevisionMarkupMark, l as RevisionMarkupNamedColor, e as RevisionMarkupOptions, m as RevisionMarkupStyle, n as RevisionMarkupTextStyle, r as resolveRevisionMarkup } from './revision-projection-DZ4kKVev.js';
32
+ export { N as NavigationCommand, S as SemanticPosition, a as SemanticSelection } from './semantic-interaction-CIC-PooQ.js';
33
+ export { S as SectionProperties } from './semantic-cell-selection-D9D1KSXq.js';
34
+ export { F as FieldShadingMode, R as ReviewAuthorInfo, b as RevisionAuthorAssignments, c as RevisionAuthorStyle, d as RevisionStyles } from './semantic-paint-BME37OMv.js';
35
+ export { CollaborationModuleContribution } from './collaboration.js';
36
+ import './editor-scope-OHPwVQ5l.js';
37
+ import './collaboration/replication.js';
38
+ import './failure-NS2lsya4.js';
39
+ import './custom-node-writes-cvL5rhcD.js';
40
+ import './headless-document-view-qH331moE.js';
41
+ import 'prosemirror-model';
42
+ import './contracts/document.js';
43
+ import './contracts/interaction.js';
44
+ import './document-protection-BAGVGqaP.js';
45
+ import './note-properties-4Y9o6Gyk.js';
46
+ import './omml-equation-CuzBL5DD.js';
47
+ import './semantic-record-queries-CBlZqZNa.js';
48
+
49
+ declare function toEditorFontError(error: unknown): EditorFontError;
50
+ declare function createLayoutShaping(configuration: FontConfiguration, instrumentation?: LayoutShapingInstrumentation): Promise<LayoutShapingOptions>;
51
+
52
+ /**
53
+ * What `snapshot()` reports before an editor exists: loading, not editable, nothing
54
+ * selected, nothing undoable — never invented state.
55
+ *
56
+ * @public
57
+ */
58
+ declare const LOADING_SNAPSHOT: EditorSnapshot;
59
+
60
+ /**
61
+ * True when the engine's PASTE lanes will land user-visible content from this payload, so
62
+ * a host's image-FILE lane must stand down or insert a duplicate.
63
+ *
64
+ * In order of cost: visible `text/plain` (the plain lane's unconditional fallback), visible
65
+ * HTML text (the projection and the plain lane's HTML fallback both land it), a
66
+ * zip-shaped embedded fragment, and finally the projection probe for text-free HTML.
67
+ *
68
+ * Deliberate asymmetries against the router's letter: text made only of invisible
69
+ * characters (zero-width wrappers, bidi marks, a bare newline) does not count — the router
70
+ * technically lands it, but standing down for it would drop a real image for characters
71
+ * nobody can see. And engine-state gates the adapter cannot observe (suggesting mode, cell
72
+ * selections, the force-plain window) are ignored; in those states the engine may land
73
+ * nothing where this predicate said it would.
74
+ *
75
+ * @internal
76
+ */
77
+ declare function clipboardPasteLandsContent(transfer: DataTransfer | null | undefined): boolean;
78
+ /**
79
+ * True when the engine's DROP lane will land text from this payload, so a host's
80
+ * image-FILE drop lane must stand down — by NOT preventing the default, which is what
81
+ * lets the browser fire `insertFromDrop`, the engine's only drop path.
82
+ *
83
+ * Only visible HTML text counts. The drop lane is plain text end to end, so fragments and
84
+ * `data:` images never land from a drop — and `text/plain` says nothing about intent here,
85
+ * because image-file drags routinely mirror the file's path or URL into it. A text drag
86
+ * that carries an image file beside it (Word's rendering PNG again) always carries the
87
+ * text in HTML too.
88
+ *
89
+ * @internal
90
+ */
91
+ declare function clipboardDropLandsText(transfer: DataTransfer | null | undefined): boolean;
92
+
93
+ /**
94
+ * Mount a paginated surface over DOCX bytes.
95
+ *
96
+ * Returns a typed rejection rather than throwing: a failure here is a property of the file,
97
+ * and a host must be able to tell "not a package" from "no body" without parsing an error
98
+ * message.
99
+ */
100
+ declare function mountPaginatedSurface(container: HTMLElement, bytes: Uint8Array, options?: PaginatedSurfaceOptions): OpenPaginatedResult;
101
+
102
+ /**
103
+ * The story a NODE lives in, which is what a write about that node must target.
104
+ *
105
+ * The open scope is a near-enough proxy most of the time and wrong exactly when it matters:
106
+ * nothing binds a node id to it, so a verb invoked on a control, a chip or a paragraph the
107
+ * reader is not currently standing in wrote against the wrong store — or, where the id came
108
+ * from a body-only index, against body content the reader could not see.
109
+ *
110
+ * Answered from the id's own PART NAME. Node ids are minted `${partName}#${path}`, so the
111
+ * question is constant-time and needs no store to be opened. That last part is load-bearing:
112
+ * asking each scope for its paragraph list instead OPENS a story store, the store cap is 64,
113
+ * and a store whose part is still in the package is never evicted — on a many-section
114
+ * document that left later headers unopenable for the rest of the session.
115
+ *
116
+ * Falls back to `fallback` for an id no story claims, so the store refuses it rather than this.
117
+ */
118
+ /**
119
+ * The part a NODE lives in, WITHOUT opening a story store.
120
+ *
121
+ * `session.partFor(scope)` resolves a scope by opening that story's store, and an open store is
122
+ * retained for as long as its part is in the package. The cap is 64. So routing a pure READ —
123
+ * "is this control locked", "what is its tab index" — through `partFor` spent a permanent slot
124
+ * per part touched, and an id naming no node at all still spent one, because the part name is
125
+ * matched from the id's prefix before anything is looked up. Sixty-four such reads and no
126
+ * further header could be opened for the rest of the session, silently.
127
+ *
128
+ * Read straight from the live package instead. Ids carry the canonical part name, so this is a
129
+ * map lookup.
130
+ */
131
+ declare function partOfNodeId(session: Pick<TreeDocxSessionView, 'currentPackage' | 'part'>, nodeId: string | undefined): OoxmlPart | null;
132
+
133
+ /** The engine paints at 96 px per inch (twips / 15, 1440 twips per inch). */
134
+ declare const PX_PER_INCH = 96;
135
+ /** Painted pixels per centimetre, derived from {@link PX_PER_INCH}. */
136
+ declare const PX_PER_CM: number;
137
+ /** Which measurement system the ruler shows. Drives both tick cadence and drag snapping. */
138
+ type RulerUnit = 'inch' | 'cm';
139
+ /** One tick on the ruler: where it sits, how tall it is, and its label if it carries one. */
140
+ interface RulerTick {
141
+ /** Offset along the ruler in content pixels. */
142
+ readonly position: number;
143
+ readonly height: number;
144
+ /** Whole-unit label, omitted at the origin and on minor ticks. */
145
+ readonly label?: string;
146
+ }
147
+ /**
148
+ * Ticks across one page dimension, matching the legacy cadence: eighth-inch
149
+ * minors with labelled inches, or millimetre minors with labelled centimetres.
150
+ */
151
+ declare function generateRulerTicks(lengthPx: number, unit: RulerUnit): RulerTick[];
152
+ /** The first page's box, which the rulers measure against. */
153
+ declare function rulerPageBox(pages: readonly {
154
+ readonly index: number;
155
+ readonly box: {
156
+ width: number;
157
+ height: number;
158
+ };
159
+ }[]): {
160
+ width: number;
161
+ height: number;
162
+ } | null;
163
+
164
+ /** Twips per inch, as OOXML defines them. */
165
+ declare const TWIPS_PER_INCH = 1440;
166
+ /** Twips per centimetre, as Word rounds them. */
167
+ declare const TWIPS_PER_CM = 567;
168
+ /** Word snaps ruler drags to the eighth-inch grid its ticks already draw. */
169
+ declare const SNAP_TWIPS_INCH: number;
170
+ /** The centimetre ruler's grid is the millimetre. */
171
+ declare const SNAP_TWIPS_CM: number;
172
+
173
+ /**
174
+ * The four handles Word's ruler carries.
175
+ *
176
+ * `hanging` and `left` sit at the SAME position and differ only in what a drag takes with
177
+ * them — the box moves the whole paragraph, the triangle leaves the first line where it is.
178
+ */
179
+ type RulerIndentHandle = 'firstLine' | 'hanging' | 'left' | 'right';
180
+ /** A paragraph's indent as the ruler works with it. Twips; `firstLine` signed. */
181
+ interface RulerIndent {
182
+ readonly left: number;
183
+ readonly right: number;
184
+ readonly firstLine: number;
185
+ /**
186
+ * The paragraph reads right to left. Its `left` indent is then the LEADING one, on the
187
+ * right margin, and its first-line offset counts from there, so the ruler axis mirrors.
188
+ */
189
+ readonly rtl?: boolean;
190
+ }
191
+ /** The page the handles are placed against. Twips. */
192
+ interface RulerPageMetrics {
193
+ readonly pageWidth: number;
194
+ readonly leftMargin: number;
195
+ readonly rightMargin: number;
196
+ }
197
+ /**
198
+ * How a ruler drag resolves: which grid it snaps to, and whether it snaps at all.
199
+ *
200
+ * @public
201
+ */
202
+ interface RulerDragOptions {
203
+ /** Which snap grid applies. Defaults to inches. */
204
+ readonly unit?: RulerUnit;
205
+ /** Alt held: continuous, twip-precision drag, bypassing the snap grid — as in Word. */
206
+ readonly precise?: boolean;
207
+ }
208
+ /**
209
+ * Where a handle sits, in twips from the page's LEFT SHEET EDGE (not the margin).
210
+ *
211
+ * With `indent.rtl`, `indent.left` is the leading indent and sits on the right margin.
212
+ */
213
+ declare function handlePosition(handle: RulerIndentHandle, indent: RulerIndent, page: RulerPageMetrics): number;
214
+ /** Round to the ruler's grid, or to the twip when the drag is precise. */
215
+ declare function snapTwips(value: number, unit: RulerUnit, precise: boolean): number;
216
+ /**
217
+ * The indent a drag of `handle` to `positionTwips` produces.
218
+ *
219
+ * Clamps differ from the MARGIN drags this ruler also carries, and deliberately:
220
+ *
221
+ * - Indents may go NEGATIVE, pulling text into the margin, which Word allows. The floor is
222
+ * the sheet edge, not the margin.
223
+ * - There is no minimum text width. The 720-twip floor the margin drags use mirrors an
224
+ * engine refusal that does not exist for indents, and enforcing one here would make a
225
+ * narrow pull-quote unreachable. Left and right markers may MEET; they may not cross.
226
+ * - The left box needs a first-line clamp of its own. It does not move `firstLine`, so on a
227
+ * hanging paragraph dragging the box left can push the first-line marker off the sheet
228
+ * while the box itself is still in range. The drag stops when the LEADING marker lands.
229
+ */
230
+ declare function dragIndent(handle: RulerIndentHandle, positionTwips: number, indent: RulerIndent, page: RulerPageMetrics, options?: RulerDragOptions): RulerIndent;
231
+
232
+ /**
233
+ * Stable value identity for a command, including nested payloads.
234
+ *
235
+ * @internal
236
+ */
237
+ declare function editorCommandKey(command: EditorCommand): string;
238
+
239
+ /**
240
+ * Collapse order: the first id here is the first group to leave the bar.
241
+ *
242
+ * Zoom goes first (a document you cannot format is worse than one you cannot scale), then
243
+ * the small standalone groups, then the paragraph controls, and text formatting and history
244
+ * last. A group the registry has but this list does not is collapsed before all of these,
245
+ * in reverse bar order — a host-added group has no declared standing, and the alternative
246
+ * is a new group that silently never collapses.
247
+ *
248
+ * @internal
249
+ */
250
+ declare const TOOLBAR_COLLAPSE_ORDER: readonly string[];
251
+ /**
252
+ * Groups that never move into the overflow menu.
253
+ *
254
+ * `review` holds the comments toggle and the editing-mode pill. The comments rail is
255
+ * reached through that toggle and nothing else, and a narrow window is exactly where a
256
+ * reader needs it, so burying it one menu deep is the wrong trade.
257
+ *
258
+ * @internal
259
+ */
260
+ declare const TOOLBAR_PINNED_GROUPS: ReadonlySet<string>;
261
+ /**
262
+ * Px of surplus a group must find before it comes back OUT of the overflow menu.
263
+ *
264
+ * Without it a value control that widens with its own value (font family going from
265
+ * "Arial" to "Times New Roman") pushes itself out, which frees the width that pulled it
266
+ * back in, forever. One-directional slack breaks the loop.
267
+ *
268
+ * @internal
269
+ */
270
+ declare const TOOLBAR_OVERFLOW_HYSTERESIS = 24;
271
+ /**
272
+ * What {@link toolbarOverflowGroups} measures against.
273
+ *
274
+ * @internal
275
+ */
276
+ interface ToolbarFitInput {
277
+ /** Content width of the bar, in px. `0` or less means "not measured yet". */
278
+ readonly available: number;
279
+ /** Group id -> measured width, separator and gaps included. */
280
+ readonly widths: ReadonlyMap<string, number>;
281
+ /** Collapsible groups, in bar order. */
282
+ readonly groups: readonly string[];
283
+ /** Collapse order; ids missing from it collapse first, in reverse bar order. */
284
+ readonly order: readonly string[];
285
+ /** Width of everything that never collapses: pinned groups, appended children, padding. */
286
+ readonly fixed: number;
287
+ /** Width the "⋯" trigger takes once it is shown. */
288
+ readonly more: number;
289
+ /** The previous answer, for the one-directional slack. */
290
+ readonly previous?: ReadonlySet<string> | undefined;
291
+ readonly hysteresis?: number;
292
+ }
293
+ /**
294
+ * The priority of a declared group: its place in {@link TOOLBAR_COLLAPSE_ORDER}, in steps of
295
+ * 10, so zoom is 10 and history is 90. A host group with a `priority` sorts among these, and
296
+ * a LOWER number leaves the bar first. The steps leave room between two built-in groups.
297
+ *
298
+ * @internal
299
+ */
300
+ declare function toolbarGroupPriority(id: string, order?: readonly string[]): number | undefined;
301
+ /**
302
+ * The collapse order actually used: the declared one, with undeclared groups first.
303
+ *
304
+ * `priorities` gives a group an explicit place among the declared ones (see
305
+ * {@link toolbarGroupPriority}), and overrides a declared group's own priority. Groups with
306
+ * neither collapse first, in reverse bar order. Two groups with the same priority collapse
307
+ * in reverse bar order too: the one further along the bar leaves first.
308
+ *
309
+ * @internal
310
+ */
311
+ declare function collapseOrder(groups: readonly string[], order?: readonly string[], priorities?: ReadonlyMap<string, number>): readonly string[];
312
+ /**
313
+ * One host group's placement request.
314
+ *
315
+ * @internal
316
+ */
317
+ interface ToolbarHostGroupPlacement {
318
+ readonly id: string;
319
+ /** The group this one follows. Absent, or unknown, places it after every group. */
320
+ readonly after?: string | undefined;
321
+ }
322
+ /**
323
+ * Bar order with the host's groups placed.
324
+ *
325
+ * A host group without `after` follows every built-in group, in order of appearance. A group
326
+ * with `after` follows the group it names, after any host groups already placed there, so
327
+ * several groups anchored to one place keep their order of appearance. An anchor may be
328
+ * another host group. An anchor that never resolves (an unknown id, or a cycle) places the
329
+ * group at the end.
330
+ *
331
+ * @internal
332
+ */
333
+ declare function arrangeToolbarGroups(builtIn: readonly string[], hosts: readonly ToolbarHostGroupPlacement[]): readonly string[];
334
+ /**
335
+ * The margin the "⋯" panel keeps from each viewport edge, in px.
336
+ *
337
+ * @internal
338
+ */
339
+ declare const TOOLBAR_PANEL_EDGE_MARGIN = 8;
340
+ /**
341
+ * Where the "⋯" panel opens, in viewport px.
342
+ *
343
+ * @internal
344
+ */
345
+ interface ToolbarPanelPlacement {
346
+ /** The panel's left edge. */
347
+ readonly left: number;
348
+ /** The widest the panel may be: the viewport less both margins. */
349
+ readonly maxWidth: number;
350
+ /** Which trigger edge the panel lines up with, or `clamped` when neither fits. */
351
+ readonly anchor: 'start' | 'end' | 'clamped';
352
+ }
353
+ /**
354
+ * Keep the "⋯" panel inside the viewport.
355
+ *
356
+ * The panel lines up with the trigger's end edge first, which suits a trigger at the end of
357
+ * the bar. When that runs past the left edge (a centered or narrow bar), it lines up with
358
+ * the trigger's start edge instead. When neither fits, it is clamped to the margins.
359
+ *
360
+ * @internal
361
+ */
362
+ declare function toolbarPanelPlacement(input: {
363
+ readonly triggerLeft: number;
364
+ readonly triggerRight: number;
365
+ readonly panelWidth: number;
366
+ readonly viewportWidth: number;
367
+ readonly margin?: number;
368
+ }): ToolbarPanelPlacement;
369
+ declare function sameIds(a: ReadonlySet<string>, b: ReadonlySet<string>): boolean;
370
+ /**
371
+ * True when two answers describe the same bar, so a re-render can be skipped.
372
+ *
373
+ * @internal
374
+ */
375
+ declare const sameOverflow: typeof sameIds;
376
+ /**
377
+ * The groups that must leave the bar for the rest of it to fit in one row.
378
+ *
379
+ * An unmeasured bar (`available <= 0`, which is every server render and every jsdom test)
380
+ * overflows nothing: the full toolbar is the honest answer when nothing is known about the
381
+ * space, and it is also what a host that opted out of overflow renders.
382
+ *
383
+ * @internal
384
+ */
385
+ declare function toolbarOverflowGroups(input: ToolbarFitInput): ReadonlySet<string>;
386
+ /**
387
+ * The left edge, in viewport px, of a popup that opens under a bar control.
388
+ *
389
+ * The popup lines up with the control's start edge, and moves left or right only as far as
390
+ * it must to keep {@link TOOLBAR_PANEL_EDGE_MARGIN} from each viewport edge. A popup wider
391
+ * than the viewport keeps its left margin.
392
+ *
393
+ * @internal
394
+ */
395
+ declare function toolbarPopupLeft(input: {
396
+ readonly anchorLeft: number;
397
+ readonly popupWidth: number;
398
+ readonly viewportWidth: number;
399
+ readonly margin?: number;
400
+ }): number;
401
+
402
+ /**
403
+ * Leading separator slot cost for one collapsible group (px).
404
+ *
405
+ * @internal
406
+ */
407
+ declare function separatorLeadingCost(separatorWidth: number, marginInlineStart: number, marginInlineEnd: number, gap: number): number;
408
+ /**
409
+ * Total width charged for one collapsible group on the bar.
410
+ *
411
+ * @internal
412
+ */
413
+ declare function collapsibleGroupCost(groupWidth: number, separatorLeading: number): number;
414
+ /**
415
+ * Flex gap charged after a fixed group or the More trigger.
416
+ *
417
+ * @internal
418
+ */
419
+ declare function trailingGapCost(width: number, gap: number): number;
420
+ /**
421
+ * Read inline margins from computed style (px).
422
+ *
423
+ * @internal
424
+ */
425
+ declare function readInlineMargins(style: CSSStyleDeclaration): {
426
+ readonly start: number;
427
+ readonly end: number;
428
+ };
429
+ /**
430
+ * Parse column gap from toolbar computed style.
431
+ *
432
+ * @internal
433
+ */
434
+ declare function readColumnGap(style: CSSStyleDeclaration): number;
435
+ /**
436
+ * What {@link barRoomWidth} measures against, all in px.
437
+ *
438
+ * @internal
439
+ */
440
+ interface BarRoomInput {
441
+ /** The bar's current content width: its client width less its inline padding. */
442
+ readonly own: number;
443
+ /** The parent's content-box width. `0` or less means it is unknown. */
444
+ readonly parentContent: number;
445
+ /** Width the bar's siblings take on the same line, gaps included. */
446
+ readonly siblings: number;
447
+ /** The bar's inline margins, auto margins excluded. */
448
+ readonly margins: number;
449
+ /** The bar's inline padding, border, and scrollbar. */
450
+ readonly chrome: number;
451
+ /** The bar's resolved `max-width` as a border-box width, or null for none. */
452
+ readonly maxWidth: number | null;
453
+ }
454
+ /**
455
+ * The content width the bar CAN take, which is what decides what fits.
456
+ *
457
+ * A bar that fills its container can take exactly the box it has. A bar as wide as its
458
+ * content (`width: max-content`, a floating pill) shrinks when a group leaves, so its own box
459
+ * never shows the room outside it, and a collapsed group would never come back. The room is
460
+ * the parent's content width, less the siblings on the same line and the bar's margins,
461
+ * capped by the bar's `max-width`. It is never less than the box the bar already has.
462
+ *
463
+ * @internal
464
+ */
465
+ declare function barRoomWidth(input: BarRoomInput): number;
466
+ /**
467
+ * True when one of the bar's controls runs past its content box, false when they all fit,
468
+ * and null when the bar has no layout to read (a zero-width box, as in a DOM without
469
+ * layout). Measured from the controls, not `scrollWidth`, so an open popup (the More panel,
470
+ * the table grid) that reaches past the bar's edge is not mistaken for an overflow.
471
+ *
472
+ * @internal
473
+ */
474
+ declare function controlsOverflow(bar: HTMLElement, style: CSSStyleDeclaration): boolean | null;
475
+ /**
476
+ * The bar's available content width.
477
+ *
478
+ * The bar's own box, except for a CONTENT-SIZED bar (specified width `auto`, `max-content`,
479
+ * `fit-content`, or `min-content`, and not growing as a flex item) in a layout this file
480
+ * understands: a block-level bar in a `block` or `flow-root` parent, or an item of a
481
+ * single-line flex row. That bar gets the room it can take, see {@link barRoomWidth}. A grid
482
+ * cell, a table cell, an inline bar, a floated bar, an explicit width, an out-of-flow bar, a
483
+ * `max-width` that does not resolve, a growing sibling with content, loose text in the row,
484
+ * and a browser without Typed OM all keep the bar's own box: the safe side, which collapses
485
+ * early rather than overflowing the next column.
486
+ *
487
+ * The parent-based room only ever brings groups BACK. A bar whose controls overflow its box
488
+ * measures its own box, so the fit collapses groups until they fit. When that overflow
489
+ * follows groups that came back from the room, the room was wrong: the bar's width becomes
490
+ * a cap until the parent's width changes, so the bar does not flicker.
491
+ *
492
+ * @internal
493
+ */
494
+ declare function readAvailableWidth(bar: HTMLElement, style: CSSStyleDeclaration): number;
495
+
496
+ /**
497
+ * Which LETTER a chord names, for the accelerators held with Alt.
498
+ *
499
+ * The CHARACTER first. A user reaching for Ctrl+Alt+F presses the key that types `f`,
500
+ * wherever their layout puts it, and Windows resolves accelerators the same way — so reading
501
+ * the physical position first sent Dvorak's footnote chord to the key that types `u`.
502
+ *
503
+ * `event.code` is the fallback, for the case that makes `key` unreadable: a modifier that
504
+ * COMPOSES. macOS turns Option+F into `ƒ`, Option+C into `ç` and Option+D into `∂`, none of
505
+ * them a letter — so falling through to the keycap is the only way those chords work there,
506
+ * and it costs nothing, because a `key` that IS a letter has already answered.
507
+ *
508
+ * Never both for one event: consulting `code` as well would claim a second chord wherever
509
+ * the two disagree, which is every remapped layout.
510
+ *
511
+ * Shared with the adapters, whose Find shortcut reads letters the same way.
512
+ *
513
+ * @internal
514
+ */
515
+ declare function chordLetter(event: KeyboardEvent): string;
516
+
517
+ /** Planner-backed can/plan pair — production gate for table commands. Task 9 maps chrome slots. */
518
+ declare function tableCommandState(command: EditorCommand, surface: PaginatedSurface): {
519
+ readonly can: CanResult;
520
+ readonly plan: TableCommandPlan;
521
+ };
522
+
523
+ /**
524
+ * What a browser host can do.
525
+ *
526
+ * `selection`, `scrolling` and `layout` are true because a mounted editor genuinely has a
527
+ * caret, a scroll container and paginated layout — a consumer may branch on them. The
528
+ * DOCUMENT operations behave identically to the headless host regardless; the extra
529
+ * capabilities widen what may be asked later, never what an existing operation means.
530
+ */
531
+ declare const BROWSER_AUTOMATION_CAPABILITIES: AutomationCapabilities;
532
+ /**
533
+ * An automation host over a live editor.
534
+ *
535
+ * The editor keeps its own lifetime: `dispose()` on the returned host releases the change
536
+ * subscription this adapter took and leaves the editor mounted and editable.
537
+ *
538
+ * `save()` validates pending form input. Invalid values and saves during an active edit
539
+ * return `transaction-refused`. For autosaving from change callbacks, use the asynchronous
540
+ * `editor.save()`, which waits for the active edit to finish.
541
+ */
542
+ declare function createBrowserAutomationHost(editor: DocxEditorInstance): AutomationHost;
543
+
544
+ /** Clamp and validate an OOXML theme modifier fraction (0, 1]. */
545
+ declare function validateThemeModifier(value: unknown): value is number;
546
+ /** Blend toward white. `keep` is the fraction of the base colour retained (OOXML themeTint byte). */
547
+ declare function applyThemeTint(hex: string, keep: number): string;
548
+ /** Blend toward black. `keep` is the fraction of the base colour retained (OOXML themeShade byte). */
549
+ declare function applyThemeShade(hex: string, keep: number): string;
550
+ /** Resolve a theme colour to literal hex. When both tint and shade are present, ECMA-376
551
+ * §17.3.2.6 / §17.3.4 / §17.3.5 require tint precedence — shade is ignored for paint. */
552
+ declare function resolveThemeColorHex(color: Extract<ColorValue, {
553
+ kind: 'theme';
554
+ }>, themeColors: readonly DocumentThemeColorEntry[]): {
555
+ ok: true;
556
+ hex: string;
557
+ } | {
558
+ ok: false;
559
+ reason: string;
560
+ };
561
+ type ColorLowerRefusal = {
562
+ readonly ok: false;
563
+ readonly reason: string;
564
+ };
565
+ /**
566
+ * A public colour lowered for a border or fill op, or the reason it could not be.
567
+ *
568
+ * Refusals happen because paint needs a literal: a theme colour the document's theme does not
569
+ * define has no hex to draw, and inventing one would show a border in a colour the file never
570
+ * named.
571
+ */
572
+ type ColorLowerResult = {
573
+ readonly ok: true;
574
+ readonly color: TreeDocColorValue;
575
+ } | ColorLowerRefusal;
576
+ /**
577
+ * Lower a public colour for table border ops. Theme colours require a resolved literal for
578
+ * paint; `auto` preserves OOXML automatic semantics with a black render fallback.
579
+ */
580
+ declare function lowerColorValueForBorder(color: ColorValue, themeColors: readonly DocumentThemeColorEntry[]): ColorLowerResult;
581
+ /**
582
+ * Lower a public colour for cell fill. `auto` refuses because the cascade literal
583
+ * cannot be named honestly at commit time.
584
+ */
585
+ declare function lowerColorValueForFill(color: ColorValue, themeColors: readonly DocumentThemeColorEntry[]): ColorLowerResult;
586
+ /** Resolve any public colour to a CSS `#RRGGBB` string for chrome display. */
587
+ declare function resolveColorValueToCss(color: ColorValue | undefined | null, themeColors: readonly DocumentThemeColorEntry[], defaultHex?: string): string;
588
+
589
+ interface SurfaceExtent {
590
+ readonly width: number;
591
+ readonly height: number;
592
+ readonly pageOffsetX: ReadonlyMap<number, number>;
593
+ }
594
+ declare function surfaceExtent(layout: SemanticLayout, materialize: ReadonlySet<number> | undefined): SurfaceExtent;
595
+
596
+ /**
597
+ * The review pane's marker strip on one page edge, in CSS px: the markers and the
598
+ * add-comment button. The adapters' review gutters and the zoom fit share this value.
599
+ *
600
+ * Shared adapter glue, not for hosts.
601
+ *
602
+ * @internal
603
+ */
604
+ declare const REVIEW_MARKERS_GUTTER_PX = 44;
605
+ /** The narrowest scale the editor contract accepts. One definition, every user. */
606
+ declare const ZOOM_MIN = 0.1;
607
+ /** The widest scale the editor contract accepts. */
608
+ declare const ZOOM_MAX = 5;
609
+ /**
610
+ * Fit the page width, but never magnify and never shrink past legibility: the default.
611
+ *
612
+ * A wide container keeps the 100% it has always had, and only one too narrow to hold the
613
+ * sheet shrinks. Uncapped fitting would render a Letter page at 183% on a 1600px monitor,
614
+ * which is a reader app, not Word; unfloored fitting would render it at 20% beside an open
615
+ * comments rail on a phone.
616
+ */
617
+ declare const AUTO_ZOOM_MODE: ZoomMode;
618
+ /**
619
+ * Fit the page width in BOTH directions — the uncapped fit, unlike `'auto'`.
620
+ *
621
+ * A shared constant rather than a literal per call site: modes are compared by value, but a
622
+ * control also has to render its own selected state, and two spellings of one mode in two
623
+ * files is how a menu ends up ticking a row the editor is not in.
624
+ */
625
+ declare const FIT_WIDTH_ZOOM_MODE: ZoomMode;
626
+ /**
627
+ * Normalize the `'auto'` shorthand a host may pass anywhere a {@link ZoomMode} is accepted.
628
+ *
629
+ * Returns `null` for a value that is neither, so callers refuse rather than silently
630
+ * substituting a mode the caller did not ask for.
631
+ */
632
+ declare function resolveZoomMode(mode: ZoomMode | 'auto'): ZoomMode | null;
633
+ /**
634
+ * Whether two modes say the same thing.
635
+ *
636
+ * `snapshotsEqual` compares `zoomMode` by IDENTITY, and a host's `zoomMode` prop is an object
637
+ * — `<DocxEditor zoomMode={{ type: 'fit', fit: 'pageWidth' }} />` is a fresh literal on every
638
+ * render, which is the spelling the docs show. Without a value comparison somewhere, each of
639
+ * those renders reinstalled the observer, refitted, bumped the tick, and re-rendered every
640
+ * `useEditorState` consumer in the tree — including the page selector that the slice
641
+ * memoization exists to keep asleep. The lane holds its object and compares by value here.
642
+ */
643
+ declare function sameZoomMode(a: ZoomMode, b: ZoomMode): boolean;
644
+ /**
645
+ * The scale the page is ENTITLED to when the review rail decides whether its full card
646
+ * column fits beside the page, or `null` when the page has no entitlement to measure.
647
+ *
648
+ * The rail must never measure the LIVE zoom under a fit: that zoom already includes the
649
+ * room the rail reserved last frame, so a threshold computed from it chases itself. The
650
+ * entitlement depends only on the mode (and on the held scale for a fixed mode), so the
651
+ * rail settles in one pass.
652
+ *
653
+ * - A fixed mode is entitled to the scale in force.
654
+ * - A fit with the review pane's `overflow: 'shrinkPage'` is entitled to its lower bound: the column stands
655
+ * whenever ANY scale the fit may take leaves room for it, and the fit then paints at
656
+ * the largest of those inside the padded box.
657
+ * - A capped fit is entitled to its cap.
658
+ * - An uncapped fit returns `null`: it fills whatever box it is given, so the full column
659
+ * always stands.
660
+ *
661
+ * Shared adapter glue for the review gutter, not for hosts.
662
+ *
663
+ * @internal
664
+ */
665
+ declare function reviewPaneEntitledZoom(mode: ZoomMode | undefined, zoom: number, overflow?: ReviewPaneOverflow): number | null;
666
+
667
+ /** How {@link listenForPopupEscape} decides and acts. @internal */
668
+ interface PopupEscapeOptions {
669
+ /** The popup's root. Its `ownerDocument` receives the listener. */
670
+ readonly popup: HTMLElement;
671
+ /** Whether a node belongs to the popup (its trigger, list, or a separate panel). */
672
+ readonly contains: (node: Node) => boolean;
673
+ /** Elements of this editor beyond its `.docx-editor` container, such as the viewport. */
674
+ readonly editorElements?: () => readonly (Element | null | undefined)[];
675
+ /**
676
+ * The chrome root that holds the popup, such as the toolbar or the menu bar. It scopes
677
+ * itself with its own `.docx-editor` class, and a key from it counts as this editor's.
678
+ */
679
+ readonly chromeRoot?: () => Element | null | undefined;
680
+ /** Return true to leave this Escape to someone else (an input that owns the key). */
681
+ readonly skip?: (event: KeyboardEvent) => boolean;
682
+ /** Close the popup. `fromInside` is true when the key came from inside the popup. */
683
+ readonly close: (fromInside: boolean) => void;
684
+ }
685
+ /**
686
+ * The nearest `.docx-editor` around `from` that holds the painted pages, or null.
687
+ *
688
+ * Chrome parts carry their own styling-only `docx-editor` class, so the first match from
689
+ * a toolbar is the toolbar. The instance container is the first one with pages inside.
690
+ *
691
+ * @internal
692
+ */
693
+ declare function editorInstanceScope(from: Element | null): Element | null;
694
+ /**
695
+ * Close an open toolbar popup on Escape, ahead of the surface. Returns the disposer.
696
+ *
697
+ * Shared adapter glue, not for hosts.
698
+ *
699
+ * @internal
700
+ */
701
+ declare function listenForPopupEscape(options: PopupEscapeOptions): () => void;
702
+ /**
703
+ * Whether a nested popup inside `panel` is open. Its own Escape listener closes it, and
704
+ * the panel stays open for the next Escape.
705
+ *
706
+ * @internal
707
+ */
708
+ declare function hasOpenNestedPopup(panel: Element | null): boolean;
709
+ /** How {@link listenForPopupFocusLeave} decides. @internal */
710
+ interface PopupFocusLeaveOptions {
711
+ /** The popup's root. Its `ownerDocument` receives the listener. */
712
+ readonly popup: HTMLElement;
713
+ /** Whether a node belongs to the popup (its trigger, list, or a separate panel). */
714
+ readonly contains: (node: Node) => boolean;
715
+ /** Close the popup. */
716
+ readonly close: () => void;
717
+ }
718
+ /**
719
+ * Close an open popup when focus moves outside it, for example to the find field after
720
+ * Ctrl+F or to a host input. Two moves keep the popup open: focus that lands in the painted
721
+ * pages, because a toolbar click leaves the caret there while the popup is open, and focus
722
+ * that enters one of this editor's modal dialogs, because the popup may have opened it and
723
+ * the dialog returns focus to its opener when it closes. A host's own modal dialog closes
724
+ * the popup like any other control. Returns the disposer.
725
+ *
726
+ * @internal
727
+ */
728
+ declare function listenForPopupFocusLeave(options: PopupFocusLeaveOptions): () => void;
729
+
730
+ /** Validate a position input, refusing offsets or bases outside what OOXML allows. */
731
+ declare function validateDrawingPositionInput(position: DrawingPositionInput): boolean;
732
+ /** Legal `relativeFrom` bases for a horizontal offset (page, margin, column, character, …). */
733
+ declare const DRAWING_REL_FROM_H: readonly string[];
734
+ /** Legal `relativeFrom` bases for a vertical offset (page, margin, paragraph, line, …). */
735
+ declare const DRAWING_REL_FROM_V: readonly string[];
736
+ /** Whether an image-properties command carries any positioning fields at all. */
737
+ declare function propertiesCommandHasPositionFields(command: {
738
+ readonly horizontalEmu?: number;
739
+ readonly verticalEmu?: number;
740
+ readonly relativeToH?: string;
741
+ readonly relativeToV?: string;
742
+ }): boolean;
743
+ /** Extract the position input from an image-properties command, or null when it carries none. */
744
+ declare function positionInputFromPropertiesCommand(command: {
745
+ readonly horizontalEmu?: number;
746
+ readonly verticalEmu?: number;
747
+ readonly relativeToH?: string;
748
+ readonly relativeToV?: string;
749
+ }, selected: {
750
+ readonly position?: DrawingPositionInput | null;
751
+ } | null): DrawingPositionInput;
752
+ /** Validate a set-position command before it reaches the store. */
753
+ declare function validateSetImagePositionCommand(command: {
754
+ readonly horizontalEmu?: number;
755
+ readonly verticalEmu?: number;
756
+ readonly relativeToH?: string;
757
+ readonly relativeToV?: string;
758
+ }, mode: 'frame' | 'simple'): boolean;
759
+
760
+ /** One tri-state paragraph flag: on, off, or "the selection disagrees". @public */
761
+ type ParagraphFlagState = boolean | null;
762
+ /**
763
+ * What the Paragraph dialog reads: every field, as the selection currently stands.
764
+ *
765
+ * A `null` means the selection's paragraphs DISAGREE about that field, which a control
766
+ * shows as an indeterminate checkbox or an empty box rather than as a value. `indent` is
767
+ * the exception the engine already documents — it reports the first touched paragraph and
768
+ * flags disagreement per field, because a ruler has to draw its handles somewhere.
769
+ *
770
+ * @public
771
+ */
772
+ interface ParagraphFormatRead {
773
+ /**
774
+ * `justify`, not OOXML's `both`. The engine speaks `w:jc` values; an adapter speaks the
775
+ * word its consumers write. Read and write use the SAME spelling here, so a value that
776
+ * comes out of `format` can go straight back into `apply`.
777
+ */
778
+ readonly alignment: 'left' | 'center' | 'right' | 'justify' | null;
779
+ /** Base direction (`w:bidi` through the cascade); null when the selection mixes them. */
780
+ readonly direction: 'ltr' | 'rtl' | null;
781
+ readonly spaceBeforePt: number | null;
782
+ readonly spaceAfterPt: number | null;
783
+ readonly lineSpacing: {
784
+ readonly rule: 'multiple' | 'exact' | 'atLeast';
785
+ readonly value: number;
786
+ } | null;
787
+ readonly indentLeftTwips: number | null;
788
+ readonly indentRightTwips: number | null;
789
+ /** ONE signed first-line offset: negative is a hanging indent. */
790
+ readonly indentFirstLineTwips: number | null;
791
+ readonly contextualSpacing: ParagraphFlagState;
792
+ readonly keepNext: ParagraphFlagState;
793
+ readonly keepLines: ParagraphFlagState;
794
+ readonly widowControl: ParagraphFlagState;
795
+ readonly pageBreakBefore: ParagraphFlagState;
796
+ /** Custom tab stops, cascade included. Null when the selection disagrees. */
797
+ readonly tabStops: readonly ParagraphTabStop[] | null;
798
+ /**
799
+ * Which fields are `null` because the selection DISAGREES, as opposed to because nothing
800
+ * states them.
801
+ *
802
+ * A `null` alone cannot tell those apart, and both readings shipped as bugs: a
803
+ * disagreement rendered as a concrete value is uncorrectable, because the value that
804
+ * would fix it is the one already on screen; an absent value rendered as "mixed" tells a
805
+ * single paragraph it disagrees with itself.
806
+ */
807
+ readonly disagrees: {
808
+ readonly alignment: boolean;
809
+ readonly direction: boolean;
810
+ readonly spaceBeforePt: boolean;
811
+ readonly spaceAfterPt: boolean;
812
+ readonly lineSpacing: boolean;
813
+ readonly tabStops: boolean;
814
+ readonly indentLeft: boolean;
815
+ readonly indentRight: boolean;
816
+ readonly indentFirstLine: boolean;
817
+ };
818
+ /**
819
+ * Whether the indent reads are UNKNOWN rather than disagreed.
820
+ *
821
+ * The engine reports no indent at all for a paragraph inside a table — correct, but not
822
+ * placeable on a ruler. A control must not call that "mixed": one paragraph cannot
823
+ * disagree with itself, and the commonest paragraph in a real document is in a cell.
824
+ */
825
+ readonly indentUnknown: boolean;
826
+ }
827
+ /**
828
+ * The fields `apply` accepts. Omitted fields are left as authored; `null` where allowed
829
+ * REMOVES the setting so the style supplies it again, which is not the same as a zero.
830
+ *
831
+ * @public
832
+ */
833
+ interface ParagraphFormatUpdate {
834
+ readonly alignment?: 'left' | 'center' | 'right' | 'justify';
835
+ /** Word's Direction. `ltr` overrides a right-to-left style with `w:bidi w:val="0"`. */
836
+ readonly direction?: 'ltr' | 'rtl';
837
+ readonly spaceBeforePt?: number | null;
838
+ readonly spaceAfterPt?: number | null;
839
+ readonly lineSpacing?: {
840
+ readonly rule: 'multiple' | 'exact' | 'atLeast';
841
+ readonly value: number;
842
+ } | null;
843
+ readonly indentLeftTwips?: number | null;
844
+ readonly indentRightTwips?: number | null;
845
+ readonly indentFirstLineTwips?: number | null;
846
+ readonly contextualSpacing?: boolean;
847
+ readonly keepNext?: boolean;
848
+ readonly keepLines?: boolean;
849
+ readonly widowControl?: boolean;
850
+ readonly pageBreakBefore?: boolean;
851
+ /** Replace the custom tab stops. An EMPTY list clears them; omit to leave them alone. */
852
+ readonly tabStops?: readonly ParagraphTabStop[];
853
+ }
854
+
855
+ /** Shared draft conversion and mixed-value handling for Paragraph dialogs. */
856
+
857
+ /** @public */
858
+ declare const twipsToInches: (twips: number) => number;
859
+ /**
860
+ * Inches for DISPLAY, in the BROWSER's number format.
861
+ *
862
+ * `0.5` and `0,5` are the same measurement, and roughly half the locales this ships with
863
+ * write the second one. Interpolating a raw `Number` into a string picks the first for
864
+ * everyone. The catalogue supplies the surrounding words; this supplies the number.
865
+ *
866
+ * Not the editor's locale: nothing in the i18n layer exposes one to read, so a German
867
+ * editor in an American browser still renders `0.5`. The browser's guess beats a hardcoded
868
+ * `.` for every reader whose browser matches their language, which is most of them.
869
+ * @public
870
+ */
871
+ declare const formatInches: (twips: number) => string;
872
+ /** @public */
873
+ declare const inchesToTwips: (inches: number) => number;
874
+ /** @public */
875
+ type TabAlignment = 'left' | 'center' | 'right' | 'decimal' | 'bar';
876
+ /** @public */
877
+ type TabLeaderName = 'none' | 'dot' | 'hyphen' | 'underscore';
878
+ /** One label key per alignment, so the rows read as words rather than as `w:val` values. * @public
879
+ */
880
+ declare const TAB_ALIGNMENT_LABELS: {
881
+ readonly left: 'dialogs.paragraph.tabAlignLeft';
882
+ readonly center: 'dialogs.paragraph.tabAlignCenter';
883
+ readonly right: 'dialogs.paragraph.tabAlignRight';
884
+ readonly decimal: 'dialogs.paragraph.tabAlignDecimal';
885
+ readonly bar: 'dialogs.paragraph.tabAlignBar';
886
+ };
887
+ /** The "Special" pair: the signed first-line offset, split into a kind and a magnitude. * @public
888
+ */
889
+ type SpecialIndent = 'none' | 'firstLine' | 'hanging';
890
+ /** @public */
891
+ declare const specialOf: (signedTwips: number | null) => SpecialIndent;
892
+ /** Fold the "Special" pair back into the ONE signed value the engine takes. * @public
893
+ */
894
+ declare const signedFirstLineOf: (kind: SpecialIndent, magnitudeTwips: number) => number;
895
+ /**
896
+ * Every field of the form, in the shape the controls hold it.
897
+ *
898
+ * Deliberately flat and all-defined: this is what the dialog SHOWS, and a control cannot
899
+ * show "mixed" and a number at once. The disagreement itself is remembered by comparing
900
+ * against the seed, not by keeping a null in here.
901
+ * @public
902
+ */
903
+ interface ParagraphDialogFields {
904
+ alignment: 'left' | 'center' | 'right' | 'justify';
905
+ direction: 'ltr' | 'rtl';
906
+ indentLeft: number;
907
+ indentRight: number;
908
+ special: SpecialIndent;
909
+ specialBy: number;
910
+ spaceBefore: number;
911
+ spaceAfter: number;
912
+ lineRule: 'multiple' | 'exact' | 'atLeast';
913
+ lineValue: number;
914
+ contextualSpacing: boolean;
915
+ keepNext: boolean;
916
+ keepLines: boolean;
917
+ widowControl: boolean;
918
+ pageBreakBefore: boolean;
919
+ tabStops: readonly ParagraphTabStop[];
920
+ /** The user pressed "Clear all", which is a decision even when the list already looked empty. */
921
+ clearedAllTabStops: boolean;
922
+ }
923
+ /**
924
+ * Open the form on the selection.
925
+ *
926
+ * A `null` field means the selection DISAGREES about that setting. There is no third
927
+ * checkbox state to show it with, so the control opens on the least surprising value and
928
+ * {@link changedFields} keeps the disagreement alive by not writing what the user did not
929
+ * touch. `widowControl` opens ON because that is the Word default a document inherits
930
+ * when nothing says otherwise.
931
+ * @public
932
+ */
933
+ declare function seedFields(format: ParagraphFormatRead): ParagraphDialogFields;
934
+ /**
935
+ * Which settings the selection DISAGREES about, so a control can show it.
936
+ *
937
+ * The value fields need this as much as the checkboxes do. A control that renders a
938
+ * disagreement as a plausible-looking number is not just unhelpful — it makes the
939
+ * disagreement uncorrectable, because the value that would fix it is the one already on
940
+ * screen, so `changedFields` sees nothing move and writes nothing. Four paragraphs at
941
+ * mixed alignments showed "Left" and could not be set to Left.
942
+ * @public
943
+ */
944
+ interface ParagraphDialogMixed {
945
+ readonly contextualSpacing: boolean;
946
+ readonly keepNext: boolean;
947
+ readonly keepLines: boolean;
948
+ readonly widowControl: boolean;
949
+ readonly pageBreakBefore: boolean;
950
+ /** The selection's paragraphs carry DIFFERENT tab stops, so the list shows none of them. */
951
+ readonly tabStops: boolean;
952
+ readonly alignment: boolean;
953
+ readonly direction: boolean;
954
+ readonly indentLeft: boolean;
955
+ readonly indentRight: boolean;
956
+ readonly special: boolean;
957
+ readonly spaceBefore: boolean;
958
+ readonly spaceAfter: boolean;
959
+ readonly lineSpacing: boolean;
960
+ }
961
+ /** The five members that are checkboxes, and so share a label key with their control. * @public
962
+ */
963
+ type ParagraphFlagKey = 'contextualSpacing' | 'keepNext' | 'keepLines' | 'widowControl' | 'pageBreakBefore';
964
+ /** @public */
965
+ declare const NO_MIXED_FIELDS: ParagraphDialogMixed;
966
+ /**
967
+ * A checkbox over a setting the selection disagrees about is INDETERMINATE, not unchecked
968
+ * — unchecked would claim the paragraphs agree it is off. The read reports `null` for
969
+ * exactly this, and a control that collapses it to a boolean throws the distinction away.
970
+ * @public
971
+ */
972
+ declare function mixedFieldsOf(format: ParagraphFormatRead): ParagraphDialogMixed;
973
+ /** Whether two stop lists say the same thing. A list needs more than reference equality. * @public
974
+ */
975
+ declare function sameTabStops(a: readonly ParagraphTabStop[], b: readonly ParagraphTabStop[]): boolean;
976
+ /**
977
+ * The submission: ONLY the fields that moved since the dialog opened.
978
+ *
979
+ * Sending the whole form would flatten every setting the selection disagrees about. A
980
+ * mixed `keepNext` would become off on every paragraph, and a mixed left indent would
981
+ * become an explicit zero — which is worse than wrong, because a zero BLOCKS the style
982
+ * cascade where leaving the setting alone would let the style keep supplying it. An
983
+ * untouched field is not a decision, so it is not written.
984
+ *
985
+ * Returns null when nothing moved, which the caller treats as "just close": an empty
986
+ * write would still push an undo entry that restores nothing.
987
+ * @public
988
+ */
989
+ declare function changedFields(seed: ParagraphDialogFields, current: ParagraphDialogFields,
990
+ /** What the selection disagreed about when the dialog opened. */
991
+ seedMixed?: ParagraphDialogMixed,
992
+ /** What it still disagrees about now. A field that left this set was RESOLVED. */
993
+ currentMixed?: ParagraphDialogMixed): ParagraphFormatUpdate | null;
994
+ /**
995
+ * The physical alignment a paragraph shows after its direction flips, with its stored
996
+ * `w:jc` unchanged: leading and trailing edges trade sides. A dialog applies this to its
997
+ * Alignment field when Direction changes, so the field shows what OK will produce, the same
998
+ * result as the toolbar's direction buttons.
999
+ * @public
1000
+ */
1001
+ declare function alignmentAfterDirectionChange(alignment: ParagraphDialogFields['alignment']): ParagraphDialogFields['alignment'];
1002
+ /** Add one stop, replacing any stop already at that position, and keep the list sorted. * @public
1003
+ */
1004
+ declare function withTabStop(stops: readonly ParagraphTabStop[], stop: ParagraphTabStop): readonly ParagraphTabStop[];
1005
+ /**
1006
+ * Keep Tab inside the dialog.
1007
+ *
1008
+ * `aria-modal` tells assistive tech the rest of the page is inert; it does not stop Tab,
1009
+ * so without this the third Tab lands on the document behind the dialog — which is the
1010
+ * editable surface, so the next keystroke types into the paragraph being formatted.
1011
+ *
1012
+ * Returns true when the event was handled, so a caller only has to call `preventDefault`.
1013
+ * @public
1014
+ */
1015
+ declare function trapTabWithin(panel: HTMLElement, event: KeyboardEvent): boolean;
1016
+
1017
+ /** One cell of a month grid. @public */
1018
+ interface CalendarDay {
1019
+ /** Local calendar date as `YYYY-MM-DD`. */
1020
+ readonly iso: string;
1021
+ /** Day of the month, 1-based. */
1022
+ readonly day: number;
1023
+ /** Accessible name, spelled out in the calendar locale. */
1024
+ readonly label: string;
1025
+ /** The cell pads the grid from the previous or next month. */
1026
+ readonly otherMonth: boolean;
1027
+ /** The cell is the control's current value. */
1028
+ readonly selected: boolean;
1029
+ /** The cell is the current local date. */
1030
+ readonly today: boolean;
1031
+ }
1032
+ /** A six-week month grid plus its labels. @public */
1033
+ interface CalendarMonth {
1034
+ readonly year: number;
1035
+ /** Zero-based, like `Date#getMonth`. */
1036
+ readonly month: number;
1037
+ /** Month and year, formatted in the calendar locale. */
1038
+ readonly title: string;
1039
+ /** Seven weekday labels, starting on the locale's first day of the week. */
1040
+ readonly weekdays: readonly string[];
1041
+ /** Exactly 42 cells, so the pop-up keeps one height across months. */
1042
+ readonly days: readonly CalendarDay[];
1043
+ }
1044
+ /** Inputs for {@link calendarMonth}. @public */
1045
+ interface CalendarMonthOptions {
1046
+ /** BCP 47 tag; an unsupported tag falls back to `en-US`. */
1047
+ readonly locale?: string;
1048
+ /** The control's current value as `YYYY-MM-DD`, or empty. */
1049
+ readonly selected?: string | null;
1050
+ /** The reference "today"; defaults to the current local date. */
1051
+ readonly today?: Date;
1052
+ }
1053
+ /** Format a local date as `YYYY-MM-DD`. @public */
1054
+ declare function isoDateOf(date: Date): string;
1055
+ /**
1056
+ * Parse the leading `YYYY-MM-DD` of an ISO value as a LOCAL date, or null.
1057
+ *
1058
+ * A control's `w:fullDate` is `YYYY-MM-DDT00:00:00Z`; only its calendar date matters here,
1059
+ * and reading it through `Date` in a western time zone would show the previous day.
1060
+ * @public
1061
+ */
1062
+ declare function parseIsoDate(value: string): Date | null;
1063
+ /**
1064
+ * First day of the week for a locale, as `Date#getDay` counts it (0 = Sunday).
1065
+ *
1066
+ * Asks the runtime's week data when it has any, and otherwise falls back to a region table
1067
+ * so a server without ICU week info still starts a US calendar on Sunday.
1068
+ * @public
1069
+ */
1070
+ declare function firstDayOfWeek(locale?: string): number;
1071
+ /** Month-and-year title for a grid, formatted in the calendar locale. @public */
1072
+ declare function calendarMonthTitle(year: number, month: number, locale?: string): string;
1073
+ /** Seven weekday labels starting on the locale's first weekday. @public */
1074
+ declare function calendarWeekdays(locale?: string): readonly string[];
1075
+ /**
1076
+ * Build the six-week grid for one month.
1077
+ *
1078
+ * Bounded by construction: 42 cells whatever the month, and every value is derived from the
1079
+ * year and month numbers, never from document text.
1080
+ * @public
1081
+ */
1082
+ declare function calendarMonth(year: number, month: number, options?: CalendarMonthOptions): CalendarMonth;
1083
+ /** The month after or before `(year, month)`, wrapping the year. @public */
1084
+ declare function shiftMonth(year: number, month: number, delta: 1 | -1): {
1085
+ readonly year: number;
1086
+ readonly month: number;
1087
+ };
1088
+ /** Calendar keyboard destination. Shift+PageUp/PageDown moves one year. @public */
1089
+ declare function calendarDateForKey(iso: string, key: string, locale?: string, shift?: boolean): string | null;
1090
+ /** Format an ISO date for numeric entry in the editor locale. @public */
1091
+ declare function calendarDateText(iso: string, locale?: string): string;
1092
+ /** Parse a complete ISO or regional numeric date; ambiguous two-digit years are refused. @public */
1093
+ declare function calendarDateFromText(text: string, locale?: string): string | null;
1094
+ /** The twelve Gregorian month names for a month selector. @public */
1095
+ declare function calendarMonthNames(locale?: string): readonly string[];
1096
+
1097
+ /** Shared focus and placement for engine and host value pop-ups. */
1098
+ /** Place a popup against an anchor, within the viewport or its visible sheet. @public */
1099
+ declare function positionContentControlPopup(panel: HTMLElement, anchor: HTMLElement): void;
1100
+ /** Follow scrolling, zoom, and size changes. Call the returned cleanup when the popup closes. @public */
1101
+ declare function observeContentControlPopup(panel: HTMLElement, anchor: HTMLElement): () => void;
1102
+ /** Keep keyboard input inside a popup; Escape cancels and Tab wraps visible controls. @public */
1103
+ declare function contentControlPopupKeyDown(panel: HTMLElement, event: KeyboardEvent, cancel: () => void): void;
1104
+ /** Capture a popup's opener, with the editable pages as fallback when no control had focus. @public */
1105
+ declare function contentControlPopupOpener(anchor: HTMLElement | null): HTMLElement | null;
1106
+
1107
+ /** The stateful keyboard behavior used by all value lists. @public */
1108
+ interface ContentControlListNavigation {
1109
+ /** Handle list keys on a popup root. Input editing keys remain native. */
1110
+ keyDown(event: KeyboardEvent, root: HTMLElement): void;
1111
+ /** Reset typeahead when opening a different session. */
1112
+ reset(): void;
1113
+ }
1114
+ /** Create bounded, locale-aware typeahead and roving focus for a popup's options. @public */
1115
+ declare function createContentControlListNavigation(locale?: string): ContentControlListNavigation;
1116
+
1117
+ /** The `accept` list of the engine's picker: what `replaceImage` takes. */
1118
+ declare const CONTENT_CONTROL_PICTURE_ACCEPT = "image/png,image/jpeg,image/gif,image/bmp,image/webp";
1119
+
1120
+ /** A processor location in the returned document's body, including table paragraphs. @public */
1121
+ interface RefreshLocation {
1122
+ /** OOXML w14:paraId: eight hexadecimal digits, 00000001 through 7FFFFFFF. Case-insensitive. Use this or paragraphIndex, not both. */
1123
+ readonly paragraphId?: string;
1124
+ /** Zero-based body paragraph index in document order. */
1125
+ readonly paragraphIndex?: number;
1126
+ /** UTF-16 offsets in the returned paragraph. */
1127
+ readonly start: number;
1128
+ readonly end: number;
1129
+ /** Exact returned text at these offsets. Required to reject mismatched metadata. */
1130
+ readonly text: string;
1131
+ }
1132
+ /** One processor change. Keep its id stable across cumulative results. @public */
1133
+ interface RefreshChangeInput {
1134
+ readonly id: string;
1135
+ /** Processor-provided review summary, including changes without a body location. Maximum: 1000 characters. */
1136
+ readonly description?: string;
1137
+ readonly location?: RefreshLocation;
1138
+ /** Deletions without a surviving range have no highlight. */
1139
+ readonly unavailableReason?: 'deleted' | 'unavailable';
1140
+ }
1141
+ /** One validated change for an accepted result. @public */
1142
+ interface RefreshChange {
1143
+ readonly id: string;
1144
+ /** Processor-provided summary. The controller does not compute a document diff. */
1145
+ readonly description?: string;
1146
+ /** Identity of the accepted submission and processor sequence. */
1147
+ readonly resultId: string;
1148
+ /** True for a new change id, changed text, or changed description in an existing change id. */
1149
+ readonly isNew: boolean;
1150
+ readonly status: 'available' | 'deleted' | 'unavailable' | 'invalid' | 'unsupported-story';
1151
+ readonly location?: RefreshLocation;
1152
+ /** Why this change cannot receive a highlight. Includes the requested location when supplied. */
1153
+ readonly diagnostic?: {
1154
+ readonly code: 'missing-location' | 'deleted' | 'invalid-selector' | 'invalid-paragraph-id' | 'paragraph-not-found' | 'ambiguous-paragraph-id' | 'invalid-offsets' | 'text-mismatch' | 'not-rendered' | 'unsupported-story' | 'multiple-paragraphs';
1155
+ readonly location?: RefreshLocation;
1156
+ };
1157
+ }
1158
+ /** A document captured for external processing. Treat this object as an opaque token. @public */
1159
+ interface RefreshSubmission {
1160
+ readonly id: string;
1161
+ readonly bytes: ArrayBuffer;
1162
+ }
1163
+ /** Cumulative output for one submission. Assign sequence at the processor, before delivery. @public */
1164
+ interface RefreshUpdate {
1165
+ readonly submission: RefreshSubmission;
1166
+ readonly sequence: number;
1167
+ readonly bytes: ArrayBuffer | Uint8Array;
1168
+ /** Omit to derive changes from tracked revisions when a review module is registered. */
1169
+ readonly changes?: readonly RefreshChangeInput[];
1170
+ /** Stable failed operation ids. The controller reports these and never retries processor work. */
1171
+ readonly failures?: readonly string[];
1172
+ }
1173
+ /** Stable refusal codes for external document replacement. @public */
1174
+ type RefreshFailureCode = 'unavailable' | 'collaboration' | 'busy' | 'cancelled' | 'superseded' | 'document-changed' | 'local-edits' | 'out-of-order' | 'invalid-result' | 'invalid-document' | 'input-failed' | 'load-failed' | 'recovery-failed';
1175
+ /** Completion belongs to one result, including refusals and recovery failures. @public */
1176
+ type RefreshResult = {
1177
+ readonly ok: true;
1178
+ readonly resultId: string;
1179
+ readonly changes: readonly RefreshChange[];
1180
+ readonly changeInformation: 'available' | 'unavailable';
1181
+ readonly failures: readonly string[];
1182
+ } | {
1183
+ readonly ok: false;
1184
+ readonly resultId: string;
1185
+ readonly code: RefreshFailureCode;
1186
+ readonly recovered?: boolean;
1187
+ };
1188
+ /** Observable controller state. Document editing stays available during processing. @public */
1189
+ interface DocumentRefreshState {
1190
+ readonly phase: 'idle' | 'capturing' | 'processing' | 'refreshing' | 'recovering' | 'complete' | 'failed';
1191
+ readonly result: RefreshResult | null;
1192
+ readonly changes: readonly RefreshChange[];
1193
+ /** Whether highlights are requested for available locations. False when the whole set starts dismissal. */
1194
+ readonly highlightsVisible: boolean;
1195
+ /** Offer restore and download controls when true. */
1196
+ readonly recoveryAvailable: boolean;
1197
+ }
1198
+ /** Opacity fade settings. Reduced motion caps fades at 125ms. @public */
1199
+ type RefreshHighlightAnimation = AnchorHighlightAnimation;
1200
+ /** Presentation for temporary paragraph highlights. Each call starts from these defaults. @public */
1201
+ interface RefreshHighlightOptions extends AnchorHighlightOptions {
1202
+ /** Include earlier changes from the latest cumulative result. Default: false. */
1203
+ readonly includePrevious?: boolean;
1204
+ /** Select these change IDs instead of the recent/all filter. Unknown or unavailable IDs are skipped. Empty means none. */
1205
+ readonly changeIds?: readonly string[];
1206
+ }
1207
+ /** Explicit highlight dismissal. Document edits always remove stale highlights immediately. @public */
1208
+ type ClearRefreshHighlightsOptions = ClearAnchorHighlightOptions;
1209
+ /** Explicit change navigation. Does not change the default scroll preservation during refresh. @public */
1210
+ interface NavigateToChangeOptions extends ScrollToAnchorOptions {
1211
+ /** Move the caret and focus to the changed range start. Default: false. */
1212
+ readonly focus?: boolean;
1213
+ /** Target alignment. Default: center. centerIfNeeded preserves scroll for an already visible target. */
1214
+ readonly block?: ScrollPlacement;
1215
+ }
1216
+ /** External file transport stays in your application. Reload resets selection and undo history. @public */
1217
+ interface DocumentRefresh {
1218
+ /** Finish pending input and capture bytes with their document revision. Supersedes earlier submissions. */
1219
+ capture(): Promise<RefreshSubmission>;
1220
+ /** Accept cumulative output. Preserve a clamped scroll position without moving focus. */
1221
+ applyUpdate(update: RefreshUpdate): Promise<RefreshResult>;
1222
+ /** Cancel pending processing. An accepted result stays loaded. */
1223
+ cancel(): void;
1224
+ /** End processing when no further output will arrive. */
1225
+ finish(submission: RefreshSubmission): void;
1226
+ /** Cached state, suitable for framework external-store subscriptions. */
1227
+ snapshot(): DocumentRefreshState;
1228
+ /** Observe state changes. Returns an unsubscribe function. */
1229
+ subscribe(listener: () => void): () => void;
1230
+ /** Completion notification for every `applyUpdate()` call, including a refused result. */
1231
+ onResult(listener: (result: RefreshResult) => void): () => void;
1232
+ /** Highlight available changes and return their count, including offscreen locations. Zero means none. Always validates options. */
1233
+ highlightChanges(options?: RefreshHighlightOptions): number;
1234
+ /** Remove temporary paragraph highlights without changing document content or history. */
1235
+ clearHighlights(options?: ClearRefreshHighlightsOptions): void;
1236
+ /** Explicit navigation. Does not focus unless requested. Returns false for unavailable locations. */
1237
+ navigateToChange(id: string, options?: NavigateToChangeOptions): boolean;
1238
+ /** Return a copy for download after recovery fails. */
1239
+ recoveryBytes(): ArrayBuffer | null;
1240
+ /** Retry recovery only while the failed document session is still active. */
1241
+ recover(): Promise<boolean>;
1242
+ }
1243
+ /** A capture failure with a stable code. `applyUpdate()` failures use RefreshResult instead. @public */
1244
+ declare class DocumentRefreshError extends Error {
1245
+ /** Machine-readable reason. */
1246
+ readonly code: RefreshFailureCode;
1247
+ constructor(code: RefreshFailureCode, cause?: unknown);
1248
+ }
1249
+
1250
+ /**
1251
+ * Get the engine-owned controller for updated DOCX files. React and Vue use the same controller.
1252
+ * Transport and processor jobs belong to your application. This is a host API, not an Office.js document member.
1253
+ * @public
1254
+ */
1255
+ declare function createDocumentRefresh(editor: DocxEditorInstance): DocumentRefresh;
1256
+
1257
+ /**
1258
+ * Ranges for `watchHighlights` and `useHighlights`: an array, or a function of the editor
1259
+ * that runs again after document changes. @public
1260
+ */
1261
+ type HighlightSource = readonly HighlightRange[] | ((editor: Editor) => readonly HighlightRange[]);
1262
+ /** Milliseconds a function source waits after an edit before it runs again. @public */
1263
+ declare const HIGHLIGHT_REFRESH_MS = 150;
1264
+ /** Options for {@link watchHighlights}. @public */
1265
+ interface WatchHighlightsOptions extends HighlightOptions {
1266
+ /** Called when the applied and unavailable counts change. */
1267
+ readonly onResult?: (result: HighlightResult) => void;
1268
+ }
1269
+ /** A highlight set that {@link watchHighlights} keeps current. @public */
1270
+ interface HighlightWatch {
1271
+ /** What the last application resolved. */
1272
+ readonly result: HighlightResult;
1273
+ /** Run the source again now. */
1274
+ refresh(): void;
1275
+ /** Replace the source or options. Applies at once and keeps the set's stacking position. */
1276
+ update(source: HighlightSource, options?: HighlightOptions): void;
1277
+ /** Remove the set and stop watching. */
1278
+ stop(): void;
1279
+ }
1280
+ /**
1281
+ * Highlight a named set and keep it current as the document changes.
1282
+ *
1283
+ * @example
1284
+ * ```ts
1285
+ * const glossary = watchHighlights(editor, 'glossary', (editor) =>
1286
+ * editor.findMatches(terms, { wholeWord: true }).flat()
1287
+ * );
1288
+ * // Later:
1289
+ * glossary.stop();
1290
+ * ```
1291
+ * @public
1292
+ */
1293
+ declare function watchHighlights(editor: Editor, name: string, source: HighlightSource, options?: WatchHighlightsOptions): HighlightWatch;
1294
+
1295
+ /** Milliseconds of quiet before a typed query runs. @public */
1296
+ declare const SEARCH_DEBOUNCE_MS = 150;
1297
+ /** Most matches one search reports; a full result reads as "at least this many". @public */
1298
+ declare const SEARCH_MATCH_LIMIT = 2000;
1299
+ /** The highlight set name the search session owns. @public */
1300
+ declare const SEARCH_HIGHLIGHT_SET = "search";
1301
+ /** Stacking priority of search highlights, above host sets at the default `0`. @public */
1302
+ declare const SEARCH_HIGHLIGHT_PRIORITY = 10;
1303
+ /** Which matches a search interface highlights. @public */
1304
+ type DocumentSearchHighlight = 'all' | 'active' | 'none';
1305
+ /** Search options that narrow a query. @public */
1306
+ interface DocumentSearchOptions {
1307
+ readonly matchCase?: boolean;
1308
+ readonly wholeWord?: boolean;
1309
+ }
1310
+ /** How a search moves to a match. @public */
1311
+ interface DocumentSearchNavigateOptions {
1312
+ /** Move focus to the document. Default: `false`. */
1313
+ readonly focus?: boolean;
1314
+ }
1315
+ /** Options for {@link DocumentSearch.find}. @public */
1316
+ interface DocumentSearchFindOptions extends DocumentSearchOptions {
1317
+ /**
1318
+ * Highlight the results until `clear()` or the next `find()`: `'all'`, `'active'`, or
1319
+ * `'none'`. Default: no request of its own, so highlights follow the Find pane and hooks.
1320
+ */
1321
+ readonly highlight?: DocumentSearchHighlight;
1322
+ /** Select the first match and scroll to it. Default: `false`. */
1323
+ readonly selectFirst?: boolean;
1324
+ }
1325
+ /** A snapshot of the shared search. The same object until something changes. @public */
1326
+ interface DocumentSearchState {
1327
+ /** The query as typed. It can lead the searched query by one debounce. */
1328
+ readonly query: string;
1329
+ readonly matchCase: boolean;
1330
+ readonly wholeWord: boolean;
1331
+ /** Matches for the last searched query, in document order. */
1332
+ readonly matches: readonly TextMatch[];
1333
+ /** The search stopped at {@link SEARCH_MATCH_LIMIT} with matches still ahead. */
1334
+ readonly truncated: boolean;
1335
+ /** Index of the current match, or `-1` before any navigation. */
1336
+ readonly activeIndex: number;
1337
+ /** The current match, or `null` before any navigation. */
1338
+ readonly activeMatch: TextMatch | null;
1339
+ /** A typed query is waiting for its debounce. */
1340
+ readonly isPending: boolean;
1341
+ }
1342
+ /**
1343
+ * The shared search of one editor. Get it with {@link createDocumentSearch}.
1344
+ * @public
1345
+ */
1346
+ interface DocumentSearch {
1347
+ /** The current state. Returns the same object until the state changes. */
1348
+ getState(): DocumentSearchState;
1349
+ /** Observe state changes. Returns an unsubscribe function. */
1350
+ subscribe(listener: () => void): () => void;
1351
+ /**
1352
+ * Search now, without a debounce, and return the matches. Clears the active match unless
1353
+ * `selectFirst` selects one. `highlight` highlights the results until `clear()`.
1354
+ */
1355
+ find(query: string, options?: DocumentSearchFindOptions): readonly TextMatch[];
1356
+ /** Update the typed query. The search runs after {@link SEARCH_DEBOUNCE_MS} of quiet. */
1357
+ setQuery(query: string): void;
1358
+ setMatchCase(value: boolean): void;
1359
+ setWholeWord(value: boolean): void;
1360
+ /**
1361
+ * Select a match and scroll to it. Focus stays where it is, so a search box keeps it and
1362
+ * Enter can move to the next match; pass `{ focus: true }` to move focus to the document.
1363
+ * Returns false for an index without a match.
1364
+ */
1365
+ goTo(index: number, options?: DocumentSearchNavigateOptions): boolean;
1366
+ /** Go to the next or previous match, wrapping at the ends. */
1367
+ next(options?: DocumentSearchNavigateOptions): boolean;
1368
+ previous(options?: DocumentSearchNavigateOptions): boolean;
1369
+ /** Empty the query and drop the results, without changing the selection. */
1370
+ clear(): void;
1371
+ /**
1372
+ * Highlight matches while the returned function is not called. With several requests,
1373
+ * the widest wins: `'all'`, then `'active'`. Without a request, nothing is highlighted.
1374
+ * The Find pane requests highlights while its Find tab is open.
1375
+ */
1376
+ showHighlights(mode: DocumentSearchHighlight): () => void;
1377
+ }
1378
+ /**
1379
+ * The shared search session of an editor. Every call for the same editor returns the same
1380
+ * session, so the Find pane and your code read and drive one search.
1381
+ *
1382
+ * @example
1383
+ * ```ts
1384
+ * const search = createDocumentSearch(editor);
1385
+ * const stop = search.showHighlights('all');
1386
+ * search.find('Supplier', { wholeWord: true });
1387
+ * search.next();
1388
+ * ```
1389
+ * @public
1390
+ */
1391
+ declare function createDocumentSearch(editor: Editor): DocumentSearch;
1392
+
1393
+ export { AUTO_ZOOM_MODE, AnchorHighlightAnimation, AnchorHighlightOptions, BROWSER_AUTOMATION_CAPABILITIES, CONTENT_CONTROL_PICTURE_ACCEPT, ClearAnchorHighlightOptions, DRAWING_REL_FROM_H, DRAWING_REL_FROM_V, DocumentRefreshError, DocxEditorInstance, DrawingPositionInput, FIT_WIDTH_ZOOM_MODE, HIGHLIGHT_REFRESH_MS, HighlightOptions, HighlightRange, HighlightResult, LOADING_SNAPSHOT, NO_MIXED_FIELDS, OpenPaginatedResult, PX_PER_CM, PX_PER_INCH, PaginatedSurface, PaginatedSurfaceOptions, ParagraphTabStop, REVIEW_MARKERS_GUTTER_PX, ReviewPaneOverflow, SEARCH_DEBOUNCE_MS, SEARCH_HIGHLIGHT_PRIORITY, SEARCH_HIGHLIGHT_SET, SEARCH_MATCH_LIMIT, SNAP_TWIPS_CM, SNAP_TWIPS_INCH, ScrollPlacement, ScrollToAnchorOptions, TAB_ALIGNMENT_LABELS, TOOLBAR_COLLAPSE_ORDER, TOOLBAR_OVERFLOW_HYSTERESIS, TOOLBAR_PANEL_EDGE_MARGIN, TOOLBAR_PINNED_GROUPS, TWIPS_PER_CM, TWIPS_PER_INCH, TreeDocxSessionView, ZOOM_MAX, ZOOM_MIN, alignmentAfterDirectionChange, applyThemeShade, applyThemeTint, arrangeToolbarGroups, barRoomWidth, calendarDateForKey, calendarDateFromText, calendarDateText, calendarMonth, calendarMonthNames, calendarMonthTitle, calendarWeekdays, changedFields, chordLetter, clipboardDropLandsText, clipboardPasteLandsContent, collapseOrder, collapsibleGroupCost, contentControlPopupKeyDown, contentControlPopupOpener, controlsOverflow, createBrowserAutomationHost, createContentControlListNavigation, createDocumentRefresh, createDocumentSearch, createLayoutShaping, dragIndent, editorCommandKey, editorInstanceScope, firstDayOfWeek, formatInches, generateRulerTicks, handlePosition, hasOpenNestedPopup, inchesToTwips, isoDateOf, listenForPopupEscape, listenForPopupFocusLeave, lowerColorValueForBorder, lowerColorValueForFill, mixedFieldsOf, mountPaginatedSurface, observeContentControlPopup, parseIsoDate, partOfNodeId, positionContentControlPopup, positionInputFromPropertiesCommand, propertiesCommandHasPositionFields, readAvailableWidth, readColumnGap, readInlineMargins, resolveColorValueToCss, resolveThemeColorHex, resolveZoomMode, reviewPaneEntitledZoom, rulerPageBox, sameOverflow, sameTabStops, sameZoomMode, seedFields, separatorLeadingCost, shiftMonth, signedFirstLineOf, snapTwips, specialOf, surfaceExtent, tableCommandState, toEditorFontError, toolbarGroupPriority, toolbarOverflowGroups, toolbarPanelPlacement, toolbarPopupLeft, trailingGapCost, trapTabWithin, twipsToInches, validateDrawingPositionInput, validateSetImagePositionCommand, validateThemeModifier, watchHighlights, withTabStop };
1394
+ export type { BarRoomInput, CalendarDay, CalendarMonth, CalendarMonthOptions, ClearRefreshHighlightsOptions, ColorLowerResult, ContentControlListNavigation, DocumentRefresh, DocumentRefreshState, DocumentSearch, DocumentSearchFindOptions, DocumentSearchHighlight, DocumentSearchNavigateOptions, DocumentSearchOptions, DocumentSearchState, HighlightSource, HighlightWatch, NavigateToChangeOptions, ParagraphDialogFields, ParagraphDialogMixed, ParagraphFlagKey, ParagraphFlagState, ParagraphFormatRead, ParagraphFormatUpdate, PopupEscapeOptions, PopupFocusLeaveOptions, RefreshChange, RefreshChangeInput, RefreshFailureCode, RefreshHighlightAnimation, RefreshHighlightOptions, RefreshLocation, RefreshResult, RefreshSubmission, RefreshUpdate, RulerDragOptions, RulerIndent, RulerIndentHandle, RulerPageMetrics, RulerTick, RulerUnit, SpecialIndent, SurfaceExtent, TabAlignment, TabLeaderName, ToolbarFitInput, ToolbarHostGroupPlacement, ToolbarPanelPlacement, WatchHighlightsOptions };