@stll/folio-core 0.0.1-placeholder.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE.md +29 -0
- package/README.md +41 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/ai-edits/apply.d.ts +35 -0
- package/dist/ai-edits/apply.js +683 -0
- package/dist/ai-edits/clean-text.d.ts +28 -0
- package/dist/ai-edits/clean-text.js +23 -0
- package/dist/ai-edits/headless.d.ts +225 -0
- package/dist/ai-edits/headless.js +513 -0
- package/dist/ai-edits/index.d.ts +6 -0
- package/dist/ai-edits/index.js +5 -0
- package/dist/ai-edits/inline-emphasis.d.ts +38 -0
- package/dist/ai-edits/inline-emphasis.js +78 -0
- package/dist/ai-edits/snapshot.d.ts +9 -0
- package/dist/ai-edits/snapshot.js +195 -0
- package/dist/ai-edits/types.d.ts +156 -0
- package/dist/ai-edits/types.js +0 -0
- package/dist/ai-edits/word-diff.d.ts +20 -0
- package/dist/ai-edits/word-diff.js +77 -0
- package/dist/ai-suggestions/apply.d.ts +17 -0
- package/dist/ai-suggestions/apply.js +64 -0
- package/dist/ai-suggestions/conflict.d.ts +22 -0
- package/dist/ai-suggestions/conflict.js +67 -0
- package/dist/ai-suggestions/text-positions.d.ts +21 -0
- package/dist/ai-suggestions/text-positions.js +48 -0
- package/dist/ai-suggestions/types.d.ts +199 -0
- package/dist/ai-suggestions/types.js +59 -0
- package/dist/content-controls/errors.d.ts +52 -0
- package/dist/content-controls/errors.js +36 -0
- package/dist/content-controls/findContentControls.d.ts +55 -0
- package/dist/content-controls/findContentControls.js +75 -0
- package/dist/content-controls/index.d.ts +4 -0
- package/dist/content-controls/index.js +4 -0
- package/dist/content-controls/mutateContentControls.d.ts +51 -0
- package/dist/content-controls/mutateContentControls.js +377 -0
- package/dist/controller/folioEditor.d.ts +21 -0
- package/dist/controller/folioEditor.js +29 -0
- package/dist/controller/folioEditorEvents.d.ts +23 -0
- package/dist/controller/folioEditorEvents.js +24 -0
- package/dist/controller/hiddenEditorApi.d.ts +35 -0
- package/dist/controller/hiddenEditorApi.js +112 -0
- package/dist/controller/hiddenEditorManager.d.ts +93 -0
- package/dist/controller/hiddenEditorManager.js +308 -0
- package/dist/controller/layoutPipeline.d.ts +63 -0
- package/dist/controller/layoutPipeline.js +406 -0
- package/dist/controller/layoutScheduler.d.ts +41 -0
- package/dist/controller/layoutScheduler.js +59 -0
- package/dist/controller/layoutSession.d.ts +24 -0
- package/dist/controller/layoutSession.js +13 -0
- package/dist/docx/blockContentParser.d.ts +13 -0
- package/dist/docx/blockContentParser.js +289 -0
- package/dist/docx/bookmarkParser.d.ts +178 -0
- package/dist/docx/bookmarkParser.js +246 -0
- package/dist/docx/bookmarkPlacement.d.ts +10 -0
- package/dist/docx/bookmarkPlacement.js +50 -0
- package/dist/docx/bulletMarkers.d.ts +4 -0
- package/dist/docx/bulletMarkers.js +42 -0
- package/dist/docx/commentParser.d.ts +34 -0
- package/dist/docx/commentParser.js +127 -0
- package/dist/docx/commentReferenceNormalization.d.ts +25 -0
- package/dist/docx/commentReferenceNormalization.js +97 -0
- package/dist/docx/commentReplyMarkers.d.ts +20 -0
- package/dist/docx/commentReplyMarkers.js +123 -0
- package/dist/docx/compatibility.d.ts +12 -0
- package/dist/docx/compatibility.js +77 -0
- package/dist/docx/documentParser.d.ts +65 -0
- package/dist/docx/documentParser.js +209 -0
- package/dist/docx/drawingUtils.d.ts +56 -0
- package/dist/docx/drawingUtils.js +305 -0
- package/dist/docx/fieldParser.d.ts +228 -0
- package/dist/docx/fieldParser.js +559 -0
- package/dist/docx/footnoteParser.d.ts +109 -0
- package/dist/docx/footnoteParser.js +270 -0
- package/dist/docx/headerFooterParser.d.ts +119 -0
- package/dist/docx/headerFooterParser.js +266 -0
- package/dist/docx/headerFooterRefParser.d.ts +22 -0
- package/dist/docx/headerFooterRefParser.js +52 -0
- package/dist/docx/headerFooterReferenceNormalization.d.ts +19 -0
- package/dist/docx/headerFooterReferenceNormalization.js +64 -0
- package/dist/docx/hyperlinkParser.d.ts +108 -0
- package/dist/docx/hyperlinkParser.js +230 -0
- package/dist/docx/imageParser.d.ts +93 -0
- package/dist/docx/imageParser.js +522 -0
- package/dist/docx/mathToMathml.d.ts +15 -0
- package/dist/docx/mathToMathml.js +357 -0
- package/dist/docx/modelValidation.d.ts +13 -0
- package/dist/docx/modelValidation.js +21 -0
- package/dist/docx/normalizeBaseDirection.d.ts +12 -0
- package/dist/docx/normalizeBaseDirection.js +81 -0
- package/dist/docx/notePropertiesParser.d.ts +16 -0
- package/dist/docx/notePropertiesParser.js +99 -0
- package/dist/docx/numberingParser.d.ts +86 -0
- package/dist/docx/numberingParser.js +735 -0
- package/dist/docx/numberingReferenceNormalization.d.ts +25 -0
- package/dist/docx/numberingReferenceNormalization.js +22 -0
- package/dist/docx/paragraphParser.d.ts +86 -0
- package/dist/docx/paragraphParser.js +1132 -0
- package/dist/docx/paragraphTraversal.d.ts +19 -0
- package/dist/docx/paragraphTraversal.js +76 -0
- package/dist/docx/parser.d.ts +67 -0
- package/dist/docx/parser.js +391 -0
- package/dist/docx/parserEnums.d.ts +45 -0
- package/dist/docx/parserEnums.js +70 -0
- package/dist/docx/relsParser.d.ts +160 -0
- package/dist/docx/relsParser.js +235 -0
- package/dist/docx/replyToComment.d.ts +29 -0
- package/dist/docx/replyToComment.js +73 -0
- package/dist/docx/rezip.d.ts +166 -0
- package/dist/docx/rezip.js +1194 -0
- package/dist/docx/runConsolidator.d.ts +57 -0
- package/dist/docx/runConsolidator.js +224 -0
- package/dist/docx/runParser.d.ts +78 -0
- package/dist/docx/runParser.js +661 -0
- package/dist/docx/sdtProperties.d.ts +15 -0
- package/dist/docx/sdtProperties.js +290 -0
- package/dist/docx/sdtPropertiesPatch.d.ts +16 -0
- package/dist/docx/sdtPropertiesPatch.js +144 -0
- package/dist/docx/sectionParser.d.ts +95 -0
- package/dist/docx/sectionParser.js +534 -0
- package/dist/docx/selectiveSave.d.ts +25 -0
- package/dist/docx/selectiveSave.js +247 -0
- package/dist/docx/selectiveSaveFlags.d.ts +33 -0
- package/dist/docx/selectiveSaveFlags.js +11 -0
- package/dist/docx/selectiveSaveTripwire.d.ts +33 -0
- package/dist/docx/selectiveSaveTripwire.js +79 -0
- package/dist/docx/selectiveXmlPatch.d.ts +103 -0
- package/dist/docx/selectiveXmlPatch.js +493 -0
- package/dist/docx/serializer/blockSdtSerializer.d.ts +6 -0
- package/dist/docx/serializer/blockSdtSerializer.js +88 -0
- package/dist/docx/serializer/borderSerializer.d.ts +25 -0
- package/dist/docx/serializer/borderSerializer.js +44 -0
- package/dist/docx/serializer/commentSerializer.d.ts +31 -0
- package/dist/docx/serializer/commentSerializer.js +184 -0
- package/dist/docx/serializer/documentSerializer.d.ts +65 -0
- package/dist/docx/serializer/documentSerializer.js +199 -0
- package/dist/docx/serializer/headerFooterSerializer.d.ts +12 -0
- package/dist/docx/serializer/headerFooterSerializer.js +84 -0
- package/dist/docx/serializer/noteSerializer.d.ts +19 -0
- package/dist/docx/serializer/noteSerializer.js +70 -0
- package/dist/docx/serializer/numberingSerializer.d.ts +12 -0
- package/dist/docx/serializer/numberingSerializer.js +93 -0
- package/dist/docx/serializer/paragraphSerializer.d.ts +48 -0
- package/dist/docx/serializer/paragraphSerializer.js +559 -0
- package/dist/docx/serializer/runSerializer.d.ts +56 -0
- package/dist/docx/serializer/runSerializer.js +621 -0
- package/dist/docx/serializer/sectionPropertiesSerializer.d.ts +6 -0
- package/dist/docx/serializer/sectionPropertiesSerializer.js +187 -0
- package/dist/docx/serializer/tableSerializer.d.ts +79 -0
- package/dist/docx/serializer/tableSerializer.js +422 -0
- package/dist/docx/serializer/xmlUtils.d.ts +20 -0
- package/dist/docx/serializer/xmlUtils.js +25 -0
- package/dist/docx/settingsParser.d.ts +8 -0
- package/dist/docx/settingsParser.js +36 -0
- package/dist/docx/shapeParser.d.ts +20 -0
- package/dist/docx/shapeParser.js +272 -0
- package/dist/docx/styleParser.d.ts +50 -0
- package/dist/docx/styleParser.js +905 -0
- package/dist/docx/tableParser.d.ts +202 -0
- package/dist/docx/tableParser.js +811 -0
- package/dist/docx/textBoxParser.d.ts +117 -0
- package/dist/docx/textBoxParser.js +262 -0
- package/dist/docx/themeParser.d.ts +77 -0
- package/dist/docx/themeParser.js +330 -0
- package/dist/docx/trackedMoveRangeNormalization.d.ts +22 -0
- package/dist/docx/trackedMoveRangeNormalization.js +100 -0
- package/dist/docx/unzip.d.ts +118 -0
- package/dist/docx/unzip.js +383 -0
- package/dist/docx/vmlImageParser.d.ts +16 -0
- package/dist/docx/vmlImageParser.js +100 -0
- package/dist/docx/watermarkParser.d.ts +45 -0
- package/dist/docx/watermarkParser.js +348 -0
- package/dist/docx/wrapTypes.d.ts +29 -0
- package/dist/docx/wrapTypes.js +48 -0
- package/dist/docx/xmlParser.d.ts +297 -0
- package/dist/docx/xmlParser.js +527 -0
- package/dist/fields/bookmarkPages.d.ts +13 -0
- package/dist/fields/bookmarkPages.js +66 -0
- package/dist/fields/bookmarkText.d.ts +16 -0
- package/dist/fields/bookmarkText.js +61 -0
- package/dist/fields/evaluateField.d.ts +23 -0
- package/dist/fields/evaluateField.js +77 -0
- package/dist/fields/fieldContext.d.ts +21 -0
- package/dist/fields/fieldContext.js +0 -0
- package/dist/fields/resolveFieldValues.d.ts +44 -0
- package/dist/fields/resolveFieldValues.js +204 -0
- package/dist/fields/sectionPageCounts.d.ts +11 -0
- package/dist/fields/sectionPageCounts.js +16 -0
- package/dist/fields/seqValues.d.ts +14 -0
- package/dist/fields/seqValues.js +36 -0
- package/dist/fonts/embeddedFontTable.d.ts +42 -0
- package/dist/fonts/embeddedFontTable.js +80 -0
- package/dist/fonts/embeddedFonts.d.ts +46 -0
- package/dist/fonts/embeddedFonts.js +112 -0
- package/dist/fonts/fontDeobfuscation.d.ts +30 -0
- package/dist/fonts/fontDeobfuscation.js +57 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +23 -0
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +57 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +316 -0
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +74 -0
- package/dist/layout-bridge/convert/headerFooterLayout.js +432 -0
- package/dist/layout-bridge/convert/templatePreviewFlow.d.ts +36 -0
- package/dist/layout-bridge/convert/templatePreviewFlow.js +176 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +65 -0
- package/dist/layout-bridge/convert/toFlowBlocks.js +1309 -0
- package/dist/layout-bridge/convert/wrapEditorViewAsSurface.d.ts +17 -0
- package/dist/layout-bridge/convert/wrapEditorViewAsSurface.js +36 -0
- package/dist/layout-bridge/dom/clickToPositionDom.d.ts +66 -0
- package/dist/layout-bridge/dom/clickToPositionDom.js +304 -0
- package/dist/layout-bridge/dom/findBodyPmSpans.d.ts +7 -0
- package/dist/layout-bridge/dom/findBodyPmSpans.js +17 -0
- package/dist/layout-bridge/dom/findHfPmSpans.d.ts +62 -0
- package/dist/layout-bridge/dom/findHfPmSpans.js +197 -0
- package/dist/layout-bridge/engine/clickToPosition.d.ts +66 -0
- package/dist/layout-bridge/engine/clickToPosition.js +403 -0
- package/dist/layout-bridge/engine/hitTest.d.ts +135 -0
- package/dist/layout-bridge/engine/hitTest.js +375 -0
- package/dist/layout-bridge/engine/measuring/index.d.ts +10 -0
- package/dist/layout-bridge/engine/measuring/index.js +9 -0
- package/dist/layout-bridge/engine/selectionRects.d.ts +59 -0
- package/dist/layout-bridge/engine/selectionRects.js +485 -0
- package/dist/layout-bridge/engine/tableWidthUtils.d.ts +7 -0
- package/dist/layout-bridge/engine/tableWidthUtils.js +25 -0
- package/dist/layout-engine/index.d.ts +44 -0
- package/dist/layout-engine/index.js +691 -0
- package/dist/layout-engine/keep-together.d.ts +43 -0
- package/dist/layout-engine/keep-together.js +98 -0
- package/dist/layout-engine/layoutInstrumentation.d.ts +50 -0
- package/dist/layout-engine/layoutInstrumentation.js +43 -0
- package/dist/layout-engine/lineFlow.d.ts +8 -0
- package/dist/layout-engine/lineFlow.js +17 -0
- package/dist/layout-engine/measure/cache.d.ts +93 -0
- package/dist/layout-engine/measure/cache.js +245 -0
- package/dist/layout-engine/measure/clampFloatingWrapMargins.d.ts +20 -0
- package/dist/layout-engine/measure/clampFloatingWrapMargins.js +29 -0
- package/dist/layout-engine/measure/featureFlags.d.ts +44 -0
- package/dist/layout-engine/measure/featureFlags.js +19 -0
- package/dist/layout-engine/measure/floatingZones.d.ts +89 -0
- package/dist/layout-engine/measure/floatingZones.js +152 -0
- package/dist/layout-engine/measure/font-metrics.worker.d.ts +17 -0
- package/dist/layout-engine/measure/font-metrics.worker.js +104 -0
- package/dist/layout-engine/measure/index.d.ts +9 -0
- package/dist/layout-engine/measure/index.js +8 -0
- package/dist/layout-engine/measure/listMarkerWidth.d.ts +40 -0
- package/dist/layout-engine/measure/listMarkerWidth.js +76 -0
- package/dist/layout-engine/measure/measureBlocks.d.ts +25 -0
- package/dist/layout-engine/measure/measureBlocks.js +450 -0
- package/dist/layout-engine/measure/measureContainer.d.ts +24 -0
- package/dist/layout-engine/measure/measureContainer.js +280 -0
- package/dist/layout-engine/measure/measureHelpers.d.ts +82 -0
- package/dist/layout-engine/measure/measureHelpers.js +156 -0
- package/dist/layout-engine/measure/measureParagraph.d.ts +61 -0
- package/dist/layout-engine/measure/measureParagraph.js +724 -0
- package/dist/layout-engine/measure/measureProvider.d.ts +23 -0
- package/dist/layout-engine/measure/measureProvider.js +35 -0
- package/dist/layout-engine/measure/measureTypes.d.ts +61 -0
- package/dist/layout-engine/measure/measureTypes.js +0 -0
- package/dist/layout-engine/measure/measureWorker.d.ts +54 -0
- package/dist/layout-engine/measure/measureWorker.js +249 -0
- package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +88 -0
- package/dist/layout-engine/measure/measureWorkerProtocol.js +20 -0
- package/dist/layout-engine/measure/tableCellFloating.d.ts +26 -0
- package/dist/layout-engine/measure/tableCellFloating.js +99 -0
- package/dist/layout-engine/paginator.d.ts +84 -0
- package/dist/layout-engine/paginator.js +348 -0
- package/dist/layout-engine/paragraphFragmentRange.d.ts +9 -0
- package/dist/layout-engine/paragraphFragmentRange.js +40 -0
- package/dist/layout-engine/section-breaks.d.ts +78 -0
- package/dist/layout-engine/section-breaks.js +182 -0
- package/dist/layout-engine/tableRowBreak.d.ts +23 -0
- package/dist/layout-engine/tableRowBreak.js +147 -0
- package/dist/layout-engine/textBoxFlow.d.ts +50 -0
- package/dist/layout-engine/textBoxFlow.js +160 -0
- package/dist/layout-engine/types.d.ts +1031 -0
- package/dist/layout-engine/types.js +100 -0
- package/dist/layout-painter/documentColors.d.ts +4 -0
- package/dist/layout-painter/documentColors.js +40 -0
- package/dist/layout-painter/index.d.ts +110 -0
- package/dist/layout-painter/index.js +182 -0
- package/dist/layout-painter/registry/modules/image.d.ts +6 -0
- package/dist/layout-painter/registry/modules/image.js +17 -0
- package/dist/layout-painter/registry/modules/paragraph.d.ts +6 -0
- package/dist/layout-painter/registry/modules/paragraph.js +18 -0
- package/dist/layout-painter/registry/modules/table.d.ts +6 -0
- package/dist/layout-painter/registry/modules/table.js +16 -0
- package/dist/layout-painter/registry/modules/textBox.d.ts +6 -0
- package/dist/layout-painter/registry/modules/textBox.js +13 -0
- package/dist/layout-painter/registry/modules.d.ts +6 -0
- package/dist/layout-painter/registry/modules.js +26 -0
- package/dist/layout-painter/registry/registry.d.ts +24 -0
- package/dist/layout-painter/registry/registry.js +53 -0
- package/dist/layout-painter/registry/types.d.ts +61 -0
- package/dist/layout-painter/registry/types.js +0 -0
- package/dist/layout-painter/renderFragment.d.ts +32 -0
- package/dist/layout-painter/renderFragment.js +114 -0
- package/dist/layout-painter/renderImage.d.ts +88 -0
- package/dist/layout-painter/renderImage.js +130 -0
- package/dist/layout-painter/renderPage.d.ts +264 -0
- package/dist/layout-painter/renderPage.js +1795 -0
- package/dist/layout-painter/renderParagraph.d.ts +93 -0
- package/dist/layout-painter/renderParagraph.js +1300 -0
- package/dist/layout-painter/renderTable.d.ts +36 -0
- package/dist/layout-painter/renderTable.js +432 -0
- package/dist/layout-painter/renderTextBox.d.ts +22 -0
- package/dist/layout-painter/renderTextBox.js +67 -0
- package/dist/layout-painter/renderUtils.d.ts +42 -0
- package/dist/layout-painter/renderUtils.js +30 -0
- package/dist/layout-painter/renderWatermark.d.ts +16 -0
- package/dist/layout-painter/renderWatermark.js +61 -0
- package/dist/layout-painter/sdtBoundary.d.ts +6 -0
- package/dist/layout-painter/sdtBoundary.js +28 -0
- package/dist/managers/ContextMenuManager.d.ts +28 -0
- package/dist/managers/ContextMenuManager.js +48 -0
- package/dist/managers/DocumentLoaderManager.d.ts +47 -0
- package/dist/managers/DocumentLoaderManager.js +69 -0
- package/dist/managers/EditorModeManager.d.ts +28 -0
- package/dist/managers/EditorModeManager.js +50 -0
- package/dist/managers/ErrorManager.d.ts +26 -0
- package/dist/managers/ErrorManager.js +85 -0
- package/dist/managers/FindReplaceManager.d.ts +54 -0
- package/dist/managers/FindReplaceManager.js +104 -0
- package/dist/managers/HistoryManager.d.ts +92 -0
- package/dist/managers/HistoryManager.js +193 -0
- package/dist/managers/Subscribable.d.ts +34 -0
- package/dist/managers/Subscribable.js +46 -0
- package/dist/managers/TableSelectionManager.d.ts +74 -0
- package/dist/managers/TableSelectionManager.js +225 -0
- package/dist/managers/editorShortcuts.d.ts +42 -0
- package/dist/managers/editorShortcuts.js +60 -0
- package/dist/managers/types.d.ts +41 -0
- package/dist/managers/types.js +0 -0
- package/dist/markdown/annotations.d.ts +14 -0
- package/dist/markdown/annotations.js +42 -0
- package/dist/markdown/escape.d.ts +36 -0
- package/dist/markdown/escape.js +59 -0
- package/dist/markdown/fromMarkdown.d.ts +11 -0
- package/dist/markdown/fromMarkdown.js +223 -0
- package/dist/markdown/headings.d.ts +13 -0
- package/dist/markdown/headings.js +20 -0
- package/dist/markdown/images.d.ts +13 -0
- package/dist/markdown/images.js +63 -0
- package/dist/markdown/index.d.ts +18 -0
- package/dist/markdown/index.js +33 -0
- package/dist/markdown/internals.d.ts +15 -0
- package/dist/markdown/internals.js +35 -0
- package/dist/markdown/renderBlock.d.ts +7 -0
- package/dist/markdown/renderBlock.js +68 -0
- package/dist/markdown/renderParagraph.d.ts +11 -0
- package/dist/markdown/renderParagraph.js +64 -0
- package/dist/markdown/renderRuns.d.ts +11 -0
- package/dist/markdown/renderRuns.js +265 -0
- package/dist/markdown/renderTable.d.ts +8 -0
- package/dist/markdown/renderTable.js +229 -0
- package/dist/markdown/trailers.d.ts +13 -0
- package/dist/markdown/trailers.js +54 -0
- package/dist/markdown/types.d.ts +118 -0
- package/dist/markdown/types.js +0 -0
- package/dist/model.d.ts +13 -0
- package/dist/model.js +4 -0
- package/dist/paged-layout/LayoutSelectionGate.d.ts +80 -0
- package/dist/paged-layout/LayoutSelectionGate.js +131 -0
- package/dist/paged-layout/headerFooterMargins.d.ts +73 -0
- package/dist/paged-layout/headerFooterMargins.js +120 -0
- package/dist/paged-layout/hiddenEditorScroll.d.ts +4 -0
- package/dist/paged-layout/hiddenEditorScroll.js +4 -0
- package/dist/paged-layout/incrementalMeasure.d.ts +33 -0
- package/dist/paged-layout/incrementalMeasure.js +56 -0
- package/dist/paged-layout/rangeProjection.d.ts +51 -0
- package/dist/paged-layout/rangeProjection.js +153 -0
- package/dist/paged-layout/readOnlyEditAttempt.d.ts +5 -0
- package/dist/paged-layout/readOnlyEditAttempt.js +22 -0
- package/dist/paged-layout/scrollNavigation.d.ts +23 -0
- package/dist/paged-layout/scrollNavigation.js +31 -0
- package/dist/paged-layout/scrollPageInfo.d.ts +41 -0
- package/dist/paged-layout/scrollPageInfo.js +34 -0
- package/dist/paged-layout/scrollToPmPosition.d.ts +17 -0
- package/dist/paged-layout/scrollToPmPosition.js +95 -0
- package/dist/paged-layout/sectionBlockWidths.d.ts +35 -0
- package/dist/paged-layout/sectionBlockWidths.js +52 -0
- package/dist/paged-layout/sectionGeometry.d.ts +21 -0
- package/dist/paged-layout/sectionGeometry.js +36 -0
- package/dist/paged-layout/selectionViewportRect.d.ts +29 -0
- package/dist/paged-layout/selectionViewportRect.js +55 -0
- package/dist/paged-layout/tableColumnResize.d.ts +19 -0
- package/dist/paged-layout/tableColumnResize.js +28 -0
- package/dist/paged-layout/tableInsertButtonGeometry.d.ts +15 -0
- package/dist/paged-layout/tableInsertButtonGeometry.js +15 -0
- package/dist/paged-layout/transactionDirtyRange.d.ts +7 -0
- package/dist/paged-layout/transactionDirtyRange.js +27 -0
- package/dist/paged-layout/zoomScrollAnchor.d.ts +40 -0
- package/dist/paged-layout/zoomScrollAnchor.js +25 -0
- package/dist/prosemirror/attrs/index.d.ts +80 -0
- package/dist/prosemirror/attrs/index.js +1218 -0
- package/dist/prosemirror/autospacingBase.d.ts +11 -0
- package/dist/prosemirror/autospacingBase.js +16 -0
- package/dist/prosemirror/commands/comments.d.ts +93 -0
- package/dist/prosemirror/commands/comments.js +435 -0
- package/dist/prosemirror/commands/contentControls.d.ts +45 -0
- package/dist/prosemirror/commands/contentControls.js +294 -0
- package/dist/prosemirror/commands/contentControlsBlockFill.d.ts +15 -0
- package/dist/prosemirror/commands/contentControlsBlockFill.js +19 -0
- package/dist/prosemirror/commands/formatPainter.d.ts +31 -0
- package/dist/prosemirror/commands/formatPainter.js +130 -0
- package/dist/prosemirror/commands/formatting.d.ts +32 -0
- package/dist/prosemirror/commands/formatting.js +45 -0
- package/dist/prosemirror/commands/hyperlink.d.ts +31 -0
- package/dist/prosemirror/commands/hyperlink.js +79 -0
- package/dist/prosemirror/commands/image.d.ts +59 -0
- package/dist/prosemirror/commands/image.js +219 -0
- package/dist/prosemirror/commands/index.d.ts +13 -0
- package/dist/prosemirror/commands/index.js +13 -0
- package/dist/prosemirror/commands/pageBreak.d.ts +10 -0
- package/dist/prosemirror/commands/pageBreak.js +47 -0
- package/dist/prosemirror/commands/paragraph.d.ts +39 -0
- package/dist/prosemirror/commands/paragraph.js +64 -0
- package/dist/prosemirror/commands/pastePlainText.d.ts +39 -0
- package/dist/prosemirror/commands/pastePlainText.js +67 -0
- package/dist/prosemirror/commands/table.d.ts +83 -0
- package/dist/prosemirror/commands/table.js +105 -0
- package/dist/prosemirror/conversion/fromProseDoc.d.ts +27 -0
- package/dist/prosemirror/conversion/fromProseDoc.js +1550 -0
- package/dist/prosemirror/conversion/index.d.ts +4 -0
- package/dist/prosemirror/conversion/index.js +4 -0
- package/dist/prosemirror/conversion/runShadingMark.d.ts +16 -0
- package/dist/prosemirror/conversion/runShadingMark.js +39 -0
- package/dist/prosemirror/conversion/toProseDoc.d.ts +39 -0
- package/dist/prosemirror/conversion/toProseDoc.js +1404 -0
- package/dist/prosemirror/extensions/ExtensionManager.d.ts +43 -0
- package/dist/prosemirror/extensions/ExtensionManager.js +86 -0
- package/dist/prosemirror/extensions/StarterKit.d.ts +16 -0
- package/dist/prosemirror/extensions/StarterKit.js +132 -0
- package/dist/prosemirror/extensions/core/DocExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/core/DocExtension.js +12 -0
- package/dist/prosemirror/extensions/core/HistoryExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/core/HistoryExtension.js +28 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.d.ts +25 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +619 -0
- package/dist/prosemirror/extensions/core/TextExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/core/TextExtension.js +12 -0
- package/dist/prosemirror/extensions/create.d.ts +17 -0
- package/dist/prosemirror/extensions/create.js +129 -0
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +106 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.d.ts +8 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +172 -0
- package/dist/prosemirror/extensions/features/BidiShortcutExtension.d.ts +16 -0
- package/dist/prosemirror/extensions/features/BidiShortcutExtension.js +38 -0
- package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.d.ts +16 -0
- package/dist/prosemirror/extensions/features/ContentControlWidgetsExtension.js +21 -0
- package/dist/prosemirror/extensions/features/DropCursorExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/features/DropCursorExtension.js +20 -0
- package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.d.ts +8 -0
- package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.js +44 -0
- package/dist/prosemirror/extensions/features/GapCursorExtension.d.ts +19 -0
- package/dist/prosemirror/extensions/features/GapCursorExtension.js +24 -0
- package/dist/prosemirror/extensions/features/ImageDragExtension.d.ts +15 -0
- package/dist/prosemirror/extensions/features/ImageDragExtension.js +66 -0
- package/dist/prosemirror/extensions/features/ImagePasteExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/features/ImagePasteExtension.js +91 -0
- package/dist/prosemirror/extensions/features/ListExtension.d.ts +14 -0
- package/dist/prosemirror/extensions/features/ListExtension.js +340 -0
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +60 -0
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +35 -0
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +188 -0
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.d.ts +20 -0
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +34 -0
- package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.d.ts +20 -0
- package/dist/prosemirror/extensions/features/PasteStyleInlinerExtension.js +145 -0
- package/dist/prosemirror/extensions/features/SelectionTrackerExtension.d.ts +10 -0
- package/dist/prosemirror/extensions/features/SelectionTrackerExtension.js +17 -0
- package/dist/prosemirror/extensions/features/bidiShortcutController.d.ts +31 -0
- package/dist/prosemirror/extensions/features/bidiShortcutController.js +27 -0
- package/dist/prosemirror/extensions/features/pasteCleanup.d.ts +31 -0
- package/dist/prosemirror/extensions/features/pasteCleanup.js +159 -0
- package/dist/prosemirror/extensions/marks/AllCapsExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/AllCapsExtension.js +24 -0
- package/dist/prosemirror/extensions/marks/BoldExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/BoldExtension.js +41 -0
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.d.ts +14 -0
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.js +64 -0
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.js +47 -0
- package/dist/prosemirror/extensions/marks/CommentExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/marks/CommentExtension.js +38 -0
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/FontFamilyExtension.js +55 -0
- package/dist/prosemirror/extensions/marks/FontSizeExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/FontSizeExtension.js +47 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.d.ts +11 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +92 -0
- package/dist/prosemirror/extensions/marks/HiddenTextExtension.d.ts +23 -0
- package/dist/prosemirror/extensions/marks/HiddenTextExtension.js +35 -0
- package/dist/prosemirror/extensions/marks/HighlightExtension.d.ts +10 -0
- package/dist/prosemirror/extensions/marks/HighlightExtension.js +115 -0
- package/dist/prosemirror/extensions/marks/HyperlinkExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/marks/HyperlinkExtension.js +146 -0
- package/dist/prosemirror/extensions/marks/ItalicExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/ItalicExtension.js +34 -0
- package/dist/prosemirror/extensions/marks/RtlExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/RtlExtension.js +21 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.d.ts +11 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.js +75 -0
- package/dist/prosemirror/extensions/marks/RunShadingExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/RunShadingExtension.js +38 -0
- package/dist/prosemirror/extensions/marks/SmallCapsExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SmallCapsExtension.js +24 -0
- package/dist/prosemirror/extensions/marks/StrikeExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/StrikeExtension.js +33 -0
- package/dist/prosemirror/extensions/marks/SubscriptExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SubscriptExtension.js +25 -0
- package/dist/prosemirror/extensions/marks/SuperscriptExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/SuperscriptExtension.js +25 -0
- package/dist/prosemirror/extensions/marks/TextColorExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/TextColorExtension.js +50 -0
- package/dist/prosemirror/extensions/marks/TextEffectExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/marks/TextEffectExtension.js +35 -0
- package/dist/prosemirror/extensions/marks/TextEffectsExtensions.d.ts +31 -0
- package/dist/prosemirror/extensions/marks/TextEffectsExtensions.js +134 -0
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.d.ts +22 -0
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +113 -0
- package/dist/prosemirror/extensions/marks/UnderlineExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/marks/UnderlineExtension.js +60 -0
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +34 -0
- package/dist/prosemirror/extensions/marks/markUtils.js +233 -0
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.d.ts +22 -0
- package/dist/prosemirror/extensions/nodes/BlockSdtExtension.js +122 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +87 -0
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.js +38 -0
- package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/HorizontalRuleExtension.js +18 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.js +132 -0
- package/dist/prosemirror/extensions/nodes/MathExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/nodes/MathExtension.js +56 -0
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.js +20 -0
- package/dist/prosemirror/extensions/nodes/SdtExtension.d.ts +12 -0
- package/dist/prosemirror/extensions/nodes/SdtExtension.js +107 -0
- package/dist/prosemirror/extensions/nodes/ShapeExtension.d.ts +30 -0
- package/dist/prosemirror/extensions/nodes/ShapeExtension.js +502 -0
- package/dist/prosemirror/extensions/nodes/TabExtension.d.ts +9 -0
- package/dist/prosemirror/extensions/nodes/TabExtension.js +27 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +34 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.js +1972 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +34 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +150 -0
- package/dist/prosemirror/extensions/types.d.ts +101 -0
- package/dist/prosemirror/extensions/types.js +10 -0
- package/dist/prosemirror/findReplaceSelection.d.ts +23 -0
- package/dist/prosemirror/findReplaceSelection.js +86 -0
- package/dist/prosemirror/index.d.ts +25 -0
- package/dist/prosemirror/index.js +23 -0
- package/dist/prosemirror/insertOperations.d.ts +12 -0
- package/dist/prosemirror/insertOperations.js +19 -0
- package/dist/prosemirror/paragraphDirection.d.ts +42 -0
- package/dist/prosemirror/paragraphDirection.js +33 -0
- package/dist/prosemirror/plugins/aiCitationDecorations.d.ts +40 -0
- package/dist/prosemirror/plugins/aiCitationDecorations.js +90 -0
- package/dist/prosemirror/plugins/aiSuggestionDecorations.d.ts +42 -0
- package/dist/prosemirror/plugins/aiSuggestionDecorations.js +135 -0
- package/dist/prosemirror/plugins/anonymizationDecorations.d.ts +60 -0
- package/dist/prosemirror/plugins/anonymizationDecorations.js +120 -0
- package/dist/prosemirror/plugins/autocompleteSuggestion.d.ts +123 -0
- package/dist/prosemirror/plugins/autocompleteSuggestion.js +283 -0
- package/dist/prosemirror/plugins/contentControlWidgets.d.ts +56 -0
- package/dist/prosemirror/plugins/contentControlWidgets.js +192 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +37 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.js +55 -0
- package/dist/prosemirror/plugins/documentStyles.d.ts +18 -0
- package/dist/prosemirror/plugins/documentStyles.js +46 -0
- package/dist/prosemirror/plugins/index.d.ts +3 -0
- package/dist/prosemirror/plugins/index.js +3 -0
- package/dist/prosemirror/plugins/pmTextScan.d.ts +19 -0
- package/dist/prosemirror/plugins/pmTextScan.js +39 -0
- package/dist/prosemirror/plugins/selectionTracker.d.ts +43 -0
- package/dist/prosemirror/plugins/selectionTracker.js +179 -0
- package/dist/prosemirror/plugins/suggestionMode.d.ts +70 -0
- package/dist/prosemirror/plugins/suggestionMode.js +489 -0
- package/dist/prosemirror/plugins/templateDirectives.d.ts +25 -0
- package/dist/prosemirror/plugins/templateDirectives.js +67 -0
- package/dist/prosemirror/plugins/templatePreviewValues.d.ts +49 -0
- package/dist/prosemirror/plugins/templatePreviewValues.js +117 -0
- package/dist/prosemirror/plugins/templateSlashMenu.d.ts +57 -0
- package/dist/prosemirror/plugins/templateSlashMenu.js +184 -0
- package/dist/prosemirror/schema/index.d.ts +15 -0
- package/dist/prosemirror/schema/index.js +20 -0
- package/dist/prosemirror/schema/marks.d.ts +118 -0
- package/dist/prosemirror/schema/marks.js +0 -0
- package/dist/prosemirror/schema/nodes.d.ts +389 -0
- package/dist/prosemirror/schema/nodes.js +0 -0
- package/dist/prosemirror/selectionState.d.ts +23 -0
- package/dist/prosemirror/selectionState.js +111 -0
- package/dist/prosemirror/styles/index.d.ts +2 -0
- package/dist/prosemirror/styles/index.js +2 -0
- package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +32 -0
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +108 -0
- package/dist/prosemirror/styles/styleResolver.d.ts +94 -0
- package/dist/prosemirror/styles/styleResolver.js +200 -0
- package/dist/prosemirror/utils/findParagraphByParaId.d.ts +26 -0
- package/dist/prosemirror/utils/findParagraphByParaId.js +37 -0
- package/dist/prosemirror/utils/tabCalculator.d.ts +110 -0
- package/dist/prosemirror/utils/tabCalculator.js +137 -0
- package/dist/prosemirror/validation.d.ts +20 -0
- package/dist/prosemirror/validation.js +177 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.js +6 -0
- package/dist/style-engine/index.d.ts +3 -0
- package/dist/style-engine/index.js +2 -0
- package/dist/style-engine/styleEngine.d.ts +67 -0
- package/dist/style-engine/styleEngine.js +70 -0
- package/dist/types/block-id.d.ts +66 -0
- package/dist/types/block-id.js +73 -0
- package/dist/types/colors.d.ts +2 -0
- package/dist/types/colors.js +0 -0
- package/dist/types/content.d.ts +2 -0
- package/dist/types/content.js +0 -0
- package/dist/types/document.d.ts +7 -0
- package/dist/types/document.js +0 -0
- package/dist/types/documentEnumValues.d.ts +89 -0
- package/dist/types/documentEnumValues.js +693 -0
- package/dist/types/formatting.d.ts +2 -0
- package/dist/types/formatting.js +0 -0
- package/dist/types/index.d.ts +107 -0
- package/dist/types/index.js +0 -0
- package/dist/utils/authorColors.d.ts +16 -0
- package/dist/utils/authorColors.js +30 -0
- package/dist/utils/baseDirection.d.ts +23 -0
- package/dist/utils/baseDirection.js +34 -0
- package/dist/utils/clipboard.d.ts +126 -0
- package/dist/utils/clipboard.js +622 -0
- package/dist/utils/colorResolver.d.ts +158 -0
- package/dist/utils/colorResolver.js +557 -0
- package/dist/utils/createDocument.d.ts +50 -0
- package/dist/utils/createDocument.js +262 -0
- package/dist/utils/documentLoaderBehavior.d.ts +22 -0
- package/dist/utils/documentLoaderBehavior.js +14 -0
- package/dist/utils/docxInput.d.ts +22 -0
- package/dist/utils/docxInput.js +16 -0
- package/dist/utils/domGuards.d.ts +59 -0
- package/dist/utils/domGuards.js +82 -0
- package/dist/utils/fontFamilyMerge.d.ts +7 -0
- package/dist/utils/fontFamilyMerge.js +31 -0
- package/dist/utils/fontLoader.d.ts +50 -0
- package/dist/utils/fontLoader.js +177 -0
- package/dist/utils/fontResolver.d.ts +61 -0
- package/dist/utils/fontResolver.js +651 -0
- package/dist/utils/fontWeights.d.ts +4 -0
- package/dist/utils/fontWeights.js +4 -0
- package/dist/utils/formatToStyle.d.ts +103 -0
- package/dist/utils/formatToStyle.js +289 -0
- package/dist/utils/headerFooter.d.ts +74 -0
- package/dist/utils/headerFooter.js +257 -0
- package/dist/utils/headingCollector.d.ts +22 -0
- package/dist/utils/headingCollector.js +36 -0
- package/dist/utils/hexId.d.ts +33 -0
- package/dist/utils/hexId.js +37 -0
- package/dist/utils/imageValidation.d.ts +5 -0
- package/dist/utils/imageValidation.js +31 -0
- package/dist/utils/paragraphFormattingMerge.d.ts +14 -0
- package/dist/utils/paragraphFormattingMerge.js +68 -0
- package/dist/utils/replaceText.d.ts +17 -0
- package/dist/utils/replaceText.js +161 -0
- package/dist/utils/rotationBoundingBox.d.ts +12 -0
- package/dist/utils/rotationBoundingBox.js +36 -0
- package/dist/utils/scriptSegments.d.ts +36 -0
- package/dist/utils/scriptSegments.js +52 -0
- package/dist/utils/tableOperations.d.ts +87 -0
- package/dist/utils/tableOperations.js +259 -0
- package/dist/utils/textFormattingMerge.d.ts +6 -0
- package/dist/utils/textFormattingMerge.js +31 -0
- package/dist/utils/tiffConverter.d.ts +18 -0
- package/dist/utils/tiffConverter.js +83 -0
- package/dist/utils/units.d.ts +99 -0
- package/dist/utils/units.js +139 -0
- package/dist/utils/urlSecurity.d.ts +7 -0
- package/dist/utils/urlSecurity.js +65 -0
- package/dist/watermark/index.d.ts +39 -0
- package/dist/watermark/index.js +149 -0
- package/package.json +122 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { HeaderFooterContent, PageMargins, SectionBreakBlock } from "../layout-engine/types.js";
|
|
2
|
+
//#region src/paged-layout/headerFooterMargins.d.ts
|
|
3
|
+
type EffectiveHeaderFooterMarginsInput = {
|
|
4
|
+
margins: PageMargins;
|
|
5
|
+
headerContent?: HeaderFooterContent | undefined;
|
|
6
|
+
footerContent?: HeaderFooterContent | undefined;
|
|
7
|
+
firstPageHeaderContent?: HeaderFooterContent | undefined;
|
|
8
|
+
firstPageFooterContent?: HeaderFooterContent | undefined;
|
|
9
|
+
pageSize?: {
|
|
10
|
+
w: number;
|
|
11
|
+
h: number;
|
|
12
|
+
} | undefined;
|
|
13
|
+
warn?: ((message: string) => void) | undefined;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A function that extends a `PageMargins` to clear the HF overflow computed
|
|
17
|
+
* from a given set of header/footer content. Returned by
|
|
18
|
+
* `computeHeaderFooterMarginExtender` and applied at every margins site:
|
|
19
|
+
* the body fallback, `finalMargins`, and per-section `sectionBreak.margins`.
|
|
20
|
+
*
|
|
21
|
+
* Eigenpal #400 — pre-PR the extension only applied to the body fallback,
|
|
22
|
+
* so a section break carrying its own `sb.margins` from `<w:sectPr>`
|
|
23
|
+
* silently overrode the extension and the footer rendered on top of body
|
|
24
|
+
* text.
|
|
25
|
+
*/
|
|
26
|
+
type PageMarginsExtender = (margins: PageMargins) => PageMargins;
|
|
27
|
+
declare function computeHeaderFooterMarginExtender(input: Omit<EffectiveHeaderFooterMarginsInput, "margins">): PageMarginsExtender;
|
|
28
|
+
/**
|
|
29
|
+
* Like `computeHeaderFooterMarginExtender` but also accounts for the
|
|
30
|
+
* first-page header/footer content. Apply this only to the margins used
|
|
31
|
+
* for page 1 of a `<w:titlePg/>`-enabled section.
|
|
32
|
+
*/
|
|
33
|
+
declare function computeFirstPageHeaderFooterMarginExtender(input: Omit<EffectiveHeaderFooterMarginsInput, "margins">): PageMarginsExtender;
|
|
34
|
+
declare function computeEffectiveHeaderFooterMargins({
|
|
35
|
+
margins,
|
|
36
|
+
headerContent,
|
|
37
|
+
footerContent,
|
|
38
|
+
firstPageHeaderContent,
|
|
39
|
+
firstPageFooterContent,
|
|
40
|
+
pageSize,
|
|
41
|
+
warn
|
|
42
|
+
}: EffectiveHeaderFooterMarginsInput): PageMargins;
|
|
43
|
+
/** Rendered header/footer content shared by every extender on a page. */
|
|
44
|
+
type HeaderFooterExtenderContent = Omit<EffectiveHeaderFooterMarginsInput, "margins" | "pageSize" | "warn">;
|
|
45
|
+
type ExtendSectionBreakMarginsInput = {
|
|
46
|
+
content: HeaderFooterExtenderContent; /** Body page size and effective margins — the inheritance seed. */
|
|
47
|
+
bodyPageSize: {
|
|
48
|
+
w: number;
|
|
49
|
+
h: number;
|
|
50
|
+
};
|
|
51
|
+
bodyMargins: PageMargins;
|
|
52
|
+
warn?: ((message: string) => void) | undefined;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Extend every section break's margins to clear the same header/footer
|
|
56
|
+
* overflow the body margins do (eigenpal #400), so an overflowing footer
|
|
57
|
+
* never re-overlaps body text on a later section.
|
|
58
|
+
*
|
|
59
|
+
* The walk mirrors `collectSectionConfigs`: a break that omits its own
|
|
60
|
+
* `pageSize` or `margins` inherits the previous section's. Each break's
|
|
61
|
+
* authored-or-inherited margins are extended against the section's *own*
|
|
62
|
+
* resolved page height, so a taller page never keeps a smaller page's
|
|
63
|
+
* clamped reservation (and vice versa). Materializes `margins` on every
|
|
64
|
+
* non-inheriting break in place.
|
|
65
|
+
*/
|
|
66
|
+
declare function extendSectionBreakMargins(sectionBreaks: SectionBreakBlock[], {
|
|
67
|
+
content,
|
|
68
|
+
bodyPageSize,
|
|
69
|
+
bodyMargins,
|
|
70
|
+
warn
|
|
71
|
+
}: ExtendSectionBreakMarginsInput): void;
|
|
72
|
+
//#endregion
|
|
73
|
+
export { HeaderFooterExtenderContent, PageMarginsExtender, computeEffectiveHeaderFooterMargins, computeFirstPageHeaderFooterMarginExtender, computeHeaderFooterMarginExtender, extendSectionBreakMargins };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
//#region src/paged-layout/headerFooterMargins.ts
|
|
2
|
+
/**
|
|
3
|
+
* Floor on the body content area, in pixels. Header/footer overflow can
|
|
4
|
+
* never shrink the content band below this, so a degenerate document
|
|
5
|
+
* (a header taller than the page) still renders some body text.
|
|
6
|
+
*/
|
|
7
|
+
const MIN_CONTENT_HEIGHT_PX = 24;
|
|
8
|
+
function headerHeight(content) {
|
|
9
|
+
if (!content) return 0;
|
|
10
|
+
return content.marginPushBottom ?? content.visualBottom ?? content.height;
|
|
11
|
+
}
|
|
12
|
+
function footerHeight(content) {
|
|
13
|
+
if (!content) return 0;
|
|
14
|
+
const bottom = content.marginPushBottom ?? content.visualBottom ?? content.height;
|
|
15
|
+
const top = content.marginPushTop ?? content.visualTop ?? 0;
|
|
16
|
+
return Math.max(bottom - top, content.height);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build a function that, applied to any `PageMargins`, extends `top`/`bottom`
|
|
20
|
+
* to clear the same header/footer content the body's effective margins do.
|
|
21
|
+
* Returns the identity function when no extension is needed.
|
|
22
|
+
*
|
|
23
|
+
* Header/footer distances are taken from the *given* margins (the source
|
|
24
|
+
* paragraph's section margins), not the body's, so each section's authored
|
|
25
|
+
* `w:header`/`w:footer` distances are honored.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Build an extender that pushes body margins clear of HF content.
|
|
29
|
+
*
|
|
30
|
+
* `mode === "default"` ignores `firstPageHeaderContent` /
|
|
31
|
+
* `firstPageFooterContent`. The first-page H/F only renders on page 1 of
|
|
32
|
+
* a `<w:titlePg/>`-enabled section, so margins for pages 2+ within the
|
|
33
|
+
* same section must NOT be extended for first-page overflow — extending
|
|
34
|
+
* them would push body content down on every page even though only page
|
|
35
|
+
* 1 actually carries the overflowing header. This produced visible
|
|
36
|
+
* regressions on NVCA-style first-page-header docs, where pages 2+
|
|
37
|
+
* inherited page 1's title-page header reservation.
|
|
38
|
+
*
|
|
39
|
+
* `mode === "firstPage"` uses the larger of the default and first-page
|
|
40
|
+
* H/F heights — applied only to the first-page margins of a titlePg
|
|
41
|
+
* section.
|
|
42
|
+
*/
|
|
43
|
+
function buildExtender({ headerContent, footerContent, firstPageHeaderContent, firstPageFooterContent, pageSize, warn, mode }) {
|
|
44
|
+
const headerContentHeight = mode === "firstPage" ? Math.max(headerHeight(headerContent), headerHeight(firstPageHeaderContent)) : headerHeight(headerContent);
|
|
45
|
+
const footerContentHeight = mode === "firstPage" ? Math.max(footerHeight(footerContent), footerHeight(firstPageFooterContent)) : footerHeight(footerContent);
|
|
46
|
+
return (margins) => {
|
|
47
|
+
const headerDistance = margins.header ?? 48;
|
|
48
|
+
const footerDistance = margins.footer ?? 48;
|
|
49
|
+
const availableHeaderSpace = margins.top - headerDistance;
|
|
50
|
+
const availableFooterSpace = margins.bottom - footerDistance;
|
|
51
|
+
const maxMargins = pageSize ? Math.max(0, pageSize.h - MIN_CONTENT_HEIGHT_PX) : void 0;
|
|
52
|
+
const fitsContent = headerContentHeight <= availableHeaderSpace && footerContentHeight <= availableFooterSpace;
|
|
53
|
+
const fitsPage = maxMargins === void 0 || margins.top + margins.bottom <= maxMargins;
|
|
54
|
+
if (fitsContent && fitsPage) return margins;
|
|
55
|
+
const out = { ...margins };
|
|
56
|
+
if (headerContentHeight > availableHeaderSpace) out.top = Math.max(margins.top, headerDistance + headerContentHeight);
|
|
57
|
+
if (footerContentHeight > availableFooterSpace) out.bottom = Math.max(margins.bottom, footerDistance + footerContentHeight);
|
|
58
|
+
if (pageSize && maxMargins !== void 0 && out.top + out.bottom > maxMargins) {
|
|
59
|
+
if (warn) warn(`header/footer content exceeds page height; clamping margins to preserve a content area. pageHeight=${Math.round(pageSize.h)} top=${Math.round(out.top)} bottom=${Math.round(out.bottom)}`);
|
|
60
|
+
out.bottom = Math.max(0, Math.min(out.bottom, maxMargins - out.top));
|
|
61
|
+
if (out.top + out.bottom > maxMargins) out.top = Math.max(0, maxMargins - out.bottom);
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function computeHeaderFooterMarginExtender(input) {
|
|
67
|
+
return buildExtender({
|
|
68
|
+
...input,
|
|
69
|
+
mode: "default"
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Like `computeHeaderFooterMarginExtender` but also accounts for the
|
|
74
|
+
* first-page header/footer content. Apply this only to the margins used
|
|
75
|
+
* for page 1 of a `<w:titlePg/>`-enabled section.
|
|
76
|
+
*/
|
|
77
|
+
function computeFirstPageHeaderFooterMarginExtender(input) {
|
|
78
|
+
return buildExtender({
|
|
79
|
+
...input,
|
|
80
|
+
mode: "firstPage"
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function computeEffectiveHeaderFooterMargins({ margins, headerContent, footerContent, firstPageHeaderContent, firstPageFooterContent, pageSize, warn }) {
|
|
84
|
+
return computeHeaderFooterMarginExtender({
|
|
85
|
+
headerContent,
|
|
86
|
+
footerContent,
|
|
87
|
+
firstPageHeaderContent,
|
|
88
|
+
firstPageFooterContent,
|
|
89
|
+
pageSize,
|
|
90
|
+
warn
|
|
91
|
+
})(margins);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Extend every section break's margins to clear the same header/footer
|
|
95
|
+
* overflow the body margins do (eigenpal #400), so an overflowing footer
|
|
96
|
+
* never re-overlaps body text on a later section.
|
|
97
|
+
*
|
|
98
|
+
* The walk mirrors `collectSectionConfigs`: a break that omits its own
|
|
99
|
+
* `pageSize` or `margins` inherits the previous section's. Each break's
|
|
100
|
+
* authored-or-inherited margins are extended against the section's *own*
|
|
101
|
+
* resolved page height, so a taller page never keeps a smaller page's
|
|
102
|
+
* clamped reservation (and vice versa). Materializes `margins` on every
|
|
103
|
+
* non-inheriting break in place.
|
|
104
|
+
*/
|
|
105
|
+
function extendSectionBreakMargins(sectionBreaks, { content, bodyPageSize, bodyMargins, warn }) {
|
|
106
|
+
let pageSize = bodyPageSize;
|
|
107
|
+
let margins = bodyMargins;
|
|
108
|
+
for (const sb of sectionBreaks) {
|
|
109
|
+
if (!sb.pageSize && !sb.margins) continue;
|
|
110
|
+
pageSize = sb.pageSize ?? pageSize;
|
|
111
|
+
margins = computeHeaderFooterMarginExtender({
|
|
112
|
+
...content,
|
|
113
|
+
pageSize,
|
|
114
|
+
warn
|
|
115
|
+
})(sb.margins ?? margins);
|
|
116
|
+
sb.margins = margins;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//#endregion
|
|
120
|
+
export { computeEffectiveHeaderFooterMargins, computeFirstPageHeaderFooterMarginExtender, computeHeaderFooterMarginExtender, extendSectionBreakMargins };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { FlowBlock, Measure } from "../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/paged-layout/incrementalMeasure.d.ts
|
|
4
|
+
type DirtyRange = {
|
|
5
|
+
from: number;
|
|
6
|
+
to: number;
|
|
7
|
+
};
|
|
8
|
+
type IncrementalMeasureInput = {
|
|
9
|
+
previousBlocks: FlowBlock[];
|
|
10
|
+
previousMeasures: Measure[];
|
|
11
|
+
previousBlockWidths: number[];
|
|
12
|
+
nextBlocks: FlowBlock[];
|
|
13
|
+
nextBlockWidths: number[];
|
|
14
|
+
dirtyRange: DirtyRange;
|
|
15
|
+
measureBlock: (block: FlowBlock, blockWidth: number, blockIndex: number) => Measure;
|
|
16
|
+
};
|
|
17
|
+
type IncrementalMeasureResult = {
|
|
18
|
+
measures: Measure[];
|
|
19
|
+
measuredBlockIndexes: number[];
|
|
20
|
+
};
|
|
21
|
+
declare function mergeDirtyRanges(first: DirtyRange | null, second: DirtyRange | null): DirtyRange | null;
|
|
22
|
+
declare function findDirtyBlockIndexes(blocks: FlowBlock[], dirtyRange: DirtyRange): number[];
|
|
23
|
+
declare function tryBuildIncrementalMeasures({
|
|
24
|
+
previousBlocks,
|
|
25
|
+
previousMeasures,
|
|
26
|
+
previousBlockWidths,
|
|
27
|
+
nextBlocks,
|
|
28
|
+
nextBlockWidths,
|
|
29
|
+
dirtyRange,
|
|
30
|
+
measureBlock
|
|
31
|
+
}: IncrementalMeasureInput): IncrementalMeasureResult | null;
|
|
32
|
+
//#endregion
|
|
33
|
+
export { DirtyRange, IncrementalMeasureInput, IncrementalMeasureResult, findDirtyBlockIndexes, mergeDirtyRanges, tryBuildIncrementalMeasures };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/paged-layout/incrementalMeasure.ts
|
|
2
|
+
function mergeDirtyRanges(first, second) {
|
|
3
|
+
if (!first) return second;
|
|
4
|
+
if (!second) return first;
|
|
5
|
+
return {
|
|
6
|
+
from: Math.min(first.from, second.from),
|
|
7
|
+
to: Math.max(first.to, second.to)
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function findDirtyBlockIndexes(blocks, dirtyRange) {
|
|
11
|
+
const indexes = [];
|
|
12
|
+
const dirtyFrom = Math.min(dirtyRange.from, dirtyRange.to);
|
|
13
|
+
const dirtyTo = Math.max(dirtyRange.from, dirtyRange.to);
|
|
14
|
+
for (let i = 0; i < blocks.length; i += 1) {
|
|
15
|
+
const block = blocks[i];
|
|
16
|
+
if (!block) continue;
|
|
17
|
+
const blockStart = "pmStart" in block ? block.pmStart : void 0;
|
|
18
|
+
const blockEnd = "pmEnd" in block ? block.pmEnd : void 0;
|
|
19
|
+
if (blockStart === void 0 || blockEnd === void 0) return [];
|
|
20
|
+
if (rangesTouch(blockStart, blockEnd, dirtyFrom, dirtyTo)) indexes.push(i);
|
|
21
|
+
}
|
|
22
|
+
return indexes;
|
|
23
|
+
}
|
|
24
|
+
function tryBuildIncrementalMeasures({ previousBlocks, previousMeasures, previousBlockWidths, nextBlocks, nextBlockWidths, dirtyRange, measureBlock }) {
|
|
25
|
+
if (previousBlocks.length !== nextBlocks.length || previousMeasures.length !== nextBlocks.length || previousBlockWidths.length !== nextBlockWidths.length) return null;
|
|
26
|
+
for (let i = 0; i < nextBlockWidths.length; i += 1) if (previousBlockWidths[i] !== nextBlockWidths[i]) return null;
|
|
27
|
+
if (!nextBlocks.every(isIncrementalMeasureEligibleBlock)) return null;
|
|
28
|
+
const dirtyBlockIndexes = findDirtyBlockIndexes(nextBlocks, dirtyRange);
|
|
29
|
+
if (dirtyBlockIndexes.length === 0) return null;
|
|
30
|
+
const measures = previousMeasures.slice();
|
|
31
|
+
for (const blockIndex of dirtyBlockIndexes) {
|
|
32
|
+
const block = nextBlocks[blockIndex];
|
|
33
|
+
const blockWidth = nextBlockWidths[blockIndex];
|
|
34
|
+
if (!block || blockWidth === void 0) return null;
|
|
35
|
+
measures[blockIndex] = measureBlock(block, blockWidth, blockIndex);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
measures,
|
|
39
|
+
measuredBlockIndexes: dirtyBlockIndexes
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function rangesTouch(blockStart, blockEnd, dirtyFrom, dirtyTo) {
|
|
43
|
+
if (dirtyFrom === dirtyTo) return dirtyFrom >= blockStart && dirtyFrom <= blockEnd;
|
|
44
|
+
return dirtyFrom <= blockEnd && dirtyTo >= blockStart;
|
|
45
|
+
}
|
|
46
|
+
function isIncrementalMeasureEligibleBlock(block) {
|
|
47
|
+
if (block.kind !== "paragraph") return false;
|
|
48
|
+
const paragraph = block;
|
|
49
|
+
if (paragraph.attrs?.listMarker || paragraph.attrs?.contextualSpacing || paragraph.attrs?.borders) return false;
|
|
50
|
+
return paragraph.runs.every((run) => {
|
|
51
|
+
if (run.kind === "field" || run.kind === "image") return false;
|
|
52
|
+
return !("footnoteRefId" in run || "endnoteRefId" in run || "isInsertion" in run || "isDeletion" in run || "changeRevisionId" in run);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
export { findDirtyBlockIndexes, mergeDirtyRanges, tryBuildIncrementalMeasures };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { FlowBlock, Layout, Measure } from "../layout-engine/types.js";
|
|
2
|
+
import { SelectionRect } from "../layout-bridge/engine/selectionRects.js";
|
|
3
|
+
|
|
4
|
+
//#region src/paged-layout/rangeProjection.d.ts
|
|
5
|
+
type ProjectableRange = {
|
|
6
|
+
from: number;
|
|
7
|
+
to: number;
|
|
8
|
+
};
|
|
9
|
+
type ProjectedRange<T extends ProjectableRange> = {
|
|
10
|
+
range: T;
|
|
11
|
+
rects: SelectionRect[];
|
|
12
|
+
};
|
|
13
|
+
type RangeProjectionContext = {
|
|
14
|
+
pagesContainer: HTMLElement;
|
|
15
|
+
zoom: number;
|
|
16
|
+
layout: Layout | null;
|
|
17
|
+
blocks: FlowBlock[];
|
|
18
|
+
measures: Measure[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Stable text-column left edge in container space: the minimum painted run-span
|
|
22
|
+
* left on the first page. Gutter widgets (e.g. the block-directive rail) anchor
|
|
23
|
+
* to this instead of a single re-projected range's `rects[0].x`, which can flip
|
|
24
|
+
* horizontally between paint passes while content above reflows. The page's
|
|
25
|
+
* left margin is fixed, so this value holds steady as text is edited.
|
|
26
|
+
*/
|
|
27
|
+
declare const measureContentLeft: (pagesContainer: HTMLElement, zoom: number) => number | null;
|
|
28
|
+
/**
|
|
29
|
+
* Computed text style of the painted run at a PM position. Overlays
|
|
30
|
+
* that paint substituted text over the pages (template fill preview,
|
|
31
|
+
* AI suggestion replacement) copy these so the injected text matches
|
|
32
|
+
* the surrounding run instead of the overlay container's base font.
|
|
33
|
+
*/
|
|
34
|
+
type ProjectedRunFont = {
|
|
35
|
+
fontFamily: string;
|
|
36
|
+
fontSize: string;
|
|
37
|
+
fontWeight: string;
|
|
38
|
+
fontStyle: string;
|
|
39
|
+
letterSpacing: string;
|
|
40
|
+
color: string;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Sample the painted-run text style at each position in a single walk
|
|
44
|
+
* over the rendered run spans. Positions outside the rendered buffer
|
|
45
|
+
* (virtualized pages) simply stay absent from the result; callers fall
|
|
46
|
+
* back to the overlay's inherited font.
|
|
47
|
+
*/
|
|
48
|
+
declare const collectRunFontsAtPmPositions: (pagesContainer: HTMLElement, positions: readonly number[]) => Map<number, ProjectedRunFont>;
|
|
49
|
+
declare const projectRangesToRects: <T extends ProjectableRange>(ranges: readonly T[], ctx: RangeProjectionContext) => Promise<ProjectedRange<T>[]>;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { ProjectableRange, ProjectedRange, ProjectedRunFont, RangeProjectionContext, collectRunFontsAtPmPositions, measureContentLeft, projectRangesToRects };
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { findBodyPmSpans } from "../layout-bridge/dom/findBodyPmSpans.js";
|
|
2
|
+
//#region src/paged-layout/rangeProjection.ts
|
|
3
|
+
/**
|
|
4
|
+
* Shared range → paged-canvas rectangle projection.
|
|
5
|
+
*
|
|
6
|
+
* Folio's editor lives off-screen, so features that paint over the
|
|
7
|
+
* document (anonymization highlights, template-directive widgets)
|
|
8
|
+
* must project their `{ from, to }` PM ranges onto container-space
|
|
9
|
+
* rectangles. This mirrors the SelectionOverlay flow: prefer real
|
|
10
|
+
* painted-DOM rects (correct for indents, tabs, justified text, line
|
|
11
|
+
* wraps) and fall back to the layout-coordinate `selectionToRects`
|
|
12
|
+
* projection only for ranges whose DOM spans aren't mounted yet
|
|
13
|
+
* (initial paint, off-screen pages).
|
|
14
|
+
*/
|
|
15
|
+
const isTextNode = (node) => node?.nodeType === Node.TEXT_NODE;
|
|
16
|
+
const pageIndexOf = (el) => {
|
|
17
|
+
const page = el.closest(".layout-page");
|
|
18
|
+
const raw = page instanceof HTMLElement ? page.dataset["pageNumber"] : void 0;
|
|
19
|
+
return raw ? Number(raw) - 1 : 0;
|
|
20
|
+
};
|
|
21
|
+
/** Real painted-DOM rects for a PM range via `Range.getClientRects`. */
|
|
22
|
+
const domRectsForRange = (pmSpans, overlayRect, zoom, from, to) => {
|
|
23
|
+
const rects = [];
|
|
24
|
+
for (const spanEl of pmSpans) {
|
|
25
|
+
const pmStart = Number(spanEl.dataset["pmStart"]);
|
|
26
|
+
if (!(Number(spanEl.dataset["pmEnd"]) > from && pmStart < to)) continue;
|
|
27
|
+
if (spanEl.classList.contains("layout-run-tab")) {
|
|
28
|
+
const spanRect = spanEl.getBoundingClientRect();
|
|
29
|
+
rects.push({
|
|
30
|
+
x: (spanRect.left - overlayRect.left) / zoom,
|
|
31
|
+
y: (spanRect.top - overlayRect.top) / zoom,
|
|
32
|
+
width: spanRect.width / zoom,
|
|
33
|
+
height: spanRect.height / zoom,
|
|
34
|
+
pageIndex: pageIndexOf(spanEl)
|
|
35
|
+
});
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
let textNode = null;
|
|
39
|
+
if (isTextNode(spanEl.firstChild)) textNode = spanEl.firstChild;
|
|
40
|
+
else if (spanEl.firstChild instanceof HTMLElement && spanEl.firstChild.tagName === "A" && isTextNode(spanEl.firstChild.firstChild)) textNode = spanEl.firstChild.firstChild;
|
|
41
|
+
if (!textNode) continue;
|
|
42
|
+
const startChar = Math.max(0, from - pmStart);
|
|
43
|
+
const endChar = Math.min(textNode.length, to - pmStart);
|
|
44
|
+
if (startChar >= endChar) continue;
|
|
45
|
+
const range = spanEl.ownerDocument.createRange();
|
|
46
|
+
range.setStart(textNode, startChar);
|
|
47
|
+
range.setEnd(textNode, endChar);
|
|
48
|
+
const pageIndex = pageIndexOf(spanEl);
|
|
49
|
+
for (const rect of Array.from(range.getClientRects())) rects.push({
|
|
50
|
+
x: (rect.left - overlayRect.left) / zoom,
|
|
51
|
+
y: (rect.top - overlayRect.top) / zoom,
|
|
52
|
+
width: rect.width / zoom,
|
|
53
|
+
height: rect.height / zoom,
|
|
54
|
+
pageIndex
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return rects;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Stable text-column left edge in container space: the minimum painted run-span
|
|
61
|
+
* left on the first page. Gutter widgets (e.g. the block-directive rail) anchor
|
|
62
|
+
* to this instead of a single re-projected range's `rects[0].x`, which can flip
|
|
63
|
+
* horizontally between paint passes while content above reflows. The page's
|
|
64
|
+
* left margin is fixed, so this value holds steady as text is edited.
|
|
65
|
+
*/
|
|
66
|
+
const measureContentLeft = (pagesContainer, zoom) => {
|
|
67
|
+
const overlay = pagesContainer.parentElement?.querySelector("[data-testid=\"selection-overlay\"]");
|
|
68
|
+
const firstPage = pagesContainer.querySelector(".layout-page");
|
|
69
|
+
if (!overlay || !firstPage) return null;
|
|
70
|
+
const spans = findBodyPmSpans(firstPage);
|
|
71
|
+
if (spans.length === 0) return null;
|
|
72
|
+
const overlayLeft = overlay.getBoundingClientRect().left;
|
|
73
|
+
let min = Number.POSITIVE_INFINITY;
|
|
74
|
+
for (const span of spans) {
|
|
75
|
+
const left = span.getBoundingClientRect().left;
|
|
76
|
+
if (left < min) min = left;
|
|
77
|
+
}
|
|
78
|
+
return Number.isFinite(min) ? (min - overlayLeft) / zoom : null;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Sample the painted-run text style at each position in a single walk
|
|
82
|
+
* over the rendered run spans. Positions outside the rendered buffer
|
|
83
|
+
* (virtualized pages) simply stay absent from the result; callers fall
|
|
84
|
+
* back to the overlay's inherited font.
|
|
85
|
+
*/
|
|
86
|
+
const collectRunFontsAtPmPositions = (pagesContainer, positions) => {
|
|
87
|
+
const fonts = /* @__PURE__ */ new Map();
|
|
88
|
+
if (positions.length === 0) return fonts;
|
|
89
|
+
const remaining = new Set(positions);
|
|
90
|
+
for (const spanEl of findBodyPmSpans(pagesContainer)) {
|
|
91
|
+
if (remaining.size === 0) break;
|
|
92
|
+
const pmStart = Number(spanEl.dataset["pmStart"]);
|
|
93
|
+
const pmEnd = Number(spanEl.dataset["pmEnd"]);
|
|
94
|
+
if (Number.isNaN(pmStart) || Number.isNaN(pmEnd)) continue;
|
|
95
|
+
for (const pos of remaining) {
|
|
96
|
+
if (!(pmStart <= pos && pos < pmEnd)) continue;
|
|
97
|
+
const win = spanEl.ownerDocument.defaultView;
|
|
98
|
+
if (!win) continue;
|
|
99
|
+
const style = win.getComputedStyle(spanEl);
|
|
100
|
+
fonts.set(pos, {
|
|
101
|
+
fontFamily: style.fontFamily,
|
|
102
|
+
fontSize: style.fontSize,
|
|
103
|
+
fontWeight: style.fontWeight,
|
|
104
|
+
fontStyle: style.fontStyle,
|
|
105
|
+
letterSpacing: style.letterSpacing,
|
|
106
|
+
color: style.color
|
|
107
|
+
});
|
|
108
|
+
remaining.delete(pos);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return fonts;
|
|
112
|
+
};
|
|
113
|
+
const projectRangesToRects = async (ranges, ctx) => {
|
|
114
|
+
const { pagesContainer, zoom, layout, blocks, measures } = ctx;
|
|
115
|
+
if (ranges.length === 0) return [];
|
|
116
|
+
const overlay = pagesContainer.parentElement?.querySelector("[data-testid=\"selection-overlay\"]");
|
|
117
|
+
const firstPage = pagesContainer.querySelector(".layout-page");
|
|
118
|
+
if (!overlay || !firstPage) return [];
|
|
119
|
+
const overlayRect = overlay.getBoundingClientRect();
|
|
120
|
+
const pageRect = firstPage.getBoundingClientRect();
|
|
121
|
+
const pageOffsetX = (pageRect.left - overlayRect.left) / zoom;
|
|
122
|
+
const pageOffsetY = (pageRect.top - overlayRect.top) / zoom;
|
|
123
|
+
const pmSpans = findBodyPmSpans(pagesContainer);
|
|
124
|
+
const result = [];
|
|
125
|
+
const fallback = [];
|
|
126
|
+
for (const range of ranges) {
|
|
127
|
+
const rects = domRectsForRange(pmSpans, overlayRect, zoom, range.from, range.to);
|
|
128
|
+
if (rects.length > 0) result.push({
|
|
129
|
+
range,
|
|
130
|
+
rects
|
|
131
|
+
});
|
|
132
|
+
else fallback.push(range);
|
|
133
|
+
}
|
|
134
|
+
if (fallback.length > 0 && layout && blocks.length > 0) {
|
|
135
|
+
const { selectionToRects } = await import("../layout-bridge/engine/selectionRects.js");
|
|
136
|
+
for (const range of fallback) {
|
|
137
|
+
const rects = selectionToRects(layout, blocks, measures, range.from, range.to).map((rect) => ({
|
|
138
|
+
height: rect.height,
|
|
139
|
+
pageIndex: rect.pageIndex,
|
|
140
|
+
width: rect.width,
|
|
141
|
+
x: rect.x + pageOffsetX,
|
|
142
|
+
y: rect.y + pageOffsetY
|
|
143
|
+
}));
|
|
144
|
+
if (rects.length > 0) result.push({
|
|
145
|
+
range,
|
|
146
|
+
rects
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
};
|
|
152
|
+
//#endregion
|
|
153
|
+
export { collectRunFontsAtPmPositions, measureContentLeft, projectRangesToRects };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/paged-layout/readOnlyEditAttempt.ts
|
|
2
|
+
const MODIFIED_EDIT_KEYS = /* @__PURE__ */ new Set([
|
|
3
|
+
"b",
|
|
4
|
+
"i",
|
|
5
|
+
"u",
|
|
6
|
+
"v",
|
|
7
|
+
"x",
|
|
8
|
+
"y",
|
|
9
|
+
"z"
|
|
10
|
+
]);
|
|
11
|
+
const PLAIN_EDIT_KEYS = /* @__PURE__ */ new Set([
|
|
12
|
+
"Backspace",
|
|
13
|
+
"Delete",
|
|
14
|
+
"Enter"
|
|
15
|
+
]);
|
|
16
|
+
const isReadOnlyEditKey = (event) => {
|
|
17
|
+
if (event.metaKey || event.ctrlKey) return MODIFIED_EDIT_KEYS.has(event.key.toLowerCase());
|
|
18
|
+
if (event.altKey) return false;
|
|
19
|
+
return event.key.length === 1 || PLAIN_EDIT_KEYS.has(event.key);
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
export { isReadOnlyEditKey };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Layout } from "../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/paged-layout/scrollNavigation.d.ts
|
|
4
|
+
type PageScrollTarget = {
|
|
5
|
+
type: "position";
|
|
6
|
+
pmPos: number;
|
|
7
|
+
} | {
|
|
8
|
+
type: "pageShell";
|
|
9
|
+
pageIndex: number;
|
|
10
|
+
};
|
|
11
|
+
declare const isValidPmScrollPosition: (pmPos: number) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Pick a `scrollIntoView` / `scrollTo` `behavior` that respects the
|
|
14
|
+
* user's `prefers-reduced-motion` setting. Chrome silently no-ops
|
|
15
|
+
* `behavior: "smooth"` when reduced motion is on (instead of falling
|
|
16
|
+
* back to instant), so a stale "smooth" call from scroll-to-block
|
|
17
|
+
* leaves the user wondering why the chip "doesn't work". Use the
|
|
18
|
+
* helper everywhere we'd otherwise hard-code `"smooth"`.
|
|
19
|
+
*/
|
|
20
|
+
declare const prefersReducedMotionBehavior: () => ScrollBehavior;
|
|
21
|
+
declare const getPageScrollTarget: (layout: Layout | null, pageNumber: number) => PageScrollTarget | null;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { PageScrollTarget, getPageScrollTarget, isValidPmScrollPosition, prefersReducedMotionBehavior };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/paged-layout/scrollNavigation.ts
|
|
2
|
+
const isValidPmScrollPosition = (pmPos) => Number.isInteger(pmPos) && pmPos >= 0;
|
|
3
|
+
/**
|
|
4
|
+
* Pick a `scrollIntoView` / `scrollTo` `behavior` that respects the
|
|
5
|
+
* user's `prefers-reduced-motion` setting. Chrome silently no-ops
|
|
6
|
+
* `behavior: "smooth"` when reduced motion is on (instead of falling
|
|
7
|
+
* back to instant), so a stale "smooth" call from scroll-to-block
|
|
8
|
+
* leaves the user wondering why the chip "doesn't work". Use the
|
|
9
|
+
* helper everywhere we'd otherwise hard-code `"smooth"`.
|
|
10
|
+
*/
|
|
11
|
+
const prefersReducedMotionBehavior = () => {
|
|
12
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return "smooth";
|
|
13
|
+
return window.matchMedia("(prefers-reduced-motion: reduce)").matches ? "auto" : "smooth";
|
|
14
|
+
};
|
|
15
|
+
const getPageScrollTarget = (layout, pageNumber) => {
|
|
16
|
+
if (!layout || !Number.isInteger(pageNumber) || pageNumber < 1) return null;
|
|
17
|
+
const pageIndex = pageNumber - 1;
|
|
18
|
+
const page = layout.pages[pageIndex];
|
|
19
|
+
if (!page) return null;
|
|
20
|
+
const pmStart = page.fragments.at(0)?.pmStart;
|
|
21
|
+
if (typeof pmStart === "number" && Number.isInteger(pmStart) && pmStart >= 0) return {
|
|
22
|
+
type: "position",
|
|
23
|
+
pmPos: pmStart
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
type: "pageShell",
|
|
27
|
+
pageIndex
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
31
|
+
export { getPageScrollTarget, isValidPmScrollPosition, prefersReducedMotionBehavior };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//#region src/paged-layout/scrollPageInfo.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* scrollPageInfo
|
|
4
|
+
*
|
|
5
|
+
* Framework-agnostic page-indicator state for the scrollable editor: the
|
|
6
|
+
* current/total page derivation and the total-count clamp. The React
|
|
7
|
+
* `useZoomAndPageInfo` hook owns the React state and the scroll/layout DOM
|
|
8
|
+
* reads; this module owns the pure geometry.
|
|
9
|
+
*/
|
|
10
|
+
type ScrollPageInfo = {
|
|
11
|
+
currentPage: number;
|
|
12
|
+
totalPages: number;
|
|
13
|
+
visible: boolean;
|
|
14
|
+
};
|
|
15
|
+
declare const updateScrollPageTotal: (previous: ScrollPageInfo, totalPages: number) => ScrollPageInfo;
|
|
16
|
+
type ScrollPageMetrics = {
|
|
17
|
+
/** Laid-out page heights (unscaled), top to bottom. */pageHeights: readonly number[]; /** Current scroll offset of the container (scaled by zoom). */
|
|
18
|
+
scrollTop: number; /** Visible height of the scroll container. */
|
|
19
|
+
clientHeight: number; /** Current zoom factor. */
|
|
20
|
+
zoom: number; /** Padding above the first page in the scroll container. */
|
|
21
|
+
viewportPaddingTop: number; /** Gap rendered between consecutive pages. */
|
|
22
|
+
pageGap: number;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Derive the current page (the one under the viewport center) and total page
|
|
26
|
+
* count from the laid-out page heights and the live scroll position. Returns
|
|
27
|
+
* null when there are no pages to measure.
|
|
28
|
+
*/
|
|
29
|
+
declare const computeScrollPageInfo: ({
|
|
30
|
+
pageHeights,
|
|
31
|
+
scrollTop,
|
|
32
|
+
clientHeight,
|
|
33
|
+
zoom,
|
|
34
|
+
viewportPaddingTop,
|
|
35
|
+
pageGap
|
|
36
|
+
}: ScrollPageMetrics) => {
|
|
37
|
+
currentPage: number;
|
|
38
|
+
totalPages: number;
|
|
39
|
+
} | null;
|
|
40
|
+
//#endregion
|
|
41
|
+
export { ScrollPageInfo, ScrollPageMetrics, computeScrollPageInfo, updateScrollPageTotal };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/paged-layout/scrollPageInfo.ts
|
|
2
|
+
const updateScrollPageTotal = (previous, totalPages) => ({
|
|
3
|
+
...previous,
|
|
4
|
+
currentPage: Math.min(previous.currentPage, totalPages),
|
|
5
|
+
totalPages
|
|
6
|
+
});
|
|
7
|
+
/**
|
|
8
|
+
* Derive the current page (the one under the viewport center) and total page
|
|
9
|
+
* count from the laid-out page heights and the live scroll position. Returns
|
|
10
|
+
* null when there are no pages to measure.
|
|
11
|
+
*/
|
|
12
|
+
const computeScrollPageInfo = ({ pageHeights, scrollTop, clientHeight, zoom, viewportPaddingTop, pageGap }) => {
|
|
13
|
+
const totalPages = pageHeights.length;
|
|
14
|
+
if (totalPages === 0) return null;
|
|
15
|
+
const viewportCenter = (scrollTop + clientHeight / 2) / Math.max(zoom, Number.EPSILON);
|
|
16
|
+
let accumulatedY = viewportPaddingTop;
|
|
17
|
+
let currentPage = 1;
|
|
18
|
+
for (let i = 0; i < totalPages; i++) {
|
|
19
|
+
const pageHeight = pageHeights[i];
|
|
20
|
+
const pageEnd = accumulatedY + pageHeight;
|
|
21
|
+
if (viewportCenter < pageEnd) {
|
|
22
|
+
currentPage = i + 1;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
accumulatedY = pageEnd + pageGap;
|
|
26
|
+
currentPage = i + 2;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
currentPage: Math.min(currentPage, totalPages),
|
|
30
|
+
totalPages
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
//#endregion
|
|
34
|
+
export { computeScrollPageInfo, updateScrollPageTotal };
|