@stll/folio-core 0.52.0 → 0.53.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/README.md +23 -0
- package/dist/ai-edits/apply.d.ts +26 -1
- package/dist/ai-edits/apply.js +1519 -105
- package/dist/ai-edits/batch-claims.d.ts +130 -0
- package/dist/ai-edits/batch-claims.js +244 -0
- package/dist/ai-edits/blockRange.js +9 -3
- package/dist/ai-edits/character-boundaries.d.ts +43 -0
- package/dist/ai-edits/character-boundaries.js +95 -0
- package/dist/ai-edits/clean-text.d.ts +33 -3
- package/dist/ai-edits/clean-text.js +52 -6
- package/dist/ai-edits/comment-lifecycle.d.ts +18 -0
- package/dist/ai-edits/comment-lifecycle.js +52 -0
- package/dist/ai-edits/headless.d.ts +71 -7
- package/dist/ai-edits/headless.js +381 -41
- package/dist/ai-edits/index.d.ts +2 -1
- package/dist/ai-edits/index.js +2 -1
- package/dist/ai-edits/minimal-replacement.d.ts +21 -6
- package/dist/ai-edits/minimal-replacement.js +134 -15
- package/dist/ai-edits/newListNumbering.d.ts +23 -0
- package/dist/ai-edits/newListNumbering.js +94 -0
- package/dist/ai-edits/note-references.d.ts +96 -0
- package/dist/ai-edits/note-references.js +139 -0
- package/dist/ai-edits/pending-suggestions.d.ts +79 -0
- package/dist/ai-edits/pending-suggestions.js +306 -0
- package/dist/ai-edits/read.d.ts +1 -1
- package/dist/ai-edits/read.js +56 -43
- package/dist/ai-edits/result-validation.d.ts +29 -0
- package/dist/ai-edits/result-validation.js +164 -0
- package/dist/ai-edits/snapshot.d.ts +36 -3
- package/dist/ai-edits/snapshot.js +177 -23
- package/dist/ai-edits/table-cell-mutations.d.ts +1 -1
- package/dist/ai-edits/table-cell-mutations.js +4 -1
- package/dist/ai-edits/table-geometry.d.ts +1 -1
- package/dist/ai-edits/table-row-column-mutations.d.ts +38 -16
- package/dist/ai-edits/table-row-column-mutations.js +61 -26
- package/dist/ai-edits/types.d.ts +155 -16
- package/dist/compare/compare.d.ts +1 -1
- package/dist/compare/compare.js +65 -16
- package/dist/compare/content-alignment.js +13 -2
- package/dist/compare/content-types.d.ts +7 -0
- package/dist/compare/content.d.ts +4 -1
- package/dist/compare/content.js +6 -1
- package/dist/compare/formatting.js +2 -1
- package/dist/compare/inline-atoms.d.ts +21 -4
- package/dist/compare/inline-atoms.js +138 -16
- package/dist/compare/plan.js +10 -5
- package/dist/compare/scenario.js +14 -3
- package/dist/compare/section-boundary-properties.js +1 -1
- package/dist/compare/types.d.ts +4 -2
- package/dist/compare/types.js +2 -1
- package/dist/compare/verification.d.ts +1 -1
- package/dist/compare/verification.js +15 -3
- package/dist/controller/committedLayoutDiff.d.ts +25 -0
- package/dist/controller/committedLayoutDiff.js +71 -0
- package/dist/controller/contentControlWidgetController.d.ts +1 -1
- package/dist/controller/folioEditor.d.ts +1 -1
- package/dist/controller/fontReadiness.d.ts +70 -3
- package/dist/controller/fontReadiness.js +100 -10
- package/dist/controller/headerFooterEditorManager.js +6 -1
- package/dist/controller/layoutPipeline.d.ts +12 -10
- package/dist/controller/layoutPipeline.js +62 -9
- package/dist/controller/layoutRunOptions.d.ts +24 -0
- package/dist/controller/layoutRunOptions.js +17 -0
- package/dist/controller/layoutScheduler.d.ts +19 -14
- package/dist/controller/layoutScheduler.js +15 -12
- package/dist/controller/layoutSession.d.ts +26 -2
- package/dist/controller/layoutSession.js +1 -1
- package/dist/controller/noteEditorManager.js +8 -3
- package/dist/document-operations.d.ts +11 -2
- package/dist/document-operations.js +230 -21
- package/dist/docx/altChunk.d.ts +8 -0
- package/dist/docx/altChunk.js +17 -0
- package/dist/docx/attributeRemainder.d.ts +1 -1
- package/dist/docx/blockContentParser.d.ts +64 -1
- package/dist/docx/blockContentParser.js +17 -4
- package/dist/docx/blockCustomXmlShell.d.ts +7 -0
- package/dist/docx/blockCustomXmlShell.js +14 -0
- package/dist/docx/blockPlainText.js +7 -0
- package/dist/docx/commentAnchorIndex.js +1 -1
- package/dist/docx/commentRangeIntegrity.js +8 -3
- package/dist/docx/commentReferenceNormalization.js +1 -1
- package/dist/docx/commentReplyMarkers.js +20 -1
- package/dist/docx/compatibility.d.ts +1 -1
- package/dist/docx/compatibility.js +34 -13
- package/dist/docx/containerChildren.gen.d.ts +1 -1
- package/dist/docx/containerChildren.gen.js +1 -0
- package/dist/docx/documentParser.js +12 -12
- package/dist/docx/drawingIdNormalization.d.ts +3 -1
- package/dist/docx/drawingIdNormalization.js +6 -1
- package/dist/docx/ensureParaIds.js +119 -97
- package/dist/docx/footnoteParser.js +8 -4
- package/dist/docx/headerFooterParser.js +3 -3
- package/dist/docx/headerFooterReferenceNormalization.d.ts +20 -1
- package/dist/docx/headerFooterReferenceNormalization.js +52 -27
- package/dist/docx/hyperlinkParser.d.ts +1 -1
- package/dist/docx/index.d.ts +1 -1
- package/dist/docx/listNumberingInstances.d.ts +59 -0
- package/dist/docx/listNumberingInstances.js +249 -0
- package/dist/docx/normalizeBaseDirection.js +2 -1
- package/dist/docx/opaqueCarrier.d.ts +7 -0
- package/dist/docx/opaqueCarrier.js +38 -0
- package/dist/docx/packageParts.js +4 -1
- package/dist/docx/paragraphParser.js +91 -24
- package/dist/docx/paragraphPropertySource.d.ts +4 -2
- package/dist/docx/paragraphPropertySource.js +7 -1
- package/dist/docx/paragraphTraversal.js +1 -0
- package/dist/docx/parseWarningMessage.js +4 -1
- package/dist/docx/parser.js +173 -20
- package/dist/docx/rezip.js +27 -5
- package/dist/docx/sdtProperties.js +1 -1
- package/dist/docx/sdtPropertiesPatch.js +3 -0
- package/dist/docx/selectiveSave.js +16 -9
- package/dist/docx/selectiveXmlPatch.js +106 -37
- package/dist/docx/serializer/blockCustomXmlSerializer.d.ts +5 -0
- package/dist/docx/serializer/blockCustomXmlSerializer.js +4 -0
- package/dist/docx/serializer/documentSerializer.js +2 -0
- package/dist/docx/serializer/headerFooterSerializer.js +2 -0
- package/dist/docx/serializer/noteSerializer.js +3 -1
- package/dist/docx/serializer/paragraphSerializer.js +33 -9
- package/dist/docx/serializer/tableSerializer.js +25 -38
- package/dist/docx/server/createBilingualDocument.js +3 -3
- package/dist/docx/tableParser.d.ts +157 -1
- package/dist/docx/tableParser.js +89 -10
- package/dist/docx/textBoxParser.js +1 -1
- package/dist/docx/unzip.d.ts +2 -1
- package/dist/docx/unzip.js +1 -1
- package/dist/docx/wordprocessingPrefixes.d.ts +78 -0
- package/dist/docx/wordprocessingPrefixes.js +286 -0
- package/dist/i18n/messages/catalogs.gen.d.ts +136 -0
- package/dist/i18n/messages/catalogs.gen.js +153 -17
- package/dist/i18n/messages/messages.gen.d.ts +8 -0
- package/dist/internal/compare/inline-presentation.d.ts +2 -1
- package/dist/internal/compare/inline-presentation.js +11 -10
- package/dist/internal/headlessRevisionResolutionGuard.d.ts +2 -8
- package/dist/internal/headlessRevisionResolutionGuard.js +2 -11
- package/dist/internal/indexedPositionMap.d.ts +11 -0
- package/dist/internal/indexedPositionMap.js +42 -0
- package/dist/internal/pageBreakRunSourceDescendantIndex.js +2 -1
- package/dist/internal/revisionResolutionEdits.d.ts +13 -0
- package/dist/internal/revisionResolutionEdits.js +19 -0
- package/dist/internal/revisionResolutionInline.d.ts +24 -0
- package/dist/internal/{headlessRevisionResolution.js → revisionResolutionInline.js} +61 -43
- package/dist/internal/revisionResolutionStep.d.ts +34 -0
- package/dist/internal/revisionResolutionStep.js +282 -0
- package/dist/internal/revisionResolutionTracking.d.ts +11 -0
- package/dist/internal/revisionResolutionTracking.js +124 -0
- package/dist/internal/wholeStoryRevisionResolution.d.ts +56 -0
- package/dist/internal/wholeStoryRevisionResolution.js +530 -0
- package/dist/layout-bridge/convert/markupViewFlow.d.ts +20 -0
- package/dist/layout-bridge/convert/markupViewFlow.js +123 -0
- package/dist/layout-bridge/convert/tableConversion.js +1 -1
- package/dist/layout-bridge/convert/toFlowBlocks.js +10 -1
- package/dist/layout-engine/layoutInstrumentation.d.ts +9 -1
- package/dist/layout-engine/layoutInstrumentation.js +4 -1
- package/dist/layout-engine/measure/cache.d.ts +18 -1
- package/dist/layout-engine/measure/cache.js +31 -1
- package/dist/layout-engine/measure/font-metrics.worker.js +3 -7
- package/dist/layout-engine/measure/measureContainer.js +7 -47
- package/dist/layout-engine/measure/measureHelpers.d.ts +6 -1
- package/dist/layout-engine/measure/measureHelpers.js +22 -2
- package/dist/layout-engine/measure/measureWorker.js +2 -3
- package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +6 -7
- package/dist/layout-engine/measure/measureWorkerProtocol.js +1 -2
- package/dist/layout-engine/types.d.ts +6 -0
- package/dist/layout-painter/renderPage.js +1 -0
- package/dist/layout-painter/renderParagraph.js +1 -1
- package/dist/managers/ContextMenuManager.js +5 -2
- package/dist/managers/types.d.ts +3 -0
- package/dist/markdown/fromMarkdown.js +2 -1
- package/dist/markdown/internals.d.ts +11 -1
- package/dist/markdown/internals.js +24 -3
- package/dist/markdown/renderBlock.js +39 -9
- package/dist/markdown/renderParagraph.d.ts +13 -1
- package/dist/markdown/renderParagraph.js +85 -38
- package/dist/markdown/renderRuns.js +3 -10
- package/dist/markdown/renderTable.js +24 -12
- package/dist/markdown/trailers.js +2 -2
- package/dist/markdown/types.d.ts +29 -7
- package/dist/paged-layout/incrementalMeasure.d.ts +1 -2
- package/dist/paged-layout/incrementalMeasure.js +1 -9
- package/dist/paged-layout/transactionDirtyRange.d.ts +1 -3
- package/dist/paged-layout/transactionDirtyRange.js +29 -41
- package/dist/panel-layout.d.ts +83 -0
- package/dist/panel-layout.js +96 -0
- package/dist/prosemirror/anchoredTextBoxes.d.ts +37 -0
- package/dist/prosemirror/anchoredTextBoxes.js +156 -0
- package/dist/prosemirror/attrs/index.d.ts +6 -2
- package/dist/prosemirror/attrs/index.js +172 -1
- package/dist/prosemirror/commands/comments.d.ts +7 -8
- package/dist/prosemirror/commands/comments.js +241 -207
- package/dist/prosemirror/commands/contentControls.d.ts +1 -1
- package/dist/prosemirror/commands/formatPainter.d.ts +1 -1
- package/dist/prosemirror/commands/formatting.d.ts +1 -1
- package/dist/prosemirror/commands/index.d.ts +2 -2
- package/dist/prosemirror/commands/index.js +2 -2
- package/dist/prosemirror/commands/paragraph.d.ts +7 -1
- package/dist/prosemirror/commands/paragraph.js +9 -1
- package/dist/prosemirror/commands/paragraphBookmarkJoin.d.ts +13 -0
- package/dist/prosemirror/commands/paragraphBookmarkJoin.js +22 -0
- package/dist/prosemirror/commands/pastePlainText.d.ts +1 -1
- package/dist/prosemirror/commands/resolveAllTableChanges.d.ts +40 -0
- package/dist/prosemirror/commands/resolveAllTableChanges.js +615 -0
- package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.d.ts +15 -0
- package/dist/prosemirror/commands/resolveNodePropertyChangeAttrs.js +46 -0
- package/dist/prosemirror/commands/resolveParagraphProperties.d.ts +16 -0
- package/dist/prosemirror/commands/resolveParagraphProperties.js +59 -0
- package/dist/prosemirror/commands/sectionBreak.js +2 -1
- package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +8 -2
- package/dist/prosemirror/commands/tableCellMergeResolution.js +1 -1
- package/dist/prosemirror/contentControlRevisions.d.ts +1 -1
- package/dist/prosemirror/conversion/fromProseDoc.js +181 -31
- package/dist/prosemirror/conversion/toProseDoc.js +39 -4
- package/dist/prosemirror/emptyFieldResultRuns.d.ts +18 -0
- package/dist/prosemirror/emptyFieldResultRuns.js +33 -0
- package/dist/prosemirror/extensions/ExtensionManager.d.ts +1 -1
- package/dist/prosemirror/extensions/ExtensionManager.js +3 -1
- package/dist/prosemirror/extensions/StarterKit.js +3 -1
- package/dist/prosemirror/extensions/core/DocExtension.js +1 -1
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +12 -0
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +3 -0
- package/dist/prosemirror/extensions/features/ListExtension.js +161 -123
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +19 -2
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +33 -20
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +31 -2
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +270 -99
- package/dist/prosemirror/extensions/features/PasteCleanupExtension.js +3 -2
- package/dist/prosemirror/extensions/features/pasteCleanup.js +2 -1
- package/dist/prosemirror/extensions/features/pastedHtmlLists.d.ts +12 -0
- package/dist/prosemirror/extensions/features/pastedHtmlLists.js +126 -0
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +21 -5
- package/dist/prosemirror/extensions/marks/RunIdentityExtension.d.ts +21 -18
- package/dist/prosemirror/extensions/marks/RunIdentityExtension.js +37 -17
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +7 -2
- package/dist/prosemirror/extensions/marks/markUtils.js +8 -2
- package/dist/prosemirror/extensions/marks/noteReferenceDeletion.d.ts +10 -0
- package/dist/prosemirror/extensions/marks/noteReferenceDeletion.js +35 -0
- package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/nodes/BlockCustomXmlExtension.js +52 -0
- package/dist/prosemirror/extensions/nodes/FieldExtension.d.ts +3 -3
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +50 -15
- package/dist/prosemirror/extensions/nodes/PreservedBlockExtension.js +4 -1
- package/dist/prosemirror/extensions/nodes/TableExtension.d.ts +1 -1
- package/dist/prosemirror/extensions/nodes/TableExtension.js +19 -18
- package/dist/prosemirror/extensions/types.d.ts +4 -1
- package/dist/prosemirror/findReplaceSelection.js +1 -1
- package/dist/prosemirror/index.d.ts +3 -2
- package/dist/prosemirror/index.js +3 -2
- package/dist/prosemirror/indexedNodeLookup.d.ts +17 -0
- package/dist/prosemirror/indexedNodeLookup.js +103 -0
- package/dist/prosemirror/listAutoformatMarkers.d.ts +19 -0
- package/dist/prosemirror/listAutoformatMarkers.js +98 -0
- package/dist/prosemirror/listInstanceReferences.d.ts +12 -0
- package/dist/prosemirror/listInstanceReferences.js +72 -0
- package/dist/prosemirror/listLabels.d.ts +24 -0
- package/dist/prosemirror/listLabels.js +111 -0
- package/dist/prosemirror/listNumbering.d.ts +110 -0
- package/dist/prosemirror/listNumbering.js +345 -0
- package/dist/prosemirror/listRenderingAttrs.d.ts +11 -2
- package/dist/prosemirror/listRenderingAttrs.js +8 -1
- package/dist/prosemirror/markupViewProjection.d.ts +95 -0
- package/dist/prosemirror/markupViewProjection.js +83 -0
- package/dist/prosemirror/numberingAttr.d.ts +9 -1
- package/dist/prosemirror/numberingAttr.js +9 -1
- package/dist/prosemirror/outlineLevelAttr.js +1 -1
- package/dist/prosemirror/paragraphIndentation.d.ts +10 -1
- package/dist/prosemirror/paragraphIndentation.js +29 -7
- package/dist/prosemirror/paragraphMarkJoin.d.ts +19 -0
- package/dist/prosemirror/paragraphMarkJoin.js +24 -0
- package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +1 -1
- package/dist/prosemirror/plugins/documentNumbering.d.ts +27 -1
- package/dist/prosemirror/plugins/documentNumbering.js +97 -11
- package/dist/prosemirror/plugins/documentStyles.d.ts +10 -1
- package/dist/prosemirror/plugins/documentStyles.js +14 -1
- package/dist/prosemirror/plugins/suggestionMode.d.ts +16 -2
- package/dist/prosemirror/plugins/suggestionMode.js +116 -52
- package/dist/prosemirror/plugins/templateDirectives.d.ts +1 -1
- package/dist/prosemirror/plugins/transactionInvariants.d.ts +32 -0
- package/dist/prosemirror/plugins/transactionInvariants.js +86 -0
- package/dist/prosemirror/positionSweep.d.ts +24 -0
- package/dist/prosemirror/positionSweep.js +222 -0
- package/dist/prosemirror/rebaseParagraphRunFormatting.d.ts +1 -1
- package/dist/prosemirror/rejoinRunCarriers.d.ts +1 -1
- package/dist/prosemirror/replacedAnnotations.d.ts +33 -1
- package/dist/prosemirror/replacedAnnotations.js +170 -1
- package/dist/prosemirror/runFormattingInlineCarriers.d.ts +1 -1
- package/dist/prosemirror/schema/index.d.ts +2 -2
- package/dist/prosemirror/schema/index.js +3 -0
- package/dist/prosemirror/schema/nodes.d.ts +42 -11
- package/dist/prosemirror/sectionMarkEdits.d.ts +20 -0
- package/dist/prosemirror/sectionMarkEdits.js +59 -0
- package/dist/prosemirror/storyListNumbering.d.ts +17 -0
- package/dist/prosemirror/storyListNumbering.js +102 -0
- package/dist/prosemirror/tableGridMutation.d.ts +48 -2
- package/dist/prosemirror/tableGridMutation.js +106 -1
- package/dist/prosemirror/validation.js +5 -1
- package/dist/redline.js +93 -9
- package/dist/render-dom/BodySelectionOverlay.d.ts +4 -1
- package/dist/render-dom/BodySelectionOverlay.js +3 -2
- package/dist/utils/findReplace.js +2 -2
- package/dist/utils/mergeDocumentContent.js +1 -1
- package/dist/utils/noteReferenceLabels.d.ts +36 -0
- package/dist/utils/noteReferenceLabels.js +32 -0
- package/dist/utils/replaceText.js +1 -1
- package/dist/version-comparison.d.ts +1 -0
- package/dist/version-comparison.js +1 -0
- package/package.json +3 -2
- package/dist/internal/headlessRevisionResolution.d.ts +0 -23
|
@@ -11,16 +11,18 @@ import { buildSeqValues } from "../fields/seqValues.js";
|
|
|
11
11
|
import { buildFontAlternates } from "../fonts/fontAlternates.js";
|
|
12
12
|
import { prepareEndnoteAreas, resolveEndnotePosition, spliceEndnoteAreas, trailingEndnoteIds } from "../layout-bridge/convert/endnoteLayout.js";
|
|
13
13
|
import { buildFootnoteContentMap, collectEndnoteRefs, collectFootnoteRefs, computeNoteDisplayNumbers, remapNoteMarkerText } from "../layout-bridge/convert/footnoteLayout.js";
|
|
14
|
+
import { remapMarkupViewBlocks } from "../layout-bridge/convert/markupViewFlow.js";
|
|
14
15
|
import { applyTemplatePreviewToBlocks } from "../layout-bridge/convert/templatePreviewFlow.js";
|
|
15
16
|
import { toFlowBlocks } from "../layout-bridge/convert/toFlowBlocks.js";
|
|
16
17
|
import { getColumns } from "../layout-bridge/sectionColumns.js";
|
|
17
18
|
import { resolveAnchorLayoutInCellCompatibility } from "../layout-engine/anchorLayoutInCellCompatibility.js";
|
|
18
19
|
import { layoutDocument } from "../layout-engine/index.js";
|
|
19
20
|
import { resolveJustificationCompatibility } from "../layout-engine/justificationCompatibility.js";
|
|
20
|
-
import { recordLayoutComplete, recordLayoutError, recordLayoutPhase, recordLayoutStart } from "../layout-engine/layoutInstrumentation.js";
|
|
21
|
+
import { recordLayoutComplete, recordLayoutError, recordLayoutPhase, recordLayoutStart, recordMarkupViewIncomplete } from "../layout-engine/layoutInstrumentation.js";
|
|
22
|
+
import { labelMeasureCachesFontSet, syncMeasureCachesToFontSet } from "../layout-engine/measure/cache.js";
|
|
21
23
|
import { collectRequestedHyphenationDictionaries } from "../layout-engine/measure/hyphenationDictionaries.js";
|
|
22
24
|
import { measureBlocks, measureSingleBlockWithoutFloatingZones } from "../layout-engine/measure/measureBlocks.js";
|
|
23
|
-
import { installCanvasMeasureProvider } from "../layout-engine/measure/measureContainer.js";
|
|
25
|
+
import { installCanvasMeasureProvider, resetCanvasContext } from "../layout-engine/measure/measureContainer.js";
|
|
24
26
|
import { resolveEffectiveParagraphSpacingTree } from "../layout-engine/paragraphSpacing.js";
|
|
25
27
|
import { resolveTableIndentCompatibility } from "../layout-engine/tableIndentCompatibility.js";
|
|
26
28
|
import "../layout-engine/types.js";
|
|
@@ -28,14 +30,39 @@ import { renderPages } from "../layout-painter/renderPage.js";
|
|
|
28
30
|
import { tryBuildIncrementalMeasures } from "../paged-layout/incrementalMeasure.js";
|
|
29
31
|
import { computePerBlockMeasureInputs } from "../paged-layout/sectionBlockWidths.js";
|
|
30
32
|
import { getMargins, getPageNumbering, getPageSize, twipsToPixels } from "../paged-layout/sectionGeometry.js";
|
|
33
|
+
import { projectMarkupView } from "../prosemirror/markupViewProjection.js";
|
|
31
34
|
import { templatePreviewValuesKey } from "../prosemirror/plugins/templatePreviewValues.js";
|
|
32
35
|
import { getDocumentWatermark } from "../watermark/index.js";
|
|
36
|
+
import { diffAgainstCommittedLayout } from "./committedLayoutDiff.js";
|
|
37
|
+
import { LAYOUT_MEASURE } from "./layoutRunOptions.js";
|
|
33
38
|
//#region src/controller/layoutPipeline.ts
|
|
34
39
|
const formatEndnoteTexts = (numbers, formatNumber) => {
|
|
35
40
|
const texts = /* @__PURE__ */ new Map();
|
|
36
41
|
for (const [id, displayNumber] of numbers) texts.set(id, formatNumber(displayNumber));
|
|
37
42
|
return texts;
|
|
38
43
|
};
|
|
44
|
+
const sameMeasureInputs = (left, right) => left.styles === right.styles && left.theme === right.theme && left.defaultTabStop === right.defaultTabStop && left.pageContentHeight === right.pageContentHeight && left.fontSet === right.fontSet && left.fontAlternates.size === right.fontAlternates.size && [...left.fontAlternates].every(([name, alternate]) => right.fontAlternates.get(name) === alternate) && left.markupView === right.markupView;
|
|
45
|
+
/**
|
|
46
|
+
* The range an incremental pass re-measures, or `null` for a full measure: the
|
|
47
|
+
* committed measures must come from the same measure inputs, and the range is
|
|
48
|
+
* where the current document and preview differ from the committed ones.
|
|
49
|
+
*/
|
|
50
|
+
const incrementalDirtyRange = ({ session, state, preview, measureInputs }) => {
|
|
51
|
+
const { lastPmDoc, lastMeasureInputs } = session;
|
|
52
|
+
if (!lastPmDoc || !lastMeasureInputs || !sameMeasureInputs(lastMeasureInputs, measureInputs)) return null;
|
|
53
|
+
const diff = diffAgainstCommittedLayout({
|
|
54
|
+
doc: lastPmDoc,
|
|
55
|
+
preview: session.lastTemplatePreview
|
|
56
|
+
}, {
|
|
57
|
+
doc: state.doc,
|
|
58
|
+
preview
|
|
59
|
+
});
|
|
60
|
+
switch (diff.type) {
|
|
61
|
+
case "full": return null;
|
|
62
|
+
case "range": return diff.range;
|
|
63
|
+
default: return diff;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
39
66
|
/** Resolve only package-owned picture-watermark bytes for the DOM painter. */
|
|
40
67
|
const resolveWatermarkImageSrc = (document, watermark) => {
|
|
41
68
|
if (watermark?.kind !== "picture" || watermark.imageTargetExternal === true) return;
|
|
@@ -108,11 +135,13 @@ function runLayoutPipeline(deps, state, options = {}) {
|
|
|
108
135
|
return result;
|
|
109
136
|
}
|
|
110
137
|
function runLayoutPipelineMeasured(deps, state, options) {
|
|
111
|
-
const { contentWidth, columns, pageSize, margins, pageGap, showMarginGuides, marginGuideColor, syncCoordinator, headerContent, footerContent, firstPageHeaderContent, firstPageFooterContent, headerContentRId, footerContentRId, firstPageHeaderContentRId, firstPageFooterContentRId, sectionHeaderFooterRefs, theme: _theme, sectionProperties, document, defaultTabStop, mirrorMargins, styles, layout, hfPMs, painter, pagesContainer, session, renderHfFromContentOrPm, renderHeaderFooterContentByRId,
|
|
138
|
+
const { contentWidth, columns, pageSize, margins, pageGap, showMarginGuides, marginGuideColor, syncCoordinator, headerContent, footerContent, firstPageHeaderContent, firstPageFooterContent, headerContentRId, footerContentRId, firstPageHeaderContentRId, firstPageFooterContentRId, sectionHeaderFooterRefs, theme: _theme, sectionProperties, document, defaultTabStop, mirrorMargins, styles, layout, hfPMs, painter, pagesContainer, session, renderHfFromContentOrPm, renderHeaderFooterContentByRId, readFontSetSignature, buildFootnoteRenderItems, describeInvalidHighlightMarks, pageRenderer = PAGE_RENDERER.legacy, emptyTemplatePreviewEntries: EMPTY_TEMPLATE_PREVIEW_ENTRIES, emptyTemplatePreviewHidden: EMPTY_TEMPLATE_PREVIEW_HIDDEN, markupView } = deps;
|
|
112
139
|
let outcome = {};
|
|
113
140
|
let pendingArtifacts;
|
|
114
141
|
let pendingTemplatePreview;
|
|
115
142
|
installCanvasMeasureProvider();
|
|
143
|
+
const fontSet = readFontSetSignature();
|
|
144
|
+
if (syncMeasureCachesToFontSet(fontSet)) resetCanvasContext();
|
|
116
145
|
const reason = options.reason ?? "manual";
|
|
117
146
|
const recordPhaseDuration = (phase, startedAt) => {
|
|
118
147
|
recordLayoutPhase(reason, phase, performance.now() - startedAt);
|
|
@@ -124,6 +153,15 @@ function runLayoutPipelineMeasured(deps, state, options) {
|
|
|
124
153
|
let phaseStartedAt = performance.now();
|
|
125
154
|
const pageContentHeight = pageSize.h - margins.top - margins.bottom;
|
|
126
155
|
const fontAlternates = buildFontAlternates(document?.package.fontTable);
|
|
156
|
+
const measureInputs = {
|
|
157
|
+
styles,
|
|
158
|
+
theme: _theme,
|
|
159
|
+
defaultTabStop,
|
|
160
|
+
pageContentHeight,
|
|
161
|
+
fontSet,
|
|
162
|
+
fontAlternates,
|
|
163
|
+
markupView
|
|
164
|
+
};
|
|
127
165
|
const flowOpts = {
|
|
128
166
|
pageContentHeight,
|
|
129
167
|
fontAlternates,
|
|
@@ -151,10 +189,14 @@ function runLayoutPipelineMeasured(deps, state, options) {
|
|
|
151
189
|
const endnotePosition = resolveEndnotePosition(document?.package.settings?.endnotePr?.position, document?.package.document.sections?.at(-1)?.properties);
|
|
152
190
|
const bodyTrailingEndnoteIds = trailingEndnoteIds(document?.package.endnotes, endnotePosition);
|
|
153
191
|
if (bodyTrailingEndnoteIds.size > 0) flowOpts.trailingEndnoteIds = bodyTrailingEndnoteIds;
|
|
154
|
-
|
|
155
|
-
|
|
192
|
+
const projection = projectMarkupView(state, markupView);
|
|
193
|
+
if (projection.type === "resolved" && projection.completeness === "partial") recordMarkupViewIncomplete(markupView);
|
|
194
|
+
const viewDoc = projection.type === "resolved" ? projection.doc : state.doc;
|
|
195
|
+
let newBlocks = toFlowBlocks(document === null ? viewDoc.type.create({
|
|
196
|
+
...viewDoc.attrs,
|
|
156
197
|
_finalSectionStart: sectionProperties?.sectionStart ?? null
|
|
157
|
-
},
|
|
198
|
+
}, viewDoc.content, viewDoc.marks) : viewDoc, flowOpts);
|
|
199
|
+
if (projection.type === "resolved") newBlocks = remapMarkupViewBlocks(newBlocks, projection);
|
|
158
200
|
const previewState = templatePreviewValuesKey.getState(state);
|
|
159
201
|
const previewEntries = previewState?.entries ?? EMPTY_TEMPLATE_PREVIEW_ENTRIES;
|
|
160
202
|
const previewHidden = previewState?.hidden ?? EMPTY_TEMPLATE_PREVIEW_HIDDEN;
|
|
@@ -286,13 +328,19 @@ function runLayoutPipelineMeasured(deps, state, options) {
|
|
|
286
328
|
});
|
|
287
329
|
const blockWidths = blockMeasureInputs.widths;
|
|
288
330
|
const previousArtifacts = session.artifacts;
|
|
289
|
-
const
|
|
331
|
+
const dirtyRange = options.measure === LAYOUT_MEASURE.incremental ? incrementalDirtyRange({
|
|
332
|
+
session,
|
|
333
|
+
state,
|
|
334
|
+
preview: pendingTemplatePreview,
|
|
335
|
+
measureInputs
|
|
336
|
+
}) : null;
|
|
337
|
+
const incrementalResult = dirtyRange && previousArtifacts ? tryBuildIncrementalMeasures({
|
|
290
338
|
previousBlocks: previousArtifacts.blocks,
|
|
291
339
|
previousMeasures: previousArtifacts.measures,
|
|
292
340
|
previousBlockWidths: previousArtifacts.blockWidths,
|
|
293
341
|
nextBlocks: newBlocks,
|
|
294
342
|
nextBlockWidths: blockWidths,
|
|
295
|
-
dirtyRange
|
|
343
|
+
dirtyRange,
|
|
296
344
|
measureBlock: measureSingleBlockWithoutFloatingZones
|
|
297
345
|
}) : null;
|
|
298
346
|
let newMeasures = incrementalResult?.measures ?? measureBlocks(newBlocks, blockWidths, blockMeasureInputs.marginTops, {
|
|
@@ -583,11 +631,16 @@ function runLayoutPipelineMeasured(deps, state, options) {
|
|
|
583
631
|
renderPages(newLayout.pages, pagesContainer, renderOpts);
|
|
584
632
|
recordPhaseDuration("render-pages", phaseStartedAt);
|
|
585
633
|
}
|
|
634
|
+
const measuredFontSet = readFontSetSignature();
|
|
635
|
+
labelMeasureCachesFontSet(measuredFontSet);
|
|
586
636
|
session.artifacts = pendingArtifacts;
|
|
587
637
|
session.lastTemplatePreview = pendingTemplatePreview;
|
|
588
638
|
session.lastEditorState = state;
|
|
589
639
|
session.lastPmDoc = state.doc;
|
|
590
|
-
session.
|
|
640
|
+
session.lastMeasureInputs = {
|
|
641
|
+
...measureInputs,
|
|
642
|
+
fontSet: measuredFontSet
|
|
643
|
+
};
|
|
591
644
|
recordLayoutComplete(reason);
|
|
592
645
|
} catch (error) {
|
|
593
646
|
const invalidHighlights = describeInvalidHighlightMarks(state.doc);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { LayoutRunReason } from "../layout-engine/layoutInstrumentation.js";
|
|
2
|
+
//#region src/controller/layoutRunOptions.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* How a layout pass measures its blocks.
|
|
5
|
+
*
|
|
6
|
+
* - `full` measures every block.
|
|
7
|
+
* - `incremental` may keep the committed layout's measures for the blocks the
|
|
8
|
+
* current document shares with the document that layout was computed for.
|
|
9
|
+
* The pass derives what changed from those two documents itself; a caller
|
|
10
|
+
* never supplies a changed range, so the range cannot be relative to a
|
|
11
|
+
* document the committed measures did not come from.
|
|
12
|
+
*/
|
|
13
|
+
declare const LAYOUT_MEASURE: {
|
|
14
|
+
readonly full: "full";
|
|
15
|
+
readonly incremental: "incremental";
|
|
16
|
+
};
|
|
17
|
+
type LayoutMeasure = (typeof LAYOUT_MEASURE)[keyof typeof LAYOUT_MEASURE];
|
|
18
|
+
type LayoutRunOptions = {
|
|
19
|
+
/** Defaults to {@link LAYOUT_MEASURE.full}. */
|
|
20
|
+
measure?: LayoutMeasure;
|
|
21
|
+
reason?: LayoutRunReason;
|
|
22
|
+
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { LAYOUT_MEASURE, LayoutMeasure, LayoutRunOptions };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/controller/layoutRunOptions.ts
|
|
2
|
+
/**
|
|
3
|
+
* How a layout pass measures its blocks.
|
|
4
|
+
*
|
|
5
|
+
* - `full` measures every block.
|
|
6
|
+
* - `incremental` may keep the committed layout's measures for the blocks the
|
|
7
|
+
* current document shares with the document that layout was computed for.
|
|
8
|
+
* The pass derives what changed from those two documents itself; a caller
|
|
9
|
+
* never supplies a changed range, so the range cannot be relative to a
|
|
10
|
+
* document the committed measures did not come from.
|
|
11
|
+
*/
|
|
12
|
+
const LAYOUT_MEASURE = {
|
|
13
|
+
full: "full",
|
|
14
|
+
incremental: "incremental"
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
export { LAYOUT_MEASURE };
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DirtyRange } from "../paged-layout/incrementalMeasure.js";
|
|
1
|
+
import { LayoutRunOptions } from "./layoutRunOptions.js";
|
|
3
2
|
//#region src/controller/layoutScheduler.d.ts
|
|
4
|
-
type LayoutRunOptions = {
|
|
5
|
-
dirtyRange?: DirtyRange;
|
|
6
|
-
forceFull?: boolean;
|
|
7
|
-
reason: LayoutRunReason;
|
|
8
|
-
};
|
|
9
3
|
type RunLayout<TState> = (state: TState, options: LayoutRunOptions) => void;
|
|
10
4
|
type SchedulerClock = {
|
|
11
5
|
requestFrame: (callback: () => void) => number;
|
|
@@ -16,6 +10,11 @@ type SchedulerClock = {
|
|
|
16
10
|
};
|
|
17
11
|
declare const browserClock: SchedulerClock;
|
|
18
12
|
type LayoutSchedulerConfig<TState> = {
|
|
13
|
+
/**
|
|
14
|
+
* The editor's current state, read when a pass runs; `null` (no editor)
|
|
15
|
+
* skips the pass.
|
|
16
|
+
*/
|
|
17
|
+
readState: () => TState | null;
|
|
19
18
|
runLayout: RunLayout<TState>;
|
|
20
19
|
/** Quiet-window debounce before an interactive layout pass. */
|
|
21
20
|
debounceMs: number;
|
|
@@ -30,16 +29,22 @@ type LayoutSchedulerConfig<TState> = {
|
|
|
30
29
|
*/
|
|
31
30
|
clock: SchedulerClock;
|
|
32
31
|
};
|
|
33
|
-
|
|
32
|
+
/** Interactive transaction layout timing shared by framework adapters. */
|
|
33
|
+
declare const TRANSACTION_LAYOUT_TIMING: {
|
|
34
|
+
readonly debounceMs: 32;
|
|
35
|
+
readonly maxDelayMs: 96;
|
|
36
|
+
readonly leadingFrame: true;
|
|
37
|
+
};
|
|
38
|
+
type LayoutScheduler = {
|
|
34
39
|
/**
|
|
35
|
-
*
|
|
36
|
-
* the window
|
|
37
|
-
*
|
|
40
|
+
* Request an incremental layout pass after a short coalescing window.
|
|
41
|
+
* Repeated calls in the window join the pending request, so a typing burst
|
|
42
|
+
* paints once while still honoring the max-latency cap.
|
|
38
43
|
*/
|
|
39
|
-
schedule: (
|
|
44
|
+
schedule: () => void;
|
|
40
45
|
/** Cancel any pending timer/frame. Call on teardown. */
|
|
41
46
|
dispose: () => void;
|
|
42
47
|
};
|
|
43
|
-
declare const createLayoutScheduler: <TState>(config: LayoutSchedulerConfig<TState>) => LayoutScheduler
|
|
48
|
+
declare const createLayoutScheduler: <TState>(config: LayoutSchedulerConfig<TState>) => LayoutScheduler;
|
|
44
49
|
//#endregion
|
|
45
|
-
export {
|
|
50
|
+
export { LayoutScheduler, LayoutSchedulerConfig, RunLayout, SchedulerClock, TRANSACTION_LAYOUT_TIMING, browserClock, createLayoutScheduler };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LAYOUT_MEASURE } from "./layoutRunOptions.js";
|
|
2
2
|
//#region src/controller/layoutScheduler.ts
|
|
3
3
|
const browserClock = {
|
|
4
4
|
requestFrame: (callback) => window.requestAnimationFrame(callback),
|
|
@@ -7,6 +7,12 @@ const browserClock = {
|
|
|
7
7
|
clearTimer: (id) => window.clearTimeout(id),
|
|
8
8
|
now: () => window.performance.now()
|
|
9
9
|
};
|
|
10
|
+
/** Interactive transaction layout timing shared by framework adapters. */
|
|
11
|
+
const TRANSACTION_LAYOUT_TIMING = {
|
|
12
|
+
debounceMs: 32,
|
|
13
|
+
maxDelayMs: 96,
|
|
14
|
+
leadingFrame: true
|
|
15
|
+
};
|
|
10
16
|
const createLayoutScheduler = (config) => {
|
|
11
17
|
const clock = config.clock;
|
|
12
18
|
let lastRunAt = null;
|
|
@@ -15,13 +21,14 @@ const createLayoutScheduler = (config) => {
|
|
|
15
21
|
if (!pending || pending.rafId !== null) return;
|
|
16
22
|
pending.timerId = null;
|
|
17
23
|
pending.rafId = clock.requestFrame(() => {
|
|
18
|
-
const latest = pending;
|
|
19
24
|
pending = null;
|
|
20
|
-
if (!latest) return;
|
|
21
25
|
lastRunAt = clock.now();
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
-
config.runLayout(
|
|
26
|
+
const state = config.readState();
|
|
27
|
+
if (state === null) return;
|
|
28
|
+
config.runLayout(state, {
|
|
29
|
+
reason: "transaction",
|
|
30
|
+
measure: LAYOUT_MEASURE.incremental
|
|
31
|
+
});
|
|
25
32
|
});
|
|
26
33
|
};
|
|
27
34
|
const armTimer = (request) => {
|
|
@@ -32,18 +39,14 @@ const createLayoutScheduler = (config) => {
|
|
|
32
39
|
request.timerId = clock.setTimer(flushPending, delayMs);
|
|
33
40
|
};
|
|
34
41
|
return {
|
|
35
|
-
schedule(
|
|
42
|
+
schedule() {
|
|
36
43
|
if (pending) {
|
|
37
|
-
pending.state = state;
|
|
38
|
-
pending.dirtyRange = mergeDirtyRanges(pending.dirtyRange, dirtyRange);
|
|
39
44
|
armTimer(pending);
|
|
40
45
|
return;
|
|
41
46
|
}
|
|
42
47
|
const next = {
|
|
43
|
-
dirtyRange,
|
|
44
48
|
firstScheduledAt: clock.now(),
|
|
45
49
|
rafId: null,
|
|
46
|
-
state,
|
|
47
50
|
timerId: null
|
|
48
51
|
};
|
|
49
52
|
pending = next;
|
|
@@ -62,4 +65,4 @@ const createLayoutScheduler = (config) => {
|
|
|
62
65
|
};
|
|
63
66
|
};
|
|
64
67
|
//#endregion
|
|
65
|
-
export { browserClock, createLayoutScheduler };
|
|
68
|
+
export { TRANSACTION_LAYOUT_TIMING, browserClock, createLayoutScheduler };
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
1
2
|
import { TemplatePreviewEntry, TemplatePreviewHiddenRange, TemplatePreviewValues } from "../prosemirror/plugins/templatePreviewValues.js";
|
|
2
3
|
import { FlowBlock, Measure } from "../layout-engine/types.js";
|
|
4
|
+
import { DisplayMode } from "../managers/EditorModeManager.js";
|
|
5
|
+
import { FontAlternates } from "../fonts/fontAlternates.js";
|
|
3
6
|
import { EditorState } from "prosemirror-state";
|
|
4
7
|
//#region src/controller/layoutSession.d.ts
|
|
5
8
|
type LayoutArtifacts = {
|
|
@@ -12,13 +15,34 @@ type LayoutTemplatePreview = {
|
|
|
12
15
|
hidden: readonly TemplatePreviewHiddenRange[];
|
|
13
16
|
mode: TemplatePreviewValues["mode"];
|
|
14
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* The inputs besides the ProseMirror document and block widths that a block's
|
|
20
|
+
* measure depends on. An incremental pass keeps committed measures only when
|
|
21
|
+
* these are the ones they were computed with. The `Document` model itself is
|
|
22
|
+
* not among them: adapters hand back a new one after every edit, while a load
|
|
23
|
+
* that changes how text measures brings new styles or font alternates.
|
|
24
|
+
*/
|
|
25
|
+
type LayoutMeasureInputs = {
|
|
26
|
+
styles: document_d_exports.StyleDefinitions | null | undefined;
|
|
27
|
+
theme: document_d_exports.Theme | null | undefined;
|
|
28
|
+
defaultTabStop: number | undefined;
|
|
29
|
+
pageContentHeight: number;
|
|
30
|
+
/**
|
|
31
|
+
* The font set (`readFontSetSignature`) the measures were taken in. A face
|
|
32
|
+
* that loads afterwards changes it, so fallback measures are never reused.
|
|
33
|
+
*/
|
|
34
|
+
fontSet: string;
|
|
35
|
+
fontAlternates: FontAlternates;
|
|
36
|
+
/** The review view: each lays out different text, so a measure is reusable only within one. */
|
|
37
|
+
markupView: DisplayMode;
|
|
38
|
+
};
|
|
15
39
|
type LayoutSession = {
|
|
16
40
|
artifacts: LayoutArtifacts | null;
|
|
17
41
|
lastEditorState: EditorState | null;
|
|
18
42
|
lastPmDoc: EditorState["doc"] | null;
|
|
19
|
-
|
|
43
|
+
lastMeasureInputs: LayoutMeasureInputs | null;
|
|
20
44
|
lastTemplatePreview: LayoutTemplatePreview;
|
|
21
45
|
};
|
|
22
46
|
declare const createLayoutSession: () => LayoutSession;
|
|
23
47
|
//#endregion
|
|
24
|
-
export { LayoutArtifacts, LayoutSession, LayoutTemplatePreview, createLayoutSession };
|
|
48
|
+
export { LayoutArtifacts, LayoutMeasureInputs, LayoutSession, LayoutTemplatePreview, createLayoutSession };
|
|
@@ -8,6 +8,7 @@ import { ensureParaIdsInState } from "../prosemirror/extensions/features/ParaIdA
|
|
|
8
8
|
import { createDocumentNumberingPlugin } from "../prosemirror/plugins/documentNumbering.js";
|
|
9
9
|
import { createDocumentStylesPlugin } from "../prosemirror/plugins/documentStyles.js";
|
|
10
10
|
import { schema } from "../prosemirror/schema/index.js";
|
|
11
|
+
import { storyListNumbering } from "../prosemirror/storyListNumbering.js";
|
|
11
12
|
import { EditorState } from "prosemirror-state";
|
|
12
13
|
import { EditorView } from "prosemirror-view";
|
|
13
14
|
//#region src/controller/noteEditorManager.ts
|
|
@@ -163,8 +164,11 @@ const createNoteEditorManager = (deps) => {
|
|
|
163
164
|
let endnotes = document.package.endnotes;
|
|
164
165
|
let footnotesChanged = false;
|
|
165
166
|
let endnotesChanged = false;
|
|
167
|
+
let numbering = document.package.numbering;
|
|
166
168
|
for (const story of mounted.values()) {
|
|
167
169
|
if (!story.dirty) continue;
|
|
170
|
+
const lists = storyListNumbering(story.view.state, numbering);
|
|
171
|
+
numbering = lists.numbering;
|
|
168
172
|
if (story.note.kind === "footnote") {
|
|
169
173
|
const index = footnotes?.findIndex(({ id }) => id === story.note.noteId) ?? -1;
|
|
170
174
|
const current = index === -1 ? null : footnotes?.at(index);
|
|
@@ -175,7 +179,7 @@ const createNoteEditorManager = (deps) => {
|
|
|
175
179
|
}
|
|
176
180
|
const updated = {
|
|
177
181
|
...current,
|
|
178
|
-
content: proseDocToBlocks(
|
|
182
|
+
content: proseDocToBlocks(lists.doc, current.content, document.package.styles)
|
|
179
183
|
};
|
|
180
184
|
footnotes[index] = updated;
|
|
181
185
|
story.appliedNote = updated;
|
|
@@ -192,7 +196,7 @@ const createNoteEditorManager = (deps) => {
|
|
|
192
196
|
}
|
|
193
197
|
const updated = {
|
|
194
198
|
...current,
|
|
195
|
-
content: proseDocToBlocks(
|
|
199
|
+
content: proseDocToBlocks(lists.doc, current.content, document.package.styles)
|
|
196
200
|
};
|
|
197
201
|
endnotes[index] = updated;
|
|
198
202
|
story.appliedNote = updated;
|
|
@@ -205,7 +209,8 @@ const createNoteEditorManager = (deps) => {
|
|
|
205
209
|
package: {
|
|
206
210
|
...document.package,
|
|
207
211
|
...footnotesChanged && footnotes ? { footnotes } : {},
|
|
208
|
-
...endnotesChanged && endnotes ? { endnotes } : {}
|
|
212
|
+
...endnotesChanged && endnotes ? { endnotes } : {},
|
|
213
|
+
...numbering ? { numbering } : {}
|
|
209
214
|
}
|
|
210
215
|
};
|
|
211
216
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { document_d_exports } from "./types/document.js";
|
|
2
2
|
import { FolioTableTemplates } from "./ai-edits/table-template.js";
|
|
3
3
|
import { FolioAIEditAppliedOperation, FolioAIEditApplyMode, FolioAIEditNormalization, FolioAIEditOperation, FolioAIEditPrecondition, FolioAIEditSkippedOperation, FolioAIEditSnapshot, FolioAITextRangeHandle } from "./ai-edits/types.js";
|
|
4
|
-
import { FolioAIEditView, FolioReplacementBackground, FolioRevisionStamp, FolioWordDiffOptions } from "./ai-edits/apply.js";
|
|
4
|
+
import { FolioAIEditView, FolioReplacementBackground, FolioRevisionStamp, FolioUndefinedStylePolicy, FolioWordDiffOptions } from "./ai-edits/apply.js";
|
|
5
5
|
//#region src/document-operations.d.ts
|
|
6
6
|
declare const FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION: 1;
|
|
7
7
|
/** Direct paragraph-alignment values accepted by the operation contract. */
|
|
@@ -132,6 +132,8 @@ type FolioDocumentOperationIssue = {
|
|
|
132
132
|
code: FolioAIEditSkippedOperation["reason"];
|
|
133
133
|
retryable: boolean;
|
|
134
134
|
recovery: FolioDocumentOperationRecovery;
|
|
135
|
+
/** The skip's detail, when it has one; see {@link FolioAIEditSkippedOperation.message}. */
|
|
136
|
+
message?: string;
|
|
135
137
|
};
|
|
136
138
|
type FolioDocumentOperationStory = "main" | {
|
|
137
139
|
type: "header";
|
|
@@ -289,7 +291,14 @@ type ApplyFolioDocumentOperationsOptions = {
|
|
|
289
291
|
* revised document — keeps them instead.
|
|
290
292
|
*/
|
|
291
293
|
replacementBackground?: FolioReplacementBackground;
|
|
294
|
+
/**
|
|
295
|
+
* What an operation naming a paragraph style the document does not define
|
|
296
|
+
* does. Refusing it (`missingStyle`) is the default; a caller copying the
|
|
297
|
+
* style references of another document — a comparison reproducing the
|
|
298
|
+
* revised one — keeps them instead.
|
|
299
|
+
*/
|
|
300
|
+
undefinedStyles?: FolioUndefinedStylePolicy;
|
|
292
301
|
};
|
|
293
|
-
declare const applyFolioDocumentOperations: ({ view, snapshot, batch, story, author, createCommentId, createUndoHandle, revisionStamp, wordDiff, tableTemplates, replacementBackground }: ApplyFolioDocumentOperationsOptions) => FolioDocumentOperationResult;
|
|
302
|
+
declare const applyFolioDocumentOperations: ({ view, snapshot, batch, story, author, createCommentId, createUndoHandle, revisionStamp, wordDiff, tableTemplates, replacementBackground, undefinedStyles }: ApplyFolioDocumentOperationsOptions) => FolioDocumentOperationResult;
|
|
294
303
|
//#endregion
|
|
295
304
|
export { ApplyFolioDocumentOperationsOptions, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_BATCH_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_KEYS_BY_TYPE, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_LINE_SPACING_RULE_VALUES, FOLIO_PAGE_BREAK_CLEAR_VALUES, FOLIO_PARAGRAPH_ALIGNMENT_VALUES, FolioDocumentOperation, FolioDocumentOperationAffectedTarget, FolioDocumentOperationBatch, FolioDocumentOperationBatchPrecondition, FolioDocumentOperationCapabilities, FolioDocumentOperationIssue, FolioDocumentOperationMode, FolioDocumentOperationPrecondition, FolioDocumentOperationQueuedOperation, FolioDocumentOperationReceipt, FolioDocumentOperationRecovery, FolioDocumentOperationResult, FolioDocumentOperationResultBase, FolioDocumentOperationStatus, FolioDocumentOperationStory, FolioDocumentOperationType, FolioDocumentOperationUndoFailureReason, FolioDocumentOperationUndoHandle, FolioDocumentOperationUndoResult, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch };
|