@vscode/component-explorer 0.2.1-8 → 0.2.1-80

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 (61) hide show
  1. package/README.md +104 -27
  2. package/dist/components/BottomDebugPanel.d.ts +8 -0
  3. package/dist/components/BottomDebugPanel.d.ts.map +1 -0
  4. package/dist/components/DebugPanelPlacement.d.ts +3 -0
  5. package/dist/components/DebugPanelPlacement.d.ts.map +1 -0
  6. package/dist/components/DebugWorkbench.d.ts +42 -0
  7. package/dist/components/DebugWorkbench.d.ts.map +1 -0
  8. package/dist/components/DebugWorkbenchLayout.d.ts +27 -0
  9. package/dist/components/DebugWorkbenchLayout.d.ts.map +1 -0
  10. package/dist/components/DebugWorkbenchState.d.ts +9 -0
  11. package/dist/components/DebugWorkbenchState.d.ts.map +1 -0
  12. package/dist/components/ExplorerModel.d.ts +14 -1
  13. package/dist/components/ExplorerModel.d.ts.map +1 -1
  14. package/dist/components/FixtureDebugStore.d.ts +20 -0
  15. package/dist/components/FixtureDebugStore.d.ts.map +1 -0
  16. package/dist/components/FixturePreviewItem.d.ts +10 -0
  17. package/dist/components/FixturePreviewItem.d.ts.map +1 -1
  18. package/dist/components/PageViewportState.d.ts +31 -0
  19. package/dist/components/PageViewportState.d.ts.map +1 -0
  20. package/dist/components/PreviewArea.d.ts.map +1 -1
  21. package/dist/components/RightSidebar.d.ts +8 -2
  22. package/dist/components/RightSidebar.d.ts.map +1 -1
  23. package/dist/components/icons.d.ts +8 -8
  24. package/dist/components/icons.d.ts.map +1 -1
  25. package/dist/core/ComponentRenderer.d.ts +23 -3
  26. package/dist/core/ComponentRenderer.d.ts.map +1 -1
  27. package/dist/core/ErrorInfo.d.ts +21 -1
  28. package/dist/core/ErrorInfo.d.ts.map +1 -1
  29. package/dist/core/FixtureInputStore.d.ts +32 -0
  30. package/dist/core/FixtureInputStore.d.ts.map +1 -0
  31. package/dist/core/FixtureInteractionRuntime.d.ts +29 -0
  32. package/dist/core/FixtureInteractionRuntime.d.ts.map +1 -0
  33. package/dist/core/FixtureNode.d.ts.map +1 -1
  34. package/dist/core/fixtureApi.d.ts +220 -32
  35. package/dist/core/fixtureApi.d.ts.map +1 -1
  36. package/dist/core/fixtureApiConsumer.d.ts +22 -2
  37. package/dist/core/fixtureApiConsumer.d.ts.map +1 -1
  38. package/dist/core/index.d.ts +7 -3
  39. package/dist/core/index.d.ts.map +1 -1
  40. package/dist/core/inputAggregation.d.ts +31 -0
  41. package/dist/core/inputAggregation.d.ts.map +1 -0
  42. package/dist/index.d.ts +2 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +11 -9
  45. package/dist/lib/explorerQueryParams.d.ts +2 -2
  46. package/dist/lib/explorerQueryParams.d.ts.map +1 -1
  47. package/dist/lib/fixtureSizeCache.d.ts +2 -0
  48. package/dist/lib/fixtureSizeCache.d.ts.map +1 -1
  49. package/dist/modes/EmbeddedMode.d.ts +7 -0
  50. package/dist/modes/EmbeddedMode.d.ts.map +1 -1
  51. package/dist/modes/ExplorerUIMode.d.ts.map +1 -1
  52. package/dist/modes/HeadlessMode.d.ts +12 -3
  53. package/dist/modes/HeadlessMode.d.ts.map +1 -1
  54. package/dist/{runtimeVersion-C3nZZ7xj.js → runtimeVersion-BoWRrQbs.js} +74 -37
  55. package/dist/runtimeVersion-BoWRrQbs.js.map +1 -0
  56. package/dist/viewer.js +4448 -1908
  57. package/dist/viewer.js.map +1 -1
  58. package/package.json +15 -14
  59. package/dist/core/PropertySchema.d.ts +0 -40
  60. package/dist/core/PropertySchema.d.ts.map +0 -1
  61. package/dist/runtimeVersion-C3nZZ7xj.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ import { IObservable, IReader } from '@vscode/observables';
