@civitai/blocks-react 0.9.0 → 0.10.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.
@@ -6,8 +6,9 @@
6
6
  * a block in a cross-origin iframe and answers its `postMessage` protocol:
7
7
  * mints a token, runs the lazy-consent round-trip, brokers the orchestrator
8
8
  * money path (estimate → submit → poll), opens the native Buzz-purchase and
9
- * resource-picker modals. Locally in a `vitest` test OR a starter's dev
10
- * harness — there is no host, so this plays one.
9
+ * resource-picker modals, and serves the App-Blocks KV datastore. Locally in
10
+ * a `vitest` test OR a starter's dev harness — there is no host, so this plays
11
+ * one.
11
12
  *
12
13
  * It is the portable core that the React `<Harness>` (a.k.a. `<MockHostProvider>`
13
14
  * in `../testing`) wraps. Every block app used to hand-roll ~250 lines of this;
@@ -22,10 +23,21 @@
22
23
  * `window.location.origin` (the React `<Harness>` is documented for that).
23
24
  * 3. Dispatches a configurable `BLOCK_INIT`, then answers the full protocol.
24
25
  *
25
- * NOT a real RS256 JWT, NO real Buzz, NO orchestrator — only the bridge
26
- * round-trips are exercised. Never import this from production code.
26
+ * SCENARIOS (Layer 1 of the local-dev DX): the {@link MockHostOptions.generation},
27
+ * {@link MockHostOptions.buzz}, and {@link MockHostOptions.storage} groups let a
28
+ * dev simulate REAL costs, slow gens, FAILURES, an insufficient-Buzz balance,
29
+ * and a working KV store with a quota — entirely synthetically, so the full
30
+ * money / error / storage UX is exercisable locally without spending a single
31
+ * Buzz or touching the network. The returned {@link MockHost} exposes
32
+ * `setScenario()` + a `buzz` handle so a harness UI can flip scenarios
33
+ * mid-session.
34
+ *
35
+ * PURE + SYNTHETIC: NOT a real RS256 JWT, NO real Buzz, NO orchestrator, and
36
+ * — asserted by the test suite — NO network (`fetch`/`XMLHttpRequest` are never
37
+ * called). Only the postMessage bridge round-trips are exercised. Never import
38
+ * this from production code.
27
39
  */
28
- import { type BlockContext, type BlockResourceInfo, type BlockResourcePickerType, type ColorDomain, type Theme, type ViewerInfo } from '@civitai/app-sdk/blocks';
40
+ import { type BlockContext, type BlockResourceInfo, type BlockResourcePickerType, type ColorDomain, type Theme, type ViewerInfo, type WorkflowBody } from '@civitai/app-sdk/blocks';
29
41
  /**
30
42
  * How submits resolve. `'none'` = everything succeeds; `'all'` /
31
43
  * `'insufficient'` = every submit returns an insufficient-Buzz `failed`
@@ -40,10 +52,111 @@ export type MockHostFailMode = 'none' | 'some' | 'all' | 'insufficient';
40
52
  * user-dismissed picker (→ `RESOURCE_PICKER_RESULT` with no `selected`).
41
53
  */
42
54
  export type CannedPick = BlockResourceInfo;
