@pyreon/document 0.14.0 → 0.15.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 (57) hide show
  1. package/lib/analysis/index.js.html +1 -1
  2. package/lib/{confluence-Bd3ua1Ut.js → confluence-Db_NpGvv.js} +2 -2
  3. package/lib/{csv-COrS4qdy.js → csv-I0OmxyUq.js} +1 -1
  4. package/lib/{discord-BLUnkEh9.js → discord-CO2LO9iv.js} +2 -2
  5. package/lib/{docx-D_wt3a7y.js → docx-CwLhLA6_.js} +3 -3
  6. package/lib/{email-D0bbfWq4.js → email-euU37d-3.js} +2 -2
  7. package/lib/{google-chat-CkKCBUWC.js → google-chat-CkO1akkX.js} +2 -2
  8. package/lib/{html-DtsbNARB.js → html-CQAgtR1o.js} +2 -2
  9. package/lib/index.js +36 -36
  10. package/lib/{markdown-BYkSLplL.js → markdown-DV0jLhLG.js} +2 -2
  11. package/lib/{notion-iG2C5bEY.js → notion-BJOgw53C.js} +2 -2
  12. package/lib/{pdf-NApJCU6I.js → pdf-D5Pitjpc.js} +3 -5
  13. package/lib/{pptx-DLhvPIMn.js → pptx-CLDls4po.js} +3 -3
  14. package/lib/{sanitize-O_3j1mNJ.js → sanitize-C3_11gZA.js} +1 -1
  15. package/lib/{slack-BI3EQwYm.js → slack-BRuNDD9v.js} +2 -2
  16. package/lib/{svg-uFnPWNCU.js → svg-B4vksv2i.js} +2 -2
  17. package/lib/{teams-Cwz9lce0.js → teams-CFNa5umk.js} +2 -2
  18. package/lib/{telegram-gYFqyMXb.js → telegram-C4lbO-VY.js} +2 -2
  19. package/lib/{text-l1XNXBOC.js → text-C08DaebN.js} +1 -1
  20. package/lib/{whatsapp-CjSGoOKx.js → whatsapp-D8sjWdfY.js} +2 -2
  21. package/lib/{xlsx-D8XqTBoR.js → xlsx-CTiQRiu4.js} +2 -2
  22. package/package.json +7 -6
  23. package/src/manifest.ts +2 -2
  24. package/src/tests/document.test.ts +18 -18
  25. package/src/tests/manifest-snapshot.test.ts +3 -3
  26. package/lib/chunk-B4VCYm32.js +0 -48
  27. package/lib/confluence-Bd3ua1Ut.js.map +0 -1
  28. package/lib/csv-COrS4qdy.js.map +0 -1
  29. package/lib/discord-BLUnkEh9.js.map +0 -1
  30. package/lib/dist-dSdlKzJ8.js +0 -20185
  31. package/lib/dist-dSdlKzJ8.js.map +0 -1
  32. package/lib/docx-D_wt3a7y.js.map +0 -1
  33. package/lib/email-D0bbfWq4.js.map +0 -1
  34. package/lib/exceljs-Bj6LWg5N.js +0 -34391
  35. package/lib/exceljs-Bj6LWg5N.js.map +0 -1
  36. package/lib/google-chat-CkKCBUWC.js.map +0 -1
  37. package/lib/html-DtsbNARB.js.map +0 -1
  38. package/lib/index.js.map +0 -1
  39. package/lib/markdown-BYkSLplL.js.map +0 -1
  40. package/lib/notion-iG2C5bEY.js.map +0 -1
  41. package/lib/pdf-NApJCU6I.js.map +0 -1
  42. package/lib/pdfmake-DPyTSQ91.js +0 -55517
  43. package/lib/pdfmake-DPyTSQ91.js.map +0 -1
  44. package/lib/pptx-DLhvPIMn.js.map +0 -1
  45. package/lib/pptxgen.es-CFrPYgTY.js +0 -5699
  46. package/lib/pptxgen.es-CFrPYgTY.js.map +0 -1
  47. package/lib/sanitize-O_3j1mNJ.js.map +0 -1
  48. package/lib/slack-BI3EQwYm.js.map +0 -1
  49. package/lib/svg-uFnPWNCU.js.map +0 -1
  50. package/lib/teams-Cwz9lce0.js.map +0 -1
  51. package/lib/telegram-gYFqyMXb.js.map +0 -1
  52. package/lib/text-l1XNXBOC.js.map +0 -1
  53. package/lib/types/index.d.ts.map +0 -1
  54. package/lib/vfs_fonts-BSrGAfkk.js +0 -19
  55. package/lib/vfs_fonts-BSrGAfkk.js.map +0 -1
  56. package/lib/whatsapp-CjSGoOKx.js.map +0 -1
  57. package/lib/xlsx-D8XqTBoR.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/confluence.ts
