@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.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/ai/__tests__/generate.test.d.ts +2 -0
- package/dist/ai/__tests__/generate.test.d.ts.map +1 -0
- package/dist/ai/__tests__/generate.test.js +129 -0
- package/dist/ai/__tests__/generate.test.js.map +1 -0
- package/dist/ai/__tests__/images.test.d.ts +2 -0
- package/dist/ai/__tests__/images.test.d.ts.map +1 -0
- package/dist/ai/__tests__/images.test.js +186 -0
- package/dist/ai/__tests__/images.test.js.map +1 -0
- package/dist/ai/__tests__/prompt.test.d.ts +2 -0
- package/dist/ai/__tests__/prompt.test.d.ts.map +1 -0
- package/dist/ai/__tests__/prompt.test.js +98 -0
- package/dist/ai/__tests__/prompt.test.js.map +1 -0
- package/dist/ai/__tests__/refine.test.d.ts +2 -0
- package/dist/ai/__tests__/refine.test.d.ts.map +1 -0
- package/dist/ai/__tests__/refine.test.js +87 -0
- package/dist/ai/__tests__/refine.test.js.map +1 -0
- package/dist/ai/client.d.ts +4 -0
- package/dist/ai/client.d.ts.map +1 -0
- package/dist/ai/client.js +36 -0
- package/dist/ai/client.js.map +1 -0
- package/dist/ai/example.d.ts +6 -0
- package/dist/ai/example.d.ts.map +1 -0
- package/dist/ai/example.js +284 -0
- package/dist/ai/example.js.map +1 -0
- package/dist/ai/generate.d.ts +15 -0
- package/dist/ai/generate.d.ts.map +1 -0
- package/dist/ai/generate.js +120 -0
- package/dist/ai/generate.js.map +1 -0
- package/dist/ai/images.d.ts +8 -0
- package/dist/ai/images.d.ts.map +1 -0
- package/dist/ai/images.js +71 -0
- package/dist/ai/images.js.map +1 -0
- package/dist/ai/index.d.ts +7 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +7 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompt.d.ts +10 -0
- package/dist/ai/prompt.d.ts.map +1 -0
- package/dist/ai/prompt.js +119 -0
- package/dist/ai/prompt.js.map +1 -0
- package/dist/ai/refine.d.ts +6 -0
- package/dist/ai/refine.d.ts.map +1 -0
- package/dist/ai/refine.js +22 -0
- package/dist/ai/refine.js.map +1 -0
- package/dist/ai/schema.d.ts +5 -0
- package/dist/ai/schema.d.ts.map +1 -0
- package/dist/ai/schema.js +292 -0
- package/dist/ai/schema.js.map +1 -0
- package/dist/commands/__tests__/backstage.test.d.ts +2 -0
- package/dist/commands/__tests__/backstage.test.d.ts.map +1 -0
- package/dist/commands/__tests__/backstage.test.js +45 -0
- package/dist/commands/__tests__/backstage.test.js.map +1 -0
- package/dist/commands/__tests__/export.test.d.ts +2 -0
- package/dist/commands/__tests__/export.test.d.ts.map +1 -0
- package/dist/commands/__tests__/export.test.js +50 -0
- package/dist/commands/__tests__/export.test.js.map +1 -0
- package/dist/commands/ai.d.ts +2 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +113 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/build.d.ts +2 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +121 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/export-pdf.d.ts +9 -0
- package/dist/commands/export-pdf.d.ts.map +1 -0
- package/dist/commands/export-pdf.js +109 -0
- package/dist/commands/export-pdf.js.map +1 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +147 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +54 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/preview.d.ts +2 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +78 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/serve.d.ts +7 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +773 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/github/__tests__/fetcher.test.d.ts +2 -0
- package/dist/github/__tests__/fetcher.test.d.ts.map +1 -0
- package/dist/github/__tests__/fetcher.test.js +102 -0
- package/dist/github/__tests__/fetcher.test.js.map +1 -0
- package/dist/github/__tests__/rewrite-images.test.d.ts +2 -0
- package/dist/github/__tests__/rewrite-images.test.d.ts.map +1 -0
- package/dist/github/__tests__/rewrite-images.test.js +79 -0
- package/dist/github/__tests__/rewrite-images.test.js.map +1 -0
- package/dist/github/__tests__/url-parser.test.d.ts +2 -0
- package/dist/github/__tests__/url-parser.test.d.ts.map +1 -0
- package/dist/github/__tests__/url-parser.test.js +96 -0
- package/dist/github/__tests__/url-parser.test.js.map +1 -0
- package/dist/github/fetcher.d.ts +10 -0
- package/dist/github/fetcher.d.ts.map +1 -0
- package/dist/github/fetcher.js +53 -0
- package/dist/github/fetcher.js.map +1 -0
- package/dist/github/index.d.ts +5 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +4 -0
- package/dist/github/index.js.map +1 -0
- package/dist/github/rewrite-images.d.ts +7 -0
- package/dist/github/rewrite-images.d.ts.map +1 -0
- package/dist/github/rewrite-images.js +26 -0
- package/dist/github/rewrite-images.js.map +1 -0
- package/dist/github/url-parser.d.ts +12 -0
- package/dist/github/url-parser.d.ts.map +1 -0
- package/dist/github/url-parser.js +60 -0
- package/dist/github/url-parser.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown/__tests__/auto-slide.test.d.ts +2 -0
- package/dist/markdown/__tests__/auto-slide.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/auto-slide.test.js +325 -0
- package/dist/markdown/__tests__/auto-slide.test.js.map +1 -0
- package/dist/markdown/__tests__/compiler.test.d.ts +2 -0
- package/dist/markdown/__tests__/compiler.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/compiler.test.js +142 -0
- package/dist/markdown/__tests__/compiler.test.js.map +1 -0
- package/dist/markdown/__tests__/custom-parsers.test.d.ts +2 -0
- package/dist/markdown/__tests__/custom-parsers.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/custom-parsers.test.js +182 -0
- package/dist/markdown/__tests__/custom-parsers.test.js.map +1 -0
- package/dist/markdown/__tests__/frontmatter.test.d.ts +2 -0
- package/dist/markdown/__tests__/frontmatter.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/frontmatter.test.js +162 -0
- package/dist/markdown/__tests__/frontmatter.test.js.map +1 -0
- package/dist/markdown/__tests__/layout.test.d.ts +2 -0
- package/dist/markdown/__tests__/layout.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/layout.test.js +85 -0
- package/dist/markdown/__tests__/layout.test.js.map +1 -0
- package/dist/markdown/__tests__/parser.test.d.ts +2 -0
- package/dist/markdown/__tests__/parser.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/parser.test.js +646 -0
- package/dist/markdown/__tests__/parser.test.js.map +1 -0
- package/dist/markdown/__tests__/timesheet-gen.test.d.ts +2 -0
- package/dist/markdown/__tests__/timesheet-gen.test.d.ts.map +1 -0
- package/dist/markdown/__tests__/timesheet-gen.test.js +90 -0
- package/dist/markdown/__tests__/timesheet-gen.test.js.map +1 -0
- package/dist/markdown/auto-slide.d.ts +16 -0
- package/dist/markdown/auto-slide.d.ts.map +1 -0
- package/dist/markdown/auto-slide.js +144 -0
- package/dist/markdown/auto-slide.js.map +1 -0
- package/dist/markdown/compiler.d.ts +12 -0
- package/dist/markdown/compiler.d.ts.map +1 -0
- package/dist/markdown/compiler.js +47 -0
- package/dist/markdown/compiler.js.map +1 -0
- package/dist/markdown/custom-parsers.d.ts +69 -0
- package/dist/markdown/custom-parsers.d.ts.map +1 -0
- package/dist/markdown/custom-parsers.js +227 -0
- package/dist/markdown/custom-parsers.js.map +1 -0
- package/dist/markdown/frontmatter.d.ts +33 -0
- package/dist/markdown/frontmatter.d.ts.map +1 -0
- package/dist/markdown/frontmatter.js +83 -0
- package/dist/markdown/frontmatter.js.map +1 -0
- package/dist/markdown/id.d.ts +4 -0
- package/dist/markdown/id.d.ts.map +1 -0
- package/dist/markdown/id.js +15 -0
- package/dist/markdown/id.js.map +1 -0
- package/dist/markdown/index.d.ts +8 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +6 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/parser.d.ts +35 -0
- package/dist/markdown/parser.d.ts.map +1 -0
- package/dist/markdown/parser.js +605 -0
- package/dist/markdown/parser.js.map +1 -0
- package/dist/markdown/timesheet-gen.d.ts +6 -0
- package/dist/markdown/timesheet-gen.d.ts.map +1 -0
- package/dist/markdown/timesheet-gen.js +223 -0
- package/dist/markdown/timesheet-gen.js.map +1 -0
- package/dist/player/CuePlayer.d.ts +58 -0
- package/dist/player/CuePlayer.d.ts.map +1 -0
- package/dist/player/NavBar.d.ts +31 -0
- package/dist/player/NavBar.d.ts.map +1 -0
- package/dist/player/PresenterView.d.ts +25 -0
- package/dist/player/PresenterView.d.ts.map +1 -0
- package/dist/player/SlideOverview.d.ts +16 -0
- package/dist/player/SlideOverview.d.ts.map +1 -0
- package/dist/player/__mocks__/chart.d.ts +29 -0
- package/dist/player/__mocks__/chart.d.ts.map +1 -0
- package/dist/player/__mocks__/mermaid.d.ts +8 -0
- package/dist/player/__mocks__/mermaid.d.ts.map +1 -0
- package/dist/player/__tests__/animator.test.d.ts +2 -0
- package/dist/player/__tests__/animator.test.d.ts.map +1 -0
- package/dist/player/__tests__/layout.test.d.ts +2 -0
- package/dist/player/__tests__/layout.test.d.ts.map +1 -0
- package/dist/player/__tests__/overview.test.d.ts +2 -0
- package/dist/player/__tests__/overview.test.d.ts.map +1 -0
- package/dist/player/__tests__/timeline.test.d.ts +2 -0
- package/dist/player/__tests__/timeline.test.d.ts.map +1 -0
- package/dist/player/animator.d.ts +4 -0
- package/dist/player/animator.d.ts.map +1 -0
- package/dist/player/cuppacue-player.css +1 -0
- package/dist/player/cuppacue-player.js +3247 -0
- package/dist/player/index.d.ts +14 -0
- package/dist/player/index.d.ts.map +1 -0
- package/dist/player/loader.d.ts +3 -0
- package/dist/player/loader.d.ts.map +1 -0
- package/dist/player/main.d.ts +2 -0
- package/dist/player/main.d.ts.map +1 -0
- package/dist/player/navigator.d.ts +27 -0
- package/dist/player/navigator.d.ts.map +1 -0
- package/dist/player/renderer.d.ts +9 -0
- package/dist/player/renderer.d.ts.map +1 -0
- package/dist/player/renderers/cards.d.ts +3 -0
- package/dist/player/renderers/cards.d.ts.map +1 -0
- package/dist/player/renderers/chart.d.ts +3 -0
- package/dist/player/renderers/chart.d.ts.map +1 -0
- package/dist/player/renderers/icons.d.ts +6 -0
- package/dist/player/renderers/icons.d.ts.map +1 -0
- package/dist/player/renderers/mermaid.d.ts +3 -0
- package/dist/player/renderers/mermaid.d.ts.map +1 -0
- package/dist/player/renderers/stats.d.ts +3 -0
- package/dist/player/renderers/stats.d.ts.map +1 -0
- package/dist/player/renderers/terminal.d.ts +3 -0
- package/dist/player/renderers/terminal.d.ts.map +1 -0
- package/dist/player/themes/dark.d.ts +2 -0
- package/dist/player/themes/dark.d.ts.map +1 -0
- package/dist/player/themes/light.d.ts +2 -0
- package/dist/player/themes/light.d.ts.map +1 -0
- package/dist/player/timeline.d.ts +43 -0
- package/dist/player/timeline.d.ts.map +1 -0
- package/dist/serve.d.ts +2 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +171 -0
- package/dist/serve.js.map +1 -0
- package/dist/templates/discover.d.ts +20 -0
- package/dist/templates/discover.d.ts.map +1 -0
- package/dist/templates/discover.js +86 -0
- package/dist/templates/discover.js.map +1 -0
- package/dist/templates/loader.d.ts +17 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/loader.js +40 -0
- package/dist/templates/loader.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/serve.d.ts
ADDED
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAW1C;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,2BAA2B;IAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAEpC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,uDAAuD;YACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC1C,KAAK,MAAM,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;gBAChE,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;oBACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,WAAW,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;YAC7D,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,OAAO,GAA2B;YACtC,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;YAC9B,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;YACxC,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;SAC/C,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACzC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,+CAA+C,WAAW,IAAI,EAAE,GAAG,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACrC,OAAO,GAAG,EAAE,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,8DAA8D;AAC9D,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|