mulmocast 2.1.40 → 2.2.1
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 +1 -1
- package/assets/schemas/html_prompt.json +60 -0
- package/assets/schemas/mulmo_script.json +283 -0
- package/assets/slide_themes/corporate.json +18 -0
- package/assets/slide_themes/creative.json +18 -0
- package/assets/slide_themes/dark.json +18 -0
- package/assets/slide_themes/minimal.json +18 -0
- package/assets/slide_themes/pop.json +18 -0
- package/assets/slide_themes/warm.json +18 -0
- package/assets/styles/akira_comic.json +22 -0
- package/assets/styles/ani.json +43 -0
- package/assets/styles/children_book.json +13 -0
- package/assets/styles/comic_strips.json +13 -0
- package/assets/styles/drslump_comic.json +22 -0
- package/assets/styles/ghibli_comic.json +22 -0
- package/assets/styles/ghibli_shorts.json +28 -0
- package/assets/styles/ghost_comic.json +29 -0
- package/assets/styles/leda.json +29 -0
- package/assets/styles/onepiece_comic.json +22 -0
- package/assets/styles/slide_corporate.json +30 -0
- package/assets/styles/slide_creative.json +30 -0
- package/assets/styles/slide_dark.json +30 -0
- package/assets/styles/slide_minimal.json +30 -0
- package/assets/styles/slide_pop.json +30 -0
- package/assets/styles/slide_warm.json +30 -0
- package/lib/actions/image_agents.d.ts +2 -1
- package/lib/actions/image_agents.js +3 -3
- package/lib/actions/images.d.ts +3 -1
- package/lib/actions/images.js +1 -0
- package/lib/data/index.d.ts +2 -0
- package/lib/data/index.js +2 -0
- package/lib/data/slideStyles.d.ts +206 -0
- package/lib/data/slideStyles.js +206 -0
- package/lib/data/slideThemes.d.ts +134 -0
- package/lib/data/slideThemes.js +134 -0
- package/lib/methods/mulmo_media_source.d.ts +1 -0
- package/lib/methods/mulmo_media_source.js +17 -3
- package/lib/slide/blocks.d.ts +2 -0
- package/lib/slide/blocks.js +54 -2
- package/lib/slide/index.d.ts +2 -2
- package/lib/slide/index.js +1 -1
- package/lib/slide/layouts/columns.js +4 -4
- package/lib/slide/layouts/comparison.js +4 -3
- package/lib/slide/layouts/grid.js +3 -3
- package/lib/slide/render.js +24 -1
- package/lib/slide/schema.d.ts +454 -0
- package/lib/slide/schema.js +19 -0
- package/lib/slide/utils.d.ts +12 -1
- package/lib/slide/utils.js +55 -2
- package/lib/types/schema.d.ts +448 -0
- package/lib/types/slide.d.ts +454 -0
- package/lib/types/slide.js +19 -0
- package/lib/types/type.d.ts +1 -0
- package/lib/utils/context.d.ts +182 -0
- package/lib/utils/html_render.js +44 -6
- package/lib/utils/image_plugins/slide.d.ts +14 -0
- package/lib/utils/image_plugins/slide.js +101 -2
- package/package.json +9 -2
- package/scripts/test/img_detector.png +0 -0
- package/scripts/test/img_higgs.png +0 -0
- package/scripts/test/img_lhc.png +0 -0
- package/scripts/test/test_slide_chart_mermaid.json +148 -0
- package/scripts/test/test_slide_image_ref.json +261 -0
- package/scripts/test/test_slide_image_ref_en.json +287 -0
package/lib/slide/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SlideTheme } from "./schema.js";
|
|
1
|
+
import type { SlideTheme, SlideLayout } from "./schema.js";
|
|
2
2
|
/** Escape HTML special characters */
|
|
3
3
|
export declare const escapeHtml: (s: string) => string;
|
|
4
4
|
/** Escape HTML and convert newlines to <br> */
|
|
@@ -30,3 +30,14 @@ export declare const slideHeader: (data: {
|
|
|
30
30
|
title: string;
|
|
31
31
|
subtitle?: string;
|
|
32
32
|
}) => string;
|
|
33
|
+
/** Generate a unique ID with the given prefix (e.g. "chart-0", "mermaid-1") */
|
|
34
|
+
export declare const generateSlideId: (prefix: string) => string;
|
|
35
|
+
/** Reset the ID counter (for testing) */
|
|
36
|
+
export declare const resetSlideIdCounter: () => void;
|
|
37
|
+
type BlockTypeFlags = {
|
|
38
|
+
hasChart: boolean;
|
|
39
|
+
hasMermaid: boolean;
|
|
40
|
+
};
|
|
41
|
+
/** Detect whether chart or mermaid content blocks exist in a slide */
|
|
42
|
+
export declare const detectBlockTypes: (slide: SlideLayout) => BlockTypeFlags;
|
|
43
|
+
export {};
|
package/lib/slide/utils.js
CHANGED
|
@@ -74,9 +74,9 @@ export const iconSquare = (icon, colorKey) => {
|
|
|
74
74
|
};
|
|
75
75
|
/** Render a card wrapper with accent top bar */
|
|
76
76
|
export const cardWrap = (accentColor, innerHtml, extraClass) => {
|
|
77
|
-
return `<div class="bg-d-card rounded-lg shadow-lg overflow-hidden flex flex-col ${sanitizeCssClass(extraClass || "")}">
|
|
77
|
+
return `<div class="bg-d-card rounded-lg shadow-lg overflow-hidden flex flex-col min-h-0 ${sanitizeCssClass(extraClass || "")}">
|
|
78
78
|
<div class="h-[3px] bg-${c(accentColor)} shrink-0"></div>
|
|
79
|
-
<div class="p-5 flex flex-col flex-1">
|
|
79
|
+
<div class="p-5 flex flex-col flex-1 min-h-0 overflow-hidden">
|
|
80
80
|
${innerHtml}
|
|
81
81
|
</div>
|
|
82
82
|
</div>`;
|
|
@@ -110,3 +110,56 @@ export const slideHeader = (data) => {
|
|
|
110
110
|
lines.push(`</div>`);
|
|
111
111
|
return lines.join("\n");
|
|
112
112
|
};
|
|
113
|
+
// ═══════════════════════════════════════════════════════════
|
|
114
|
+
// Counter-based ID generation (unique within a single slide)
|
|
115
|
+
// ═══════════════════════════════════════════════════════════
|
|
116
|
+
let slideIdCounter = 0;
|
|
117
|
+
/** Generate a unique ID with the given prefix (e.g. "chart-0", "mermaid-1") */
|
|
118
|
+
export const generateSlideId = (prefix) => `${prefix}-${slideIdCounter++}`;
|
|
119
|
+
/** Reset the ID counter (for testing) */
|
|
120
|
+
export const resetSlideIdCounter = () => {
|
|
121
|
+
slideIdCounter = 0;
|
|
122
|
+
};
|
|
123
|
+
/** Collect all content block arrays from a slide layout */
|
|
124
|
+
const collectContentArrays = (slide) => {
|
|
125
|
+
const arrays = [];
|
|
126
|
+
const pushIfPresent = (content) => {
|
|
127
|
+
if (content)
|
|
128
|
+
arrays.push(content);
|
|
129
|
+
};
|
|
130
|
+
switch (slide.layout) {
|
|
131
|
+
case "columns":
|
|
132
|
+
slide.columns.forEach((col) => pushIfPresent(col.content));
|
|
133
|
+
break;
|
|
134
|
+
case "comparison":
|
|
135
|
+
pushIfPresent(slide.left.content);
|
|
136
|
+
pushIfPresent(slide.right.content);
|
|
137
|
+
break;
|
|
138
|
+
case "grid":
|
|
139
|
+
slide.items.forEach((item) => pushIfPresent(item.content));
|
|
140
|
+
break;
|
|
141
|
+
case "split":
|
|
142
|
+
pushIfPresent(slide.left?.content);
|
|
143
|
+
pushIfPresent(slide.right?.content);
|
|
144
|
+
break;
|
|
145
|
+
case "matrix":
|
|
146
|
+
slide.cells.forEach((cell) => pushIfPresent(cell.content));
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
return arrays;
|
|
150
|
+
};
|
|
151
|
+
/** Detect whether chart or mermaid content blocks exist in a slide */
|
|
152
|
+
export const detectBlockTypes = (slide) => {
|
|
153
|
+
const arrays = collectContentArrays(slide);
|
|
154
|
+
let hasChart = false;
|
|
155
|
+
let hasMermaid = false;
|
|
156
|
+
arrays.forEach((blocks) => {
|
|
157
|
+
blocks.forEach((block) => {
|
|
158
|
+
if (block.type === "chart")
|
|
159
|
+
hasChart = true;
|
|
160
|
+
if (block.type === "mermaid")
|
|
161
|
+
hasMermaid = true;
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
return { hasChart, hasMermaid };
|
|
165
|
+
};
|