4
4
  /**
@@ -191,4 +191,4 @@ const confluenceRenderer = { async render(node, _options) {
191
191
 
192
192
  //#endregion
193
193
  export { confluenceRenderer };
194
- //# sourceMappingURL=confluence-Bd3ua1Ut.js.map
194
+ //# sourceMappingURL=confluence-Db_NpGvv.js.map
@@ -29,4 +29,4 @@ const csvRenderer = { async render(node, _options) {
29
29
 
30
30
  //#endregion
31
31
  export { csvRenderer };
32
- //# sourceMappingURL=csv-COrS4qdy.js.map
32
+ //# sourceMappingURL=csv-I0OmxyUq.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/discord.ts
4
4
  /**
@@ -133,4 +133,4 @@ const discordRenderer = { async render(node, _options) {
133
133
 
134
134
  //#endregion
135
135
  export { discordRenderer };
136
- //# sourceMappingURL=discord-BLUnkEh9.js.map
136
+ //# sourceMappingURL=discord-CO2LO9iv.js.map
@@ -1,4 +1,4 @@
1
- import { a as sanitizeXmlColor, n as sanitizeHref } from "./sanitize-O_3j1mNJ.js";
1
+ import { a as sanitizeXmlColor, n as sanitizeHref } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/docx.ts
4
4
  /**
@@ -292,7 +292,7 @@ function renderButtonOrQuote(ctx, n) {
292
292
  const docxRenderer = { async render(node, _options) {
293
293
  let docx;
294
294
  try {
295
- docx = await import("./dist-dSdlKzJ8.js");
295
+ docx = await import("docx");
296
296
  } catch {
297
297
  throw new Error("[@pyreon/document] DOCX renderer requires \"docx\" package. Install it: bun add docx");
298
298
  }
@@ -461,4 +461,4 @@ const docxRenderer = { async render(node, _options) {
461
461
 
462
462
  //#endregion
463
463
  export { docxRenderer };
464
- //# sourceMappingURL=docx-D_wt3a7y.js.map
464
+ //# sourceMappingURL=docx-CwLhLA6_.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/email.ts
4
4
  /**
@@ -130,4 +130,4 @@ const emailRenderer = { async render(node, _options) {
130
130
 
131
131
  //#endregion
132
132
  export { emailRenderer };
133
- //# sourceMappingURL=email-D0bbfWq4.js.map
133
+ //# sourceMappingURL=email-euU37d-3.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/google-chat.ts
4
4
  /**
@@ -124,4 +124,4 @@ const googleChatRenderer = { async render(node, _options) {
124
124
 
125
125
  //#endregion
126
126
  export { googleChatRenderer };
127
- //# sourceMappingURL=google-chat-CkKCBUWC.js.map
127
+ //# sourceMappingURL=google-chat-CkO1akkX.js.map
@@ -1,4 +1,4 @@
1
- import { i as sanitizeStyle, n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-O_3j1mNJ.js";
1
+ import { i as sanitizeStyle, n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/html.ts
4
4
  function escapeHtml(str) {
@@ -150,4 +150,4 @@ const htmlRenderer = { async render(node, options) {
150
150
 
151
151
  //#endregion
152
152
  export { htmlRenderer };
153
- //# sourceMappingURL=html-DtsbNARB.js.map
153
+ //# sourceMappingURL=html-CQAgtR1o.js.map
package/lib/index.js CHANGED
@@ -24,24 +24,24 @@ function registerRenderer(format, renderer) {
24
24
  function unregisterRenderer(format) {
25
25
  renderers.delete(format);
26
26
  }
27
- registerRenderer("html", () => import("./html-DtsbNARB.js").then((m) => m.htmlRenderer));
28
- registerRenderer("email", () => import("./email-D0bbfWq4.js").then((m) => m.emailRenderer));
29
- registerRenderer("md", () => import("./markdown-BYkSLplL.js").then((m) => m.markdownRenderer));
30
- registerRenderer("text", () => import("./text-l1XNXBOC.js").then((m) => m.textRenderer));
31
- registerRenderer("csv", () => import("./csv-COrS4qdy.js").then((m) => m.csvRenderer));
32
- registerRenderer("pdf", () => import("./pdf-NApJCU6I.js").then((m) => m.pdfRenderer));
33
- registerRenderer("docx", () => import("./docx-D_wt3a7y.js").then((m) => m.docxRenderer));
34
- registerRenderer("xlsx", () => import("./xlsx-D8XqTBoR.js").then((m) => m.xlsxRenderer));
35
- registerRenderer("pptx", () => import("./pptx-DLhvPIMn.js").then((m) => m.pptxRenderer));
36
- registerRenderer("slack", () => import("./slack-BI3EQwYm.js").then((m) => m.slackRenderer));
37
- registerRenderer("svg", () => import("./svg-uFnPWNCU.js").then((m) => m.svgRenderer));
38
- registerRenderer("teams", () => import("./teams-Cwz9lce0.js").then((m) => m.teamsRenderer));
39
- registerRenderer("discord", () => import("./discord-BLUnkEh9.js").then((m) => m.discordRenderer));
40
- registerRenderer("telegram", () => import("./telegram-gYFqyMXb.js").then((m) => m.telegramRenderer));
41
- registerRenderer("notion", () => import("./notion-iG2C5bEY.js").then((m) => m.notionRenderer));
42
- registerRenderer("confluence", () => import("./confluence-Bd3ua1Ut.js").then((m) => m.confluenceRenderer));
43
- registerRenderer("whatsapp", () => import("./whatsapp-CjSGoOKx.js").then((m) => m.whatsappRenderer));
44
- registerRenderer("google-chat", () => import("./google-chat-CkKCBUWC.js").then((m) => m.googleChatRenderer));
27
+ registerRenderer("html", () => import("./html-CQAgtR1o.js").then((m) => m.htmlRenderer));
28
+ registerRenderer("email", () => import("./email-euU37d-3.js").then((m) => m.emailRenderer));
29
+ registerRenderer("md", () => import("./markdown-DV0jLhLG.js").then((m) => m.markdownRenderer));
30
+ registerRenderer("text", () => import("./text-C08DaebN.js").then((m) => m.textRenderer));
31
+ registerRenderer("csv", () => import("./csv-I0OmxyUq.js").then((m) => m.csvRenderer));
32
+ registerRenderer("pdf", () => import("./pdf-D5Pitjpc.js").then((m) => m.pdfRenderer));
33
+ registerRenderer("docx", () => import("./docx-CwLhLA6_.js").then((m) => m.docxRenderer));
34
+ registerRenderer("xlsx", () => import("./xlsx-CTiQRiu4.js").then((m) => m.xlsxRenderer));
35
+ registerRenderer("pptx", () => import("./pptx-CLDls4po.js").then((m) => m.pptxRenderer));
36
+ registerRenderer("slack", () => import("./slack-BRuNDD9v.js").then((m) => m.slackRenderer));
37
+ registerRenderer("svg", () => import("./svg-B4vksv2i.js").then((m) => m.svgRenderer));
38
+ registerRenderer("teams", () => import("./teams-CFNa5umk.js").then((m) => m.teamsRenderer));
39
+ registerRenderer("discord", () => import("./discord-CO2LO9iv.js").then((m) => m.discordRenderer));
40
+ registerRenderer("telegram", () => import("./telegram-C4lbO-VY.js").then((m) => m.telegramRenderer));
41
+ registerRenderer("notion", () => import("./notion-BJOgw53C.js").then((m) => m.notionRenderer));
42
+ registerRenderer("confluence", () => import("./confluence-Db_NpGvv.js").then((m) => m.confluenceRenderer));
43
+ registerRenderer("whatsapp", () => import("./whatsapp-D8sjWdfY.js").then((m) => m.whatsappRenderer));
44
+ registerRenderer("google-chat", () => import("./google-chat-CkO1akkX.js").then((m) => m.googleChatRenderer));
45
45
  async function resolveRenderer(format) {
46
46
  const entry = renderers.get(format);
47
47
  if (!entry) throw new Error(`[@pyreon/document] No renderer registered for format '${format}'. Available: ${[...renderers.keys()].join(", ")}`);
@@ -72,24 +72,24 @@ async function render(node, format, options) {
72
72
  /** @internal For testing — reset renderer registry to defaults. */
