@cuppacue/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/dist/ai/__tests__/generate.test.d.ts +2 -0
  4. package/dist/ai/__tests__/generate.test.d.ts.map +1 -0
  5. package/dist/ai/__tests__/generate.test.js +129 -0
  6. package/dist/ai/__tests__/generate.test.js.map +1 -0
  7. package/dist/ai/__tests__/images.test.d.ts +2 -0
  8. package/dist/ai/__tests__/images.test.d.ts.map +1 -0
  9. package/dist/ai/__tests__/images.test.js +186 -0
  10. package/dist/ai/__tests__/images.test.js.map +1 -0
  11. package/dist/ai/__tests__/prompt.test.d.ts +2 -0
  12. package/dist/ai/__tests__/prompt.test.d.ts.map +1 -0
  13. package/dist/ai/__tests__/prompt.test.js +98 -0
  14. package/dist/ai/__tests__/prompt.test.js.map +1 -0
  15. package/dist/ai/__tests__/refine.test.d.ts +2 -0
  16. package/dist/ai/__tests__/refine.test.d.ts.map +1 -0
  17. package/dist/ai/__tests__/refine.test.js +87 -0
  18. package/dist/ai/__tests__/refine.test.js.map +1 -0
  19. package/dist/ai/client.d.ts +4 -0
  20. package/dist/ai/client.d.ts.map +1 -0
  21. package/dist/ai/client.js +36 -0
  22. package/dist/ai/client.js.map +1 -0
  23. package/dist/ai/example.d.ts +6 -0
  24. package/dist/ai/example.d.ts.map +1 -0
  25. package/dist/ai/example.js +284 -0
  26. package/dist/ai/example.js.map +1 -0
  27. package/dist/ai/generate.d.ts +15 -0
  28. package/dist/ai/generate.d.ts.map +1 -0
  29. package/dist/ai/generate.js +120 -0
  30. package/dist/ai/generate.js.map +1 -0
  31. package/dist/ai/images.d.ts +8 -0
  32. package/dist/ai/images.d.ts.map +1 -0
  33. package/dist/ai/images.js +71 -0
  34. package/dist/ai/images.js.map +1 -0
  35. package/dist/ai/index.d.ts +7 -0
  36. package/dist/ai/index.d.ts.map +1 -0
  37. package/dist/ai/index.js +7 -0
  38. package/dist/ai/index.js.map +1 -0
  39. package/dist/ai/prompt.d.ts +10 -0
  40. package/dist/ai/prompt.d.ts.map +1 -0
  41. package/dist/ai/prompt.js +119 -0
  42. package/dist/ai/prompt.js.map +1 -0
  43. package/dist/ai/refine.d.ts +6 -0
  44. package/dist/ai/refine.d.ts.map +1 -0
  45. package/dist/ai/refine.js +22 -0
  46. package/dist/ai/refine.js.map +1 -0
  47. package/dist/ai/schema.d.ts +5 -0
  48. package/dist/ai/schema.d.ts.map +1 -0
  49. package/dist/ai/schema.js +292 -0
  50. package/dist/ai/schema.js.map +1 -0
  51. package/dist/commands/__tests__/backstage.test.d.ts +2 -0
  52. package/dist/commands/__tests__/backstage.test.d.ts.map +1 -0
  53. package/dist/commands/__tests__/backstage.test.js +45 -0
  54. package/dist/commands/__tests__/backstage.test.js.map +1 -0
  55. package/dist/commands/__tests__/export.test.d.ts +2 -0
  56. package/dist/commands/__tests__/export.test.d.ts.map +1 -0
  57. package/dist/commands/__tests__/export.test.js +50 -0
  58. package/dist/commands/__tests__/export.test.js.map +1 -0
  59. package/dist/commands/ai.d.ts +2 -0
  60. package/dist/commands/ai.d.ts.map +1 -0
  61. package/dist/commands/ai.js +113 -0
  62. package/dist/commands/ai.js.map +1 -0
  63. package/dist/commands/build.d.ts +2 -0
  64. package/dist/commands/build.d.ts.map +1 -0
  65. package/dist/commands/build.js +121 -0
  66. package/dist/commands/build.js.map +1 -0
  67. package/dist/commands/export-pdf.d.ts +9 -0
  68. package/dist/commands/export-pdf.d.ts.map +1 -0
  69. package/dist/commands/export-pdf.js +109 -0
  70. package/dist/commands/export-pdf.js.map +1 -0
  71. package/dist/commands/export.d.ts +2 -0
  72. package/dist/commands/export.d.ts.map +1 -0
  73. package/dist/commands/export.js +147 -0
  74. package/dist/commands/export.js.map +1 -0
  75. package/dist/commands/init.d.ts +2 -0
  76. package/dist/commands/init.d.ts.map +1 -0
  77. package/dist/commands/init.js +54 -0
  78. package/dist/commands/init.js.map +1 -0
  79. package/dist/commands/preview.d.ts +2 -0
  80. package/dist/commands/preview.d.ts.map +1 -0
  81. package/dist/commands/preview.js +78 -0
  82. package/dist/commands/preview.js.map +1 -0
  83. package/dist/commands/serve.d.ts +7 -0
  84. package/dist/commands/serve.d.ts.map +1 -0
  85. package/dist/commands/serve.js +773 -0
  86. package/dist/commands/serve.js.map +1 -0
  87. package/dist/commands/validate.d.ts +2 -0
  88. package/dist/commands/validate.d.ts.map +1 -0
  89. package/dist/commands/validate.js +39 -0
  90. package/dist/commands/validate.js.map +1 -0
  91. package/dist/github/__tests__/fetcher.test.d.ts +2 -0
  92. package/dist/github/__tests__/fetcher.test.d.ts.map +1 -0
  93. package/dist/github/__tests__/fetcher.test.js +102 -0
  94. package/dist/github/__tests__/fetcher.test.js.map +1 -0
  95. package/dist/github/__tests__/rewrite-images.test.d.ts +2 -0
  96. package/dist/github/__tests__/rewrite-images.test.d.ts.map +1 -0
  97. package/dist/github/__tests__/rewrite-images.test.js +79 -0
  98. package/dist/github/__tests__/rewrite-images.test.js.map +1 -0
  99. package/dist/github/__tests__/url-parser.test.d.ts +2 -0
  100. package/dist/github/__tests__/url-parser.test.d.ts.map +1 -0
  101. package/dist/github/__tests__/url-parser.test.js +96 -0
  102. package/dist/github/__tests__/url-parser.test.js.map +1 -0
  103. package/dist/github/fetcher.d.ts +10 -0
  104. package/dist/github/fetcher.d.ts.map +1 -0
  105. package/dist/github/fetcher.js +53 -0
  106. package/dist/github/fetcher.js.map +1 -0
  107. package/dist/github/index.d.ts +5 -0
  108. package/dist/github/index.d.ts.map +1 -0
  109. package/dist/github/index.js +4 -0
  110. package/dist/github/index.js.map +1 -0
  111. package/dist/github/rewrite-images.d.ts +7 -0
  112. package/dist/github/rewrite-images.d.ts.map +1 -0
  113. package/dist/github/rewrite-images.js +26 -0
  114. package/dist/github/rewrite-images.js.map +1 -0
  115. package/dist/github/url-parser.d.ts +12 -0
  116. package/dist/github/url-parser.d.ts.map +1 -0
  117. package/dist/github/url-parser.js +60 -0
  118. package/dist/github/url-parser.js.map +1 -0
  119. package/dist/index.d.ts +3 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +95 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/markdown/__tests__/auto-slide.test.d.ts +2 -0
  124. package/dist/markdown/__tests__/auto-slide.test.d.ts.map +1 -0
  125. package/dist/markdown/__tests__/auto-slide.test.js +325 -0
  126. package/dist/markdown/__tests__/auto-slide.test.js.map +1 -0
  127. package/dist/markdown/__tests__/compiler.test.d.ts +2 -0
  128. package/dist/markdown/__tests__/compiler.test.d.ts.map +1 -0
  129. package/dist/markdown/__tests__/compiler.test.js +142 -0
  130. package/dist/markdown/__tests__/compiler.test.js.map +1 -0
  131. package/dist/markdown/__tests__/custom-parsers.test.d.ts +2 -0
  132. package/dist/markdown/__tests__/custom-parsers.test.d.ts.map +1 -0
  133. package/dist/markdown/__tests__/custom-parsers.test.js +182 -0
  134. package/dist/markdown/__tests__/custom-parsers.test.js.map +1 -0
  135. package/dist/markdown/__tests__/frontmatter.test.d.ts +2 -0
  136. package/dist/markdown/__tests__/frontmatter.test.d.ts.map +1 -0
  137. package/dist/markdown/__tests__/frontmatter.test.js +162 -0
  138. package/dist/markdown/__tests__/frontmatter.test.js.map +1 -0
  139. package/dist/markdown/__tests__/layout.test.d.ts +2 -0
  140. package/dist/markdown/__tests__/layout.test.d.ts.map +1 -0
  141. package/dist/markdown/__tests__/layout.test.js +85 -0
  142. package/dist/markdown/__tests__/layout.test.js.map +1 -0
  143. package/dist/markdown/__tests__/parser.test.d.ts +2 -0
  144. package/dist/markdown/__tests__/parser.test.d.ts.map +1 -0
  145. package/dist/markdown/__tests__/parser.test.js +646 -0
  146. package/dist/markdown/__tests__/parser.test.js.map +1 -0
  147. package/dist/markdown/__tests__/timesheet-gen.test.d.ts +2 -0
  148. package/dist/markdown/__tests__/timesheet-gen.test.d.ts.map +1 -0
  149. package/dist/markdown/__tests__/timesheet-gen.test.js +90 -0
  150. package/dist/markdown/__tests__/timesheet-gen.test.js.map +1 -0
  151. package/dist/markdown/auto-slide.d.ts +16 -0
  152. package/dist/markdown/auto-slide.d.ts.map +1 -0
  153. package/dist/markdown/auto-slide.js +144 -0
  154. package/dist/markdown/auto-slide.js.map +1 -0
  155. package/dist/markdown/compiler.d.ts +12 -0
  156. package/dist/markdown/compiler.d.ts.map +1 -0
  157. package/dist/markdown/compiler.js +47 -0
  158. package/dist/markdown/compiler.js.map +1 -0
  159. package/dist/markdown/custom-parsers.d.ts +69 -0
  160. package/dist/markdown/custom-parsers.d.ts.map +1 -0
  161. package/dist/markdown/custom-parsers.js +227 -0
  162. package/dist/markdown/custom-parsers.js.map +1 -0
  163. package/dist/markdown/frontmatter.d.ts +33 -0
  164. package/dist/markdown/frontmatter.d.ts.map +1 -0
  165. package/dist/markdown/frontmatter.js +83 -0
  166. package/dist/markdown/frontmatter.js.map +1 -0
  167. package/dist/markdown/id.d.ts +4 -0
  168. package/dist/markdown/id.d.ts.map +1 -0
  169. package/dist/markdown/id.js +15 -0
  170. package/dist/markdown/id.js.map +1 -0
  171. package/dist/markdown/index.d.ts +8 -0
  172. package/dist/markdown/index.d.ts.map +1 -0
  173. package/dist/markdown/index.js +6 -0
  174. package/dist/markdown/index.js.map +1 -0
  175. package/dist/markdown/parser.d.ts +35 -0
  176. package/dist/markdown/parser.d.ts.map +1 -0
  177. package/dist/markdown/parser.js +605 -0
  178. package/dist/markdown/parser.js.map +1 -0
  179. package/dist/markdown/timesheet-gen.d.ts +6 -0
  180. package/dist/markdown/timesheet-gen.d.ts.map +1 -0
  181. package/dist/markdown/timesheet-gen.js +223 -0
  182. package/dist/markdown/timesheet-gen.js.map +1 -0
  183. package/dist/player/CuePlayer.d.ts +58 -0
  184. package/dist/player/CuePlayer.d.ts.map +1 -0
  185. package/dist/player/NavBar.d.ts +31 -0
  186. package/dist/player/NavBar.d.ts.map +1 -0
  187. package/dist/player/PresenterView.d.ts +25 -0
  188. package/dist/player/PresenterView.d.ts.map +1 -0
  189. package/dist/player/SlideOverview.d.ts +16 -0
  190. package/dist/player/SlideOverview.d.ts.map +1 -0
  191. package/dist/player/__mocks__/chart.d.ts +29 -0
  192. package/dist/player/__mocks__/chart.d.ts.map +1 -0
  193. package/dist/player/__mocks__/mermaid.d.ts +8 -0
  194. package/dist/player/__mocks__/mermaid.d.ts.map +1 -0
  195. package/dist/player/__tests__/animator.test.d.ts +2 -0
  196. package/dist/player/__tests__/animator.test.d.ts.map +1 -0
  197. package/dist/player/__tests__/layout.test.d.ts +2 -0
  198. package/dist/player/__tests__/layout.test.d.ts.map +1 -0
  199. package/dist/player/__tests__/overview.test.d.ts +2 -0
  200. package/dist/player/__tests__/overview.test.d.ts.map +1 -0
  201. package/dist/player/__tests__/timeline.test.d.ts +2 -0
  202. package/dist/player/__tests__/timeline.test.d.ts.map +1 -0
  203. package/dist/player/animator.d.ts +4 -0
  204. package/dist/player/animator.d.ts.map +1 -0
  205. package/dist/player/cuppacue-player.css +1 -0
  206. package/dist/player/cuppacue-player.js +3247 -0
  207. package/dist/player/index.d.ts +14 -0
  208. package/dist/player/index.d.ts.map +1 -0
  209. package/dist/player/loader.d.ts +3 -0
  210. package/dist/player/loader.d.ts.map +1 -0
  211. package/dist/player/main.d.ts +2 -0
  212. package/dist/player/main.d.ts.map +1 -0
  213. package/dist/player/navigator.d.ts +27 -0
  214. package/dist/player/navigator.d.ts.map +1 -0
  215. package/dist/player/renderer.d.ts +9 -0
  216. package/dist/player/renderer.d.ts.map +1 -0
  217. package/dist/player/renderers/cards.d.ts +3 -0
  218. package/dist/player/renderers/cards.d.ts.map +1 -0
  219. package/dist/player/renderers/chart.d.ts +3 -0
  220. package/dist/player/renderers/chart.d.ts.map +1 -0
  221. package/dist/player/renderers/icons.d.ts +6 -0
  222. package/dist/player/renderers/icons.d.ts.map +1 -0
  223. package/dist/player/renderers/mermaid.d.ts +3 -0
  224. package/dist/player/renderers/mermaid.d.ts.map +1 -0
  225. package/dist/player/renderers/stats.d.ts +3 -0
  226. package/dist/player/renderers/stats.d.ts.map +1 -0
  227. package/dist/player/renderers/terminal.d.ts +3 -0
  228. package/dist/player/renderers/terminal.d.ts.map +1 -0
  229. package/dist/player/themes/dark.d.ts +2 -0
  230. package/dist/player/themes/dark.d.ts.map +1 -0
  231. package/dist/player/themes/light.d.ts +2 -0
  232. package/dist/player/themes/light.d.ts.map +1 -0
  233. package/dist/player/timeline.d.ts +43 -0
  234. package/dist/player/timeline.d.ts.map +1 -0
  235. package/dist/serve.d.ts +2 -0
  236. package/dist/serve.d.ts.map +1 -0
  237. package/dist/serve.js +171 -0
  238. package/dist/serve.js.map +1 -0
  239. package/dist/templates/discover.d.ts +20 -0
  240. package/dist/templates/discover.d.ts.map +1 -0
  241. package/dist/templates/discover.js +86 -0
  242. package/dist/templates/discover.js.map +1 -0
  243. package/dist/templates/loader.d.ts +17 -0
  244. package/dist/templates/loader.d.ts.map +1 -0
  245. package/dist/templates/loader.js +40 -0
  246. package/dist/templates/loader.js.map +1 -0
  247. package/package.json +62 -0
