docgen-utils 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -0
- package/dist/bundle.js +36086 -0
- package/dist/bundle.min.js +197 -0
- package/dist/cli.js +47432 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/packages/cli/commands/export-docs.d.ts +5 -0
- package/dist/packages/cli/commands/export-docs.d.ts.map +1 -0
- package/dist/packages/cli/commands/export-docs.js +24 -0
- package/dist/packages/cli/commands/export-docs.js.map +1 -0
- package/dist/packages/cli/commands/export-slides.d.ts +5 -0
- package/dist/packages/cli/commands/export-slides.d.ts.map +1 -0
- package/dist/packages/cli/commands/export-slides.js +86 -0
- package/dist/packages/cli/commands/export-slides.js.map +1 -0
- package/dist/packages/cli/commands/import-docx.d.ts +5 -0
- package/dist/packages/cli/commands/import-docx.d.ts.map +1 -0
- package/dist/packages/cli/commands/import-docx.js +27 -0
- package/dist/packages/cli/commands/import-docx.js.map +1 -0
- package/dist/packages/cli/commands/import-pptx.d.ts +5 -0
- package/dist/packages/cli/commands/import-pptx.d.ts.map +1 -0
- package/dist/packages/cli/commands/import-pptx.js +44 -0
- package/dist/packages/cli/commands/import-pptx.js.map +1 -0
- package/dist/packages/cli/index.d.ts +11 -0
- package/dist/packages/cli/index.d.ts.map +1 -0
- package/dist/packages/cli/index.js +103 -0
- package/dist/packages/cli/index.js.map +1 -0
- package/dist/packages/docs/common.d.ts +183 -0
- package/dist/packages/docs/common.d.ts.map +1 -0
- package/dist/packages/docs/common.js +27 -0
- package/dist/packages/docs/common.js.map +1 -0
- package/dist/packages/docs/convert.d.ts +7 -0
- package/dist/packages/docs/convert.d.ts.map +1 -0
- package/dist/packages/docs/convert.js +1399 -0
- package/dist/packages/docs/convert.js.map +1 -0
- package/dist/packages/docs/create-document.d.ts +30 -0
- package/dist/packages/docs/create-document.d.ts.map +1 -0
- package/dist/packages/docs/create-document.js +170 -0
- package/dist/packages/docs/create-document.js.map +1 -0
- package/dist/packages/docs/export.d.ts +57 -0
- package/dist/packages/docs/export.d.ts.map +1 -0
- package/dist/packages/docs/export.js +430 -0
- package/dist/packages/docs/export.js.map +1 -0
- package/dist/packages/docs/import-docx.d.ts +13 -0
- package/dist/packages/docs/import-docx.d.ts.map +1 -0
- package/dist/packages/docs/import-docx.js +2299 -0
- package/dist/packages/docs/import-docx.js.map +1 -0
- package/dist/packages/docs/parse.d.ts +6 -0
- package/dist/packages/docs/parse.d.ts.map +1 -0
- package/dist/packages/docs/parse.js +4253 -0
- package/dist/packages/docs/parse.js.map +1 -0
- package/dist/packages/shared/dom-parser-shim.d.ts +30 -0
- package/dist/packages/shared/dom-parser-shim.d.ts.map +1 -0
- package/dist/packages/shared/dom-parser-shim.js +152 -0
- package/dist/packages/shared/dom-parser-shim.js.map +1 -0
- package/dist/packages/slides/common.d.ts +325 -0
- package/dist/packages/slides/common.d.ts.map +1 -0
- package/dist/packages/slides/common.js +12 -0
- package/dist/packages/slides/common.js.map +1 -0
- package/dist/packages/slides/convert.d.ts +35 -0
- package/dist/packages/slides/convert.d.ts.map +1 -0
- package/dist/packages/slides/convert.js +308 -0
- package/dist/packages/slides/convert.js.map +1 -0
- package/dist/packages/slides/createPresentation.d.ts +51 -0
- package/dist/packages/slides/createPresentation.d.ts.map +1 -0
- package/dist/packages/slides/createPresentation.js +265 -0
- package/dist/packages/slides/createPresentation.js.map +1 -0
- package/dist/packages/slides/export.d.ts +24 -0
- package/dist/packages/slides/export.d.ts.map +1 -0
- package/dist/packages/slides/export.js +52 -0
- package/dist/packages/slides/export.js.map +1 -0
- package/dist/packages/slides/import-pptx.d.ts +13 -0
- package/dist/packages/slides/import-pptx.d.ts.map +1 -0
- package/dist/packages/slides/import-pptx.js +619 -0
- package/dist/packages/slides/import-pptx.js.map +1 -0
- package/dist/packages/slides/parse.d.ts +45 -0
- package/dist/packages/slides/parse.d.ts.map +1 -0
- package/dist/packages/slides/parse.js +1185 -0
- package/dist/packages/slides/parse.js.map +1 -0
- package/dist/packages/slides/transform.d.ts +37 -0
- package/dist/packages/slides/transform.d.ts.map +1 -0
- package/dist/packages/slides/transform.js +140 -0
- package/dist/packages/slides/transform.js.map +1 -0
- package/dist/packages/slides/vendor/VENDORING.md +58 -0
- package/dist/packages/slides/vendor/pptxgen.d.ts +805 -0
- package/dist/packages/slides/vendor/pptxgen.js +7442 -0
- package/package.json +57 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
import { Packer } from "docx";
|
|
2
|
+
import { createDocxDocument } from "./create-document";
|
|
3
|
+
import { parseHtmlContent } from "./parse";
|
|
4
|
+
/**
|
|
5
|
+
* Render an SVG string to a PNG image using Canvas (browser environment).
|
|
6
|
+
* Returns the image data as Uint8Array along with dimensions.
|
|
7
|
+
*
|
|
8
|
+
* @param svgContent - The SVG content as a string
|
|
9
|
+
* @param width - Optional width hint (extracted from SVG if not provided)
|
|
10
|
+
* @param height - Optional height hint (extracted from SVG if not provided)
|
|
11
|
+
* @param backgroundColor - Optional background color (hex without #, e.g., "FEF3C7")
|
|
12
|
+
*/
|
|
13
|
+
async function renderSvgToPng(svgContent, width, height, backgroundColor) {
|
|
14
|
+
// Parse SVG to get dimensions if not provided
|
|
15
|
+
const parser = new DOMParser();
|
|
16
|
+
const svgDoc = parser.parseFromString(svgContent, "image/svg+xml");
|
|
17
|
+
const svgElement = svgDoc.querySelector("svg");
|
|
18
|
+
if (!svgElement) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
// Get dimensions from SVG
|
|
22
|
+
let svgWidth = width;
|
|
23
|
+
let svgHeight = height;
|
|
24
|
+
if (!svgWidth || !svgHeight) {
|
|
25
|
+
const viewBox = svgElement.getAttribute("viewBox");
|
|
26
|
+
if (viewBox) {
|
|
27
|
+
const parts = viewBox.split(/\s+/).map(Number);
|
|
28
|
+
if (parts.length >= 4) {
|
|
29
|
+
svgWidth = svgWidth || parts[2];
|
|
30
|
+
svgHeight = svgHeight || parts[3];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (!svgWidth) {
|
|
34
|
+
const widthAttr = svgElement.getAttribute("width");
|
|
35
|
+
if (widthAttr && !widthAttr.includes("%")) {
|
|
36
|
+
svgWidth = parseFloat(widthAttr);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!svgHeight) {
|
|
40
|
+
const heightAttr = svgElement.getAttribute("height");
|
|
41
|
+
if (heightAttr && !heightAttr.includes("%")) {
|
|
42
|
+
svgHeight = parseFloat(heightAttr);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Default dimensions if still not found
|
|
47
|
+
svgWidth = svgWidth || 400;
|
|
48
|
+
svgHeight = svgHeight || 300;
|
|
49
|
+
// Ensure SVG has explicit dimensions
|
|
50
|
+
svgElement.setAttribute("width", String(svgWidth));
|
|
51
|
+
svgElement.setAttribute("height", String(svgHeight));
|
|
52
|
+
// Ensure SVG has proper XML namespace
|
|
53
|
+
if (!svgElement.getAttribute("xmlns")) {
|
|
54
|
+
svgElement.setAttribute("xmlns", "http://www.w3.org/2000/svg");
|
|
55
|
+
}
|
|
56
|
+
// Serialize the modified SVG
|
|
57
|
+
const serializer = new XMLSerializer();
|
|
58
|
+
const svgString = serializer.serializeToString(svgElement);
|
|
59
|
+
// Create a blob URL for the SVG
|
|
60
|
+
const svgBlob = new Blob([svgString], { type: "image/svg+xml;charset=utf-8" });
|
|
61
|
+
const svgUrl = URL.createObjectURL(svgBlob);
|
|
62
|
+
try {
|
|
63
|
+
// Create an image from the SVG
|
|
64
|
+
const img = new Image();
|
|
65
|
+
await new Promise((resolve, reject) => {
|
|
66
|
+
img.onload = () => resolve();
|
|
67
|
+
img.onerror = () => reject(new Error("Failed to load SVG image"));
|
|
68
|
+
img.src = svgUrl;
|
|
69
|
+
});
|
|
70
|
+
// Create canvas with device pixel ratio for sharp rendering
|
|
71
|
+
const scale = typeof window !== "undefined" ? (window.devicePixelRatio || 1) : 1;
|
|
72
|
+
const canvas = document.createElement("canvas");
|
|
73
|
+
canvas.width = svgWidth * scale;
|
|
74
|
+
canvas.height = svgHeight * scale;
|
|
75
|
+
const ctx = canvas.getContext("2d");
|
|
76
|
+
if (!ctx) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
// Fill with background color (use provided color or default to white)
|
|
80
|
+
ctx.fillStyle = backgroundColor ? `#${backgroundColor}` : "white";
|
|
81
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
82
|
+
// Scale for device pixel ratio
|
|
83
|
+
ctx.scale(scale, scale);
|
|
84
|
+
// Draw the SVG
|
|
85
|
+
ctx.drawImage(img, 0, 0, svgWidth, svgHeight);
|
|
86
|
+
// Convert to PNG blob
|
|
87
|
+
const pngBlob = await new Promise((resolve) => {
|
|
88
|
+
canvas.toBlob(resolve, "image/png");
|
|
89
|
+
});
|
|
90
|
+
if (!pngBlob) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
// Convert blob to Uint8Array
|
|
94
|
+
const arrayBuffer = await pngBlob.arrayBuffer();
|
|
95
|
+
const data = new Uint8Array(arrayBuffer);
|
|
96
|
+
// Scale dimensions to fit within DOCX content width
|
|
97
|
+
// DOCX is 8.5" with 1" margins = 6.5" content width = 468pt at 72dpi
|
|
98
|
+
const maxWidth = 468;
|
|
99
|
+
const aspectRatio = svgHeight / svgWidth;
|
|
100
|
+
const finalWidth = Math.min(svgWidth, maxWidth);
|
|
101
|
+
const finalHeight = finalWidth * aspectRatio;
|
|
102
|
+
return {
|
|
103
|
+
data,
|
|
104
|
+
width: Math.round(finalWidth),
|
|
105
|
+
height: Math.round(finalHeight),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
URL.revokeObjectURL(svgUrl);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Render all svg-chart elements from parsed HTML content to PNG images.
|
|
114
|
+
* This is the primary function for converting SVG charts embedded in HTML to images.
|
|
115
|
+
*
|
|
116
|
+
* @param html - The HTML content containing SVG charts
|
|
117
|
+
* @returns Map of svg-chart-{index} to ChartImageData
|
|
118
|
+
*/
|
|
119
|
+
async function renderSvgChartsFromHtml(html) {
|
|
120
|
+
const chartImages = new Map();
|
|
121
|
+
// Parse the HTML content to get all elements
|
|
122
|
+
const elements = parseHtmlContent(html);
|
|
123
|
+
// Find all svg-chart elements and render them
|
|
124
|
+
let svgIndex = 0;
|
|
125
|
+
for (const element of elements) {
|
|
126
|
+
if (element.type === "svg-chart") {
|
|
127
|
+
try {
|
|
128
|
+
const imageData = await renderSvgToPng(element.svgContent, element.width, element.height, element.backgroundColor);
|
|
129
|
+
if (imageData) {
|
|
130
|
+
chartImages.set(`svg-chart-${svgIndex}`, imageData);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
console.warn(`Failed to render SVG chart ${svgIndex}:`, err);
|
|
135
|
+
}
|
|
136
|
+
svgIndex++;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return chartImages;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Render all svg-chart elements from already-parsed content to PNG images.
|
|
143
|
+
* Use this if you've already parsed the HTML and want to render charts.
|
|
144
|
+
*
|
|
145
|
+
* @param elements - Array of parsed elements from parseHtmlContent
|
|
146
|
+
* @returns Map of svg-chart-{index} to ChartImageData
|
|
147
|
+
*/
|
|
148
|
+
async function renderSvgChartsFromElements(elements) {
|
|
149
|
+
const chartImages = new Map();
|
|
150
|
+
let svgIndex = 0;
|
|
151
|
+
for (const element of elements) {
|
|
152
|
+
if (element.type === "svg-chart") {
|
|
153
|
+
try {
|
|
154
|
+
const imageData = await renderSvgToPng(element.svgContent, element.width, element.height, element.backgroundColor);
|
|
155
|
+
if (imageData) {
|
|
156
|
+
chartImages.set(`svg-chart-${svgIndex}`, imageData);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
console.warn(`Failed to render SVG chart ${svgIndex}:`, err);
|
|
161
|
+
}
|
|
162
|
+
svgIndex++;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return chartImages;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Render a DOM element containing an SVG to a PNG image using Canvas.
|
|
169
|
+
* Returns the image data as Uint8Array along with dimensions.
|
|
170
|
+
*/
|
|
171
|
+
async function renderElementToPng(element) {
|
|
172
|
+
// Get the bounding rect for dimensions
|
|
173
|
+
const rect = element.getBoundingClientRect();
|
|
174
|
+
if (rect.width === 0 || rect.height === 0) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
// Find the SVG element
|
|
178
|
+
const svg = element.querySelector("svg");
|
|
179
|
+
if (!svg) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
// Clone the SVG to avoid modifying the original
|
|
183
|
+
const svgClone = svg.cloneNode(true);
|
|
184
|
+
if (!svgClone.getAttribute("width")) {
|
|
185
|
+
svgClone.setAttribute("width", String(rect.width));
|
|
186
|
+
}
|
|
187
|
+
if (!svgClone.getAttribute("height")) {
|
|
188
|
+
svgClone.setAttribute("height", String(rect.height));
|
|
189
|
+
}
|
|
190
|
+
// Serialize the SVG
|
|
191
|
+
const serializer = new XMLSerializer();
|
|
192
|
+
let svgString = serializer.serializeToString(svgClone);
|
|
193
|
+
// Ensure SVG has proper XML namespace
|
|
194
|
+
if (!svgString.includes("xmlns")) {
|
|
195
|
+
svgString = svgString.replace("<svg", '<svg xmlns="http://www.w3.org/2000/svg"');
|
|
196
|
+
}
|
|
197
|
+
// Create a blob URL for the SVG
|
|
198
|
+
const svgBlob = new Blob([svgString], { type: "image/svg+xml;charset=utf-8" });
|
|
199
|
+
const svgUrl = URL.createObjectURL(svgBlob);
|
|
200
|
+
try {
|
|
201
|
+
// Create an image from the SVG
|
|
202
|
+
const img = new Image();
|
|
203
|
+
await new Promise((resolve, reject) => {
|
|
204
|
+
img.onload = () => resolve();
|
|
205
|
+
img.onerror = () => reject(new Error("Failed to load SVG image"));
|
|
206
|
+
img.src = svgUrl;
|
|
207
|
+
});
|
|
208
|
+
// Create canvas with device pixel ratio for sharp rendering
|
|
209
|
+
const scale = window.devicePixelRatio || 1;
|
|
210
|
+
const canvas = document.createElement("canvas");
|
|
211
|
+
canvas.width = rect.width * scale;
|
|
212
|
+
canvas.height = rect.height * scale;
|
|
213
|
+
const ctx = canvas.getContext("2d");
|
|
214
|
+
if (!ctx) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
// GENERALIZED: Extract background color from container element's computed style
|
|
218
|
+
// This handles cases like .hero-image { background: linear-gradient(...) }
|
|
219
|
+
const computedStyle = window.getComputedStyle(element);
|
|
220
|
+
const bgColor = computedStyle.backgroundColor;
|
|
221
|
+
// Use the computed background color if it's not transparent, otherwise default to white
|
|
222
|
+
const isTransparent = !bgColor || bgColor === "transparent" || bgColor === "rgba(0, 0, 0, 0)";
|
|
223
|
+
ctx.fillStyle = isTransparent ? "white" : bgColor;
|
|
224
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
225
|
+
// Scale for device pixel ratio
|
|
226
|
+
ctx.scale(scale, scale);
|
|
227
|
+
// Draw the SVG
|
|
228
|
+
ctx.drawImage(img, 0, 0, rect.width, rect.height);
|
|
229
|
+
// Convert to PNG blob
|
|
230
|
+
const pngBlob = await new Promise((resolve) => {
|
|
231
|
+
canvas.toBlob(resolve, "image/png");
|
|
232
|
+
});
|
|
233
|
+
if (!pngBlob) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
// Convert blob to Uint8Array
|
|
237
|
+
const arrayBuffer = await pngBlob.arrayBuffer();
|
|
238
|
+
const data = new Uint8Array(arrayBuffer);
|
|
239
|
+
// Scale dimensions to fit within DOCX content width
|
|
240
|
+
// DOCX is 8.5" with 1" margins = 6.5" content width = 468pt at 72dpi
|
|
241
|
+
const maxWidth = 468;
|
|
242
|
+
const aspectRatio = rect.height / rect.width;
|
|
243
|
+
const width = Math.min(rect.width, maxWidth);
|
|
244
|
+
const height = width * aspectRatio;
|
|
245
|
+
return {
|
|
246
|
+
data,
|
|
247
|
+
width: Math.round(width),
|
|
248
|
+
height: Math.round(height),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
URL.revokeObjectURL(svgUrl);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Check if an SVG element appears to be a chart (not a decorative icon/illustration).
|
|
257
|
+
* Charts typically have viewBox dimensions that indicate they're larger visualizations.
|
|
258
|
+
*/
|
|
259
|
+
function isChartSvg(svg) {
|
|
260
|
+
// Check for minimum size - charts are typically larger than icons
|
|
261
|
+
const width = svg.getAttribute("width") || svg.style.width;
|
|
262
|
+
const height = svg.getAttribute("height") || svg.style.height;
|
|
263
|
+
// Parse numeric dimensions (handles "200", "200px", etc.)
|
|
264
|
+
const parseSize = (val) => {
|
|
265
|
+
if (!val)
|
|
266
|
+
return 0;
|
|
267
|
+
const num = parseFloat(val);
|
|
268
|
+
return isNaN(num) ? 0 : num;
|
|
269
|
+
};
|
|
270
|
+
const widthNum = parseSize(width);
|
|
271
|
+
const heightNum = parseSize(height);
|
|
272
|
+
// Charts should be larger than icons (at least 100x100)
|
|
273
|
+
// Also check viewBox for percentage-based sizing
|
|
274
|
+
const viewBox = svg.getAttribute("viewBox");
|
|
275
|
+
if (viewBox) {
|
|
276
|
+
const parts = viewBox.split(/\s+/).map(Number);
|
|
277
|
+
if (parts.length === 4) {
|
|
278
|
+
const vbWidth = parts[2];
|
|
279
|
+
const vbHeight = parts[3];
|
|
280
|
+
if (vbWidth >= 100 && vbHeight >= 50) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Direct size check
|
|
286
|
+
if (widthNum >= 100 && heightNum >= 50) {
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
// Check bounding rect if rendered
|
|
290
|
+
const rect = svg.getBoundingClientRect();
|
|
291
|
+
if (rect.width >= 100 && rect.height >= 50) {
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Find and render all chart containers with SVGs in the document.
|
|
298
|
+
* Looks for any div/figure/section containing a chart-like SVG.
|
|
299
|
+
* Returns a Map of chart ID to image data.
|
|
300
|
+
*/
|
|
301
|
+
async function renderChartImages(doc) {
|
|
302
|
+
const chartImages = new Map();
|
|
303
|
+
// Find all SVGs in the document
|
|
304
|
+
const allSvgs = doc.querySelectorAll("svg");
|
|
305
|
+
let svgIndex = 0;
|
|
306
|
+
for (const svg of allSvgs) {
|
|
307
|
+
// Skip small SVGs (icons, decorations)
|
|
308
|
+
if (!isChartSvg(svg)) {
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
// Find the container element (parent div, figure, section, etc.)
|
|
312
|
+
const container = svg.parentElement;
|
|
313
|
+
if (!container) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
try {
|
|
317
|
+
const imageData = await renderElementToPng(container);
|
|
318
|
+
if (imageData) {
|
|
319
|
+
// Use svg-chart-{index} as the key to match create-document.ts
|
|
320
|
+
chartImages.set(`svg-chart-${svgIndex}`, imageData);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
console.warn(`Failed to render chart ${svgIndex}:`, err);
|
|
325
|
+
}
|
|
326
|
+
svgIndex++;
|
|
327
|
+
}
|
|
328
|
+
return chartImages;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Fetch external images from parsed elements and convert to PNG data.
|
|
332
|
+
* Uses browser fetch API to download images and Canvas to convert to PNG.
|
|
333
|
+
* Returns a Map of image src URL to ChartImageData.
|
|
334
|
+
*/
|
|
335
|
+
async function fetchExternalImages(elements) {
|
|
336
|
+
const imageMap = new Map();
|
|
337
|
+
// Find all image elements
|
|
338
|
+
const imageElements = elements.filter((el) => el.type === "image");
|
|
339
|
+
if (imageElements.length === 0) {
|
|
340
|
+
return imageMap;
|
|
341
|
+
}
|
|
342
|
+
// Maximum content width in DOCX (6.5 inches at 96 DPI = 624 pixels, but we use 468 for some margin)
|
|
343
|
+
const maxWidth = 468;
|
|
344
|
+
for (const imgEl of imageElements) {
|
|
345
|
+
try {
|
|
346
|
+
const src = imgEl.src;
|
|
347
|
+
// Skip data URLs (already embedded), relative file paths (won't work in browser)
|
|
348
|
+
if (src.startsWith("data:"))
|
|
349
|
+
continue;
|
|
350
|
+
// For absolute URLs, try to fetch
|
|
351
|
+
if (src.startsWith("http://") || src.startsWith("https://")) {
|
|
352
|
+
// Fetch the image
|
|
353
|
+
const response = await fetch(src, {
|
|
354
|
+
mode: "cors",
|
|
355
|
+
credentials: "omit",
|
|
356
|
+
});
|
|
357
|
+
if (!response.ok) {
|
|
358
|
+
console.warn(`Failed to fetch image: ${src} (${response.status})`);
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const blob = await response.blob();
|
|
362
|
+
// Create an image element to get dimensions and draw to canvas
|
|
363
|
+
const img = new Image();
|
|
364
|
+
img.crossOrigin = "anonymous";
|
|
365
|
+
await new Promise((resolve, reject) => {
|
|
366
|
+
img.onload = () => resolve();
|
|
367
|
+
img.onerror = () => reject(new Error(`Failed to load image: ${src}`));
|
|
368
|
+
img.src = URL.createObjectURL(blob);
|
|
369
|
+
});
|
|
370
|
+
// Scale to fit within document width
|
|
371
|
+
let width = img.naturalWidth;
|
|
372
|
+
let height = img.naturalHeight;
|
|
373
|
+
if (width > maxWidth) {
|
|
374
|
+
const scale = maxWidth / width;
|
|
375
|
+
width = maxWidth;
|
|
376
|
+
height = Math.round(height * scale);
|
|
377
|
+
}
|
|
378
|
+
// Draw to canvas and get PNG data
|
|
379
|
+
const canvas = document.createElement("canvas");
|
|
380
|
+
canvas.width = width;
|
|
381
|
+
canvas.height = height;
|
|
382
|
+
const ctx = canvas.getContext("2d");
|
|
383
|
+
if (!ctx)
|
|
384
|
+
continue;
|
|
385
|
+
ctx.drawImage(img, 0, 0, width, height);
|
|
386
|
+
// Convert to PNG blob
|
|
387
|
+
const pngBlob = await new Promise((resolve) => {
|
|
388
|
+
canvas.toBlob((b) => resolve(b), "image/png");
|
|
389
|
+
});
|
|
390
|
+
if (!pngBlob)
|
|
391
|
+
continue;
|
|
392
|
+
// Convert to Uint8Array
|
|
393
|
+
const arrayBuffer = await pngBlob.arrayBuffer();
|
|
394
|
+
const data = new Uint8Array(arrayBuffer);
|
|
395
|
+
imageMap.set(src, { data, width, height });
|
|
396
|
+
// Clean up object URL
|
|
397
|
+
URL.revokeObjectURL(img.src);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
catch (err) {
|
|
401
|
+
console.warn(`Error fetching image ${imgEl.src}:`, err);
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return imageMap;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Export HTML content to DOCX and download in browser.
|
|
409
|
+
* Automatically renders SVG charts to PNG images.
|
|
410
|
+
*/
|
|
411
|
+
async function exportDocx(html, options) {
|
|
412
|
+
const { fileName, author, title, description } = options;
|
|
413
|
+
// Render SVG charts to images using DOMParser-only approach
|
|
414
|
+
const chartImages = await renderSvgChartsFromHtml(html);
|
|
415
|
+
// Create document options
|
|
416
|
+
const docOptions = {
|
|
417
|
+
title: title ?? fileName.replace(/\.docx$/i, ""),
|
|
418
|
+
author,
|
|
419
|
+
description: description ?? "Generated by Copilot",
|
|
420
|
+
chartImages: chartImages.size > 0 ? chartImages : undefined,
|
|
421
|
+
};
|
|
422
|
+
// Create the DOCX document
|
|
423
|
+
const doc = createDocxDocument(html, docOptions);
|
|
424
|
+
// Pack and download
|
|
425
|
+
return await Packer.toBase64String(doc);
|
|
426
|
+
}
|
|
427
|
+
// Export chart rendering utilities for use by test scripts and other consumers
|
|
428
|
+
export { renderChartImages, isChartSvg, renderElementToPng, renderSvgToPng, renderSvgChartsFromHtml, renderSvgChartsFromElements, };
|
|
429
|
+
export default exportDocx;
|
|
430
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../packages/docs/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOCX Import: Parses a DOCX file (ArrayBuffer) into HTML string.
|
|
3
|
+
* Modeled after slides/import-pptx.ts
|
|
4
|
+
*
|
|
5
|
+
* Usage: const html = await importDocx(arrayBuffer);
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Imports a DOCX file and returns an HTML string.
|
|
9
|
+
* @param arrayBuffer - The DOCX file as an ArrayBuffer
|
|
10
|
+
* @returns HTML string representing the document
|
|
11
|
+
*/
|
|
12
|
+
export default function importDocx(arrayBuffer: ArrayBuffer): Promise<string>;
|
|
13
|
+
//# sourceMappingURL=import-docx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-docx.d.ts","sourceRoot":"","sources":["../../../packages/docs/import-docx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAu6EH;;;;GAIG;AACH,wBAA8B,UAAU,CACtC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAoMjB"}
|