@mulmoclaude/mulmoscript-plugin 1.0.0 → 1.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 (50) hide show
  1. package/dist/core/paths.d.ts +2 -5
  2. package/dist/core/paths.d.ts.map +1 -1
  3. package/dist/core/plugin.d.ts.map +1 -1
  4. package/dist/core/validate.d.ts.map +1 -1
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/{plugin-Bi986Wga.cjs → plugin-BLp8tSYt.cjs} +86 -46
  8. package/dist/plugin-BLp8tSYt.cjs.map +1 -0
  9. package/dist/{plugin-BQyzxkui.js → plugin-CXhOP_xU.js} +81 -47
  10. package/dist/plugin-CXhOP_xU.js.map +1 -0
  11. package/dist/server/mulmoErrorCapture.d.ts.map +1 -1
  12. package/dist/server/ops.d.ts.map +1 -1
  13. package/dist/server/support.d.ts +0 -5
  14. package/dist/server/support.d.ts.map +1 -1
  15. package/dist/server/types.d.ts +3 -7
  16. package/dist/server/types.d.ts.map +1 -1
  17. package/dist/server.cjs +34 -58
  18. package/dist/server.cjs.map +1 -1
  19. package/dist/server.js +33 -57
  20. package/dist/server.js.map +1 -1
  21. package/dist/style.css +36 -18
  22. package/dist/vue/View.vue.d.ts.map +1 -1
  23. package/dist/vue/components/BeatLightbox.vue.d.ts +25 -0
  24. package/dist/vue/components/BeatLightbox.vue.d.ts.map +1 -0
  25. package/dist/vue/components/CharacterStrip.vue.d.ts +29 -0
  26. package/dist/vue/components/CharacterStrip.vue.d.ts.map +1 -0
  27. package/dist/vue/components/MulmoScriptToolbar.vue.d.ts +26 -0
  28. package/dist/vue/components/MulmoScriptToolbar.vue.d.ts.map +1 -0
  29. package/dist/vue/composables/useBeatMovie.d.ts +20 -0
  30. package/dist/vue/composables/useBeatMovie.d.ts.map +1 -0
  31. package/dist/vue/composables/useCharacterImages.d.ts +31 -0
  32. package/dist/vue/composables/useCharacterImages.d.ts.map +1 -0
  33. package/dist/vue/composables/useDeckEditor.d.ts +18 -0
  34. package/dist/vue/composables/useDeckEditor.d.ts.map +1 -0
  35. package/dist/vue/composables/useMediaExport.d.ts +26 -0
  36. package/dist/vue/composables/useMediaExport.d.ts.map +1 -0
  37. package/dist/vue/helpers.d.ts +78 -0
  38. package/dist/vue/helpers.d.ts.map +1 -1
  39. package/dist/vue/support.d.ts +6 -4
  40. package/dist/vue/support.d.ts.map +1 -1
  41. package/dist/vue/transport.d.ts.map +1 -1
  42. package/dist/vue/viewTypes.d.ts +49 -0
  43. package/dist/vue/viewTypes.d.ts.map +1 -0
  44. package/dist/vue.cjs +1016 -715
  45. package/dist/vue.cjs.map +1 -1
  46. package/dist/vue.js +1013 -712
  47. package/dist/vue.js.map +1 -1
  48. package/package.json +11 -7
  49. package/dist/plugin-BQyzxkui.js.map +0 -1
  50. package/dist/plugin-Bi986Wga.cjs.map +0 -1
