@things-factory/figure-ui 10.1.241 → 10.1.244

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 (63) hide show
  1. package/client/graphql/store.ts +3 -2
  2. package/client/modeller/editor.ts +63 -5
  3. package/client/modeller/figure-parts.ts +18 -3
  4. package/client/modeller/figure-preview.ts +1 -1
  5. package/client/modeller/figure-properties.ts +14 -7
  6. package/client/modeller/figure-save-conflict.ts +73 -0
  7. package/client/modeller/figure-section-editor.ts +3 -0
  8. package/client/modeller/keys.ts +8 -2
  9. package/client/modeller/modeller-keys.ts +4 -1
  10. package/client/modeller/product-session.ts +107 -5
  11. package/client/modeller/save-conflict.ts +91 -0
  12. package/client/pages/figure-modeller-page.ts +58 -43
  13. package/dist-client/graphql/store.js +3 -2
  14. package/dist-client/graphql/store.js.map +1 -1
  15. package/dist-client/modeller/editor.d.ts +14 -0
  16. package/dist-client/modeller/editor.js +75 -5
  17. package/dist-client/modeller/editor.js.map +1 -1
  18. package/dist-client/modeller/figure-parts.js +18 -3
  19. package/dist-client/modeller/figure-parts.js.map +1 -1
  20. package/dist-client/modeller/figure-preview.d.ts +1 -1
  21. package/dist-client/modeller/figure-preview.js.map +1 -1
  22. package/dist-client/modeller/figure-properties.d.ts +4 -2
  23. package/dist-client/modeller/figure-properties.js +16 -7
  24. package/dist-client/modeller/figure-properties.js.map +1 -1
  25. package/dist-client/modeller/figure-save-conflict.d.ts +19 -0
  26. package/dist-client/modeller/figure-save-conflict.js +76 -0
  27. package/dist-client/modeller/figure-save-conflict.js.map +1 -0
  28. package/dist-client/modeller/figure-section-editor.d.ts +2 -0
  29. package/dist-client/modeller/figure-section-editor.js +8 -0
  30. package/dist-client/modeller/figure-section-editor.js.map +1 -1
  31. package/dist-client/modeller/keys.d.ts +5 -0
  32. package/dist-client/modeller/keys.js +5 -3
  33. package/dist-client/modeller/keys.js.map +1 -1
  34. package/dist-client/modeller/modeller-keys.d.ts +2 -0
  35. package/dist-client/modeller/modeller-keys.js +2 -1
  36. package/dist-client/modeller/modeller-keys.js.map +1 -1
  37. package/dist-client/modeller/product-session.d.ts +368 -22
  38. package/dist-client/modeller/product-session.js +107 -7
  39. package/dist-client/modeller/product-session.js.map +1 -1
  40. package/dist-client/modeller/save-conflict.d.ts +12 -0
  41. package/dist-client/modeller/save-conflict.js +63 -0
  42. package/dist-client/modeller/save-conflict.js.map +1 -0
  43. package/dist-client/pages/figure-modeller-page.d.ts +11 -5
  44. package/dist-client/pages/figure-modeller-page.js +58 -49
  45. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  46. package/dist-client/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +5 -5
  48. package/test/browser/category-page.js +3 -1
  49. package/test/browser/category.check.mjs +6 -0
  50. package/test/browser/product-page.check.mjs +268 -6
  51. package/test/browser/product-page.js +4 -1
  52. package/test/browser/screen.check.mjs +3 -0
  53. package/test/browser/section.check.mjs +21 -0
  54. package/test/keys.test.ts +8 -0
  55. package/test/product-session.test.ts +137 -1
  56. package/test/save-conflict.test.ts +41 -0
  57. package/test/save-landed.test.ts +75 -0
  58. package/translations/en.json +12 -1
  59. package/translations/es.json +12 -1
  60. package/translations/ja.json +12 -1
  61. package/translations/ko.json +12 -1
  62. package/translations/ms.json +12 -1
  63. package/translations/zh.json +12 -1
@@ -8,6 +8,16 @@ export interface FigureProductRecord {
8
8
  id: string;
9
9
  source: string;
10
10
  }
