@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.
- package/dist/chunk-6MG62I5B.cjs +272 -0
- package/dist/chunk-6MG62I5B.cjs.map +1 -0
- package/dist/chunk-EQB3WELX.js +269 -0
- package/dist/chunk-EQB3WELX.js.map +1 -0
- package/dist/document-tools/AdoptSignatureDialog.d.ts +25 -0
- package/dist/document-tools/DocumentToolButtons.d.ts +2 -0
- package/dist/document-tools/SignatureRequestBanner.d.ts +18 -0
- package/dist/document-tools/index.cjs +175 -0
- package/dist/document-tools/index.cjs.map +1 -1
- package/dist/document-tools/index.d.ts +3 -1
- package/dist/document-tools/index.js +168 -3
- package/dist/document-tools/index.js.map +1 -1
- package/dist/document-tools/viewer/GuidedSigningViewer.d.ts +26 -0
- package/dist/document-tools/viewer/SignatureFieldsOverlay.d.ts +41 -0
- package/dist/document-tools/viewer/SignatureRequestEditor.d.ts +26 -0
- package/dist/document-tools/viewer/index.cjs +983 -0
- package/dist/document-tools/viewer/index.cjs.map +1 -1
- package/dist/document-tools/viewer/index.d.ts +3 -0
- package/dist/document-tools/viewer/index.js +983 -5
- package/dist/document-tools/viewer/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/LICENSE +21 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.cjs +751 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.d.cts +192 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.d.ts +192 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.js +716 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs +1759 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.cts +39 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.ts +39 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.js +1736 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/index.cjs +1692 -0
- package/node_modules/@arbidocs/coedit/dist/index.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/index.d.cts +16 -0
- package/node_modules/@arbidocs/coedit/dist/index.d.ts +16 -0
- package/node_modules/@arbidocs/coedit/dist/index.js +1664 -0
- package/node_modules/@arbidocs/coedit/dist/index.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/server.cjs +1852 -0
- package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/server.d.cts +43 -0
- package/node_modules/@arbidocs/coedit/dist/server.d.ts +43 -0
- package/node_modules/@arbidocs/coedit/dist/server.js +1822 -0
- package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.cts +82 -0
- package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.ts +82 -0
- package/node_modules/@arbidocs/coedit/dist/template.cjs +1627 -0
- package/node_modules/@arbidocs/coedit/dist/template.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/template.d.cts +125 -0
- package/node_modules/@arbidocs/coedit/dist/template.d.ts +125 -0
- package/node_modules/@arbidocs/coedit/dist/template.js +1612 -0
- package/node_modules/@arbidocs/coedit/dist/template.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.cts +8 -0
- package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.ts +8 -0
- package/node_modules/@arbidocs/coedit/package.json +68 -0
- package/node_modules/@docx-editor.dev/core/LICENSE +201 -0
- package/node_modules/@docx-editor.dev/core/README.md +125 -0
- package/node_modules/@docx-editor.dev/core/THIRD_PARTY_NOTICES.md +56 -0
- package/node_modules/@docx-editor.dev/core/dist/automation.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/automation.d.ts +162 -0
- package/node_modules/@docx-editor.dev/core/dist/automation.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/binding.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/binding.d.ts +164 -0
- package/node_modules/@docx-editor.dev/core/dist/binding.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-2GO5T2JU.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-2RC2EPND.js +3 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-4GBTELJV.cjs +28 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-4R3TEXMN.js +18 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-5CSUYANV.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6APGXLBB.cjs +3 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6AWEKBLB.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6EYYL7FL.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6JIJOZDW.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-BTQKU64Q.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-E7BQA6UP.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-EO4C5QJW.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-ETTO6GK3.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-FIJZIQXA.cjs +18 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-FRXAOVTB.js +28 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-J6BVWIDB.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-JGNVNT2A.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-K5U2PLDP.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-KKIJG3C6.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-LWDSDCMO.js +27 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-NBCVVZOM.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-O2AL2HSJ.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-O5INAWZQ.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-QMLCVPCD.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-RCHS4ZEH.cjs +27 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-RIYSCEFQ.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-S6J4O5XP.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-SRPILEWV.cjs +5 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-TSLBZ26X.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-UKVVUHZL.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-VDNNLG6X.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-VHAVHCQY.js +7 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-VX43VBAX.cjs +7 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-Z6WBFXJU.js +5 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-ZUHOMK52.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.d.ts +270 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration.d.ts +269 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/document.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/document.d.ts +290 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/document.js +0 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/editor.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/editor.d.ts +22 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/editor.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.d.ts +103 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.js +0 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.d.ts +143 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/types.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/types.d.ts +11 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/types.js +0 -0
- package/node_modules/@docx-editor.dev/core/dist/custom-node-writes-cvL5rhcD.d.ts +323 -0
- package/node_modules/@docx-editor.dev/core/dist/dist-PKZR6RSH.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/document-protection-BAGVGqaP.d.ts +20 -0
- package/node_modules/@docx-editor.dev/core/dist/editor-Ci7IZGmG.d.ts +2448 -0
- package/node_modules/@docx-editor.dev/core/dist/editor-scope-OHPwVQ5l.d.ts +84 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.css +15 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.d.ts +1394 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/export.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/export.d.ts +391 -0
- package/node_modules/@docx-editor.dev/core/dist/export.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/failure-NS2lsya4.d.ts +115 -0
- package/node_modules/@docx-editor.dev/core/dist/font-resolver-BVQB14qT.d.ts +256 -0
- package/node_modules/@docx-editor.dev/core/dist/harfbuzz.wasm +0 -0
- package/node_modules/@docx-editor.dev/core/dist/headless-document-view-qH331moE.d.ts +143 -0
- package/node_modules/@docx-editor.dev/core/dist/image-resources-BN-hUgCn.d.ts +211 -0
- package/node_modules/@docx-editor.dev/core/dist/index-Bsg7oIKP.d.ts +3869 -0
- package/node_modules/@docx-editor.dev/core/dist/index.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/index.d.ts +53 -0
- package/node_modules/@docx-editor.dev/core/dist/index.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/layout-shaping-BEyuiQOk.d.ts +246 -0
- package/node_modules/@docx-editor.dev/core/dist/layout.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/layout.d.ts +3151 -0
- package/node_modules/@docx-editor.dev/core/dist/layout.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/node-module-shim-TTKTT66I.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/note-properties-4Y9o6Gyk.d.ts +68 -0
- package/node_modules/@docx-editor.dev/core/dist/omml-equation-CuzBL5DD.d.ts +85 -0
- package/node_modules/@docx-editor.dev/core/dist/output.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/output.d.ts +97 -0
- package/node_modules/@docx-editor.dev/core/dist/output.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/protocol-Bqk4Izjc.d.ts +1651 -0
- package/node_modules/@docx-editor.dev/core/dist/review-pane-D9jm8DcY.d.ts +128 -0
- package/node_modules/@docx-editor.dev/core/dist/review-paragraph-order-DT-n6ouC.d.ts +85 -0
- package/node_modules/@docx-editor.dev/core/dist/revision-projection-DZ4kKVev.d.ts +242 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-cell-selection-D9D1KSXq.d.ts +464 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-interaction-CIC-PooQ.d.ts +135 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-paint-BME37OMv.d.ts +326 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-record-queries-CBlZqZNa.d.ts +177 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-records-4B3WwFAi.d.ts +3532 -0
- package/node_modules/@docx-editor.dev/core/dist/store.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/store.d.ts +2706 -0
- package/node_modules/@docx-editor.dev/core/dist/store.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/tree-package-fragment-BeeKxDw8.d.ts +1201 -0
- package/node_modules/@docx-editor.dev/core/dist/tree-session-contract-CVbmlMlq.d.ts +664 -0
- package/node_modules/@docx-editor.dev/core/dist/types-barrel-D3xCgQX6.d.ts +4269 -0
- package/node_modules/@docx-editor.dev/core/licenses/HarfBuzz-COPYING.txt +42 -0
- package/node_modules/@docx-editor.dev/core/package.json +140 -0
- package/node_modules/@docx-editor.dev/react/LICENSE +201 -0
- package/node_modules/@docx-editor.dev/react/README.md +141 -0
- package/node_modules/@docx-editor.dev/react/THIRD_PARTY_NOTICES.md +18 -0
- package/node_modules/@docx-editor.dev/react/dist/index.d.mts +4928 -0
- package/node_modules/@docx-editor.dev/react/dist/index.d.ts +4928 -0
- package/node_modules/@docx-editor.dev/react/dist/index.js +4 -0
- package/node_modules/@docx-editor.dev/react/dist/index.mjs +4 -0
- package/node_modules/@docx-editor.dev/react/package.json +74 -0
- package/node_modules/@docx-editor.dev/react/src/styles/editor.css +6 -0
- package/node_modules/@docx-editor.dev/react/src/styles/zIndex.ts +28 -0
- 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 };
|