@@ -0,0 +1,605 @@
1
+ import { lexer } from "marked";
2
+ import { nextSceneId, nextElementId } from "./id.js";
3
+ import { autoSlideScenes } from "./auto-slide.js";
4
+ import { parseChartBlock, parseCardsBlock, parseStatsBlock, parseTerminalBlock, parseFlowBlock } from "./custom-parsers.js";
5
+ import { isSlideFrontMatter, parseSlideFrontMatter } from "./frontmatter.js";
6
+ function escapeHtml(str) {
7
+ return str
8
+ .replace(/&/g, "&")
9
+ .replace(/</g, "&lt;")
10
+ .replace(/>/g, "&gt;")
11
+ .replace(/"/g, "&quot;");
12
+ }
13
+ export function renderInlineTokens(tokens) {
14
+ let out = "";
15
+ for (const token of tokens) {
16
+ switch (token.type) {
17
+ case "text": {
18
+ const t = token;
19
+ if (t.tokens && t.tokens.length > 0) {
20
+ out += renderInlineTokens(t.tokens);
21
+ }
22
+ else {
23
+ out += escapeHtml(t.text);
24
+ }
25
+ break;
26
+ }
27
+ case "strong": {
28
+ const t = token;
29
+ out += `<strong>${renderInlineTokens(t.tokens)}</strong>`;
30
+ break;
31
+ }
32
+ case "em": {
33
+ const t = token;
34
+ out += `<em>${renderInlineTokens(t.tokens)}</em>`;
35
+ break;
36
+ }
37
+ case "del": {
38
+ const t = token;
39
+ out += `<del>${renderInlineTokens(t.tokens)}</del>`;
40
+ break;
41
+ }
42
+ case "codespan": {
43
+ const t = token;
44
+ out += `<code>${escapeHtml(t.text)}</code>`;
45
+ break;
46
+ }
47
+ case "link": {
48
+ const t = token;
49
+ out += `<a href="${escapeHtml(t.href)}" target="_blank" rel="noopener noreferrer">${renderInlineTokens(t.tokens)}</a>`;
50
+ break;
51
+ }
52
+ case "br":
53
+ out += "<br>";
54
+ break;
55
+ case "escape": {
56
+ const t = token;
57
+ out += escapeHtml(t.text);
58
+ break;
59
+ }
60
+ default:
61
+ out += escapeHtml(token.text ?? "");
62
+ break;
63
+ }
64
+ }
65
+ return out;
66
+ }
67
+ /**
68
+ * Parse code fence info string to extract language and highlight line ranges.
69
+ * Supports: ```typescript {1-3,5,8-10}
70
+ */
71
+ function parseCodeInfoString(info) {
72
+ const match = info.match(/^(\S*)\s*\{([^}]+)\}\s*$/);
73
+ if (!match) {
74
+ return { language: info.trim(), highlightLines: [] };
75
+ }
76
+ const language = match[1];
77
+ const rangeStr = match[2];
78
+ const lines = [];
79
+ for (const part of rangeStr.split(",")) {
80
+ const trimmed = part.trim();
81
+ const rangeMatch = trimmed.match(/^(\d+)-(\d+)$/);
82
+ if (rangeMatch) {
83
+ const start = parseInt(rangeMatch[1], 10);
84
+ const end = parseInt(rangeMatch[2], 10);
85
+ for (let i = start; i <= end; i++) {
86
+ lines.push(i);
87
+ }
88
+ }
89
+ else {
90
+ const num = parseInt(trimmed, 10);
91
+ if (!isNaN(num))
92
+ lines.push(num);
93
+ }
94
+ }
95
+ return { language, highlightLines: lines };
96
+ }
97
+ function mapToken(token) {
98
+ switch (token.type) {
99
+ case "heading": {
100
+ const t = token;
101
+ const content = t.tokens ? renderInlineTokens(t.tokens) : escapeHtml(t.text);
102
+ if (t.depth === 1) {
103
+ return {
104
+ id: nextElementId("title"),
105
+ type: "text",
106
+ content,
107
+ role: "title",
108
+ };
109
+ }
110
+ if (t.depth === 2) {
111
+ return {
112
+ id: nextElementId("heading"),
113
+ type: "text",
114
+ content,
115
+ role: "heading",
116
+ };
117
+ }
118
+ if (t.depth === 3) {
119
+ return {
120
+ id: nextElementId("subtitle"),
121
+ type: "text",
122
+ content,
123
+ role: "subtitle",
124
+ };
125
+ }
126
+ // depth >= 4 → body
127
+ return {
128
+ id: nextElementId("body"),
129
+ type: "text",
130
+ content,
131
+ role: "body",
132
+ };
133
+ }
134
+ case "paragraph": {
135
+ const t = token;
136
+ // Check if this paragraph contains only an image
137
+ if (t.tokens && t.tokens.length === 1 && t.tokens[0].type === "image") {
138
+ const img = t.tokens[0];
139
+ return {
140
+ id: nextElementId("image"),
141
+ type: "image",
142
+ src: img.href,
143
+ alt: img.text || undefined,
144
+ };
145
+ }
146
+ return {
147
+ id: nextElementId("body"),
148
+ type: "text",
149
+ content: t.tokens ? renderInlineTokens(t.tokens) : escapeHtml(t.text),
150
+ role: "body",
151
+ };
152
+ }
153
+ case "code": {
154
+ const t = token;
155
+ const rawLang = t.lang || "";
156
+ const lang = rawLang.toLowerCase();
157
+ // Custom element types
158
+ if (lang === "mermaid") {
159
+ return {
160
+ id: nextElementId("mermaid"),
161
+ type: "mermaid",
162
+ definition: t.text,
163
+ };
164
+ }
165
+ if (lang.startsWith("chart:")) {
166
+ const chartType = lang.slice("chart:".length);
167
+ return parseChartBlock(t.text, chartType);
168
+ }
169
+ if (lang === "cards") {
170
+ return parseCardsBlock(t.text);
171
+ }
172
+ if (lang === "stats") {
173
+ return parseStatsBlock(t.text);
174
+ }
175
+ if (lang === "terminal") {
176
+ return parseTerminalBlock(t.text);
177
+ }
178
+ if (lang === "flow") {
179
+ return parseFlowBlock(t.text);
180
+ }
181
+ // Parse highlight lines from info string: ```typescript {1-3,5}
182
+ const { language, highlightLines } = parseCodeInfoString(rawLang);
183
+ return {
184
+ id: nextElementId("code"),
185
+ type: "code",
186
+ content: t.text,
187
+ language: language || "text",
188
+ ...(highlightLines.length > 0 ? { highlightLines } : {}),
189
+ };
190
+ }
191
+ case "blockquote": {
192
+ const t = token;
193
+ // Blockquotes contain nested tokens (paragraphs); render inline formatting from them
194
+ let content = t.text;
195
+ if (t.tokens) {
196
+ const parts = [];
197
+ for (const inner of t.tokens) {
198
+ if ("tokens" in inner && Array.isArray(inner.tokens)) {
199
+ parts.push(renderInlineTokens(inner.tokens));
200
+ }
201
+ else if ("text" in inner) {
202
+ parts.push(escapeHtml(inner.text));
203
+ }
204
+ }
205
+ if (parts.length > 0)
206
+ content = parts.join("\n");
207
+ }
208
+ return {
209
+ id: nextElementId("caption"),
210
+ type: "text",
211
+ content,
212
+ role: "caption",
213
+ };
214
+ }
215
+ case "list": {
216
+ const t = token;
217
+ return {
218
+ id: nextElementId("list"),
219
+ type: "list",
220
+ items: t.items.map((item) => {
221
+ // Loose lists wrap in paragraph, tight lists use text tokens
222
+ const block = item.tokens?.find((tok) => tok.type === "paragraph" || tok.type === "text");
223
+ if (block?.tokens)
224
+ return renderInlineTokens(block.tokens);
225
+ return escapeHtml(item.text);
226
+ }),
227
+ ordered: t.ordered,
228
+ };
229
+ }
230
+ case "table": {
231
+ const t = token;
232
+ return {
233
+ id: nextElementId("table"),
234
+ type: "table",
235
+ headers: t.header.map((cell) => renderInlineTokens(cell.tokens)),
236
+ rows: t.rows.map((row) => row.map((cell) => renderInlineTokens(cell.tokens))),
237
+ ...(t.align.some((a) => a !== null) ? { alignments: t.align } : {}),
238
+ };
239
+ }
240
+ default:
241
+ return null;
242
+ }
243
+ }
244
+ export function inferLayout(elements) {
245
+ // Exclude footer elements from layout inference
246
+ const layoutElements = elements.filter((e) => !(e.type === "text" && e.role === "footer"));
247
+ const hasHeading = layoutElements.some((e) => e.type === "text" && (e.role === "title" || e.role === "heading"));
248
+ const hasCode = layoutElements.some((e) => e.type === "code" || e.type === "terminal");
249
+ const hasBodyContent = layoutElements.some((e) => (e.type === "text" && e.role === "body") || e.type === "list" || e.type === "table");
250
+ const hasFullWidthElement = layoutElements.some((e) => e.type === "mermaid" || e.type === "chart" || e.type === "cards" || e.type === "stats" || e.type === "flow");
251
+ const hasTitle = layoutElements.some((e) => e.type === "text" && e.role === "title");
252
+ // Title slide: H1 alone or H1 + subtitle/caption + optional image → intro
253
+ if (hasTitle && layoutElements.every((e) => (e.type === "text" && (e.role === "title" || e.role === "subtitle" || e.role === "caption"))
254
+ || e.type === "image"))
255
+ return "intro";
256
+ // Single element that's an H1 title → intro
257
+ if (layoutElements.length === 1 && hasTitle)
258
+ return "intro";
259
+ // Multiple images → image-grid
260
+ const imageCount = layoutElements.filter((e) => e.type === "image").length;
261
+ if (imageCount >= 2)
262
+ return "image-grid";
263
+ // Full-width custom elements with heading → header-body
264
+ if (hasFullWidthElement && hasHeading)
265
+ return "header-body";
266
+ // Full-width custom elements alone → full
267
+ if (hasFullWidthElement && !hasHeading)
268
+ return "full";
269
+ // Code + other content → split or code-focus
270
+ if (hasCode && hasBodyContent)
271
+ return "split";
272
+ if (hasCode)
273
+ return "code-focus";
274
+ // Heading + body → header-body
275
+ if (hasHeading)
276
+ return "header-body";
277
+ // Fallback: non-title single elements or body-only → header-body (left-aligned)
278
+ return "header-body";
279
+ }
280
+ const NOTES_RE = /^<!--\s*notes:\s*([\s\S]*?)\s*-->$/;
281
+ const DIRECTIVE_RE = /^<!--\s*(layout|class|background|transition|image|footer):\s*(.*?)\s*-->$/;
282
+ const ANIMATE_RE = /^<!--\s*animate:\s*(\S+)(?:\s+delay:\s*(\d+))?\s*-->$/;
283
+ function extractNotes(tokens) {
284
+ for (const token of tokens) {
285
+ if (token.type === "html") {
286
+ const match = token.raw.trim().match(NOTES_RE);
287
+ if (match)
288
+ return match[1].trim();
289
+ }
290
+ }
291
+ return undefined;
292
+ }
293
+ /** Extract slide directives from HTML comments like <!-- layout: image-grid --> */
294
+ function extractDirectives(tokens) {
295
+ const fm = {};
296
+ for (const token of tokens) {
297
+ if (token.type === "html") {
298
+ const match = token.raw.trim().match(DIRECTIVE_RE);
299
+ if (match) {
300
+ const key = match[1];
301
+ fm[key] = match[2];
302
+ }
303
+ }
304
+ }
305
+ return fm;
306
+ }
307
+ function parseTransitionField(value) {
308
+ const parts = value.split(/\s+/);
309
+ const type = (parts[0] || "fade");
310
+ const validTypes = new Set(["fade", "slide", "none", "zoom", "reveal", "flip", "morph"]);
311
+ return {
312
+ type: validTypes.has(type) ? type : "fade",
313
+ ...(parts[1] ? { duration: parseInt(parts[1], 10) || undefined } : {}),
314
+ };
315
+ }
316
+ function parseAccentBar(value) {
317
+ const parts = value.trim().split(/\s+/);
318
+ const color = parts[0];
319
+ const position = (parts[1] === "bottom" ? "bottom" : "top");
320
+ const height = parts[2] || undefined;
321
+ return { color, ...(position !== "top" ? { position } : {}), ...(height ? { height } : {}) };
322
+ }
323
+ function buildScene(tokens, slideFm) {
324
+ const notes = extractNotes(tokens);
325
+ const directives = extractDirectives(tokens);
326
+ const elements = [];
327
+ let pendingAnimate = null;
328
+ for (const token of tokens) {
329
+ // Skip HTML comments that are notes or directives
330
+ if (token.type === "html" && (NOTES_RE.test(token.raw.trim()) || DIRECTIVE_RE.test(token.raw.trim())))
331
+ continue;
332
+ // Check for animate directive — applies to the next element
333
+ if (token.type === "html") {
334
+ const animMatch = token.raw.trim().match(ANIMATE_RE);
335
+ if (animMatch) {
336
+ pendingAnimate = { animation: animMatch[1], delay: animMatch[2] ? parseInt(animMatch[2], 10) : undefined };
337
+ continue;
338
+ }
339
+ }
340
+ const el = mapToken(token);
341
+ if (el) {
342
+ if (pendingAnimate) {
343
+ el.animation = pendingAnimate.animation;
344
+ if (pendingAnimate.delay !== undefined)
345
+ el.animationDuration = pendingAnimate.delay;
346
+ pendingAnimate = null;
347
+ }
348
+ elements.push(el);
349
+ }
350
+ }
351
+ // Merge: frontmatter takes priority, then HTML comment directives
352
+ const merged = { ...directives, ...slideFm };
353
+ // If frontmatter/directives specify an image, inject it as an element
354
+ if (merged.image) {
355
+ elements.push({
356
+ id: nextElementId("image"),
357
+ type: "image",
358
+ src: merged.image,
359
+ });
360
+ }
361
+ // If a footer directive is present, inject a footer text element
362
+ if (merged.footer) {
363
+ elements.push({
364
+ id: nextElementId("footer"),
365
+ type: "text",
366
+ content: merged.footer,
367
+ role: "footer",
368
+ });
369
+ }
370
+ // Layout: use explicit override if provided, otherwise infer
371
+ const layout = merged.layout ?? inferLayout(elements);
372
+ // Parse accentBar from frontmatter
373
+ const accentBar = merged.accentBar ? parseAccentBar(merged.accentBar) : undefined;
374
+ // Scene template from per-slide frontmatter
375
+ const sceneTemplate = merged.template || undefined;
376
+ // Collect templateData from frontmatter fields
377
+ const templateData = {};
378
+ if (merged.badge)
379
+ templateData.badge = merged.badge;
380
+ if (merged.footerKeywords)
381
+ templateData.footerKeywords = merged.footerKeywords;
382
+ if (merged.footer)
383
+ templateData.footer = merged.footer;
384
+ return {
385
+ id: nextSceneId(),
386
+ elements,
387
+ layout,
388
+ ...(merged.background ? { background: merged.background } : {}),
389
+ ...(merged.transition ? { transition: parseTransitionField(merged.transition) } : {}),
390
+ ...(merged.class ? { class: merged.class } : {}),
391
+ ...(notes ? { notes } : {}),
392
+ ...(accentBar ? { accentBar } : {}),
393
+ ...(sceneTemplate ? { sceneTemplate } : {}),
394
+ ...(Object.keys(templateData).length > 0 ? { templateData } : {}),
395
+ };
396
+ }
397
+ /**
398
+ * Auto-assign scene templates based on a presentation template.
399
+ * First scene → intro, last scene → closing, heading-only scenes → section.
400
+ * Scenes that already have a sceneTemplate (set via per-slide frontmatter) are not overwritten.
401
+ */
402
+ /** Mapping from presentation template ID to { role → scene template ID }. */
403
+ const TEMPLATE_ROLE_MAP = {
404
+ "tech-talk": {
405
+ intro: "tech-talk/intro",
406
+ closing: "tech-talk/closing",
407
+ section: "tech-talk/section",
408
+ code: "tech-talk/code",
409
+ content: "tech-talk/content",
410
+ },
411
+ "pitch-deck": {
412
+ intro: "pitch-deck/hero",
413
+ closing: "pitch-deck/cta",
414
+ section: "pitch-deck/problem",
415
+ content: "pitch-deck/solution",
416
+ stats: "pitch-deck/metrics",
417
+ },
418
+ "workshop": {
419
+ intro: "workshop/intro",
420
+ closing: "workshop/summary",
421
+ section: "workshop/checkpoint",
422
+ content: "workshop/step",
423
+ exercise: "workshop/exercise",
424
+ },
425
+ "changelog": {
426
+ intro: "changelog/cover",
427
+ closing: "changelog/credits",
428
+ content: "changelog/feature",
429
+ breaking: "changelog/breaking",
430
+ fixes: "changelog/fixes",
431
+ },
432
+ };
433
+ function autoAssignTemplates(scenes, templateId) {
434
+ if (scenes.length === 0)
435
+ return;
436
+ const roleMap = TEMPLATE_ROLE_MAP[templateId] ?? {
437
+ intro: `${templateId}/intro`,
438
+ closing: `${templateId}/closing`,
439
+ section: `${templateId}/section`,
440
+ code: `${templateId}/code`,
441
+ content: `${templateId}/content`,
442
+ };
443
+ for (let i = 0; i < scenes.length; i++) {
444
+ // Don't override explicit per-slide template
445
+ if (scenes[i].sceneTemplate)
446
+ continue;
447
+ if (i === 0) {
448
+ scenes[i].sceneTemplate = roleMap.intro;
449
+ }
450
+ else if (i === scenes.length - 1) {
451
+ scenes[i].sceneTemplate = roleMap.closing;
452
+ }
453
+ else {
454
+ const elements = scenes[i].elements;
455
+ const isHeadingOnly = elements.length > 0 && elements.every((e) => e.type === "text" && (e.role === "title" || e.role === "heading" || e.role === "subtitle" || e.role === "caption"));
456
+ if (isHeadingOnly) {
457
+ scenes[i].sceneTemplate = roleMap.section ?? roleMap.content;
458
+ }
459
+ else if (elements.some((e) => e.type === "stats") && roleMap.stats) {
460
+ scenes[i].sceneTemplate = roleMap.stats;
461
+ }
462
+ else if (elements.some((e) => e.type === "code") && roleMap.code) {
463
+ scenes[i].sceneTemplate = roleMap.code;
464
+ }
465
+ else {
466
+ scenes[i].sceneTemplate = roleMap.content;
467
+ }
468
+ }
469
+ }
470
+ }
471
+ /** Split raw markdown body into slide chunks by --- lines (respects code fences). */
472
+ function splitSlideChunks(body) {
473
+ const lines = body.split("\n");
474
+ const chunks = [];
475
+ let current = [];
476
+ let inCodeFence = false;
477
+ for (const line of lines) {
478
+ // Track code fence boundaries (``` or ~~~)
479
+ if (/^(`{3,}|~{3,})/.test(line.trimStart())) {
480
+ inCodeFence = !inCodeFence;
481
+ }
482
+ if (!inCodeFence && /^---\s*$/.test(line)) {
483
+ chunks.push(current.join("\n"));
484
+ current = [];
485
+ }
486
+ else {
487
+ current.push(line);
488
+ }
489
+ }
490
+ chunks.push(current.join("\n"));
491
+ return chunks;
492
+ }
493
+ /**
494
+ * Parse markdown body (after front-matter extraction) into Content.
495
+ * Splits on `---` for scene breaks, with optional per-slide frontmatter.
496
+ *
497
+ * Per-slide frontmatter format (between two --- separators):
498
+ * ```
499
+ * ---
500
+ * layout: split
501
+ * background: "#1a1a2e"
502
+ * transition: fade
503
+ * ---
504
+ * ## Slide Content
505
+ * ```
506
+ *
507
+ * When autoSlide is enabled, oversized scenes are intelligently split.
508
+ * Returns content and a list of local resource paths referenced.
509
+ */
510
+ export function parseMarkdown(body, options) {
511
+ const autoSlide = options?.autoSlide ?? "auto";
512
+ const maxWeight = options?.maxSlideWeight ?? 6;
513
+ // Split raw body by --- lines
514
+ const rawChunks = splitSlideChunks(body);
515
+ // Process chunks: detect frontmatter-only chunks and merge with next chunk
516
+ const slideChunks = [];
517
+ let pendingFm = null;
518
+ for (const chunk of rawChunks) {
519
+ const trimmed = chunk.trim();
520
+ if (!trimmed)
521
+ continue;
522
+ if (isSlideFrontMatter(trimmed)) {
523
+ pendingFm = parseSlideFrontMatter(trimmed);
524
+ continue;
525
+ }
526
+ slideChunks.push({
527
+ frontmatter: pendingFm ?? {},
528
+ markdown: trimmed,
529
+ });
530
+ pendingFm = null;
531
+ }
532
+ // Lex each chunk and build scenes
533
+ // A <!-- layout: ... --> directive mid-scene acts as an implicit scene break
534
+ let scenes = [];
535
+ for (const chunk of slideChunks) {
536
+ const tokens = lexer(chunk.markdown);
537
+ if (tokens.length === 0)
538
+ continue;
539
+ // Check for directive comments that should split the scene
540
+ const splitPoints = [];
541
+ for (let i = 0; i < tokens.length; i++) {
542
+ if (tokens[i].type === "html" && DIRECTIVE_RE.test(tokens[i].raw.trim())) {
543
+ const m = tokens[i].raw.trim().match(DIRECTIVE_RE);
544
+ // Footer is an inline element directive, not a scene-splitting directive
545
+ if (m && m[1] === "footer")
546
+ continue;
547
+ // Only split if there are content tokens before this directive
548
+ const hasPriorContent = tokens.slice(0, i).some((t) => t.type !== "space");
549
+ if (hasPriorContent)
550
+ splitPoints.push(i);
551
+ }
552
+ }
553
+ if (splitPoints.length === 0) {
554
+ scenes.push(buildScene(tokens, chunk.frontmatter));
555
+ }
556
+ else {
557
+ // Split tokens at directive boundaries
558
+ let start = 0;
559
+ for (const splitIdx of splitPoints) {
560
+ const before = tokens.slice(start, splitIdx);
561
+ if (before.some((t) => t.type !== "space")) {
562
+ scenes.push(buildScene(before, start === 0 ? chunk.frontmatter : undefined));
563
+ }
564
+ start = splitIdx;
565
+ }
566
+ // Remaining tokens (from last directive onward)
567
+ const remaining = tokens.slice(start);
568
+ if (remaining.some((t) => t.type !== "space")) {
569
+ scenes.push(buildScene(remaining));
570
+ }
571
+ }
572
+ }
573
+ // Auto-slide splitting
574
+ const hasManualBreaks = slideChunks.length > 1;
575
+ if (autoSlide === true) {
576
+ scenes = autoSlideScenes(scenes, maxWeight);
577
+ }
578
+ else if (autoSlide === "auto") {
579
+ const maxElementCount = Math.max(...scenes.map((s) => s.elements.length));
580
+ if (!hasManualBreaks || maxElementCount > 6) {
581
+ scenes = autoSlideScenes(scenes, maxWeight);
582
+ }
583
+ }
584
+ // Auto-assign scene templates from presentation template
585
+ const presentationTemplate = options?.presentationTemplate;
586
+ if (presentationTemplate) {
587
+ autoAssignTemplates(scenes, presentationTemplate);
588
+ }
589
+ // Collect local resource paths from image elements and background images
590
+ const IMAGE_PATH_RE = /\.(jpe?g|png|gif|svg|webp|avif|bmp)$/i;
591
+ const localResources = [];
592
+ for (const scene of scenes) {
593
+ for (const el of scene.elements) {
594
+ if (el.type === "image" && el.src && !el.src.startsWith("http")) {
595
+ localResources.push(el.src);
596
+ }
597
+ }
598
+ // Track background image paths as resources
599
+ if (scene.background && !scene.background.startsWith("http") && !scene.background.startsWith("#") && IMAGE_PATH_RE.test(scene.background)) {
600
+ localResources.push(scene.background);
601
+ }
602
+ }
603
+ return { content: { scenes }, localResources };
604
+ }
605
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/markdown/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Content, Timesheet } from "@cuppacue/format";
2
+ /**
3
+ * Auto-generate a Timesheet from Content.
4
+ */
5
+ export declare function generateTimesheet(content: Content): Timesheet;
6
+ //# sourceMappingURL=timesheet-gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timesheet-gen.d.ts","sourceRoot":"","sources":["../../src/markdown/timesheet-gen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAMV,MAAM,kBAAkB,CAAC;AAwG1B;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CA6H7D"}