55
+ /**
56
+ * A per-generation cost: a fixed number, or a function of the submitted
57
+ * {@link WorkflowBody} (so a dev can vary cost by model / step count).
58
+ */
59
+ export type CostSpec = number | ((req: WorkflowBody) => number);
60
+ /**
61
+ * A result image url: a fixed string, or a function of the submitted body
62
+ * (so a dev can echo the prompt into a placeholder).
63
+ */
64
+ export type ImageSpec = string | ((req: WorkflowBody) => string);
65
+ /**
66
+ * GENERATION scenario controls — simulate real costs, slow gens, and failures
67
+ * on the orchestrator money path WITHOUT a real orchestrator. All optional.
68
+ */
69
+ export interface MockGenerationScenario {
70
+ /**
71
+ * Cost reported on `ESTIMATE_RESULT` + the succeeded snapshot. A number, or
72
+ * a `(body) => number`. Overrides the legacy top-level `cost`. Default `8`.
73
+ */
74
+ costPerGen?: CostSpec;
75
+ /**
76
+ * Synthetic latency before the SUBMITTED→succeeded transition lands, in ms.
77
+ * A single number, or a `[min, max]` range (uniform random). Applied to the
78
+ * poll that flips a workflow to `succeeded`. Default `0` (immediate).
79
+ */
80
+ latencyMs?: number | [number, number];
81
+ /**
82
+ * Probability (0..1) that any given submit fails with a generic generation
83
+ * error. Independent of {@link failRate}'s sibling controls. Default `0`.
84
+ */
85
+ failRate?: number;
86
+ /**
87
+ * Force the next N submits to fail (counts down). Deterministic companion to
88
+ * {@link failRate} — handy for "first try fails, retry succeeds" UX tests.
89
+ */
90
+ failNext?: number;
91
+ /** A single result image url (or `(body) => url`). */
92
+ image?: ImageSpec;
93
+ /**
94
+ * Multiple result image urls (or `(body) => url[]`). Takes precedence over
95
+ * {@link image} when both are set.
96
+ */
97
+ images?: string[] | ((req: WorkflowBody) => string[]);
98
+ }
99
+ /**
100
+ * BUZZ scenario controls — simulate a balance so the insufficient-Buzz / top-up
101
+ * UX is exercisable. The mock host treats `balance` as a spendable wallet:
102
+ * each succeeding generation DEBITS its cost; a submit whose cost would exceed
103
+ * the remaining balance resolves to an insufficient-Buzz `failed` snapshot
104
+ * (exercising the Top-Up CTA), and `OPEN_BUZZ_PURCHASE` REFILLS the balance.
105
+ */
106
+ export interface MockBuzzScenario {
107
+ /**
108
+ * Simulated spendable balance. When set, generations debit against it and a
109
+ * gen that would exceed it returns an insufficient-Buzz outcome. When
110
+ * `undefined`, balance is NOT simulated (back-compat: only the legacy
111
+ * `failMode` drives insufficiency).
112
+ */
113
+ balance?: number;
114
+ /**
115
+ * Force every submit down the insufficient-Buzz path regardless of balance.
116
+ * Equivalent to the legacy `failMode: 'insufficient'`; provided here so the
117
+ * insufficient UX is reachable from the `buzz` group alone.
118
+ */
119
+ insufficient?: boolean;
120
+ }
121
+ /**
122
+ * STORAGE scenario controls — drive the in-memory KV backend that answers the
123
+ * `APP_STORAGE_*` protocol, so the W4 KV apps (e.g. Prompt Library) can test
124
+ * load / quota / error states against `createMockHost` directly instead of
125
+ * hand-injecting a fake store.
126
+ */
127
+ export interface MockStorageScenario {
128
+ /**
129
+ * Initial KV contents (key → JSON value) the store is seeded with. `get`
130
+ * returns these immediately; they count against the simulated quota.
131
+ */
132
+ seed?: Record<string, unknown>;
133
+ /**
134
+ * Simulated per-app quota in bytes. A `set` that would cross it resolves
135
+ * `{ ok: false, error: 'PAYLOAD_TOO_LARGE' }` (the host doesn't leak which
136
+ * cap tripped). Default 50 MB.
137
+ */
138
+ quotaBytes?: number;
139
+ /**
140
+ * Per-value byte cap. A `set` whose serialized value exceeds it resolves
141
+ * `{ ok: false, error: 'PAYLOAD_TOO_LARGE' }`. Default 64 KB.
142
+ */
143
+ valueCapBytes?: number;
144
+ /** Simulated row ceiling reported by `getQuota`. Default 1,000,000. */
145
+ limitRows?: number;
146
+ /**
147
+ * Force the next N storage MUTATIONS (`set`/`delete`) to fail with a generic
148
+ * `STORAGE_UNAVAILABLE` error (counts down) — exercises the error UX.
149
+ */
150
+ failNext?: number;
151
+ }
43
152
  /**
44
153
  * Drives `createMockHost`. Every field is optional with a sensible default so
45
154
  * `createMockHost()` works out of the box. Each block configures SCENARIOS
46
155
  * here instead of forking the host code.
156
+ *
157
+ * Backward-compatible: the legacy top-level `cost`/`failMode`/`buzzBudget`/
158
+ * `pollsUntilDone` knobs still work. When BOTH a legacy knob and its scenario
159
+ * equivalent are set, the SCENARIO wins (it's the newer, richer control).
47
160
  */
48
161
  export interface MockHostOptions {
49
162
  /**
@@ -68,10 +181,30 @@ export interface MockHostOptions {
68
181
  cannedPicks?: Partial<Record<BlockResourcePickerType, CannedPick | null>>;
69
182
  /** Number of `POLL_WORKFLOW` round-trips before a workflow succeeds. Default 2. */
70
183
  pollsUntilDone?: number;
71
- /** The `cost.total` reported on estimate + succeeded snapshots. Default 8. */
184
+ /**
185
+ * The `cost.total` reported on estimate + succeeded snapshots. Default 8.
186
+ * @deprecated Prefer {@link MockGenerationScenario.costPerGen} on `generation`.
187
+ */
72
188
  cost?: number;
73
189
  /** The Buzz budget reported on a granted token. Default 200. */
74
190
  buzzBudget?: number;
191
+ /**
192
+ * GENERATION scenario: cost / latency / failure / result-image controls. See
193
+ * {@link MockGenerationScenario}.
194
+ */
195
+ generation?: MockGenerationScenario;
196
+ /**
197
+ * BUZZ scenario: simulated balance + force-insufficient. See
198
+ * {@link MockBuzzScenario}.
199
+ */
200
+ buzz?: MockBuzzScenario;
201
+ /**
202
+ * STORAGE scenario: in-memory KV backend (seed / quota / failNext). See
203
+ * {@link MockStorageScenario}. When omitted, the store starts EMPTY with the
204
+ * v0 defaults — `APP_STORAGE_*` is answered either way (the mock host always
205
+ * serves storage now).
206
+ */
207
+ storage?: MockStorageScenario;
75
208
  /** Host theme delivered in `BLOCK_INIT` + context. Default `'dark'`. */
76
209
  theme?: Theme;
77
210
  /**
@@ -122,16 +255,46 @@ export interface MockHostOptions {
122
255
  */
123
256
  window?: Window & typeof globalThis;
124
257
  }