2
+ import { IJsonSchema } from './fixtureApi.js';
3
+ /** A fixture's input override object (only the keys the user explicitly changed). */
4
+ export type FixtureInputOverride = Record<string, unknown>;
5
+ /**
6
+ * Central store of `input` overrides for the explorer UI.
7
+ *
8
+ * Values are keyed by **property identity** (name + structural schema), not by fixture, so a
9
+ * value chosen on one fixture is automatically reused by every other fixture that declares the
10
+ * same input — navigating between fixtures keeps the shared value instead of resetting it.
11
+ * The whole map is persisted to `localStorage` so choices survive reloads. Schema defaults are
12
+ * applied at render time (see `applyInputDefaults`); only explicit overrides are stored here.
13
+ */
14
+ export declare class FixtureInputStore {
15
+ /** Shared values keyed by `inputPropertyKey(name, schema)`. */
16
+ private readonly _values;
17
+ /** Cache of derived per-fixture override observables. */
18
+ private readonly _byFixture;
19
+ constructor();
20
+ /**
21
+ * Returns a derived observable of `fixtureId`'s input overrides, mapped from the shared
22
+ * per-property store. Only properties the user explicitly set (across any fixture) appear.
23
+ */
24
+ getInput(fixtureId: string, schema: IJsonSchema | undefined): IObservable<FixtureInputOverride>;
25
+ /** The currently effective value of a shared property: explicit override, else schema default. */
26
+ readValue(reader: IReader, name: string, schema: IJsonSchema): unknown;
27
+ /** Sets a shared input property (applies to every fixture that declares it) and persists. */
28
+ setValue(name: string, schema: IJsonSchema, value: unknown): void;
29
+ private _load;
30
+ private _persist;
31
+ }
32
+ //# sourceMappingURL=FixtureInputStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixtureInputStore.d.ts","sourceRoot":"","sources":["../../src/core/FixtureInputStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACzH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,qFAAqF;AACrF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAI3D;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC1B,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwD;;IAMnF;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC,oBAAoB,CAAC;IAuB/F,kGAAkG;IAClG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO;IAStE,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAOjE,OAAO,CAAC,KAAK;IAeb,OAAO,CAAC,QAAQ;CAOnB"}
@@ -0,0 +1,29 @@
1
+ import { DebugPanelActivation, IDisposable } from './fixtureApi.js';
2
+ export declare const OUTPUT_DEBUG_PANEL_ID = "$output";
3
+ export interface ActiveDebugPanelSession extends IDisposable {
4
+ sendAction(action: unknown): void;
5
+ }
6
+ type InputListener = (value: unknown, input: unknown) => void;
7
+ export declare class FixtureInputRuntime {
8
+ private _input;
9
+ private readonly _listeners;
10
+ constructor(_input: unknown);
11
+ watch(key: string, listener: InputListener): IDisposable;
12
+ update(input: unknown): boolean;
13
+ }
14
+ export declare class FixtureDebugRuntime implements IDisposable {
15
+ private readonly _activations;
16
+ private readonly _activeSessions;
17
+ private _output;
18
+ private _hasOutput;
19
+ connect(panelId: string, activate: DebugPanelActivation<unknown, unknown>): IDisposable;
20
+ setOutput(output: unknown): void;
21
+ get hasOutput(): boolean;
22
+ get outputEditable(): boolean;
23
+ getOutputSnapshot(): unknown;
24
+ activate(panelId: string, publish: (state: unknown) => void): ActiveDebugPanelSession;
25
+ dispose(): void;
26
+ private _activateOutput;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=FixtureInteractionRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixtureInteractionRuntime.d.ts","sourceRoot":"","sources":["../../src/core/FixtureInteractionRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,MAAM,WAAW,uBAAwB,SAAQ,WAAW;IAC1D,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAE9D,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;gBAEhD,MAAM,EAAE,OAAO;IAEnC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,WAAW;IAsBxD,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAqBhC;AAED,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6D;IAC1F,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IACtE,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CACL,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,GAC/C,WAAW;IAcd,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKhC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,iBAAiB,IAAI,OAAO;IAM5B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,uBAAuB;IAgDrF,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,eAAe;CAWxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"FixtureNode.d.ts","sourceRoot":"","sources":["../../src/core/FixtureNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA8C/C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IAEzB,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;IAEnD,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAE3C,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAEzC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,0GAA0G;IAC1G,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,WAAW,CA8BnF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,GAC5D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAYrC;AAsID;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,SAAS,CAezF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,mBAAmB,EAAE,CAU1E"}
1
+ {"version":3,"file":"FixtureNode.d.ts","sourceRoot":"","sources":["../../src/core/FixtureNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA8C/C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IAEzB,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;IAEnD,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAE3C,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAEzC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,0GAA0G;IAC1G,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,WAAW,CA8BnF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,GAC5D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAYrC;AAyID;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,SAAS,CAezF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,mBAAmB,EAAE,CAU1E"}
@@ -1,20 +1,63 @@
1
- /**
2
- * Public Fixture API
3
- *
4
- * This module is the public API for defining fixtures.
5
- * It's designed to be stable across versions - projects can use a different
6
- * @vscode/component-explorer version than the explorer viewer uses.
7
- *
8
- * Use Symbol.for() instead of Symbol() so the same symbol is shared across
9
- * different versions of this package.
10
- *
11
- * @module fixtureApi
12
- */
1
+ import { z } from 'zod';
13
2
  /**
14
3
  * Disposable resource that can be cleaned up.
4
+ * `dispose` may be sync or async; the framework awaits the returned promise (if any)
5
+ * and captures any thrown errors.
15
6
  */
16
7
  export interface IDisposable {
17
- dispose(): void;
8
+ dispose(): void | Promise<void>;
9
+ }
10
+ export type DebugPanelPlacement = 'canvas-right' | 'bottom-panel';
11
+ export interface DebugPanelViewContext<TAction> {
12
+ sendAction(action: TAction): void;
13
+ }
14
+ export interface DebugPanelViewInstance<TState> extends IDisposable {
15
+ update(state: TState): void;
16
+ }
17
+ export interface DefineDebugPanelOptions<TState, TAction> {
18
+ readonly id: string;
19
+ readonly title: string;
20
+ readonly placement?: DebugPanelPlacement;
21
+ render(container: HTMLElement, context: DebugPanelViewContext<TAction>): DebugPanelViewInstance<TState>;
22
+ }
23
+ interface ErasedDebugPanelViewInstance extends IDisposable {
24
+ update(state: unknown): void;
25
+ }
26
+ /**
27
+ * A statically declared custom panel. `TState` is published by the fixture and
28
+ * `TAction` is sent back by the panel UI.
29
+ */
30
+ export interface DebugPanelDefinition<TState = unknown, TAction = unknown> {
31
+ readonly id: string;
32
+ readonly title: string;
33
+ readonly placement?: DebugPanelPlacement;
34
+ /** @internal Viewer-side, type-erased renderer produced by defineDebugPanel. */
35
+ readonly _render: (container: HTMLElement, sendAction: (action: unknown) => void) => ErasedDebugPanelViewInstance;
36
+ /** @internal Carries types for inference without affecting the runtime shape. */
37
+ readonly _types?: {
38
+ readonly state: TState;
39
+ readonly action: TAction;
40
+ };
41
+ }
42
+ export interface DebugPanelChannel<TState, TAction> {
43
+ publish(state: TState): void;
44
+ onAction(listener: (action: TAction) => void): IDisposable;
45
+ }
46
+ export type DebugPanelActivation<TState, TAction> = (channel: DebugPanelChannel<TState, TAction>) => void | IDisposable;
47
+ export interface FixtureDebugApi {
48
+ connect<TState, TAction>(panel: DebugPanelDefinition<TState, TAction>, activate: DebugPanelActivation<TState, TAction>): IDisposable;
49
+ }
50
+ export interface FixtureInputControlOptions {
51
+ readonly placement?: 'sidebar' | 'toolbar' | 'both';
52
+ readonly label?: string;
53
+ readonly title?: string;
54
+ }
55
+ /** Brand for an output that can be observed and edited while its Output panel is visible. */
56
+ export declare const interactiveOutputBrand: unique symbol;
57
+ export interface InteractiveOutput<T> {
58
+ readonly [interactiveOutputBrand]: true;
59
+ getSnapshot(): T;
60
+ activate(channel: DebugPanelChannel<T, T>): void | IDisposable;
18
61
  }
19
62
  /**
20
63
  * Result of a render operation.
@@ -30,14 +73,20 @@ export interface RenderResult {
30
73
  readonly ready?: Promise<void>;
31
74
  /**
32
75
  * Cleanup function. Called when the fixture is unmounted.
76
+ * May be sync or async; the framework awaits the returned promise (if any).
77
+ * Errors thrown (sync or async) are captured and surfaced via the
78
+ * `previousDispose` field of the next render report (or `currentDispose`
79
+ * if `disposeAfter` was requested).
33
80
  * Can be omitted if no cleanup is needed.
34
81
  */
35
- dispose?(): void;
82
+ dispose?(): void | Promise<void>;
36
83
  /**
37
84
  * Arbitrary data to include in the render report.
38
- * Visible to the CLI and MCP tools.
85
+ * Visible to the CLI and MCP tools (surfaced as `output`).
86
+ *
87
+ * Symmetric counterpart of `RenderContext.input`: input flows in, output flows out.
39
88
  */
40
- readonly data?: unknown;
89
+ readonly output?: unknown;
41
90
  }
42
91
  /**
43
92
  * What the render function can return.
@@ -48,13 +97,65 @@ export interface RenderResult {
48
97
  export type RenderReturn = RenderResult | undefined | void | Promise<RenderResult | undefined | void>;
49
98
  /**
50
99
  * Context passed to the render function.
100
+ *
101
+ * @typeParam TInput - Shape of `input`, inferred from the fixture's zod `inputSchema`
102
+ * (defaults to `unknown` when no schema is declared).
51
103
  */
52
- export interface RenderContext {
104
+ export interface RenderContext<TInput = unknown> {
105
+ /**
106
+ * Unique identifier of the fixture being rendered.
107
+ * Stable across renders of the same fixture; useful for keying caches,
108
+ * logging, or distinguishing between sibling fixtures sharing a render function.
109
+ */
110
+ readonly fixtureId: string;
53
111
  /** AbortSignal for cancellation; check signal.aborted or listen to 'abort' event */
54
112
  readonly signal: AbortSignal;
55
113
  /** Register a disposable to be cleaned up when the fixture is unmounted. Returns the same disposable for chaining. */
56
114
  addDisposable<T extends IDisposable>(disposable: T): T;
115
+ /**
116
+ * Observes one input property without remounting the fixture. The listener is
117
+ * invoked immediately and again for subsequent changes to this property.
118
+ * Input properties without a watcher retain the default remount behavior.
119
+ */
120
+ watchInput<TKey extends Extract<keyof TInput, string>>(key: TKey, listener: (value: TInput[TKey], input: TInput) => void): IDisposable;
121
+ /** Connects statically declared debug panels to this live fixture instance. */
122
+ readonly debug: FixtureDebugApi;
123
+ /**
124
+ * Describes where this fixture is being rendered. Use this to enable dev-only affordances
125
+ * (e.g. extra controls, logging) without affecting screenshots or embedded views.
126
+ */
127
+ readonly host: RenderHost;
128
+ /**
129
+ * Data passed in by the caller (CLI/MCP screenshot tool, explorer UI). Use this to
130
+ * parameterize the fixture: e.g. switch theme, vary props, select a scenario.
131
+ *
132
+ * When the fixture declares a zod `inputSchema`, this is typed as `z.infer<typeof schema>`
133
+ * and populated with the schema's defaults for any keys the caller omitted. Without a
134
+ * schema it is `unknown` (and `undefined` when no input was provided).
135
+ *
136
+ * Symmetric with `RenderResult.output` (which flows back out to the caller).
137
+ */
138
+ readonly input: TInput;
57
139
  }
140
+ /**
141
+ * Describes the environment a fixture is rendered in.
142
+ */
143
+ export type RenderHost =
144
+ /** Rendered in the Component Explorer UI (visible to a human). */
145
+ {
146
+ readonly kind: 'explorer-ui';
147
+ readonly interactive: true;
148
+ }
149
+ /** Headless render for CLI/MCP screenshots. */
150
+ | {
151
+ readonly kind: 'headless';
152
+ readonly interactive: false;
153
+ }
154
+ /** Rendered inside an isolation iframe (user-facing standalone view). */
155
+ | {
156
+ readonly kind: 'embedded';
157
+ readonly interactive: false;
158
+ };
58
159
  /**
59
160
  * Style definition for shadow DOM injection.
60
161
  */
@@ -94,6 +195,36 @@ export type ViewportPreset = ViewportPresetName | {
94
195
  readonly height: number;
95
196
  };
96
197
  export type ViewportPresetName = 'mobile' | 'tablet' | 'desktop';
198
+ /**
199
+ * Minimal JSON Schema interface used to describe a fixture's expected `input` shape.
200
+ *
201
+ * This is the *derived* form: fixtures declare their input with a zod schema
202
+ * (`DefineFixtureOptions.inputSchema`) and the framework converts it to this JSON Schema
203
+ * at define time. Tools (CLI/MCP/explorer UI) read it for validation, autocompletion, or
204
+ * to generate input-editing controls.
205
+ *
206
+ * Intentionally a structural, recursive type covering the subset of JSON Schema we
207
+ * actually surface to tools — the index signature lets any additional standard JSON Schema
208
+ * keywords (`format`, `pattern`, `oneOf`, `$ref`, …) flow through without changing this interface.
209
+ */
210
+ export interface IJsonSchema {
211
+ readonly type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';
212
+ readonly properties?: {
213
+ readonly [key: string]: IJsonSchema;
214
+ };
215
+ readonly required?: readonly string[];
216
+ readonly items?: IJsonSchema;
217
+ readonly enum?: readonly unknown[];
218
+ readonly const?: unknown;
219
+ readonly default?: unknown;
220
+ readonly description?: string;
221
+ readonly title?: string;
222
+ readonly additionalProperties?: boolean | IJsonSchema;
223
+ readonly anyOf?: readonly IJsonSchema[];
224
+ readonly oneOf?: readonly IJsonSchema[];
225
+ readonly allOf?: readonly IJsonSchema[];
226
+ readonly [key: string]: unknown;
227
+ }
97
228
  /** Brand symbol to identify single fixtures */
98
229
  export declare const singleFixtureBrand: unique symbol;
99
230
  /** Brand symbol to identify fixture groups */
@@ -102,8 +233,10 @@ export declare const fixtureGroupBrand: unique symbol;
102
233
  export declare const fixtureVariantsBrand: unique symbol;
103
234
  /**
104
235
  * Options for defining a single component fixture.
236
+ *
237
+ * @typeParam TInput - Shape of the fixture's `input`, inferred from `inputSchema`.
105
238
  */
106
- export interface DefineFixtureOptions {
239
+ export interface DefineFixtureOptions<TInput = unknown> {
107
240
  /**
108
241
  * Path in the explorer tree.
109
242
  * - `undefined` (default): use fixture filename only
@@ -127,14 +260,41 @@ export interface DefineFixtureOptions {
127
260
  labels?: readonly string[];
128
261
  /** Human/AI-readable description(s) of expected visual appearance. Inherited from parent group/variants and accumulated into a string[]. */
129
262
  expectedVisualDescriptions?: string | readonly string[];
263
+ /**
264
+ * Zod schema describing the expected shape of `RenderContext.input`.
265
+ *
266
+ * Declaring it gives two things:
267
+ * 1. **Type safety** — `render`'s `context.input` is typed as `z.infer<typeof schema>`.
268
+ * 2. **Tooling** — the framework converts the schema to JSON Schema at define time so the
269
+ * CLI/MCP/explorer UI can validate, autocomplete, or render input-editing controls.
270
+ *
271
+ * The schema must describe an object (`z.object({...})`) — `input` is always a JSON object
272
+ * (or `undefined`). Property-level `.default(...)` values are surfaced to tooling and used
273
+ * to populate omitted keys before `render` runs.
274
+ *
275
+ * @example
276
+ * ```ts
277
+ * inputSchema: z.object({
278
+ * theme: z.enum(['light', 'dark']).default('light'),
279
+ * count: z.number().int().default(1),
280
+ * })
281
+ * ```
282
+ */
283
+ inputSchema?: z.ZodType<TInput>;
284
+ /** Controls how selected input properties are presented in the Explorer UI. */
285
+ inputControls?: {
286
+ readonly [TKey in Extract<keyof TInput, string>]?: FixtureInputControlOptions;
287
+ };
288
+ /** Custom debug panels contributed by this fixture. */
289
+ debugPanels?: readonly DebugPanelDefinition<unknown, unknown>[];
130
290
  /**
131
291
  * Render the component into the container.
132
292
  *
133
293
  * @param container - The DOM element to render into
134
- * @param context - Render context containing props and abort signal
294
+ * @param context - Render context containing input and abort signal
135
295
  * @returns Optional RenderResult, or a Promise that resolves to one
136
296
  */
137
- render: (container: HTMLElement, context: RenderContext) => RenderReturn;
297
+ render: (container: HTMLElement, context: RenderContext<TInput>) => RenderReturn;
138
298
  }
139
299
  /** @deprecated Use DefineFixtureOptions instead */
140
300
  export type DefineComponentOptions = DefineFixtureOptions;
@@ -145,6 +305,8 @@ export interface SingleFixtureExport {
145
305
  readonly [singleFixtureBrand]: true;
146
306
  readonly _options: DefineFixtureOptions;
147
307
  readonly _path?: string;
308
+ /** JSON Schema derived from `_options.inputSchema` at define time (cross-version safe). */
309
+ readonly _inputSchemaJson?: IJsonSchema;
148
310
  }
149
311
  /**
150
312
  * Group entry: either a single fixture, a nested group, or variants.
@@ -161,6 +323,8 @@ export interface FixtureGroupExport {
161
323
  readonly _path?: string;
162
324
  readonly _labels?: readonly string[];
163
325
  readonly _expectedVisualDescriptions?: string | readonly string[];
326
+ /** JSON Schema derived from the group's `inputSchema`; merged into every descendant fixture. */
327
+ readonly _inputSchemaJson?: IJsonSchema;
164
328
  }
165
329
  /**
166
330
  * A fixture variants export created by defineFixtureVariants().
@@ -173,6 +337,8 @@ export interface FixtureVariantsExport {
173
337
  readonly _path?: string;
174
338
  readonly _labels?: readonly string[];
175
339
  readonly _expectedVisualDescriptions?: string | readonly string[];
340
+ /** JSON Schema derived from the variants group's `inputSchema`; merged into every variant. */
341
+ readonly _inputSchemaJson?: IJsonSchema;
176
342
  }
177
343
  /**
178
344
  * Fixture export type - a single fixture, a group, or variants.
@@ -199,6 +365,13 @@ export interface DefineFixtureGroupOptions {
199
365
  labels?: readonly string[];
200
366
  /** Human/AI-readable description(s) of expected visual appearance. Inherited by nested fixtures. */
201
367
  expectedVisualDescriptions?: string | readonly string[];
368
+ /**
369
+ * Zod schema describing `input` shared by every fixture in this group. It is converted to
370
+ * JSON Schema at define time and merged into each descendant fixture's own schema (the
371
+ * descendant's properties win on conflict). Use it to declare common input — e.g. a `theme`
372
+ * switch — once for a whole group instead of repeating it on each fixture.
373
+ */
374
+ inputSchema?: z.ZodType;
202
375
  }