11
+ /**
12
+ * The row's catalogue fields -- the type (before release), the category, the tags. Kept on the row, not in the asset,
13
+ * and saved with it by 「저장」: written at once on change, they stayed after 「저장하지 않고 떠나기」 and the save
14
+ * button never lit for them (2026-11-01 audit item 5).
15
+ */
16
+ export interface FigureCatalogPatch {
17
+ type?: string;
18
+ category?: string;
19
+ tags?: string[];
20
+ }
11
21
  /** Persistence is injected; neither the model engine nor the renderer owns the product ID. */
12
22
  export interface FigureProductStore {
13
23
  load(id: string): Promise<FigureProductRecord>;
@@ -30,10 +40,26 @@ export interface FigureProductStore {
30
40
  /** Keys of the AI proposals whose steps the source holds: the server records them with the save. */
31
41
  proposalKeys?: string[];
32
42
  }): Promise<FigureProductRecord>;
43
+ /** Writes the row's catalogue fields of a saved figure. */
44
+ updateCatalog(id: string, patch: FigureCatalogPatch): Promise<unknown>;
33
45
  }
34
46
  /** Product lifecycle boundary. A late response can never change another editor's asset or ID. */
35
47
  export declare function createFigureProductSession(store: FigureProductStore): {
36
48
  read: () => {
49
+ dirty: boolean;
50
+ catalog: {
51
+ type?: string;
52
+ category?: string;
53
+ tags?: string[];
54
+ };
55
+ catalogWritten: {
56
+ type?: string;
57
+ category?: string;
58
+ tags?: string[];
59
+ };
60
+ conflict: {
61
+ latest: string | undefined;
62
+ } | undefined;
37
63
  id: string | undefined;
38
64
  creationId: string | undefined;
39
65
  loading: boolean;
@@ -44,13 +70,26 @@ export declare function createFigureProductSession(store: FigureProductStore): {
44
70
  fields: never[];
45
71
  geometry: never[];
46
72
  bindings: never[];
47
- dirty: false;
48
73
  revision: null;
49
74
  canUndo?: undefined;
50
75
  canRedo?: undefined;
51
76
  palette?: undefined;
52
77
  asset?: undefined;
53
78
  } | {
79
+ dirty: boolean;
80
+ catalog: {
81
+ type?: string;
82
+ category?: string;
83
+ tags?: string[];
84
+ };
85
+ catalogWritten: {
86
+ type?: string;
87
+ category?: string;
88
+ tags?: string[];
89
+ };
90
+ conflict: {
91
+ latest: string | undefined;
92
+ } | undefined;
54
93
  id: string | undefined;
55
94
  creationId: string | undefined;
56
95
  loading: boolean;
@@ -59,10 +98,9 @@ export declare function createFigureProductSession(store: FigureProductStore): {
59
98
  context: string;
60
99
  name: string;
61
100
  revision: number;
62
- dirty: boolean;
63
101
  canUndo: boolean;
64
102
  canRedo: boolean;
65
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
103
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
66
104
  value: number;
67
105
  }>;
68
106
  asset: import("@hatiolab/figure-model").FigureAsset;
@@ -77,11 +115,229 @@ export declare function createFigureProductSession(store: FigureProductStore): {
77
115
  * -- the server writes over it only while it still holds this. Nothing for a figure not saved yet.
78
116
  */
79
117
  confirmedSource: () => string | undefined;
118
+ /**
119
+ * A catalogue field changed, held for the next save; one changed back to what the row holds (`saved`) is no
120
+ * change. Only a saved figure has a row to write: a new figure's type goes with its first save. Taken while a save
121
+ * is on its way too: the field shows it, so it is held for the save after (2026-11-01 re-check). A field that save
122
+ * is writing is held whatever it is changed to -- back to the old value too, which the save is about to replace;
123
+ * the save done lets go only of a value it wrote (2026-11-01 second re-check).
124
+ */
125
+ editCatalog(patch: FigureCatalogPatch, saved: FigureCatalogPatch): {
126
+ dirty: boolean;
127
+ catalog: {
128
+ type?: string;
129
+ category?: string;
130
+ tags?: string[];
131
+ };
132
+ catalogWritten: {
133
+ type?: string;
134
+ category?: string;
135
+ tags?: string[];
136
+ };
137
+ conflict: {
138
+ latest: string | undefined;
139
+ } | undefined;
140
+ id: string | undefined;
141
+ creationId: string | undefined;
142
+ loading: boolean;
143
+ saving: boolean;
144
+ error: string | undefined;
145
+ context: null;
146
+ name: null;
147
+ fields: never[];
148
+ geometry: never[];
149
+ bindings: never[];
150
+ revision: null;
151
+ canUndo?: undefined;
152
+ canRedo?: undefined;
153
+ palette?: undefined;
154
+ asset?: undefined;
155
+ } | {
156
+ dirty: boolean;
157
+ catalog: {
158
+ type?: string;
159
+ category?: string;
160
+ tags?: string[];
161
+ };
162
+ catalogWritten: {
163
+ type?: string;
164
+ category?: string;
165
+ tags?: string[];
166
+ };
167
+ conflict: {
168
+ latest: string | undefined;
169
+ } | undefined;
170
+ id: string | undefined;
171
+ creationId: string | undefined;
172
+ loading: boolean;
173
+ saving: boolean;
174
+ error: string | undefined;
175
+ context: string;
176
+ name: string;
177
+ revision: number;
178
+ canUndo: boolean;
179
+ canRedo: boolean;
180
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
181
+ value: number;
182
+ }>;
183
+ asset: import("@hatiolab/figure-model").FigureAsset;
184
+ geometry: import("@hatiolab/figure-model").FigureAssetGeometry[];
185
+ bindings: import("@hatiolab/figure-model").FigureEvaluatedBinding[];
186
+ palette: Record<string, string>;
187
+ };
188
+ /**
189
+ * After a conflict, the edits written over the server's latest: the next save expects that latest, so it goes
190
+ * through only while the server still holds it -- a third change meanwhile is a conflict again.
191
+ */
192
+ overwriteConflict(): {
193
+ dirty: boolean;
194
+ catalog: {
195
+ type?: string;
196
+ category?: string;
197
+ tags?: string[];
198
+ };
199
+ catalogWritten: {
200
+ type?: string;
201
+ category?: string;
202
+ tags?: string[];
203
+ };
204
+ conflict: {
205
+ latest: string | undefined;
206
+ } | undefined;
207
+ id: string | undefined;
208
+ creationId: string | undefined;
209
+ loading: boolean;
210
+ saving: boolean;
211
+ error: string | undefined;
212
+ context: null;
213
+ name: null;
214
+ fields: never[];
215
+ geometry: never[];
216
+ bindings: never[];
217
+ revision: null;
218
+ canUndo?: undefined;
219
+ canRedo?: undefined;
220
+ palette?: undefined;
221
+ asset?: undefined;
222
+ } | {
223
+ dirty: boolean;
224
+ catalog: {
225
+ type?: string;
226
+ category?: string;
227
+ tags?: string[];
228
+ };
229
+ catalogWritten: {
230
+ type?: string;
231
+ category?: string;
232
+ tags?: string[];
233
+ };
234
+ conflict: {
235
+ latest: string | undefined;
236
+ } | undefined;
237
+ id: string | undefined;
238
+ creationId: string | undefined;
239
+ loading: boolean;
240
+ saving: boolean;
241
+ error: string | undefined;
242
+ context: string;
243
+ name: string;
244
+ revision: number;
245
+ canUndo: boolean;
246
+ canRedo: boolean;
247
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
248
+ value: number;
249
+ }>;
250
+ asset: import("@hatiolab/figure-model").FigureAsset;
251
+ geometry: import("@hatiolab/figure-model").FigureAssetGeometry[];
252
+ bindings: import("@hatiolab/figure-model").FigureEvaluatedBinding[];
253
+ palette: Record<string, string>;
254
+ };
255
+ /**
256
+ * After a conflict, the edits kept as a figure of their own: from here they are a new figure, under a new creation
257
+ * id, saved by the first save's question; the figure they came from is left as the server holds it.
258
+ */
259
+ detachAsCopy(): {
260
+ dirty: boolean;
261
+ catalog: {
262
+ type?: string;
263
+ category?: string;
264
+ tags?: string[];
265
+ };
266
+ catalogWritten: {
267
+ type?: string;
268
+ category?: string;
269
+ tags?: string[];
270
+ };
271
+ conflict: {
272
+ latest: string | undefined;
273
+ } | undefined;
274
+ id: string | undefined;
275
+ creationId: string | undefined;
276
+ loading: boolean;
277
+ saving: boolean;
278
+ error: string | undefined;
279
+ context: null;
280
+ name: null;
281
+ fields: never[];
282
+ geometry: never[];
283
+ bindings: never[];
284
+ revision: null;
285
+ canUndo?: undefined;
286
+ canRedo?: undefined;
287
+ palette?: undefined;
288
+ asset?: undefined;
289
+ } | {
290
+ dirty: boolean;
291
+ catalog: {
292
+ type?: string;
293
+ category?: string;
294
+ tags?: string[];
295
+ };
296
+ catalogWritten: {
297
+ type?: string;
298
+ category?: string;
299
+ tags?: string[];
300
+ };
301
+ conflict: {
302
+ latest: string | undefined;
303
+ } | undefined;
304
+ id: string | undefined;
305
+ creationId: string | undefined;
306
+ loading: boolean;
307
+ saving: boolean;
308
+ error: string | undefined;
309
+ context: string;
310
+ name: string;
311
+ revision: number;
312
+ canUndo: boolean;
313
+ canRedo: boolean;
314
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
315
+ value: number;
316
+ }>;
317
+ asset: import("@hatiolab/figure-model").FigureAsset;
318
+ geometry: import("@hatiolab/figure-model").FigureAssetGeometry[];
319
+ bindings: import("@hatiolab/figure-model").FigureEvaluatedBinding[];
320
+ palette: Record<string, string>;
321
+ };
80
322
  /** A new figure, named in the screen's language by the page: the session has no words of its own. */
81
323
  startNew({ discard, name }: {
82
324
  discard?: boolean;
83
325
  name: string;
84
326
  }): {
327
+ dirty: boolean;
328
+ catalog: {
329
+ type?: string;
330
+ category?: string;
331
+ tags?: string[];
332
+ };
333
+ catalogWritten: {
334
+ type?: string;
335
+ category?: string;
336
+ tags?: string[];
337
+ };
338
+ conflict: {
339
+ latest: string | undefined;
340
+ } | undefined;
85
341
  id: string | undefined;
86
342
  creationId: string | undefined;
87
343
  loading: boolean;
@@ -92,13 +348,26 @@ export declare function createFigureProductSession(store: FigureProductStore): {
92
348
  fields: never[];
93
349
  geometry: never[];
94
350
  bindings: never[];
95
- dirty: false;
96
351
  revision: null;
97
352
  canUndo?: undefined;
98
353
  canRedo?: undefined;
99
354
  palette?: undefined;
100
355
  asset?: undefined;
101
356
  } | {
357
+ dirty: boolean;
358
+ catalog: {
359
+ type?: string;
360
+ category?: string;
361
+ tags?: string[];
362
+ };
363
+ catalogWritten: {
364
+ type?: string;
365
+ category?: string;
366
+ tags?: string[];
367
+ };
368
+ conflict: {
369
+ latest: string | undefined;
370
+ } | undefined;
102
371
  id: string | undefined;
103
372
  creationId: string | undefined;
104
373
  loading: boolean;
@@ -107,10 +376,9 @@ export declare function createFigureProductSession(store: FigureProductStore): {
107
376
  context: string;
108
377
  name: string;
109
378
  revision: number;
110
- dirty: boolean;
111
379
  canUndo: boolean;
112
380
  canRedo: boolean;
113
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
381
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
114
382
  value: number;
115
383
  }>;
116
384
  asset: import("@hatiolab/figure-model").FigureAsset;
@@ -121,6 +389,20 @@ export declare function createFigureProductSession(store: FigureProductStore): {
121
389
  open(nextId: string, { discard }?: {
122
390
  discard?: boolean | undefined;
123
391
  }): Promise<{
392
+ dirty: boolean;
393
+ catalog: {
394
+ type?: string;
395
+ category?: string;
396
+ tags?: string[];
397
+ };
398
+ catalogWritten: {
399
+ type?: string;
400
+ category?: string;
401
+ tags?: string[];
402
+ };
403
+ conflict: {
404
+ latest: string | undefined;
405
+ } | undefined;
124
406
  id: string | undefined;
125
407
  creationId: string | undefined;
126
408
  loading: boolean;
@@ -131,13 +413,26 @@ export declare function createFigureProductSession(store: FigureProductStore): {
131
413
  fields: never[];
132
414
  geometry: never[];
133
415
  bindings: never[];
134
- dirty: false;
135
416
  revision: null;
136
417
  canUndo?: undefined;
137
418
  canRedo?: undefined;
138
419
  palette?: undefined;
139
420
  asset?: undefined;
140
421
  } | {
422
+ dirty: boolean;
423
+ catalog: {
424
+ type?: string;
425
+ category?: string;
426
+ tags?: string[];
427
+ };
428
+ catalogWritten: {
429
+ type?: string;
430
+ category?: string;
431
+ tags?: string[];
432
+ };
433
+ conflict: {
434
+ latest: string | undefined;
435
+ } | undefined;
141
436
  id: string | undefined;
142
437
  creationId: string | undefined;
143
438
  loading: boolean;
@@ -146,10 +441,9 @@ export declare function createFigureProductSession(store: FigureProductStore): {
146
441
  context: string;
147
442
  name: string;
148
443
  revision: number;
149
- dirty: boolean;
150
444
  canUndo: boolean;
151
445
  canRedo: boolean;
152
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
446
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
153
447
  value: number;
154
448
  }>;
155
449
  asset: import("@hatiolab/figure-model").FigureAsset;
@@ -160,6 +454,20 @@ export declare function createFigureProductSession(store: FigureProductStore): {
160
454
  close({ discard }?: {
161
455
  discard?: boolean | undefined;
162
456
  }): {
457
+ dirty: boolean;
458
+ catalog: {
459
+ type?: string;
460
+ category?: string;
461
+ tags?: string[];
462
+ };
463
+ catalogWritten: {
464
+ type?: string;
465
+ category?: string;
466
+ tags?: string[];
467
+ };
468
+ conflict: {
469
+ latest: string | undefined;
470
+ } | undefined;
163
471
  id: string | undefined;
164
472
  creationId: string | undefined;
165
473
  loading: boolean;
@@ -170,13 +478,26 @@ export declare function createFigureProductSession(store: FigureProductStore): {
170
478
  fields: never[];
171
479
  geometry: never[];
172
480
  bindings: never[];
173
- dirty: false;
174
481
  revision: null;
175
482
  canUndo?: undefined;
176
483
  canRedo?: undefined;
177
484
  palette?: undefined;
178
485
  asset?: undefined;
179
486
  } | {
487
+ dirty: boolean;
488
+ catalog: {
489
+ type?: string;
490
+ category?: string;
491
+ tags?: string[];
492
+ };
493
+ catalogWritten: {
494
+ type?: string;
495
+ category?: string;
496
+ tags?: string[];
497
+ };
498
+ conflict: {
499
+ latest: string | undefined;
500
+ } | undefined;
180
501
  id: string | undefined;
181
502
  creationId: string | undefined;
182
503
  loading: boolean;
@@ -185,10 +506,9 @@ export declare function createFigureProductSession(store: FigureProductStore): {
185
506
  context: string;
186
507
  name: string;
187
508
  revision: number;
188
- dirty: boolean;
189
509
  canUndo: boolean;
190
510
  canRedo: boolean;
191
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
511
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
192
512
  value: number;
193
513
  }>;
194
514
  asset: import("@hatiolab/figure-model").FigureAsset;
@@ -215,7 +535,7 @@ export declare function createFigureProductSession(store: FigureProductStore): {
215
535
  dirty: boolean;
216
536
  canUndo: boolean;
217
537
  canRedo: boolean;
218
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
538
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
219
539
  value: number;
220
540
  }>;
221
541
  readonly asset: import("@hatiolab/figure-model").FigureAsset;
@@ -246,7 +566,7 @@ export declare function createFigureProductSession(store: FigureProductStore): {
246
566
  dirty: boolean;
247
567
  canUndo: boolean;
248
568
  canRedo: boolean;
249
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
569
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
250
570
  value: number;
251
571
  }>;
252
572
  readonly asset: import("@hatiolab/figure-model").FigureAsset;
@@ -286,7 +606,7 @@ export declare function createFigureProductSession(store: FigureProductStore): {
286
606
  dirty: boolean;
287
607
  canUndo: boolean;
288
608
  canRedo: boolean;
289
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
609
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
290
610
  value: number;
291
611
  }>;
292
612
  readonly asset: import("@hatiolab/figure-model").FigureAsset;
@@ -313,7 +633,7 @@ export declare function createFigureProductSession(store: FigureProductStore): {
313
633
  dirty: boolean;
314
634
  canUndo: boolean;
315
635
  canRedo: boolean;
316
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
636
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
317
637
  value: number;
318
638
  }>;
319
639
  readonly asset: import("@hatiolab/figure-model").FigureAsset;
@@ -382,7 +702,7 @@ export declare function createFigureProductSession(store: FigureProductStore): {
382
702
  dirty: boolean;
383
703
  canUndo: boolean;
384
704
  canRedo: boolean;
385
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
705
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
386
706
  value: number;
387
707
  }>;
388
708
  readonly asset: import("@hatiolab/figure-model").FigureAsset;
@@ -417,7 +737,7 @@ export declare function createFigureProductSession(store: FigureProductStore): {
417
737
  dirty: boolean;
418
738
  canUndo: boolean;
419
739
  canRedo: boolean;
420
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
740
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
421
741
  value: number;
422
742
  }>;
423
743
  readonly asset: import("@hatiolab/figure-model").FigureAsset;
@@ -444,7 +764,7 @@ export declare function createFigureProductSession(store: FigureProductStore): {
444
764
  dirty: boolean;
445
765
  canUndo: boolean;
446
766
  canRedo: boolean;
447
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
767
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
448
768
  value: number;
449
769
  }>;
450
770
  readonly asset: import("@hatiolab/figure-model").FigureAsset;
@@ -465,6 +785,20 @@ export declare function createFigureProductSession(store: FigureProductStore): {
465
785
  type?: string;
466
786
  namespace?: string;
467
787
  }): Promise<{
788
+ dirty: boolean;
789
+ catalog: {
790
+ type?: string;
791
+ category?: string;
792
+ tags?: string[];
793
+ };
794
+ catalogWritten: {
795
+ type?: string;
796
+ category?: string;
797
+ tags?: string[];
798
+ };
799
+ conflict: {
800
+ latest: string | undefined;
801
+ } | undefined;
468
802
  id: string | undefined;
469
803
  creationId: string | undefined;
470
804
  loading: boolean;
@@ -475,13 +809,26 @@ export declare function createFigureProductSession(store: FigureProductStore): {
475
809
  fields: never[];
476
810
  geometry: never[];
477
811
  bindings: never[];
478
- dirty: false;
479
812
  revision: null;
480
813
  canUndo?: undefined;
481
814
  canRedo?: undefined;
482
815
  palette?: undefined;
483
816
  asset?: undefined;
484
817
  } | {
818
+ dirty: boolean;
819
+ catalog: {
820
+ type?: string;
821
+ category?: string;
822
+ tags?: string[];
823
+ };
824
+ catalogWritten: {
825
+ type?: string;
826
+ category?: string;
827
+ tags?: string[];
828
+ };
829
+ conflict: {
830
+ latest: string | undefined;
831
+ } | undefined;
485
832
  id: string | undefined;
486
833
  creationId: string | undefined;
487
834
  loading: boolean;
@@ -490,10 +837,9 @@ export declare function createFigureProductSession(store: FigureProductStore): {
490
837
  context: string;
491
838
  name: string;
492
839
  revision: number;
493
- dirty: boolean;
494
840
  canUndo: boolean;
495
841
  canRedo: boolean;
496
- fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"] /** The card's picture. Absent when the browser could not draw one; the source is saved either way. */[number] & {
842
+ fields: Array<import("@hatiolab/figure-model").FigureAsset["document"]["model"]["inputs"][number] & {
497
843
  value: number;
498
844
  }>;
499
845
  asset: import("@hatiolab/figure-model").FigureAsset;