125
- /** Handle returned by {@link createMockHost}. Call `install()` to patch the
126
- * host in; it returns the `uninstall()` that restores `window.parent` and
127
- * removes timers. Idempotent calling `install()` twice returns the same
128
- * teardown; `uninstall()` is safe to call more than once. */
258
+ /**
259
+ * The mutable slice of {@link MockHostOptions} a harness UI can flip mid-session
260
+ * via {@link MockHost.setScenario}. (Identity/init-only fields like `viewer`,
261
+ * `context`, `theme`, and `appId` are fixed at install time change them by
262
+ * re-installing.)
263
+ */
264
+ export type MockHostScenarioPatch = Pick<MockHostOptions, 'failMode' | 'cost' | 'pollsUntilDone' | 'cannedPicks' | 'generation' | 'buzz' | 'storage'>;
265
+ /** Runtime Buzz-balance handle exposed on {@link MockHost.buzz}. */
266
+ export interface MockBuzzHandle {
267
+ /** Current simulated balance, or `undefined` when balance isn't simulated. */
268
+ getBalance: () => number | undefined;
269
+ /** Set (or start simulating) the balance. Pass `undefined` to stop simulating. */
270
+ setBalance: (n: number | undefined) => void;
271
+ }
272
+ /** Handle returned by {@link createMockHost}.
273
+ *
274
+ * Call `install()` to patch the host in; it returns the `uninstall()` that
275
+ * restores `window.parent` and removes timers (so the historical
276
+ * `const uninstall = createMockHost(opts).install()` keeps working unchanged).
277
+ *
278
+ * After install, a harness UI can drive scenarios live:
279
+ * - `setScenario(patch)` — merge new generation/buzz/storage/failMode controls.
280
+ * - `buzz.setBalance(n)` / `buzz.getBalance()` — flip the simulated wallet.
281
+ *
282
+ * `install()` is idempotent — calling it twice returns the same teardown;
283
+ * `uninstall()` is safe to call more than once. */
129
284
  export interface MockHost {
130
285
  install: () => () => void;
286
+ /** Merge a partial scenario into the live mock host (no re-install). */
287
+ setScenario: (patch: MockHostScenarioPatch) => void;
288
+ /** Runtime Buzz-balance control for a harness UI. */
289
+ buzz: MockBuzzHandle;
131
290
  }
132
291
  /**
133
292
  * Reads the URL query toggles the gen-matrix dev harness uses, so a starter's
134
293
  * dev harness keeps working with `?viewer/?consent/?fail/?theme/?pick/?pickCkpt`.
294
+ * Layer-1 additions: `?balance/?latency/?costPerGen/?failNext/?failRate/?seed`
295
+ * map onto the new scenario groups so a dev can flip insufficient-buzz /
296
+ * failures / latency without editing code.
297
+ *
135
298
  * Returns a partial overlay applied ON TOP of explicit {@link MockHostOptions}
136
299
  * (URL wins — it's the interactive dev knob). No-op outside a browser.
137
300
  */