203
376
  /**
204
377
  * Input for defineFixtureVariants (only single fixtures, no nesting).
@@ -221,6 +394,12 @@ export interface DefineFixtureVariantsOptions {
221
394
  labels?: readonly string[];
222
395
  /** Human/AI-readable description(s) of expected visual appearance. Inherited by nested fixtures. */
223
396
  expectedVisualDescriptions?: string | readonly string[];
397
+ /**
398
+ * Zod schema describing `input` shared by every variant in this group. Converted to JSON
399
+ * Schema at define time and merged into each variant's own schema (the variant's properties
400
+ * win on conflict).
401
+ */
402
+ inputSchema?: z.ZodType;
224
403
  }
225
404
  /**
226
405
  * Defines a single fixture.
@@ -229,31 +408,39 @@ export interface DefineFixtureVariantsOptions {
229
408
  * ```ts
230
409
  * // Simple - no cleanup needed
231
410
  * export default defineFixture({
232
- * render: (container, { props }) => {
233
- * container.innerHTML = `<button>${props.label}</button>`;
411
+ * render: (container) => {
412
+ * container.innerHTML = `<button>Click me</button>`;
234
413
  * },
235
414
  * });
236
415
  *
237
- * // With cleanup
416
+ * // Typed, parameterizable input via a zod schema
238
417
  * export default defineFixture({
239
- * render: (container, { props }) => {
418
+ * inputSchema: z.object({ label: z.string().default('Click me') }),
419
+ * render: (container, { input }) => {
240
420
  * const root = createRoot(container);
241
- * root.render(<Button label={props.label} />);
421
+ * root.render(<Button label={input.label} />);
242
422
  * return { dispose: () => root.unmount() };
243
423
  * },
244
424
  * });
245
425
  *
246
426
  * // Async render
247
427
  * export default defineFixture({
248
- * render: async (container, { props, signal }) => {
249
- * const data = await fetch(props.url, { signal });
428
+ * inputSchema: z.object({ url: z.string() }),
429
+ * render: async (container, { input, signal }) => {
430
+ * const data = await fetch(input.url, { signal });
250
431
  * container.innerHTML = await data.text();
251
432
  * return { dispose: () => { container.innerHTML = ''; } };
252
433
  * },
253
434
  * });
254
435
  * ```
255
436
  */