@@ -0,0 +1,20 @@
1
+ import { type ComputedRef } from "vue";
2
+ import type { MulmoScriptTransport } from "../transport";
3
+ import type { MulmoScriptHostAdapter } from "../hostAdapter";
4
+ export interface UseBeatMovieOptions {
5
+ api: MulmoScriptTransport;
6
+ adapter: MulmoScriptHostAdapter;
7
+ filePath: ComputedRef<string>;
8
+ }
9
+ export declare function useBeatMovie({ api, adapter, filePath }: UseBeatMovieOptions): {
10
+ beatMovies: Record<number, string>;
11
+ beatMovieUrls: Record<number, string>;
12
+ beatMovieOpen: Record<number, boolean>;
13
+ beatMovieLoading: Record<number, boolean>;
14
+ loadExistingBeatMovie: (index: number) => Promise<void>;
15
+ playBeatMovie: (index: number) => Promise<void>;
16
+ closeBeatMovie: (index: number) => void;
17
+ invalidateBeatMovie: (index: number) => void;
18
+ resetBeatMovies: () => void;
19
+ };
20
+ //# sourceMappingURL=useBeatMovie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBeatMovie.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useBeatMovie.ts"],"names":[],"mappings":"AAKA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAGjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,mBAAmB;;;;;mCAQ9B,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;2BAU9B,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;4BAqB3B,MAAM,KAAG,IAAI;iCAMR,MAAM,KAAG,IAAI;2BAKrB,IAAI;EAgBjC"}
@@ -0,0 +1,31 @@
1
+ import { type ComputedRef } from "vue";
2
+ import type { MulmoScriptTransport } from "../transport";
3
+ type CharRenderState = "idle" | "rendering" | "done" | "error";
4
+ type ScriptImages = Record<string, {
5
+ type?: string;
6
+ prompt?: string;
7
+ }> | undefined;
8
+ export interface UseCharacterImagesOptions {
9
+ api: MulmoScriptTransport;
10
+ filePath: ComputedRef<string>;
11
+ chatSessionId: ComputedRef<string | undefined>;
12
+ getImages: () => ScriptImages;
13
+ }
14
+ export declare function useCharacterImages({ api, filePath, chatSessionId, getImages }: UseCharacterImagesOptions): {
15
+ charRenderState: Record<string, CharRenderState>;
16
+ charImages: Record<string, string>;
17
+ charErrors: Record<string, string>;
18
+ charDragOver: Record<string, boolean>;
19
+ characterKeys: ComputedRef<string[]>;
20
+ characterPrompt: (key: string) => string;
21
+ onCharDragOver: (event: DragEvent, key: string) => void;
22
+ onCharDragLeave: (key: string) => void;
23
+ onCharDrop: (event: DragEvent, key: string) => Promise<void>;
24
+ loadExistingCharacterImage: (key: string) => Promise<void>;
25
+ refreshMissingCharacterImages: () => void;
26
+ renderCharacter: (key: string, force: boolean) => Promise<void>;
27
+ generateAllCharacters: () => Promise<void>;
28
+ resetCharacters: () => void;
29
+ };
30
+ export {};
31
+ //# sourceMappingURL=useCharacterImages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCharacterImages.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useCharacterImages.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAI3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,KAAK,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/D,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,aAAa,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,SAAS,EAAE,MAAM,YAAY,CAAC;CAC/B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,yBAAyB;;;;;;2BAazE,MAAM,KAAG,MAAM;4BAId,SAAS,OAAO,MAAM,KAAG,IAAI;2BAM9B,MAAM,KAAG,IAAI;wBAIV,SAAS,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;sCA4BxB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;yCAW3B,IAAI;2BAIV,MAAM,SAAS,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC;iCAelC,OAAO,CAAC,IAAI,CAAC;2BAIzB,IAAI;EAoBjC"}
@@ -0,0 +1,18 @@
1
+ import { type ComputedRef } from "vue";
2
+ import type { MulmoScriptTransport } from "../transport";
3
+ import type { DeckScriptShape, MulmoScript } from "../viewTypes";
4
+ export interface UseDeckEditorOptions {
5
+ api: MulmoScriptTransport;
6
+ filePath: ComputedRef<string>;
7
+ effectiveScript: ComputedRef<MulmoScript>;
8
+ /** Persist the saved script back into the parent's toolResult so the
9
+ * in-memory script and reactive beats[] stay in sync without a remount. */
10
+ commitScript: (next: MulmoScript) => void;
11
+ }
12
+ export declare function useDeckEditor({ api, filePath, effectiveScript, commitScript }: UseDeckEditorOptions): {
13
+ isDeck: ComputedRef<boolean>;
14
+ deckScriptInput: ComputedRef<DeckScriptShape>;
15
+ onDeckUpdate: (next: DeckScriptShape) => void;
16
+ flushPendingDeckSave: () => void;
17
+ };
18
+ //# sourceMappingURL=useDeckEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDeckEditor.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useDeckEditor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIjE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C;gFAC4E;IAC5E,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;yBA+BtE,eAAe,KAAG,IAAI;gCAOjB,IAAI;EAQtC"}
@@ -0,0 +1,26 @@
1
+ import { type ComputedRef, type Ref } from "vue";
2
+ import type { MulmoScriptTransport } from "../transport";
3
+ import type { MulmoScriptHostAdapter } from "../hostAdapter";
4
+ export interface UseMediaExportOptions {
5
+ api: MulmoScriptTransport;
6
+ adapter: MulmoScriptHostAdapter;
7
+ filePath: ComputedRef<string>;
8
+ chatSessionId: ComputedRef<string | undefined>;
9
+ }
10
+ export declare function useMediaExport({ api, adapter, filePath, chatSessionId }: UseMediaExportOptions): {
11
+ moviePath: Ref<string | null, string | null>;
12
+ movieGenerating: Ref<boolean, boolean>;
13
+ movieDownloading: Ref<boolean, boolean>;
14
+ movieError: Ref<string | null, string | null>;
15
+ pdfPath: Ref<string | null, string | null>;
16
+ pdfGenerating: Ref<boolean, boolean>;
17
+ pdfDownloading: Ref<boolean, boolean>;
18
+ generateMovie: () => Promise<void>;
19
+ downloadMovie: () => Promise<void>;
20
+ refreshMoviePath: () => Promise<void>;
21
+ generatePdf: () => Promise<void>;
22
+ downloadPdf: () => Promise<void>;
23
+ refreshPdfPath: () => Promise<void>;
24
+ resetMedia: () => void;
25
+ };
26
+ //# sourceMappingURL=useMediaExport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaExport.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useMediaExport.ts"],"names":[],"mappings":"AAOA,OAAO,EAAO,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAGtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,aAAa,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAChD;AAID,wBAAgB,cAAc,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,qBAAqB;;;;;;;;yBAgB7D,OAAO,CAAC,IAAI,CAAC;yBAgEnB,OAAO,CAAC,IAAI,CAAC;4BAnCJ,OAAO,CAAC,IAAI,CAAC;uBAblB,OAAO,CAAC,IAAI,CAAC;uBAoDnB,OAAO,CAAC,IAAI,CAAC;0BA/BJ,OAAO,CAAC,IAAI,CAAC;sBAqCvB,IAAI;EAwB5B"}
@@ -56,6 +56,19 @@ export declare function beatMayHaveMovie(beat: {
56
56
  animation?: unknown;
57
57
  };
58
58
  }): boolean;