@@ -143,9 +306,11 @@ export declare function readMockHostUrlOptions(win?: (Window & typeof globalThis
143
306
  * from a node/jsdom/happy-dom test OR a browser dev harness.
144
307
  *
145
308
  * @example
146
- * const host = createMockHost({ failMode: 'some', pollsUntilDone: 1 });
309
+ * const host = createMockHost({ generation: { failNext: 1, latencyMs: 1500 }, buzz: { balance: 5 } });
147
310
  * const uninstall = host.install();
148
311
  * // … drive the block / assertions …
312
+ * host.buzz.setBalance(0); // flip to insufficient mid-session
313
+ * host.setScenario({ generation: { failRate: 1 } });
149
314
  * uninstall();
150
315
  */
151
316
  export declare function createMockHost(options?: MockHostOptions): MockHost;
@@ -1 +1 @@
1
- {"version":3,"file":"mockHost.d.ts","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,UAAU,EAEhB,MAAM,yBAAyB,CAAC;AAajC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,cAAc,CAAC;AAExE;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC5B,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,UAAU,CAAC;CACrC;AAED;;;6DAG6D;AAC7D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,MAAM,IAAI,CAAC;CAC3B;AAsBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,CAAC,MAAM,GAAG,OAAO,UAAU,CAAC,GAAG,SAC3B,GACR,OAAO,CAAC,eAAe,CAAC,CA6C1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAmRtE"}
1
+ {"version":3,"file":"mockHost.d.ts","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,9 @@
6
6
  * a block in a cross-origin iframe and answers its `postMessage` protocol:
7
7
  * mints a token, runs the lazy-consent round-trip, brokers the orchestrator
8
8
  * money path (estimate → submit → poll), opens the native Buzz-purchase and
9
- * resource-picker modals. Locally in a `vitest` test OR a starter's dev
10
- * harness — there is no host, so this plays one.
9
+ * resource-picker modals, and serves the App-Blocks KV datastore. Locally in
10
+ * a `vitest` test OR a starter's dev harness — there is no host, so this plays
11
+ * one.
11
12
  *
12
13
  * It is the portable core that the React `<Harness>` (a.k.a. `<MockHostProvider>`
13
14
  * in `../testing`) wraps. Every block app used to hand-roll ~250 lines of this;
@@ -22,8 +23,19 @@
22
23
  * `window.location.origin` (the React `<Harness>` is documented for that).
23
24
  * 3. Dispatches a configurable `BLOCK_INIT`, then answers the full protocol.
24
25
  *
25
- * NOT a real RS256 JWT, NO real Buzz, NO orchestrator — only the bridge
26
- * round-trips are exercised. Never import this from production code.
26
+ * SCENARIOS (Layer 1 of the local-dev DX): the {@link MockHostOptions.generation},
27
+ * {@link MockHostOptions.buzz}, and {@link MockHostOptions.storage} groups let a
28
+ * dev simulate REAL costs, slow gens, FAILURES, an insufficient-Buzz balance,
29
+ * and a working KV store with a quota — entirely synthetically, so the full
30
+ * money / error / storage UX is exercisable locally without spending a single
31
+ * Buzz or touching the network. The returned {@link MockHost} exposes
32
+ * `setScenario()` + a `buzz` handle so a harness UI can flip scenarios
33
+ * mid-session.
34
+ *
35
+ * PURE + SYNTHETIC: NOT a real RS256 JWT, NO real Buzz, NO orchestrator, and
36
+ * — asserted by the test suite — NO network (`fetch`/`XMLHttpRequest` are never
37
+ * called). Only the postMessage bridge round-trips are exercised. Never import
38
+ * this from production code.
27
39
  */
28
40
  import { BrowsingLevel, SFW_LEVELS, } from '@civitai/app-sdk/blocks';
29
41
  /** The full all-levels ceiling a `red` domain projects (mirrors the server). */
@@ -34,6 +46,10 @@ const ALL_LEVELS = BrowsingLevel.PG |
34
46
  BrowsingLevel.XXX;
35
47
  const DEV_TOKEN = 'dev.mockhost.mock.jwt.NOT.A.REAL.RS256';
36
48
  const BUDGETED_SCOPE = 'ai:write:budgeted';
49
+ /** v0 host storage ceilings (mirror civitai/civitai's APP_STORAGE limits). */
50
+ const DEFAULT_STORAGE_QUOTA_BYTES = 50 * 1024 * 1024; // 50 MB per app
51
+ const DEFAULT_STORAGE_VALUE_CAP_BYTES = 64 * 1024; // 64 KB per value
52
+ const DEFAULT_STORAGE_LIMIT_ROWS = 1_000_000;
37
53
  const DEFAULT_CHECKPOINT_PICK = {
38
54
  versionId: 691639,
39
55
  modelId: 618692,
@@ -51,9 +67,24 @@ const DEFAULT_LORA_PICK = {
51
67
  modelType: 'LORA',
52
68
  };
53
69
  const DEFAULT_VIEWER = { id: 2, username: 'dev-viewer', status: 'active' };
70
+ const INSUFFICIENT_BUZZ_ERROR = 'Insufficient Buzz to run this generation.';
71
+ const GENERIC_GEN_ERROR = 'Generation failed (simulated).';
72
+ /** Byte size of a JSON value as the mock store would persist it. */
73
+ function jsonByteSize(value) {
74
+ try {
75
+ return new TextEncoder().encode(JSON.stringify(value ?? null)).length;
76
+ }
77
+ catch {
78
+ return 0;
79
+ }
80
+ }
54
81
  /**
55
82
  * Reads the URL query toggles the gen-matrix dev harness uses, so a starter's
56
83
  * dev harness keeps working with `?viewer/?consent/?fail/?theme/?pick/?pickCkpt`.
84
+ * Layer-1 additions: `?balance/?latency/?costPerGen/?failNext/?failRate/?seed`
85
+ * map onto the new scenario groups so a dev can flip insufficient-buzz /
86
+ * failures / latency without editing code.
87
+ *
57
88
  * Returns a partial overlay applied ON TOP of explicit {@link MockHostOptions}
58
89
  * (URL wins — it's the interactive dev knob). No-op outside a browser.
59
90
  */
@@ -108,6 +139,56 @@ export function readMockHostUrlOptions(win = globalThis
108
139
  cannedPicks.Checkpoint = DEFAULT_CHECKPOINT_PICK;
109
140
  out.cannedPicks = cannedPicks;
110
141
  }
142
+ // --- Layer-1 scenario toggles ---
143
+ const generation = {};
144
+ const buzz = {};
145
+ const balance = params.get('balance');
146
+ if (balance !== null && balance.trim() !== '' && Number.isFinite(Number(balance))) {
147
+ buzz.balance = Number(balance);
148
+ }
149
+ if (params.get('insufficient') === '1' || params.get('insufficient') === 'true') {
150
+ buzz.insufficient = true;
151
+ }
152
+ const latency = params.get('latency');
153
+ if (latency !== null && latency.trim() !== '') {
154
+ // ?latency=2000 or ?latency=500-2000
155
+ const range = latency.split('-').map((s) => Number(s.trim()));
156
+ const lo = range[0] ?? NaN;
157
+ const hi = range[1] ?? NaN;
158
+ if (range.length === 2 && Number.isFinite(lo) && Number.isFinite(hi)) {
159
+ generation.latencyMs = [lo, hi];
160
+ }
161
+ else if (Number.isFinite(lo)) {
162
+ generation.latencyMs = lo;
163
+ }
164
+ }
165
+ const costPerGen = params.get('costPerGen') ?? params.get('cost');
166
+ if (costPerGen !== null && Number.isFinite(Number(costPerGen))) {
167
+ generation.costPerGen = Number(costPerGen);
168
+ }
169
+ const failNext = params.get('failNext');
170
+ if (failNext !== null && Number.isInteger(Number(failNext))) {
171
+ generation.failNext = Number(failNext);
172
+ }
173
+ const failRate = params.get('failRate');
174
+ if (failRate !== null && Number.isFinite(Number(failRate))) {
175
+ generation.failRate = Number(failRate);
176
+ }
177
+ if (Object.keys(generation).length > 0)
178
+ out.generation = generation;
179
+ if (Object.keys(buzz).length > 0)
180
+ out.buzz = buzz;
181
+ const seed = params.get('seed');
182
+ if (seed) {
183
+ try {
184
+ const parsed = JSON.parse(seed);
185
+ if (parsed && typeof parsed === 'object')
186
+ out.storage = { seed: parsed };
187
+ }
188
+ catch {
189
+ /* ignore malformed ?seed= */
190
+ }
191
+ }
111
192
  return out;
112
193
  }
113
194
  /**
@@ -117,9 +198,11 @@ export function readMockHostUrlOptions(win = globalThis
117
198
  * from a node/jsdom/happy-dom test OR a browser dev harness.
118
199
  *
119
200
  * @example
120
- * const host = createMockHost({ failMode: 'some', pollsUntilDone: 1 });
201
+ * const host = createMockHost({ generation: { failNext: 1, latencyMs: 1500 }, buzz: { balance: 5 } });
121
202
  * const uninstall = host.install();
122
203
  * // … drive the block / assertions …
204
+ * host.buzz.setBalance(0); // flip to insufficient mid-session
205
+ * host.setScenario({ generation: { failRate: 1 } });
123
206
  * uninstall();
124
207
  */
125
208
  export function createMockHost(options = {}) {
@@ -130,15 +213,62 @@ export function createMockHost(options = {}) {
130
213
  // Bind to a non-nullable local so the `install()` closure keeps the narrowing.
131
214
  const win = maybeWin;
132
215
  const viewer = options.viewer === undefined ? DEFAULT_VIEWER : options.viewer;
133
- const failMode = options.failMode ?? 'none';
134
- const pollsUntilDone = options.pollsUntilDone ?? 2;
135
- const cost = options.cost ?? 8;
136
216
  const buzzBudget = options.buzzBudget ?? 200;
137
217
  const theme = options.theme ?? 'dark';
138
- const cannedPicks = options.cannedPicks ?? { Checkpoint: DEFAULT_CHECKPOINT_PICK, LORA: DEFAULT_LORA_PICK };
139
218
  const blockInstanceId = options.blockInstanceId ?? 'page_mock';
140
219
  const blockId = options.blockId ?? 'mock-block';
141
220
  const appId = options.appId ?? 'app_dev';
221
+ // ---- LIVE, mutable scenario state (so setScenario / buzz.setBalance work) ----
222
+ // Legacy + scenario knobs are merged into one mutable record; `setScenario`
223
+ // rewrites these in place without re-installing.
224
+ let failMode = options.failMode ?? 'none';
225
+ let pollsUntilDone = options.pollsUntilDone ?? 2;
226
+ let gen = { ...(options.generation ?? {}) };
227
+ let buzz = { ...(options.buzz ?? {}) };
228
+ // Legacy `cost` feeds costPerGen unless the scenario set its own.
229
+ let legacyCost = options.cost ?? 8;
230
+ let cannedPicks = options.cannedPicks ?? { Checkpoint: DEFAULT_CHECKPOINT_PICK, LORA: DEFAULT_LORA_PICK };
231
+ // ---- Storage scenario (in-memory KV backend) ----
232
+ const storageScenario = { ...(options.storage ?? {}) };
233
+ const store = new Map();
234
+ const seedNow = new Date().toISOString();
235
+ for (const [k, v] of Object.entries(storageScenario.seed ?? {})) {
236
+ store.set(k, { value: v, updatedAt: seedNow });
237
+ }
238
+ let storageFailNext = storageScenario.failNext ?? 0;
239
+ const quotaBytes = storageScenario.quotaBytes ?? DEFAULT_STORAGE_QUOTA_BYTES;
240
+ const valueCapBytes = storageScenario.valueCapBytes ?? DEFAULT_STORAGE_VALUE_CAP_BYTES;
241
+ const limitRows = storageScenario.limitRows ?? DEFAULT_STORAGE_LIMIT_ROWS;
242
+ const usedBytes = () => {
243
+ let total = 0;
244
+ for (const [k, row] of store)
245
+ total += jsonByteSize(row.value) + k.length;
246
+ return total;
247
+ };
248
+ // Resolve a per-gen cost from the scenario (or legacy `cost`).
249
+ const costFor = (body) => {
250
+ const spec = gen.costPerGen ?? legacyCost;
251
+ return typeof spec === 'function' ? spec(body) : (spec ?? legacyCost);
252
+ };
253
+ const latencyFor = () => {
254
+ const l = gen.latencyMs;
255
+ if (l === undefined)
256
+ return 0;
257
+ if (Array.isArray(l)) {
258
+ const [min, max] = l;
259
+ return Math.round(min + Math.random() * Math.max(0, max - min));
260
+ }
261
+ return l;
262
+ };
263
+ const imagesFor = (workflowId, body) => {
264
+ if (gen.images)
265
+ return typeof gen.images === 'function' ? gen.images(body) : gen.images;
266
+ if (gen.image)
267
+ return [typeof gen.image === 'function' ? gen.image(body) : gen.image];
268
+ return [
269
+ `https://placehold.co/512x512/1971c2/ffffff/png?text=${encodeURIComponent(workflowId.slice(-4))}`,
270
+ ];
271
+ };
142
272
  let installed = false;
143
273
  let teardown = () => { };
144
274
  function install() {
@@ -150,11 +280,19 @@ export function createMockHost(options = {}) {
150
280
  let consentGranted = !!options.consentGranted;
151
281
  let tokenSerial = 0;
152
282
  let submitCount = 0;
283
+ // body + cost remembered per workflow so the succeeded snapshot can echo them.
153
284
  const workflows = new Map();
154
285
  const timers = new Set();
155
286
  const dispatchToBlock = (data) => {
156
287
  win.dispatchEvent(new MessageEvent('message', { data, origin: parentOrigin }));
157
288
  };
289
+ const after = (ms, fn) => {
290
+ const t = setTimeout(() => {
291
+ timers.delete(t);
292
+ fn();
293
+ }, ms);
294
+ timers.add(t);
295
+ };
158
296
  const nextToken = () => {
159
297
  tokenSerial += 1;
160
298
  return {
@@ -164,14 +302,17 @@ export function createMockHost(options = {}) {
164
302
  ...(consentGranted ? { buzzBudget } : {}),
165
303
  };
166
304
  };
167
- const succeededSnapshot = (workflowId) => ({
168
- workflowId,
169
- status: 'succeeded',
170
- cost: { total: cost },
171
- imageUrls: [
172
- `https://placehold.co/512x512/1971c2/ffffff/png?text=${encodeURIComponent(workflowId.slice(-4))}`,
173
- ],
174
- });
305
+ const succeededSnapshot = (workflowId) => {
306
+ const wf = workflows.get(workflowId);
307
+ const cost = wf?.cost ?? legacyCost;
308
+ const body = wf?.body ?? {};
309
+ return {
310
+ workflowId,
311
+ status: 'succeeded',
312
+ cost: { total: cost },
313
+ imageUrls: imagesFor(workflowId, body),
314
+ };
315
+ };
175
316
  const parentMock = {
176
317
  postMessage: (msg) => {
177
318
  if (typeof msg !== 'object' ||
@@ -194,30 +335,56 @@ export function createMockHost(options = {}) {
194
335
  // host-initiated TOKEN_REFRESH carrying it (the App's auto-resume
195
336
  // depends on seeing the new scope on its token).
196
337
  consentGranted = true;
197
- const t = setTimeout(() => {
338
+ after(0, () => {
198
339
  dispatchToBlock({ type: 'TOKEN_REFRESH', payload: { token: nextToken() } });
199
- }, 0);
200
- timers.add(t);
340
+ });
201
341
  return;
202
342
  }
203
343
  case 'REQUEST_SIGN_IN':
204
344
  // The real host opens its login UI; nothing to reply.
205
345
  return;
206
- case 'ESTIMATE_WORKFLOW':
346
+ case 'ESTIMATE_WORKFLOW': {
347
+ const body = typed.payload?.body ?? {};
207
348
  dispatchToBlock({
208
349
  type: 'ESTIMATE_RESULT',
209
350
  payload: {
210
351
  requestId,
211
- snapshot: { workflowId: 'wf_estimate', status: 'pending', cost: { total: cost } },
352
+ snapshot: {
353
+ workflowId: 'wf_estimate',
354
+ status: 'pending',
355
+ cost: { total: costFor(body) },
356
+ },
212
357
  },
213
358
  });
214
359
  return;
360
+ }
215
361
  case 'SUBMIT_WORKFLOW': {
216
362
  submitCount += 1;
217
- const failThis = failMode === 'all' ||
363
+ const body = typed.payload?.body ?? {};
364
+ const cost = costFor(body);
365
+ // Insufficient-Buzz path: legacy failMode, the buzz scenario's
366
+ // force flag, OR a simulated balance that can't cover this gen.
367
+ const balanceSimulated = typeof buzz.balance === 'number';
368
+ const insufficient = failMode === 'all' ||
218
369
  failMode === 'insufficient' ||
219
- (failMode === 'some' && submitCount % 3 === 0);
220
- if (failThis) {
370
+ buzz.insufficient === true ||
371
+ (balanceSimulated && buzz.balance < cost);
372
+ // Generic generation failure: failNext countdown, failRate dice, or
373
+ // the legacy 'some' (~1 in 3) mode.
374
+ let genericFail = false;
375
+ if (!insufficient) {
376
+ if ((gen.failNext ?? 0) > 0) {
377
+ gen.failNext = gen.failNext - 1;
378
+ genericFail = true;
379
+ }
380
+ else if (typeof gen.failRate === 'number' && Math.random() < gen.failRate) {
381
+ genericFail = true;
382
+ }
383
+ else if (failMode === 'some' && submitCount % 3 === 0) {
384
+ genericFail = true;
385
+ }
386
+ }
387
+ if (insufficient) {
221
388
  dispatchToBlock({
222
389
  type: 'WORKFLOW_SUBMITTED',
223
390
  payload: {
@@ -225,14 +392,31 @@ export function createMockHost(options = {}) {
225
392
  snapshot: {
226
393
  workflowId: `wf_fail_${submitCount}`,
227
394
  status: 'failed',
228
- error: 'Insufficient Buzz to run this generation.',
395
+ error: INSUFFICIENT_BUZZ_ERROR,
229
396
  },
230
397
  },
231
398
  });
232
399
  return;
233
400
  }
401
+ if (genericFail) {
402
+ dispatchToBlock({
403
+ type: 'WORKFLOW_SUBMITTED',
404
+ payload: {
405
+ requestId,
406
+ snapshot: {
407
+ workflowId: `wf_fail_${submitCount}`,
408
+ status: 'failed',
409
+ error: GENERIC_GEN_ERROR,
410
+ },
411
+ },
412
+ });
413
+ return;
414
+ }
415
+ // Success path: debit the simulated balance + remember body/cost.
416
+ if (balanceSimulated)
417
+ buzz.balance = buzz.balance - cost;
234
418
  const workflowId = `wf_${submitCount}_${Date.now()}`;
235
- workflows.set(workflowId, { polls: 0 });
419
+ workflows.set(workflowId, { polls: 0, cost, body });
236
420
  dispatchToBlock({
237
421
  type: 'WORKFLOW_SUBMITTED',
238
422
  payload: { requestId, snapshot: { workflowId, status: 'pending' } },
@@ -245,10 +429,28 @@ export function createMockHost(options = {}) {
245
429
  const polls = (wf?.polls ?? 0) + 1;
246
430
  if (wf)
247
431
  wf.polls = polls;
248
- const snapshot = polls >= pollsUntilDone
249
- ? succeededSnapshot(workflowId)
250
- : { workflowId, status: 'processing' };
251
- dispatchToBlock({ type: 'WORKFLOW_STATUS', payload: { requestId, snapshot } });
432
+ if (polls >= pollsUntilDone) {
433
+ // Apply synthetic latency on the terminal (succeeded) poll only.
434
+ const delay = latencyFor();
435
+ if (delay > 0) {
436
+ after(delay, () => dispatchToBlock({
437
+ type: 'WORKFLOW_STATUS',
438
+ payload: { requestId, snapshot: succeededSnapshot(workflowId) },
439
+ }));
440
+ }
441
+ else {
442
+ dispatchToBlock({
443
+ type: 'WORKFLOW_STATUS',
444
+ payload: { requestId, snapshot: succeededSnapshot(workflowId) },
445
+ });
446
+ }
447
+ }
448
+ else {
449
+ dispatchToBlock({
450
+ type: 'WORKFLOW_STATUS',
451
+ payload: { requestId, snapshot: { workflowId, status: 'processing' } },
452
+ });
453
+ }
252
454
  return;
253
455
  }
254
456
  case 'CANCEL_WORKFLOW': {
@@ -260,12 +462,18 @@ export function createMockHost(options = {}) {
260
462
  });
261
463
  return;
262
464
  }
263
- case 'OPEN_BUZZ_PURCHASE':
465
+ case 'OPEN_BUZZ_PURCHASE': {
466
+ // Refill the simulated balance so the post-top-up retry succeeds.
467
+ const newBalance = typeof buzz.balance === 'number' ? buzz.balance + 1000 : 1000;
468
+ if (typeof buzz.balance === 'number')
469
+ buzz.balance = newBalance;
470
+ buzz.insufficient = false;
264
471
  dispatchToBlock({
265
472
  type: 'BUZZ_PURCHASE_RESULT',
266
- payload: { requestId, purchased: true, newBalance: 1000 },
473
+ payload: { requestId, purchased: true, newBalance },
267
474
  });
268
475
  return;
476
+ }
269
477
  case 'OPEN_CHECKPOINT_PICKER': {
270
478
  const selected = cannedPicks.Checkpoint;
271
479
  dispatchToBlock({
@@ -296,6 +504,111 @@ export function createMockHost(options = {}) {
296
504
  });
297
505
  return;
298
506
  }
507
+ // ---- App Blocks KV datastore (W4) — in-memory backend ----
508
+ case 'APP_STORAGE_GET': {
509
+ const key = typed.payload?.key ?? '';
510
+ const row = store.get(key);
511
+ dispatchToBlock({
512
+ type: 'APP_STORAGE_GET_RESULT',
513
+ payload: { requestId, value: row ? row.value : null },
514
+ });
515
+ return;
516
+ }
517
+ case 'APP_STORAGE_SET': {
518
+ const key = typed.payload?.key ?? '';
519
+ const value = typed.payload?.value;
520
+ if (storageFailNext > 0) {
521
+ storageFailNext -= 1;
522
+ dispatchToBlock({
523
+ type: 'APP_STORAGE_SET_RESULT',
524
+ payload: { requestId, ok: false, error: 'STORAGE_UNAVAILABLE' },
525
+ });
526
+ return;
527
+ }
528
+ const sizeBytes = jsonByteSize(value);
529
+ if (sizeBytes > valueCapBytes) {
530
+ dispatchToBlock({
531
+ type: 'APP_STORAGE_SET_RESULT',
532
+ payload: { requestId, ok: false, error: 'PAYLOAD_TOO_LARGE' },
533
+ });
534
+ return;
535
+ }
536
+ // Quota check: projected usage after this upsert.
537
+ const existing = store.get(key);
538
+ const existingBytes = existing ? jsonByteSize(existing.value) + key.length : 0;
539
+ const projected = usedBytes() - existingBytes + sizeBytes + key.length;
540
+ if (projected > quotaBytes) {
541
+ dispatchToBlock({
542
+ type: 'APP_STORAGE_SET_RESULT',
543
+ payload: { requestId, ok: false, error: 'PAYLOAD_TOO_LARGE' },
544
+ });
545
+ return;
546
+ }
547
+ store.set(key, { value, updatedAt: new Date().toISOString() });
548
+ dispatchToBlock({
549
+ type: 'APP_STORAGE_SET_RESULT',
550
+ payload: { requestId, ok: true, sizeBytes },
551
+ });
552
+ return;
553
+ }
554
+ case 'APP_STORAGE_DELETE': {
555
+ const key = typed.payload?.key ?? '';
556
+ if (storageFailNext > 0) {
557
+ storageFailNext -= 1;
558
+ dispatchToBlock({
559
+ type: 'APP_STORAGE_DELETE_RESULT',
560
+ payload: { requestId, ok: false, deleted: false, error: 'STORAGE_UNAVAILABLE' },
561
+ });
562
+ return;
563
+ }
564
+ const had = store.delete(key);
565
+ dispatchToBlock({
566
+ type: 'APP_STORAGE_DELETE_RESULT',
567
+ payload: { requestId, ok: true, deleted: had },
568
+ });
569
+ return;
570
+ }
571
+ case 'APP_STORAGE_LIST': {
572
+ const prefix = typed.payload?.prefix ?? '';
573
+ const limit = typed.payload?.limit ?? 100;
574
+ const cursor = typed.payload?.cursor;
575
+ // Cursor = base64 of the last returned key (matches the hook's
576
+ // documented `nextCursor` contract).
577
+ const afterKey = cursor ? safeAtob(cursor) : undefined;
578
+ const allKeys = [...store.entries()]
579
+ .filter(([k]) => k.startsWith(prefix))
580
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
581
+ const startIdx = afterKey
582
+ ? allKeys.findIndex(([k]) => k > afterKey)
583
+ : 0;
584
+ const slice = (startIdx < 0 ? [] : allKeys.slice(startIdx)).slice(0, limit);
585
+ const keys = slice.map(([key, row]) => ({ key, updatedAt: row.updatedAt }));
586
+ const last = slice[slice.length - 1]?.[0];
587
+ const hasMore = last !== undefined &&
588
+ allKeys.findIndex(([k]) => k === last) < allKeys.length - 1;
589
+ dispatchToBlock({
590
+ type: 'APP_STORAGE_LIST_RESULT',
591
+ payload: {
592
+ requestId,
593
+ keys,
594
+ ...(hasMore && last ? { nextCursor: safeBtoa(last) } : {}),
595
+ },
596
+ });
597
+ return;
598
+ }
599
+ case 'APP_STORAGE_QUOTA': {
600
+ dispatchToBlock({
601
+ type: 'APP_STORAGE_QUOTA_RESULT',
602
+ payload: {
603
+ requestId,
604
+ usedBytes: usedBytes(),
605
+ rowCount: store.size,
606
+ limitBytes: quotaBytes,
607
+ limitRows,
608
+ },
609
+ });
610
+ return;
611
+ }
299
612
  default:
300
613
  return;
301
614
  }
@@ -337,8 +650,7 @@ export function createMockHost(options = {}) {
337
650
  ...(options.domain !== undefined ? { domain: options.domain } : {}),
338
651
  ...(resolvedCeiling !== undefined ? { maxBrowsingLevel: resolvedCeiling } : {}),
339
652
  };
340
- const initTimer = setTimeout(() => dispatchToBlock({ type: 'BLOCK_INIT', payload: initPayload }), 0);
341
- timers.add(initTimer);
653
+ after(0, () => dispatchToBlock({ type: 'BLOCK_INIT', payload: initPayload }));
342
654
  let torn = false;
343
655
  teardown = () => {
344
656
  if (torn)
@@ -356,6 +668,43 @@ export function createMockHost(options = {}) {
356
668
  };
357
669
  return teardown;
358
670
  }
359
- return { install };
671
+ function setScenario(patch) {
672
+ if (patch.failMode !== undefined)
673
+ failMode = patch.failMode;
674
+ if (patch.pollsUntilDone !== undefined)
675
+ pollsUntilDone = patch.pollsUntilDone;
676
+ if (patch.cost !== undefined)
677
+ legacyCost = patch.cost;
678
+ if (patch.cannedPicks !== undefined)
679
+ cannedPicks = patch.cannedPicks;
680
+ if (patch.generation !== undefined)
681
+ gen = { ...gen, ...patch.generation };
682
+ if (patch.buzz !== undefined)
683
+ buzz = { ...buzz, ...patch.buzz };
684
+ if (patch.storage !== undefined) {
685
+ // Only the live-tunable storage knob (`failNext`) is applied mid-session;
686
+ // seed/quota are install-time (re-install to change the backing store).
687
+ if (patch.storage.failNext !== undefined)
688
+ storageFailNext = patch.storage.failNext;
689
+ }
690
+ }
691
+ const buzzHandle = {
692
+ getBalance: () => buzz.balance,
693
+ setBalance: (n) => {
694
+ buzz.balance = n;
695
+ },
696
+ };
697
+ return { install, setScenario, buzz: buzzHandle };
698
+ }
699
+ /** btoa/atob that work in both browser + node (happy-dom + vitest). */
700
+ function safeBtoa(s) {
701
+ if (typeof btoa === 'function')
702
+ return btoa(s);
703
+ return Buffer.from(s, 'utf-8').toString('base64');
704
+ }
705
+ function safeAtob(s) {
706
+ if (typeof atob === 'function')
707
+ return atob(s);
708
+ return Buffer.from(s, 'base64').toString('utf-8');
360
709
  }
361
710
  //# sourceMappingURL=mockHost.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mockHost.js","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mockHost.js","sourceRoot":"","sources":["../../src/internal/mockHost.ts"],"names":[],"mappings":"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"}
package/dist/testing.d.ts CHANGED
@@ -16,7 +16,7 @@ import { type ReactNode } from 'react';
16
16
  import { __resetTransport } from './internal/singleton.js';
17
17
  import { type MockHostOptions } from './internal/mockHost.js';
18
18
  export { __resetTransport as resetTransport };
19
- export { createMockHost, readMockHostUrlOptions, type MockHost, type MockHostOptions, type MockHostFailMode, type CannedPick, } from './internal/mockHost.js';
19
+ export { createMockHost, readMockHostUrlOptions, type MockHost, type MockHostOptions, type MockHostFailMode, type MockHostScenarioPatch, type MockGenerationScenario, type MockBuzzScenario, type MockBuzzHandle, type MockStorageScenario, type CostSpec, type ImageSpec, type CannedPick, } from './internal/mockHost.js';
20
20
  /**
21
21
  * Builds a `MessageEvent` that mimics a parent-frame postMessage so tests can
22
22
  * exercise `IframeTransport.handleMessage` without a real cross-frame setup.
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAE7E;AAOD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,eAAsB,EACtB,OAAc,EACd,GAAG,OAAO,EACX,EAAE,YAAY,2CAiDd;AAED,+FAA+F;AAC/F,eAAO,MAAM,gBAAgB,gBAAU,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAE7E;AAOD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,eAAsB,EACtB,OAAc,EACd,GAAG,OAAO,EACX,EAAE,YAAY,2CAiDd;AAED,+FAA+F;AAC/F,eAAO,MAAM,gBAAgB,gBAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civitai/blocks-react",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "React hooks and iframe transport for Civitai App Blocks. Pairs with @civitai/app-sdk/blocks.",
5
5
  "license": "MIT",
6
6
  "type": "module",