@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.
Files changed (222) hide show
  1. package/dist/ai-edits/__fixtures__/paragraphs.d.ts +17 -0
  2. package/dist/ai-edits/__fixtures__/paragraphs.js +33 -0
  3. package/dist/ai-edits/apply.d.ts +49 -3
  4. package/dist/ai-edits/apply.js +649 -85
  5. package/dist/ai-edits/blockRange.d.ts +7 -3
  6. package/dist/ai-edits/blockRange.js +14 -6
  7. package/dist/ai-edits/headless.d.ts +39 -5
  8. package/dist/ai-edits/headless.js +76 -17
  9. package/dist/ai-edits/index.d.ts +6 -6
  10. package/dist/ai-edits/index.js +3 -3
  11. package/dist/ai-edits/read.d.ts +4 -0
  12. package/dist/ai-edits/read.js +30 -6
  13. package/dist/ai-edits/scoped-reading.js +4 -3
  14. package/dist/ai-edits/snapshot.d.ts +42 -2
  15. package/dist/ai-edits/snapshot.js +127 -62
  16. package/dist/ai-edits/table-row-column-mutations.d.ts +24 -1
  17. package/dist/ai-edits/table-row-column-mutations.js +98 -6
  18. package/dist/ai-edits/table-targets.d.ts +12 -3
  19. package/dist/ai-edits/table-targets.js +15 -5
  20. package/dist/ai-edits/types.d.ts +219 -15
  21. package/dist/ai-edits/word-diff.d.ts +54 -11
  22. package/dist/ai-edits/word-diff.js +221 -61
  23. package/dist/compare/__fixtures__/body-sequence.d.ts +33 -0
  24. package/dist/compare/__fixtures__/body-sequence.js +67 -0
  25. package/dist/compare/__fixtures__/nested-table.d.ts +16 -0
  26. package/dist/compare/__fixtures__/nested-table.js +50 -0
  27. package/dist/compare/__fixtures__/numbered-list.d.ts +34 -0
  28. package/dist/compare/__fixtures__/numbered-list.js +85 -0
  29. package/dist/compare/column-alignment.d.ts +27 -0
  30. package/dist/compare/column-alignment.js +162 -0
  31. package/dist/compare/compare.d.ts +107 -0
  32. package/dist/compare/compare.js +406 -0
  33. package/dist/compare/formatting.d.ts +29 -0
  34. package/dist/compare/formatting.js +84 -0
  35. package/dist/compare/plan.d.ts +22 -0
  36. package/dist/compare/plan.js +1059 -0
  37. package/dist/compare/reproducible-package.d.ts +17 -0
  38. package/dist/compare/reproducible-package.js +30 -0
  39. package/dist/compare/scenario.d.ts +77 -0
  40. package/dist/compare/scenario.js +263 -0
  41. package/dist/compare/types.d.ts +282 -0
  42. package/dist/compare/types.js +32 -0
  43. package/dist/compare/verification.d.ts +55 -0
  44. package/dist/compare/verification.js +146 -0
  45. package/dist/compat/eigenpal.d.ts +9 -6
  46. package/dist/compat/eigenpal.js +6 -3
  47. package/dist/controller/layoutPipeline.d.ts +13 -0
  48. package/dist/controller/layoutPipeline.js +15 -1
  49. package/dist/display-list/build/buildContext.d.ts +39 -0
  50. package/dist/display-list/build/buildContext.js +31 -0
  51. package/dist/display-list/build/buildDisplayList.d.ts +79 -0
  52. package/dist/display-list/build/buildDisplayList.js +283 -0
  53. package/dist/display-list/build/colors.d.ts +20 -0
  54. package/dist/display-list/build/colors.js +136 -0
  55. package/dist/display-list/build/floatingImages.d.ts +24 -0
  56. package/dist/display-list/build/floatingImages.js +41 -0
  57. package/dist/display-list/build/fontTable.d.ts +31 -0
  58. package/dist/display-list/build/fontTable.js +97 -0
  59. package/dist/display-list/build/furniture.d.ts +86 -0
  60. package/dist/display-list/build/furniture.js +98 -0
  61. package/dist/display-list/build/glyphs.d.ts +55 -0
  62. package/dist/display-list/build/glyphs.js +103 -0
  63. package/dist/display-list/build/headerFooterPrimitives.d.ts +17 -0
  64. package/dist/display-list/build/headerFooterPrimitives.js +40 -0
  65. package/dist/display-list/build/imagePrimitives.d.ts +35 -0
  66. package/dist/display-list/build/imagePrimitives.js +264 -0
  67. package/dist/display-list/build/pageBorderPrimitives.d.ts +23 -0
  68. package/dist/display-list/build/pageBorderPrimitives.js +111 -0
  69. package/dist/display-list/build/pageFurniture.d.ts +35 -0
  70. package/dist/display-list/build/pageFurniture.js +141 -0
  71. package/dist/display-list/build/paragraphPrimitives.d.ts +19 -0
  72. package/dist/display-list/build/paragraphPrimitives.js +819 -0
  73. package/dist/display-list/build/regions.d.ts +46 -0
  74. package/dist/display-list/build/regions.js +56 -0
  75. package/dist/display-list/build/storyPrimitives.d.ts +29 -0
  76. package/dist/display-list/build/storyPrimitives.js +279 -0
  77. package/dist/display-list/build/strokes.d.ts +19 -0
  78. package/dist/display-list/build/strokes.js +78 -0
  79. package/dist/display-list/build/tablePrimitives.d.ts +38 -0
  80. package/dist/display-list/build/tablePrimitives.js +409 -0
  81. package/dist/display-list/build/textBoxPrimitives.d.ts +14 -0
  82. package/dist/display-list/build/textBoxPrimitives.js +129 -0
  83. package/dist/display-list/build/textDecorations.d.ts +29 -0
  84. package/dist/display-list/build/textDecorations.js +29 -0
  85. package/dist/display-list/build/unsupported.d.ts +57 -0
  86. package/dist/display-list/build/unsupported.js +0 -0
  87. package/dist/display-list/build/watermarkPrimitives.d.ts +15 -0
  88. package/dist/display-list/build/watermarkPrimitives.js +128 -0
  89. package/dist/display-list/dom/renderDisplayListToDom.d.ts +26 -0
  90. package/dist/display-list/dom/renderDisplayListToDom.js +620 -0
  91. package/dist/display-list/editor/displayListPagePainter.d.ts +22 -0
  92. package/dist/display-list/editor/displayListPagePainter.js +63 -0
  93. package/dist/display-list/editor/pageRenderer.d.ts +24 -0
  94. package/dist/display-list/editor/pageRenderer.js +36 -0
  95. package/dist/display-list/primitives.d.ts +95 -0
  96. package/dist/display-list/primitives.js +127 -0
  97. package/dist/display-list/types.d.ts +472 -0
  98. package/dist/display-list/types.js +0 -0
  99. package/dist/document-operations.d.ts +39 -8
  100. package/dist/document-operations.js +169 -16
  101. package/dist/document-stories.d.ts +16 -0
  102. package/dist/document-stories.js +48 -4
  103. package/dist/docx/packageParts.d.ts +35 -0
  104. package/dist/docx/packageParts.js +120 -0
  105. package/dist/docx/paragraphParser.js +22 -22
  106. package/dist/docx/paragraphTraversal.js +1 -1
  107. package/dist/docx/renderedPageBreakNormalization.js +3 -1
  108. package/dist/docx/revisionIdNormalization.d.ts +13 -0
  109. package/dist/docx/revisionIdNormalization.js +103 -0
  110. package/dist/docx/rezip.js +26 -17
  111. package/dist/docx/selectiveSave.js +2 -2
  112. package/dist/docx/serializer/commentSerializer.js +6 -1
  113. package/dist/docx/serializer/paragraphSerializer.js +33 -4
  114. package/dist/docx/serializer/runSerializer.js +11 -10
  115. package/dist/docx/serializer/tableSerializer.js +2 -1
  116. package/dist/docx/server/applyDocxXmlPatchProposal.js +1 -1
  117. package/dist/docx/server/createBilingualDocx.js +3 -2
  118. package/dist/docx/streamingXmlParser.d.ts +13 -1
  119. package/dist/docx/streamingXmlParser.js +49 -11
  120. package/dist/docx/unzip.d.ts +1 -2
  121. package/dist/docx/unzip.js +25 -6
  122. package/dist/docx/xmlParser.d.ts +3 -1
  123. package/dist/docx/xmlParser.js +33 -27
  124. package/dist/export-pdf.d.ts +43 -0
  125. package/dist/export-pdf.js +98 -0
  126. package/dist/fonts/headlessMeasure.d.ts +76 -0
  127. package/dist/fonts/headlessMeasure.js +0 -0
  128. package/dist/fonts/sfnt/parse.d.ts +51 -0
  129. package/dist/fonts/sfnt/parse.js +525 -0
  130. package/dist/fonts/sfnt/subset.d.ts +20 -0
  131. package/dist/fonts/sfnt/subset.js +350 -0
  132. package/dist/fonts/sfnt/tables.d.ts +88 -0
  133. package/dist/fonts/sfnt/tables.js +131 -0
  134. package/dist/fonts/sfnt/woff.d.ts +14 -0
  135. package/dist/fonts/sfnt/woff.js +163 -0
  136. package/dist/generated/text_shaper.js +324 -0
  137. package/dist/generated/text_shaper_bg.wasm +0 -0
  138. package/dist/headless-layout.d.ts +75 -0
  139. package/dist/headless-layout.js +350 -0
  140. package/dist/index.d.ts +9 -6
  141. package/dist/index.js +6 -3
  142. package/dist/layout-bridge/convert/footnoteLayout.d.ts +1 -0
  143. package/dist/layout-bridge/convert/footnoteLayout.js +1 -0
  144. package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -0
  145. package/dist/layout-bridge/convert/headerFooterLayout.js +2 -0
  146. package/dist/layout-bridge/convert/toFlowBlocks.d.ts +3 -1
  147. package/dist/layout-bridge/convert/toFlowBlocks.js +2 -0
  148. package/dist/layout-engine/measure/advanceComposition.d.ts +62 -0
  149. package/dist/layout-engine/measure/advanceComposition.js +148 -0
  150. package/dist/layout-engine/measure/cache.d.ts +2 -0
  151. package/dist/layout-engine/measure/measureContainer.js +13 -0
  152. package/dist/layout-engine/measure/measureParagraph.js +1 -2
  153. package/dist/layout-engine/measure/measureTypes.d.ts +12 -0
  154. package/dist/layout-engine/measure/tableInlinePlacement.d.ts +3 -2
  155. package/dist/layout-engine/measure/tableInlinePlacement.js +14 -1
  156. package/dist/layout-engine/tableIndentCompatibility.d.ts +5 -0
  157. package/dist/layout-engine/tableIndentCompatibility.js +15 -0
  158. package/dist/layout-engine/types.d.ts +8 -0
  159. package/dist/layout-painter/renderPage.d.ts +29 -1
  160. package/dist/layout-painter/renderPage.js +47 -19
  161. package/dist/layout-painter/renderParagraph.d.ts +21 -2
  162. package/dist/layout-painter/renderParagraph.js +1 -1
  163. package/dist/layout-painter/renderTable.js +37 -4
  164. package/dist/managers/editorShortcuts.d.ts +33 -1
  165. package/dist/managers/editorShortcuts.js +20 -1
  166. package/dist/markdown/renderRuns.js +7 -2
  167. package/dist/markdown/renderTable.js +5 -1
  168. package/dist/model.d.ts +3 -3
  169. package/dist/model.js +2 -2
  170. package/dist/pdf/contentStream.d.ts +73 -0
  171. package/dist/pdf/contentStream.js +143 -0
  172. package/dist/pdf/fonts.d.ts +96 -0
  173. package/dist/pdf/fonts.js +593 -0
  174. package/dist/pdf/images.d.ts +28 -0
  175. package/dist/pdf/images.js +439 -0
  176. package/dist/pdf/objects.d.ts +93 -0
  177. package/dist/pdf/objects.js +237 -0
  178. package/dist/pdf/pageSpace.d.ts +43 -0
  179. package/dist/pdf/pageSpace.js +57 -0
  180. package/dist/pdf/paint.d.ts +32 -0
  181. package/dist/pdf/paint.js +442 -0
  182. package/dist/pdf/writePdf.d.ts +56 -0
  183. package/dist/pdf/writePdf.js +345 -0
  184. package/dist/prosemirror/commands/comments.js +91 -6
  185. package/dist/prosemirror/conversion/fromProseDoc.js +41 -7
  186. package/dist/prosemirror/conversion/toProseDoc.js +41 -4
  187. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +15 -2
  188. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +35 -6
  189. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +2 -2
  190. package/dist/prosemirror/extensions/features/pasteCleanup.js +4 -3
  191. package/dist/prosemirror/extensions/nodes/BookmarkBoundaryExtension.d.ts +3 -1
  192. package/dist/prosemirror/extensions/nodes/BookmarkBoundaryExtension.js +5 -3
  193. package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.d.ts +7 -1
  194. package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.js +9 -3
  195. package/dist/prosemirror/extensions/nodes/TableExtension.js +56 -39
  196. package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.d.ts +3 -1
  197. package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.js +5 -3
  198. package/dist/prosemirror/plugins/suggestionMode.js +1 -0
  199. package/dist/prosemirror/revisionCarriers.js +19 -2
  200. package/dist/prosemirror/utils/extractTrackedChanges.d.ts +2 -2
  201. package/dist/prosemirror/utils/extractTrackedChanges.js +59 -23
  202. package/dist/prosemirror/validation.js +55 -27
  203. package/dist/prosemirror/zeroWidthAnchors.d.ts +10 -0
  204. package/dist/prosemirror/zeroWidthAnchors.js +23 -0
  205. package/dist/redline.js +12 -79
  206. package/dist/server.d.ts +3 -3
  207. package/dist/server.js +2 -2
  208. package/dist/shaping/placeRun.d.ts +51 -0
  209. package/dist/shaping/placeRun.js +84 -0
  210. package/dist/shaping/shaper.d.ts +92 -0
  211. package/dist/shaping/shaper.js +102 -0
  212. package/dist/types/block-id.d.ts +18 -2
  213. package/dist/types/block-id.js +49 -5
  214. package/dist/types/content.d.ts +2 -2
  215. package/dist/utils/clipboard.js +4 -3
  216. package/dist/utils/fontResolver.js +183 -0
  217. package/dist/utils/htmlComments.d.ts +17 -0
  218. package/dist/utils/htmlComments.js +22 -0
  219. package/dist/utils/scriptSegments.d.ts +12 -1
  220. package/dist/utils/scriptSegments.js +17 -1
  221. package/dist/version-comparison.d.ts +1 -1
  222. 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 };