256
- export declare function defineFixture(options: DefineFixtureOptions): SingleFixtureExport;
437
+ export declare function defineFixture<TInput = unknown>(options: DefineFixtureOptions<TInput>): SingleFixtureExport;
438
+ export declare function defineDebugPanel<TState, TAction = never>(options: DefineDebugPanelOptions<TState, TAction>): DebugPanelDefinition<TState, TAction>;
439
+ export declare function interactiveOutput<T>(options: {
440
+ readonly getSnapshot: () => T;
441
+ readonly activate: DebugPanelActivation<T, T>;
442
+ }): InteractiveOutput<T>;
443
+ export declare function isInteractiveOutput(value: unknown): value is InteractiveOutput<unknown>;
257
444
  /**
258
445
  * Defines a group of fixtures with support for nesting.
259
446
  *
@@ -298,9 +485,9 @@ export declare function defineFixtureVariants(options: DefineFixtureVariantsOpti
298
485
  *
299
486
  * @example
300
487
  * ```ts
301
- * render: (container, { props }) => syncRender(() => {
488
+ * render: (container, { input }) => syncRender(() => {
302
489
  * const el = document.createElement('button');
303
- * el.textContent = props.label;
490
+ * el.textContent = input.label;
304
491
  * container.appendChild(el);
305
492
  * return () => el.remove();
306
493
  * })
@@ -317,8 +504,8 @@ export declare function syncRender(doRender: () => (() => void) | IDisposable |
317
504
  *
318
505
  * @example
319
506
  * ```ts
320
- * render: (container, { props, signal }) => asyncRender(signal, async () => {
321
- * const data = await fetchData(props.url, { signal });
507
+ * render: (container, { input, signal }) => asyncRender(signal, async () => {
508
+ * const data = await fetchData(input.url, { signal });
322
509
  * if (signal.aborted) return;
323
510
  * container.innerHTML = data;
324
511
  * return () => { container.innerHTML = ''; };
@@ -326,4 +513,5 @@ export declare function syncRender(doRender: () => (() => void) | IDisposable |
326
513
  * ```
327
514
  */
