@stll/folio-core 0.37.5 → 0.38.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/dist/ai-edits/apply.js +275 -88
- package/dist/ai-edits/clean-text.js +12 -1
- package/dist/ai-edits/headless.d.ts +110 -0
- package/dist/ai-edits/headless.js +569 -40
- package/dist/ai-edits/snapshot.d.ts +24 -1
- package/dist/ai-edits/snapshot.js +206 -9
- package/dist/ai-edits/table-geometry.d.ts +7 -7
- package/dist/ai-edits/table-geometry.js +43 -27
- package/dist/ai-edits/table-template.d.ts +2 -1
- package/dist/ai-edits/table-template.js +9 -3
- package/dist/ai-edits/types.d.ts +37 -15
- package/dist/compare/__fixtures__/body-sequence.d.ts +4 -0
- package/dist/compare/__fixtures__/body-sequence.js +5 -3
- package/dist/compare/compare.d.ts +26 -2
- package/dist/compare/compare.js +444 -16
- package/dist/compare/content-alignment.js +3 -2
- package/dist/compare/content-types.d.ts +34 -2
- package/dist/compare/content.d.ts +13 -10
- package/dist/compare/content.js +69 -23
- package/dist/compare/formatting.d.ts +4 -22
- package/dist/compare/formatting.js +8 -112
- package/dist/compare/inline-atom-resources.d.ts +6 -0
- package/dist/compare/inline-atom-resources.js +26 -0
- package/dist/compare/inline-atoms.d.ts +35 -0
- package/dist/compare/inline-atoms.js +383 -0
- package/dist/compare/inline-provenance.d.ts +36 -0
- package/dist/compare/inline-provenance.js +334 -0
- package/dist/compare/plan.d.ts +4 -1
- package/dist/compare/plan.js +32 -4
- package/dist/compare/scenario.d.ts +4 -6
- package/dist/compare/section-boundary-properties.d.ts +63 -0
- package/dist/compare/section-boundary-properties.js +235 -0
- package/dist/compare/style-resources.d.ts +30 -0
- package/dist/compare/style-resources.js +404 -0
- package/dist/compare/types.d.ts +50 -11
- package/dist/compare/types.js +3 -1
- package/dist/compare/verification.d.ts +3 -5
- package/dist/compare/verification.js +8 -39
- package/dist/compat/eigenpal.d.ts +4 -4
- package/dist/compat/eigenpal.js +3 -3
- package/dist/document-operations.d.ts +5 -3
- package/dist/document-operations.js +112 -5
- package/dist/docx/blockContentParser.js +14 -2
- package/dist/docx/drawingIdNormalization.js +43 -2
- package/dist/docx/drawingRelationships.d.ts +10 -0
- package/dist/docx/drawingRelationships.js +28 -0
- package/dist/docx/fieldParser.js +1 -1
- package/dist/docx/hyperlinkParser.js +3 -5
- package/dist/docx/imageRawXml.d.ts +8 -0
- package/dist/docx/imageRawXml.js +13 -0
- package/dist/docx/newImage.d.ts +2 -2
- package/dist/docx/newImage.js +3 -3
- package/dist/docx/numberingParser.js +30 -27
- package/dist/docx/paragraphParser.js +11 -4
- package/dist/docx/removeHeaderFooterParts.d.ts +14 -0
- package/dist/docx/removeHeaderFooterParts.js +87 -0
- package/dist/docx/rezip.d.ts +3 -1
- package/dist/docx/rezip.js +143 -41
- package/dist/docx/runParser.js +16 -5
- package/dist/docx/sectionParser.js +3 -0
- package/dist/docx/sectionReferenceHistory.d.ts +17 -0
- package/dist/docx/sectionReferenceHistory.js +59 -0
- package/dist/docx/selectiveSave.js +11 -31
- package/dist/docx/selectiveXmlPatch.d.ts +8 -1
- package/dist/docx/selectiveXmlPatch.js +62 -2
- package/dist/docx/serializer/paragraphSerializer.js +2 -0
- package/dist/docx/serializer/partNamespaces.d.ts +1 -1
- package/dist/docx/serializer/partNamespaces.js +4 -0
- package/dist/docx/serializer/runSerializer.js +2 -1
- package/dist/docx/serializer/sectionPropertiesSerializer.js +5 -2
- package/dist/docx/serializer/textFormattingSerializer.d.ts +1 -1
- package/dist/docx/serializer/textFormattingSerializer.js +3 -1
- package/dist/docx/tableParser.js +21 -11
- package/dist/docx/xmlParser.d.ts +10 -1
- package/dist/docx/xmlParser.js +23 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +3 -3
- package/dist/internal/compare/inline-presentation.d.ts +20 -0
- package/dist/internal/compare/inline-presentation.js +222 -0
- package/dist/internal/paragraphFormattingSerialization.d.ts +3 -1
- package/dist/internal/paragraphFormattingSerialization.js +8 -1
- package/dist/internal/sectionReferenceResolution.d.ts +21 -0
- package/dist/internal/sectionReferenceResolution.js +72 -0
- package/dist/layout-bridge/convert/toFlowBlocks.js +1 -0
- package/dist/markdown/renderRuns.js +1 -0
- package/dist/markdown/renderTable.js +1 -0
- package/dist/prosemirror/attrs/index.js +20 -1
- package/dist/prosemirror/commands/comments.d.ts +11 -1
- package/dist/prosemirror/commands/comments.js +68 -6
- package/dist/prosemirror/commands/propertyChangeScope.d.ts +9 -3
- package/dist/prosemirror/commands/propertyChangeScope.js +4 -10
- package/dist/prosemirror/conversion/fromProseDoc.js +16 -8
- package/dist/prosemirror/conversion/toProseDoc.js +16 -57
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +2 -0
- package/dist/prosemirror/extensions/marks/RunFormattingOverrideExtension.js +3 -0
- package/dist/prosemirror/imageCommit.js +7 -9
- package/dist/prosemirror/paragraphIndentation.d.ts +21 -0
- package/dist/prosemirror/paragraphIndentation.js +72 -0
- package/dist/prosemirror/plugins/documentNumbering.d.ts +3 -1
- package/dist/prosemirror/plugins/documentNumbering.js +7 -1
- package/dist/prosemirror/plugins/documentStyles.d.ts +3 -1
- package/dist/prosemirror/plugins/documentStyles.js +7 -1
- package/dist/prosemirror/rebaseParagraphRunFormatting.d.ts +3 -1
- package/dist/prosemirror/rebaseParagraphRunFormatting.js +2 -1
- package/dist/prosemirror/runFormattingInlineCarriers.d.ts +15 -2
- package/dist/prosemirror/runFormattingInlineCarriers.js +33 -3
- package/dist/prosemirror/runStyleFormatting.d.ts +15 -2
- package/dist/prosemirror/runStyleFormatting.js +76 -2
- package/dist/prosemirror/schema/marks.d.ts +3 -1
- package/dist/prosemirror/schema/marks.js +2 -0
- package/dist/prosemirror/schema/nodes.d.ts +3 -0
- package/dist/prosemirror/tableCellRevisionVisibility.d.ts +6 -0
- package/dist/prosemirror/tableCellRevisionVisibility.js +14 -0
- package/dist/prosemirror/trackedRunInlineAtoms.d.ts +1 -1
- package/dist/prosemirror/trackedRunInlineAtoms.js +1 -1
- package/dist/redline.js +15 -2
- package/dist/server.d.ts +2 -2
- package/dist/server.js +2 -2
- package/dist/version-comparison.d.ts +2 -0
- package/dist/version-comparison.js +7 -2
- package/package.json +2 -2
package/dist/compare/types.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FolioContentFormatRange } from "./content-types.js";
|
|
2
|
+
import { FolioAIBlockParagraphProperties, FolioAIBlockTableLocation, FolioAIEditSkippedOperation } from "../ai-edits/types.js";
|
|
2
3
|
import { WordDiffGranularity } from "../ai-edits/word-diff.js";
|
|
3
4
|
import { FolioDocumentStoryHandle, FolioNumberingLevel } from "../ai-edits/headless.js";
|
|
4
5
|
import { CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision } from "./verification.js";
|
|
5
6
|
//#region src/compare/types.d.ts
|
|
7
|
+
/** Revision encoding requested for the generated package. */
|
|
8
|
+
declare const COMPARE_REVISION_FORMATS: readonly ["word", "folio-exact"];
|
|
9
|
+
type CompareRevisionFormat = (typeof COMPARE_REVISION_FORMATS)[number];
|
|
6
10
|
/** Everything {@link compareDocx} needs; nothing it reads from the ambient clock. */
|
|
7
11
|
type CompareDocxOptions = {
|
|
8
12
|
/** Author recorded on every generated tracked change. */
|
|
@@ -34,6 +38,12 @@ type CompareDocxOptions = {
|
|
|
34
38
|
* one thing this call promises.
|
|
35
39
|
*/
|
|
36
40
|
granularity?: WordDiffGranularity;
|
|
41
|
+
/**
|
|
42
|
+
* Revision encoding: `"word"` (default) uses only standard OOXML revision
|
|
43
|
+
* markup. `"folio-exact"` preserves Folio-only review history that must be
|
|
44
|
+
* resolved before the package is handed to Word.
|
|
45
|
+
*/
|
|
46
|
+
revisionFormat?: CompareRevisionFormat;
|
|
37
47
|
};
|
|
38
48
|
/** Where one change sits in the base or target document. */
|
|
39
49
|
type CompareChangeLocation = {
|
|
@@ -41,13 +51,6 @@ type CompareChangeLocation = {
|
|
|
41
51
|
/** Innermost table cell, when the change is inside a table. */
|
|
42
52
|
cell?: FolioAIBlockTableLocation;
|
|
43
53
|
};
|
|
44
|
-
/** One run of characters whose inline formatting differs, in base-block offsets. */
|
|
45
|
-
type CompareFormatRange = {
|
|
46
|
-
startOffset: number;
|
|
47
|
-
endOffset: number;
|
|
48
|
-
/** Differing properties set to the target value; null removes a direct property. */
|
|
49
|
-
formatting: FolioAIInlineFormattingPatch;
|
|
50
|
-
};
|
|
51
54
|
/**
|
|
52
55
|
* One difference between the two documents, in target-document order with
|
|
53
56
|
* base-only entries slotted where they sat. Every variant is plain JSON, so a
|
|
@@ -119,13 +122,32 @@ type CompareChange = {
|
|
|
119
122
|
targetBlockId: string;
|
|
120
123
|
/** Only the properties that differ, set to the target document's value. */
|
|
121
124
|
properties: FolioAIBlockParagraphProperties;
|
|
125
|
+
} |
|
|
126
|
+
/** The body-level section properties changed. */
|
|
127
|
+
{
|
|
128
|
+
kind: "section-properties";
|
|
129
|
+
location: CompareChangeLocation;
|
|
130
|
+
} |
|
|
131
|
+
/** Full authored run properties changed beyond the neutral inline patch. */
|
|
132
|
+
{
|
|
133
|
+
kind: "run-format";
|
|
134
|
+
location: CompareChangeLocation;
|
|
135
|
+
targetBlockId: string;
|
|
136
|
+
text: string;
|
|
137
|
+
} |
|
|
138
|
+
/** A field, image, or page break changed while the surrounding text stayed the same. */
|
|
139
|
+
{
|
|
140
|
+
kind: "inline-atom";
|
|
141
|
+
location: CompareChangeLocation;
|
|
142
|
+
targetBlockId: string;
|
|
143
|
+
text: string;
|
|
122
144
|
} | {
|
|
123
145
|
kind: "format";
|
|
124
146
|
location: CompareChangeLocation;
|
|
125
147
|
baseBlockId: string;
|
|
126
148
|
targetBlockId: string;
|
|
127
149
|
text: string;
|
|
128
|
-
ranges: readonly
|
|
150
|
+
ranges: readonly FolioContentFormatRange[];
|
|
129
151
|
} | {
|
|
130
152
|
kind: "table-row-insert";
|
|
131
153
|
location: CompareChangeLocation;
|
|
@@ -211,6 +233,21 @@ type CompareUnsupportedPart = {
|
|
|
211
233
|
baseStory: FolioDocumentStoryHandle | null;
|
|
212
234
|
targetStory: FolioDocumentStoryHandle | null;
|
|
213
235
|
};
|
|
236
|
+
/**
|
|
237
|
+
* What a consumer can do with the returned revision package.
|
|
238
|
+
*
|
|
239
|
+
* Word can save standard OOXML revisions. It strips Folio's final-section
|
|
240
|
+
* reference history on an ordinary save, so a caller must resolve that history
|
|
241
|
+
* in Folio before handing a `requires-folio` package to Word when exactness
|
|
242
|
+
* matters.
|
|
243
|
+
*/
|
|
244
|
+
type CompareCompatibility = {
|
|
245
|
+
status: "standard-ooxml";
|
|
246
|
+
} | {
|
|
247
|
+
status: "requires-folio";
|
|
248
|
+
reasons: readonly [CompareFolioRequirement, ...CompareFolioRequirement[]];
|
|
249
|
+
};
|
|
250
|
+
type CompareFolioRequirement = "section-reference-history" | "terminal-table-carrier";
|
|
214
251
|
type CompareResult = {
|
|
215
252
|
/** The base package carrying the generated tracked changes. */
|
|
216
253
|
buffer: ArrayBuffer;
|
|
@@ -221,12 +258,14 @@ type CompareResult = {
|
|
|
221
258
|
* returned at all.
|
|
222
259
|
*/
|
|
223
260
|
verification: CompareVerification;
|
|
261
|
+
/** The consumer compatibility of the generated revision encoding. */
|
|
262
|
+
compatibility: CompareCompatibility;
|
|
224
263
|
unsupported: readonly CompareUnsupportedPart[];
|
|
225
264
|
};
|
|
226
265
|
declare const InvalidCompareDocxOptionsError_base: import("better-result").TaggedErrorClass<"InvalidCompareDocxOptionsError">;
|
|
227
266
|
declare class InvalidCompareDocxOptionsError extends InvalidCompareDocxOptionsError_base<{
|
|
228
267
|
message: string;
|
|
229
|
-
option: "timestamp";
|
|
268
|
+
option: "timestamp" | "revisionFormat";
|
|
230
269
|
receivedValue: unknown;
|
|
231
270
|
}> {}
|
|
232
271
|
declare const CompareDocxParseError_base: import("better-result").TaggedErrorClass<"CompareDocxParseError">;
|
|
@@ -296,4 +335,4 @@ declare class CompareDocxFinalParagraphMarkError extends CompareDocxFinalParagra
|
|
|
296
335
|
}> {}
|
|
297
336
|
type CompareDocxError = CompareDocxApplyError | CompareDocxFinalParagraphMarkError | CompareDocxOperationLimitError | CompareDocxParseError | CompareDocxRoundTripError | CompareDocxSerializeError | InvalidCompareDocxOptionsError;
|
|
298
337
|
//#endregion
|
|
299
|
-
export { COMPARE_UNSUPPORTED_REASONS, CompareChange, CompareChangeLocation, CompareDocxApplyError, CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError,
|
|
338
|
+
export { COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, CompareChange, CompareChangeLocation, CompareCompatibility, CompareDocxApplyError, CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, CompareFolioRequirement, CompareResult, CompareRevisionFormat, CompareUnsupportedPart, CompareUnsupportedReason, InvalidCompareDocxOptionsError };
|
package/dist/compare/types.js
CHANGED
|
@@ -4,6 +4,8 @@ import { TaggedError } from "better-result";
|
|
|
4
4
|
* Public vocabulary of {@link ./compare.compareDocx}: the change list, the
|
|
5
5
|
* options that pin its output, and the failures it reports.
|
|
6
6
|
*/
|
|
7
|
+
/** Revision encoding requested for the generated package. */
|
|
8
|
+
const COMPARE_REVISION_FORMATS = ["word", "folio-exact"];
|
|
7
9
|
/** Why a part of the package is absent from `changes`. */
|
|
8
10
|
const COMPARE_UNSUPPORTED_REASONS = Object.freeze([
|
|
9
11
|
"story-missing-in-base",
|
|
@@ -41,4 +43,4 @@ var CompareDocxSerializeError = class extends TaggedError("CompareDocxSerializeE
|
|
|
41
43
|
*/
|
|
42
44
|
var CompareDocxFinalParagraphMarkError = class extends TaggedError("CompareDocxFinalParagraphMarkError") {};
|
|
43
45
|
//#endregion
|
|
44
|
-
export { COMPARE_UNSUPPORTED_REASONS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, InvalidCompareDocxOptionsError };
|
|
46
|
+
export { COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, InvalidCompareDocxOptionsError };
|
|
@@ -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", "inline-structure", "table-geometry", "style", "list-level", "alignment", "spacing", "inline-formatting", "whitespace", "text"];
|
|
13
|
+
declare const COMPARE_VERIFICATION_CAUSES: readonly ["invisible-structure", "block-count", "container", "inline-structure", "table-geometry", "section-properties", "style", "list-level", "alignment", "spacing", "indentation", "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 = {
|
|
@@ -33,9 +33,7 @@ type CompareVerification = {
|
|
|
33
33
|
status: "unverified";
|
|
34
34
|
failures: readonly CompareVerificationFailure[];
|
|
35
35
|
};
|
|
36
|
-
|
|
37
|
-
declare const projectSupportedInlineFormatting: ({ text, previewRuns }: FolioAIBlock) => string;
|
|
38
|
-
type ProjectedBlock = Pick<FolioAIBlock, "text" | "table" | "styleId" | "listLevel" | "directAlignment" | "directSpacing" | "structuralBoundaries">;
|
|
36
|
+
type ProjectedBlock = Pick<FolioAIBlock, "text" | "table" | "styleId" | "listLevel" | "listReference" | "directAlignment" | "directSpacing" | "directIndentation" | "structuralBoundaries">;
|
|
39
37
|
type ClassifyOptions<T> = {
|
|
40
38
|
invariant: CompareVerificationInvariant;
|
|
41
39
|
story: FolioDocumentStoryHandle;
|
|
@@ -98,4 +96,4 @@ declare const revisedFinalParagraphMarks: (packageModel: unknown, { since }?: {
|
|
|
98
96
|
since?: number;
|
|
99
97
|
}) => FinalParagraphMarkRevision[];
|
|
100
98
|
//#endregion
|
|
101
|
-
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision, classifyGeometryMismatch, classifyProjectionMismatch,
|
|
99
|
+
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision, classifyGeometryMismatch, classifyProjectionMismatch, revisedFinalParagraphMarks };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { paragraphIndentationEqual } from "../prosemirror/paragraphIndentation.js";
|
|
1
2
|
import { paragraphSpacingEqual } from "../prosemirror/paragraphSpacing.js";
|
|
2
|
-
import { resolveColorToHex } from "../utils/colorResolver.js";
|
|
3
3
|
import { PARAGRAPH_MARK_CHANGE_KINDS } from "@stll/docx-core/model";
|
|
4
4
|
//#region src/compare/verification.ts
|
|
5
5
|
/**
|
|
@@ -8,7 +8,7 @@ import { PARAGRAPH_MARK_CHANGE_KINDS } from "@stll/docx-core/model";
|
|
|
8
8
|
* The check compares two block projections: what accepting the generated
|
|
9
9
|
* revisions leaves against the target, and what rejecting them leaves against
|
|
10
10
|
* the base. A projection carries each block's container, style, list level,
|
|
11
|
-
* direct alignment,
|
|
11
|
+
* direct alignment, spacing, indentation and text, so WHICH field diverged names
|
|
12
12
|
* which part of the pipeline lost the difference — and that is worth reporting
|
|
13
13
|
* as a typed cause rather than as one opaque "did not reproduce".
|
|
14
14
|
*
|
|
@@ -16,7 +16,6 @@ import { PARAGRAPH_MARK_CHANGE_KINDS } from "@stll/docx-core/model";
|
|
|
16
16
|
* Never a phrase of either document, because a caller may log it, put it in a
|
|
17
17
|
* report, or quote it in a review.
|
|
18
18
|
*/
|
|
19
|
-
const normalizeInlineFormattingColor = (color) => resolveColorToHex(color === void 0 ? void 0 : { rgb: color }, null);
|
|
20
19
|
/** The two directions of the round trip, each an invariant of its own. */
|
|
21
20
|
const COMPARE_VERIFICATION_INVARIANTS = Object.freeze(["accept-reproduces-target", "reject-reproduces-base"]);
|
|
22
21
|
/**
|
|
@@ -30,48 +29,16 @@ const COMPARE_VERIFICATION_CAUSES = Object.freeze([
|
|
|
30
29
|
"container",
|
|
31
30
|
"inline-structure",
|
|
32
31
|
"table-geometry",
|
|
32
|
+
"section-properties",
|
|
33
33
|
"style",
|
|
34
34
|
"list-level",
|
|
35
35
|
"alignment",
|
|
36
36
|
"spacing",
|
|
37
|
+
"indentation",
|
|
37
38
|
"inline-formatting",
|
|
38
39
|
"whitespace",
|
|
39
40
|
"text"
|
|
40
41
|
]);
|
|
41
|
-
const supportedInlineStyle = ({ bold, italic, underline, strike, fontFamily, fontSizePt, color, directFormatting }) => JSON.stringify([
|
|
42
|
-
bold === true,
|
|
43
|
-
italic === true,
|
|
44
|
-
underline === true,
|
|
45
|
-
strike === true,
|
|
46
|
-
fontFamily ?? null,
|
|
47
|
-
fontSizePt ?? null,
|
|
48
|
-
normalizeInlineFormattingColor(color) ?? null,
|
|
49
|
-
directFormatting?.bold ?? null,
|
|
50
|
-
directFormatting?.italic ?? null,
|
|
51
|
-
directFormatting?.underline ?? null,
|
|
52
|
-
directFormatting?.strike ?? null,
|
|
53
|
-
directFormatting?.fontFamily ?? null,
|
|
54
|
-
directFormatting?.fontSizePt ?? null,
|
|
55
|
-
normalizeInlineFormattingColor(directFormatting?.color ?? void 0) ?? null
|
|
56
|
-
]);
|
|
57
|
-
/** Effective supported formatting with equivalent adjacent runs normalized. */
|
|
58
|
-
const projectSupportedInlineFormatting = ({ text, previewRuns }) => {
|
|
59
|
-
const projected = [];
|
|
60
|
-
for (const run of previewRuns ?? [{ text }]) {
|
|
61
|
-
if (run.text.length === 0) continue;
|
|
62
|
-
const style = supportedInlineStyle(run);
|
|
63
|
-
const previous = projected.at(-1);
|
|
64
|
-
if (previous?.style === style) {
|
|
65
|
-
previous.length += run.text.length;
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
projected.push({
|
|
69
|
-
length: run.text.length,
|
|
70
|
-
style
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
return projected.map(({ length, style }) => `${String(length)}:${style}`).join(",");
|
|
74
|
-
};
|
|
75
42
|
const sameContainer = (left, right) => {
|
|
76
43
|
if (!left || !right) return left === right;
|
|
77
44
|
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;
|
|
@@ -88,7 +55,7 @@ const sameStructuralBoundaries = (left, right) => {
|
|
|
88
55
|
}
|
|
89
56
|
return true;
|
|
90
57
|
};
|
|
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;
|
|
58
|
+
const sameProjectedBlock = (left, right) => sameContainer(left.table, right.table) && sameStructuralBoundaries(left.structuralBoundaries, right.structuralBoundaries) && left.styleId === right.styleId && left.listLevel === right.listLevel && left.listReference?.numId === right.listReference?.numId && left.listReference?.level === right.listReference?.level && left.directAlignment === right.directAlignment && paragraphSpacingEqual(left.directSpacing, right.directSpacing) && paragraphIndentationEqual(left.directIndentation, right.directIndentation) && left.text === right.text;
|
|
92
59
|
const containerKind = (container) => container ? "cell" : "body";
|
|
93
60
|
const collapseWhitespace = (text) => text.replace(/\s+/gu, " ").trim();
|
|
94
61
|
const sameBlockProjection = (left, right) => left.length === right.length && left.every((entry, index) => {
|
|
@@ -206,8 +173,10 @@ const classifyProjectionMismatch = ({ invariant, story, actual, expected }) => {
|
|
|
206
173
|
if (!sameStructuralBoundaries(left.structuralBoundaries, right.structuralBoundaries)) return failure("inline-structure", `a block's zero-width inline structure does not match ${at} (${counts})`);
|
|
207
174
|
if (left.text === right.text && left.styleId !== right.styleId) return failure("style", `the paragraph style did not move ${at} (${counts})`);
|
|
208
175
|
if (left.text === right.text && left.listLevel !== right.listLevel) return failure("list-level", `the list level did not move ${at} (${counts})`);
|
|
176
|
+
if (left.text === right.text && (left.listReference?.numId !== right.listReference?.numId || left.listReference?.level !== right.listReference?.level)) return failure("list-level", `the numbering reference did not move ${at} (${counts})`);
|
|
209
177
|
if (left.text === right.text && left.directAlignment !== right.directAlignment) return failure("alignment", `the direct paragraph alignment did not move ${at} (${counts})`);
|
|
210
178
|
if (left.text === right.text && !paragraphSpacingEqual(left.directSpacing, right.directSpacing)) return failure("spacing", `the direct paragraph spacing did not move ${at} (${counts})`);
|
|
179
|
+
if (left.text === right.text && !paragraphIndentationEqual(left.directIndentation, right.directIndentation)) return failure("indentation", `the direct paragraph indentation did not move ${at} (${counts})`);
|
|
211
180
|
if (collapseWhitespace(left.text) === collapseWhitespace(right.text)) return failure("whitespace", `a block's text differs only in whitespace ${at} (${counts})`);
|
|
212
181
|
if (actual.length !== expected.length) return failure("block-count", `${counts}, first differing ${at}`);
|
|
213
182
|
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})`);
|
|
@@ -296,4 +265,4 @@ const revisedFinalParagraphMarks = (packageModel, { since = 0 } = {}) => {
|
|
|
296
265
|
return found;
|
|
297
266
|
};
|
|
298
267
|
//#endregion
|
|
299
|
-
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, classifyGeometryMismatch, classifyProjectionMismatch,
|
|
268
|
+
export { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, classifyGeometryMismatch, classifyProjectionMismatch, revisedFinalParagraphMarks };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { document_d_exports } from "../types/document.js";
|
|
2
|
-
import { FolioContentBlock, FolioContentContainerPathEntry, FolioContentIdStability, FolioContentInlineBooleanProperty, FolioContentInlineFormatting, FolioContentInlineFormattingPatch, FolioContentLineSpacingRule, FolioContentParagraphAlignment, FolioContentParagraphKind, FolioContentParagraphSpacing, FolioContentRun, FolioContentSnapshot, FolioContentTableLocation } from "../compare/content-types.js";
|
|
2
|
+
import { FolioContentBlock, FolioContentContainerPathEntry, FolioContentFormatRange, FolioContentIdStability, FolioContentInlineBooleanProperty, FolioContentInlineComparisonResult, FolioContentInlineFormatting, FolioContentInlineFormattingPatch, FolioContentLineSpacingRule, FolioContentParagraphAlignment, FolioContentParagraphKind, FolioContentParagraphSpacing, FolioContentRun, FolioContentSnapshot, FolioContentTableLocation } from "../compare/content-types.js";
|
|
3
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";
|
|
4
4
|
import { WORD_DIFF_GRANULARITIES, WordDiffGranularity, WordDiffNormalization, WordDiffOptions, WordDiffSegment, diffWordSegments } from "../ai-edits/word-diff.js";
|
|
5
5
|
import { FolioAIEditApplyOutcome, FolioRevisionStamp, FolioWordDiffOptions, applyFolioAIEditOperations } from "../ai-edits/apply.js";
|
|
@@ -10,9 +10,9 @@ import { AIBarStatus, AIChatMode, AICitation, AICitationSource, AIGenerateInput,
|
|
|
10
10
|
import { ApplyResult, applySuggestions } from "../ai-suggestions/apply.js";
|
|
11
11
|
import { ResolvedAnchor, isSuggestionStale, resolveSuggestionAnchor } from "../ai-suggestions/conflict.js";
|
|
12
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";
|
|
14
13
|
import { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareVerification, CompareVerificationCause, CompareVerificationFailure, CompareVerificationInvariant, FinalParagraphMarkRevision } from "../compare/verification.js";
|
|
15
|
-
import { COMPARE_UNSUPPORTED_REASONS, CompareChange, CompareChangeLocation, CompareDocxApplyError, CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError,
|
|
14
|
+
import { COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, CompareChange, CompareChangeLocation, CompareCompatibility, CompareDocxApplyError, CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, CompareFolioRequirement, CompareResult, CompareRevisionFormat, CompareUnsupportedPart, CompareUnsupportedReason, InvalidCompareDocxOptionsError } from "../compare/types.js";
|
|
15
|
+
import { CompareContentOptions, FOLIO_CONTENT_COMPARISON_LIMITS, FolioContentBlockProperty, FolioContentComparison, FolioContentComparisonError, FolioContentComparisonEvent, FolioContentComparisonLimit, FolioContentComparisonLimitError, FolioContentFormattingChange, FolioContentInlinePresentationProjectionError, FolioContentParagraphFormattingPatch, FolioContentStructuralChange, FolioContentTextSegment, InvalidFolioContentComparisonError, compareContent } from "../compare/content.js";
|
|
16
16
|
import { MAX_COMPARE_OPERATIONS, compareDocx } from "../compare/compare.js";
|
|
17
17
|
import { DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DocumentPreset, DocumentStyleSet } from "../style-sets/types.js";
|
|
18
18
|
import { CreateEmptyDocumentOptions, createEmptyDocument } from "../utils/createDocument.js";
|
|
@@ -39,4 +39,4 @@ import { getGoogleFontsEnabled, setEmbeddedFontFamilyMap, setGoogleFontsEnabled
|
|
|
39
39
|
import { DOCX_CONFORMANCE_CLASSES } from "../index.js";
|
|
40
40
|
type Document = document_d_exports.Document;
|
|
41
41
|
type DocxConformanceClass = document_d_exports.DocxConformanceClass;
|
|
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
|
|
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_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, type CompareChange, type CompareChangeLocation, type CompareCompatibility, type CompareContentOptions, CompareDocxApplyError, type CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, type CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, type CompareFolioRequirement, type CompareResult, type CompareRevisionFormat, 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 FolioContentInlineComparisonResult, type FolioContentInlineFormatting, type FolioContentInlineFormattingPatch, FolioContentInlinePresentationProjectionError, type FolioContentLineSpacingRule, type FolioContentParagraphAlignment, type FolioContentParagraphFormattingPatch, type FolioContentParagraphKind, 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,8 +6,8 @@ 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";
|
|
10
|
-
import { COMPARE_UNSUPPORTED_REASONS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, InvalidCompareDocxOptionsError } from "../compare/types.js";
|
|
9
|
+
import { FOLIO_CONTENT_COMPARISON_LIMITS, FolioContentComparisonLimitError, FolioContentInlinePresentationProjectionError, InvalidFolioContentComparisonError, compareContent } from "../compare/content.js";
|
|
10
|
+
import { COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, InvalidCompareDocxOptionsError } from "../compare/types.js";
|
|
11
11
|
import { COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS } from "../compare/verification.js";
|
|
12
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";
|
|
13
13
|
import { inspectDocxCompatibility } from "../docx/compatibility.js";
|
|
@@ -32,4 +32,4 @@ import { currentFolioBlockId, deriveBlockId, getFolioParaIdFromBlockId, isFolioB
|
|
|
32
32
|
import { createEmptyDocument } from "../utils/createDocument.js";
|
|
33
33
|
import { getGoogleFontsEnabled, setEmbeddedFontFamilyMap, setGoogleFontsEnabled } from "../utils/fontResolver.js";
|
|
34
34
|
import { mergeDocumentContent } from "../utils/mergeDocumentContent.js";
|
|
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 };
|
|
35
|
+
export { COMPARE_REVISION_FORMATS, 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, FolioContentInlinePresentationProjectionError, 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 };
|
|
@@ -7,6 +7,8 @@ declare const FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION: 1;
|
|
|
7
7
|
declare const FOLIO_PARAGRAPH_ALIGNMENT_VALUES: readonly ("left" | "center" | "right" | "both" | "distribute" | "mediumKashida" | "highKashida" | "lowKashida" | "thaiDistribute")[];
|
|
8
8
|
/** `w:spacing/@w:lineRule` values accepted by the operation contract. */
|
|
9
9
|
declare const FOLIO_LINE_SPACING_RULE_VALUES: readonly ("auto" | "exact" | "atLeast")[];
|
|
10
|
+
/** `w:br/@w:clear` values accepted on an authored hard page break. */
|
|
11
|
+
declare const FOLIO_PAGE_BREAK_CLEAR_VALUES: readonly ["none", "left", "right", "all"];
|
|
10
12
|
declare const FOLIO_DOCUMENT_OPERATION_TYPES: readonly ["replaceInBlock", "replaceRange", "commentOnRange", "formatRange", "insertAfterBlock", "insertBeforeBlock", "replaceBlock", "deleteBlock", "splitBlock", "mergeBlockWithNext", "setBlockParagraphProperties", "insertTable", "deleteTable", "commentOnBlock", "insertSignatureTable", "insertTableRow", "deleteTableRow", "insertTableColumn", "deleteTableColumn", "mergeTableCells", "splitTableCell"];
|
|
11
13
|
declare const FOLIO_DOCUMENT_OPERATION_MODES: readonly ["direct", "tracked-changes", "suggested"];
|
|
12
14
|
declare const FOLIO_DOCUMENT_OPERATION_STORIES: readonly ["main", "header", "footer", "footnote", "endnote"];
|
|
@@ -97,8 +99,8 @@ declare const FOLIO_DOCUMENT_OPERATION_KEYS_BY_TYPE: Readonly<{
|
|
|
97
99
|
readonly replaceRange: readonly ["id", "type", "range", "severity", "area", "precondition", "suggestionId", "replace", "comment"];
|
|
98
100
|
readonly commentOnRange: readonly ["id", "type", "range", "severity", "area", "precondition", "comment"];
|
|
99
101
|
readonly formatRange: readonly ["id", "type", "range", "severity", "area", "precondition", "suggestionId", "formatting"];
|
|
100
|
-
readonly insertAfterBlock: readonly ["id", "type", "blockId", "severity", "area", "precondition", "suggestionId", "text", "inheritFormatting", "alignment", "spacing", "listLevel", "moveId", "pageBreakBefore", "styleId", "comment"];
|
|
101
|
-
readonly insertBeforeBlock: readonly ["id", "type", "blockId", "severity", "area", "precondition", "suggestionId", "text", "inheritFormatting", "alignment", "spacing", "listLevel", "moveId", "pageBreakBefore", "styleId", "comment"];
|
|
102
|
+
readonly insertAfterBlock: readonly ["id", "type", "blockId", "severity", "area", "precondition", "suggestionId", "text", "inheritFormatting", "alignment", "spacing", "indentation", "lineBreakMode", "listLevel", "numbering", "moveId", "pageBreakBefore", "hardPageBreak", "styleId", "comment"];
|
|
103
|
+
readonly insertBeforeBlock: readonly ["id", "type", "blockId", "severity", "area", "precondition", "suggestionId", "text", "inheritFormatting", "alignment", "spacing", "indentation", "lineBreakMode", "listLevel", "numbering", "moveId", "pageBreakBefore", "hardPageBreak", "styleId", "comment"];
|
|
102
104
|
readonly replaceBlock: readonly ["id", "type", "blockId", "severity", "area", "precondition", "suggestionId", "text", "preserveFormatting", "styleId", "comment"];
|
|
103
105
|
readonly deleteBlock: readonly ["id", "type", "blockId", "severity", "area", "precondition", "suggestionId", "moveId", "comment"];
|
|
104
106
|
readonly splitBlock: readonly ["id", "type", "blockId", "severity", "area", "precondition", "suggestionId", "offset", "separator", "firstParagraphProperties", "secondParagraphProperties"];
|
|
@@ -282,4 +284,4 @@ type ApplyFolioDocumentOperationsOptions = {
|
|
|
282
284
|
};
|
|
283
285
|
declare const applyFolioDocumentOperations: ({ view, snapshot, batch, story, author, createCommentId, createUndoHandle, revisionStamp, wordDiff, tableTemplates }: ApplyFolioDocumentOperationsOptions) => FolioDocumentOperationResult;
|
|
284
286
|
//#endregion
|
|
285
|
-
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_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 };
|
|
287
|
+
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 };
|
|
@@ -7,6 +7,13 @@ const FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION = 1;
|
|
|
7
7
|
const FOLIO_PARAGRAPH_ALIGNMENT_VALUES = Object.freeze([...PARAGRAPH_ALIGNMENT_VALUES]);
|
|
8
8
|
/** `w:spacing/@w:lineRule` values accepted by the operation contract. */
|
|
9
9
|
const FOLIO_LINE_SPACING_RULE_VALUES = Object.freeze([...LINE_SPACING_RULE_VALUES]);
|
|
10
|
+
/** `w:br/@w:clear` values accepted on an authored hard page break. */
|
|
11
|
+
const FOLIO_PAGE_BREAK_CLEAR_VALUES = Object.freeze([
|
|
12
|
+
"none",
|
|
13
|
+
"left",
|
|
14
|
+
"right",
|
|
15
|
+
"all"
|
|
16
|
+
]);
|
|
10
17
|
const FOLIO_DOCUMENT_OPERATION_TYPES = Object.freeze([
|
|
11
18
|
"replaceInBlock",
|
|
12
19
|
"replaceRange",
|
|
@@ -242,6 +249,51 @@ const readClearableParagraphSpacing = ({ value, key, path }) => {
|
|
|
242
249
|
}
|
|
243
250
|
return spacing;
|
|
244
251
|
};
|
|
252
|
+
const PARAGRAPH_INDENTATION_KEYS = [
|
|
253
|
+
"indentLeft",
|
|
254
|
+
"indentRight",
|
|
255
|
+
"indentFirstLine",
|
|
256
|
+
"hangingIndent"
|
|
257
|
+
];
|
|
258
|
+
/** Read one complete direct `w:ind` cluster, preserving zero and false. */
|
|
259
|
+
const readClearableParagraphIndentation = ({ value, key, path }) => {
|
|
260
|
+
const candidate = value[key];
|
|
261
|
+
if (candidate === void 0 || candidate === null) return candidate;
|
|
262
|
+
const indentationPath = `${path}.${key}`;
|
|
263
|
+
if (!isPlainObject(candidate)) return invalidBatch(indentationPath, "expected an object or null when provided");
|
|
264
|
+
assertAllowedKeys(candidate, indentationPath, PARAGRAPH_INDENTATION_KEYS);
|
|
265
|
+
if (Object.keys(candidate).length === 0) return invalidBatch(indentationPath, "expected at least one indentation property");
|
|
266
|
+
const indentation = {};
|
|
267
|
+
for (const numberKey of [
|
|
268
|
+
"indentLeft",
|
|
269
|
+
"indentRight",
|
|
270
|
+
"indentFirstLine"
|
|
271
|
+
]) {
|
|
272
|
+
const number = candidate[numberKey];
|
|
273
|
+
if (number === void 0) continue;
|
|
274
|
+
if (typeof number !== "number" || !Number.isSafeInteger(number)) return invalidBatch(`${indentationPath}.${numberKey}`, "expected a safe integer when provided");
|
|
275
|
+
indentation[numberKey] = number;
|
|
276
|
+
}
|
|
277
|
+
const hangingIndent = candidate["hangingIndent"];
|
|
278
|
+
if (hangingIndent !== void 0) {
|
|
279
|
+
if (typeof hangingIndent !== "boolean") return invalidBatch(`${indentationPath}.hangingIndent`, "expected a boolean when provided");
|
|
280
|
+
indentation.hangingIndent = hangingIndent;
|
|
281
|
+
}
|
|
282
|
+
return indentation;
|
|
283
|
+
};
|
|
284
|
+
const readClearableNumbering = ({ value, key, path }) => {
|
|
285
|
+
const candidate = value[key];
|
|
286
|
+
if (candidate === void 0 || candidate === null) return candidate;
|
|
287
|
+
const numberingPath = `${path}.${key}`;
|
|
288
|
+
if (!isPlainObject(candidate)) return invalidBatch(numberingPath, "expected an object or null when provided");
|
|
289
|
+
assertAllowedKeys(candidate, numberingPath, ["numId", "level"]);
|
|
290
|
+
const numId = readNonNegativeInteger(candidate, "numId", numberingPath);
|
|
291
|
+
if (numId === 0) return invalidBatch(`${numberingPath}.numId`, "expected a positive integer");
|
|
292
|
+
return {
|
|
293
|
+
numId,
|
|
294
|
+
level: readNonNegativeInteger(candidate, "level", numberingPath)
|
|
295
|
+
};
|
|
296
|
+
};
|
|
245
297
|
/**
|
|
246
298
|
* A rectangular grid of cell texts. Rectangular because a table whose rows
|
|
247
299
|
* hold different cell counts is not a table any consumer can lay out, and the
|
|
@@ -269,11 +321,18 @@ const readParagraphProperties = ({ value, key, path }) => {
|
|
|
269
321
|
assertAllowedKeys(candidate, propertiesPath, [
|
|
270
322
|
"styleId",
|
|
271
323
|
"listLevel",
|
|
324
|
+
"numbering",
|
|
272
325
|
"alignment",
|
|
273
|
-
"spacing"
|
|
326
|
+
"spacing",
|
|
327
|
+
"indentation"
|
|
274
328
|
]);
|
|
275
329
|
const styleId = candidate["styleId"] === null ? null : readOptionalString(candidate, "styleId", propertiesPath);
|
|
276
330
|
const listLevel = readClearableNonNegativeInteger(candidate, "listLevel", propertiesPath);
|
|
331
|
+
const numbering = readClearableNumbering({
|
|
332
|
+
value: candidate,
|
|
333
|
+
key: "numbering",
|
|
334
|
+
path: propertiesPath
|
|
335
|
+
});
|
|
277
336
|
const alignment = readClearableParagraphAlignment({
|
|
278
337
|
value: candidate,
|
|
279
338
|
key: "alignment",
|
|
@@ -284,12 +343,19 @@ const readParagraphProperties = ({ value, key, path }) => {
|
|
|
284
343
|
key: "spacing",
|
|
285
344
|
path: propertiesPath
|
|
286
345
|
});
|
|
287
|
-
|
|
346
|
+
const indentation = readClearableParagraphIndentation({
|
|
347
|
+
value: candidate,
|
|
348
|
+
key: "indentation",
|
|
349
|
+
path: propertiesPath
|
|
350
|
+
});
|
|
351
|
+
if (styleId === void 0 && listLevel === void 0 && numbering === void 0 && alignment === void 0 && spacing === void 0 && indentation === void 0) return invalidBatch(propertiesPath, "expected at least one property to set");
|
|
288
352
|
return {
|
|
289
353
|
...styleId !== void 0 && { styleId },
|
|
290
354
|
...listLevel !== void 0 && { listLevel },
|
|
355
|
+
...numbering !== void 0 && { numbering },
|
|
291
356
|
...alignment !== void 0 && { alignment },
|
|
292
|
-
...spacing !== void 0 && { spacing }
|
|
357
|
+
...spacing !== void 0 && { spacing },
|
|
358
|
+
...indentation !== void 0 && { indentation }
|
|
293
359
|
};
|
|
294
360
|
};
|
|
295
361
|
const readTextRange = (value, path) => {
|
|
@@ -430,9 +496,13 @@ const FOLIO_DOCUMENT_OPERATION_KEYS_BY_TYPE = Object.freeze({
|
|
|
430
496
|
"inheritFormatting",
|
|
431
497
|
"alignment",
|
|
432
498
|
"spacing",
|
|
499
|
+
"indentation",
|
|
500
|
+
"lineBreakMode",
|
|
433
501
|
"listLevel",
|
|
502
|
+
"numbering",
|
|
434
503
|
"moveId",
|
|
435
504
|
"pageBreakBefore",
|
|
505
|
+
"hardPageBreak",
|
|
436
506
|
"styleId",
|
|
437
507
|
"comment"
|
|
438
508
|
],
|
|
@@ -442,9 +512,13 @@ const FOLIO_DOCUMENT_OPERATION_KEYS_BY_TYPE = Object.freeze({
|
|
|
442
512
|
"inheritFormatting",
|
|
443
513
|
"alignment",
|
|
444
514
|
"spacing",
|
|
515
|
+
"indentation",
|
|
516
|
+
"lineBreakMode",
|
|
445
517
|
"listLevel",
|
|
518
|
+
"numbering",
|
|
446
519
|
"moveId",
|
|
447
520
|
"pageBreakBefore",
|
|
521
|
+
"hardPageBreak",
|
|
448
522
|
"styleId",
|
|
449
523
|
"comment"
|
|
450
524
|
],
|
|
@@ -529,6 +603,18 @@ const parseSignatureParties = (value, path) => {
|
|
|
529
603
|
return parsedParty;
|
|
530
604
|
});
|
|
531
605
|
};
|
|
606
|
+
const readOptionalHardPageBreak = (value, path) => {
|
|
607
|
+
const candidate = value["hardPageBreak"];
|
|
608
|
+
if (candidate === void 0) return;
|
|
609
|
+
if (!isPlainObject(candidate)) return invalidBatch(`${path}.hardPageBreak`, "expected an object when provided");
|
|
610
|
+
const hardPageBreakPath = `${path}.hardPageBreak`;
|
|
611
|
+
assertAllowedKeys(candidate, hardPageBreakPath, ["clear"]);
|
|
612
|
+
const clear = candidate["clear"];
|
|
613
|
+
if (clear === void 0) return {};
|
|
614
|
+
const validatedClear = FOLIO_PAGE_BREAK_CLEAR_VALUES.find((supported) => supported === clear);
|
|
615
|
+
if (validatedClear === void 0) return invalidBatch(`${hardPageBreakPath}.clear`, "expected a supported break clear value");
|
|
616
|
+
return { clear: validatedClear };
|
|
617
|
+
};
|
|
532
618
|
const parseDocumentOperation = (value, index) => {
|
|
533
619
|
const path = `$.operations[${index}]`;
|
|
534
620
|
if (!isPlainObject(value)) return invalidBatch(path, "expected an object");
|
|
@@ -650,9 +736,15 @@ const parseDocumentOperation = (value, index) => {
|
|
|
650
736
|
if (type === "insertAfterBlock" || type === "insertBeforeBlock") {
|
|
651
737
|
const inheritFormatting = readOptionalBoolean(value, "inheritFormatting", path);
|
|
652
738
|
const pageBreakBefore = readOptionalBoolean(value, "pageBreakBefore", path);
|
|
739
|
+
const hardPageBreak = readOptionalHardPageBreak(value, path);
|
|
653
740
|
const styleId = value["styleId"] === null ? null : readOptionalString(value, "styleId", path);
|
|
654
741
|
const moveId = readOptionalString(value, "moveId", path);
|
|
655
742
|
const listLevel = readClearableNonNegativeInteger(value, "listLevel", path);
|
|
743
|
+
const numbering = readClearableNumbering({
|
|
744
|
+
value,
|
|
745
|
+
key: "numbering",
|
|
746
|
+
path
|
|
747
|
+
});
|
|
656
748
|
const alignment = readClearableParagraphAlignment({
|
|
657
749
|
value,
|
|
658
750
|
key: "alignment",
|
|
@@ -663,18 +755,33 @@ const parseDocumentOperation = (value, index) => {
|
|
|
663
755
|
key: "spacing",
|
|
664
756
|
path
|
|
665
757
|
});
|
|
758
|
+
const indentation = readClearableParagraphIndentation({
|
|
759
|
+
value,
|
|
760
|
+
key: "indentation",
|
|
761
|
+
path
|
|
762
|
+
});
|
|
763
|
+
const lineBreakMode = value["lineBreakMode"];
|
|
764
|
+
if (lineBreakMode !== void 0 && lineBreakMode !== "paragraph" && lineBreakMode !== "inline") return invalidBatch(`${path}.lineBreakMode`, "expected \"paragraph\" or \"inline\" when provided");
|
|
765
|
+
const text = readString(value, "text", path);
|
|
766
|
+
if (hardPageBreak !== void 0 && text.length > 0) return invalidBatch(`${path}.text`, "expected empty text with hardPageBreak");
|
|
767
|
+
if (hardPageBreak !== void 0 && pageBreakBefore !== void 0) return invalidBatch(`${path}.pageBreakBefore`, "cannot combine hardPageBreak with pageBreakBefore");
|
|
768
|
+
if (hardPageBreak !== void 0 && lineBreakMode !== void 0) return invalidBatch(`${path}.lineBreakMode`, "cannot combine hardPageBreak with lineBreakMode");
|
|
666
769
|
return {
|
|
667
770
|
...operationMeta,
|
|
668
771
|
id,
|
|
669
772
|
type,
|
|
670
773
|
blockId,
|
|
671
|
-
text
|
|
774
|
+
text,
|
|
672
775
|
...inheritFormatting !== void 0 && { inheritFormatting },
|
|
673
776
|
...alignment !== void 0 && { alignment },
|
|
674
777
|
...spacing !== void 0 && { spacing },
|
|
778
|
+
...indentation !== void 0 && { indentation },
|
|
779
|
+
...lineBreakMode !== void 0 && { lineBreakMode },
|
|
675
780
|
...listLevel !== void 0 && { listLevel },
|
|
781
|
+
...numbering !== void 0 && { numbering },
|
|
676
782
|
...moveId !== void 0 && { moveId },
|
|
677
783
|
...pageBreakBefore !== void 0 && { pageBreakBefore },
|
|
784
|
+
...hardPageBreak !== void 0 && { hardPageBreak },
|
|
678
785
|
...styleId !== void 0 && { styleId },
|
|
679
786
|
...comment !== void 0 && { comment }
|
|
680
787
|
};
|
|
@@ -1103,4 +1210,4 @@ const applyFolioDocumentOperations = ({ view, snapshot, batch, story = "main", a
|
|
|
1103
1210
|
};
|
|
1104
1211
|
};
|
|
1105
1212
|
//#endregion
|
|
1106
|
-
export { 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_PARAGRAPH_ALIGNMENT_VALUES, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch };
|
|
1213
|
+
export { 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, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch };
|