@stll/folio-core 0.0.1-placeholder.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +58 -0
- package/dist/types/block-id.js +61 -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,92 @@
|
|
|
1
|
+
import { Subscribable } from "./Subscribable.js";
|
|
2
|
+
|
|
3
|
+
//#region src/managers/HistoryManager.d.ts
|
|
4
|
+
/** History entry containing state and metadata. */
|
|
5
|
+
type HistoryEntry<T> = {
|
|
6
|
+
/** The state at this point. */state: T; /** Timestamp when this entry was created. */
|
|
7
|
+
timestamp: number; /** Optional description of what changed. */
|
|
8
|
+
description?: string;
|
|
9
|
+
};
|
|
10
|
+
/** Reactive snapshot adapters render from. */
|
|
11
|
+
type HistorySnapshot<T> = {
|
|
12
|
+
/** Current state. */state: T; /** Whether undo is available. */
|
|
13
|
+
canUndo: boolean; /** Whether redo is available. */
|
|
14
|
+
canRedo: boolean; /** Number of entries in the undo stack. */
|
|
15
|
+
undoCount: number; /** Number of entries in the redo stack. */
|
|
16
|
+
redoCount: number;
|
|
17
|
+
};
|
|
18
|
+
type HistoryManagerOptions<T> = {
|
|
19
|
+
/** Maximum number of entries in the undo stack (default: 100). */maxEntries?: number; /** Time in ms within which rapid pushes are grouped (default: 500). */
|
|
20
|
+
groupingInterval?: number; /** Custom comparison used to skip no-op pushes (default: JSON compare). */
|
|
21
|
+
isEqual?: (a: T, b: T) => boolean;
|
|
22
|
+
};
|
|
23
|
+
/** Default equality check using JSON stringify. */
|
|
24
|
+
declare const defaultHistoryIsEqual: <T>(a: T, b: T) => boolean;
|
|
25
|
+
/** History action a keyboard chord maps to. */
|
|
26
|
+
type HistoryShortcut = "undo" | "redo";
|
|
27
|
+
/** Minimal keyboard-event shape the shortcut classifier reads. */
|
|
28
|
+
type HistoryShortcutEvent = {
|
|
29
|
+
key: string;
|
|
30
|
+
ctrlKey: boolean;
|
|
31
|
+
metaKey: boolean;
|
|
32
|
+
shiftKey: boolean;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Classify a keydown as an undo/redo shortcut, framework-agnostically.
|
|
36
|
+
*
|
|
37
|
+
* `key` is compared case-insensitively: while Shift is held the browser reports
|
|
38
|
+
* the uppercase `"Z"`, so the standard redo chord Ctrl/Cmd+Shift+Z would slip
|
|
39
|
+
* past an exact `=== "z"` check and never trigger redo. Ctrl/Cmd+Z is undo;
|
|
40
|
+
* Ctrl/Cmd+Shift+Z and Ctrl/Cmd+Y are redo.
|
|
41
|
+
*/
|
|
42
|
+
declare const classifyHistoryShortcut: (event: HistoryShortcutEvent) => HistoryShortcut | null;
|
|
43
|
+
declare class HistoryManager<T> extends Subscribable<HistorySnapshot<T>> {
|
|
44
|
+
private currentState;
|
|
45
|
+
private readonly initialState;
|
|
46
|
+
private undoStack;
|
|
47
|
+
private redoStack;
|
|
48
|
+
private lastPushTime;
|
|
49
|
+
/**
|
|
50
|
+
* Raised while an undo/redo is settling. Pushes that arrive during this
|
|
51
|
+
* window (e.g. the editor re-syncing to the restored document) adopt the new
|
|
52
|
+
* state without creating a fresh history entry. The adapter lowers it once
|
|
53
|
+
* its render cycle has flushed.
|
|
54
|
+
*/
|
|
55
|
+
private undoRedoActive;
|
|
56
|
+
private readonly maxEntries;
|
|
57
|
+
private readonly groupingInterval;
|
|
58
|
+
private readonly isEqual;
|
|
59
|
+
constructor(initialState: T, options?: HistoryManagerOptions<T>);
|
|
60
|
+
/** The current state (satisfies `DocumentLoaderHistory.state`). */
|
|
61
|
+
get state(): T;
|
|
62
|
+
/** Whether the undo/redo re-entrancy guard is currently raised. */
|
|
63
|
+
get isUndoRedoActive(): boolean;
|
|
64
|
+
/** Push a new state to history. */
|
|
65
|
+
push(newState: T, description?: string): void;
|
|
66
|
+
/** Undo to the previous state, raising the re-entrancy guard. */
|
|
67
|
+
undo(): T | undefined;
|
|
68
|
+
/** Redo to the next state, raising the re-entrancy guard. */
|
|
69
|
+
redo(): T | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Lower the undo/redo re-entrancy guard. The adapter calls this once its
|
|
72
|
+
* render cycle (and the effects it triggered) has flushed, so a follow-up
|
|
73
|
+
* edit records a fresh entry again.
|
|
74
|
+
*/
|
|
75
|
+
endUndoRedo(): void;
|
|
76
|
+
/** Clear both stacks, keeping the current state. */
|
|
77
|
+
clear(): void;
|
|
78
|
+
/** Reset to the initial (or a supplied) state and clear history. */
|
|
79
|
+
reset(newInitialState?: T): void;
|
|
80
|
+
/** Snapshot copy of the undo stack (for debugging/display). */
|
|
81
|
+
getUndoStack(): HistoryEntry<T>[];
|
|
82
|
+
/** Snapshot copy of the redo stack (for debugging/display). */
|
|
83
|
+
getRedoStack(): HistoryEntry<T>[];
|
|
84
|
+
/**
|
|
85
|
+
* Transform every stored state (current + both stacks). Useful for bulk
|
|
86
|
+
* cleanup such as stripping cached snapshots.
|
|
87
|
+
*/
|
|
88
|
+
transformAll(fn: (state: T) => T): void;
|
|
89
|
+
private emit;
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
export { HistoryEntry, HistoryManager, HistoryManagerOptions, HistoryShortcut, HistoryShortcutEvent, HistorySnapshot, classifyHistoryShortcut, defaultHistoryIsEqual };
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Subscribable } from "./Subscribable.js";
|
|
2
|
+
//#region src/managers/HistoryManager.ts
|
|
3
|
+
/**
|
|
4
|
+
* HistoryManager
|
|
5
|
+
*
|
|
6
|
+
* Framework-agnostic undo/redo stack and document-snapshot history, extracted
|
|
7
|
+
* from the React `useHistory` hook. Owns the current state plus the undo/redo
|
|
8
|
+
* stacks and runs push (with rapid-change grouping), undo, redo, redo
|
|
9
|
+
* invalidation, stack-size capping, and bulk state transforms.
|
|
10
|
+
*
|
|
11
|
+
* Adapters bind to it through `Subscribable` (React:
|
|
12
|
+
* `useSyncExternalStore(manager.subscribe, manager.getSnapshot)`). The adapter
|
|
13
|
+
* keeps the genuinely framework-bound concerns: keyboard shortcuts, the
|
|
14
|
+
* render-cycle timing that lowers the undo/redo re-entrancy guard, and routing
|
|
15
|
+
* the optional `onUndo` / `onRedo` host callbacks.
|
|
16
|
+
*
|
|
17
|
+
* `HistoryManager<Document | null>` structurally satisfies the
|
|
18
|
+
* `DocumentLoaderHistory` shape that `DocumentLoaderManager` consumes
|
|
19
|
+
* (`{ readonly state; reset(document) }`).
|
|
20
|
+
*/
|
|
21
|
+
/** Default equality check using JSON stringify. */
|
|
22
|
+
const defaultHistoryIsEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
23
|
+
/**
|
|
24
|
+
* Classify a keydown as an undo/redo shortcut, framework-agnostically.
|
|
25
|
+
*
|
|
26
|
+
* `key` is compared case-insensitively: while Shift is held the browser reports
|
|
27
|
+
* the uppercase `"Z"`, so the standard redo chord Ctrl/Cmd+Shift+Z would slip
|
|
28
|
+
* past an exact `=== "z"` check and never trigger redo. Ctrl/Cmd+Z is undo;
|
|
29
|
+
* Ctrl/Cmd+Shift+Z and Ctrl/Cmd+Y are redo.
|
|
30
|
+
*/
|
|
31
|
+
const classifyHistoryShortcut = (event) => {
|
|
32
|
+
if (!event.ctrlKey && !event.metaKey) return null;
|
|
33
|
+
const key = event.key.toLowerCase();
|
|
34
|
+
if (key === "y") return "redo";
|
|
35
|
+
if (key === "z") return event.shiftKey ? "redo" : "undo";
|
|
36
|
+
return null;
|
|
37
|
+
};
|
|
38
|
+
var HistoryManager = class extends Subscribable {
|
|
39
|
+
currentState;
|
|
40
|
+
initialState;
|
|
41
|
+
undoStack = [];
|
|
42
|
+
redoStack = [];
|
|
43
|
+
lastPushTime = 0;
|
|
44
|
+
/**
|
|
45
|
+
* Raised while an undo/redo is settling. Pushes that arrive during this
|
|
46
|
+
* window (e.g. the editor re-syncing to the restored document) adopt the new
|
|
47
|
+
* state without creating a fresh history entry. The adapter lowers it once
|
|
48
|
+
* its render cycle has flushed.
|
|
49
|
+
*/
|
|
50
|
+
undoRedoActive = false;
|
|
51
|
+
maxEntries;
|
|
52
|
+
groupingInterval;
|
|
53
|
+
isEqual;
|
|
54
|
+
constructor(initialState, options = {}) {
|
|
55
|
+
super({
|
|
56
|
+
state: initialState,
|
|
57
|
+
canUndo: false,
|
|
58
|
+
canRedo: false,
|
|
59
|
+
undoCount: 0,
|
|
60
|
+
redoCount: 0
|
|
61
|
+
});
|
|
62
|
+
this.currentState = initialState;
|
|
63
|
+
this.initialState = initialState;
|
|
64
|
+
this.maxEntries = options.maxEntries ?? 100;
|
|
65
|
+
this.groupingInterval = options.groupingInterval ?? 500;
|
|
66
|
+
this.isEqual = options.isEqual ?? defaultHistoryIsEqual;
|
|
67
|
+
}
|
|
68
|
+
/** The current state (satisfies `DocumentLoaderHistory.state`). */
|
|
69
|
+
get state() {
|
|
70
|
+
return this.currentState;
|
|
71
|
+
}
|
|
72
|
+
/** Whether the undo/redo re-entrancy guard is currently raised. */
|
|
73
|
+
get isUndoRedoActive() {
|
|
74
|
+
return this.undoRedoActive;
|
|
75
|
+
}
|
|
76
|
+
/** Push a new state to history. */
|
|
77
|
+
push(newState, description) {
|
|
78
|
+
if (this.isEqual(this.currentState, newState)) return;
|
|
79
|
+
if (this.undoRedoActive) {
|
|
80
|
+
this.currentState = newState;
|
|
81
|
+
this.emit();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
if (now - this.lastPushTime < this.groupingInterval && this.undoStack.length > 0) {
|
|
86
|
+
const last = this.undoStack.at(-1);
|
|
87
|
+
const desc = description || last?.description;
|
|
88
|
+
this.undoStack[this.undoStack.length - 1] = {
|
|
89
|
+
state: last?.state ?? this.currentState,
|
|
90
|
+
timestamp: now,
|
|
91
|
+
...desc !== void 0 ? { description: desc } : {}
|
|
92
|
+
};
|
|
93
|
+
} else {
|
|
94
|
+
this.undoStack.push({
|
|
95
|
+
state: this.currentState,
|
|
96
|
+
timestamp: now,
|
|
97
|
+
...description !== void 0 ? { description } : {}
|
|
98
|
+
});
|
|
99
|
+
if (this.undoStack.length > this.maxEntries) this.undoStack = this.undoStack.slice(this.undoStack.length - this.maxEntries);
|
|
100
|
+
}
|
|
101
|
+
this.redoStack = [];
|
|
102
|
+
this.currentState = newState;
|
|
103
|
+
this.lastPushTime = now;
|
|
104
|
+
this.emit();
|
|
105
|
+
}
|
|
106
|
+
/** Undo to the previous state, raising the re-entrancy guard. */
|
|
107
|
+
undo() {
|
|
108
|
+
if (this.undoStack.length === 0) return;
|
|
109
|
+
this.undoRedoActive = true;
|
|
110
|
+
const prevEntry = this.undoStack.at(-1);
|
|
111
|
+
if (!prevEntry) return;
|
|
112
|
+
this.undoStack = this.undoStack.slice(0, -1);
|
|
113
|
+
this.redoStack = [...this.redoStack, {
|
|
114
|
+
state: this.currentState,
|
|
115
|
+
timestamp: Date.now()
|
|
116
|
+
}];
|
|
117
|
+
this.currentState = prevEntry.state;
|
|
118
|
+
this.emit();
|
|
119
|
+
return prevEntry.state;
|
|
120
|
+
}
|
|
121
|
+
/** Redo to the next state, raising the re-entrancy guard. */
|
|
122
|
+
redo() {
|
|
123
|
+
if (this.redoStack.length === 0) return;
|
|
124
|
+
this.undoRedoActive = true;
|
|
125
|
+
const nextEntry = this.redoStack.at(-1);
|
|
126
|
+
if (!nextEntry) return;
|
|
127
|
+
this.redoStack = this.redoStack.slice(0, -1);
|
|
128
|
+
this.undoStack = [...this.undoStack, {
|
|
129
|
+
state: this.currentState,
|
|
130
|
+
timestamp: Date.now()
|
|
131
|
+
}];
|
|
132
|
+
this.currentState = nextEntry.state;
|
|
133
|
+
this.emit();
|
|
134
|
+
return nextEntry.state;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Lower the undo/redo re-entrancy guard. The adapter calls this once its
|
|
138
|
+
* render cycle (and the effects it triggered) has flushed, so a follow-up
|
|
139
|
+
* edit records a fresh entry again.
|
|
140
|
+
*/
|
|
141
|
+
endUndoRedo() {
|
|
142
|
+
this.undoRedoActive = false;
|
|
143
|
+
}
|
|
144
|
+
/** Clear both stacks, keeping the current state. */
|
|
145
|
+
clear() {
|
|
146
|
+
this.undoStack = [];
|
|
147
|
+
this.redoStack = [];
|
|
148
|
+
this.emit();
|
|
149
|
+
}
|
|
150
|
+
/** Reset to the initial (or a supplied) state and clear history. */
|
|
151
|
+
reset(newInitialState) {
|
|
152
|
+
this.currentState = newInitialState ?? this.initialState;
|
|
153
|
+
this.undoStack = [];
|
|
154
|
+
this.redoStack = [];
|
|
155
|
+
this.lastPushTime = 0;
|
|
156
|
+
this.emit();
|
|
157
|
+
}
|
|
158
|
+
/** Snapshot copy of the undo stack (for debugging/display). */
|
|
159
|
+
getUndoStack() {
|
|
160
|
+
return [...this.undoStack];
|
|
161
|
+
}
|
|
162
|
+
/** Snapshot copy of the redo stack (for debugging/display). */
|
|
163
|
+
getRedoStack() {
|
|
164
|
+
return [...this.redoStack];
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Transform every stored state (current + both stacks). Useful for bulk
|
|
168
|
+
* cleanup such as stripping cached snapshots.
|
|
169
|
+
*/
|
|
170
|
+
transformAll(fn) {
|
|
171
|
+
this.currentState = fn(this.currentState);
|
|
172
|
+
this.undoStack = this.undoStack.map((entry) => ({
|
|
173
|
+
...entry,
|
|
174
|
+
state: fn(entry.state)
|
|
175
|
+
}));
|
|
176
|
+
this.redoStack = this.redoStack.map((entry) => ({
|
|
177
|
+
...entry,
|
|
178
|
+
state: fn(entry.state)
|
|
179
|
+
}));
|
|
180
|
+
this.emit();
|
|
181
|
+
}
|
|
182
|
+
emit() {
|
|
183
|
+
this.setSnapshot({
|
|
184
|
+
state: this.currentState,
|
|
185
|
+
canUndo: this.undoStack.length > 0,
|
|
186
|
+
canRedo: this.redoStack.length > 0,
|
|
187
|
+
undoCount: this.undoStack.length,
|
|
188
|
+
redoCount: this.redoStack.length
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
//#endregion
|
|
193
|
+
export { HistoryManager, classifyHistoryShortcut, defaultHistoryIsEqual };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/managers/Subscribable.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Subscribable Base Class
|
|
4
|
+
*
|
|
5
|
+
* Framework-agnostic base for manager classes that need to notify
|
|
6
|
+
* UI frameworks of state changes.
|
|
7
|
+
*
|
|
8
|
+
* Compatible with:
|
|
9
|
+
* - React: useSyncExternalStore(manager.subscribe, manager.getSnapshot)
|
|
10
|
+
* - Vue: watchEffect(() => { manager.subscribe(triggerRef) })
|
|
11
|
+
*/
|
|
12
|
+
declare abstract class Subscribable<TSnapshot> {
|
|
13
|
+
private readonly listeners;
|
|
14
|
+
private snapshot;
|
|
15
|
+
constructor(initialSnapshot: TSnapshot);
|
|
16
|
+
/**
|
|
17
|
+
* Subscribe to state changes. Returns an unsubscribe function.
|
|
18
|
+
* Bound method — safe to pass as `useSyncExternalStore(manager.subscribe, ...)`.
|
|
19
|
+
*/
|
|
20
|
+
subscribe: (listener: () => void) => (() => void);
|
|
21
|
+
/**
|
|
22
|
+
* Get the current snapshot. Returns a stable reference unless state has changed.
|
|
23
|
+
* Bound method — safe to pass as `useSyncExternalStore(..., manager.getSnapshot)`.
|
|
24
|
+
*/
|
|
25
|
+
getSnapshot: () => TSnapshot;
|
|
26
|
+
/**
|
|
27
|
+
* Update the snapshot and notify all subscribers.
|
|
28
|
+
* Subclasses should call this whenever their state changes.
|
|
29
|
+
*/
|
|
30
|
+
protected setSnapshot(snapshot: TSnapshot): void;
|
|
31
|
+
private notify;
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { Subscribable };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/managers/Subscribable.ts
|
|
2
|
+
/**
|
|
3
|
+
* Subscribable Base Class
|
|
4
|
+
*
|
|
5
|
+
* Framework-agnostic base for manager classes that need to notify
|
|
6
|
+
* UI frameworks of state changes.
|
|
7
|
+
*
|
|
8
|
+
* Compatible with:
|
|
9
|
+
* - React: useSyncExternalStore(manager.subscribe, manager.getSnapshot)
|
|
10
|
+
* - Vue: watchEffect(() => { manager.subscribe(triggerRef) })
|
|
11
|
+
*/
|
|
12
|
+
var Subscribable = class {
|
|
13
|
+
listeners = /* @__PURE__ */ new Set();
|
|
14
|
+
snapshot;
|
|
15
|
+
constructor(initialSnapshot) {
|
|
16
|
+
this.snapshot = initialSnapshot;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Subscribe to state changes. Returns an unsubscribe function.
|
|
20
|
+
* Bound method — safe to pass as `useSyncExternalStore(manager.subscribe, ...)`.
|
|
21
|
+
*/
|
|
22
|
+
subscribe = (listener) => {
|
|
23
|
+
this.listeners.add(listener);
|
|
24
|
+
return () => {
|
|
25
|
+
this.listeners.delete(listener);
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Get the current snapshot. Returns a stable reference unless state has changed.
|
|
30
|
+
* Bound method — safe to pass as `useSyncExternalStore(..., manager.getSnapshot)`.
|
|
31
|
+
*/
|
|
32
|
+
getSnapshot = () => this.snapshot;
|
|
33
|
+
/**
|
|
34
|
+
* Update the snapshot and notify all subscribers.
|
|
35
|
+
* Subclasses should call this whenever their state changes.
|
|
36
|
+
*/
|
|
37
|
+
setSnapshot(snapshot) {
|
|
38
|
+
this.snapshot = snapshot;
|
|
39
|
+
this.notify();
|
|
40
|
+
}
|
|
41
|
+
notify() {
|
|
42
|
+
for (const listener of this.listeners) listener();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
//#endregion
|
|
46
|
+
export { Subscribable };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
import { Subscribable } from "./Subscribable.js";
|
|
3
|
+
import { CellCoordinates } from "./types.js";
|
|
4
|
+
import { TableAction, TableContext } from "../utils/tableOperations.js";
|
|
5
|
+
|
|
6
|
+
//#region src/managers/TableSelectionManager.d.ts
|
|
7
|
+
/** Data attributes for table elements in the rendered DOM */
|
|
8
|
+
declare const TABLE_DATA_ATTRIBUTES: {
|
|
9
|
+
readonly TABLE_INDEX: "data-table-index";
|
|
10
|
+
readonly ROW_INDEX: "data-row";
|
|
11
|
+
readonly COLUMN_INDEX: "data-col";
|
|
12
|
+
readonly TABLE_CELL: "data-table-cell";
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Find table cell coordinates from a click target by walking up the DOM
|
|
16
|
+
* and reading data attributes.
|
|
17
|
+
*/
|
|
18
|
+
declare function findTableFromClick(target: EventTarget | null, container?: HTMLElement | null): CellCoordinates | null;
|
|
19
|
+
/** Get a table from the document by index. */
|
|
20
|
+
declare function getTableFromDocument(doc: document_d_exports.Document, tableIndex: number): document_d_exports.Table | null;
|
|
21
|
+
/** Update a table in the document immutably. */
|
|
22
|
+
declare function updateTableInDocument(doc: document_d_exports.Document, tableIndex: number, newTable: document_d_exports.Table): document_d_exports.Document;
|
|
23
|
+
/** Delete a table from the document immutably. */
|
|
24
|
+
declare function deleteTableFromDocument(doc: document_d_exports.Document, tableIndex: number): document_d_exports.Document;
|
|
25
|
+
/**
|
|
26
|
+
* Tracked table-selection state: the selected cell coordinates plus the derived
|
|
27
|
+
* {@link TableContext} (and the resolved table) for the current document.
|
|
28
|
+
*/
|
|
29
|
+
type TableSelectionState = {
|
|
30
|
+
context: TableContext | null;
|
|
31
|
+
table: document_d_exports.Table | null;
|
|
32
|
+
tableIndex: number | null;
|
|
33
|
+
rowIndex: number | null;
|
|
34
|
+
columnIndex: number | null;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Outcome of dispatching a structural {@link TableAction} against a document.
|
|
38
|
+
* - `noop`: nothing to apply here (no live selection, or a border/selection
|
|
39
|
+
* action that the toolbar handles directly).
|
|
40
|
+
* - `deleted`: the table was removed and the selection cleared.
|
|
41
|
+
* - `updated`: the table was mutated; the selection now tracks the new table.
|
|
42
|
+
*/
|
|
43
|
+
type TableActionResult = {
|
|
44
|
+
type: "noop";
|
|
45
|
+
} | {
|
|
46
|
+
type: "deleted";
|
|
47
|
+
document: document_d_exports.Document;
|
|
48
|
+
} | {
|
|
49
|
+
type: "updated";
|
|
50
|
+
document: document_d_exports.Document;
|
|
51
|
+
context: TableContext;
|
|
52
|
+
};
|
|
53
|
+
declare class TableSelectionManager extends Subscribable<TableSelectionState> {
|
|
54
|
+
constructor();
|
|
55
|
+
/**
|
|
56
|
+
* Select a cell within `doc`. Resolves the table at `coords.tableIndex` and
|
|
57
|
+
* derives the full {@link TableContext}. Returns the context, or `null` (and
|
|
58
|
+
* clears the selection) when that table no longer exists.
|
|
59
|
+
*/
|
|
60
|
+
selectCell(doc: document_d_exports.Document, coords: CellCoordinates): TableContext | null;
|
|
61
|
+
/** Clear the current selection. */
|
|
62
|
+
clearSelection(): void;
|
|
63
|
+
/** Check if a specific cell is the current selection. */
|
|
64
|
+
isCellSelected(tableIndex: number, rowIndex: number, columnIndex: number): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Dispatch a structural table action against `doc`. Mutating actions
|
|
67
|
+
* (add/delete row or column, merge, split, delete table) return the resulting
|
|
68
|
+
* document and re-track the selection against it; border-style and selection
|
|
69
|
+
* actions are routed through the toolbar's own handlers and resolve to `noop`.
|
|
70
|
+
*/
|
|
71
|
+
handleAction(doc: document_d_exports.Document, action: TableAction): TableActionResult;
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { TABLE_DATA_ATTRIBUTES, TableActionResult, TableSelectionManager, TableSelectionState, deleteTableFromDocument, findTableFromClick, getTableFromDocument, updateTableInDocument };
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { Subscribable } from "./Subscribable.js";
|
|
2
|
+
import { addColumn, addRow, createTableContext, deleteColumn, deleteRow, getColumnCount, mergeCells, splitCell } from "../utils/tableOperations.js";
|
|
3
|
+
//#region src/managers/TableSelectionManager.ts
|
|
4
|
+
/** Data attributes for table elements in the rendered DOM */
|
|
5
|
+
const TABLE_DATA_ATTRIBUTES = {
|
|
6
|
+
TABLE_INDEX: "data-table-index",
|
|
7
|
+
ROW_INDEX: "data-row",
|
|
8
|
+
COLUMN_INDEX: "data-col",
|
|
9
|
+
TABLE_CELL: "data-table-cell"
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Find table cell coordinates from a click target by walking up the DOM
|
|
13
|
+
* and reading data attributes.
|
|
14
|
+
*/
|
|
15
|
+
function findTableFromClick(target, container) {
|
|
16
|
+
if (!(target instanceof Element)) return null;
|
|
17
|
+
let current = target;
|
|
18
|
+
while (current && current !== container) {
|
|
19
|
+
if (current.tagName === "TD" || current.tagName === "TH") {
|
|
20
|
+
const rowAttr = current.getAttribute(TABLE_DATA_ATTRIBUTES.ROW_INDEX);
|
|
21
|
+
const colAttr = current.getAttribute(TABLE_DATA_ATTRIBUTES.COLUMN_INDEX);
|
|
22
|
+
if (rowAttr !== null && colAttr !== null) {
|
|
23
|
+
let tableElement = current;
|
|
24
|
+
while (tableElement && tableElement !== container) {
|
|
25
|
+
if (tableElement.tagName === "TABLE") {
|
|
26
|
+
const tableIndexAttr = tableElement.getAttribute(TABLE_DATA_ATTRIBUTES.TABLE_INDEX);
|
|
27
|
+
if (tableIndexAttr !== null) return {
|
|
28
|
+
tableIndex: Number.parseInt(tableIndexAttr, 10),
|
|
29
|
+
rowIndex: Number.parseInt(rowAttr, 10),
|
|
30
|
+
columnIndex: Number.parseInt(colAttr, 10)
|
|
31
|
+
};
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
tableElement = tableElement.parentElement;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
current = current.parentElement;
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
/** Get a table from the document by index. */
|
|
44
|
+
function getTableFromDocument(doc, tableIndex) {
|
|
45
|
+
let currentTableIndex = 0;
|
|
46
|
+
for (const block of doc.package.document.content) if (block.type === "table") {
|
|
47
|
+
if (currentTableIndex === tableIndex) return block;
|
|
48
|
+
currentTableIndex++;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
/** Update a table in the document immutably. */
|
|
53
|
+
function updateTableInDocument(doc, tableIndex, newTable) {
|
|
54
|
+
let currentTableIndex = 0;
|
|
55
|
+
const newContent = doc.package.document.content.map((block) => {
|
|
56
|
+
if (block.type === "table") {
|
|
57
|
+
if (currentTableIndex === tableIndex) {
|
|
58
|
+
currentTableIndex++;
|
|
59
|
+
return newTable;
|
|
60
|
+
}
|
|
61
|
+
currentTableIndex++;
|
|
62
|
+
}
|
|
63
|
+
return block;
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
...doc,
|
|
67
|
+
package: {
|
|
68
|
+
...doc.package,
|
|
69
|
+
document: {
|
|
70
|
+
...doc.package.document,
|
|
71
|
+
content: newContent
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** Delete a table from the document immutably. */
|
|
77
|
+
function deleteTableFromDocument(doc, tableIndex) {
|
|
78
|
+
let currentTableIndex = 0;
|
|
79
|
+
const newContent = doc.package.document.content.filter((block) => {
|
|
80
|
+
if (block.type === "table") {
|
|
81
|
+
const shouldDelete = currentTableIndex === tableIndex;
|
|
82
|
+
currentTableIndex++;
|
|
83
|
+
return !shouldDelete;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
...doc,
|
|
89
|
+
package: {
|
|
90
|
+
...doc.package,
|
|
91
|
+
document: {
|
|
92
|
+
...doc.package.document,
|
|
93
|
+
content: newContent
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const EMPTY_SELECTION = {
|
|
99
|
+
context: null,
|
|
100
|
+
table: null,
|
|
101
|
+
tableIndex: null,
|
|
102
|
+
rowIndex: null,
|
|
103
|
+
columnIndex: null
|
|
104
|
+
};
|
|
105
|
+
var TableSelectionManager = class extends Subscribable {
|
|
106
|
+
constructor() {
|
|
107
|
+
super(EMPTY_SELECTION);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Select a cell within `doc`. Resolves the table at `coords.tableIndex` and
|
|
111
|
+
* derives the full {@link TableContext}. Returns the context, or `null` (and
|
|
112
|
+
* clears the selection) when that table no longer exists.
|
|
113
|
+
*/
|
|
114
|
+
selectCell(doc, coords) {
|
|
115
|
+
const table = getTableFromDocument(doc, coords.tableIndex);
|
|
116
|
+
if (!table) {
|
|
117
|
+
this.setSnapshot(EMPTY_SELECTION);
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const context = createTableContext(table, {
|
|
121
|
+
tableIndex: coords.tableIndex,
|
|
122
|
+
rowIndex: coords.rowIndex,
|
|
123
|
+
columnIndex: coords.columnIndex
|
|
124
|
+
});
|
|
125
|
+
this.setSnapshot({
|
|
126
|
+
context,
|
|
127
|
+
table,
|
|
128
|
+
tableIndex: coords.tableIndex,
|
|
129
|
+
rowIndex: coords.rowIndex,
|
|
130
|
+
columnIndex: coords.columnIndex
|
|
131
|
+
});
|
|
132
|
+
return context;
|
|
133
|
+
}
|
|
134
|
+
/** Clear the current selection. */
|
|
135
|
+
clearSelection() {
|
|
136
|
+
this.setSnapshot(EMPTY_SELECTION);
|
|
137
|
+
}
|
|
138
|
+
/** Check if a specific cell is the current selection. */
|
|
139
|
+
isCellSelected(tableIndex, rowIndex, columnIndex) {
|
|
140
|
+
const snapshot = this.getSnapshot();
|
|
141
|
+
return snapshot.tableIndex === tableIndex && snapshot.rowIndex === rowIndex && snapshot.columnIndex === columnIndex;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Dispatch a structural table action against `doc`. Mutating actions
|
|
145
|
+
* (add/delete row or column, merge, split, delete table) return the resulting
|
|
146
|
+
* document and re-track the selection against it; border-style and selection
|
|
147
|
+
* actions are routed through the toolbar's own handlers and resolve to `noop`.
|
|
148
|
+
*/
|
|
149
|
+
handleAction(doc, action) {
|
|
150
|
+
const { context, table, tableIndex, rowIndex, columnIndex } = this.getSnapshot();
|
|
151
|
+
if (context === null || table === null || tableIndex === null || rowIndex === null || columnIndex === null) return { type: "noop" };
|
|
152
|
+
let newTable = null;
|
|
153
|
+
let newRowIndex = rowIndex;
|
|
154
|
+
let newColumnIndex = columnIndex;
|
|
155
|
+
switch (action) {
|
|
156
|
+
case "addRowAbove":
|
|
157
|
+
newTable = addRow(table, rowIndex, "before");
|
|
158
|
+
newRowIndex = rowIndex + 1;
|
|
159
|
+
break;
|
|
160
|
+
case "addRowBelow":
|
|
161
|
+
newTable = addRow(table, rowIndex, "after");
|
|
162
|
+
break;
|
|
163
|
+
case "addColumnLeft":
|
|
164
|
+
newTable = addColumn(table, columnIndex, "before");
|
|
165
|
+
newColumnIndex = columnIndex + 1;
|
|
166
|
+
break;
|
|
167
|
+
case "addColumnRight":
|
|
168
|
+
newTable = addColumn(table, columnIndex, "after");
|
|
169
|
+
break;
|
|
170
|
+
case "deleteRow":
|
|
171
|
+
if (table.rows.length > 1) {
|
|
172
|
+
newTable = deleteRow(table, rowIndex);
|
|
173
|
+
if (newRowIndex >= newTable.rows.length) newRowIndex = newTable.rows.length - 1;
|
|
174
|
+
}
|
|
175
|
+
break;
|
|
176
|
+
case "deleteColumn":
|
|
177
|
+
if (getColumnCount(table) > 1) {
|
|
178
|
+
newTable = deleteColumn(table, columnIndex);
|
|
179
|
+
const newColCount = getColumnCount(newTable);
|
|
180
|
+
if (newColumnIndex >= newColCount) newColumnIndex = newColCount - 1;
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
case "mergeCells":
|
|
184
|
+
if (context.selection.selectedCells) newTable = mergeCells(table, context.selection);
|
|
185
|
+
break;
|
|
186
|
+
case "splitCell":
|
|
187
|
+
if (context.canSplitCell) newTable = splitCell(table, rowIndex, columnIndex);
|
|
188
|
+
break;
|
|
189
|
+
case "deleteTable": {
|
|
190
|
+
const newDoc = deleteTableFromDocument(doc, tableIndex);
|
|
191
|
+
this.clearSelection();
|
|
192
|
+
return {
|
|
193
|
+
type: "deleted",
|
|
194
|
+
document: newDoc
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
case "borderAll":
|
|
198
|
+
case "borderBottom":
|
|
199
|
+
case "borderInside":
|
|
200
|
+
case "borderLeft":
|
|
201
|
+
case "borderNone":
|
|
202
|
+
case "borderOutside":
|
|
203
|
+
case "borderRight":
|
|
204
|
+
case "borderTop":
|
|
205
|
+
case "selectColumn":
|
|
206
|
+
case "selectRow":
|
|
207
|
+
case "selectTable": break;
|
|
208
|
+
}
|
|
209
|
+
if (!newTable) return { type: "noop" };
|
|
210
|
+
const newDoc = updateTableInDocument(doc, tableIndex, newTable);
|
|
211
|
+
const nextContext = this.selectCell(newDoc, {
|
|
212
|
+
tableIndex,
|
|
213
|
+
rowIndex: newRowIndex,
|
|
214
|
+
columnIndex: newColumnIndex
|
|
215
|
+
});
|
|
216
|
+
if (!nextContext) return { type: "noop" };
|
|
217
|
+
return {
|
|
218
|
+
type: "updated",
|
|
219
|
+
document: newDoc,
|
|
220
|
+
context: nextContext
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
//#endregion
|
|
225
|
+
export { TABLE_DATA_ATTRIBUTES, TableSelectionManager, deleteTableFromDocument, findTableFromClick, getTableFromDocument, updateTableInDocument };
|