pro-visu 0.3.1 → 0.5.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/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
 
3
- declare const easingSchema: z.ZodEnum<["linear", "easeInOutCubic", "easeInOutQuad", "easeOutCubic", "easeInOutSine", "easeInOutExpo", "easeOutQuint"]>;
3
+ declare const easingSchema: z.ZodEnum<["linear", "ease-in-out-cubic", "ease-in-out-quad", "ease-out-cubic", "ease-in-out-sine", "ease-in-out-expo", "ease-out-quint"]>;
4
4
  type Easing = z.infer<typeof easingSchema>;
5
5
  /** One choreographed scroll step. */
6
6
  interface ChoreographyStepInput {
@@ -10,7 +10,7 @@ interface ChoreographyStepInput {
10
10
  durationMs?: number;
11
11
  /** Hold time at this target after arriving (ms). Default 800. */
12
12
  holdMs?: number;
13
- /** Easing for the travel to this target. Default "easeInOutCubic". */
13
+ /** Easing for the travel to this target. Default "ease-in-out-cubic". */
14
14
  easing?: Easing;
15
15
  }
16
16
  /** One step of a scripted interaction (`actions` / `focus.actions`). */
@@ -83,7 +83,7 @@ interface KenBurnsInput {
83
83
  scaleFrom?: number;
84
84
  /** End scale. Default 1.08. */
85
85
  scaleTo?: number;
86
- /** Easing for the zoom ramp. Default "easeInOutCubic". */
86
+ /** Easing for the zoom ramp. Default "ease-in-out-cubic". */
87
87
  easing?: Easing;
88
88
  /** Zoom origin X within the viewport (0 = left, 1 = right). Default 0.5. */
89
89
  originX?: number;
@@ -111,7 +111,7 @@ interface FocusInput {
111
111
  holdMs?: number;
112
112
  }
113
113
  /** One extra viewport to also capture the reel at (`viewports`). */
114
- interface ViewportInput {
114
+ interface ViewportInput$1 {
115
115
  /** Name appended to the asset (<name>-<viewport name>). */
116
116
  name: string;
117
117
  /** Viewport width in CSS px. */
@@ -153,8 +153,8 @@ interface ScrollReelOptionsInput {
153
153
  /** Output frames per second (re-encoded from the recording). Default 30. */
154
154
  fps?: number;
155
155
  /** Time to scroll from top to bottom (ms). Default 6000. */
156
- duration?: number;
157
- /** Easing for the default top→bottom scroll. Default "easeInOutCubic". */
156
+ durationMs?: number;
157
+ /** Easing for the default top→bottom scroll. Default "ease-in-out-cubic". */
158
158
  easing?: Easing;
159
159
  /** Dwell at the top before scrolling (ms). Default 500. */
160
160
  startDelayMs?: number;
@@ -207,7 +207,7 @@ interface ScrollReelOptionsInput {
207
207
  /** Add this class to <html> before capture (e.g. to trigger a CSS-class dark theme). Omit for none. */
208
208
  themeClass?: string;
209
209
  /** Also capture the reel at these viewports; each emits an asset (<name>-<viewport name>). */
210
- viewports?: ViewportInput[];
210
+ viewports?: ViewportInput$1[];
211
211
  /**
212
212
  * Capture several routes and concatenate them into one reel ("frames" path). Emits a single asset
213
213
  * (variants skipped; aspect/outputs apply to the final tour).
@@ -257,8 +257,8 @@ interface ScrollReelOptionsInput {
257
257
  /** Author-facing input (documented for editor hover; the schema validates it at run time). */
258
258
  type ScrollReelOptions = ScrollReelOptionsInput;
259
259
 
260
- /** A named viewport to capture at; each breakpoint emits its own asset. */
261
- interface BreakpointInput {
260
+ /** A named viewport to capture at; each viewport emits its own asset. */
261
+ interface ViewportInput {
262
262
  /** Label for this viewport — used in the filename + manifest id (e.g. "desktop"). */
263
263
  name: string;
264
264
  /** Viewport width in CSS px. */
@@ -268,10 +268,10 @@ interface BreakpointInput {
268
268
  * full page height); only affects viewport/element captures.
269
269
  */
270
270
  height?: number;
271
- /** Override the generator-level `deviceScaleFactor` for this breakpoint. Omit to inherit it. */
271
+ /** Override the generator-level `deviceScaleFactor` for this viewport. Omit to inherit it. */
272
272
  deviceScaleFactor?: number;
273
273
  }
274
- /** A specific element to capture (in addition to the page) at each breakpoint. */
274
+ /** A specific element to capture (in addition to the page) at each viewport. */
275
275
  interface ElementShotInput {
276
276
  /** CSS selector of the element to shoot. */
277
277
  selector: string;
@@ -280,14 +280,14 @@ interface ElementShotInput {
280
280
  }
281
281
  /**
282
282
  * Author-facing options for the `screenshots` generator — responsive stills of a page (one per
283
- * breakpoint), plus optional per-element crops. Everything is optional; sensible defaults apply.
283
+ * viewport), plus optional per-element crops. Everything is optional; sensible defaults apply.
284
284
  */
285
285
  interface ScreenshotsOptionsInput {
286
286
  /**
287
287
  * Viewports to capture at (at least one); each emits its own asset. Default:
288
288
  * desktop 1440×900 + mobile 390×844.
289
289
  */
290
- breakpoints?: BreakpointInput[];
290
+ viewports?: ViewportInput[];
291
291
  /** Capture the entire scrollable page (vs. just the viewport). Default true. */
292
292
  fullPage?: boolean;
293
293
  /** Image format. Default "png". */
@@ -300,7 +300,7 @@ interface ScreenshotsOptionsInput {
300
300
  waitUntil?: "load" | "domcontentloaded" | "networkidle" | "commit";
301
301
  /** Optional element to wait for before capturing (e.g. a hero image). Omit to skip. */
302
302
  waitForSelector?: string;
303
- /** Specific elements to crop (in addition to the page) at every breakpoint. Default none. */
303
+ /** Specific elements to crop (in addition to the page) at every viewport. Default none. */
304
304
  elements?: ElementShotInput[];
305
305
  /** Capture with a transparent background (png only). Default false. */
306
306
  omitBackground?: boolean;
@@ -318,9 +318,9 @@ type WallEasing = z.infer<typeof wallEasingEnum>;
318
318
  interface WallPulseInput {
319
319
  /** When the pulse starts, as a fraction of the clip (0..1). */
320
320
  at: number;
321
- /** How long the move takes, as a fraction of the clip (0..1). If `at + duration > 1`, the start
321
+ /** How long the move takes, as a fraction of the clip (0..1). If `at + span > 1`, the start
322
322
  * shifts back so the move ends at the loop point. */
323
- duration: number;
323
+ span: number;
324
324
  /** How far it travels, in periods (1 = one full tile-set / one wrap). Usually 0..1. */
325
325
  distance: number;
326
326
  /** Easing of the move's ramp. Default "ease-in-out". */
@@ -373,8 +373,8 @@ interface WallOptionsInput {
373
373
  deviceScaleFactor?: number;
374
374
  /** Output frames per second. Default 30. */
375
375
  fps?: number;
376
- /** Clip length in seconds — the whole loop. Default 16. */
377
- durationSeconds?: number;
376
+ /** Clip length in ms — the whole loop. Default 16000. */
377
+ durationMs?: number;
378
378
  /** x264 quality, 0–51 (lower = better quality / larger file). Default 18. */
379
379
  crf?: number;
380
380
  /**
@@ -430,8 +430,8 @@ type WallOptions = WallOptionsInput;
430
430
  interface PulseInput {
431
431
  /** Human label for the beat, e.g. "color sweep" — purely to keep the config readable. */
432
432
  name?: string;
433
- /** Length of this beat, in seconds. */
434
- duration: number;
433
+ /** Length of this beat in ms. */
434
+ durationMs: number;
435
435
  /** Fraction of cells whose glyph changes during this beat (0..1; 1 = every cell once; 0 = a hold). */
436
436
  chars?: number;
437
437
  /** Fraction of cells whose color changes during this beat (0..1; 1 = every cell once). */
@@ -496,8 +496,8 @@ interface SpecimenOptionsInput {
496
496
  demo?: boolean;
497
497
  /** Output frames per second. Default 30. */
498
498
  fps?: number;
499
- /** Clip length in seconds. Defaults to the (mirrored) sum of the pulse durations; set to override. */
500
- durationSeconds?: number;
499
+ /** Clip length in ms. Defaults to the (mirrored) sum of the pulse durations; set to override. */
500
+ durationMs?: number;
501
501
  /** Output frame width in px. Default 1920. */
502
502
  width?: number;
503
503
  /** Output frame height in px. Default 1080. */
@@ -626,10 +626,10 @@ interface PaletteReelOptionsInput {
626
626
  orientation?: "rows" | "columns";
627
627
  /** Fields revealed when a color expands (the name is always shown, so it's ignored here). Default hex + oklch + rgb. */
628
628
  details?: FieldId[];
629
- /** How long each color stays fully open before handing off to the next. Default 2. */
630
- holdSeconds?: number;
631
- /** Crossfade length from one open color to the next. Default 0.7. */
632
- transitionSeconds?: number;
629
+ /** How long each color stays fully open before handing off to the next (ms). Default 2000. */
630
+ holdMs?: number;
631
+ /** Crossfade length from one open color to the next (ms). Default 700. */
632
+ transitionMs?: number;
633
633
  /**
634
634
  * Ping-pong the sweep (down the list then back up) so every handoff is between neighbouring bands —
635
635
  * the open band only ever slides by one, avoiding the "pinch" of a last→first jump at the loop seam.
@@ -638,8 +638,8 @@ interface PaletteReelOptionsInput {
638
638
  bounce?: boolean;
639
639
  /** Easing applied to the crossfade ramp. Default "ease-in-out". */
640
640
  easing?: "linear" | "ease-in" | "ease-out" | "ease-in-out";
641
- /** Clip length override (s). Omit to derive (count × (hold + transition)) for a clean loop. */
642
- durationSeconds?: number;
641
+ /** Clip length override (ms). Omit to derive (count × (hold + transition)) for a clean loop. */
642
+ durationMs?: number;
643
643
  /** How many times a sliver's share a fully-open band takes (a collapsed sliver is the baseline). Default 12. */
644
644
  grownFlex?: number;
645
645
  /** Minimum cross-size of a sliver in px so its name stays legible. Default 0 (derive from height). */
@@ -741,6 +741,19 @@ interface ServerSettingsInput {
741
741
  /** If a server is already reachable at the URL, use it as-is (don't start/stop one). */
742
742
  reuseExisting?: boolean;
743
743
  }
744
+ interface CaptureSettingsInput {
745
+ /** Query params appended to every URL-based asset, e.g. `{ capture: "1" }` → `?capture=1`. */
746
+ query?: Record<string, string>;
747
+ /** Cookies set on every capture context before navigation (scoped to the asset's origin). */
748
+ cookies?: {
749
+ name: string;
750
+ value: string;
751
+ }[];
752
+ /** localStorage entries seeded (per origin) before the page's own scripts run. */
753
+ localStorage?: Record<string, string>;
754
+ /** JS run in every page before its own scripts, e.g. `window.__PV_CAPTURE__ = true`. */
755
+ initScript?: string;
756
+ }
744
757
  interface ShowcaseSettingsInput {
745
758
  /** Output directory for generated assets, relative to the repo root (default "pro-visu"). */
746
759
  outDir?: string;
@@ -759,6 +772,8 @@ interface ShowcaseSettingsInput {
759
772
  browser?: BrowserSettingsInput;
760
773
  /** Build → start → wait → capture → stop a server automatically. */
761
774
  server?: ServerSettingsInput;
775
+ /** Capture-mode toggles applied to every URL-based asset (disable animations, hide cookie banner, …). */
776
+ capture?: CaptureSettingsInput;
762
777
  /** "draft" lowers fps/scale and speeds the encoder for fast iteration. */
763
778
  quality?: "draft" | "final";
764
779
  /** Skip assets whose inputs+options+tool fingerprint is unchanged (opt-in). */
@@ -767,9 +782,11 @@ interface ShowcaseSettingsInput {
767
782
  defaults?: {
768
783
  "scroll-reel"?: ScrollReelOptions;
769
784
  screenshots?: ScreenshotsOptions;
785
+ wall?: WallOptions;
770
786
  specimen?: SpecimenOptions;
771
787
  palette?: PaletteOptions;
772
788
  "palette-reel"?: PaletteReelOptions;
789
+ image?: ImageOptions;
773
790
  };
774
791
  }
775
792
  /** Fields common to every asset. */
@@ -782,7 +799,7 @@ interface AssetBaseInput {
782
799
  /**
783
800
  * Discriminated by `generator` so each asset gets the right `options` autocomplete. URL-based
784
801
  * generators take a `url` — absolute, or a `/path` resolved against the managed server; omit it
785
- * to capture the managed server's root. A local `scene` composites its `inputs` and needs none.
802
+ * to capture the managed server's root. Local generators (wall, specimen, palette, image) need none.
786
803
  */
787
804
  type AssetSpecInput = (AssetBaseInput & {
788
805
  url?: string;
@@ -815,4 +832,4 @@ interface ShowcaseUserConfig {
815
832
  /** Identity helper that gives `pro-visu.config.ts` full type-checking + autocomplete. */
816
833
  declare function defineConfig(config: ShowcaseUserConfig): ShowcaseUserConfig;
817
834
 
818
- export { type AssetSpecInput, type BrowserSettingsInput, type LogLevel, type ScreenshotsOptions, type ScrollReelOptions, type ServerSettingsInput, type ShowcaseSettingsInput, type ShowcaseUserConfig, type SpecimenOptions, type WallOptions, defineConfig };
835
+ export { type AssetSpecInput, type BrowserSettingsInput, type CaptureSettingsInput, type ImageOptions, type LogLevel, type PaletteOptions, type PaletteReelOptions, type ScreenshotsOptions, type ScrollReelOptions, type ServerSettingsInput, type ShowcaseSettingsInput, type ShowcaseUserConfig, type SpecimenOptions, type WallOptions, defineConfig };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/define-config.ts"],"sourcesContent":["import type { ScrollReelOptions } from \"@/generators/scroll-reel/options\";\nimport type { ScreenshotsOptions } from \"@/generators/screenshots/options\";\nimport type { WallOptions } from \"@/generators/wall/options\";\nimport type { SpecimenOptions } from \"@/generators/specimen/options\";\nimport type { PaletteOptions } from \"@/generators/palette/options\";\nimport type { PaletteReelOptions } from \"@/generators/palette-reel/options\";\nimport type { ImageOptions } from \"@/generators/image/options\";\n\n/**\n * Author-facing config types. These power editor autocomplete in `pro-visu.config.ts`.\n * The runtime validator lives in `schema.ts`; each generator validates its own options.\n * When a new generator is added, extend `AssetSpecInput` and `defaults` here.\n */\n\nexport type LogLevel = \"silent\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport interface BrowserSettingsInput {\n /** Run the browser without a visible window (default true). Set false to watch captures. */\n headless?: boolean;\n /** Browser channel, e.g. \"chrome\" or \"msedge\". Omit to use the managed Chromium. */\n channel?: string;\n /** Absolute path to a browser executable (overrides `channel` + managed Chromium). */\n executablePath?: string;\n /** Extra launch args, e.g. [\"--no-sandbox\"] on CI. */\n args?: string[];\n /** Browser launch timeout (ms). */\n timeout?: number;\n}\n\nexport interface ServerSettingsInput {\n /**\n * Command that starts the server, run via the shell. The tool sets PORT/HOST in its environment\n * to the readiness port/host, so frameworks that honor PORT (Next, Vite, …) bind it\n * automatically — `command: \"next start\"` is enough. An explicit flag still wins.\n */\n command: string;\n /** Optional one-shot build to run first, e.g. \"next build\". */\n build?: string;\n /** Health-check URL polled until it responds. Defaults to http://127.0.0.1:<port>. */\n url?: string;\n /**\n * Port the readiness check polls — also derives `url` when `url` is omitted, and is passed to\n * the command as PORT so it binds the same port automatically. Defaults to 3101.\n */\n port?: number;\n /** Working dir for build + command, relative to the config dir. Defaults to it. */\n cwd?: string;\n /** Max time to wait for the server to become reachable (ms). Default 120000. */\n readyTimeoutMs?: number;\n /** If a server is already reachable at the URL, use it as-is (don't start/stop one). */\n reuseExisting?: boolean;\n}\n\nexport interface ShowcaseSettingsInput {\n /** Output directory for generated assets, relative to the repo root (default \"pro-visu\"). */\n outDir?: string;\n /** How many assets to generate in parallel (shared browser, separate contexts). */\n concurrency?: number;\n /**\n * Raise the Node heap (V8 old-space) to this many MB. Heavy jobs — large frame-stepped walls\n * especially — can exceed Node's ~4 GB default and crash with \"JavaScript heap out of memory\".\n * When set above the current limit, the CLI re-execs itself with `--max-old-space-size`. This is\n * the Node process heap, not the browser's.\n */\n maxMemoryMB?: number;\n /** CLI log verbosity. */\n logLevel?: LogLevel;\n /** Playwright launch controls. */\n browser?: BrowserSettingsInput;\n /** Build → start → wait → capture → stop a server automatically. */\n server?: ServerSettingsInput;\n /** \"draft\" lowers fps/scale and speeds the encoder for fast iteration. */\n quality?: \"draft\" | \"final\";\n /** Skip assets whose inputs+options+tool fingerprint is unchanged (opt-in). */\n cache?: boolean;\n /** Per-generator option defaults, keyed by generator id, merged under each asset. */\n defaults?: {\n \"scroll-reel\"?: ScrollReelOptions;\n screenshots?: ScreenshotsOptions;\n specimen?: SpecimenOptions;\n palette?: PaletteOptions;\n \"palette-reel\"?: PaletteReelOptions;\n };\n}\n\n/** Fields common to every asset. */\nexport interface AssetBaseInput {\n /** Unique id for this asset — also the output filename (`<slug(name)>.mp4`) and manifest key. */\n name: string;\n /** Other assets this one consumes, as `{ slotName: assetName }`. Producers run first. */\n inputs?: Record<string, string>;\n}\n\n/**\n * Discriminated by `generator` so each asset gets the right `options` autocomplete. URL-based\n * generators take a `url` — absolute, or a `/path` resolved against the managed server; omit it\n * to capture the managed server's root. A local `scene` composites its `inputs` and needs none.\n */\nexport type AssetSpecInput =\n | (AssetBaseInput & { url?: string; generator: \"scroll-reel\"; options?: ScrollReelOptions })\n | (AssetBaseInput & { url?: string; generator: \"screenshots\"; options?: ScreenshotsOptions })\n | (AssetBaseInput & { generator: \"wall\"; options?: WallOptions })\n | (AssetBaseInput & { generator: \"specimen\"; options: SpecimenOptions })\n | (AssetBaseInput & { generator: \"palette\"; options: PaletteOptions })\n | (AssetBaseInput & { generator: \"palette-reel\"; options: PaletteReelOptions })\n | (AssetBaseInput & { generator: \"image\"; options: ImageOptions });\n\nexport interface ShowcaseUserConfig {\n settings?: ShowcaseSettingsInput;\n assets: AssetSpecInput[];\n}\n\n/** Identity helper that gives `pro-visu.config.ts` full type-checking + autocomplete. */\nexport function defineConfig(config: ShowcaseUserConfig): ShowcaseUserConfig {\n return config;\n}\n"],"mappings":";AAiHO,SAAS,aAAa,QAAgD;AAC3E,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/config/define-config.ts"],"sourcesContent":["import type { ScrollReelOptions } from \"@/generators/scroll-reel/options\";\nimport type { ScreenshotsOptions } from \"@/generators/screenshots/options\";\nimport type { WallOptions } from \"@/generators/wall/options\";\nimport type { SpecimenOptions } from \"@/generators/specimen/options\";\nimport type { PaletteOptions } from \"@/generators/palette/options\";\nimport type { PaletteReelOptions } from \"@/generators/palette-reel/options\";\nimport type { ImageOptions } from \"@/generators/image/options\";\n\n/**\n * Author-facing config types. These power editor autocomplete in `pro-visu.config.ts`.\n * The runtime validator lives in `schema.ts`; each generator validates its own options.\n * When a new generator is added, extend `AssetSpecInput` and `defaults` here.\n */\n\nexport type LogLevel = \"silent\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport interface BrowserSettingsInput {\n /** Run the browser without a visible window (default true). Set false to watch captures. */\n headless?: boolean;\n /** Browser channel, e.g. \"chrome\" or \"msedge\". Omit to use the managed Chromium. */\n channel?: string;\n /** Absolute path to a browser executable (overrides `channel` + managed Chromium). */\n executablePath?: string;\n /** Extra launch args, e.g. [\"--no-sandbox\"] on CI. */\n args?: string[];\n /** Browser launch timeout (ms). */\n timeout?: number;\n}\n\nexport interface ServerSettingsInput {\n /**\n * Command that starts the server, run via the shell. The tool sets PORT/HOST in its environment\n * to the readiness port/host, so frameworks that honor PORT (Next, Vite, …) bind it\n * automatically — `command: \"next start\"` is enough. An explicit flag still wins.\n */\n command: string;\n /** Optional one-shot build to run first, e.g. \"next build\". */\n build?: string;\n /** Health-check URL polled until it responds. Defaults to http://127.0.0.1:<port>. */\n url?: string;\n /**\n * Port the readiness check polls — also derives `url` when `url` is omitted, and is passed to\n * the command as PORT so it binds the same port automatically. Defaults to 3101.\n */\n port?: number;\n /** Working dir for build + command, relative to the config dir. Defaults to it. */\n cwd?: string;\n /** Max time to wait for the server to become reachable (ms). Default 120000. */\n readyTimeoutMs?: number;\n /** If a server is already reachable at the URL, use it as-is (don't start/stop one). */\n reuseExisting?: boolean;\n}\n\nexport interface CaptureSettingsInput {\n /** Query params appended to every URL-based asset, e.g. `{ capture: \"1\" }` → `?capture=1`. */\n query?: Record<string, string>;\n /** Cookies set on every capture context before navigation (scoped to the asset's origin). */\n cookies?: { name: string; value: string }[];\n /** localStorage entries seeded (per origin) before the page's own scripts run. */\n localStorage?: Record<string, string>;\n /** JS run in every page before its own scripts, e.g. `window.__PV_CAPTURE__ = true`. */\n initScript?: string;\n}\n\nexport interface ShowcaseSettingsInput {\n /** Output directory for generated assets, relative to the repo root (default \"pro-visu\"). */\n outDir?: string;\n /** How many assets to generate in parallel (shared browser, separate contexts). */\n concurrency?: number;\n /**\n * Raise the Node heap (V8 old-space) to this many MB. Heavy jobs — large frame-stepped walls\n * especially — can exceed Node's ~4 GB default and crash with \"JavaScript heap out of memory\".\n * When set above the current limit, the CLI re-execs itself with `--max-old-space-size`. This is\n * the Node process heap, not the browser's.\n */\n maxMemoryMB?: number;\n /** CLI log verbosity. */\n logLevel?: LogLevel;\n /** Playwright launch controls. */\n browser?: BrowserSettingsInput;\n /** Build → start → wait → capture → stop a server automatically. */\n server?: ServerSettingsInput;\n /** Capture-mode toggles applied to every URL-based asset (disable animations, hide cookie banner, …). */\n capture?: CaptureSettingsInput;\n /** \"draft\" lowers fps/scale and speeds the encoder for fast iteration. */\n quality?: \"draft\" | \"final\";\n /** Skip assets whose inputs+options+tool fingerprint is unchanged (opt-in). */\n cache?: boolean;\n /** Per-generator option defaults, keyed by generator id, merged under each asset. */\n defaults?: {\n \"scroll-reel\"?: ScrollReelOptions;\n screenshots?: ScreenshotsOptions;\n wall?: WallOptions;\n specimen?: SpecimenOptions;\n palette?: PaletteOptions;\n \"palette-reel\"?: PaletteReelOptions;\n image?: ImageOptions;\n };\n}\n\n/** Fields common to every asset. */\nexport interface AssetBaseInput {\n /** Unique id for this asset — also the output filename (`<slug(name)>.mp4`) and manifest key. */\n name: string;\n /** Other assets this one consumes, as `{ slotName: assetName }`. Producers run first. */\n inputs?: Record<string, string>;\n}\n\n/**\n * Discriminated by `generator` so each asset gets the right `options` autocomplete. URL-based\n * generators take a `url` — absolute, or a `/path` resolved against the managed server; omit it\n * to capture the managed server's root. Local generators (wall, specimen, palette, image) need none.\n */\nexport type AssetSpecInput =\n | (AssetBaseInput & { url?: string; generator: \"scroll-reel\"; options?: ScrollReelOptions })\n | (AssetBaseInput & { url?: string; generator: \"screenshots\"; options?: ScreenshotsOptions })\n | (AssetBaseInput & { generator: \"wall\"; options?: WallOptions })\n | (AssetBaseInput & { generator: \"specimen\"; options: SpecimenOptions })\n | (AssetBaseInput & { generator: \"palette\"; options: PaletteOptions })\n | (AssetBaseInput & { generator: \"palette-reel\"; options: PaletteReelOptions })\n | (AssetBaseInput & { generator: \"image\"; options: ImageOptions });\n\nexport interface ShowcaseUserConfig {\n settings?: ShowcaseSettingsInput;\n assets: AssetSpecInput[];\n}\n\n/** Identity helper that gives `pro-visu.config.ts` full type-checking + autocomplete. */\nexport function defineConfig(config: ShowcaseUserConfig): ShowcaseUserConfig {\n return config;\n}\n"],"mappings":";AAgIO,SAAS,aAAa,QAAgD;AAC3E,SAAO;AACT;","names":[]}