73
73
  function _resetRenderers() {
74
74
  renderers.clear();
75
- registerRenderer("html", () => import("./html-DtsbNARB.js").then((m) => m.htmlRenderer));
76
- registerRenderer("email", () => import("./email-D0bbfWq4.js").then((m) => m.emailRenderer));
77
- registerRenderer("md", () => import("./markdown-BYkSLplL.js").then((m) => m.markdownRenderer));
78
- registerRenderer("text", () => import("./text-l1XNXBOC.js").then((m) => m.textRenderer));
79
- registerRenderer("csv", () => import("./csv-COrS4qdy.js").then((m) => m.csvRenderer));
80
- registerRenderer("pdf", () => import("./pdf-NApJCU6I.js").then((m) => m.pdfRenderer));
81
- registerRenderer("docx", () => import("./docx-D_wt3a7y.js").then((m) => m.docxRenderer));
82
- registerRenderer("xlsx", () => import("./xlsx-D8XqTBoR.js").then((m) => m.xlsxRenderer));
83
- registerRenderer("pptx", () => import("./pptx-DLhvPIMn.js").then((m) => m.pptxRenderer));
84
- registerRenderer("slack", () => import("./slack-BI3EQwYm.js").then((m) => m.slackRenderer));
85
- registerRenderer("svg", () => import("./svg-uFnPWNCU.js").then((m) => m.svgRenderer));
86
- registerRenderer("teams", () => import("./teams-Cwz9lce0.js").then((m) => m.teamsRenderer));
87
- registerRenderer("discord", () => import("./discord-BLUnkEh9.js").then((m) => m.discordRenderer));
88
- registerRenderer("telegram", () => import("./telegram-gYFqyMXb.js").then((m) => m.telegramRenderer));
89
- registerRenderer("notion", () => import("./notion-iG2C5bEY.js").then((m) => m.notionRenderer));
90
- registerRenderer("confluence", () => import("./confluence-Bd3ua1Ut.js").then((m) => m.confluenceRenderer));
91
- registerRenderer("whatsapp", () => import("./whatsapp-CjSGoOKx.js").then((m) => m.whatsappRenderer));
92
- registerRenderer("google-chat", () => import("./google-chat-CkKCBUWC.js").then((m) => m.googleChatRenderer));
75
+ registerRenderer("html", () => import("./html-CQAgtR1o.js").then((m) => m.htmlRenderer));
76
+ registerRenderer("email", () => import("./email-euU37d-3.js").then((m) => m.emailRenderer));
77
+ registerRenderer("md", () => import("./markdown-DV0jLhLG.js").then((m) => m.markdownRenderer));
78
+ registerRenderer("text", () => import("./text-C08DaebN.js").then((m) => m.textRenderer));
79
+ registerRenderer("csv", () => import("./csv-I0OmxyUq.js").then((m) => m.csvRenderer));
80
+ registerRenderer("pdf", () => import("./pdf-D5Pitjpc.js").then((m) => m.pdfRenderer));
81
+ registerRenderer("docx", () => import("./docx-CwLhLA6_.js").then((m) => m.docxRenderer));
82
+ registerRenderer("xlsx", () => import("./xlsx-CTiQRiu4.js").then((m) => m.xlsxRenderer));
83
+ registerRenderer("pptx", () => import("./pptx-CLDls4po.js").then((m) => m.pptxRenderer));
84
+ registerRenderer("slack", () => import("./slack-BRuNDD9v.js").then((m) => m.slackRenderer));
85
+ registerRenderer("svg", () => import("./svg-B4vksv2i.js").then((m) => m.svgRenderer));
86
+ registerRenderer("teams", () => import("./teams-CFNa5umk.js").then((m) => m.teamsRenderer));
87
+ registerRenderer("discord", () => import("./discord-CO2LO9iv.js").then((m) => m.discordRenderer));
88
+ registerRenderer("telegram", () => import("./telegram-C4lbO-VY.js").then((m) => m.telegramRenderer));
89
+ registerRenderer("notion", () => import("./notion-BJOgw53C.js").then((m) => m.notionRenderer));
90
+ registerRenderer("confluence", () => import("./confluence-Db_NpGvv.js").then((m) => m.confluenceRenderer));
91
+ registerRenderer("whatsapp", () => import("./whatsapp-D8sjWdfY.js").then((m) => m.whatsappRenderer));
92
+ registerRenderer("google-chat", () => import("./google-chat-CkO1akkX.js").then((m) => m.googleChatRenderer));
93
93
  }
