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.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/assets/schemas/html_prompt.json +60 -0
  3. package/assets/schemas/mulmo_script.json +283 -0
  4. package/assets/slide_themes/corporate.json +18 -0
  5. package/assets/slide_themes/creative.json +18 -0
  6. package/assets/slide_themes/dark.json +18 -0
  7. package/assets/slide_themes/minimal.json +18 -0
  8. package/assets/slide_themes/pop.json +18 -0
  9. package/assets/slide_themes/warm.json +18 -0
  10. package/assets/styles/akira_comic.json +22 -0
  11. package/assets/styles/ani.json +43 -0
  12. package/assets/styles/children_book.json +13 -0
  13. package/assets/styles/comic_strips.json +13 -0
  14. package/assets/styles/drslump_comic.json +22 -0
  15. package/assets/styles/ghibli_comic.json +22 -0
  16. package/assets/styles/ghibli_shorts.json +28 -0
  17. package/assets/styles/ghost_comic.json +29 -0
  18. package/assets/styles/leda.json +29 -0
  19. package/assets/styles/onepiece_comic.json +22 -0
  20. package/assets/styles/slide_corporate.json +30 -0
  21. package/assets/styles/slide_creative.json +30 -0
  22. package/assets/styles/slide_dark.json +30 -0
  23. package/assets/styles/slide_minimal.json +30 -0
  24. package/assets/styles/slide_pop.json +30 -0
  25. package/assets/styles/slide_warm.json +30 -0
  26. package/lib/actions/image_agents.d.ts +2 -1
  27. package/lib/actions/image_agents.js +3 -3
  28. package/lib/actions/images.d.ts +3 -1
  29. package/lib/actions/images.js +1 -0
  30. package/lib/data/index.d.ts +2 -0
  31. package/lib/data/index.js +2 -0
  32. package/lib/data/slideStyles.d.ts +206 -0
  33. package/lib/data/slideStyles.js +206 -0
  34. package/lib/data/slideThemes.d.ts +134 -0
  35. package/lib/data/slideThemes.js +134 -0
  36. package/lib/methods/mulmo_media_source.d.ts +1 -0
  37. package/lib/methods/mulmo_media_source.js +17 -3
  38. package/lib/slide/blocks.d.ts +2 -0
  39. package/lib/slide/blocks.js +54 -2
  40. package/lib/slide/index.d.ts +2 -2
  41. package/lib/slide/index.js +1 -1
  42. package/lib/slide/layouts/columns.js +4 -4
  43. package/lib/slide/layouts/comparison.js +4 -3
  44. package/lib/slide/layouts/grid.js +3 -3
  45. package/lib/slide/render.js +24 -1
  46. package/lib/slide/schema.d.ts +454 -0
  47. package/lib/slide/schema.js +19 -0
  48. package/lib/slide/utils.d.ts +12 -1
  49. package/lib/slide/utils.js +55 -2
  50. package/lib/types/schema.d.ts +448 -0
  51. package/lib/types/slide.d.ts +454 -0
  52. package/lib/types/slide.js +19 -0
  53. package/lib/types/type.d.ts +1 -0
  54. package/lib/utils/context.d.ts +182 -0
  55. package/lib/utils/html_render.js +44 -6
  56. package/lib/utils/image_plugins/slide.d.ts +14 -0
  57. package/lib/utils/image_plugins/slide.js +101 -2
  58. package/package.json +9 -2
  59. package/scripts/test/img_detector.png +0 -0
  60. package/scripts/test/img_higgs.png +0 -0
  61. package/scripts/test/img_lhc.png +0 -0
  62. package/scripts/test/test_slide_chart_mermaid.json +148 -0
  63. package/scripts/test/test_slide_image_ref.json +261 -0
  64. package/scripts/test/test_slide_image_ref_en.json +287 -0
@@ -1,5 +1,5 @@
1
1
  import { escapeHtml, nl2br, c, cardWrap, numBadge, iconSquare } from "../utils.js";
