mockpit 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +69 -48
  2. package/bin/demoData.js +3 -3
  3. package/bin/mockpit.js +426 -51
  4. package/dist/mcp/server.js +45 -7
  5. package/dist/server/apiViews.d.ts +407 -21
  6. package/dist/server/apiViews.js +110 -11
  7. package/dist/server/app.d.ts +5 -1
  8. package/dist/server/app.js +1454 -192
  9. package/dist/server/codeWorker.js +2 -1
  10. package/dist/server/decisions.d.ts +23 -0
  11. package/dist/server/decisions.js +100 -0
  12. package/dist/server/designGuide.d.ts +6 -2
  13. package/dist/server/designGuide.js +96 -27
  14. package/dist/server/embeds.d.ts +26 -0
  15. package/dist/server/embeds.js +144 -0
  16. package/dist/server/eventLog.js +2 -1
  17. package/dist/server/feedbackBatch.d.ts +15 -4
  18. package/dist/server/feedbackBatch.js +31 -7
  19. package/dist/server/fills.d.ts +41 -0
  20. package/dist/server/fills.js +328 -0
  21. package/dist/server/guidance.d.ts +23 -0
  22. package/dist/server/guidance.js +71 -0
  23. package/dist/server/index.js +25 -2
  24. package/dist/server/knobs.d.ts +6 -2
  25. package/dist/server/knobs.js +11 -1
  26. package/dist/server/mcpHttp.d.ts +6 -0
  27. package/dist/server/mcpHttp.js +35 -0
  28. package/dist/server/mcpSpec.d.ts +14 -13
  29. package/dist/server/mcpSpec.js +133 -18
  30. package/dist/server/postSurfaces.js +6 -12
  31. package/dist/server/richRender.js +3 -1
  32. package/dist/server/run.js +10 -1
  33. package/dist/server/runApi.d.ts +3 -3
  34. package/dist/server/runApi.js +18 -13
  35. package/dist/server/sqlStore.d.ts +97 -5
  36. package/dist/server/sqlStore.js +367 -27
  37. package/dist/server/surfacePage.d.ts +6 -2
  38. package/dist/server/surfacePage.js +142 -10
  39. package/dist/server/themes.d.ts +2 -0
  40. package/dist/server/themes.js +23 -3
  41. package/dist/server/types.d.ts +107 -16
  42. package/dist/server/types.js +73 -10
  43. package/dist/server/viewerRequest.d.ts +2 -0
  44. package/dist/server/viewerRequest.js +14 -0
  45. package/extensions/mockpit.js +179 -16
  46. package/guide/packs/design-craft.md +35 -0
  47. package/guide/topics/asks.md +82 -31
  48. package/guide/topics/feedback.md +151 -43
  49. package/guide/topics/html.md +8 -10
  50. package/guide/topics/http.md +8 -4
  51. package/guide/topics/knobs.md +4 -3
  52. package/guide/topics/scripts.md +2 -2
  53. package/guide/topics/surfaces.md +45 -11
  54. package/package.json +3 -15
  55. package/skills/launch-video/SKILL.md +2 -2
  56. package/skills/mockpit/SKILL.md +23 -7
  57. package/viewer/dist/index.html +9 -8
  58. package/dist/server/slots.d.ts +0 -14
  59. package/dist/server/slots.js +0 -71
@@ -144,6 +144,26 @@ async function ensureSession(title) {
144
144
  sessionId = session.id;
145
145
  return sessionId;
146
146
  }
147
+ // A poster may name an image file: it travels as an upload, never as bytes in
148
+ // the model's context. Anything else goes through as the asset id it is.
149
+ async function posterId(value, session) {
150
+ if (typeof value !== "string")
151
+ return value;
152
+ try {
153
+ if (!statSync(value).isFile())
154
+ return value;
155
+ }
156
+ catch {
157
+ return value;
158
+ }
159
+ const asset = await post("/api/assets", {
160
+ data: readFileSync(value, "base64"),
161
+ contentType: contentTypeForPath(value),
162
+ filename: value.split(/[\\/]/).pop(),
163
+ session,
164
+ });
165
+ return asset.id;
166
+ }
147
167
  // Every tool is a pass-through to the REST route the CLI uses, mapped the way
148
168
  // server/mcpHttp.ts maps HTTP MCP: same request, same response, so the tiers
149
169
  // cannot drift. Only the session (one per conversation), the project (this
