@stll/folio-core 0.32.2 → 0.33.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/__fixtures__/paragraphs.d.ts +17 -0
- package/dist/ai-edits/__fixtures__/paragraphs.js +33 -0
- package/dist/ai-edits/apply.d.ts +49 -3
- package/dist/ai-edits/apply.js +649 -85
- package/dist/ai-edits/blockRange.d.ts +7 -3
- package/dist/ai-edits/blockRange.js +14 -6
- package/dist/ai-edits/headless.d.ts +39 -5
- package/dist/ai-edits/headless.js +76 -17
- package/dist/ai-edits/index.d.ts +6 -6
- package/dist/ai-edits/index.js +3 -3
- package/dist/ai-edits/read.d.ts +4 -0
- package/dist/ai-edits/read.js +30 -6
- package/dist/ai-edits/scoped-reading.js +4 -3
- package/dist/ai-edits/snapshot.d.ts +42 -2
- package/dist/ai-edits/snapshot.js +127 -62
- package/dist/ai-edits/table-row-column-mutations.d.ts +24 -1
- package/dist/ai-edits/table-row-column-mutations.js +98 -6
- package/dist/ai-edits/table-targets.d.ts +12 -3
- package/dist/ai-edits/table-targets.js +15 -5
- package/dist/ai-edits/types.d.ts +219 -15
- package/dist/ai-edits/word-diff.d.ts +54 -11
- package/dist/ai-edits/word-diff.js +221 -61
- package/dist/compare/__fixtures__/body-sequence.d.ts +33 -0
- package/dist/compare/__fixtures__/body-sequence.js +67 -0
- package/dist/compare/__fixtures__/nested-table.d.ts +16 -0
- package/dist/compare/__fixtures__/nested-table.js +50 -0
- package/dist/compare/__fixtures__/numbered-list.d.ts +34 -0
- package/dist/compare/__fixtures__/numbered-list.js +85 -0
- package/dist/compare/column-alignment.d.ts +27 -0
- package/dist/compare/column-alignment.js +162 -0
- package/dist/compare/compare.d.ts +107 -0
- package/dist/compare/compare.js +406 -0
- package/dist/compare/formatting.d.ts +29 -0
- package/dist/compare/formatting.js +84 -0
- package/dist/compare/plan.d.ts +22 -0
- package/dist/compare/plan.js +1059 -0
- package/dist/compare/reproducible-package.d.ts +17 -0
- package/dist/compare/reproducible-package.js +30 -0
- package/dist/compare/scenario.d.ts +77 -0
- package/dist/compare/scenario.js +263 -0
- package/dist/compare/types.d.ts +282 -0
- package/dist/compare/types.js +32 -0
- package/dist/compare/verification.d.ts +55 -0
- package/dist/compare/verification.js +146 -0
- package/dist/compat/eigenpal.d.ts +9 -6
- package/dist/compat/eigenpal.js +6 -3
- package/dist/controller/layoutPipeline.d.ts +13 -0
- package/dist/controller/layoutPipeline.js +15 -1
- package/dist/display-list/build/buildContext.d.ts +39 -0
- package/dist/display-list/build/buildContext.js +31 -0
- package/dist/display-list/build/buildDisplayList.d.ts +79 -0
- package/dist/display-list/build/buildDisplayList.js +283 -0
- package/dist/display-list/build/colors.d.ts +20 -0
- package/dist/display-list/build/colors.js +136 -0
- package/dist/display-list/build/floatingImages.d.ts +24 -0
- package/dist/display-list/build/floatingImages.js +41 -0
- package/dist/display-list/build/fontTable.d.ts +31 -0
- package/dist/display-list/build/fontTable.js +97 -0
- package/dist/display-list/build/furniture.d.ts +86 -0
- package/dist/display-list/build/furniture.js +98 -0
- package/dist/display-list/build/glyphs.d.ts +55 -0
- package/dist/display-list/build/glyphs.js +103 -0
- package/dist/display-list/build/headerFooterPrimitives.d.ts +17 -0
- package/dist/display-list/build/headerFooterPrimitives.js +40 -0
- package/dist/display-list/build/imagePrimitives.d.ts +35 -0
- package/dist/display-list/build/imagePrimitives.js +264 -0
- package/dist/display-list/build/pageBorderPrimitives.d.ts +23 -0
- package/dist/display-list/build/pageBorderPrimitives.js +111 -0
- package/dist/display-list/build/pageFurniture.d.ts +35 -0
- package/dist/display-list/build/pageFurniture.js +141 -0
- package/dist/display-list/build/paragraphPrimitives.d.ts +19 -0
- package/dist/display-list/build/paragraphPrimitives.js +819 -0
- package/dist/display-list/build/regions.d.ts +46 -0
- package/dist/display-list/build/regions.js +56 -0
- package/dist/display-list/build/storyPrimitives.d.ts +29 -0
- package/dist/display-list/build/storyPrimitives.js +279 -0
- package/dist/display-list/build/strokes.d.ts +19 -0
- package/dist/display-list/build/strokes.js +78 -0
- package/dist/display-list/build/tablePrimitives.d.ts +38 -0
- package/dist/display-list/build/tablePrimitives.js +409 -0
- package/dist/display-list/build/textBoxPrimitives.d.ts +14 -0
- package/dist/display-list/build/textBoxPrimitives.js +129 -0
- package/dist/display-list/build/textDecorations.d.ts +29 -0
- package/dist/display-list/build/textDecorations.js +29 -0
- package/dist/display-list/build/unsupported.d.ts +57 -0
- package/dist/display-list/build/unsupported.js +0 -0
- package/dist/display-list/build/watermarkPrimitives.d.ts +15 -0
- package/dist/display-list/build/watermarkPrimitives.js +128 -0
- package/dist/display-list/dom/renderDisplayListToDom.d.ts +26 -0
- package/dist/display-list/dom/renderDisplayListToDom.js +620 -0
- package/dist/display-list/editor/displayListPagePainter.d.ts +22 -0
- package/dist/display-list/editor/displayListPagePainter.js +63 -0
- package/dist/display-list/editor/pageRenderer.d.ts +24 -0
- package/dist/display-list/editor/pageRenderer.js +36 -0
- package/dist/display-list/primitives.d.ts +95 -0
- package/dist/display-list/primitives.js +127 -0
- package/dist/display-list/types.d.ts +472 -0
- package/dist/display-list/types.js +0 -0
- package/dist/document-operations.d.ts +39 -8
- package/dist/document-operations.js +169 -16
- package/dist/document-stories.d.ts +16 -0
- package/dist/document-stories.js +48 -4
- package/dist/docx/packageParts.d.ts +35 -0
- package/dist/docx/packageParts.js +120 -0
- package/dist/docx/paragraphParser.js +22 -22
- package/dist/docx/paragraphTraversal.js +1 -1
- package/dist/docx/renderedPageBreakNormalization.js +3 -1
- package/dist/docx/revisionIdNormalization.d.ts +13 -0
- package/dist/docx/revisionIdNormalization.js +103 -0
- package/dist/docx/rezip.js +26 -17
- package/dist/docx/selectiveSave.js +2 -2
- package/dist/docx/serializer/commentSerializer.js +6 -1
- package/dist/docx/serializer/paragraphSerializer.js +33 -4
- package/dist/docx/serializer/runSerializer.js +11 -10
- package/dist/docx/serializer/tableSerializer.js +2 -1
- package/dist/docx/server/applyDocxXmlPatchProposal.js +1 -1
- package/dist/docx/server/createBilingualDocx.js +3 -2
- package/dist/docx/streamingXmlParser.d.ts +13 -1
- package/dist/docx/streamingXmlParser.js +49 -11
- package/dist/docx/unzip.d.ts +1 -2
- package/dist/docx/unzip.js +25 -6
- package/dist/docx/xmlParser.d.ts +3 -1
- package/dist/docx/xmlParser.js +33 -27
- package/dist/export-pdf.d.ts +43 -0
- package/dist/export-pdf.js +98 -0
- package/dist/fonts/headlessMeasure.d.ts +76 -0
- package/dist/fonts/headlessMeasure.js +0 -0
- package/dist/fonts/sfnt/parse.d.ts +51 -0
- package/dist/fonts/sfnt/parse.js +525 -0
- package/dist/fonts/sfnt/subset.d.ts +20 -0
- package/dist/fonts/sfnt/subset.js +350 -0
- package/dist/fonts/sfnt/tables.d.ts +88 -0
- package/dist/fonts/sfnt/tables.js +131 -0
- package/dist/fonts/sfnt/woff.d.ts +14 -0
- package/dist/fonts/sfnt/woff.js +163 -0
- package/dist/generated/text_shaper.js +324 -0
- package/dist/generated/text_shaper_bg.wasm +0 -0
- package/dist/headless-layout.d.ts +75 -0
- package/dist/headless-layout.js +350 -0
- package/dist/index.d.ts +9 -6
- package/dist/index.js +6 -3
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +1 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +1 -0
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -0
- package/dist/layout-bridge/convert/headerFooterLayout.js +2 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +3 -1
- package/dist/layout-bridge/convert/toFlowBlocks.js +2 -0
- package/dist/layout-engine/measure/advanceComposition.d.ts +62 -0
- package/dist/layout-engine/measure/advanceComposition.js +148 -0
- package/dist/layout-engine/measure/cache.d.ts +2 -0
- package/dist/layout-engine/measure/measureContainer.js +13 -0
- package/dist/layout-engine/measure/measureParagraph.js +1 -2
- package/dist/layout-engine/measure/measureTypes.d.ts +12 -0
- package/dist/layout-engine/measure/tableInlinePlacement.d.ts +3 -2
- package/dist/layout-engine/measure/tableInlinePlacement.js +14 -1
- package/dist/layout-engine/tableIndentCompatibility.d.ts +5 -0
- package/dist/layout-engine/tableIndentCompatibility.js +15 -0
- package/dist/layout-engine/types.d.ts +8 -0
- package/dist/layout-painter/renderPage.d.ts +29 -1
- package/dist/layout-painter/renderPage.js +47 -19
- package/dist/layout-painter/renderParagraph.d.ts +21 -2
- package/dist/layout-painter/renderParagraph.js +1 -1
- package/dist/layout-painter/renderTable.js +37 -4
- package/dist/managers/editorShortcuts.d.ts +33 -1
- package/dist/managers/editorShortcuts.js +20 -1
- package/dist/markdown/renderRuns.js +7 -2
- package/dist/markdown/renderTable.js +5 -1
- package/dist/model.d.ts +3 -3
- package/dist/model.js +2 -2
- package/dist/pdf/contentStream.d.ts +73 -0
- package/dist/pdf/contentStream.js +143 -0
- package/dist/pdf/fonts.d.ts +96 -0
- package/dist/pdf/fonts.js +593 -0
- package/dist/pdf/images.d.ts +28 -0
- package/dist/pdf/images.js +439 -0
- package/dist/pdf/objects.d.ts +93 -0
- package/dist/pdf/objects.js +237 -0
- package/dist/pdf/pageSpace.d.ts +43 -0
- package/dist/pdf/pageSpace.js +57 -0
- package/dist/pdf/paint.d.ts +32 -0
- package/dist/pdf/paint.js +442 -0
- package/dist/pdf/writePdf.d.ts +56 -0
- package/dist/pdf/writePdf.js +345 -0
- package/dist/prosemirror/commands/comments.js +91 -6
- package/dist/prosemirror/conversion/fromProseDoc.js +41 -7
- package/dist/prosemirror/conversion/toProseDoc.js +41 -4
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +15 -2
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +35 -6
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +2 -2
- package/dist/prosemirror/extensions/features/pasteCleanup.js +4 -3
- package/dist/prosemirror/extensions/nodes/BookmarkBoundaryExtension.d.ts +3 -1
- package/dist/prosemirror/extensions/nodes/BookmarkBoundaryExtension.js +5 -3
- package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.d.ts +7 -1
- package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.js +9 -3
- package/dist/prosemirror/extensions/nodes/TableExtension.js +56 -39
- package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.d.ts +3 -1
- package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.js +5 -3
- package/dist/prosemirror/plugins/suggestionMode.js +1 -0
- package/dist/prosemirror/revisionCarriers.js +19 -2
- package/dist/prosemirror/utils/extractTrackedChanges.d.ts +2 -2
- package/dist/prosemirror/utils/extractTrackedChanges.js +59 -23
- package/dist/prosemirror/validation.js +55 -27
- package/dist/prosemirror/zeroWidthAnchors.d.ts +10 -0
- package/dist/prosemirror/zeroWidthAnchors.js +23 -0
- package/dist/redline.js +12 -79
- package/dist/server.d.ts +3 -3
- package/dist/server.js +2 -2
- package/dist/shaping/placeRun.d.ts +51 -0
- package/dist/shaping/placeRun.js +84 -0
- package/dist/shaping/shaper.d.ts +92 -0
- package/dist/shaping/shaper.js +102 -0
- package/dist/types/block-id.d.ts +18 -2
- package/dist/types/block-id.js +49 -5
- package/dist/types/content.d.ts +2 -2
- package/dist/utils/clipboard.js +4 -3
- package/dist/utils/fontResolver.js +183 -0
- package/dist/utils/htmlComments.d.ts +17 -0
- package/dist/utils/htmlComments.js +22 -0
- package/dist/utils/scriptSegments.d.ts +12 -1
- package/dist/utils/scriptSegments.js +17 -1
- package/dist/version-comparison.d.ts +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { pxToPt } from "../../layout-engine/measure/measureHelpers.js";
|
|
2
|
+
import { getFontMetrics } from "../../layout-engine/measure/measureProvider.js";
|
|
3
|
+
import { parseDisplayColor } from "./colors.js";
|
|
4
|
+
import { buildGlyphs, glyphRunText } from "./glyphs.js";
|
|
5
|
+
import { UNSUPPORTED_CONSTRUCT } from "./unsupported.js";
|
|
6
|
+
//#region src/display-list/build/watermarkPrimitives.ts
|
|
7
|
+
/**
|
|
8
|
+
* The document watermark, behind the page's content.
|
|
9
|
+
*
|
|
10
|
+
* Word stores it as a VML shape in a header part; the painter reproduces it
|
|
11
|
+
* with CSS rather than mirroring `v:textpath`, and this reproduces the same
|
|
12
|
+
* result as primitives: a text watermark is one rotated, translucent run
|
|
13
|
+
* centred on the page; a picture watermark is the image scaled to fit a
|
|
14
|
+
* fraction of the page and washed out.
|
|
15
|
+
*
|
|
16
|
+
* A picture watermark needs its bytes. The relationship id → asset mapping
|
|
17
|
+
* belongs to the package layer, so a caller that cannot resolve it hands over
|
|
18
|
+
* no source and the watermark is reported rather than dropped: a page missing
|
|
19
|
+
* its watermark and a page that never had one must not look alike.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* `renderWatermark.ts`: Word's text-watermark preset is ~144px bold silver at
|
|
23
|
+
* half opacity, rotated bottom-left to top-right.
|
|
24
|
+
*/
|
|
25
|
+
const TEXT_FONT_SIZE_PX = 144;
|
|
26
|
+
const TEXT_DEFAULT_FONT = "Calibri";
|
|
27
|
+
const TEXT_DEFAULT_COLOR = "#C0C0C0";
|
|
28
|
+
const TEXT_DEFAULT_OPACITY = .5;
|
|
29
|
+
const TEXT_DIAGONAL_DEGREES = -45;
|
|
30
|
+
const PICTURE_NATIVE_SCALE = 1;
|
|
31
|
+
const PICTURE_WASHOUT_OPACITY = .4;
|
|
32
|
+
const paintTextWatermark = (watermark, page, context) => {
|
|
33
|
+
if (watermark.text.length === 0) return [];
|
|
34
|
+
const style = {
|
|
35
|
+
fontFamily: watermark.font ?? TEXT_DEFAULT_FONT,
|
|
36
|
+
fontSize: pxToPt(TEXT_FONT_SIZE_PX),
|
|
37
|
+
bold: true
|
|
38
|
+
};
|
|
39
|
+
const glyphs = buildGlyphs({
|
|
40
|
+
text: watermark.text,
|
|
41
|
+
style,
|
|
42
|
+
allCaps: false,
|
|
43
|
+
spaceDeltaPx: 0,
|
|
44
|
+
collapsed: false
|
|
45
|
+
});
|
|
46
|
+
const authored = watermark.color === void 0 || watermark.color === "auto" ? TEXT_DEFAULT_COLOR : `#${watermark.color}`;
|
|
47
|
+
const color = parseDisplayColor(authored);
|
|
48
|
+
if (!color) {
|
|
49
|
+
context.unsupported.report(UNSUPPORTED_CONSTRUCT.unresolvedColor, context.pageIndex, `watermark colour ${authored}`);
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
const centerXPx = page.size.w / 2;
|
|
53
|
+
const centerYPx = page.size.h / 2;
|
|
54
|
+
const metrics = getFontMetrics(style);
|
|
55
|
+
const baselineYPx = centerYPx - (metrics.fontBoxAscent + metrics.fontBoxDescent) / 2 + metrics.fontBoxAscent;
|
|
56
|
+
return [{
|
|
57
|
+
kind: "rotateGroup",
|
|
58
|
+
degrees: watermark.diagonal === false ? 0 : TEXT_DIAGONAL_DEGREES,
|
|
59
|
+
originXPx: centerXPx,
|
|
60
|
+
originYPx: centerYPx,
|
|
61
|
+
children: [{
|
|
62
|
+
kind: "opacityGroup",
|
|
63
|
+
opacity: watermark.opacity ?? TEXT_DEFAULT_OPACITY,
|
|
64
|
+
children: [{
|
|
65
|
+
kind: "glyphRun",
|
|
66
|
+
font: context.fonts.intern({
|
|
67
|
+
fontFamily: style.fontFamily ?? TEXT_DEFAULT_FONT,
|
|
68
|
+
bold: true,
|
|
69
|
+
measureStyle: style
|
|
70
|
+
}),
|
|
71
|
+
fontSizePx: TEXT_FONT_SIZE_PX,
|
|
72
|
+
color,
|
|
73
|
+
xPx: centerXPx - glyphs.widthPx / 2,
|
|
74
|
+
baselineYPx,
|
|
75
|
+
...glyphRunText(glyphs),
|
|
76
|
+
direction: "ltr"
|
|
77
|
+
}]
|
|
78
|
+
}]
|
|
79
|
+
}];
|
|
80
|
+
};
|
|
81
|
+
/** `max-width`/`max-height` at `scale` of the page, `object-fit: contain`. */
|
|
82
|
+
const containedRect = (page, scale, pixelWidth, pixelHeight) => {
|
|
83
|
+
const boxWidthPx = page.size.w * scale;
|
|
84
|
+
const boxHeightPx = page.size.h * scale;
|
|
85
|
+
if (pixelWidth <= 0 || pixelHeight <= 0) return {
|
|
86
|
+
xPx: 0,
|
|
87
|
+
yPx: 0,
|
|
88
|
+
widthPx: boxWidthPx,
|
|
89
|
+
heightPx: boxHeightPx
|
|
90
|
+
};
|
|
91
|
+
const fit = Math.min(boxWidthPx / pixelWidth, boxHeightPx / pixelHeight);
|
|
92
|
+
const widthPx = pixelWidth * fit;
|
|
93
|
+
const heightPx = pixelHeight * fit;
|
|
94
|
+
return {
|
|
95
|
+
xPx: (page.size.w - widthPx) / 2,
|
|
96
|
+
yPx: (page.size.h - heightPx) / 2,
|
|
97
|
+
widthPx,
|
|
98
|
+
heightPx
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
const paintPictureWatermark = (watermark, page, imageSrc, context) => {
|
|
102
|
+
if (imageSrc === void 0) {
|
|
103
|
+
context.unsupported.report(UNSUPPORTED_CONSTRUCT.watermark, context.pageIndex, `picture watermark ${watermark.imageRId} has no resolved image source: the relationship id resolves in the package layer, not in the builder`);
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
const ref = context.images.intern(imageSrc);
|
|
107
|
+
if (ref === void 0) {
|
|
108
|
+
const reason = context.images.failureFor(imageSrc) ?? "image could not be decoded";
|
|
109
|
+
context.unsupported.report(reason.includes("not PNG or JPEG") ? UNSUPPORTED_CONSTRUCT.imageFormat : UNSUPPORTED_CONSTRUCT.imageSource, context.pageIndex, `picture watermark: ${reason}`);
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
const source = context.images.snapshot()[ref];
|
|
113
|
+
return [{
|
|
114
|
+
kind: "image",
|
|
115
|
+
image: ref,
|
|
116
|
+
rect: containedRect(page, watermark.scale ?? PICTURE_NATIVE_SCALE, source?.pixelWidth ?? 0, source?.pixelHeight ?? 0),
|
|
117
|
+
opacity: watermark.washout === false ? 1 : PICTURE_WASHOUT_OPACITY
|
|
118
|
+
}];
|
|
119
|
+
};
|
|
120
|
+
const paintWatermark = ({ page, watermark, imageSrc, context }) => {
|
|
121
|
+
switch (watermark.kind) {
|
|
122
|
+
case "text": return paintTextWatermark(watermark, page, context);
|
|
123
|
+
case "picture": return paintPictureWatermark(watermark, page, imageSrc, context);
|
|
124
|
+
default: return [];
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
//#endregion
|
|
128
|
+
export { paintWatermark };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DisplayColor, DisplayFontFace, DisplayImageSource, DisplayList, DisplayPage } from "../types.js";
|
|
2
|
+
//#region src/display-list/dom/renderDisplayListToDom.d.ts
|
|
3
|
+
type RenderDisplayListOptions = {
|
|
4
|
+
/** Document to create elements in. */
|
|
5
|
+
readonly doc: Document;
|
|
6
|
+
/** Page background, painted before any primitive. */
|
|
7
|
+
readonly pageBackground?: DisplayColor;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A page's glyph runs and images index tables that live on the list, and an
|
|
11
|
+
* internal link addresses a page by its index in the same list, so rendering
|
|
12
|
+
* one page needs all three passed alongside it.
|
|
13
|
+
*/
|
|
14
|
+
type RenderDisplayPageOptions = RenderDisplayListOptions & {
|
|
15
|
+
/** `DisplayList.fonts`. */
|
|
16
|
+
readonly fonts: readonly DisplayFontFace[];
|
|
17
|
+
/** `DisplayList.images`. */
|
|
18
|
+
readonly images: readonly DisplayImageSource[];
|
|
19
|
+
/** The page's index in `DisplayList.pages`, which names its anchor. */
|
|
20
|
+
readonly pageIndex: number;
|
|
21
|
+
};
|
|
22
|
+
declare const renderDisplayPageToDom: (page: DisplayPage, options: RenderDisplayPageOptions) => HTMLElement;
|
|
23
|
+
/** One `div.layout-page` per display page, in page order. */
|
|
24
|
+
declare const renderDisplayListToDom: (list: DisplayList, options: RenderDisplayListOptions) => HTMLElement[];
|
|
25
|
+
//#endregion
|
|
26
|
+
export { RenderDisplayListOptions, RenderDisplayPageOptions, renderDisplayListToDom, renderDisplayPageToDom };
|