94
94
 
95
95
  //#endregion
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/markdown.ts
4
4
  function resolveColumn(col) {
@@ -95,4 +95,4 @@ const markdownRenderer = { async render(node, _options) {
95
95
 
96
96
  //#endregion
97
97
  export { markdownRenderer };
98
- //# sourceMappingURL=markdown-BYkSLplL.js.map
98
+ //# sourceMappingURL=markdown-DV0jLhLG.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/notion.ts
4
4
  /**
@@ -186,4 +186,4 @@ const notionRenderer = { async render(node, _options) {
186
186
 
187
187
  //#endregion
188
188
  export { notionRenderer };
189
- //# sourceMappingURL=notion-iG2C5bEY.js.map
189
+ //# sourceMappingURL=notion-BJOgw53C.js.map
@@ -1,5 +1,3 @@
1
- import { o as __toESM } from "./chunk-B4VCYm32.js";
2
-
3
1
  //#region src/renderers/pdf.ts
4
2
  /**
5
3
  * PDF renderer — lazy-loads pdfmake on first use.
@@ -372,8 +370,8 @@ const pdfRenderer = { async render(node, _options) {
372
370
  let pdfMakeModule;
373
371
  let pdfFontsModule;
374
372
  try {
375
- pdfMakeModule = await import("./pdfmake-DPyTSQ91.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
376
- pdfFontsModule = await import("./vfs_fonts-BSrGAfkk.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
373
+ pdfMakeModule = await import("pdfmake/build/pdfmake");
374
+ pdfFontsModule = await import("pdfmake/build/vfs_fonts");
377
375
  } catch {
378
376
  throw new Error("[@pyreon/document] PDF renderer requires \"pdfmake\" package. Install it: bun add pdfmake");
379
377
  }
@@ -422,4 +420,4 @@ const pdfRenderer = { async render(node, _options) {
422
420
 
423
421
  //#endregion
424
422
  export { pdfRenderer };
425
- //# sourceMappingURL=pdf-NApJCU6I.js.map
423
+ //# sourceMappingURL=pdf-D5Pitjpc.js.map
@@ -1,4 +1,4 @@
1
- import { a as sanitizeXmlColor, n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { a as sanitizeXmlColor, n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/pptx.ts
4
4
  /**
@@ -231,7 +231,7 @@ function processSlide(pageNode, pptx) {
231
231
  const pptxRenderer = { async render(node, _options) {
232
232
  let PptxGenJS;
233
233
  try {
234
- PptxGenJS = await import("./pptxgen.es-CFrPYgTY.js");
234
+ PptxGenJS = await import("pptxgenjs");
235
235
  } catch {
236
236
  throw new Error("[@pyreon/document] PPTX renderer requires \"pptxgenjs\" package. Install it: bun add pptxgenjs");
237
237
  }
@@ -256,4 +256,4 @@ const pptxRenderer = { async render(node, _options) {
256
256
 
257
257
  //#endregion
258
258
  export { pptxRenderer };
259
- //# sourceMappingURL=pptx-DLhvPIMn.js.map
259
+ //# sourceMappingURL=pptx-CLDls4po.js.map
@@ -70,4 +70,4 @@ function sanitizeStyle(value) {
70
70
 
71
71
  //#endregion
72
72
  export { sanitizeXmlColor as a, sanitizeStyle as i, sanitizeHref as n, sanitizeImageSrc as r, sanitizeColor as t };
73
- //# sourceMappingURL=sanitize-O_3j1mNJ.js.map
73
+ //# sourceMappingURL=sanitize-C3_11gZA.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/slack.ts
4
4
  /**
@@ -138,4 +138,4 @@ const slackRenderer = { async render(node, _options) {
138
138
 
139
139
  //#endregion
140
140
  export { slackRenderer };
141
- //# sourceMappingURL=slack-BI3EQwYm.js.map
141
+ //# sourceMappingURL=slack-BRuNDD9v.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc, t as sanitizeColor } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/svg.ts
4
4
  /**
@@ -185,4 +185,4 @@ ${content}
185
185
 
186
186
  //#endregion
187
187
  export { svgRenderer };
188
- //# sourceMappingURL=svg-uFnPWNCU.js.map
188
+ //# sourceMappingURL=svg-B4vksv2i.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref, r as sanitizeImageSrc } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/teams.ts
4
4
  /**
@@ -175,4 +175,4 @@ const teamsRenderer = { async render(node, _options) {
175
175
 
176
176
  //#endregion
177
177
  export { teamsRenderer };
178
- //# sourceMappingURL=teams-Cwz9lce0.js.map
178
+ //# sourceMappingURL=teams-CFNa5umk.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/telegram.ts
4
4
  /**
@@ -76,4 +76,4 @@ const telegramRenderer = { async render(node, _options) {
76
76
 
77
77
  //#endregion
78
78
  export { telegramRenderer };
79
- //# sourceMappingURL=telegram-gYFqyMXb.js.map
79
+ //# sourceMappingURL=telegram-C4lbO-VY.js.map
@@ -72,4 +72,4 @@ const textRenderer = { async render(node, _options) {
72
72
 
73
73
  //#endregion
74
74
  export { textRenderer };
75
- //# sourceMappingURL=text-l1XNXBOC.js.map
75
+ //# sourceMappingURL=text-C08DaebN.js.map
@@ -1,4 +1,4 @@
1
- import { n as sanitizeHref } from "./sanitize-O_3j1mNJ.js";
1
+ import { n as sanitizeHref } from "./sanitize-C3_11gZA.js";
2
2
 
3
3
  //#region src/renderers/whatsapp.ts
4
4
  /**
@@ -63,4 +63,4 @@ const whatsappRenderer = { async render(node, _options) {
63
63
 
64
64
  //#endregion
65
65
  export { whatsappRenderer };
66
- //# sourceMappingURL=whatsapp-CjSGoOKx.js.map
66
+ //# sourceMappingURL=whatsapp-D8sjWdfY.js.map
@@ -171,7 +171,7 @@ function autoFitColumns(ws) {
171
171
  const xlsxRenderer = { async render(node, _options) {
172
172
  let ExcelJS;
173
173
  try {
174
- ExcelJS = await import("./exceljs-Bj6LWg5N.js");
174
+ ExcelJS = await import("exceljs");
175
175
  } catch {
176
176
  throw new Error("[@pyreon/document] XLSX renderer requires \"exceljs\" package. Install it: bun add exceljs");
177
177
  }
@@ -202,4 +202,4 @@ const xlsxRenderer = { async render(node, _options) {
202
202
 
203
203
  //#endregion
204
204
  export { xlsxRenderer };
205
- //# sourceMappingURL=xlsx-D8XqTBoR.js.map
205
+ //# sourceMappingURL=xlsx-CTiQRiu4.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyreon/document",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Universal document rendering for Pyreon — one template, every output format (HTML, PDF, DOCX, email, XLSX, Markdown, and more)",
5
5
  "homepage": "https://github.com/pyreon/pyreon/tree/main/packages/document#readme",
6
6
  "bugs": {
@@ -14,6 +14,7 @@
14
14
  },
15
15
  "files": [
16
16
  "lib",
17
+ "!lib/**/*.map",
17
18
  "src",
18
19
  "README.md",
19
20
  "LICENSE"
@@ -42,19 +43,19 @@
42
43
  },
43
44
  "devDependencies": {
44
45
  "@happy-dom/global-registrator": "^20.8.9",
45
- "@pyreon/core": "^0.14.0",
46
+ "@pyreon/core": "^0.15.0",
46
47
  "@pyreon/manifest": "0.13.1",
47
- "@pyreon/reactivity": "^0.14.0",
48
+ "@pyreon/reactivity": "^0.15.0",
48
49
  "@types/pdfmake": "^0.3.2",
49
- "@vitus-labs/tools-lint": "^1.15.5",
50
+ "@vitus-labs/tools-lint": "^2.3.0",
50
51
  "docx": "^9.6.0",
51
52
  "exceljs": "^4.4.0",
52
53
  "pdfmake": "^0.3.7",
53
54
  "pptxgenjs": "^4.0.1"
54
55
  },
55
56
  "peerDependencies": {
56
- "@pyreon/core": "^0.14.0",
57
- "@pyreon/reactivity": "^0.14.0"
57
+ "@pyreon/core": "^0.15.0",
58
+ "@pyreon/reactivity": "^0.15.0"
58
59
  },
59
60
  "optionalDependencies": {
60
61
  "docx": "^9.6.0",
package/src/manifest.ts CHANGED
@@ -6,7 +6,7 @@ export default defineManifest({
6
6
  tagline:
7
7
  'Universal document rendering — 18 primitives, 14+ output formats',
8
8
  description:
9
- 'Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers (PDF ~300KB, DOCX ~100KB, XLSX ~500KB, PPTX ~200KB) are lazy-loaded on demand. Supports both JSX primitives and a fluent builder API.',
9
+ 'Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers are lazy-loaded — chunks (PDF ~3MB pdfmake + fonts, DOCX ~700KB, XLSX ~1.1MB, PPTX ~400KB) only load when invoked. The vendored architecture means one npm install covers every format; apps that never render to a heavy format never pay its chunk cost. Supports both JSX primitives and a fluent builder API.',
10
10
  category: 'universal',
11
11
  longExample: `import { Document, Page, Heading, Text, Table, Image, List, Code, Divider, render, createDocument, download } from '@pyreon/document'
12
12
 
@@ -133,7 +133,7 @@ download(pdf, 'report.pdf')`,
133
133
  },
134
134
  ],
135
135
  gotchas: [
136
- 'Heavy format renderers are lazy-loaded: PDF (~300KB via pdfmake), DOCX (~100KB via docx), XLSX (~500KB via exceljs), PPTX (~200KB via pptxgenjs). First render of each format has an async import overhead; subsequent renders are instant.',
136
+ 'Heavy format renderers are lazy-loaded: PDF (~3MB via pdfmake + bundled fonts), DOCX (~700KB via docx), XLSX (~1.1MB via exceljs), PPTX (~400KB via pptxgenjs). First render of each format triggers the dynamic import; subsequent renders are instant. The vendored architecture means apps download all renderer chunks during npm install (14MB total `lib/`), but consumer-side bundlers tree-shake to only ship the renderers an app actually invokes.',
137
137
  {
138
138
  label: 'Format return types',
139
139
  note: 'Binary formats (pdf, docx, xlsx, pptx) return Uint8Array. Text formats (html, email, md, text, csv, slack, teams, discord, telegram, notion, confluence, whatsapp, gchat, svg) return string.',
@@ -1420,7 +1420,7 @@ describe('DOCX renderer', () => {
1420
1420
  // DOCX files are ZIP archives — first two bytes are PK (0x50, 0x4B)
1421
1421
  expect((result as Uint8Array)[0]).toBe(0x50)
1422
1422
  expect((result as Uint8Array)[1]).toBe(0x4b)
1423
- }, 15000)
1423
+ }, 30000)
1424
1424
 
1425
1425
  it('embeds base64 images via ImageRun', async () => {
1426
1426
  // 1x1 red pixel PNG as base64
@@ -1436,7 +1436,7 @@ describe('DOCX renderer', () => {
1436
1436
  const result = await render(doc, 'docx')
1437
1437
  expect(result).toBeInstanceOf(Uint8Array)
1438
1438
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1439
- }, 15000)
1439
+ }, 30000)
1440
1440
 
1441
1441
  it('renders external URL images as placeholders', async () => {
1442
1442
  const doc = Document({
@@ -1450,7 +1450,7 @@ describe('DOCX renderer', () => {
1450
1450
  const result = await render(doc, 'docx')
1451
1451
  expect(result).toBeInstanceOf(Uint8Array)
1452
1452
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1453
- }, 15000)
1453
+ }, 30000)
1454
1454
 
1455
1455
  it('renders page with header and footer', async () => {
1456
1456
  const doc = Document({
@@ -1464,7 +1464,7 @@ describe('DOCX renderer', () => {
1464
1464
  const result = await render(doc, 'docx')
1465
1465
  expect(result).toBeInstanceOf(Uint8Array)
1466
1466
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1467
- }, 15000)
1467
+ }, 30000)
1468
1468
 
1469
1469
  it('renders table with bordered option and column widths', async () => {
1470
1470
  const doc = Document({
@@ -1481,7 +1481,7 @@ describe('DOCX renderer', () => {
1481
1481
  const result = await render(doc, 'docx')
1482
1482
  expect(result).toBeInstanceOf(Uint8Array)
1483
1483
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1484
- }, 15000)
1484
+ }, 30000)
1485
1485
 
1486
1486
  it('renders nested lists', async () => {
1487
1487
  const doc = Document({
@@ -1502,7 +1502,7 @@ describe('DOCX renderer', () => {
1502
1502
  const result = await render(doc, 'docx')
1503
1503
  expect(result).toBeInstanceOf(Uint8Array)
1504
1504
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1505
- }, 15000)
1505
+ }, 30000)
1506
1506
  })
1507
1507
 
1508
1508
  // ─── XLSX Renderer (integration) ────────────────────────────────────────────
@@ -1534,7 +1534,7 @@ describe('XLSX renderer', () => {
1534
1534
  // XLSX files are ZIP archives — first two bytes are PK (0x50, 0x4B)
1535
1535
  expect((result as Uint8Array)[0]).toBe(0x50)
1536
1536
  expect((result as Uint8Array)[1]).toBe(0x4b)
1537
- }, 15000)
1537
+ }, 30000)
1538
1538
 
1539
1539
  it('parses currency values as numbers', async () => {
1540
1540
  const doc = Document({
@@ -1547,7 +1547,7 @@ describe('XLSX renderer', () => {
1547
1547
  const result = await render(doc, 'xlsx')
1548
1548
  expect(result).toBeInstanceOf(Uint8Array)
1549
1549
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1550
- }, 15000)
1550
+ }, 30000)
1551
1551
 
1552
1552
  it('parses percentage values', async () => {
1553
1553
  const doc = Document({
@@ -1560,7 +1560,7 @@ describe('XLSX renderer', () => {
1560
1560
  const result = await render(doc, 'xlsx')
1561
1561
  expect(result).toBeInstanceOf(Uint8Array)
1562
1562
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1563
- }, 15000)
1563
+ }, 30000)
1564
1564
 
1565
1565
  it('renders multiple tables on the same sheet with spacing', async () => {
1566
1566
  const doc = Document({
@@ -1585,7 +1585,7 @@ describe('XLSX renderer', () => {
1585
1585
  const result = await render(doc, 'xlsx')
1586
1586
  expect(result).toBeInstanceOf(Uint8Array)
1587
1587
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1588
- }, 15000)
1588
+ }, 30000)
1589
1589
 
1590
1590
  it('renders bordered tables', async () => {
1591
1591
  const doc = Document({
@@ -1599,7 +1599,7 @@ describe('XLSX renderer', () => {
1599
1599
  const result = await render(doc, 'xlsx')
1600
1600
  expect(result).toBeInstanceOf(Uint8Array)
1601
1601
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1602
- }, 15000)
1602
+ }, 30000)
1603
1603
 
1604
1604
  it('renders empty document with default sheet', async () => {
1605
1605
  const doc = Document({ children: Text({ children: 'no tables' }) })
@@ -1607,7 +1607,7 @@ describe('XLSX renderer', () => {
1607
1607
  const result = await render(doc, 'xlsx')
1608
1608
  expect(result).toBeInstanceOf(Uint8Array)
1609
1609
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1610
- }, 15000)
1610
+ }, 30000)
1611
1611
  })
1612
1612
 
1613
1613
  // ─── PDF Renderer (integration) ─────────────────────────────────────────────
@@ -1653,7 +1653,7 @@ describe('PDF renderer', () => {
1653
1653
  // PDF files start with %PDF
1654
1654
  const header = String.fromCharCode(...(result as Uint8Array).slice(0, 5))
1655
1655
  expect(header).toBe('%PDF-')
1656
- }, 15000)
1656
+ }, 30000)
1657
1657
 
1658
1658
  it('renders images with HTTP URLs as placeholder text', async () => {
1659
1659
  const doc = Document({
@@ -1669,7 +1669,7 @@ describe('PDF renderer', () => {
1669
1669
  const result = await render(doc, 'pdf')
1670
1670
  expect(result).toBeInstanceOf(Uint8Array)
1671
1671
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1672
- }, 15000)
1672
+ }, 30000)
1673
1673
 
1674
1674
  it('renders page with header and footer', async () => {
1675
1675
  const doc = Document({
@@ -1684,7 +1684,7 @@ describe('PDF renderer', () => {
1684
1684
  const result = await render(doc, 'pdf')
1685
1685
  expect(result).toBeInstanceOf(Uint8Array)
1686
1686
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1687
- }, 15000)
1687
+ }, 30000)
1688
1688
  })
1689
1689
 
1690
1690
  // ─── PPTX Renderer (integration) ────────────────────────────────────────────
@@ -1727,7 +1727,7 @@ describe('PPTX renderer', () => {
1727
1727
  // PPTX files are ZIP archives — first two bytes are PK (0x50, 0x4B)
1728
1728
  expect((result as Uint8Array)[0]).toBe(0x50)
1729
1729
  expect((result as Uint8Array)[1]).toBe(0x4b)
1730
- }, 15000)
1730
+ }, 30000)
1731
1731
 
1732
1732
  it('renders a document without explicit pages as a single slide', async () => {
1733
1733
  const doc = Document({
@@ -1741,7 +1741,7 @@ describe('PPTX renderer', () => {
1741
1741
  const result = await render(doc, 'pptx')
1742
1742
  expect(result).toBeInstanceOf(Uint8Array)
1743
1743
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1744
- }, 15000)
1744
+ }, 30000)
1745
1745
 
1746
1746
  it('renders all node types without errors', async () => {
1747
1747
  // 1x1 red pixel PNG as base64
@@ -1769,7 +1769,7 @@ describe('PPTX renderer', () => {
1769
1769
  const result = await render(doc, 'pptx')
1770
1770
  expect(result).toBeInstanceOf(Uint8Array)
1771
1771
  expect((result as Uint8Array).length).toBeGreaterThan(0)
1772
- }, 15000)
1772
+ }, 30000)
1773
1773
  })
1774
1774
 
1775
1775
  // ─── Slack Renderer ─────────────────────────────────────────────────────────
@@ -7,14 +7,14 @@ import manifest from '../manifest'
7
7
 
8
8
  describe('gen-docs — document snapshot', () => {
9
9
  it('renders to llms.txt bullet', () => {
10
- expect(renderLlmsTxtLine(manifest)).toMatchInlineSnapshot(`"- @pyreon/document — Universal document rendering — 18 primitives, 14+ output formats. Heavy format renderers are lazy-loaded: PDF (~300KB via pdfmake), DOCX (~100KB via docx), XLSX (~500KB via exceljs), PPTX (~200KB via pptxgenjs). First render of each format has an async import overhead; subsequent renders are instant."`)
10
+ expect(renderLlmsTxtLine(manifest)).toMatchInlineSnapshot(`"- @pyreon/document — Universal document rendering — 18 primitives, 14+ output formats. Heavy format renderers are lazy-loaded: PDF (~3MB via pdfmake + bundled fonts), DOCX (~700KB via docx), XLSX (~1.1MB via exceljs), PPTX (~400KB via pptxgenjs). First render of each format triggers the dynamic import; subsequent renders are instant. The vendored architecture means apps download all renderer chunks during npm install (14MB total \`lib/\`), but consumer-side bundlers tree-shake to only ship the renderers an app actually invokes."`)
11
11
  })
12
12
 
13
13
  it('renders to llms-full.txt section', () => {
14
14
  expect(renderLlmsFullSection(manifest)).toMatchInlineSnapshot(`
15
15
  "## @pyreon/document — Universal Document Rendering
16
16
 
17
- Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers (PDF ~300KB, DOCX ~100KB, XLSX ~500KB, PPTX ~200KB) are lazy-loaded on demand. Supports both JSX primitives and a fluent builder API.
17
+ Universal document rendering for Pyreon. One template, every output format: HTML, PDF, DOCX, XLSX, PPTX, email, Markdown, plain text, CSV, SVG, Slack, Teams, Discord, Telegram, Notion, Confluence, WhatsApp, Google Chat. Heavy renderers are lazy-loaded — chunks (PDF ~3MB pdfmake + fonts, DOCX ~700KB, XLSX ~1.1MB, PPTX ~400KB) only load when invoked. The vendored architecture means one npm install covers every format; apps that never render to a heavy format never pay its chunk cost. Supports both JSX primitives and a fluent builder API.
18
18
 
19
19
  \`\`\`typescript
20
20
  import { Document, Page, Heading, Text, Table, Image, List, Code, Divider, render, createDocument, download } from '@pyreon/document'
@@ -68,7 +68,7 @@ describe('gen-docs — document snapshot', () => {
68
68
  await doc.toNotion() // Notion blocks
69
69
  \`\`\`
70
70
 
71
- > **Note**: Heavy format renderers are lazy-loaded: PDF (~300KB via pdfmake), DOCX (~100KB via docx), XLSX (~500KB via exceljs), PPTX (~200KB via pptxgenjs). First render of each format has an async import overhead; subsequent renders are instant.
71
+ > **Note**: Heavy format renderers are lazy-loaded: PDF (~3MB via pdfmake + bundled fonts), DOCX (~700KB via docx), XLSX (~1.1MB via exceljs), PPTX (~400KB via pptxgenjs). First render of each format triggers the dynamic import; subsequent renders are instant. The vendored architecture means apps download all renderer chunks during npm install (14MB total \`lib/\`), but consumer-side bundlers tree-shake to only ship the renderers an app actually invokes.
72
72
  >
73
73
  > **Format return types**: Binary formats (pdf, docx, xlsx, pptx) return Uint8Array. Text formats (html, email, md, text, csv, slack, teams, discord, telegram, notion, confluence, whatsapp, gchat, svg) return string.
74
74
  >