59
+ /**
60
+ * True for a beat whose image merely REFERENCES another beat's image
61
+ * (`image: { type: "beat", id }` — mulmoBeatReferenceMediaSchema). Such a
62
+ * beat owns no asset of its own, so there is nothing to generate for it:
63
+ * the View hides the Generate button (offering it produced a render that
64
+ * could never succeed on its own terms).
65
+ */
66
+ export declare function isBeatImageReference(beat: {
67
+ image?: {
68
+ type?: string;
69
+ [key: string]: unknown;
70
+ };
71
+ }): boolean;
59
72
  /** Pure check: is every beat in the script a `slide`-typed beat?
60
73
  * When true, the View mounts `@mulmocast/deck-web`'s
61
74
  * `MulmoScriptDeckEditor` instead of the per-beat list UI (#1575).
@@ -64,4 +77,69 @@ export declare function beatMayHaveMovie(beat: {
64
77
  * state. Mixed scripts (any non-`slide` beat) also return false; that
65
78
  * case is deferred to a future phase. */
66
79
  export declare function isAllSlideDeck(script: unknown): boolean;
80
+ /** A single MulmoScript beat as the View consumes it — every field
81
+ * optional so the empty-beat fallback (`effectiveBeat` on an
82
+ * out-of-range index) is a valid instance without a cast. */
83
+ export interface Beat {
84
+ speaker?: string;
85
+ text?: string;
86
+ id?: string;
87
+ imagePrompt?: string;
88
+ moviePrompt?: string;
89
+ image?: {
90
+ type: string;
91
+ [key: string]: unknown;
92
+ };
93
+ /** Beat duration in seconds. The mulmocast schema notes this is
94
+ * "Used only when the text is empty" — the silent-beat Play loop
95
+ * uses it as the auto-advance timer (#1073). */
96
+ duration?: number;
97
+ }
98
+ /** Resolve the beat the View should render at `index`: the user's
99
+ * in-place edit (`overrides`) wins over the on-disk beat, and an
100
+ * out-of-range index yields an empty beat so callers can read
101
+ * `.text` / `.image` without a guard. */
102
+ export declare function effectiveBeat(overrides: Record<number, Beat>, beats: readonly Beat[], index: number): Beat;
103
+ /** Beat-strip hover tooltip: the beat text, truncated with an ellipsis
104
+ * past the cap. Missing text yields an empty string. Text of exactly
105
+ * the cap length is returned whole (only a longer string is cut). */
106
+ export declare function beatTooltip(text: string | undefined): string;
107
+ /** The prompt for a character image, or "" when the key or its prompt
108
+ * is absent — the character strip renders the empty string as no
109
+ * caption rather than `undefined`. */
110
+ export declare function characterPrompt(images: Record<string, {
111
+ prompt?: string;
112
+ }> | undefined, key: string): string;
113
+ /** Is the in-editor JSON for a beat currently valid? A missing entry
114
+ * (source editor never opened) validates the empty string, which is
115
+ * not parseable JSON, so it reports invalid rather than throwing. */
116
+ export declare function isValidBeat(source: string | undefined, schema: SafeParseSchema): boolean;
117
+ /** Stale-response guard: a per-beat / per-character response is stale
118
+ * once the View has navigated to a different result, i.e. the current
119
+ * file path no longer matches the one captured when the call was made.
120
+ * Keeping the direction pinned matters — an inverted check would let
121
+ * script A's late responses write into script B's state. */
122
+ export declare function staleSince(currentFilePath: string, requestedFilePath: string): boolean;
123
+ /** Pretty-print a script (or any value) as the source-editor / clipboard
124
+ * text — two-space indent, matching what the beat and disk views emit. */
125
+ export declare function scriptSourceText(value: unknown): string;
126
+ /** Basename for a download `<a download>` attribute, falling back when
127
+ * the path has no basename. Mirrors the exact existing behaviour, and
128
+ * it has a sharp edge: `.pop()` returns "" (not undefined) for a
129
+ * trailing slash or empty path, and `??` does NOT replace "", so those
130
+ * yield an empty filename rather than the fallback. Server paths always
131
+ * carry a basename, so this never bites in practice — pinned so a later
132
+ * reader doesn't "simplify" `??` to `||` and change behaviour. */
133
+ export declare function downloadFilename(path: string, fallback: string): string;
134
+ /** Narrow a script-supplied silent-beat duration to a safe positive number.
135
+ * Zero / negative / NaN / Infinity / non-number collapse the auto-advance
136
+ * timer to an immediate fire, which races the Play loop through every silent
137
+ * beat in a single tick (#1365) — fall back to the default so a run of silent
138
+ * beats stays watchable. The script's own valid `duration` always wins. */
139
+ export declare function resolveSilentAdvanceSeconds(raw: unknown, defaultSec: number): number;
140
+ /** Delete every own enumerable key of each record, in place. Used to reset the
141
+ * View's per-beat / per-character reactive maps between scripts — passing the
142
+ * reactive proxies mutates them so the template re-renders empty. Replaces a
143
+ * wall of hand-rolled `Object.keys(map).forEach(delete)` loops. */
144
+ export declare function clearReactiveRecords(...records: object[]): void;
67
145
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/vue/helpers.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK7I;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAE3J;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACrD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAQ/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GAAG,OAAO,CAGxH;AAED;;;;;;0CAM0C;AAC1C,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CASvD"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/vue/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { type Ref } from "vue";
2
2
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
3
- /** Canonical unknown-caught-value human-readable string. Non-Error
4
- * objects with a `details` (gRPC convention) or `message` string field
5
- * have that field surfaced. */
6
- export declare function errorMessage(err: unknown, fallback?: string): string;
3
+ /** Read a dropped image File as a base64 data URL, the form the upload
4
+ * dispatches expect. Shared by the beat and character drop handlers.
5
+ * `readAsDataURL` always yields a string on load; the non-string reject
6
+ * is an unreachable guard kept so the resolve type stays `string` without
7
+ * a cast. */
8
+ export declare function readFileAsDataUrl(file: File): Promise<string>;
7
9
  export interface UseClipboardCopyHandle {
8
10
  copied: Ref<boolean>;
9
11
  copy: (text: string) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/vue/support.ts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEpC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;gCAEgC;AAChC,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CASpE;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;sCAEsC;AACtC,wBAAgB,gBAAgB,CAAC,OAAO,SAAO,GAAG,sBAAsB,CAgBvE"}
1
+ {"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/vue/support.ts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEpC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;cAIc;AACd,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAW7D;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;sCAEsC;AACtC,wBAAgB,gBAAgB,CAAC,OAAO,SAAO,GAAG,sBAAsB,CAgBvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/vue/transport.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAIvH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,KAAK,OAAO,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAkBtH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnI;gEAC4D;IAC5D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7G;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CA4B9D"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/vue/transport.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAKvH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,KAAK,OAAO,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAkBtH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnI;gEAC4D;IAC5D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7G;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CA4B9D"}
@@ -0,0 +1,49 @@
1
+ import type { SlideLayout, SlideTheme } from "@mulmocast/deck-web";
2
+ import type { Beat } from "./helpers";
3
+ export interface ImageEntry {
4
+ type: string;
5
+ prompt?: string;
6
+ [key: string]: unknown;
7
+ }
8
+ /** Open-lightbox state. `index` is the beat index for a beat image and `-1`
9
+ * for a character image, which `isCharacter` marks so the beat-strip and
10
+ * prev/next arrows stay hidden for characters. */
11
+ export interface LightboxState {
12
+ src: string;
13
+ text?: string;
14
+ index: number;
15
+ isCharacter?: boolean;
16
+ }
17
+ export interface MulmoScript {
18
+ title?: string;
19
+ description?: string;
20
+ lang?: string;
21
+ beats?: Beat[];
22
+ imageParams?: {
23
+ images?: Record<string, ImageEntry>;
24
+ [key: string]: unknown;
25
+ };
26
+ [key: string]: unknown;
27
+ }
28
+ export interface DeckBeatShape {
29
+ image?: {
30
+ type?: string;
31
+ slide?: SlideLayout;
32
+ theme?: SlideTheme;
33
+ [k: string]: unknown;
34
+ };
35
+ [k: string]: unknown;
36
+ }
37
+ export interface DeckScriptShape {
38
+ beats?: DeckBeatShape[];
39
+ presentationStyle?: {
40
+ slideParams?: {
41
+ theme?: SlideTheme;
42
+ };
43
+ };
44
+ slideParams?: {
45
+ theme?: SlideTheme;
46
+ };
47
+ [k: string]: unknown;
48
+ }
49
+ //# sourceMappingURL=viewTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewTypes.d.ts","sourceRoot":"","sources":["../../src/vue/viewTypes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;mDAEmD;AACnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;IACF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IACrC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB"}