@@ -156,6 +176,8 @@ const handlers = {
156
176
  ...args,
157
177
  html,
158
178
  parts: readPartFiles(args.parts),
179
+ fills: readPartFiles(args.fills),
180
+ poster: await posterId(args.poster, session),
159
181
  session,
160
182
  agent: AGENT,
161
183
  project: resolveProject(args.project),
@@ -169,13 +191,15 @@ const handlers = {
169
191
  project: resolveProject(args.project),
170
192
  });
171
193
  },
172
- read: (args) => json(args.mock === undefined
173
- ? `/api/mocks${query({ project: resolveProject(args.project) })}`
174
- : `/api/mocks/${enc(args.mock)}${query({
175
- project: resolveProject(args.project),
176
- body: args.body,
177
- history: args.history,
178
- })}`),
194
+ read: (args) => json(args.mock === undefined && args.tree === true
195
+ ? `/api/projects/${enc(resolveProject(args.project))}/tree`
196
+ : args.mock === undefined
197
+ ? `/api/mocks${query({ project: resolveProject(args.project) })}`
198
+ : `/api/mocks/${enc(args.mock)}${query({
199
+ project: resolveProject(args.project),
200
+ body: args.body,
201
+ history: args.history,
202
+ })}`),
179
203
  // Never waits: the server reads from the session's cursor, shared with
180
204
  // piggyback and `mockpit watch`, so each Send is delivered exactly once.
181
205
  async feedback(args) {
@@ -192,6 +216,20 @@ const handlers = {
192
216
  message: args.message,
193
217
  });
194
218
  },