328
515
  export declare function asyncRender(signal: AbortSignal, doRender: () => Promise<(() => void) | IDisposable | void>): RenderResult;
516
+ export {};
329
517
  //# sourceMappingURL=fixtureApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixtureApi.d.ts","sourceRoot":"","sources":["../../src/core/fixtureApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixtureApi.d.ts","sourceRoot":"","sources":["../../src/core/fixtureApi.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { FixtureExport, SingleFixtureExport, FixtureGroupExport, FixtureVariantsExport, DisplayMode, StyleDefinition, RenderReturn, RenderContext } from './fixtureApi.js';
1
+ import { FixtureExport, SingleFixtureExport, FixtureGroupExport, FixtureVariantsExport, DisplayMode, StyleDefinition, RenderReturn, RenderContext, IJsonSchema, DebugPanelDefinition, FixtureInputControlOptions } from './fixtureApi.js';
2
2
  /**
3
3
  * Type guard for SingleFixtureExport.
4
4
  * Uses the global symbol brand for cross-version compatibility.
@@ -64,6 +64,12 @@ export interface ComponentDefinition {
64
64
  readonly labels: readonly string[];
65
65
  /** Accumulated expected visual descriptions (from self + parent groups/variants) */
66
66
  readonly expectedVisualDescriptions: readonly string[];