2
- import { renderContentBlocks } from "../blocks.js";
2
+ import { renderCardContentBlocks } from "../blocks.js";
3
3
  export const layoutGrid = (data) => {
4
4
  const accent = data.accentColor || "primary";
5
5
  const nCols = data.gridColumns || 3;
@@ -8,7 +8,7 @@ export const layoutGrid = (data) => {
8
8
  parts.push(`<div class="px-12 pt-5 shrink-0">`);
9
9
  parts.push(` <h2 class="text-[42px] leading-tight font-title font-bold text-d-text">${nl2br(data.title)}</h2>`);
10
10
  parts.push(`</div>`);
11
- parts.push(`<div class="grid grid-cols-${nCols} gap-4 px-12 mt-5 flex-1 content-start">`);
11
+ parts.push(`<div class="grid grid-cols-${nCols} gap-4 px-12 mt-5 flex-1 min-h-0 overflow-hidden content-start">`);
12
12
  (data.items || []).forEach((item) => {
13
13
  const itemAccent = item.accentColor || "primary";
14
14
  const inner = [];
@@ -31,7 +31,7 @@ export const layoutGrid = (data) => {
31
31
  inner.push(`<p class="text-sm text-d-muted font-body mt-3">${escapeHtml(item.description)}</p>`);
32
32
  }
33
33
  if (item.content) {
34
- inner.push(`<div class="mt-3 space-y-3">${renderContentBlocks(item.content)}</div>`);
34
+ inner.push(`<div class="mt-3 space-y-3 flex-1 min-h-0 overflow-hidden flex flex-col">${renderCardContentBlocks(item.content)}</div>`);
35
35
  }
36
36
  parts.push(cardWrap(itemAccent, inner.join("\n")));
37
37
  });
@@ -1,9 +1,31 @@
1
- import { escapeHtml, buildTailwindConfig, sanitizeHex } from "./utils.js";
1
+ import { escapeHtml, buildTailwindConfig, sanitizeHex, detectBlockTypes } from "./utils.js";
2
2
  import { renderSlideContent } from "./layouts/index.js";
3
+ /** Determine if a hex color is dark (luminance < 128) */
4
+ const isDarkBg = (hex) => {
5
+ const r = parseInt(hex.slice(0, 2), 16);
6
+ const g = parseInt(hex.slice(2, 4), 16);
7
+ const b = parseInt(hex.slice(4, 6), 16);
8
+ return (r * 299 + g * 587 + b * 114) / 1000 < 128;
9
+ };
10
+ /** Build CDN script tags for chart/mermaid when needed */
11
+ const buildCdnScripts = (theme, slide) => {
12
+ const { hasChart, hasMermaid } = detectBlockTypes(slide);
13
+ const scripts = [];
14
+ if (hasChart) {
15
+ scripts.push('<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>');
16
+ }
17
+ if (hasMermaid) {
18
+ const mermaidTheme = isDarkBg(theme.colors.bg) ? "dark" : "default";
19
+ scripts.push(`<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
20
+ <script>mermaid.initialize({startOnLoad:true,theme:'${mermaidTheme}'})</script>`);
21
+ }
22
+ return scripts.join("\n");
23
+ };
3
24
  /** Generate a complete HTML document for a single slide */
4
25
  export const generateSlideHTML = (theme, slide) => {
5
26
  const content = renderSlideContent(slide);
6
27
  const twConfig = buildTailwindConfig(theme);
28
+ const cdnScripts = buildCdnScripts(theme, slide);
7
29
  const slideStyle = slide.style;
8
30
  const bgCls = slideStyle?.bgColor ? "" : "bg-d-bg";
9
31
  const inlineStyle = slideStyle?.bgColor ? ` style="background-color:#${sanitizeHex(slideStyle.bgColor)}"` : "";
@@ -15,6 +37,7 @@ export const generateSlideHTML = (theme, slide) => {
15
37
  <meta name="viewport" content="width=1280">
16
38
  <script src="https://cdn.tailwindcss.com"></script>
17
39
  <script>tailwind.config = ${twConfig}</script>
40
+ ${cdnScripts}
18
41
  <style>
19
42
  html, body { height: 100%; margin: 0; padding: 0; overflow: hidden; }
20
43
  </style>