@stll/folio-core 0.35.1 → 0.37.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 +59 -1
- package/dist/ai-edits/apply.js +878 -377
- package/dist/ai-edits/block-identity.d.ts +4 -1
- package/dist/ai-edits/block-identity.js +4 -1
- package/dist/ai-edits/blockRange.js +14 -14
- package/dist/ai-edits/clean-text.d.ts +40 -1
- package/dist/ai-edits/clean-text.js +52 -2
- package/dist/ai-edits/headless.d.ts +3 -1
- package/dist/ai-edits/headless.js +141 -73
- package/dist/ai-edits/index.d.ts +3 -3
- package/dist/ai-edits/index.js +2 -2
- package/dist/ai-edits/read.js +38 -20
- package/dist/ai-edits/snapshot.d.ts +14 -6
- package/dist/ai-edits/snapshot.js +105 -20
- package/dist/ai-edits/table-cell-mutations.js +1 -1
- package/dist/ai-edits/table-row-column-mutations.js +7 -0
- package/dist/ai-edits/table-template.d.ts +11 -1
- package/dist/ai-edits/table-template.js +49 -17
- package/dist/ai-edits/types.d.ts +62 -61
- package/dist/ai-edits/word-diff.d.ts +18 -3
- package/dist/ai-edits/word-diff.js +556 -67
- package/dist/ai-suggestions/conflict.js +1 -4
- package/dist/ai-suggestions/text-positions.d.ts +8 -0
- package/dist/ai-suggestions/text-positions.js +27 -5
- package/dist/compare/__fixtures__/body-sequence.js +3 -4
- package/dist/compare/column-alignment.d.ts +13 -13
- package/dist/compare/column-alignment.js +78 -39
- package/dist/compare/compare.d.ts +4 -3
- package/dist/compare/compare.js +48 -21
- package/dist/compare/content-alignment.d.ts +95 -0
- package/dist/compare/content-alignment.js +1450 -0
- package/dist/compare/content-types.d.ts +100 -0
- package/dist/compare/content-types.js +0 -0
- package/dist/compare/content.d.ts +209 -0
- package/dist/compare/content.js +885 -0
- package/dist/compare/formatting.d.ts +5 -5
- package/dist/compare/formatting.js +6 -4
- package/dist/compare/plan.d.ts +6 -1
- package/dist/compare/plan.js +171 -566
- package/dist/compare/scenario.d.ts +2 -2
- package/dist/compare/types.d.ts +3 -3
- package/dist/compare/verification.d.ts +8 -9
- package/dist/compare/verification.js +72 -50
- package/dist/compat/eigenpal.d.ts +5 -3
- package/dist/compat/eigenpal.js +3 -2
- package/dist/controller/headerFooterEditorManager.js +18 -10
- package/dist/controller/hiddenEditorApi.js +1 -1
- package/dist/controller/hiddenEditorManager.d.ts +7 -2
- package/dist/controller/hiddenEditorManager.js +15 -6
- package/dist/controller/layoutPipeline.js +5 -3
- package/dist/controller/noteEditorManager.js +12 -7
- package/dist/display-list/build/headerFooterPrimitives.js +1 -0
- package/dist/display-list/build/storyPrimitives.d.ts +5 -2
- package/dist/display-list/build/storyPrimitives.js +60 -3
- package/dist/display-list/build/tablePrimitives.js +30 -0
- package/dist/display-list/primitives.d.ts +1 -1
- package/dist/document-operations.d.ts +8 -4
- package/dist/document-operations.js +104 -12
- package/dist/docx/blockContentParser.js +6 -27
- package/dist/docx/commentParser.js +2 -4
- package/dist/docx/commentRangeIntegrity.js +2 -4
- package/dist/docx/documentClone.d.ts +2 -0
- package/dist/docx/documentClone.js +2 -0
- package/dist/docx/ensureParaIds.js +9 -4
- package/dist/docx/headerFooterParser.js +2 -4
- package/dist/docx/normalizeBaseDirection.js +5 -7
- package/dist/docx/numberingParser.d.ts +3 -1
- package/dist/docx/numberingParser.js +4 -1
- package/dist/docx/paragraphParser.js +34 -35
- package/dist/docx/paragraphPropertySource.d.ts +49 -0
- package/dist/docx/paragraphPropertySource.js +113 -0
- package/dist/docx/paragraphTraversal.js +30 -34
- package/dist/docx/rezip.d.ts +0 -8
- package/dist/docx/rezip.js +41 -16
- package/dist/docx/runConsolidator.js +2 -4
- package/dist/docx/runParser.js +6 -17
- package/dist/docx/sectionParser.js +1 -15
- package/dist/docx/serializer/paragraphSerializer.js +289 -30
- package/dist/docx/serializer/runSerializer.js +6 -12
- package/dist/docx/serializer/sectionPropertiesSerializer.js +2 -10
- package/dist/docx/serializer/tableSerializer.js +4 -23
- package/dist/docx/serializer/trackedChangeAttributes.d.ts +11 -0
- package/dist/docx/serializer/trackedChangeAttributes.js +31 -0
- package/dist/docx/server/build.d.ts +1 -1
- package/dist/docx/server/createBilingualDocument.js +8 -10
- package/dist/docx/server/evaluateDocxXmlPatchProposal.js +22 -13
- package/dist/docx/server/validateDocxConformance.js +17 -13
- package/dist/docx/tableParser.js +1 -37
- package/dist/docx/trackedChangeInfo.d.ts +11 -0
- package/dist/docx/trackedChangeInfo.js +38 -0
- package/dist/docx/verbatimCapture.d.ts +20 -9
- package/dist/docx/verbatimCapture.js +208 -8
- package/dist/docx/xmlParser.d.ts +3 -1
- package/dist/docx/xmlParser.js +6 -1
- package/dist/docx/xmlSafety.d.ts +1 -1
- package/dist/docx/xmlSafety.js +157 -0
- package/dist/headless-layout.js +5 -4
- package/dist/index.d.ts +5 -3
- package/dist/index.js +3 -2
- package/dist/internal/headlessRevisionResolution.d.ts +23 -0
- package/dist/internal/headlessRevisionResolution.js +155 -0
- package/dist/internal/headlessRevisionResolutionGuard.d.ts +12 -0
- package/dist/internal/headlessRevisionResolutionGuard.js +28 -0
- package/dist/internal/pageBreakRunDescendantIndex.d.ts +9 -0
- package/dist/internal/pageBreakRunDescendantIndex.js +27 -0
- package/dist/internal/pageBreakRunPartition.d.ts +26 -0
- package/dist/internal/pageBreakRunPartition.js +35 -0
- package/dist/internal/pageBreakRunSourceDescendantIndex.d.ts +15 -0
- package/dist/internal/pageBreakRunSourceDescendantIndex.js +126 -0
- package/dist/internal/sectionEndpointResolution.d.ts +32 -0
- package/dist/internal/sectionEndpointResolution.js +38 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +1 -0
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +16 -4
- package/dist/layout-bridge/convert/headerFooterLayout.js +52 -9
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +4 -0
- package/dist/layout-bridge/convert/toFlowBlocks.js +391 -82
- package/dist/layout-bridge/dom/clickToPositionDom.d.ts +8 -1
- package/dist/layout-bridge/dom/clickToPositionDom.js +114 -40
- package/dist/layout-bridge/dom/textStreamDom.d.ts +24 -0
- package/dist/layout-bridge/dom/textStreamDom.js +75 -0
- package/dist/layout-bridge/headerFooterLayout.js +16 -30
- package/dist/layout-engine/index.js +12 -3
- package/dist/layout-engine/measure/tableFragmentBorderGeometry.d.ts +17 -0
- package/dist/layout-engine/measure/tableFragmentBorderGeometry.js +24 -0
- package/dist/layout-engine/renderedBreakReconciliation.js +1 -1
- package/dist/layout-engine/types.d.ts +7 -0
- package/dist/layout-painter/imageLayout.d.ts +1 -1
- package/dist/layout-painter/renderTable.js +20 -0
- package/dist/markdown/renderBlock.js +7 -10
- package/dist/model.d.ts +1 -1
- package/dist/paged-layout/rangeProjection.js +6 -9
- package/dist/paged-layout/transactionDirtyRange.d.ts +3 -1
- package/dist/paged-layout/transactionDirtyRange.js +23 -1
- package/dist/prosemirror/attrs/index.d.ts +7 -3
- package/dist/prosemirror/attrs/index.js +128 -7
- package/dist/prosemirror/bookmarkBoundaryIntegrity.d.ts +9 -0
- package/dist/prosemirror/bookmarkBoundaryIntegrity.js +22 -0
- package/dist/prosemirror/commands/comments.d.ts +10 -1
- package/dist/prosemirror/commands/comments.js +551 -87
- package/dist/prosemirror/commands/formatPainter.d.ts +45 -10
- package/dist/prosemirror/commands/formatPainter.js +319 -63
- package/dist/prosemirror/commands/index.d.ts +2 -2
- package/dist/prosemirror/commands/pageBreak.d.ts +5 -2
- package/dist/prosemirror/commands/pageBreak.js +18 -36
- package/dist/prosemirror/commands/propertyChangeScope.d.ts +27 -3
- package/dist/prosemirror/commands/propertyChangeScope.js +85 -14
- package/dist/prosemirror/conversion/fromProseDoc.d.ts +8 -5
- package/dist/prosemirror/conversion/fromProseDoc.js +935 -223
- package/dist/prosemirror/conversion/runShadingMark.js +2 -2
- package/dist/prosemirror/conversion/toProseDoc.d.ts +26 -1
- package/dist/prosemirror/conversion/toProseDoc.js +439 -291
- package/dist/prosemirror/extensions/StarterKit.js +4 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +54 -6
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +7 -1
- package/dist/prosemirror/extensions/features/ListExtension.js +95 -123
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +19 -6
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +27 -1
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +134 -30
- package/dist/prosemirror/extensions/features/pasteCleanup.js +9 -15
- package/dist/prosemirror/extensions/marks/BoldExtension.js +4 -3
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.d.ts +4 -7
- package/dist/prosemirror/extensions/marks/CharacterStyleExtension.js +5 -11
- package/dist/prosemirror/extensions/marks/FontSizeExtension.js +3 -3
- package/dist/prosemirror/extensions/marks/ItalicExtension.js +4 -3
- package/dist/prosemirror/extensions/marks/PageBreakRunOwnerExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/marks/PageBreakRunOwnerExtension.js +39 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.d.ts +7 -1
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.js +67 -21
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +2 -0
- package/dist/prosemirror/extensions/marks/markUtils.d.ts +8 -1
- package/dist/prosemirror/extensions/marks/markUtils.js +88 -2
- package/dist/prosemirror/extensions/nodes/BookmarkBoundaryExtension.js +44 -3
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +1 -1
- package/dist/prosemirror/extensions/nodes/HardBreakExtension.js +15 -4
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/nodes/PageBreakExtension.js +6 -0
- package/dist/prosemirror/extensions/nodes/PageBreakRunExtension.d.ts +6 -0
- package/dist/prosemirror/extensions/nodes/PageBreakRunExtension.js +36 -0
- package/dist/prosemirror/findReplaceSelection.js +8 -3
- package/dist/prosemirror/index.d.ts +3 -3
- package/dist/prosemirror/listMarker.d.ts +26 -1
- package/dist/prosemirror/listMarker.js +108 -14
- package/dist/prosemirror/pageBreakRunProjection.d.ts +28 -0
- package/dist/prosemirror/pageBreakRunProjection.js +47 -0
- package/dist/prosemirror/paraText.js +6 -0
- package/dist/prosemirror/paragraphAlignment.d.ts +12 -0
- package/dist/prosemirror/paragraphAlignment.js +13 -0
- package/dist/prosemirror/paragraphSpacing.d.ts +29 -0
- package/dist/prosemirror/paragraphSpacing.js +125 -0
- package/dist/prosemirror/plugins/documentNumbering.d.ts +8 -0
- package/dist/prosemirror/plugins/documentNumbering.js +18 -0
- package/dist/prosemirror/plugins/pmTextScan.d.ts +3 -2
- package/dist/prosemirror/plugins/pmTextScan.js +14 -4
- package/dist/prosemirror/plugins/suggestionMode.js +9 -11
- package/dist/prosemirror/rebaseParagraphRunFormatting.d.ts +16 -0
- package/dist/prosemirror/rebaseParagraphRunFormatting.js +61 -0
- package/dist/prosemirror/runFormattingInlineCarriers.d.ts +64 -0
- package/dist/prosemirror/runFormattingInlineCarriers.js +121 -0
- package/dist/prosemirror/runFormattingProvenance.d.ts +12 -0
- package/dist/prosemirror/runFormattingProvenance.js +48 -0
- package/dist/prosemirror/runFormattingReconciliation.d.ts +25 -0
- package/dist/prosemirror/runFormattingReconciliation.js +54 -0
- package/dist/prosemirror/runPropertyChangeResolution.d.ts +18 -0
- package/dist/prosemirror/runPropertyChangeResolution.js +18 -0
- package/dist/prosemirror/runStyleFormatting.d.ts +50 -0
- package/dist/prosemirror/runStyleFormatting.js +105 -0
- package/dist/prosemirror/schema/index.d.ts +3 -3
- package/dist/prosemirror/schema/marks.d.ts +84 -9
- package/dist/prosemirror/schema/marks.js +73 -1
- package/dist/prosemirror/schema/nodes.d.ts +30 -6
- package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +14 -2
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +45 -23
- package/dist/prosemirror/styles/styleResolver.d.ts +10 -13
- package/dist/prosemirror/styles/styleResolver.js +3 -3
- package/dist/prosemirror/styles/styleToggleCascade.d.ts +8 -1
- package/dist/prosemirror/styles/styleToggleCascade.js +24 -1
- package/dist/prosemirror/tableGridMutation.d.ts +20 -0
- package/dist/prosemirror/tableGridMutation.js +30 -0
- package/dist/prosemirror/trackedRunInlineAtoms.d.ts +31 -0
- package/dist/prosemirror/trackedRunInlineAtoms.js +39 -0
- package/dist/prosemirror/utils/visualLineNavigation.js +27 -31
- package/dist/prosemirror/validation.js +23 -4
- package/dist/redline.js +4 -1
- package/dist/render-dom/HeaderFooterSelectionOverlay.js +20 -20
- package/dist/render-dom/RenderedDomContext.js +17 -34
- package/dist/server.d.ts +4 -4
- package/dist/server.js +2 -2
- package/dist/style-engine/styleEngine.d.ts +1 -1
- package/dist/utils/clipboard.js +1 -1
- package/dist/utils/findReplace.js +38 -21
- package/dist/utils/mergeDocumentContent.js +3 -3
- package/dist/utils/replaceText.js +2 -1
- package/dist/version-comparison.d.ts +38 -44
- package/dist/version-comparison.js +270 -399
- package/dist/watermark/index.js +2 -4
- package/package.json +8 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FolioAIInlineFormattingPatch } from "../ai-edits/types.js";
|
|
2
2
|
import { CompareDocxParseError, CompareDocxSerializeError } from "./types.js";
|
|
3
3
|
import { Result } from "better-result";
|
|
4
4
|
//#region src/compare/scenario.d.ts
|
|
@@ -42,7 +42,7 @@ type EditScriptStep = {
|
|
|
42
42
|
blockIndex: number;
|
|
43
43
|
startOffset: number;
|
|
44
44
|
endOffset: number;
|
|
45
|
-
formatting:
|
|
45
|
+
formatting: FolioAIInlineFormattingPatch;
|
|
46
46
|
} | {
|
|
47
47
|
type: "insertTableRow";
|
|
48
48
|
blockIndex: number;
|
package/dist/compare/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FolioAIBlockParagraphProperties, FolioAIBlockTableLocation, FolioAIEditSkippedOperation,
|
|
1
|
+
import { FolioAIBlockParagraphProperties, FolioAIBlockTableLocation, FolioAIEditSkippedOperation, FolioAIInlineFormattingPatch } from "../ai-edits/types.js";
|
|
2
2
|
import { WordDiffGranularity } from "../ai-edits/word-diff.js";
|
|
3
3
|
import { FolioDocumentStoryHandle, FolioNumberingLevel } from "../ai-edits/headless.js";
|
|
4
4
|
import { CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision } from "./verification.js";
|
|
@@ -45,8 +45,8 @@ type CompareChangeLocation = {
|
|
|
45
45
|
type CompareFormatRange = {
|
|
46
46
|
startOffset: number;
|
|
47
47
|
endOffset: number;
|
|
48
|
-
/**
|
|
49
|
-
formatting:
|
|
48
|
+
/** Differing properties set to the target value; null removes a direct property. */
|
|
49
|
+
formatting: FolioAIInlineFormattingPatch;
|
|
50
50
|
};
|
|
51
51
|
/**
|
|
52
52
|
* One difference between the two documents, in target-document order with
|
|
@@ -10,7 +10,7 @@ type CompareVerificationInvariant = (typeof COMPARE_VERIFICATION_INVARIANTS)[num
|
|
|
10
10
|
* that fits is the one reported, because a block in the wrong container is a
|
|
11
11
|
* different finding from a block whose words are wrong even when both are true.
|
|
12
12
|
*/
|
|
13
|
-
declare const COMPARE_VERIFICATION_CAUSES: readonly ["invisible-structure", "block-count", "container", "table-geometry", "style", "list-level", "inline-formatting", "whitespace", "text"];
|
|
13
|
+
declare const COMPARE_VERIFICATION_CAUSES: readonly ["invisible-structure", "block-count", "container", "inline-structure", "table-geometry", "style", "list-level", "alignment", "spacing", "inline-formatting", "whitespace", "text"];
|
|
14
14
|
type CompareVerificationCause = (typeof COMPARE_VERIFICATION_CAUSES)[number];
|
|
15
15
|
/** One invariant that did not hold, in one story. */
|
|
16
16
|
type CompareVerificationFailure = {
|
|
@@ -35,15 +35,14 @@ type CompareVerification = {
|
|
|
35
35
|
};
|
|
36
36
|
/** Effective supported formatting with equivalent adjacent runs normalized. */
|
|
37
37
|
declare const projectSupportedInlineFormatting: ({ text, previewRuns }: FolioAIBlock) => string;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
type ClassifyOptions = {
|
|
38
|
+
type ProjectedBlock = Pick<FolioAIBlock, "text" | "table" | "styleId" | "listLevel" | "directAlignment" | "directSpacing" | "structuralBoundaries">;
|
|
39
|
+
type ClassifyOptions<T> = {
|
|
41
40
|
invariant: CompareVerificationInvariant;
|
|
42
41
|
story: FolioDocumentStoryHandle;
|
|
43
42
|
/** What the redline actually leaves. */
|
|
44
|
-
actual: readonly
|
|
43
|
+
actual: readonly T[];
|
|
45
44
|
/** What the invariant says it should leave. */
|
|
46
|
-
expected: readonly
|
|
45
|
+
expected: readonly T[];
|
|
47
46
|
};
|
|
48
47
|
/**
|
|
49
48
|
* The failure two table-geometry projections describe, or `null` when they
|
|
@@ -51,14 +50,14 @@ type ClassifyOptions = {
|
|
|
51
50
|
* whether the count itself did — never a property value, which could carry a
|
|
52
51
|
* style name either document chose.
|
|
53
52
|
*/
|
|
54
|
-
declare const classifyGeometryMismatch: ({ invariant, story, actual, expected }: ClassifyOptions) => CompareVerificationFailure | null;
|
|
53
|
+
declare const classifyGeometryMismatch: ({ invariant, story, actual, expected }: ClassifyOptions<string>) => CompareVerificationFailure | null;
|
|
55
54
|
/**
|
|
56
55
|
* The failure two projections describe, or `null` when they agree.
|
|
57
56
|
*
|
|
58
57
|
* Total over the causes by construction: the last branch is unconditional, so
|
|
59
58
|
* a divergence always produces a failure rather than being dropped.
|
|
60
59
|
*/
|
|
61
|
-
declare const classifyProjectionMismatch: ({ invariant, story, actual, expected }: ClassifyOptions) => CompareVerificationFailure | null;
|
|
60
|
+
declare const classifyProjectionMismatch: ({ invariant, story, actual, expected }: ClassifyOptions<ProjectedBlock>) => CompareVerificationFailure | null;
|
|
62
61
|
/**
|
|
63
62
|
* A container whose last paragraph carries a revision on its mark.
|
|
64
63
|
*
|
|
@@ -99,4 +98,4 @@ declare const revisedFinalParagraphMarks: (packageModel: unknown, { since }?: {
|
|
|
99
98
|
since?: number;
|
|
100
99
|
}) => FinalParagraphMarkRevision[];
|
|
101
100
|
//#endregion
|
|
102
|
-
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision, classifyGeometryMismatch, classifyProjectionMismatch, projectSupportedInlineFormatting, revisedFinalParagraphMarks
|
|
101
|
+
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision, classifyGeometryMismatch, classifyProjectionMismatch, projectSupportedInlineFormatting, revisedFinalParagraphMarks };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { paragraphSpacingEqual } from "../prosemirror/paragraphSpacing.js";
|
|
1
2
|
import { resolveColorToHex } from "../utils/colorResolver.js";
|
|
2
3
|
import { PARAGRAPH_MARK_CHANGE_KINDS } from "@stll/docx-core/model";
|
|
3
4
|
//#region src/compare/verification.ts
|
|
@@ -6,10 +7,10 @@ import { PARAGRAPH_MARK_CHANGE_KINDS } from "@stll/docx-core/model";
|
|
|
6
7
|
*
|
|
7
8
|
* The check compares two block projections: what accepting the generated
|
|
8
9
|
* revisions leaves against the target, and what rejecting them leaves against
|
|
9
|
-
* the base. A projection carries each block's container, style, list level
|
|
10
|
-
* text, so WHICH field diverged names
|
|
11
|
-
* difference — and that is worth reporting
|
|
12
|
-
* opaque "did not reproduce".
|
|
10
|
+
* the base. A projection carries each block's container, style, list level,
|
|
11
|
+
* direct alignment, direct spacing and text, so WHICH field diverged names
|
|
12
|
+
* which part of the pipeline lost the difference — and that is worth reporting
|
|
13
|
+
* as a typed cause rather than as one opaque "did not reproduce".
|
|
13
14
|
*
|
|
14
15
|
* Every `detail` string here is structural: counts, offsets, container kinds.
|
|
15
16
|
* Never a phrase of either document, because a caller may log it, put it in a
|
|
@@ -27,9 +28,12 @@ const COMPARE_VERIFICATION_CAUSES = Object.freeze([
|
|
|
27
28
|
"invisible-structure",
|
|
28
29
|
"block-count",
|
|
29
30
|
"container",
|
|
31
|
+
"inline-structure",
|
|
30
32
|
"table-geometry",
|
|
31
33
|
"style",
|
|
32
34
|
"list-level",
|
|
35
|
+
"alignment",
|
|
36
|
+
"spacing",
|
|
33
37
|
"inline-formatting",
|
|
34
38
|
"whitespace",
|
|
35
39
|
"text"
|
|
@@ -42,10 +46,10 @@ const supportedInlineStyle = ({ bold, italic, underline, strike, fontFamily, fon
|
|
|
42
46
|
fontFamily ?? null,
|
|
43
47
|
fontSizePt ?? null,
|
|
44
48
|
normalizeInlineFormattingColor(color) ?? null,
|
|
45
|
-
directFormatting?.bold
|
|
46
|
-
directFormatting?.italic
|
|
47
|
-
directFormatting?.underline
|
|
48
|
-
directFormatting?.strike
|
|
49
|
+
directFormatting?.bold ?? null,
|
|
50
|
+
directFormatting?.italic ?? null,
|
|
51
|
+
directFormatting?.underline ?? null,
|
|
52
|
+
directFormatting?.strike ?? null,
|
|
49
53
|
directFormatting?.fontFamily ?? null,
|
|
50
54
|
directFormatting?.fontSizePt ?? null,
|
|
51
55
|
normalizeInlineFormattingColor(directFormatting?.color ?? void 0) ?? null
|
|
@@ -68,28 +72,30 @@ const projectSupportedInlineFormatting = ({ text, previewRuns }) => {
|
|
|
68
72
|
}
|
|
69
73
|
return projected.map(({ length, style }) => `${String(length)}:${style}`).join(",");
|
|
70
74
|
};
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
};
|
|
75
|
+
const sameContainer = (left, right) => {
|
|
76
|
+
if (!left || !right) return left === right;
|
|
77
|
+
return left.outerTableIndex === right.outerTableIndex && left.tableIndex === right.tableIndex && left.rowIndex === right.rowIndex && left.cellIndex === right.cellIndex && left.gridColumnIndex === right.gridColumnIndex && left.columnSpan === right.columnSpan && left.rowSpan === right.rowSpan && left.paragraphIndex === right.paragraphIndex;
|
|
78
|
+
};
|
|
79
|
+
const sameStructuralBoundaries = (left, right) => {
|
|
80
|
+
const leftLength = left?.length ?? 0;
|
|
81
|
+
if (leftLength !== (right?.length ?? 0)) return false;
|
|
82
|
+
if (leftLength === 0) return true;
|
|
83
|
+
if (left === void 0 || right === void 0) return false;
|
|
84
|
+
for (let index = 0; index < leftLength; index++) {
|
|
85
|
+
const boundary = left[index];
|
|
86
|
+
const other = right[index];
|
|
87
|
+
if (boundary === void 0 || other === void 0 || boundary.type !== other.type || boundary.offset !== other.offset || boundary.clear !== other.clear) return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
87
90
|
};
|
|
88
|
-
const
|
|
89
|
-
const containerKind = (container) =>
|
|
91
|
+
const sameProjectedBlock = (left, right) => sameContainer(left.table, right.table) && sameStructuralBoundaries(left.structuralBoundaries, right.structuralBoundaries) && left.styleId === right.styleId && left.listLevel === right.listLevel && left.directAlignment === right.directAlignment && paragraphSpacingEqual(left.directSpacing, right.directSpacing) && left.text === right.text;
|
|
92
|
+
const containerKind = (container) => container ? "cell" : "body";
|
|
90
93
|
const collapseWhitespace = (text) => text.replace(/\s+/gu, " ").trim();
|
|
91
|
-
|
|
92
|
-
const
|
|
94
|
+
const sameBlockProjection = (left, right) => left.length === right.length && left.every((entry, index) => {
|
|
95
|
+
const other = right[index];
|
|
96
|
+
return other !== void 0 && sameProjectedBlock(entry, other);
|
|
97
|
+
});
|
|
98
|
+
const sameStringProjection = (left, right) => left.length === right.length && left.every((entry, index) => entry === right[index]);
|
|
93
99
|
/**
|
|
94
100
|
* The same projection with every table coordinate renumbered by first
|
|
95
101
|
* appearance, so it counts the blocks the model holds rather than the
|
|
@@ -116,19 +122,28 @@ const byVisibleOrdinal = (entries) => {
|
|
|
116
122
|
};
|
|
117
123
|
const paragraphCounts = /* @__PURE__ */ new Map();
|
|
118
124
|
return entries.map((entry) => {
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
const tableOrdinal = ordinalWithin("t", table);
|
|
125
|
+
const container = entry.table;
|
|
126
|
+
if (!container) return entry;
|
|
127
|
+
const outerTableOrdinal = ordinalWithin("t", String(container.outerTableIndex));
|
|
128
|
+
const tableOrdinal = ordinalWithin("t", String(container.tableIndex));
|
|
124
129
|
const rowScope = `r${String(tableOrdinal)}`;
|
|
125
|
-
const rowOrdinal = ordinalWithin(rowScope,
|
|
130
|
+
const rowOrdinal = ordinalWithin(rowScope, String(container.rowIndex));
|
|
126
131
|
const cellScope = `c${String(tableOrdinal)}.${String(rowOrdinal)}`;
|
|
127
|
-
const cellOrdinal = ordinalWithin(cellScope,
|
|
128
|
-
const cellKey = `${cellScope}:${
|
|
132
|
+
const cellOrdinal = ordinalWithin(cellScope, String(container.cellIndex));
|
|
133
|
+
const cellKey = `${cellScope}:${String(container.cellIndex)}`;
|
|
129
134
|
const paragraphOrdinal = paragraphCounts.get(cellKey) ?? 0;
|
|
130
135
|
paragraphCounts.set(cellKey, paragraphOrdinal + 1);
|
|
131
|
-
return
|
|
136
|
+
return {
|
|
137
|
+
...entry,
|
|
138
|
+
table: {
|
|
139
|
+
...container,
|
|
140
|
+
outerTableIndex: outerTableOrdinal,
|
|
141
|
+
tableIndex: tableOrdinal,
|
|
142
|
+
rowIndex: rowOrdinal,
|
|
143
|
+
cellIndex: cellOrdinal,
|
|
144
|
+
paragraphIndex: paragraphOrdinal
|
|
145
|
+
}
|
|
146
|
+
};
|
|
132
147
|
});
|
|
133
148
|
};
|
|
134
149
|
/**
|
|
@@ -137,15 +152,19 @@ const byVisibleOrdinal = (entries) => {
|
|
|
137
152
|
*/
|
|
138
153
|
const firstDivergence = (actual, expected) => {
|
|
139
154
|
const shared = Math.min(actual.length, expected.length);
|
|
140
|
-
for (let index = 0; index < shared; index++)
|
|
141
|
-
index
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
155
|
+
for (let index = 0; index < shared; index++) {
|
|
156
|
+
const left = actual[index];
|
|
157
|
+
const right = expected[index];
|
|
158
|
+
if (left !== void 0 && right !== void 0 && !sameProjectedBlock(left, right)) return {
|
|
159
|
+
index,
|
|
160
|
+
actual: left,
|
|
161
|
+
expected: right
|
|
162
|
+
};
|
|
163
|
+
}
|
|
145
164
|
return {
|
|
146
165
|
index: shared,
|
|
147
|
-
actual:
|
|
148
|
-
expected:
|
|
166
|
+
actual: actual.at(shared) ?? null,
|
|
167
|
+
expected: expected.at(shared) ?? null
|
|
149
168
|
};
|
|
150
169
|
};
|
|
151
170
|
/**
|
|
@@ -155,7 +174,7 @@ const firstDivergence = (actual, expected) => {
|
|
|
155
174
|
* style name either document chose.
|
|
156
175
|
*/
|
|
157
176
|
const classifyGeometryMismatch = ({ invariant, story, actual, expected }) => {
|
|
158
|
-
if (
|
|
177
|
+
if (sameStringProjection(actual, expected)) return null;
|
|
159
178
|
return {
|
|
160
179
|
invariant,
|
|
161
180
|
cause: "table-geometry",
|
|
@@ -170,25 +189,28 @@ const classifyGeometryMismatch = ({ invariant, story, actual, expected }) => {
|
|
|
170
189
|
* a divergence always produces a failure rather than being dropped.
|
|
171
190
|
*/
|
|
172
191
|
const classifyProjectionMismatch = ({ invariant, story, actual, expected }) => {
|
|
173
|
-
if (
|
|
192
|
+
if (sameBlockProjection(actual, expected)) return null;
|
|
174
193
|
const failure = (cause, detail) => ({
|
|
175
194
|
invariant,
|
|
176
195
|
cause,
|
|
177
196
|
story,
|
|
178
197
|
detail
|
|
179
198
|
});
|
|
180
|
-
if (
|
|
199
|
+
if (sameBlockProjection(byVisibleOrdinal(actual), byVisibleOrdinal(expected))) return failure("invisible-structure", `every block matches once table coordinates count visible blocks (${String(expected.length)} blocks)`);
|
|
181
200
|
const divergence = firstDivergence(actual, expected);
|
|
182
201
|
const at = `at block ${String(divergence.index)}/${String(expected.length)}`;
|
|
183
202
|
const counts = `${String(actual.length)} blocks against ${String(expected.length)}`;
|
|
184
203
|
if (divergence.actual === null || divergence.expected === null) return failure("block-count", `${actual.length > expected.length ? "more" : "fewer"} blocks than expected (${counts}), diverging ${at}`);
|
|
185
204
|
const { actual: left, expected: right } = divergence;
|
|
186
|
-
if (left.
|
|
205
|
+
if (!sameContainer(left.table, right.table)) return failure("container", `a block sits in a ${containerKind(left.table)} where it is expected in a ${containerKind(right.table)}, ${at} (${counts})`);
|
|
206
|
+
if (!sameStructuralBoundaries(left.structuralBoundaries, right.structuralBoundaries)) return failure("inline-structure", `a block's zero-width inline structure does not match ${at} (${counts})`);
|
|
187
207
|
if (left.text === right.text && left.styleId !== right.styleId) return failure("style", `the paragraph style did not move ${at} (${counts})`);
|
|
188
208
|
if (left.text === right.text && left.listLevel !== right.listLevel) return failure("list-level", `the list level did not move ${at} (${counts})`);
|
|
209
|
+
if (left.text === right.text && left.directAlignment !== right.directAlignment) return failure("alignment", `the direct paragraph alignment did not move ${at} (${counts})`);
|
|
210
|
+
if (left.text === right.text && !paragraphSpacingEqual(left.directSpacing, right.directSpacing)) return failure("spacing", `the direct paragraph spacing did not move ${at} (${counts})`);
|
|
189
211
|
if (collapseWhitespace(left.text) === collapseWhitespace(right.text)) return failure("whitespace", `a block's text differs only in whitespace ${at} (${counts})`);
|
|
190
212
|
if (actual.length !== expected.length) return failure("block-count", `${counts}, first differing ${at}`);
|
|
191
|
-
return failure("text", `a ${containerKind(left.
|
|
213
|
+
return failure("text", `a ${containerKind(left.table)} block's text does not match ${at}, length ${String(left.text.length)} against ${String(right.text.length)} (${counts})`);
|
|
192
214
|
};
|
|
193
215
|
const isAParagraphMarkChangeKind = (value) => PARAGRAPH_MARK_CHANGE_KINDS.some((kind) => kind === value);
|
|
194
216
|
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
@@ -274,4 +296,4 @@ const revisedFinalParagraphMarks = (packageModel, { since = 0 } = {}) => {
|
|
|
274
296
|
return found;
|
|
275
297
|
};
|
|
276
298
|
//#endregion
|
|
277
|
-
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, classifyGeometryMismatch, classifyProjectionMismatch, projectSupportedInlineFormatting, revisedFinalParagraphMarks
|
|
299
|
+
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, classifyGeometryMismatch, classifyProjectionMismatch, projectSupportedInlineFormatting, revisedFinalParagraphMarks };
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { document_d_exports } from "../types/document.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FolioContentBlock, FolioContentContainerPathEntry, FolioContentIdStability, FolioContentInlineBooleanProperty, FolioContentInlineFormatting, FolioContentInlineFormattingPatch, FolioContentLineSpacingRule, FolioContentParagraphAlignment, FolioContentParagraphSpacing, FolioContentRun, FolioContentSnapshot, FolioContentTableLocation } from "../compare/content-types.js";
|
|
3
|
+
import { FolioAIBlock, FolioAIBlockAnchor, FolioAIBlockKind, FolioAIBlockPreviewRun, FolioAIBlockStructuralBoundary, FolioAIBlockTableLocation, FolioAIComment, FolioAIEditAppliedOperation, FolioAIEditApplyMode, FolioAIEditApplyResult, FolioAIEditNormalization, FolioAIEditNormalizationCode, FolioAIEditOperation, FolioAIEditPrecondition, FolioAIEditReviewMeta, FolioAIEditSeverity, FolioAIEditSkipReason, FolioAIEditSkippedOperation, FolioAIEditSnapshot, FolioAIInlineBooleanProperty, FolioAIInlineFormatting, FolioAIInlineFormattingPatch, FolioAIParagraphSpacing, FolioAISignatureParty } from "../ai-edits/types.js";
|
|
3
4
|
import { WORD_DIFF_GRANULARITIES, WordDiffGranularity, WordDiffNormalization, WordDiffOptions, WordDiffSegment, diffWordSegments } from "../ai-edits/word-diff.js";
|
|
4
5
|
import { FolioAIEditApplyOutcome, FolioRevisionStamp, FolioWordDiffOptions, applyFolioAIEditOperations } from "../ai-edits/apply.js";
|
|
5
|
-
import { ApplyFolioDocumentOperationsOptions, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FolioDocumentOperation, FolioDocumentOperationAffectedTarget, FolioDocumentOperationBatch, FolioDocumentOperationCapabilities, FolioDocumentOperationIssue, FolioDocumentOperationMode, FolioDocumentOperationPrecondition, FolioDocumentOperationReceipt, FolioDocumentOperationRecovery, FolioDocumentOperationResult, FolioDocumentOperationResultBase, FolioDocumentOperationStatus, FolioDocumentOperationStory, FolioDocumentOperationType, FolioDocumentOperationUndoFailureReason, FolioDocumentOperationUndoHandle, FolioDocumentOperationUndoResult, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "../document-operations.js";
|
|
6
|
+
import { ApplyFolioDocumentOperationsOptions, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, 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_PARAGRAPH_ALIGNMENT_VALUES, FolioDocumentOperation, FolioDocumentOperationAffectedTarget, FolioDocumentOperationBatch, FolioDocumentOperationCapabilities, FolioDocumentOperationIssue, FolioDocumentOperationMode, FolioDocumentOperationPrecondition, FolioDocumentOperationReceipt, FolioDocumentOperationRecovery, FolioDocumentOperationResult, FolioDocumentOperationResultBase, FolioDocumentOperationStatus, FolioDocumentOperationStory, FolioDocumentOperationType, FolioDocumentOperationUndoFailureReason, FolioDocumentOperationUndoHandle, FolioDocumentOperationUndoResult, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "../document-operations.js";
|
|
6
7
|
import { createFolioAIEditSnapshot, hashFolioAIBlockText, isFolioAIContentBlock, normalizeFolioAIBlockText } from "../ai-edits/snapshot.js";
|
|
7
8
|
import { DeriveBlockIdInput, FolioBlockId, currentFolioBlockId, deriveBlockId, getFolioParaIdFromBlockId, isFolioBlockId, isSequentialFolioBlockId } from "../types/block-id.js";
|
|
8
9
|
import { AIBarStatus, AIChatMode, AICitation, AICitationSource, AIGenerateInput, AISuggestion, AISuggestionApplyMode, AISuggestionPreset, AISuggestionSeverity, AISuggestionStatus, DEFAULT_AI_SUGGESTION_PRESETS } from "../ai-suggestions/types.js";
|
|
9
10
|
import { ApplyResult, applySuggestions } from "../ai-suggestions/apply.js";
|
|
10
11
|
import { ResolvedAnchor, isSuggestionStale, resolveSuggestionAnchor } from "../ai-suggestions/conflict.js";
|
|
11
12
|
import { PositionalText, buildPositionalText } from "../ai-suggestions/text-positions.js";
|
|
13
|
+
import { CompareContentOptions, FOLIO_CONTENT_COMPARISON_LIMITS, FolioContentBlockProperty, FolioContentComparison, FolioContentComparisonError, FolioContentComparisonEvent, FolioContentComparisonLimit, FolioContentComparisonLimitError, FolioContentFormatRange, FolioContentFormattingChange, FolioContentParagraphFormattingPatch, FolioContentStructuralChange, FolioContentTextSegment, InvalidFolioContentComparisonError, compareContent } from "../compare/content.js";
|
|
12
14
|
import { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision } from "../compare/verification.js";
|
|
13
15
|
import { COMPARE_UNSUPPORTED_REASONS, CompareChange, CompareChangeLocation, CompareDocxApplyError, CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, CompareFormatRange, CompareResult, CompareUnsupportedPart, CompareUnsupportedReason, InvalidCompareDocxOptionsError } from "../compare/types.js";
|
|
14
16
|
import { MAX_COMPARE_OPERATIONS, compareDocx } from "../compare/compare.js";
|
|
@@ -37,4 +39,4 @@ import { getGoogleFontsEnabled, setEmbeddedFontFamilyMap, setGoogleFontsEnabled
|
|
|
37
39
|
import { DOCX_CONFORMANCE_CLASSES } from "../index.js";
|
|
38
40
|
type Document = document_d_exports.Document;
|
|
39
41
|
type DocxConformanceClass = document_d_exports.DocxConformanceClass;
|
|
40
|
-
export { type AIBarStatus, type AIChatMode, type AICitation, type AICitationRange, type AICitationSource, type AIGenerateInput, type AISuggestion, type AISuggestionApplyMode, type AISuggestionPreset, type AISuggestionSeverity, type AISuggestionStatus, type AcceptAutocompleteResult, type AnonymizationMatch, type AnonymizationTerm, type ApplyFolioDocumentOperationsOptions, type ApplyResult, type AutocompleteSuggestionPluginOptions, type AutocompleteSuggestionState, type AutocompleteSuggestionStatus, type AutocompleteTriggerCheck, type AutocompleteTriggerOptions, type AutocompleteTriggerSkipReason, type BlockRect, COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, type CompareChange, type CompareChangeLocation, CompareDocxApplyError, type CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, type CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, type CompareFormatRange, type CompareResult, type CompareUnsupportedPart, type CompareUnsupportedReason, type CompareVerification, type CompareVerificationCause, type CompareVerificationFailure, type CompareVerificationInvariant, type CreateEmptyDocumentOptions, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, type DeriveBlockIdInput, type DirectiveKind, type DirectiveRange, type Document, type DocumentPreset, type DocumentStyleCatalog, type DocumentStyleCatalogEntry, type DocumentStyleSet, type DocxCompatibility, type DocxCompatibilityContext, type DocxCompatibilityIssue, type DocxCompatibilityLocation, type DocxCompatibilityPart, type DocxConformanceClass, type EmbeddedFont, type EmbeddedFontParts, type ExtractDocumentStyleSetOptions, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, type FinalParagraphMarkRevision, type FolioAIBlock, type FolioAIBlockAnchor, type FolioAIBlockKind, type FolioAIBlockPreviewRun, type FolioAIBlockTableLocation, type FolioAIComment, type FolioAIEditAppliedOperation, type FolioAIEditApplyMode, type FolioAIEditApplyOutcome, type FolioAIEditApplyResult, type FolioAIEditNormalization, type FolioAIEditNormalizationCode, type FolioAIEditOperation, type FolioAIEditPrecondition, type FolioAIEditReviewMeta, type FolioAIEditSeverity, type FolioAIEditSkipReason, type FolioAIEditSkippedOperation, type FolioAIEditSnapshot, type FolioAISignatureParty, type FolioBlockId, type FolioDocumentOperation, type FolioDocumentOperationAffectedTarget, type FolioDocumentOperationBatch, type FolioDocumentOperationCapabilities, type FolioDocumentOperationIssue, type FolioDocumentOperationMode, type FolioDocumentOperationPrecondition, type FolioDocumentOperationReceipt, type FolioDocumentOperationRecovery, type FolioDocumentOperationResult, type FolioDocumentOperationResultBase, type FolioDocumentOperationStatus, type FolioDocumentOperationStory, type FolioDocumentOperationType, type FolioDocumentOperationUndoFailureReason, type FolioDocumentOperationUndoHandle, type FolioDocumentOperationUndoResult, type FolioDocxCompatibilityHost, type FolioDocxCompatibilityProfile, type FolioRevisionStamp, type FolioWordDiffOptions, type ImageMeta, type ImageRef, type InspectDocxCompatibilityOptions, InvalidCompareDocxOptionsError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, type MarkdownOptions, type MarkdownResult, type PositionalText, type ResolvedAnchor, STELLA_STYLE_SET_NAME, type TemplatePreviewSpan, type TemplatePreviewValue, type TemplatePreviewValues, type TemplateSlashMenuKeyAction, type TemplateSlashMenuState, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, type WordDiffGranularity, type WordDiffNormalization, type WordDiffOptions, type WordDiffSegment, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setEmbeddedFontFamilyMap, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
|
|
42
|
+
export { type AIBarStatus, type AIChatMode, type AICitation, type AICitationRange, type AICitationSource, type AIGenerateInput, type AISuggestion, type AISuggestionApplyMode, type AISuggestionPreset, type AISuggestionSeverity, type AISuggestionStatus, type AcceptAutocompleteResult, type AnonymizationMatch, type AnonymizationTerm, type ApplyFolioDocumentOperationsOptions, type ApplyResult, type AutocompleteSuggestionPluginOptions, type AutocompleteSuggestionState, type AutocompleteSuggestionStatus, type AutocompleteTriggerCheck, type AutocompleteTriggerOptions, type AutocompleteTriggerSkipReason, type BlockRect, COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, type CompareChange, type CompareChangeLocation, type CompareContentOptions, CompareDocxApplyError, type CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, type CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, type CompareFormatRange, type CompareResult, type CompareUnsupportedPart, type CompareUnsupportedReason, type CompareVerification, type CompareVerificationCause, type CompareVerificationFailure, type CompareVerificationInvariant, type CreateEmptyDocumentOptions, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, type DeriveBlockIdInput, type DirectiveKind, type DirectiveRange, type Document, type DocumentPreset, type DocumentStyleCatalog, type DocumentStyleCatalogEntry, type DocumentStyleSet, type DocxCompatibility, type DocxCompatibilityContext, type DocxCompatibilityIssue, type DocxCompatibilityLocation, type DocxCompatibilityPart, type DocxConformanceClass, type EmbeddedFont, type EmbeddedFontParts, type ExtractDocumentStyleSetOptions, FOLIO_CONTENT_COMPARISON_LIMITS, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, 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_PARAGRAPH_ALIGNMENT_VALUES, type FinalParagraphMarkRevision, type FolioAIBlock, type FolioAIBlockAnchor, type FolioAIBlockKind, type FolioAIBlockPreviewRun, type FolioAIBlockStructuralBoundary, type FolioAIBlockTableLocation, type FolioAIComment, type FolioAIEditAppliedOperation, type FolioAIEditApplyMode, type FolioAIEditApplyOutcome, type FolioAIEditApplyResult, type FolioAIEditNormalization, type FolioAIEditNormalizationCode, type FolioAIEditOperation, type FolioAIEditPrecondition, type FolioAIEditReviewMeta, type FolioAIEditSeverity, type FolioAIEditSkipReason, type FolioAIEditSkippedOperation, type FolioAIEditSnapshot, type FolioAIInlineBooleanProperty, type FolioAIInlineFormatting, type FolioAIInlineFormattingPatch, type FolioAIParagraphSpacing, type FolioAISignatureParty, type FolioBlockId, type FolioContentBlock, type FolioContentBlockProperty, type FolioContentComparison, type FolioContentComparisonError, type FolioContentComparisonEvent, type FolioContentComparisonLimit, FolioContentComparisonLimitError, type FolioContentContainerPathEntry, type FolioContentFormatRange, type FolioContentFormattingChange, type FolioContentIdStability, type FolioContentInlineBooleanProperty, type FolioContentInlineFormatting, type FolioContentInlineFormattingPatch, type FolioContentLineSpacingRule, type FolioContentParagraphAlignment, type FolioContentParagraphFormattingPatch, type FolioContentParagraphSpacing, type FolioContentRun, type FolioContentSnapshot, type FolioContentStructuralChange, type FolioContentTableLocation, type FolioContentTextSegment, type FolioDocumentOperation, type FolioDocumentOperationAffectedTarget, type FolioDocumentOperationBatch, type FolioDocumentOperationCapabilities, type FolioDocumentOperationIssue, type FolioDocumentOperationMode, type FolioDocumentOperationPrecondition, type FolioDocumentOperationReceipt, type FolioDocumentOperationRecovery, type FolioDocumentOperationResult, type FolioDocumentOperationResultBase, type FolioDocumentOperationStatus, type FolioDocumentOperationStory, type FolioDocumentOperationType, type FolioDocumentOperationUndoFailureReason, type FolioDocumentOperationUndoHandle, type FolioDocumentOperationUndoResult, type FolioDocxCompatibilityHost, type FolioDocxCompatibilityProfile, type FolioRevisionStamp, type FolioWordDiffOptions, type ImageMeta, type ImageRef, type InspectDocxCompatibilityOptions, InvalidCompareDocxOptionsError, InvalidFolioContentComparisonError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, type MarkdownOptions, type MarkdownResult, type PositionalText, type ResolvedAnchor, STELLA_STYLE_SET_NAME, type TemplatePreviewSpan, type TemplatePreviewValue, type TemplatePreviewValues, type TemplateSlashMenuKeyAction, type TemplateSlashMenuState, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, type WordDiffGranularity, type WordDiffNormalization, type WordDiffOptions, type WordDiffSegment, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareContent, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setEmbeddedFontFamilyMap, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
|
package/dist/compat/eigenpal.js
CHANGED
|
@@ -6,9 +6,10 @@ import { isSuggestionStale, resolveSuggestionAnchor } from "../ai-suggestions/co
|
|
|
6
6
|
import { buildPositionalText } from "../ai-suggestions/text-positions.js";
|
|
7
7
|
import { DEFAULT_AI_SUGGESTION_PRESETS } from "../ai-suggestions/types.js";
|
|
8
8
|
import { MAX_COMPARE_OPERATIONS, compareDocx } from "../compare/compare.js";
|
|
9
|
+
import { FOLIO_CONTENT_COMPARISON_LIMITS, FolioContentComparisonLimitError, InvalidFolioContentComparisonError, compareContent } from "../compare/content.js";
|
|
9
10
|
import { COMPARE_UNSUPPORTED_REASONS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, InvalidCompareDocxOptionsError } from "../compare/types.js";
|
|
10
11
|
import { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS } from "../compare/verification.js";
|
|
11
|
-
import { FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "../document-operations.js";
|
|
12
|
+
import { FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, 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_PARAGRAPH_ALIGNMENT_VALUES, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "../document-operations.js";
|
|
12
13
|
import { inspectDocxCompatibility } from "../docx/compatibility.js";
|
|
13
14
|
import { createDocx } from "../docx/rezip.js";
|
|
14
15
|
import { buildEmbeddedFontFamilyMap, extractEmbeddedFonts, getEmbeddedFontFaces, scopeEmbeddedFontFamily } from "../fonts/embeddedFonts.js";
|
|
@@ -31,4 +32,4 @@ import { currentFolioBlockId, deriveBlockId, getFolioParaIdFromBlockId, isFolioB
|
|
|
31
32
|
import { createEmptyDocument } from "../utils/createDocument.js";
|
|
32
33
|
import { getGoogleFontsEnabled, setEmbeddedFontFamilyMap, setGoogleFontsEnabled } from "../utils/fontResolver.js";
|
|
33
34
|
import { mergeDocumentContent } from "../utils/mergeDocumentContent.js";
|
|
34
|
-
export { COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, InvalidCompareDocxOptionsError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setEmbeddedFontFamilyMap, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
|
|
35
|
+
export { COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, FOLIO_CONTENT_COMPARISON_LIMITS, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, 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_PARAGRAPH_ALIGNMENT_VALUES, FolioContentComparisonLimitError, InvalidCompareDocxOptionsError, InvalidFolioContentComparisonError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareContent, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setEmbeddedFontFamilyMap, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { clearHeaderFooterVerbatimXml } from "../docx/headerFooterVerbatim.js";
|
|
2
|
+
import { cloneParagraphWithPropertySource } from "../docx/paragraphPropertySource.js";
|
|
2
3
|
import { proseDocToBlocks } from "../prosemirror/conversion/fromProseDoc.js";
|
|
3
4
|
import { headerFooterToProseDoc } from "../prosemirror/conversion/toProseDoc.js";
|
|
4
5
|
import { ExtensionManager } from "../prosemirror/extensions/ExtensionManager.js";
|
|
5
6
|
import { createStarterKit } from "../prosemirror/extensions/StarterKit.js";
|
|
6
7
|
import { ensureBaseDirectionInState } from "../prosemirror/extensions/features/AutoBidiDetectionExtension.js";
|
|
7
8
|
import { ensureParaIdsInState } from "../prosemirror/extensions/features/ParaIdAllocatorExtension.js";
|
|
9
|
+
import { createDocumentNumberingPlugin } from "../prosemirror/plugins/documentNumbering.js";
|
|
8
10
|
import { createDocumentStylesPlugin } from "../prosemirror/plugins/documentStyles.js";
|
|
9
11
|
import { schema } from "../prosemirror/schema/index.js";
|
|
10
12
|
import { EditorState } from "prosemirror-state";
|
|
@@ -14,13 +16,12 @@ const DETACHED_WATERMARK_HOST = Symbol.for("stll.detachedWatermarkHost");
|
|
|
14
16
|
const headerFooterToProseDocWithDetachedWatermarkHost = (headerFooter, options) => {
|
|
15
17
|
return headerFooterToProseDoc(headerFooter.content.map((block, blockIndex) => {
|
|
16
18
|
if (blockIndex !== headerFooter.watermarkBlockIndex || block.type !== "paragraph") return block;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
19
|
+
const marked = cloneParagraphWithPropertySource(block, {});
|
|
20
|
+
Reflect.set(marked, DETACHED_WATERMARK_HOST, true);
|
|
21
|
+
return marked;
|
|
21
22
|
}), options);
|
|
22
23
|
};
|
|
23
|
-
const buildInitialState = (headerFooter, styles, theme, manager) => {
|
|
24
|
+
const buildInitialState = (headerFooter, styles, theme, numbering, manager) => {
|
|
24
25
|
const proseDocOptions = {};
|
|
25
26
|
if (styles) proseDocOptions.styles = styles;
|
|
26
27
|
if (theme !== void 0) proseDocOptions.theme = theme;
|
|
@@ -28,7 +29,11 @@ const buildInitialState = (headerFooter, styles, theme, manager) => {
|
|
|
28
29
|
return ensureBaseDirectionInState(ensureParaIdsInState(EditorState.create({
|
|
29
30
|
doc: document,
|
|
30
31
|
schema,
|
|
31
|
-
plugins: [
|
|
32
|
+
plugins: [
|
|
33
|
+
...manager.getPlugins(),
|
|
34
|
+
createDocumentStylesPlugin(styles),
|
|
35
|
+
createDocumentNumberingPlugin(numbering)
|
|
36
|
+
]
|
|
32
37
|
})));
|
|
33
38
|
};
|
|
34
39
|
const enumerateHeaderFooterParts = ({ headers, footers }) => {
|
|
@@ -72,6 +77,7 @@ const createHeaderFooterEditorManager = (deps) => {
|
|
|
72
77
|
const document = deps.getDocument();
|
|
73
78
|
const styles = deps.getStyles();
|
|
74
79
|
const theme = deps.getTheme();
|
|
80
|
+
const numbering = document?.package.numbering;
|
|
75
81
|
const wanted = new Map(enumerateDocumentHeaderFooterParts(document).map((part) => [part.rId, part]));
|
|
76
82
|
for (const [rId, part] of mounted) {
|
|
77
83
|
if (wanted.has(rId)) continue;
|
|
@@ -85,13 +91,14 @@ const createHeaderFooterEditorManager = (deps) => {
|
|
|
85
91
|
if (existing) {
|
|
86
92
|
if (existing.mountNode.parentElement !== host) host.append(existing.mountNode);
|
|
87
93
|
const contentIsCurrent = existing.appliedHeaderFooter === headerFooter && existing.appliedContent === headerFooter.content;
|
|
88
|
-
const contextIsCurrent = existing.appliedStyles === styles && existing.appliedTheme === theme;
|
|
94
|
+
const contextIsCurrent = existing.appliedStyles === styles && existing.appliedTheme === theme && existing.appliedNumbering === numbering;
|
|
89
95
|
if (contentIsCurrent && contextIsCurrent) continue;
|
|
90
|
-
existing.view.updateState(buildInitialState(headerFooter, styles, theme, existing.manager));
|
|
96
|
+
existing.view.updateState(buildInitialState(headerFooter, styles, theme, numbering, existing.manager));
|
|
91
97
|
existing.appliedHeaderFooter = headerFooter;
|
|
92
98
|
existing.appliedContent = headerFooter.content;
|
|
93
99
|
existing.appliedStyles = styles;
|
|
94
100
|
existing.appliedTheme = theme;
|
|
101
|
+
existing.appliedNumbering = numbering;
|
|
95
102
|
existing.dirty = false;
|
|
96
103
|
continue;
|
|
97
104
|
}
|
|
@@ -103,7 +110,7 @@ const createHeaderFooterEditorManager = (deps) => {
|
|
|
103
110
|
mountNode.dataset["hfKind"] = part.kind;
|
|
104
111
|
host.append(mountNode);
|
|
105
112
|
const view = new EditorView(mountNode, {
|
|
106
|
-
state: buildInitialState(headerFooter, styles, theme, manager),
|
|
113
|
+
state: buildInitialState(headerFooter, styles, theme, numbering, manager),
|
|
107
114
|
dispatchTransaction(transaction) {
|
|
108
115
|
const nextState = view.state.apply(transaction);
|
|
109
116
|
view.updateState(nextState);
|
|
@@ -121,6 +128,7 @@ const createHeaderFooterEditorManager = (deps) => {
|
|
|
121
128
|
mounted.set(part.rId, {
|
|
122
129
|
appliedContent: headerFooter.content,
|
|
123
130
|
appliedHeaderFooter: headerFooter,
|
|
131
|
+
appliedNumbering: numbering,
|
|
124
132
|
appliedStyles: styles,
|
|
125
133
|
appliedTheme: theme,
|
|
126
134
|
dirty: false,
|
|
@@ -151,7 +159,7 @@ const createHeaderFooterEditorManager = (deps) => {
|
|
|
151
159
|
if (!source || !existing) continue;
|
|
152
160
|
const updated = {
|
|
153
161
|
...existing,
|
|
154
|
-
content: proseDocToBlocks(view.state.doc)
|
|
162
|
+
content: proseDocToBlocks(view.state.doc, existing.content, document.package.styles)
|
|
155
163
|
};
|
|
156
164
|
clearHeaderFooterVerbatimXml(updated);
|
|
157
165
|
if (kind === "header") {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { fromProseDoc } from "../prosemirror/conversion/fromProseDoc.js";
|
|
2
2
|
import { CellSelection } from "prosemirror-tables";
|
|
3
|
-
import { redo, undo } from "prosemirror-history";
|
|
4
3
|
import { NodeSelection, Selection, TextSelection } from "prosemirror-state";
|
|
4
|
+
import { redo, undo } from "prosemirror-history";
|
|
5
5
|
//#region src/controller/hiddenEditorApi.ts
|
|
6
6
|
/**
|
|
7
7
|
* Hidden-editor imperative API
|
|
@@ -63,7 +63,7 @@ type HiddenEditorManagerDeps = {
|
|
|
63
63
|
getDocumentIdentity: () => string;
|
|
64
64
|
/** Document context for the API's `getDocument` (PM state -> Document). */
|
|
65
65
|
getDocumentContext: () => document_d_exports.Document | null;
|
|
66
|
-
onTransaction: (
|
|
66
|
+
onTransaction: (update: HiddenEditorTransactionUpdate) => void;
|
|
67
67
|
onSelectionChange: (state: EditorState) => void;
|
|
68
68
|
onKeyDown: (view: EditorView, event: KeyboardEvent) => boolean;
|
|
69
69
|
onCopy?: () => void;
|
|
@@ -74,6 +74,11 @@ type HiddenEditorManagerDeps = {
|
|
|
74
74
|
onEditorViewDestroy: () => void;
|
|
75
75
|
onRemoteSelectionsChange: (selections: HiddenProseMirrorRemoteSelection[]) => void;
|
|
76
76
|
};
|
|
77
|
+
type HiddenEditorTransactionUpdate = {
|
|
78
|
+
transactions: readonly Transaction[];
|
|
79
|
+
newState: EditorState;
|
|
80
|
+
docChanged: boolean;
|
|
81
|
+
};
|
|
77
82
|
type PreventableDomEvent = {
|
|
78
83
|
preventDefault: () => void;
|
|
79
84
|
};
|
|
@@ -97,4 +102,4 @@ type HiddenEditorManager = {
|
|
|
97
102
|
};
|
|
98
103
|
declare const createHiddenEditorManager: (deps: HiddenEditorManagerDeps) => HiddenEditorManager;
|
|
99
104
|
//#endregion
|
|
100
|
-
export { CollaborationModules, CreateHiddenEditorStateOptions, HiddenEditorManager, HiddenEditorManagerDeps, HiddenProseMirrorCollaboration, HiddenProseMirrorRemoteSelection, collectRemoteSelections, createHiddenEditorClipboardHandlers, createHiddenEditorManager, createHiddenEditorState };
|
|
105
|
+
export { CollaborationModules, CreateHiddenEditorStateOptions, HiddenEditorManager, HiddenEditorManagerDeps, HiddenEditorTransactionUpdate, HiddenProseMirrorCollaboration, HiddenProseMirrorRemoteSelection, collectRemoteSelections, createHiddenEditorClipboardHandlers, createHiddenEditorManager, createHiddenEditorState };
|
|
@@ -4,6 +4,7 @@ import { isReadOnlyEditKey } from "../paged-layout/readOnlyEditAttempt.js";
|
|
|
4
4
|
import { createEmptyDoc, toProseDoc } from "../prosemirror/conversion/toProseDoc.js";
|
|
5
5
|
import { ensureBaseDirectionInState } from "../prosemirror/extensions/features/AutoBidiDetectionExtension.js";
|
|
6
6
|
import { ensureParaIdsInDoc, ensureParaIdsInState } from "../prosemirror/extensions/features/ParaIdAllocatorExtension.js";
|
|
7
|
+
import { createDocumentNumberingPlugin } from "../prosemirror/plugins/documentNumbering.js";
|
|
7
8
|
import { createDocumentStylesPlugin } from "../prosemirror/plugins/documentStyles.js";
|
|
8
9
|
import { schema } from "../prosemirror/schema/index.js";
|
|
9
10
|
import { createHiddenEditorApi } from "./hiddenEditorApi.js";
|
|
@@ -108,10 +109,12 @@ function createHiddenEditorState(options) {
|
|
|
108
109
|
recordHiddenEditorPhase(reason, "to-prose-doc", performance.now() - startedAt);
|
|
109
110
|
} else localDoc = ensureParaIdsInDoc(localDoc);
|
|
110
111
|
const styleResolverPlugin = createDocumentStylesPlugin(styles ?? document?.package.styles);
|
|
112
|
+
const numberingPlugin = createDocumentNumberingPlugin(document?.package.numbering);
|
|
111
113
|
const plugins = [
|
|
112
114
|
...externalPlugins,
|
|
113
115
|
...manager?.getPlugins() ?? [],
|
|
114
|
-
styleResolverPlugin
|
|
116
|
+
styleResolverPlugin,
|
|
117
|
+
numberingPlugin
|
|
115
118
|
];
|
|
116
119
|
if (collaboration) {
|
|
117
120
|
if (!collaborationModules) panic("Collaboration modules must be loaded before creating collaborative editor state.");
|
|
@@ -218,13 +221,19 @@ const createHiddenEditorManager = (deps) => {
|
|
|
218
221
|
deps.onReadOnlyEditAttempt();
|
|
219
222
|
return;
|
|
220
223
|
}
|
|
221
|
-
const
|
|
222
|
-
view.updateState(
|
|
223
|
-
|
|
224
|
-
|
|
224
|
+
const applied = view.state.applyTransaction(transaction);
|
|
225
|
+
view.updateState(applied.state);
|
|
226
|
+
const docChanged = applied.transactions.some((appliedTransaction) => appliedTransaction.docChanged);
|
|
227
|
+
const selectionChanged = applied.transactions.some((appliedTransaction) => appliedTransaction.selectionSet || appliedTransaction.docChanged);
|
|
228
|
+
deps.onTransaction({
|
|
229
|
+
transactions: applied.transactions,
|
|
230
|
+
newState: applied.state,
|
|
231
|
+
docChanged
|
|
232
|
+
});
|
|
233
|
+
if (selectionChanged) deps.onSelectionChange(applied.state);
|
|
225
234
|
const currentCollaboration = deps.getCollaboration();
|
|
226
235
|
const currentCollaborationModules = deps.getCollaborationModules();
|
|
227
|
-
if (currentCollaboration?.awareness && currentCollaborationModules) deps.onRemoteSelectionsChange(collectRemoteSelections(
|
|
236
|
+
if (currentCollaboration?.awareness && currentCollaborationModules) deps.onRemoteSelectionsChange(collectRemoteSelections(applied.state, currentCollaboration.awareness, currentCollaborationModules));
|
|
228
237
|
},
|
|
229
238
|
handleKeyDown: (pmView, event) => {
|
|
230
239
|
if (deps.getReadOnly() && isReadOnlyEditKey(event)) {
|
|
@@ -117,10 +117,12 @@ function runLayoutPipeline(deps, state, options = {}) {
|
|
|
117
117
|
const fontAlternates = buildFontAlternates(document?.package.fontTable);
|
|
118
118
|
const flowOpts = {
|
|
119
119
|
pageContentHeight,
|
|
120
|
-
fontAlternates
|
|
120
|
+
fontAlternates,
|
|
121
|
+
...styles ? { styles } : {}
|
|
121
122
|
};
|
|
122
123
|
if (_theme !== void 0) flowOpts.theme = _theme;
|
|
123
124
|
if (defaultTabStop !== void 0) flowOpts.defaultTabStopTwips = defaultTabStop;
|
|
125
|
+
if (document?.package.settings?.splitPageBreakAndParagraphMark === true) flowOpts.splitPageBreakAndParagraphMark = true;
|
|
124
126
|
if (document?.package.settings?.lineBreakRules) flowOpts.lineBreakRules = document.package.settings.lineBreakRules;
|
|
125
127
|
const documentSettings = document?.package.settings;
|
|
126
128
|
const justificationCompatibility = resolveJustificationCompatibility(documentSettings?.compatibilityMode);
|
|
@@ -181,7 +183,7 @@ function runLayoutPipeline(deps, state, options = {}) {
|
|
|
181
183
|
const buildHfOptions = (pageCount, fieldInputs) => {
|
|
182
184
|
const hfMeasureBlocks = (hfBlocks, hfWidth) => measureBlocks(hfBlocks, hfWidth, void 0, void 0, buildHeaderFooterFieldValues(hfBlocks, pageCount, hfClock, fieldInputs));
|
|
183
185
|
return {
|
|
184
|
-
...styles ? { styles } : {},
|
|
186
|
+
...flowOpts.styles ? { styles: flowOpts.styles } : {},
|
|
185
187
|
..._theme !== void 0 ? { theme: _theme } : {},
|
|
186
188
|
fontAlternates,
|
|
187
189
|
measureBlocks: hfMeasureBlocks,
|
|
@@ -329,7 +331,7 @@ function runLayoutPipeline(deps, state, options = {}) {
|
|
|
329
331
|
if (hasFootnotes) {
|
|
330
332
|
footnoteContentMap = buildFootnoteContentMap(documentFootnotes, footnoteRefs, contentWidth, (() => {
|
|
331
333
|
const footnoteOptions = { measureBlocks };
|
|
332
|
-
if (styles) footnoteOptions.styles = styles;
|
|
334
|
+
if (flowOpts.styles) footnoteOptions.styles = flowOpts.styles;
|
|
333
335
|
if (_theme !== void 0) footnoteOptions.theme = _theme;
|
|
334
336
|
footnoteOptions.fontAlternates = fontAlternates;
|
|
335
337
|
if (defaultTabStop !== void 0) footnoteOptions.defaultTabStopTwips = defaultTabStop;
|