67
+ /** JSON Schema describing the expected shape of `RenderContext.input` (always an object). */
68
+ readonly inputSchema?: IJsonSchema;
69
+ /** Explorer presentation metadata for input properties. */
70
+ readonly inputControls?: Readonly<Record<string, FixtureInputControlOptions>>;
71
+ /** Statically declared custom debug panels. */
72
+ readonly debugPanels: readonly DebugPanelDefinition<unknown, unknown>[];
67
73
  /** Source file path this fixture was defined in */
68
74
  readonly sourceFile: string;
69
75
  /**
@@ -74,8 +80,22 @@ export interface ComponentDefinition {
74
80
  }
75
81
  /**
76
82
  * Creates the component definition from a validated SingleFixtureExport.
83
+ *
84
+ * @param inheritedInputSchema - JSON Schema accumulated from enclosing groups/variants; merged
85
+ * with the fixture's own schema (the fixture's properties win on conflict).
77
86
  */
78
- export declare function createComponentDefinition(fixture: SingleFixtureExport, id: string, name: string, sourceFile: string, inheritedVisualDescriptions?: readonly string[]): ComponentDefinition;
87
+ export declare function createComponentDefinition(fixture: SingleFixtureExport, id: string, name: string, sourceFile: string, inheritedVisualDescriptions?: readonly string[], inheritedInputSchema?: IJsonSchema | undefined): ComponentDefinition;
88
+ /**
89
+ * Merges two object JSON Schemas. `child` properties win over `parent` on key conflicts;
90
+ * `required` is the de-duplicated union. Returns whichever side is defined when only one is.
91
+ */
92
+ export declare function mergeInputSchemas(parent: IJsonSchema | undefined, child: IJsonSchema | undefined): IJsonSchema | undefined;
93
+ /**
94
+ * Builds the effective `input` object passed to a fixture: the schema's top-level property
95
+ * defaults, overlaid with any caller-provided overrides. Returns the override unchanged when
96
+ * there is no schema (so schemaless fixtures keep their original `undefined`/passthrough input).
97
+ */
98
+ export declare function applyInputDefaults(schema: IJsonSchema | undefined, input: unknown): unknown;
79
99
  /**
80
100
  * Type guard for checking if a value is a ComponentDefinition.
81
101
  * @deprecated Use isSingleFixture or isFixtureGroup instead
@@ -1 +1 @@
1
- {"version":3,"file":"fixtureApiConsumer.d.ts","sourceRoot":"","sources":["../../src/core/fixtureApiConsumer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAOzB;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAS5E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAS1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAShF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAMD,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,CAW7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,mBAAmB,CAAC,CAKnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAKjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAKvF;AAMD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;IAErD,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAE7C,0GAA0G;IAC1G,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;IAEtC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,oFAAoF;IACpF,QAAQ,CAAC,0BAA0B,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvD,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,CAAC;CACtE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,mBAAmB,EAC5B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,2BAA2B,GAAE,SAAS,MAAM,EAAO,GAClD,mBAAmB,CAmBrB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CASlF"}
1
+ {"version":3,"file":"fixtureApiConsumer.d.ts","sourceRoot":"","sources":["../../src/core/fixtureApiConsumer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
- export type { IDisposable, StyleDefinition, DisplayMode, PageMode, ComponentMode, ViewportPreset, ViewportPresetName, DefineFixtureOptions, DefineComponentOptions, FixtureGroupEntry, FixtureGroupInput, FixtureVariantsInput, FixtureExport, SingleFixtureExport, FixtureGroupExport, FixtureVariantsExport, RenderResult, RenderReturn, RenderContext, } from './fixtureApi.js';
2
- export { singleFixtureBrand, fixtureGroupBrand, fixtureVariantsBrand, defineFixture, defineFixtureGroup, defineFixtureVariants, syncRender, asyncRender, } from './fixtureApi.js';
1
+ export type { IDisposable, StyleDefinition, DisplayMode, PageMode, ComponentMode, ViewportPreset, ViewportPresetName, DefineFixtureOptions, DefineComponentOptions, FixtureGroupEntry, FixtureGroupInput, FixtureVariantsInput, FixtureExport, SingleFixtureExport, FixtureGroupExport, FixtureVariantsExport, RenderResult, RenderReturn, RenderContext, RenderHost, IJsonSchema, DebugPanelPlacement, DebugPanelViewContext, DebugPanelViewInstance, DefineDebugPanelOptions, DebugPanelDefinition, DebugPanelChannel, DebugPanelActivation, FixtureDebugApi, FixtureInputControlOptions, InteractiveOutput, } from './fixtureApi.js';
2
+ export { singleFixtureBrand, fixtureGroupBrand, fixtureVariantsBrand, defineFixture, defineFixtureGroup, defineFixtureVariants, defineDebugPanel, interactiveOutput, isInteractiveOutput, syncRender, asyncRender, } from './fixtureApi.js';
3
3
  export type { ComponentDefinition, ParseResult } from './fixtureApiConsumer.js';
4
- export { isSingleFixture, isFixtureGroup, isFixtureVariants, parseFixtureExport, parseSingleFixture, parseFixtureGroup, parseFixtureVariants, createComponentDefinition, isComponentDefinition, } from './fixtureApiConsumer.js';
4
+ export { isSingleFixture, isFixtureGroup, isFixtureVariants, parseFixtureExport, parseSingleFixture, parseFixtureGroup, parseFixtureVariants, createComponentDefinition, mergeInputSchemas, applyInputDefaults, isComponentDefinition, } from './fixtureApiConsumer.js';
5
+ export { FixtureInputStore } from './FixtureInputStore.js';
6
+ export type { FixtureInputOverride } from './FixtureInputStore.js';
7
+ export { aggregateInputProperties, effectiveInputValue, } from './inputAggregation.js';
8
+ export type { AggregatedInputProperty, ComponentInputInfo, } from './inputAggregation.js';
5
9
  export type { ExceptionError, RenderEvent, RenderEventType, RenderReport, } from './ErrorInfo.js';
6
10
  export type { FixtureNode, } from './FixtureNode.js';
7
11
  export { FixturePath } from './FixturePath.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAKzB,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAKjC,YAAY,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGxF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACrD,WAAW,IAAI,IAAI,CAAC;CACrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAKzB,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAK/B,YAAY,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGxF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACrD,WAAW,IAAI,IAAI,CAAC;CACrB"}
@@ -0,0 +1,31 @@
1
+ import { IJsonSchema } from './fixtureApi.js';
2
+ /**
3
+ * A single input property shared by one or more of the currently rendered fixtures.
4
+ * Properties are grouped by name **and** structural schema equality, so a control can edit
5
+ * every fixture that declares the same property at once.
6
+ */
7
+ export interface AggregatedInputProperty {
8
+ readonly name: string;
9
+ readonly schema: IJsonSchema;
10
+ /** Ids of the fixtures that declare this exact property (same name + schema). */
11
+ readonly fixtureIds: readonly string[];
12
+ }
13
+ /** Minimal shape needed to aggregate: a fixture id and its (merged) input schema. */
14
+ export interface ComponentInputInfo {
15
+ readonly id: string;
16
+ readonly inputSchema?: IJsonSchema;
17
+ }
18
+ /**
19
+ * Stable identity of an input property: its name plus structural schema. Two fixtures that
20
+ * declare the same property (same name + schema) share this key, so a chosen value can be
21
+ * persisted once and reused across every fixture that has it.
22
+ */
23
+ export declare function inputPropertyKey(name: string, schema: IJsonSchema): string;
24
+ /**
25
+ * Collects the input properties declared across the given fixtures, grouping identical
26
+ * (name + schema) properties so they can be edited together. Order follows first appearance.
27
+ */
28
+ export declare function aggregateInputProperties(components: readonly ComponentInputInfo[]): AggregatedInputProperty[];
29
+ /** The value currently in effect for a property: explicit override, else schema default. */
30
+ export declare function effectiveInputValue(override: Record<string, unknown> | undefined, name: string, schema: IJsonSchema): unknown;
31
+ //# sourceMappingURL=inputAggregation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputAggregation.d.ts","sourceRoot":"","sources":["../../src/core/inputAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACtC;AAgBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAE1E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACpC,UAAU,EAAE,SAAS,kBAAkB,EAAE,GAC1C,uBAAuB,EAAE,CA0B3B;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,GACpB,OAAO,CAKT"}
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * For the viewer/explorer UI, import from '@vscode/component-explorer/viewer' instead.
8
8
  */
