@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,14 @@
1
+ export { CuePlayer } from "./CuePlayer.js";
2
+ export type { CuePlayerEvent } from "./CuePlayer.js";
3
+ export { loadFromUrl } from "./loader.js";
4
+ export { renderScene } from "./renderer.js";
5
+ export type { RenderedScene } from "./renderer.js";
6
+ export { TimelineController } from "./timeline.js";
7
+ export { Navigator } from "./navigator.js";
8
+ export { animate, getAnimationNames } from "./animator.js";
9
+ export { SlideOverview } from "./SlideOverview.js";
10
+ export { PresenterView } from "./PresenterView.js";
11
+ export { darkTheme } from "./themes/dark.js";
12
+ export { lightTheme } from "./themes/light.js";
13
+ export { THEMES } from "@cuppacue/format";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CupFile } from "@cuppacue/format";
2
+ export declare function loadFromUrl(baseUrl: string): Promise<CupFile>;
3
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAuC,MAAM,kBAAkB,CAAC;AAGrF,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBnE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ export interface NavigatorActions {
2
+ next(): void;
3
+ prev(): void;
4
+ toggleFullscreen(): void;
5
+ togglePlayPause(): void;
6
+ openPresenterView(): void;
7
+ toggleOverview(): void;
8
+ isOverviewVisible(): boolean;
9
+ }
10
+ export declare class Navigator {
11
+ private actions;
12
+ private boundKeyHandler;
13
+ private boundClickHandler;
14
+ private boundTouchStart;
15
+ private boundTouchEnd;
16
+ private container;
17
+ private touchStartX;
18
+ private touchStartY;
19
+ constructor(actions: NavigatorActions);
20
+ attach(container: HTMLElement): void;
21
+ detach(): void;
22
+ private handleKeyDown;
23
+ private handleClick;
24
+ private handleTouchStart;
25
+ private handleTouchEnd;
26
+ }
27
+ //# sourceMappingURL=navigator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,gBAAgB,IAAI,IAAI,CAAC;IACzB,eAAe,IAAI,IAAI,CAAC;IACxB,iBAAiB,IAAI,IAAI,CAAC;IAC1B,cAAc,IAAI,IAAI,CAAC;IACvB,iBAAiB,IAAI,OAAO,CAAC;CAC9B;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;gBAEZ,OAAO,EAAE,gBAAgB;IAQrC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAUpC,MAAM,IAAI,IAAI;IAUd,OAAO,CAAC,aAAa;IAyCrB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,cAAc;CAoBvB"}
@@ -0,0 +1,9 @@
1
+ import type { Scene, Element, Theme, LayoutType } from "@cuppacue/format";
2
+ export interface RenderedScene {
3
+ container: HTMLElement;
4
+ elementMap: Map<string, HTMLElement>;
5
+ }
6
+ export type SlotName = "header" | "body" | "left" | "right" | "code" | "default";
7
+ export declare function assignSlot(element: Element, layout: LayoutType): SlotName;
8
+ export declare function renderScene(scene: Scene, theme: Theme, baseUrl?: string): Promise<RenderedScene>;
9
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAY,KAAK,EAAE,UAAU,EAA6E,MAAM,kBAAkB,CAAC;AAQ/J,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACtC;AAuFD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEjF,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,CAwCzE;AAqPD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,SAAK,GACX,OAAO,CAAC,aAAa,CAAC,CAmExB"}
@@ -0,0 +1,3 @@
1
+ import type { CardsElement, Theme } from "@cuppacue/format";
2
+ export declare function renderCardsElement(element: CardsElement, theme: Theme): HTMLElement;
3
+ //# sourceMappingURL=cards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/renderers/cards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG5D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,CAmCnF"}
@@ -0,0 +1,3 @@
1
+ import type { ChartElement, Theme } from "@cuppacue/format";
2
+ export declare function renderChartElement(element: ChartElement, theme: Theme): Promise<HTMLElement>;
3
+ //# sourceMappingURL=chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/renderers/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAwC5D,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CA8ElG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Get an inline SVG icon by name.
3
+ * Returns a full SVG element string, or an empty string if not found.
4
+ */
5
+ export declare function getIcon(name: string, size?: number): string;
6
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/renderers/icons.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAIvD"}
@@ -0,0 +1,3 @@
1
+ import type { MermaidElement } from "@cuppacue/format";
2
+ export declare function renderMermaidElement(element: MermaidElement): Promise<HTMLElement>;
3
+ //# sourceMappingURL=mermaid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/renderers/mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA+BvD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAuCxF"}
@@ -0,0 +1,3 @@
1
+ import type { StatsElement } from "@cuppacue/format";
2
+ export declare function renderStatsElement(element: StatsElement): HTMLElement;
3
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/renderers/stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAuDrD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAwCrE"}
@@ -0,0 +1,3 @@
1
+ import type { TerminalElement } from "@cuppacue/format";
2
+ export declare function renderTerminalElement(element: TerminalElement): HTMLElement;
3
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/renderers/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,CAkD3E"}
@@ -0,0 +1,2 @@
1
+ export { DEFAULT_THEME as darkTheme } from "@cuppacue/format";
2
+ //# sourceMappingURL=dark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dark.d.ts","sourceRoot":"","sources":["../../src/themes/dark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { LIGHT_THEME as lightTheme } from "@cuppacue/format";
2
+ //# sourceMappingURL=light.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/themes/light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { TimelineEntry } from "@cuppacue/format";
2
+ export type TimelineEventType = "marker" | "complete" | "pause" | "resume" | "tick";
3
+ export interface TimelineListener {
4
+ (type: TimelineEventType, data?: unknown): void;
5
+ }
6
+ export declare class TimelineController {
7
+ private entry;
8
+ private elementMap;
9
+ private currentTime;
10
+ private playing;
11
+ private paused;
12
+ private rafId;
13
+ private lastTimestamp;
14
+ private firedEvents;
15
+ private firedMarkers;
16
+ private activeAnimations;
17
+ private listeners;
18
+ private defaultDuration;
19
+ constructor(defaultDuration?: number);
20
+ on(listener: TimelineListener): () => void;
21
+ private emit;
22
+ load(entry: TimelineEntry, elementMap: Map<string, HTMLElement>): void;
23
+ play(): void;
24
+ pause(): void;
25
+ resume(): void;
26
+ stop(): void;
27
+ /** Advance timeline to the end, firing all remaining events immediately */
28
+ skipToEnd(): void;
29
+ isPlaying(): boolean;
30
+ isPaused(): boolean;
31
+ getCurrentTime(): number;
32
+ /** Returns true if there are unfired events remaining */
33
+ hasUnfiredEvents(): boolean;
34
+ /** Returns true if there are unfired markers remaining */
35
+ hasUnfiredMarkers(): boolean;
36
+ /** Total step count for this scene (number of pause markers + 1 for the final state) */
37
+ totalSteps(): number;
38
+ /** Current step (how many pause markers have been fired) */
39
+ currentStep(): number;
40
+ private tick;
41
+ private fireEvent;
42
+ }
43
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,kBAAkB,CAAC;AAG7E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACjD;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,eAAe,CAAS;gBAEpB,eAAe,SAAM;IAIjC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAO1C,OAAO,CAAC,IAAI;IAMZ,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;IAUtE,IAAI,IAAI,IAAI;IAYZ,KAAK,IAAI,IAAI;IAeb,MAAM,IAAI,IAAI;IAad,IAAI,IAAI,IAAI;IAcZ,2EAA2E;IAC3E,SAAS,IAAI,IAAI;IAajB,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,OAAO;IAInB,cAAc,IAAI,MAAM;IAIxB,yDAAyD;IACzD,gBAAgB,IAAI,OAAO;IAK3B,0DAA0D;IAC1D,iBAAiB,IAAI,OAAO;IAK5B,wFAAwF;IACxF,UAAU,IAAI,MAAM;IAMpB,4DAA4D;IAC5D,WAAW,IAAI,MAAM;IAWrB,OAAO,CAAC,IAAI,CA6CV;IAEF,OAAO,CAAC,SAAS;CAkBlB"}
@@ -0,0 +1,2 @@
1
+ export declare function serve(presentationDir: string, port?: number): void;
2
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAkEA,wBAAgB,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,IAAI,CAwGhE"}
package/dist/serve.js ADDED
@@ -0,0 +1,171 @@
1
+ import http from "node:http";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+ const MIME_TYPES = {
7
+ ".html": "text/html",
8
+ ".css": "text/css",
9
+ ".js": "application/javascript",
10
+ ".json": "application/json",
11
+ ".png": "image/png",
12
+ ".jpg": "image/jpeg",
13
+ ".svg": "image/svg+xml",
14
+ ".woff2": "font/woff2",
15
+ ".woff": "font/woff",
16
+ ".map": "application/json",
17
+ };
18
+ function getServeTemplate(title) {
19
+ return `<!DOCTYPE html>
20
+ <html lang="en">
21
+ <head>
22
+ <meta charset="UTF-8" />
23
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
24
+ <title>${title} — CuppaCue</title>
25
+ <style>
26
+ * { margin: 0; padding: 0; box-sizing: border-box; }
27
+ html, body { width: 100%; height: 100%; overflow: hidden; background: #0f172a; }
28
+ </style>
29
+ </head>
30
+ <body>
31
+ <div id="cue-root"></div>
32
+ <script type="module">
33
+ import { CuePlayer } from '/player/cuppacue-player.js';
34
+
35
+ const root = document.getElementById('cue-root');
36
+ const player = new CuePlayer(root);
37
+
38
+ player.on('load', () => console.log('[CuppaCue] Loaded'));
39
+ player.on('end', () => console.log('[CuppaCue] Ended'));
40
+
41
+ await player.load('/data/');
42
+ player.play();
43
+
44
+ // SSE hot reload
45
+ const es = new EventSource('/__sse');
46
+ es.addEventListener('reload', () => {
47
+ console.log('[CuppaCue] Reloading...');
48
+ window.location.reload();
49
+ });
50
+ es.onerror = () => {
51
+ console.log('[CuppaCue] SSE disconnected, will retry...');
52
+ };
53
+
54
+ window.cuePlayer = player;
55
+ </script>
56
+ </body>
57
+ </html>`;
58
+ }
59
+ export function serve(presentationDir, port = 3000) {
60
+ const absDir = path.resolve(presentationDir);
61
+ if (!fs.existsSync(absDir)) {
62
+ console.error(`Directory not found: ${absDir}`);
63
+ process.exit(1);
64
+ }
65
+ // Find the built player bundle
66
+ const playerDistDir = path.resolve(__dirname, "../../player/dist");
67
+ const playerNodeModulesDir = path.resolve(__dirname, "../../player/node_modules");
68
+ // Read manifest for title
69
+ let title = "CuppaCue Presentation";
70
+ try {
71
+ const manifest = JSON.parse(fs.readFileSync(path.join(absDir, "manifest.json"), "utf-8"));
72
+ title = manifest.title || title;
73
+ }
74
+ catch {
75
+ // ignore
76
+ }
77
+ const sseClients = [];
78
+ // Watch for file changes
79
+ const watcher = fs.watch(absDir, { recursive: true }, (_event, filename) => {
80
+ if (!filename)
81
+ return;
82
+ console.log(` [reload] ${filename} changed`);
83
+ for (const client of sseClients) {
84
+ try {
85
+ client.res.write(`event: reload\ndata: ${filename}\n\n`);
86
+ }
87
+ catch {
88
+ // client disconnected
89
+ }
90
+ }
91
+ });
92
+ const server = http.createServer(async (req, res) => {
93
+ const url = new URL(req.url ?? "/", `http://localhost:${port}`);
94
+ const pathname = url.pathname;
95
+ // SSE endpoint for hot reload
96
+ if (pathname === "/__sse") {
97
+ res.writeHead(200, {
98
+ "Content-Type": "text/event-stream",
99
+ "Cache-Control": "no-cache",
100
+ Connection: "keep-alive",
101
+ "Access-Control-Allow-Origin": "*",
102
+ });
103
+ res.write("data: connected\n\n");
104
+ const client = { res };
105
+ sseClients.push(client);
106
+ req.on("close", () => {
107
+ const idx = sseClients.indexOf(client);
108
+ if (idx >= 0)
109
+ sseClients.splice(idx, 1);
110
+ });
111
+ return;
112
+ }
113
+ // Serve index
114
+ if (pathname === "/" || pathname === "/index.html") {
115
+ res.writeHead(200, { "Content-Type": "text/html" });
116
+ res.end(getServeTemplate(title));
117
+ return;
118
+ }
119
+ // Serve presentation data
120
+ if (pathname.startsWith("/data/")) {
121
+ const filePath = path.join(absDir, pathname.slice("/data/".length));
122
+ return serveFile(filePath, res);
123
+ }
124
+ // Serve player bundle from dist
125
+ if (pathname.startsWith("/player/")) {
126
+ const filePath = path.join(playerDistDir, pathname.slice("/player/".length));
127
+ return serveFile(filePath, res);
128
+ }
129
+ // Serve player node_modules (for shiki etc.)
130
+ if (pathname.startsWith("/node_modules/")) {
131
+ const filePath = path.join(playerNodeModulesDir, pathname.slice("/node_modules/".length));
132
+ return serveFile(filePath, res);
133
+ }
134
+ // 404
135
+ res.writeHead(404, { "Content-Type": "text/plain" });
136
+ res.end("Not found");
137
+ });
138
+ server.listen(port, () => {
139
+ console.log(`\n CuppaCue Dev Server`);
140
+ console.log(` ───────────────────`);
141
+ console.log(` Presentation: ${absDir}`);
142
+ console.log(` Server: http://localhost:${port}/`);
143
+ console.log(` Hot reload: enabled`);
144
+ console.log(`\n Press Ctrl+C to stop.\n`);
145
+ });
146
+ process.on("SIGINT", () => {
147
+ watcher.close();
148
+ server.close();
149
+ process.exit(0);
150
+ });
151
+ }
152
+ function serveFile(filePath, res) {
153
+ try {
154
+ const stat = fs.statSync(filePath);
155
+ if (!stat.isFile())
156
+ throw new Error("Not a file");
157
+ const ext = path.extname(filePath);
158
+ const contentType = MIME_TYPES[ext] ?? "application/octet-stream";
159
+ res.writeHead(200, {
160
+ "Content-Type": contentType,
161
+ "Content-Length": stat.size,
162
+ "Cache-Control": "no-cache",
163
+ });
164
+ fs.createReadStream(filePath).pipe(res);
165
+ }
166
+ catch {
167
+ res.writeHead(404, { "Content-Type": "text/plain" });
168
+ res.end("Not found");
169
+ }
170
+ }
171
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { SceneTemplateInfo, PresentationTemplateInfo } from "@cuppacue/shared";
2
+ export interface TemplatePackageExports {
3
+ renderers: Record<string, unknown>;
4
+ sceneTemplates: SceneTemplateInfo[];
5
+ presentationTemplate: PresentationTemplateInfo;
6
+ /** Path to the package's CSS file, if it exists */
7
+ cssPath?: string;
8
+ }
9
+ /**
10
+ * Discover installed CuppaCue template packages.
11
+ * Scans node_modules for packages with `"cuppacue": { "templates": true }`
12
+ * in their package.json.
13
+ */
14
+ export declare function discoverTemplatePackages(rootDir: string): string[];
15
+ /**
16
+ * Load a template package by name.
17
+ * Dynamically imports the package and returns its exports.
18
+ */
19
+ export declare function loadTemplatePackage(packageName: string, rootDir: string): Promise<TemplatePackageExports | null>;
20
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/templates/discover.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BlE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAyBxC"}
@@ -0,0 +1,86 @@
1
+ import { readFileSync, existsSync, readdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Discover installed CuppaCue template packages.
5
+ * Scans node_modules for packages with `"cuppacue": { "templates": true }`
6
+ * in their package.json.
7
+ */
8
+ export function discoverTemplatePackages(rootDir) {
9
+ const nodeModules = join(rootDir, "node_modules");
10
+ if (!existsSync(nodeModules))
11
+ return [];
12
+ const packages = [];
13
+ // Check top-level packages
14
+ for (const entry of safeReaddir(nodeModules)) {
15
+ if (entry.startsWith("."))
16
+ continue;
17
+ if (entry.startsWith("@")) {
18
+ // Scoped packages: check each package inside the scope
19
+ const scopeDir = join(nodeModules, entry);
20
+ for (const scopedEntry of safeReaddir(scopeDir)) {
21
+ const pkgJsonPath = join(scopeDir, scopedEntry, "package.json");
22
+ if (isCuppaCueTemplate(pkgJsonPath)) {
23
+ packages.push(`${entry}/${scopedEntry}`);
24
+ }
25
+ }
26
+ }
27
+ else {
28
+ const pkgJsonPath = join(nodeModules, entry, "package.json");
29
+ if (isCuppaCueTemplate(pkgJsonPath)) {
30
+ packages.push(entry);
31
+ }
32
+ }
33
+ }
34
+ return packages;
35
+ }
36
+ /**
37
+ * Load a template package by name.
38
+ * Dynamically imports the package and returns its exports.
39
+ */
40
+ export async function loadTemplatePackage(packageName, rootDir) {
41
+ try {
42
+ const mod = await import(packageName);
43
+ const exports = {
44
+ renderers: mod.renderers ?? {},
45
+ sceneTemplates: mod.sceneTemplates ?? [],
46
+ presentationTemplate: mod.presentationTemplate,
47
+ };
48
+ // Check for CSS file
49
+ const pkgDir = join(rootDir, "node_modules", packageName);
50
+ const pkgJson = readPkgJson(join(pkgDir, "package.json"));
51
+ if (pkgJson?.exports?.["./styles.css"]) {
52
+ const cssRelPath = pkgJson.exports["./styles.css"];
53
+ const cssPath = join(pkgDir, cssRelPath);
54
+ if (existsSync(cssPath)) {
55
+ exports.cssPath = cssPath;
56
+ }
57
+ }
58
+ return exports;
59
+ }
60
+ catch (err) {
61
+ console.warn(`[CuppaCue] Failed to load template package "${packageName}":`, err);
62
+ return null;
63
+ }
64
+ }
65
+ function safeReaddir(dir) {
66
+ try {
67
+ return readdirSync(dir);
68
+ }
69
+ catch {
70
+ return [];
71
+ }
72
+ }
73
+ function isCuppaCueTemplate(pkgJsonPath) {
74
+ const pkg = readPkgJson(pkgJsonPath);
75
+ return pkg?.cuppacue?.templates === true;
76
+ }
77
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
+ function readPkgJson(path) {
79
+ try {
80
+ return JSON.parse(readFileSync(path, "utf-8"));
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/templates/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface LoadedTemplates {
2
+ /** CSS content from all loaded template packages, concatenated */
3
+ css: string;
4
+ /** Names of successfully loaded packages */
5
+ loaded: string[];
6
+ }
7
+ /**
8
+ * Discover and load all installed CuppaCue template packages.
9
+ * Registers their renderers and metadata into the global registries.
10
+ *
11
+ * Note: In the CLI context, renderers are metadata-only (not used for rendering).
12
+ * The player loads renderers at runtime in the browser.
13
+ * This function primarily registers SceneTemplateInfo and PresentationTemplateInfo
14
+ * so the CLI knows what templates are available for auto-assignment and AI prompts.
15
+ */
16
+ export declare function loadInstalledTemplates(rootDir: string): Promise<LoadedTemplates>;
17
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/templates/loader.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA6BtF"}
@@ -0,0 +1,40 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { registerSceneTemplateInfo, registerPresentationTemplateInfo, } from "@cuppacue/shared";
3
+ import { discoverTemplatePackages, loadTemplatePackage } from "./discover.js";
4
+ /**
5
+ * Discover and load all installed CuppaCue template packages.
6
+ * Registers their renderers and metadata into the global registries.
7
+ *
8
+ * Note: In the CLI context, renderers are metadata-only (not used for rendering).
9
+ * The player loads renderers at runtime in the browser.
10
+ * This function primarily registers SceneTemplateInfo and PresentationTemplateInfo
11
+ * so the CLI knows what templates are available for auto-assignment and AI prompts.
12
+ */
13
+ export async function loadInstalledTemplates(rootDir) {
14
+ const packageNames = discoverTemplatePackages(rootDir);
15
+ const result = { css: "", loaded: [] };
16
+ for (const name of packageNames) {
17
+ const pkg = await loadTemplatePackage(name, rootDir);
18
+ if (!pkg)
19
+ continue;
20
+ // Register metadata
21
+ for (const info of pkg.sceneTemplates) {
22
+ registerSceneTemplateInfo(info);
23
+ }
24
+ if (pkg.presentationTemplate) {
25
+ registerPresentationTemplateInfo(pkg.presentationTemplate);
26
+ }
27
+ // Collect CSS
28
+ if (pkg.cssPath) {
29
+ try {
30
+ result.css += readFileSync(pkg.cssPath, "utf-8") + "\n";
31
+ }
32
+ catch {
33
+ // CSS file read failed, skip
34
+ }
35
+ }
36
+ result.loaded.push(name);
37
+ }
38
+ return result;
39
+ }
40
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/templates/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAU9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAe;IAC1D,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAoB,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAExD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,oBAAoB;QACpB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACtC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;YAC7B,gCAAgC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC7D,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}