@thanh01.pmt/presentation-kit 0.2.17 → 0.3.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/README.md +26 -0
- package/dist/ai/index.cjs +33 -28
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +4 -3
- package/dist/ai/index.d.ts +4 -3
- package/dist/ai/index.js +3 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/assets/fonts/NOTICE.md +25 -0
- package/dist/assets/fonts/SOURCES.json +47 -0
- package/dist/assets/fonts/fira-code.woff2 +0 -0
- package/dist/assets/fonts/inter.woff2 +0 -0
- package/dist/assets/fonts/jetbrains-mono.woff2 +0 -0
- package/dist/assets/fonts/playfair-display.woff2 +0 -0
- package/dist/assets/fonts/plus-jakarta-sans.woff2 +0 -0
- package/dist/assets/fonts/space-grotesk.woff2 +0 -0
- package/dist/chunk-3Q4RMZVQ.cjs +867 -0
- package/dist/chunk-3Q4RMZVQ.cjs.map +1 -0
- package/dist/chunk-HSVXH7DD.cjs +1624 -0
- package/dist/chunk-HSVXH7DD.cjs.map +1 -0
- package/dist/{chunk-NYLDRVHZ.js → chunk-I5RG2L3M.js} +4 -78
- package/dist/chunk-I5RG2L3M.js.map +1 -0
- package/dist/{chunk-7QHDWDSB.js → chunk-INAOTYLK.cjs} +437 -849
- package/dist/chunk-INAOTYLK.cjs.map +1 -0
- package/dist/{chunk-TGI6YSZP.cjs → chunk-JBGGQGSQ.cjs} +4 -80
- package/dist/chunk-JBGGQGSQ.cjs.map +1 -0
- package/dist/{chunk-JNTRKKJX.cjs → chunk-OCP2TAY2.js} +421 -868
- package/dist/chunk-OCP2TAY2.js.map +1 -0
- package/dist/chunk-V6X7D44H.js +854 -0
- package/dist/chunk-V6X7D44H.js.map +1 -0
- package/dist/chunk-VRXEXUHR.js +1610 -0
- package/dist/chunk-VRXEXUHR.js.map +1 -0
- package/dist/{click-css-Bcc1CkTN.d.cts → click-css-C8VciwZ6.d.cts} +1 -1
- package/dist/{click-css-B2s9B_uP.d.ts → click-css-COIiFo1I.d.ts} +1 -1
- package/dist/index.cjs +143 -110
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +62 -6
- package/dist/index.d.ts +62 -6
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/node/index.cjs +117 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +36 -0
- package/dist/node/index.d.ts +36 -0
- package/dist/node/index.js +105 -0
- package/dist/node/index.js.map +1 -0
- package/dist/{presets-D_hfPJX9.d.ts → presets-DPRGtpO-.d.ts} +1 -1
- package/dist/{presets-BYvgAAkJ.d.cts → presets-MIi91wZg.d.cts} +1 -1
- package/dist/react/index.cjs +17 -16
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +4 -3
- package/dist/react/index.d.ts +4 -3
- package/dist/react/index.js +4 -3
- package/dist/react/index.js.map +1 -1
- package/dist/skills/index.cjs +16 -12
- package/dist/skills/index.d.cts +36 -20
- package/dist/skills/index.d.ts +36 -20
- package/dist/skills/index.js +1 -1
- package/dist/{types-C3d04zzP.d.cts → types-CvxCxWus.d.cts} +1 -67
- package/dist/{types-C3d04zzP.d.ts → types-CvxCxWus.d.ts} +1 -67
- package/dist/types-k_eae8UV.d.cts +74 -0
- package/dist/types-k_eae8UV.d.ts +74 -0
- package/package.json +8 -2
- package/dist/chunk-6R6L6KSC.cjs +0 -601
- package/dist/chunk-6R6L6KSC.cjs.map +0 -1
- package/dist/chunk-7QHDWDSB.js.map +0 -1
- package/dist/chunk-BHJXQCVE.js +0 -588
- package/dist/chunk-BHJXQCVE.js.map +0 -1
- package/dist/chunk-JNTRKKJX.cjs.map +0 -1
- package/dist/chunk-NYLDRVHZ.js.map +0 -1
- package/dist/chunk-TGI6YSZP.cjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkJBGGQGSQ_cjs = require('./chunk-JBGGQGSQ.cjs');
|
|
4
|
+
var chunk3Q4RMZVQ_cjs = require('./chunk-3Q4RMZVQ.cjs');
|
|
5
|
+
var chunkINAOTYLK_cjs = require('./chunk-INAOTYLK.cjs');
|
|
6
|
+
var chunkHSVXH7DD_cjs = require('./chunk-HSVXH7DD.cjs');
|
|
6
7
|
|
|
7
8
|
// src/engine.ts
|
|
8
9
|
function createEngine(config = {}) {
|
|
@@ -19,14 +20,14 @@ function createEngine(config = {}) {
|
|
|
19
20
|
}
|
|
20
21
|
return {
|
|
21
22
|
render: (markdown, options) => {
|
|
22
|
-
return
|
|
23
|
+
return chunkJBGGQGSQ_cjs.renderSlide(markdown, mergeOptions(options));
|
|
23
24
|
},
|
|
24
25
|
renderAsync: async (markdown, options) => {
|
|
25
|
-
return
|
|
26
|
+
return chunkJBGGQGSQ_cjs.renderSlideAsync(markdown, mergeOptions(options));
|
|
26
27
|
},
|
|
27
28
|
getThemeCss: (theme, containerId) => {
|
|
28
|
-
const resolved =
|
|
29
|
-
return
|
|
29
|
+
const resolved = chunkJBGGQGSQ_cjs.resolveTheme(theme);
|
|
30
|
+
return chunkJBGGQGSQ_cjs.generateScopedCss2(resolved, containerId);
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
33
|
}
|
|
@@ -102,8 +103,8 @@ async function convertMarkdownToPptx(markdown, options) {
|
|
|
102
103
|
pptx.layout = "LAYOUT_WIDE";
|
|
103
104
|
if (options?.title) pptx.title = options.title;
|
|
104
105
|
if (options?.author) pptx.author = options.author;
|
|
105
|
-
const renderResult =
|
|
106
|
-
const { slides } =
|
|
106
|
+
const renderResult = chunkJBGGQGSQ_cjs.renderSlide(markdown);
|
|
107
|
+
const { slides } = chunk3Q4RMZVQ_cjs.splitMarkdownSlides(markdown);
|
|
107
108
|
const isDark = options?.theme !== "light";
|
|
108
109
|
const defaultBg = isDark ? "14151B" : "FFFFFF";
|
|
109
110
|
const defaultText = isDark ? "F1F5F9" : "1E293B";
|
|
@@ -200,217 +201,249 @@ async function convertMarkdownToPptx(markdown, options) {
|
|
|
200
201
|
return new Uint8Array(pptxArray);
|
|
201
202
|
}
|
|
202
203
|
|
|
203
|
-
Object.defineProperty(exports, "FRONTEND_SLIDES_CORE_RULES", {
|
|
204
|
-
enumerable: true,
|
|
205
|
-
get: function () { return chunk6R6L6KSC_cjs.FRONTEND_SLIDES_CORE_RULES; }
|
|
206
|
-
});
|
|
207
|
-
Object.defineProperty(exports, "STYLE_PRESETS", {
|
|
208
|
-
enumerable: true,
|
|
209
|
-
get: function () { return chunk6R6L6KSC_cjs.STYLE_PRESETS; }
|
|
210
|
-
});
|
|
211
|
-
Object.defineProperty(exports, "TEMPLATES_CATALOG", {
|
|
212
|
-
enumerable: true,
|
|
213
|
-
get: function () { return chunk6R6L6KSC_cjs.TEMPLATES_CATALOG; }
|
|
214
|
-
});
|
|
215
|
-
Object.defineProperty(exports, "VIEWPORT_BASE_CSS", {
|
|
216
|
-
enumerable: true,
|
|
217
|
-
get: function () { return chunk6R6L6KSC_cjs.VIEWPORT_BASE_CSS; }
|
|
218
|
-
});
|
|
219
|
-
Object.defineProperty(exports, "frontendSlidesTools", {
|
|
220
|
-
enumerable: true,
|
|
221
|
-
get: function () { return chunk6R6L6KSC_cjs.frontendSlidesTools; }
|
|
222
|
-
});
|
|
223
|
-
Object.defineProperty(exports, "getFrontendSlidesSkillPrompt", {
|
|
224
|
-
enumerable: true,
|
|
225
|
-
get: function () { return chunk6R6L6KSC_cjs.getFrontendSlidesSkillPrompt; }
|
|
226
|
-
});
|
|
227
|
-
Object.defineProperty(exports, "getSlideStylePresetSchema", {
|
|
228
|
-
enumerable: true,
|
|
229
|
-
get: function () { return chunk6R6L6KSC_cjs.getSlideStylePresetSchema; }
|
|
230
|
-
});
|
|
231
|
-
Object.defineProperty(exports, "getStylePreset", {
|
|
232
|
-
enumerable: true,
|
|
233
|
-
get: function () { return chunk6R6L6KSC_cjs.getStylePreset; }
|
|
234
|
-
});
|
|
235
|
-
Object.defineProperty(exports, "getTemplatesCatalog", {
|
|
236
|
-
enumerable: true,
|
|
237
|
-
get: function () { return chunk6R6L6KSC_cjs.getTemplatesCatalog; }
|
|
238
|
-
});
|
|
239
|
-
Object.defineProperty(exports, "querySlideTemplatesSchema", {
|
|
240
|
-
enumerable: true,
|
|
241
|
-
get: function () { return chunk6R6L6KSC_cjs.querySlideTemplatesSchema; }
|
|
242
|
-
});
|
|
243
|
-
Object.defineProperty(exports, "searchTemplates", {
|
|
244
|
-
enumerable: true,
|
|
245
|
-
get: function () { return chunk6R6L6KSC_cjs.searchTemplates; }
|
|
246
|
-
});
|
|
247
204
|
Object.defineProperty(exports, "convertTextArrows", {
|
|
248
205
|
enumerable: true,
|
|
249
|
-
get: function () { return
|
|
206
|
+
get: function () { return chunkJBGGQGSQ_cjs.convertTextArrows; }
|
|
250
207
|
});
|
|
251
208
|
Object.defineProperty(exports, "countSlides", {
|
|
252
209
|
enumerable: true,
|
|
253
|
-
get: function () { return
|
|
210
|
+
get: function () { return chunkJBGGQGSQ_cjs.countSlides; }
|
|
254
211
|
});
|
|
255
212
|
Object.defineProperty(exports, "darkThemeTokens", {
|
|
256
213
|
enumerable: true,
|
|
257
|
-
get: function () { return
|
|
214
|
+
get: function () { return chunkJBGGQGSQ_cjs.darkThemeTokens; }
|
|
258
215
|
});
|
|
259
216
|
Object.defineProperty(exports, "defineTheme", {
|
|
260
217
|
enumerable: true,
|
|
261
|
-
get: function () { return
|
|
218
|
+
get: function () { return chunkJBGGQGSQ_cjs.defineTheme; }
|
|
262
219
|
});
|
|
263
220
|
Object.defineProperty(exports, "detectMermaidBlocks", {
|
|
264
221
|
enumerable: true,
|
|
265
|
-
get: function () { return
|
|
222
|
+
get: function () { return chunkJBGGQGSQ_cjs.detectMermaidBlocks; }
|
|
266
223
|
});
|
|
267
224
|
Object.defineProperty(exports, "extractLayoutsAndNotes", {
|
|
268
225
|
enumerable: true,
|
|
269
|
-
get: function () { return
|
|
226
|
+
get: function () { return chunkJBGGQGSQ_cjs.extractLayoutsAndNotes; }
|
|
270
227
|
});
|
|
271
228
|
Object.defineProperty(exports, "extractMarpSource", {
|
|
272
229
|
enumerable: true,
|
|
273
|
-
get: function () { return
|
|
230
|
+
get: function () { return chunkJBGGQGSQ_cjs.extractMarpSource; }
|
|
274
231
|
});
|
|
275
232
|
Object.defineProperty(exports, "extractMaxClicks", {
|
|
276
233
|
enumerable: true,
|
|
277
|
-
get: function () { return
|
|
234
|
+
get: function () { return chunkJBGGQGSQ_cjs.extractMaxClicks; }
|
|
278
235
|
});
|
|
279
236
|
Object.defineProperty(exports, "filterPresenterNotes", {
|
|
280
237
|
enumerable: true,
|
|
281
|
-
get: function () { return
|
|
238
|
+
get: function () { return chunkJBGGQGSQ_cjs.filterPresenterNotes; }
|
|
282
239
|
});
|
|
283
240
|
Object.defineProperty(exports, "generateClickCss", {
|
|
284
241
|
enumerable: true,
|
|
285
|
-
get: function () { return
|
|
242
|
+
get: function () { return chunkJBGGQGSQ_cjs.generateClickCss; }
|
|
286
243
|
});
|
|
287
244
|
Object.defineProperty(exports, "generateLayoutCss", {
|
|
288
245
|
enumerable: true,
|
|
289
|
-
get: function () { return
|
|
246
|
+
get: function () { return chunkJBGGQGSQ_cjs.generateLayoutCss; }
|
|
290
247
|
});
|
|
291
248
|
Object.defineProperty(exports, "generateScopedCss", {
|
|
292
249
|
enumerable: true,
|
|
293
|
-
get: function () { return
|
|
250
|
+
get: function () { return chunkJBGGQGSQ_cjs.generateScopedCss2; }
|
|
294
251
|
});
|
|
295
252
|
Object.defineProperty(exports, "generateScopedCssFromTokens", {
|
|
296
253
|
enumerable: true,
|
|
297
|
-
get: function () { return
|
|
298
|
-
});
|
|
299
|
-
Object.defineProperty(exports, "getHighlighter", {
|
|
300
|
-
enumerable: true,
|
|
301
|
-
get: function () { return chunkTGI6YSZP_cjs.getHighlighter; }
|
|
254
|
+
get: function () { return chunkJBGGQGSQ_cjs.generateScopedCss; }
|
|
302
255
|
});
|
|
303
256
|
Object.defineProperty(exports, "getThemeTokens", {
|
|
304
257
|
enumerable: true,
|
|
305
|
-
get: function () { return
|
|
306
|
-
});
|
|
307
|
-
Object.defineProperty(exports, "highlightCodeBlocks", {
|
|
308
|
-
enumerable: true,
|
|
309
|
-
get: function () { return chunkTGI6YSZP_cjs.highlightCodeBlocks; }
|
|
258
|
+
get: function () { return chunkJBGGQGSQ_cjs.getThemeTokens; }
|
|
310
259
|
});
|
|
311
260
|
Object.defineProperty(exports, "isLayoutComment", {
|
|
312
261
|
enumerable: true,
|
|
313
|
-
get: function () { return
|
|
262
|
+
get: function () { return chunkJBGGQGSQ_cjs.isLayoutComment; }
|
|
314
263
|
});
|
|
315
264
|
Object.defineProperty(exports, "lightThemeTokens", {
|
|
316
265
|
enumerable: true,
|
|
317
|
-
get: function () { return
|
|
266
|
+
get: function () { return chunkJBGGQGSQ_cjs.lightThemeTokens; }
|
|
318
267
|
});
|
|
319
268
|
Object.defineProperty(exports, "navyThemeTokens", {
|
|
320
269
|
enumerable: true,
|
|
321
|
-
get: function () { return
|
|
270
|
+
get: function () { return chunkJBGGQGSQ_cjs.navyThemeTokens; }
|
|
322
271
|
});
|
|
323
272
|
Object.defineProperty(exports, "parseLayoutFromComment", {
|
|
324
273
|
enumerable: true,
|
|
325
|
-
get: function () { return
|
|
274
|
+
get: function () { return chunkJBGGQGSQ_cjs.parseLayoutFromComment; }
|
|
326
275
|
});
|
|
327
276
|
Object.defineProperty(exports, "postprocessClicks", {
|
|
328
277
|
enumerable: true,
|
|
329
|
-
get: function () { return
|
|
278
|
+
get: function () { return chunkJBGGQGSQ_cjs.postprocessClicks; }
|
|
330
279
|
});
|
|
331
280
|
Object.defineProperty(exports, "preprocessClicks", {
|
|
332
281
|
enumerable: true,
|
|
333
|
-
get: function () { return
|
|
282
|
+
get: function () { return chunkJBGGQGSQ_cjs.preprocessClicks; }
|
|
334
283
|
});
|
|
335
284
|
Object.defineProperty(exports, "renderMarp", {
|
|
336
285
|
enumerable: true,
|
|
337
|
-
get: function () { return
|
|
286
|
+
get: function () { return chunkJBGGQGSQ_cjs.renderMarp; }
|
|
338
287
|
});
|
|
339
288
|
Object.defineProperty(exports, "renderMermaidDiagrams", {
|
|
340
289
|
enumerable: true,
|
|
341
|
-
get: function () { return
|
|
290
|
+
get: function () { return chunkJBGGQGSQ_cjs.renderMermaidDiagrams; }
|
|
342
291
|
});
|
|
343
292
|
Object.defineProperty(exports, "renderSlide", {
|
|
344
293
|
enumerable: true,
|
|
345
|
-
get: function () { return
|
|
294
|
+
get: function () { return chunkJBGGQGSQ_cjs.renderSlide; }
|
|
346
295
|
});
|
|
347
296
|
Object.defineProperty(exports, "renderSlideAsync", {
|
|
348
297
|
enumerable: true,
|
|
349
|
-
get: function () { return
|
|
298
|
+
get: function () { return chunkJBGGQGSQ_cjs.renderSlideAsync; }
|
|
350
299
|
});
|
|
351
300
|
Object.defineProperty(exports, "resolveTheme", {
|
|
352
301
|
enumerable: true,
|
|
353
|
-
get: function () { return
|
|
302
|
+
get: function () { return chunkJBGGQGSQ_cjs.resolveTheme; }
|
|
354
303
|
});
|
|
355
304
|
Object.defineProperty(exports, "sanitizeMermaidCode", {
|
|
356
305
|
enumerable: true,
|
|
357
|
-
get: function () { return
|
|
306
|
+
get: function () { return chunkJBGGQGSQ_cjs.sanitizeMermaidCode; }
|
|
307
|
+
});
|
|
308
|
+
Object.defineProperty(exports, "SLIDE_LAYOUT_PRESETS", {
|
|
309
|
+
enumerable: true,
|
|
310
|
+
get: function () { return chunk3Q4RMZVQ_cjs.SLIDE_LAYOUT_PRESETS; }
|
|
311
|
+
});
|
|
312
|
+
Object.defineProperty(exports, "getSlideLayoutPresetById", {
|
|
313
|
+
enumerable: true,
|
|
314
|
+
get: function () { return chunk3Q4RMZVQ_cjs.getSlideLayoutPresetById; }
|
|
315
|
+
});
|
|
316
|
+
Object.defineProperty(exports, "getSlideLayoutPresetsByCategory", {
|
|
317
|
+
enumerable: true,
|
|
318
|
+
get: function () { return chunk3Q4RMZVQ_cjs.getSlideLayoutPresetsByCategory; }
|
|
319
|
+
});
|
|
320
|
+
Object.defineProperty(exports, "removeSlideElementFromMarkdown", {
|
|
321
|
+
enumerable: true,
|
|
322
|
+
get: function () { return chunk3Q4RMZVQ_cjs.removeSlideElementFromMarkdown; }
|
|
323
|
+
});
|
|
324
|
+
Object.defineProperty(exports, "serializeLayoutToComment", {
|
|
325
|
+
enumerable: true,
|
|
326
|
+
get: function () { return chunk3Q4RMZVQ_cjs.serializeLayoutToComment; }
|
|
327
|
+
});
|
|
328
|
+
Object.defineProperty(exports, "splitMarkdownSlides", {
|
|
329
|
+
enumerable: true,
|
|
330
|
+
get: function () { return chunk3Q4RMZVQ_cjs.splitMarkdownSlides; }
|
|
331
|
+
});
|
|
332
|
+
Object.defineProperty(exports, "updateSlideLayoutInMarkdown", {
|
|
333
|
+
enumerable: true,
|
|
334
|
+
get: function () { return chunk3Q4RMZVQ_cjs.updateSlideLayoutInMarkdown; }
|
|
335
|
+
});
|
|
336
|
+
Object.defineProperty(exports, "updateSlideTextInMarkdown", {
|
|
337
|
+
enumerable: true,
|
|
338
|
+
get: function () { return chunk3Q4RMZVQ_cjs.updateSlideTextInMarkdown; }
|
|
358
339
|
});
|
|
359
340
|
Object.defineProperty(exports, "HTML_SLIDE_PRESETS", {
|
|
360
341
|
enumerable: true,
|
|
361
|
-
get: function () { return
|
|
342
|
+
get: function () { return chunkINAOTYLK_cjs.HTML_SLIDE_PRESETS; }
|
|
362
343
|
});
|
|
363
344
|
Object.defineProperty(exports, "HTML_THEMES", {
|
|
364
345
|
enumerable: true,
|
|
365
|
-
get: function () { return
|
|
346
|
+
get: function () { return chunkINAOTYLK_cjs.HTML_THEMES; }
|
|
366
347
|
});
|
|
367
|
-
Object.defineProperty(exports, "
|
|
348
|
+
Object.defineProperty(exports, "SLIDE_UTILITY_CSS", {
|
|
349
|
+
enumerable: true,
|
|
350
|
+
get: function () { return chunkINAOTYLK_cjs.SLIDE_UTILITY_CSS; }
|
|
351
|
+
});
|
|
352
|
+
Object.defineProperty(exports, "buildBespokeSlideMarkup", {
|
|
368
353
|
enumerable: true,
|
|
369
|
-
get: function () { return
|
|
354
|
+
get: function () { return chunkINAOTYLK_cjs.buildBespokeSlideMarkup; }
|
|
370
355
|
});
|
|
371
356
|
Object.defineProperty(exports, "compileHtmlDeck", {
|
|
372
357
|
enumerable: true,
|
|
373
|
-
get: function () { return
|
|
358
|
+
get: function () { return chunkINAOTYLK_cjs.compileHtmlDeck; }
|
|
359
|
+
});
|
|
360
|
+
Object.defineProperty(exports, "compileHtmlDeckAsync", {
|
|
361
|
+
enumerable: true,
|
|
362
|
+
get: function () { return chunkINAOTYLK_cjs.compileHtmlDeckAsync; }
|
|
374
363
|
});
|
|
375
364
|
Object.defineProperty(exports, "generateHtmlShell", {
|
|
376
365
|
enumerable: true,
|
|
377
|
-
get: function () { return
|
|
366
|
+
get: function () { return chunkINAOTYLK_cjs.generateHtmlShell; }
|
|
378
367
|
});
|
|
379
|
-
Object.defineProperty(exports, "
|
|
368
|
+
Object.defineProperty(exports, "getHighlighter", {
|
|
380
369
|
enumerable: true,
|
|
381
|
-
get: function () { return
|
|
370
|
+
get: function () { return chunkINAOTYLK_cjs.getHighlighter; }
|
|
382
371
|
});
|
|
383
|
-
Object.defineProperty(exports, "
|
|
372
|
+
Object.defineProperty(exports, "highlightCodeBlocks", {
|
|
384
373
|
enumerable: true,
|
|
385
|
-
get: function () { return
|
|
374
|
+
get: function () { return chunkINAOTYLK_cjs.highlightCodeBlocks; }
|
|
386
375
|
});
|
|
387
|
-
Object.defineProperty(exports, "
|
|
376
|
+
Object.defineProperty(exports, "highlightDeckCodeBlocks", {
|
|
388
377
|
enumerable: true,
|
|
389
|
-
get: function () { return
|
|
378
|
+
get: function () { return chunkINAOTYLK_cjs.highlightDeckCodeBlocks; }
|
|
390
379
|
});
|
|
391
|
-
Object.defineProperty(exports, "
|
|
380
|
+
Object.defineProperty(exports, "listUtilityClasses", {
|
|
381
|
+
enumerable: true,
|
|
382
|
+
get: function () { return chunkINAOTYLK_cjs.listUtilityClasses; }
|
|
383
|
+
});
|
|
384
|
+
Object.defineProperty(exports, "normalizeSlideSlots", {
|
|
392
385
|
enumerable: true,
|
|
393
|
-
get: function () { return
|
|
386
|
+
get: function () { return chunkINAOTYLK_cjs.normalizeSlideSlots; }
|
|
394
387
|
});
|
|
395
388
|
Object.defineProperty(exports, "resolveHtmlTheme", {
|
|
396
389
|
enumerable: true,
|
|
397
|
-
get: function () { return
|
|
390
|
+
get: function () { return chunkINAOTYLK_cjs.resolveHtmlTheme; }
|
|
398
391
|
});
|
|
399
|
-
Object.defineProperty(exports, "
|
|
392
|
+
Object.defineProperty(exports, "sanitizeSlideHtml", {
|
|
400
393
|
enumerable: true,
|
|
401
|
-
get: function () { return
|
|
394
|
+
get: function () { return chunkINAOTYLK_cjs.sanitizeSlideHtml; }
|
|
402
395
|
});
|
|
403
|
-
Object.defineProperty(exports, "
|
|
396
|
+
Object.defineProperty(exports, "validateBespokeSlideHtml", {
|
|
404
397
|
enumerable: true,
|
|
405
|
-
get: function () { return
|
|
398
|
+
get: function () { return chunkINAOTYLK_cjs.validateBespokeSlideHtml; }
|
|
406
399
|
});
|
|
407
|
-
Object.defineProperty(exports, "
|
|
400
|
+
Object.defineProperty(exports, "FRONTEND_SLIDES_CORE_RULES", {
|
|
408
401
|
enumerable: true,
|
|
409
|
-
get: function () { return
|
|
402
|
+
get: function () { return chunkHSVXH7DD_cjs.FRONTEND_SLIDES_CORE_RULES; }
|
|
410
403
|
});
|
|
411
|
-
Object.defineProperty(exports, "
|
|
404
|
+
Object.defineProperty(exports, "STYLE_PRESETS", {
|
|
405
|
+
enumerable: true,
|
|
406
|
+
get: function () { return chunkHSVXH7DD_cjs.STYLE_PRESETS; }
|
|
407
|
+
});
|
|
408
|
+
Object.defineProperty(exports, "TEMPLATES_CATALOG", {
|
|
409
|
+
enumerable: true,
|
|
410
|
+
get: function () { return chunkHSVXH7DD_cjs.TEMPLATES_CATALOG; }
|
|
411
|
+
});
|
|
412
|
+
Object.defineProperty(exports, "VIEWPORT_BASE_CSS", {
|
|
413
|
+
enumerable: true,
|
|
414
|
+
get: function () { return chunkHSVXH7DD_cjs.VIEWPORT_BASE_CSS; }
|
|
415
|
+
});
|
|
416
|
+
Object.defineProperty(exports, "frontendSlidesTools", {
|
|
417
|
+
enumerable: true,
|
|
418
|
+
get: function () { return chunkHSVXH7DD_cjs.frontendSlidesTools; }
|
|
419
|
+
});
|
|
420
|
+
Object.defineProperty(exports, "getFrontendSlidesSkillPrompt", {
|
|
421
|
+
enumerable: true,
|
|
422
|
+
get: function () { return chunkHSVXH7DD_cjs.getFrontendSlidesSkillPrompt; }
|
|
423
|
+
});
|
|
424
|
+
Object.defineProperty(exports, "getSlideStylePresetSchema", {
|
|
425
|
+
enumerable: true,
|
|
426
|
+
get: function () { return chunkHSVXH7DD_cjs.getSlideStylePresetSchema; }
|
|
427
|
+
});
|
|
428
|
+
Object.defineProperty(exports, "getStylePreset", {
|
|
429
|
+
enumerable: true,
|
|
430
|
+
get: function () { return chunkHSVXH7DD_cjs.getStylePreset; }
|
|
431
|
+
});
|
|
432
|
+
Object.defineProperty(exports, "getStylePresetById", {
|
|
433
|
+
enumerable: true,
|
|
434
|
+
get: function () { return chunkHSVXH7DD_cjs.getStylePresetById; }
|
|
435
|
+
});
|
|
436
|
+
Object.defineProperty(exports, "getTemplatesCatalog", {
|
|
437
|
+
enumerable: true,
|
|
438
|
+
get: function () { return chunkHSVXH7DD_cjs.getTemplatesCatalog; }
|
|
439
|
+
});
|
|
440
|
+
Object.defineProperty(exports, "querySlideTemplatesSchema", {
|
|
441
|
+
enumerable: true,
|
|
442
|
+
get: function () { return chunkHSVXH7DD_cjs.querySlideTemplatesSchema; }
|
|
443
|
+
});
|
|
444
|
+
Object.defineProperty(exports, "searchTemplates", {
|
|
412
445
|
enumerable: true,
|
|
413
|
-
get: function () { return
|
|
446
|
+
get: function () { return chunkHSVXH7DD_cjs.searchTemplates; }
|
|
414
447
|
});
|
|
415
448
|
exports.cleanHexColor = cleanHexColor;
|
|
416
449
|
exports.convertMarkdownToPptx = convertMarkdownToPptx;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine.ts","../src/core/export/pptx-converter.ts"],"names":["renderSlide","renderSlideAsync","resolveTheme","generateScopedCss","splitMarkdownSlides"],"mappings":"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","file":"index.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════════════════════\n// Engine Factory — createEngine() for advanced usage\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { SlideEngine, SlideEngineConfig, SlideRenderOptions, SlideRenderResult, SlideRenderAsyncResult, BuiltInTheme, SlideTheme } from './types.js';\nimport { renderSlide, renderSlideAsync } from './core/render.js';\nimport { resolveTheme, generateScopedCss } from './themes/index.js';\n\n/**\n * Create a slide engine instance with default configuration.\n *\n * @example\n * ```ts\n * const engine = createEngine({ theme: 'dark' });\n *\n * // Synchronous\n * const result = engine.render(markdown);\n *\n * // Async (with Shiki highlighting)\n * const fullResult = await engine.renderAsync(markdown);\n *\n * // Get theme CSS independently\n * const css = engine.getThemeCss('navy');\n * ```\n */\nexport function createEngine(config: SlideEngineConfig = {}): SlideEngine {\n const defaultTheme = config.theme ?? 'dark';\n const defaultEnableShiki = config.enableShiki ?? true;\n const defaultEnableMermaid = config.enableMermaid ?? true;\n\n function mergeOptions(options?: SlideRenderOptions): SlideRenderOptions {\n return {\n theme: options?.theme ?? defaultTheme,\n enableShiki: options?.enableShiki ?? defaultEnableShiki,\n enableMermaid: options?.enableMermaid ?? defaultEnableMermaid,\n containerId: options?.containerId,\n };\n }\n\n return {\n render: (markdown: string, options?: SlideRenderOptions): SlideRenderResult => {\n return renderSlide(markdown, mergeOptions(options));\n },\n\n renderAsync: async (markdown: string, options?: SlideRenderOptions): Promise<SlideRenderAsyncResult> => {\n return renderSlideAsync(markdown, mergeOptions(options));\n },\n\n getThemeCss: (theme: BuiltInTheme | SlideTheme, containerId?: string): string => {\n const resolved = resolveTheme(theme);\n return generateScopedCss(resolved, containerId);\n },\n };\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// pptx-converter.ts — Pure JS converter: Marp Markdown + Layouts → Native PPTX\n//\n// Generates native, fully editable PowerPoint textboxes and shapes\n// that open directly in PowerPoint, Keynote, and Google Slides.\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport { renderSlide } from '../render.js';\nimport { splitMarkdownSlides } from '../layout/serializer.js';\nimport type { LayoutBoxConfig } from '../../types.js';\n\nexport interface PptxExportOptions {\n title?: string;\n author?: string;\n theme?: 'dark' | 'light' | 'navy';\n}\n\n/**\n * Convert font size string ('2.5rem', '32px', '24pt') to pt number for PPTX\n */\nexport function parseFontSizeToPt(sizeStr?: string, defaultPt: number = 18): number {\n if (!sizeStr) return defaultPt;\n const trimmed = sizeStr.trim().toLowerCase();\n\n if (trimmed.endsWith('rem')) {\n const rem = parseFloat(trimmed);\n return Math.round(rem * 16 * 0.75) || defaultPt;\n }\n if (trimmed.endsWith('px')) {\n const px = parseFloat(trimmed);\n return Math.round(px * 0.75) || defaultPt;\n }\n if (trimmed.endsWith('pt')) {\n return parseInt(trimmed, 10) || defaultPt;\n }\n const num = parseFloat(trimmed);\n return !isNaN(num) ? Math.round(num) : defaultPt;\n}\n\n/**\n * Clean hex color string (removes leading #)\n */\nexport function cleanHexColor(colorStr?: string, defaultHex: string = '1F2937'): string {\n if (!colorStr) return defaultHex;\n const hex = colorStr.trim().replace(/^#/, '');\n if (/^[0-9A-Fa-f]{6}$/.test(hex)) return hex.toUpperCase();\n if (/^[0-9A-Fa-f]{3}$/.test(hex)) {\n return hex.split('').map(c => c + c).join('').toUpperCase();\n }\n return defaultHex;\n}\n\n/**\n * Extract slide-level background color directive from slide markdown\n */\nfunction extractSlideBgColor(slideMd: string, defaultColor: string): string {\n const match = slideMd.match(/<!--\\s*_backgroundColor:\\s*([^\\s>]+)\\s*-->/i);\n if (match && match[1]) {\n return cleanHexColor(match[1], defaultColor);\n }\n return defaultColor;\n}\n\n/**\n * Parse plain markdown lines into simple text items\n */\ninterface SimpleBlock {\n type: 'heading' | 'paragraph' | 'bullet' | 'code';\n level?: number;\n text: string;\n}\n\nfunction parseSimpleMarkdown(md: string): SimpleBlock[] {\n const lines = md.split('\\n');\n const blocks: SimpleBlock[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (trimmed.startsWith('<!--') && trimmed.endsWith('-->')) continue;\n\n // Heading\n const hMatch = trimmed.match(/^(#{1,6})\\s+(.*)$/);\n if (hMatch && hMatch[1] && hMatch[2]) {\n blocks.push({\n type: 'heading',\n level: hMatch[1].length,\n text: hMatch[2].replace(/\\*\\*(.*?)\\*\\*/g, '$1').replace(/\\*(.*?)\\*/g, '$1'),\n });\n continue;\n }\n\n // Bullet\n if (/^[-*+]\\s+/.test(trimmed)) {\n blocks.push({\n type: 'bullet',\n text: trimmed.replace(/^[-*+]\\s+/, '').replace(/\\*\\*(.*?)\\*\\*/g, '$1'),\n });\n continue;\n }\n\n // Paragraph\n blocks.push({\n type: 'paragraph',\n text: trimmed.replace(/\\*\\*(.*?)\\*\\*/g, '$1').replace(/\\*(.*?)\\*/g, '$1'),\n });\n }\n\n return blocks;\n}\n\n/**\n * Convert Marp Markdown presentation to an editable PPTX file using pptxgenjs.\n *\n * Each box in `layout.boxes` maps directly from 1280x720 canvas px to 13.33 x 7.5 inch PPTX coordinates.\n */\nexport async function convertMarkdownToPptx(\n markdown: string,\n options?: PptxExportOptions\n): Promise<Uint8Array> {\n const PptxGenModule = await import('pptxgenjs');\n const PptxGenClass = (PptxGenModule as any).default || PptxGenModule;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const pptx = new (PptxGenClass as any)();\n\n pptx.layout = 'LAYOUT_WIDE'; // 16:9 aspect ratio (13.33 x 7.5 inches)\n if (options?.title) pptx.title = options.title;\n if (options?.author) pptx.author = options.author;\n\n const renderResult = renderSlide(markdown);\n const { slides } = splitMarkdownSlides(markdown);\n\n const isDark = options?.theme !== 'light';\n const defaultBg = isDark ? '14151B' : 'FFFFFF';\n const defaultText = isDark ? 'F1F5F9' : '1E293B';\n const defaultHeading = isDark ? '38BDF8' : '0284C7';\n\n // Coordinate scales from 1280x720 to 13.33x7.5 inches\n const scaleX = 13.33 / 1280;\n const scaleY = 7.5 / 720;\n\n slides.forEach((slideMd, slideIndex) => {\n const pptxSlide = pptx.addSlide();\n\n // 1. Set background\n const bgColor = extractSlideBgColor(slideMd, defaultBg);\n pptxSlide.background = { color: bgColor };\n\n // 2. Add Speaker / Teacher Notes\n const notes = renderResult.notes?.[slideIndex];\n if (notes && notes.length > 0) {\n pptxSlide.addNotes(notes.join('\\n\\n'));\n }\n\n // 3. Layout boxes\n const layout = renderResult.layouts?.[slideIndex];\n const blocks = parseSimpleMarkdown(slideMd);\n\n if (layout && layout.boxes && layout.boxes.length > 0) {\n // Freeform layout: Render boxes with exact pos\n for (const box of layout.boxes) {\n const [x, y, w, h] = box.pos;\n const xInch = Math.max(0, x * scaleX);\n const yInch = Math.max(0, y * scaleY);\n const wInch = Math.min(13.33 - xInch, w * scaleX);\n const hInch = Math.min(7.5 - yInch, h * scaleY);\n\n // Find corresponding text\n let contentText = '';\n if (box.target === 'h1') {\n contentText = blocks.find(b => b.type === 'heading' && b.level === 1)?.text || 'Heading';\n } else if (box.target === 'h2') {\n contentText = blocks.find(b => b.type === 'heading' && b.level === 2)?.text || 'Subheading';\n } else {\n contentText = blocks.find(b => b.type === 'paragraph' || b.type === 'bullet')?.text || 'Content block';\n }\n\n const fontSizePt = parseFontSizeToPt(box.fontSize, box.target === 'h1' ? 28 : 16);\n const colorHex = cleanHexColor(box.color, box.target === 'h1' ? defaultHeading : defaultText);\n\n pptxSlide.addText(contentText, {\n x: xInch,\n y: yInch,\n w: wInch,\n h: hInch,\n fontSize: fontSizePt,\n color: colorHex,\n align: box.textAlign ?? 'left',\n bold: box.target?.startsWith('h') ?? false,\n fontFace: 'Arial',\n });\n }\n } else {\n // Flow layout fallback: Stack headings and paragraphs nicely\n let currentY = 0.8;\n const marginX = 1.0;\n const contentWidth = 11.33;\n\n for (const block of blocks) {\n if (block.type === 'heading') {\n const fontSize = block.level === 1 ? 30 : block.level === 2 ? 22 : 18;\n const color = block.level === 1 ? defaultHeading : defaultText;\n\n pptxSlide.addText(block.text, {\n x: marginX,\n y: currentY,\n w: contentWidth,\n h: 0.8,\n fontSize,\n color,\n bold: true,\n fontFace: 'Arial',\n });\n currentY += 0.9;\n } else if (block.type === 'bullet') {\n pptxSlide.addText(block.text, {\n x: marginX + 0.3,\n y: currentY,\n w: contentWidth - 0.3,\n h: 0.45,\n fontSize: 15,\n color: defaultText,\n bullet: true,\n fontFace: 'Arial',\n });\n currentY += 0.5;\n } else {\n pptxSlide.addText(block.text, {\n x: marginX,\n y: currentY,\n w: contentWidth,\n h: 0.5,\n fontSize: 15,\n color: defaultText,\n fontFace: 'Arial',\n });\n currentY += 0.55;\n }\n\n if (currentY > 6.5) break; // Prevent vertical overflow off slide\n }\n }\n });\n\n const pptxArray = (await pptx.write({ outputType: 'arraybuffer' })) as ArrayBuffer;\n return new Uint8Array(pptxArray);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/engine.ts","../src/core/export/pptx-converter.ts"],"names":["renderSlide","renderSlideAsync","resolveTheme","generateScopedCss","splitMarkdownSlides"],"mappings":";;;;;;;;AAyBO,SAAS,YAAA,CAAa,MAAA,GAA4B,EAAC,EAAgB;AACxE,EAAA,MAAM,YAAA,GAAe,OAAO,KAAA,IAAS,MAAA;AACrC,EAAA,MAAM,kBAAA,GAAqB,OAAO,WAAA,IAAe,IAAA;AACjD,EAAA,MAAM,oBAAA,GAAuB,OAAO,aAAA,IAAiB,IAAA;AAErD,EAAA,SAAS,aAAa,OAAA,EAAkD;AACtE,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,SAAS,KAAA,IAAS,YAAA;AAAA,MACzB,WAAA,EAAa,SAAS,WAAA,IAAe,kBAAA;AAAA,MACrC,aAAA,EAAe,SAAS,aAAA,IAAiB,oBAAA;AAAA,MACzC,aAAa,OAAA,EAAS;AAAA,KACxB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,CAAC,QAAA,EAAkB,OAAA,KAAoD;AAC7E,MAAA,OAAOA,6BAAA,CAAY,QAAA,EAAU,YAAA,CAAa,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IAEA,WAAA,EAAa,OAAO,QAAA,EAAkB,OAAA,KAAkE;AACtG,MAAA,OAAOC,kCAAA,CAAiB,QAAA,EAAU,YAAA,CAAa,OAAO,CAAC,CAAA;AAAA,IACzD,CAAA;AAAA,IAEA,WAAA,EAAa,CAAC,KAAA,EAAkC,WAAA,KAAiC;AAC/E,MAAA,MAAM,QAAA,GAAWC,+BAAa,KAAK,CAAA;AACnC,MAAA,OAAOC,oCAAAA,CAAkB,UAAU,WAAW,CAAA;AAAA,IAChD;AAAA,GACF;AACF;;;ACjCO,SAAS,iBAAA,CAAkB,OAAA,EAAkB,SAAA,GAAoB,EAAA,EAAY;AAClF,EAAA,IAAI,CAAC,SAAS,OAAO,SAAA;AACrB,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,EAAK,CAAE,WAAA,EAAY;AAE3C,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,IAAA,MAAM,GAAA,GAAM,WAAW,OAAO,CAAA;AAC9B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,EAAA,GAAK,IAAI,CAAA,IAAK,SAAA;AAAA,EACxC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,EAAA,GAAK,WAAW,OAAO,CAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,IAAI,CAAA,IAAK,SAAA;AAAA,EAClC;AACA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,IAAA,OAAO,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA,IAAK,SAAA;AAAA,EAClC;AACA,EAAA,MAAM,GAAA,GAAM,WAAW,OAAO,CAAA;AAC9B,EAAA,OAAO,CAAC,KAAA,CAAM,GAAG,IAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,SAAA;AACzC;AAKO,SAAS,aAAA,CAAc,QAAA,EAAmB,UAAA,GAAqB,QAAA,EAAkB;AACtF,EAAA,IAAI,CAAC,UAAU,OAAO,UAAA;AACtB,EAAA,MAAM,MAAM,QAAA,CAAS,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC5C,EAAA,IAAI,mBAAmB,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,IAAI,WAAA,EAAY;AACzD,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,GAAG,CAAA,EAAG;AAChC,IAAA,OAAO,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,GAAI,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CAAE,WAAA,EAAY;AAAA,EAC5D;AACA,EAAA,OAAO,UAAA;AACT;AAKA,SAAS,mBAAA,CAAoB,SAAiB,YAAA,EAA8B;AAC1E,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,6CAA6C,CAAA;AACzE,EAAA,IAAI,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,EAAG;AACrB,IAAA,OAAO,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA,EAAG,YAAY,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,YAAA;AACT;AAWA,SAAS,oBAAoB,EAAA,EAA2B;AACtD,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,IAAI,CAAA;AAC3B,EAAA,MAAM,SAAwB,EAAC;AAE/B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,QAAQ,UAAA,CAAW,MAAM,KAAK,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAG3D,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,mBAAmB,CAAA;AAChD,IAAA,IAAI,UAAU,MAAA,CAAO,CAAC,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,EAAG;AACpC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA;AAAA,QACjB,IAAA,EAAM,MAAA,CAAO,CAAC,CAAA,CAAE,OAAA,CAAQ,kBAAkB,IAAI,CAAA,CAAE,OAAA,CAAQ,YAAA,EAAc,IAAI;AAAA,OAC3E,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA,EAAG;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,QAAQ,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA,CAAE,OAAA,CAAQ,kBAAkB,IAAI;AAAA,OACtE,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM,QAAQ,OAAA,CAAQ,gBAAA,EAAkB,IAAI,CAAA,CAAE,OAAA,CAAQ,cAAc,IAAI;AAAA,KACzE,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,MAAA;AACT;AAOA,eAAsB,qBAAA,CACpB,UACA,OAAA,EACqB;AACrB,EAAA,MAAM,aAAA,GAAgB,MAAM,OAAO,WAAW,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAgB,cAAsB,OAAA,IAAW,aAAA;AAEvD,EAAA,MAAM,IAAA,GAAO,IAAK,YAAA,EAAqB;AAEvC,EAAA,IAAA,CAAK,MAAA,GAAS,aAAA;AACd,EAAA,IAAI,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA;AACzC,EAAA,IAAI,OAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA;AAE3C,EAAA,MAAM,YAAA,GAAeH,8BAAY,QAAQ,CAAA;AACzC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAII,qCAAA,CAAoB,QAAQ,CAAA;AAE/C,EAAA,MAAM,MAAA,GAAS,SAAS,KAAA,KAAU,OAAA;AAClC,EAAA,MAAM,SAAA,GAAY,SAAS,QAAA,GAAW,QAAA;AACtC,EAAA,MAAM,WAAA,GAAc,SAAS,QAAA,GAAW,QAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,SAAS,QAAA,GAAW,QAAA;AAG3C,EAAA,MAAM,SAAS,KAAA,GAAQ,IAAA;AACvB,EAAA,MAAM,SAAS,GAAA,GAAM,GAAA;AAErB,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,OAAA,EAAS,UAAA,KAAe;AACtC,IAAA,MAAM,SAAA,GAAY,KAAK,QAAA,EAAS;AAGhC,IAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,EAAS,SAAS,CAAA;AACtD,IAAA,SAAA,CAAU,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAQ;AAGxC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,GAAQ,UAAU,CAAA;AAC7C,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC7B,MAAA,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IACvC;AAGA,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,GAAU,UAAU,CAAA;AAChD,IAAA,MAAM,MAAA,GAAS,oBAAoB,OAAO,CAAA;AAE1C,IAAA,IAAI,UAAU,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAErD,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,KAAA,EAAO;AAC9B,QAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,IAAI,GAAA,CAAI,GAAA;AACzB,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,MAAM,CAAA;AACpC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,MAAM,CAAA;AACpC,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,KAAA,EAAO,IAAI,MAAM,CAAA;AAChD,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,IAAI,MAAM,CAAA;AAG9C,QAAA,IAAI,WAAA,GAAc,EAAA;AAClB,QAAA,IAAI,GAAA,CAAI,WAAW,IAAA,EAAM;AACvB,UAAA,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,KAAS,aAAa,CAAA,CAAE,KAAA,KAAU,CAAC,CAAA,EAAG,IAAA,IAAQ,SAAA;AAAA,QACjF,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,IAAA,EAAM;AAC9B,UAAA,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,KAAS,aAAa,CAAA,CAAE,KAAA,KAAU,CAAC,CAAA,EAAG,IAAA,IAAQ,YAAA;AAAA,QACjF,CAAA,MAAO;AACL,UAAA,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,KAAS,eAAe,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA,EAAG,IAAA,IAAQ,eAAA;AAAA,QACzF;AAEA,QAAA,MAAM,UAAA,GAAa,kBAAkB,GAAA,CAAI,QAAA,EAAU,IAAI,MAAA,KAAW,IAAA,GAAO,KAAK,EAAE,CAAA;AAChF,QAAA,MAAM,QAAA,GAAW,cAAc,GAAA,CAAI,KAAA,EAAO,IAAI,MAAA,KAAW,IAAA,GAAO,iBAAiB,WAAW,CAAA;AAE5F,QAAA,SAAA,CAAU,QAAQ,WAAA,EAAa;AAAA,UAC7B,CAAA,EAAG,KAAA;AAAA,UACH,CAAA,EAAG,KAAA;AAAA,UACH,CAAA,EAAG,KAAA;AAAA,UACH,CAAA,EAAG,KAAA;AAAA,UACH,QAAA,EAAU,UAAA;AAAA,UACV,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO,IAAI,SAAA,IAAa,MAAA;AAAA,UACxB,IAAA,EAAM,GAAA,CAAI,MAAA,EAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,KAAA;AAAA,UACrC,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,QAAA,GAAW,GAAA;AACf,MAAA,MAAM,OAAA,GAAU,CAAA;AAChB,MAAA,MAAM,YAAA,GAAe,KAAA;AAErB,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,UAAA,MAAM,QAAA,GAAW,MAAM,KAAA,KAAU,CAAA,GAAI,KAAK,KAAA,CAAM,KAAA,KAAU,IAAI,EAAA,GAAK,EAAA;AACnE,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,KAAU,CAAA,GAAI,cAAA,GAAiB,WAAA;AAEnD,UAAA,SAAA,CAAU,OAAA,CAAQ,MAAM,IAAA,EAAM;AAAA,YAC5B,CAAA,EAAG,OAAA;AAAA,YACH,CAAA,EAAG,QAAA;AAAA,YACH,CAAA,EAAG,YAAA;AAAA,YACH,CAAA,EAAG,GAAA;AAAA,YACH,QAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA,EAAM,IAAA;AAAA,YACN,QAAA,EAAU;AAAA,WACX,CAAA;AACD,UAAA,QAAA,IAAY,GAAA;AAAA,QACd,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClC,UAAA,SAAA,CAAU,OAAA,CAAQ,MAAM,IAAA,EAAM;AAAA,YAC5B,GAAG,OAAA,GAAU,GAAA;AAAA,YACb,CAAA,EAAG,QAAA;AAAA,YACH,GAAG,YAAA,GAAe,GAAA;AAAA,YAClB,CAAA,EAAG,IAAA;AAAA,YACH,QAAA,EAAU,EAAA;AAAA,YACV,KAAA,EAAO,WAAA;AAAA,YACP,MAAA,EAAQ,IAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACX,CAAA;AACD,UAAA,QAAA,IAAY,GAAA;AAAA,QACd,CAAA,MAAO;AACL,UAAA,SAAA,CAAU,OAAA,CAAQ,MAAM,IAAA,EAAM;AAAA,YAC5B,CAAA,EAAG,OAAA;AAAA,YACH,CAAA,EAAG,QAAA;AAAA,YACH,CAAA,EAAG,YAAA;AAAA,YACH,CAAA,EAAG,GAAA;AAAA,YACH,QAAA,EAAU,EAAA;AAAA,YACV,KAAA,EAAO,WAAA;AAAA,YACP,QAAA,EAAU;AAAA,WACX,CAAA;AACD,UAAA,QAAA,IAAY,IAAA;AAAA,QACd;AAEA,QAAA,IAAI,WAAW,GAAA,EAAK;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,YAAa,MAAM,IAAA,CAAK,MAAM,EAAE,UAAA,EAAY,eAAe,CAAA;AACjE,EAAA,OAAO,IAAI,WAAW,SAAS,CAAA;AACjC","file":"index.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════════════════════\n// Engine Factory — createEngine() for advanced usage\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { SlideEngine, SlideEngineConfig, SlideRenderOptions, SlideRenderResult, SlideRenderAsyncResult, BuiltInTheme, SlideTheme } from './types.js';\nimport { renderSlide, renderSlideAsync } from './core/render.js';\nimport { resolveTheme, generateScopedCss } from './themes/index.js';\n\n/**\n * Create a slide engine instance with default configuration.\n *\n * @example\n * ```ts\n * const engine = createEngine({ theme: 'dark' });\n *\n * // Synchronous\n * const result = engine.render(markdown);\n *\n * // Async (with Shiki highlighting)\n * const fullResult = await engine.renderAsync(markdown);\n *\n * // Get theme CSS independently\n * const css = engine.getThemeCss('navy');\n * ```\n */\nexport function createEngine(config: SlideEngineConfig = {}): SlideEngine {\n const defaultTheme = config.theme ?? 'dark';\n const defaultEnableShiki = config.enableShiki ?? true;\n const defaultEnableMermaid = config.enableMermaid ?? true;\n\n function mergeOptions(options?: SlideRenderOptions): SlideRenderOptions {\n return {\n theme: options?.theme ?? defaultTheme,\n enableShiki: options?.enableShiki ?? defaultEnableShiki,\n enableMermaid: options?.enableMermaid ?? defaultEnableMermaid,\n containerId: options?.containerId,\n };\n }\n\n return {\n render: (markdown: string, options?: SlideRenderOptions): SlideRenderResult => {\n return renderSlide(markdown, mergeOptions(options));\n },\n\n renderAsync: async (markdown: string, options?: SlideRenderOptions): Promise<SlideRenderAsyncResult> => {\n return renderSlideAsync(markdown, mergeOptions(options));\n },\n\n getThemeCss: (theme: BuiltInTheme | SlideTheme, containerId?: string): string => {\n const resolved = resolveTheme(theme);\n return generateScopedCss(resolved, containerId);\n },\n };\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// pptx-converter.ts — Pure JS converter: Marp Markdown + Layouts → Native PPTX\n//\n// Generates native, fully editable PowerPoint textboxes and shapes\n// that open directly in PowerPoint, Keynote, and Google Slides.\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport { renderSlide } from '../render.js';\nimport { splitMarkdownSlides } from '../layout/serializer.js';\nimport type { LayoutBoxConfig } from '../../types.js';\n\nexport interface PptxExportOptions {\n title?: string;\n author?: string;\n theme?: 'dark' | 'light' | 'navy';\n}\n\n/**\n * Convert font size string ('2.5rem', '32px', '24pt') to pt number for PPTX\n */\nexport function parseFontSizeToPt(sizeStr?: string, defaultPt: number = 18): number {\n if (!sizeStr) return defaultPt;\n const trimmed = sizeStr.trim().toLowerCase();\n\n if (trimmed.endsWith('rem')) {\n const rem = parseFloat(trimmed);\n return Math.round(rem * 16 * 0.75) || defaultPt;\n }\n if (trimmed.endsWith('px')) {\n const px = parseFloat(trimmed);\n return Math.round(px * 0.75) || defaultPt;\n }\n if (trimmed.endsWith('pt')) {\n return parseInt(trimmed, 10) || defaultPt;\n }\n const num = parseFloat(trimmed);\n return !isNaN(num) ? Math.round(num) : defaultPt;\n}\n\n/**\n * Clean hex color string (removes leading #)\n */\nexport function cleanHexColor(colorStr?: string, defaultHex: string = '1F2937'): string {\n if (!colorStr) return defaultHex;\n const hex = colorStr.trim().replace(/^#/, '');\n if (/^[0-9A-Fa-f]{6}$/.test(hex)) return hex.toUpperCase();\n if (/^[0-9A-Fa-f]{3}$/.test(hex)) {\n return hex.split('').map(c => c + c).join('').toUpperCase();\n }\n return defaultHex;\n}\n\n/**\n * Extract slide-level background color directive from slide markdown\n */\nfunction extractSlideBgColor(slideMd: string, defaultColor: string): string {\n const match = slideMd.match(/<!--\\s*_backgroundColor:\\s*([^\\s>]+)\\s*-->/i);\n if (match && match[1]) {\n return cleanHexColor(match[1], defaultColor);\n }\n return defaultColor;\n}\n\n/**\n * Parse plain markdown lines into simple text items\n */\ninterface SimpleBlock {\n type: 'heading' | 'paragraph' | 'bullet' | 'code';\n level?: number;\n text: string;\n}\n\nfunction parseSimpleMarkdown(md: string): SimpleBlock[] {\n const lines = md.split('\\n');\n const blocks: SimpleBlock[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (trimmed.startsWith('<!--') && trimmed.endsWith('-->')) continue;\n\n // Heading\n const hMatch = trimmed.match(/^(#{1,6})\\s+(.*)$/);\n if (hMatch && hMatch[1] && hMatch[2]) {\n blocks.push({\n type: 'heading',\n level: hMatch[1].length,\n text: hMatch[2].replace(/\\*\\*(.*?)\\*\\*/g, '$1').replace(/\\*(.*?)\\*/g, '$1'),\n });\n continue;\n }\n\n // Bullet\n if (/^[-*+]\\s+/.test(trimmed)) {\n blocks.push({\n type: 'bullet',\n text: trimmed.replace(/^[-*+]\\s+/, '').replace(/\\*\\*(.*?)\\*\\*/g, '$1'),\n });\n continue;\n }\n\n // Paragraph\n blocks.push({\n type: 'paragraph',\n text: trimmed.replace(/\\*\\*(.*?)\\*\\*/g, '$1').replace(/\\*(.*?)\\*/g, '$1'),\n });\n }\n\n return blocks;\n}\n\n/**\n * Convert Marp Markdown presentation to an editable PPTX file using pptxgenjs.\n *\n * Each box in `layout.boxes` maps directly from 1280x720 canvas px to 13.33 x 7.5 inch PPTX coordinates.\n */\nexport async function convertMarkdownToPptx(\n markdown: string,\n options?: PptxExportOptions\n): Promise<Uint8Array> {\n const PptxGenModule = await import('pptxgenjs');\n const PptxGenClass = (PptxGenModule as any).default || PptxGenModule;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const pptx = new (PptxGenClass as any)();\n\n pptx.layout = 'LAYOUT_WIDE'; // 16:9 aspect ratio (13.33 x 7.5 inches)\n if (options?.title) pptx.title = options.title;\n if (options?.author) pptx.author = options.author;\n\n const renderResult = renderSlide(markdown);\n const { slides } = splitMarkdownSlides(markdown);\n\n const isDark = options?.theme !== 'light';\n const defaultBg = isDark ? '14151B' : 'FFFFFF';\n const defaultText = isDark ? 'F1F5F9' : '1E293B';\n const defaultHeading = isDark ? '38BDF8' : '0284C7';\n\n // Coordinate scales from 1280x720 to 13.33x7.5 inches\n const scaleX = 13.33 / 1280;\n const scaleY = 7.5 / 720;\n\n slides.forEach((slideMd, slideIndex) => {\n const pptxSlide = pptx.addSlide();\n\n // 1. Set background\n const bgColor = extractSlideBgColor(slideMd, defaultBg);\n pptxSlide.background = { color: bgColor };\n\n // 2. Add Speaker / Teacher Notes\n const notes = renderResult.notes?.[slideIndex];\n if (notes && notes.length > 0) {\n pptxSlide.addNotes(notes.join('\\n\\n'));\n }\n\n // 3. Layout boxes\n const layout = renderResult.layouts?.[slideIndex];\n const blocks = parseSimpleMarkdown(slideMd);\n\n if (layout && layout.boxes && layout.boxes.length > 0) {\n // Freeform layout: Render boxes with exact pos\n for (const box of layout.boxes) {\n const [x, y, w, h] = box.pos;\n const xInch = Math.max(0, x * scaleX);\n const yInch = Math.max(0, y * scaleY);\n const wInch = Math.min(13.33 - xInch, w * scaleX);\n const hInch = Math.min(7.5 - yInch, h * scaleY);\n\n // Find corresponding text\n let contentText = '';\n if (box.target === 'h1') {\n contentText = blocks.find(b => b.type === 'heading' && b.level === 1)?.text || 'Heading';\n } else if (box.target === 'h2') {\n contentText = blocks.find(b => b.type === 'heading' && b.level === 2)?.text || 'Subheading';\n } else {\n contentText = blocks.find(b => b.type === 'paragraph' || b.type === 'bullet')?.text || 'Content block';\n }\n\n const fontSizePt = parseFontSizeToPt(box.fontSize, box.target === 'h1' ? 28 : 16);\n const colorHex = cleanHexColor(box.color, box.target === 'h1' ? defaultHeading : defaultText);\n\n pptxSlide.addText(contentText, {\n x: xInch,\n y: yInch,\n w: wInch,\n h: hInch,\n fontSize: fontSizePt,\n color: colorHex,\n align: box.textAlign ?? 'left',\n bold: box.target?.startsWith('h') ?? false,\n fontFace: 'Arial',\n });\n }\n } else {\n // Flow layout fallback: Stack headings and paragraphs nicely\n let currentY = 0.8;\n const marginX = 1.0;\n const contentWidth = 11.33;\n\n for (const block of blocks) {\n if (block.type === 'heading') {\n const fontSize = block.level === 1 ? 30 : block.level === 2 ? 22 : 18;\n const color = block.level === 1 ? defaultHeading : defaultText;\n\n pptxSlide.addText(block.text, {\n x: marginX,\n y: currentY,\n w: contentWidth,\n h: 0.8,\n fontSize,\n color,\n bold: true,\n fontFace: 'Arial',\n });\n currentY += 0.9;\n } else if (block.type === 'bullet') {\n pptxSlide.addText(block.text, {\n x: marginX + 0.3,\n y: currentY,\n w: contentWidth - 0.3,\n h: 0.45,\n fontSize: 15,\n color: defaultText,\n bullet: true,\n fontFace: 'Arial',\n });\n currentY += 0.5;\n } else {\n pptxSlide.addText(block.text, {\n x: marginX,\n y: currentY,\n w: contentWidth,\n h: 0.5,\n fontSize: 15,\n color: defaultText,\n fontFace: 'Arial',\n });\n currentY += 0.55;\n }\n\n if (currentY > 6.5) break; // Prevent vertical overflow off slide\n }\n }\n });\n\n const pptxArray = (await pptx.write({ outputType: 'arraybuffer' })) as ArrayBuffer;\n return new Uint8Array(pptxArray);\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
export { h as ClickCssOptions, f as ClickPostprocessResult, C as ClickPreprocessResult, j as countSlides, d as defineTheme, e as extractMaxClicks, g as generateClickCss, l as generateScopedCss, k as getThemeTokens, c as postprocessClicks, p as preprocessClicks, i as renderMarp, r as renderSlide, a as renderSlideAsync, b as resolveTheme } from './click-css-
|
|
2
|
-
import {
|
|
3
|
-
export { B as BuiltInTheme,
|
|
1
|
+
export { h as ClickCssOptions, f as ClickPostprocessResult, C as ClickPreprocessResult, j as countSlides, d as defineTheme, e as extractMaxClicks, g as generateClickCss, l as generateScopedCss, k as getThemeTokens, c as postprocessClicks, p as preprocessClicks, i as renderMarp, r as renderSlide, a as renderSlideAsync, b as resolveTheme } from './click-css-C8VciwZ6.cjs';
|
|
2
|
+
import { e as SlideEngineConfig, f as SlideEngine, T as ThemeTokens, M as MermaidBlock, S as SlideLayoutData } from './types-CvxCxWus.cjs';
|
|
3
|
+
export { B as BuiltInTheme, L as LayoutBoxConfig, c as SlideRenderAsyncResult, a as SlideRenderOptions, b as SlideRenderResult, d as SlideTheme } from './types-CvxCxWus.cjs';
|
|
4
4
|
import { Highlighter } from 'shiki';
|
|
5
|
-
export { a as SLIDE_LAYOUT_PRESETS, S as SlideLayoutCategory, c as SlideLayoutPreset, g as getSlideLayoutPresetById, b as getSlideLayoutPresetsByCategory } from './presets-
|
|
6
|
-
|
|
5
|
+
export { a as SLIDE_LAYOUT_PRESETS, S as SlideLayoutCategory, c as SlideLayoutPreset, g as getSlideLayoutPresetById, b as getSlideLayoutPresetsByCategory } from './presets-MIi91wZg.cjs';
|
|
6
|
+
import { c as HtmlThemeName, e as HtmlDeckTheme, b as HtmlLayoutPresetId, f as HtmlSlidePreset, a as HtmlDeckData, H as HtmlCompileOptions, C as CompiledHtmlDeckResult } from './types-k_eae8UV.cjs';
|
|
7
|
+
export { d as HtmlSlideSlotData, g as HtmlSlotDefinition } from './types-k_eae8UV.cjs';
|
|
8
|
+
export { FRONTEND_SLIDES_CORE_RULES, FrontendSlidesSkillOptions, STYLE_PRESETS, StylePresetItem, TEMPLATES_CATALOG, TemplateCatalogItem, VIEWPORT_BASE_CSS, frontendSlidesTools, getFrontendSlidesSkillPrompt, getSlideStylePresetSchema, getStylePreset, getStylePresetById, getTemplatesCatalog, querySlideTemplatesSchema, searchTemplates } from './skills/index.cjs';
|
|
7
9
|
import 'zod';
|
|
8
10
|
|
|
9
11
|
/**
|
|
@@ -177,11 +179,65 @@ interface GenerateHtmlShellOptions {
|
|
|
177
179
|
slideCount: number;
|
|
178
180
|
customHeadTags?: string;
|
|
179
181
|
deckId?: string;
|
|
182
|
+
/**
|
|
183
|
+
* Self-contained @font-face CSS (base64 woff2). When provided the shell emits
|
|
184
|
+
* NO external font links, so the deck renders with its typography on a machine
|
|
185
|
+
* with no network. Built by the Node-only `presentation-kit/node` entry
|
|
186
|
+
* (`loadEmbeddedFontFaceCss`) — the main entry stays fs-free for browsers.
|
|
187
|
+
*/
|
|
188
|
+
fontFaceCss?: string;
|
|
180
189
|
}
|
|
181
190
|
declare function generateHtmlShell(options: GenerateHtmlShellOptions): string;
|
|
182
191
|
|
|
183
192
|
declare function compileHtmlDeck(deckData: HtmlDeckData, options?: HtmlCompileOptions): CompiledHtmlDeckResult;
|
|
193
|
+
/**
|
|
194
|
+
* Highlights every `<pre ...><code class="language-xxx">` block in a compiled
|
|
195
|
+
* HTML deck with Shiki (vitesse-dark for dark themes, vitesse-light for light).
|
|
196
|
+
* Falls back to the input HTML unchanged when Shiki fails to load or a language
|
|
197
|
+
* is unsupported — the deck must never break because of highlighting.
|
|
198
|
+
*/
|
|
199
|
+
declare function highlightDeckCodeBlocks(html: string, scheme?: 'light' | 'dark'): Promise<string>;
|
|
200
|
+
/**
|
|
201
|
+
* Async compiler variant: identical to {@link compileHtmlDeck} but applies
|
|
202
|
+
* Shiki syntax highlighting to all code blocks (plan Task 4.2).
|
|
203
|
+
* Falls back gracefully to non-highlighted output when Shiki is unavailable.
|
|
204
|
+
*/
|
|
205
|
+
declare function compileHtmlDeckAsync(deckData: HtmlDeckData, options?: HtmlCompileOptions & {
|
|
206
|
+
highlight?: boolean;
|
|
207
|
+
}): Promise<CompiledHtmlDeckResult>;
|
|
184
208
|
|
|
185
209
|
declare function normalizeSlideSlots(slide: any): Record<string, any>;
|
|
186
210
|
|
|
187
|
-
|
|
211
|
+
interface SanitizedSlideHtml {
|
|
212
|
+
html: string;
|
|
213
|
+
/** Human-readable notes about what was stripped — surfaced to logs/repair prompts. */
|
|
214
|
+
removed: string[];
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Strips executable and externally-fetching content from authored slide markup.
|
|
218
|
+
* Idempotent: sanitizing sanitized output changes nothing.
|
|
219
|
+
*/
|
|
220
|
+
declare function sanitizeSlideHtml(raw: string): SanitizedSlideHtml;
|
|
221
|
+
interface BespokeSlideValidation {
|
|
222
|
+
valid: boolean;
|
|
223
|
+
issues: string[];
|
|
224
|
+
}
|
|
225
|
+
interface BespokeSlideContract {
|
|
226
|
+
/** Hard cap on authored characters — bounds prompt/token waste per slide. */
|
|
227
|
+
maxChars?: number;
|
|
228
|
+
/** Minimum characters of real content, i.e. not an empty shell. */
|
|
229
|
+
minChars?: number;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Fail-closed contract for authored slide markup. A slide that fails here must
|
|
233
|
+
* be rejected (or sent back for repair) — never compiled into the deck.
|
|
234
|
+
*/
|
|
235
|
+
declare function validateBespokeSlideHtml(raw: string, contract?: BespokeSlideContract): BespokeSlideValidation;
|
|
236
|
+
/** Wraps sanitized authored markup into the stage contract the deck shell expects. */
|
|
237
|
+
declare function buildBespokeSlideMarkup(raw: string): string;
|
|
238
|
+
|
|
239
|
+
declare const SLIDE_UTILITY_CSS: string;
|
|
240
|
+
/** Every class defined by {@link SLIDE_UTILITY_CSS} — used by the coverage guard. */
|
|
241
|
+
declare function listUtilityClasses(): string[];
|
|
242
|
+
|
|
243
|
+
export { type BespokeSlideContract, type BespokeSlideValidation, CompiledHtmlDeckResult, type GenerateHtmlShellOptions, HTML_SLIDE_PRESETS, HTML_THEMES, HtmlCompileOptions, HtmlDeckData, HtmlDeckTheme, HtmlLayoutPresetId, HtmlSlidePreset, HtmlThemeName, MermaidBlock, type PptxExportOptions, SLIDE_UTILITY_CSS, type SanitizedSlideHtml, SlideEngine, SlideEngineConfig, SlideLayoutData, ThemeTokens, buildBespokeSlideMarkup, cleanHexColor, compileHtmlDeck, compileHtmlDeckAsync, convertMarkdownToPptx, convertTextArrows, createEngine, darkThemeTokens, detectMermaidBlocks, extractLayoutsAndNotes, extractMarpSource, filterPresenterNotes, generateHtmlShell, generateLayoutCss, generateScopedCss as generateScopedCssFromTokens, getHighlighter, highlightCodeBlocks, highlightDeckCodeBlocks, isLayoutComment, lightThemeTokens, listUtilityClasses, navyThemeTokens, normalizeSlideSlots, parseFontSizeToPt, parseLayoutFromComment, removeSlideElementFromMarkdown, renderMermaidDiagrams, resolveHtmlTheme, sanitizeMermaidCode, sanitizeSlideHtml, serializeLayoutToComment, splitMarkdownSlides, updateSlideLayoutInMarkdown, updateSlideTextInMarkdown, validateBespokeSlideHtml };
|