219
+ async edit(args) {
220
+ const session = await ensureSession();
221
+ const project = resolveProject(args.project);
222
+ if (args.rename !== undefined || args.areaOrder !== undefined) {
223
+ if (args.mock !== undefined) {
224
+ throw new Error('"rename" and "areaOrder" edit the project; edit the mock without them');
225
+ }
226
+ return post(`/api/projects/${enc(project)}`, { name: args.rename, areaOrder: args.areaOrder, session }, "PATCH");
227
+ }
228
+ if (typeof args.mock !== "string" || !args.mock) {
229
+ throw new Error('provide "mock", or "rename" / "areaOrder" to edit the project');
230
+ }
231
+ return post(`/api/mocks/${enc(args.mock)}`, { ...args, project, session }, "PATCH");
232
+ },
195
233
  export: (args) => json(`/api/mocks/${enc(args.mock)}/export${query({
196
234
  project: resolveProject(args.project),
197
235
  state: args.state,
@@ -1,5 +1,5 @@
1
1
  import { type PartInfo } from "./parts.ts";
2
- import { type Mock, type Post, type PostVersion, type Session, type Surface } from "./types.ts";
2
+ import { type Embed, type KnobValue, type Mock, type Post, type PostVersion, type Session, type Surface } from "./types.ts";
3
3
  export declare const surfaceRef: (surface: Pick<Surface, "id" | "kind">, index: number) => {
4
4
  id: string | undefined;
5
5
  kind: "html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code";
@@ -10,6 +10,7 @@ export declare const fullSurfaceView: (surface: Surface, index: number) => {
10
10
  kind: "html";
11
11
  html: string;
12
12
  kits?: string[];
13
+ poster?: string;
13
14
  id?: string;
14
15
  } | {
15
16
  index: number;
@@ -56,11 +57,12 @@ export declare const fullSurfaceView: (surface: Surface, index: number) => {
56
57
  lineStart?: number;
57
58
  id?: string;
58
59
  };
59
- export declare const hydratedSurfaceView: (surface: Surface, index: number) => Record<string, unknown> | {
60
+ export declare const hydratedSurfaceView: (surface: Surface, index: number) => {
60
61
  index: number;
61
62
  kind: "html";
62
63
  html: string;
63
64
  kits?: string[];
65
+ poster?: string;
64
66
  id?: string;
65
67
  } | {
66
68
  index: number;
@@ -106,8 +108,18 @@ export declare const hydratedSurfaceView: (surface: Surface, index: number) => R
106
108
  title?: string;
107
109
  lineStart?: number;
108
110
  id?: string;
109
- };
111
+ } | Record<string, unknown>;
110
112
  export declare const historyMetaView: (version: PostVersion) => {
113
+ poster: string;
114
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
115
+ author?: string | undefined;
116
+ prompt?: string | undefined;
117
+ from?: number | undefined;
118
+ version: number;
119
+ title: string;
120
+ at: string;
121
+ } | {
122
+ poster?: undefined;
111
123
  surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
112
124
  author?: string | undefined;
113
125
  prompt?: string | undefined;
@@ -119,9 +131,18 @@ export declare const historyMetaView: (version: PostVersion) => {
119
131
  export interface VariantViewOptions {
120
132
  body?: boolean;
121
133
  history?: boolean;
134
+ embeds?: Map<string, EmbedView>;
135
+ }
136
+ export interface EmbedView {
137
+ key: string;
138
+ list: (Embed & {
139
+ latest: number;
140
+ versions: number[];
141
+ })[];
122
142
  }
123
143
  export declare const variantView: (post: Post, opts?: VariantViewOptions) => {
124
- history?: {
144
+ history?: ({
145
+ poster: string;
125
146
  surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
126
147
  author?: string | undefined;
127
148
  prompt?: string | undefined;
@@ -129,13 +150,43 @@ export declare const variantView: (post: Post, opts?: VariantViewOptions) => {
129
150
  version: number;
130
151
  title: string;
131
152
  at: string;
132
- }[] | undefined;
153
+ } | {
154
+ poster?: undefined;
155
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
156
+ author?: string | undefined;
157
+ prompt?: string | undefined;
158
+ from?: number | undefined;
159
+ version: number;
160
+ title: string;
161
+ at: string;
162
+ } | {
163
+ hidden: true;
164
+ poster: string;
165
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
166
+ author?: string | undefined;
167
+ prompt?: string | undefined;
168
+ from?: number | undefined;
169
+ version: number;
170
+ title: string;
171
+ at: string;
172
+ } | {
173
+ hidden: true;
174
+ poster?: undefined;
175
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
176
+ author?: string | undefined;
177
+ prompt?: string | undefined;
178
+ from?: number | undefined;
179
+ version: number;
180
+ title: string;
181
+ at: string;
182
+ })[] | undefined;
133
183
  parts: string[];
134
- surfaces: (Record<string, unknown> | {
184
+ surfaces: ({
135
185
  index: number;
136
186
  kind: "html";
137
187
  html: string;
138
188
  kits?: string[];
189
+ poster?: string;
139
190
  id?: string;
140
191
  } | {
141
192
  index: number;
@@ -181,64 +232,285 @@ export declare const variantView: (post: Post, opts?: VariantViewOptions) => {
181
232
  title?: string;
182
233
  lineStart?: number;
183
234
  id?: string;
184
- })[];
185
- slots?: import("./types.ts").Slot[] | undefined;
186
- knobs?: import("./types.ts").Knobs | undefined;
235
+ } | Record<string, unknown>)[];
236
+ inUseVersion?: number | undefined;
237
+ starred?: boolean | undefined;
238
+ forkedFrom?: import("./types.ts").ForkRef | undefined;
239
+ publishedWith?: Embed[] | undefined;
240
+ embeds?: (Embed & {
241
+ latest: number;
242
+ versions: number[];
243
+ })[] | undefined;
244
+ embedsKey?: string | undefined;
245
+ note?: string | undefined;
246
+ fills?: import("./fills.ts").SlotInfo[] | undefined;
247
+ knobs?: {
248
+ [x: string]: import("./types.ts").KnobConfig;
249
+ } | undefined;
187
250
  author?: string | undefined;
188
251
  prompt?: string | undefined;
189
252
  from?: number | undefined;
190
253
  postId: string;
191
254
  state: string | null;
192
255
  variant: string;
193
- status: import("./types.ts").PostStatus;
256
+ status: import("./types.ts").VariantStatus;
194
257
  version: number;
195
258
  title: string;
196
259
  sessionId: string;
197
260
  createdAt: string;
198
261
  updatedAt: string;
199
262
  };
263
+ export declare const inUseByState: (mock: Mock, posts: Post[]) => {
264
+ state: string | null;
265
+ variant: string;
266
+ version: number;
267
+ }[];
200
268
  export interface StateParts {
201
269
  state: string | null;
202
270
  parts: PartInfo[];
203
271
  }
204
272
  export declare function partsByState(mock: Mock, posts: Post[]): StateParts[];
273
+ export declare const placeOf: (mock: Pick<Mock, "area" | "source">) => {
274
+ area?: string;
275
+ source?: string;
276
+ };
205
277
  export declare const mockSummaryView: (mock: Mock, posts: Post[]) => {
206
278
  sessionId: string | null;
279
+ closedAt: string | null;
207
280
  createdAt: string;
208
281
  updatedAt: string;
209
282
  thumbnail: {
283
+ poster?: string | undefined;
210
284
  postId: string;
211
285
  surface: number;
212
286
  version: number;
213
287
  } | null;
214
288
  drafted?: number | undefined;
289
+ stateCount: number;
290
+ variants: number;
291
+ open: number;
292
+ situations: Record<string, string[]>;
293
+ states: string[];
294
+ area?: string;
295
+ source?: string;
215
296
  id: string;
216
297
  project: string;
217
298
  slug: string;
218
299
  title: string;
219
300
  kind: import("./types.ts").MockKind;
220
- states: string[];
301
+ } | {
302
+ sessionId: string | null;
303
+ closedAt: string | null;
304
+ createdAt: string;
305
+ updatedAt: string;
306
+ thumbnail: {
307
+ poster?: string | undefined;
308
+ postId: string;
309
+ surface: number;
310
+ version: number;
311
+ } | null;
312
+ drafted?: number | undefined;
221
313
  stateCount: number;
222
314
  variants: number;
223
315
  open: number;
316
+ situations?: undefined;
317
+ states: string[];
318
+ area?: string;
319
+ source?: string;
320
+ id: string;
321
+ project: string;
322
+ slug: string;
323
+ title: string;
324
+ kind: import("./types.ts").MockKind;
224
325
  };
225
326
  export declare const mockDetailView: (mock: Mock, posts: Post[], opts?: VariantViewOptions & {
226
- tuned?: Record<string, unknown>;
327
+ settled?: Record<string, KnobValue>;
227
328
  }) => {
329
+ asks: import("./types.ts").Ask[];
330
+ open: number;
331
+ knobs: import("./types.ts").Knobs;
332
+ widths: number[];
333
+ sessionId: string | null;
334
+ closedAt: string | null;
335
+ createdAt: string;
336
+ updatedAt: string;
337
+ variants: {
338
+ history?: ({
339
+ poster: string;
340
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
341
+ author?: string | undefined;
342
+ prompt?: string | undefined;
343
+ from?: number | undefined;
344
+ version: number;
345
+ title: string;
346
+ at: string;
347
+ } | {
348
+ poster?: undefined;
349
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
350
+ author?: string | undefined;
351
+ prompt?: string | undefined;
352
+ from?: number | undefined;
353
+ version: number;
354
+ title: string;
355
+ at: string;
356
+ } | {
357
+ hidden: true;
358
+ poster: string;
359
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
360
+ author?: string | undefined;
361
+ prompt?: string | undefined;
362
+ from?: number | undefined;
363
+ version: number;
364
+ title: string;
365
+ at: string;
366
+ } | {
367
+ hidden: true;
368
+ poster?: undefined;
369
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
370
+ author?: string | undefined;
371
+ prompt?: string | undefined;
372
+ from?: number | undefined;
373
+ version: number;
374
+ title: string;
375
+ at: string;
376
+ })[] | undefined;
377
+ parts: string[];
378
+ surfaces: ({
379
+ index: number;
380
+ kind: "html";
381
+ html: string;
382
+ kits?: string[];
383
+ poster?: string;
384
+ id?: string;
385
+ } | {
386
+ index: number;
387
+ kind: "diff";
388
+ patch?: string;
389
+ files?: import("./types.ts").DiffFile[];
390
+ layout?: "unified" | "split";
391
+ id?: string;
392
+ } | {
393
+ index: number;
394
+ kind: "image";
395
+ assetId: string;
396
+ alt?: string;
397
+ caption?: string;
398
+ id?: string;
399
+ } | {
400
+ index: number;
401
+ kind: "markdown";
402
+ markdown: string;
403
+ id?: string;
404
+ } | {
405
+ index: number;
406
+ kind: "terminal";
407
+ text: string;
408
+ cols?: number;
409
+ title?: string;
410
+ id?: string;
411
+ } | {
412
+ index: number;
413
+ kind: "mermaid";
414
+ mermaid: string;
415
+ id?: string;
416
+ } | {
417
+ index: number;
418
+ kind: "json";
419
+ data: unknown;
420
+ id?: string;
421
+ } | {
422
+ index: number;
423
+ kind: "code";
424
+ code: string;
425
+ language?: string;
426
+ title?: string;
427
+ lineStart?: number;
428
+ id?: string;
429
+ } | Record<string, unknown>)[];
430
+ inUseVersion?: number | undefined;
431
+ starred?: boolean | undefined;
432
+ forkedFrom?: import("./types.ts").ForkRef | undefined;
433
+ publishedWith?: Embed[] | undefined;
434
+ embeds?: (Embed & {
435
+ latest: number;
436
+ versions: number[];
437
+ })[] | undefined;
438
+ embedsKey?: string | undefined;
439
+ note?: string | undefined;
440
+ fills?: import("./fills.ts").SlotInfo[] | undefined;
441
+ knobs?: {
442
+ [x: string]: import("./types.ts").KnobConfig;
443
+ } | undefined;
444
+ author?: string | undefined;
445
+ prompt?: string | undefined;
446
+ from?: number | undefined;
447
+ postId: string;
448
+ state: string | null;
449
+ variant: string;
450
+ status: import("./types.ts").VariantStatus;
451
+ version: number;
452
+ title: string;
453
+ sessionId: string;
454
+ createdAt: string;
455
+ updatedAt: string;
456
+ }[];
457
+ inUse: {
458
+ state: string | null;
459
+ variant: string;
460
+ version: number;
461
+ }[];
462
+ parts: StateParts[];
463
+ settled: Record<string, KnobValue>;
464
+ situations: Record<string, string[]>;
465
+ states: string[];
466
+ area?: string;
467
+ source?: string;
228
468
  id: string;
229
469
  project: string;
230
470
  slug: string;
231
471
  title: string;
232
472
  kind: import("./types.ts").MockKind;
233
- states: string[];
473
+ } | {
234
474
  asks: import("./types.ts").Ask[];
235
475
  open: number;
236
476
  knobs: import("./types.ts").Knobs;
477
+ widths: number[];
237
478
  sessionId: string | null;
479
+ closedAt: string | null;
238
480
  createdAt: string;
239
481
  updatedAt: string;
240
482
  variants: {
241
- history?: {
483
+ history?: ({
484
+ poster: string;
485
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
486
+ author?: string | undefined;
487
+ prompt?: string | undefined;
488
+ from?: number | undefined;
489
+ version: number;
490
+ title: string;
491
+ at: string;
492
+ } | {
493
+ poster?: undefined;
494
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
495
+ author?: string | undefined;
496
+ prompt?: string | undefined;
497
+ from?: number | undefined;
498
+ version: number;
499
+ title: string;
500
+ at: string;
501
+ } | {
502
+ hidden: true;
503
+ poster: string;
504
+ surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
505
+ author?: string | undefined;
506
+ prompt?: string | undefined;
507
+ from?: number | undefined;
508
+ version: number;
509
+ title: string;
510
+ at: string;
511
+ } | {
512
+ hidden: true;
513
+ poster?: undefined;
242
514
  surfaceKinds: ("html" | "diff" | "image" | "markdown" | "terminal" | "mermaid" | "json" | "code")[];
243
515
  author?: string | undefined;
244
516
  prompt?: string | undefined;
@@ -246,13 +518,14 @@ export declare const mockDetailView: (mock: Mock, posts: Post[], opts?: VariantV
246
518
  version: number;
247
519
  title: string;
248
520
  at: string;
249
- }[] | undefined;
521
+ })[] | undefined;
250
522
  parts: string[];
251
- surfaces: (Record<string, unknown> | {
523
+ surfaces: ({
252
524
  index: number;
253
525
  kind: "html";
254
526
  html: string;
255
527
  kits?: string[];
528
+ poster?: string;
256
529
  id?: string;
257
530
  } | {
258
531
  index: number;
@@ -298,24 +571,50 @@ export declare const mockDetailView: (mock: Mock, posts: Post[], opts?: VariantV
298
571
  title?: string;
299
572
  lineStart?: number;
300
573
  id?: string;
301
- })[];
302
- slots?: import("./types.ts").Slot[] | undefined;
303
- knobs?: import("./types.ts").Knobs | undefined;
574
+ } | Record<string, unknown>)[];
575
+ inUseVersion?: number | undefined;
576
+ starred?: boolean | undefined;
577
+ forkedFrom?: import("./types.ts").ForkRef | undefined;
578
+ publishedWith?: Embed[] | undefined;
579
+ embeds?: (Embed & {
580
+ latest: number;
581
+ versions: number[];
582
+ })[] | undefined;
583
+ embedsKey?: string | undefined;
584
+ note?: string | undefined;
585
+ fills?: import("./fills.ts").SlotInfo[] | undefined;
586
+ knobs?: {
587
+ [x: string]: import("./types.ts").KnobConfig;
588
+ } | undefined;
304
589
  author?: string | undefined;
305
590
  prompt?: string | undefined;
306
591
  from?: number | undefined;
307
592
  postId: string;
308
593
  state: string | null;
309
594
  variant: string;
310
- status: import("./types.ts").PostStatus;
595
+ status: import("./types.ts").VariantStatus;
311
596
  version: number;
312
597
  title: string;
313
598
  sessionId: string;
314
599
  createdAt: string;
315
600
  updatedAt: string;
316
601
  }[];
602
+ inUse: {
603
+ state: string | null;
604
+ variant: string;
605
+ version: number;
606
+ }[];
317
607
  parts: StateParts[];
318
- tuned: Record<string, unknown>;
608
+ settled: Record<string, KnobValue>;
609
+ situations?: undefined;
610
+ states: string[];
611
+ area?: string;
612
+ source?: string;
613
+ id: string;
614
+ project: string;
615
+ slug: string;
616
+ title: string;
617
+ kind: import("./types.ts").MockKind;
319
618
  };
320
619
  export declare const sessionRowView: (session: Session, postCount: number) => {
321
620
  postCount: number;
@@ -330,3 +629,90 @@ export declare const sessionRowView: (session: Session, postCount: number) => {
330
629
  agentActiveAt: string | null;
331
630
  keyed: boolean;
332
631
  };
632
+ export declare const treeNodeView: (mock: Mock, posts: Post[], extra: {
633
+ settled: Record<string, KnobValue>;
634
+ embeds: string[];
635
+ embedViews: Map<string, EmbedView>;
636
+ }) => {
637
+ open: number;
638
+ states: string[] | null[];
639
+ widths: number[];
640
+ createdAt: string;
641
+ updatedAt: string;
642
+ closedAt: string | null;
643
+ settled: Record<string, KnobValue>;
644
+ embeds: string[];
645
+ embeddedIn: string[];
646
+ inUse: {
647
+ state: string | null;
648
+ variant: string;
649
+ version: number;
650
+ }[];
651
+ variants: ({
652
+ embedsKey?: string | undefined;
653
+ inUseVersion?: number | undefined;
654
+ starred?: boolean | undefined;
655
+ forkedFrom?: import("./types.ts").ForkRef | undefined;
656
+ note?: string | undefined;
657
+ inUsePoster?: undefined;
658
+ poster: string;
659
+ postId: string;
660
+ state: string | null;
661
+ variant: string;
662
+ status: import("./types.ts").VariantStatus;
663
+ version: number;
664
+ updatedAt: string;
665
+ surface: number;
666
+ } | {
667
+ embedsKey?: string | undefined;
668
+ inUseVersion?: number | undefined;
669
+ starred?: boolean | undefined;
670
+ forkedFrom?: import("./types.ts").ForkRef | undefined;
671
+ note?: string | undefined;
672
+ inUsePoster: string;
673
+ poster: string;
674
+ postId: string;
675
+ state: string | null;
676
+ variant: string;
677
+ status: import("./types.ts").VariantStatus;
678
+ version: number;
679
+ updatedAt: string;
680
+ surface: number;
681
+ } | {
682
+ embedsKey?: string | undefined;
683
+ inUseVersion?: number | undefined;
684
+ starred?: boolean | undefined;
685
+ forkedFrom?: import("./types.ts").ForkRef | undefined;
686
+ note?: string | undefined;
687
+ inUsePoster?: undefined;
688
+ poster?: undefined;
689
+ postId: string;
690
+ state: string | null;
691
+ variant: string;
692
+ status: import("./types.ts").VariantStatus;
693
+ version: number;
694
+ updatedAt: string;
695
+ surface: number;
696
+ } | {
697
+ embedsKey?: string | undefined;
698
+ inUseVersion?: number | undefined;
699
+ starred?: boolean | undefined;
700
+ forkedFrom?: import("./types.ts").ForkRef | undefined;
701
+ note?: string | undefined;
702
+ inUsePoster: string;
703
+ poster?: undefined;
704
+ postId: string;
705
+ state: string | null;
706
+ variant: string;
707
+ status: import("./types.ts").VariantStatus;
708
+ version: number;
709
+ updatedAt: string;
710
+ surface: number;
711
+ })[];
712
+ area?: string;
713
+ source?: string;
714
+ id: string;
715
+ slug: string;
716
+ title: string;
717
+ kind: import("./types.ts").MockKind;
718
+ };