9
- export { defineFixture, defineFixtureGroup, defineFixtureVariants, singleFixtureBrand, fixtureGroupBrand, fixtureVariantsBrand, } from './core/fixtureApi.js';
10
- export type { DefineFixtureOptions, DefineComponentOptions, FixtureExport, SingleFixtureExport, FixtureGroupExport, FixtureVariantsExport, FixtureGroupEntry, FixtureGroupInput, FixtureVariantsInput, IDisposable, StyleDefinition, DisplayMode, PageMode, ComponentMode, ViewportPreset, ViewportPresetName, } from './core/fixtureApi.js';
9
+ export { defineFixture, defineFixtureGroup, defineFixtureVariants, defineDebugPanel, interactiveOutput, singleFixtureBrand, fixtureGroupBrand, fixtureVariantsBrand, } from './core/fixtureApi.js';
10
+ export type { DefineFixtureOptions, DefineComponentOptions, FixtureExport, SingleFixtureExport, FixtureGroupExport, FixtureVariantsExport, FixtureGroupEntry, FixtureGroupInput, FixtureVariantsInput, IDisposable, StyleDefinition, DisplayMode, PageMode, ComponentMode, ViewportPreset, ViewportPresetName, RenderContext, RenderHost, RenderResult, RenderReturn, IJsonSchema, DebugPanelPlacement, DebugPanelViewContext, DebugPanelViewInstance, DefineDebugPanelOptions, DebugPanelDefinition, DebugPanelChannel, DebugPanelActivation, FixtureDebugApi, FixtureInputControlOptions, InteractiveOutput, } from './core/fixtureApi.js';
11
11
  export { runtimeVersion, } from './runtimeVersion.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EAGrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAEV,oBAAoB,EACpB,sBAAsB,EAGtB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EAGpB,WAAW,EACX,eAAe,EACf,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,GACf,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAGjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAEV,oBAAoB,EACpB,sBAAsB,EAGtB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EAGpB,WAAW,EACX,eAAe,EACf,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,kBAAkB,EAGlB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,GACf,MAAM,qBAAqB,CAAC"}