@things-factory/figure-ui 10.1.65 → 10.1.67

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 (176) hide show
  1. package/client/graphql/index.ts +0 -45
  2. package/client/modeller/figure-history-panel.ts +6 -145
  3. package/client/modeller/figure-v3-capability.ts +2 -2
  4. package/client/modeller/figure-v3-clips.ts +2 -2
  5. package/client/modeller/figure-v3-controls.ts +2 -2
  6. package/client/modeller/figure-v3-first-save.ts +1 -1
  7. package/client/modeller/figure-v3-links.ts +6 -6
  8. package/client/modeller/figure-v3-material.ts +11 -11
  9. package/client/modeller/figure-v3-parts.ts +7 -10
  10. package/client/modeller/figure-v3-preview.ts +3 -3
  11. package/client/modeller/figure-v3-properties.ts +5 -6
  12. package/client/modeller/figure-v3-verdict.ts +9 -10
  13. package/client/modeller/figure-view.ts +2 -3
  14. package/client/modeller/modeller-route.ts +2 -3
  15. package/client/modeller/scene-budget.ts +0 -14
  16. package/client/modeller/side-panel-styles.ts +5 -5
  17. package/client/modeller/v3-align.ts +16 -6
  18. package/client/modeller/v3-canvas.ts +12 -12
  19. package/client/modeller/v3-clips.ts +1 -1
  20. package/client/modeller/v3-controls.ts +1 -1
  21. package/client/modeller/v3-editor.ts +21 -21
  22. package/client/modeller/v3-fields.ts +1 -1
  23. package/client/modeller/v3-figure-facts.ts +1 -1
  24. package/client/modeller/v3-first-save.ts +3 -4
  25. package/client/modeller/v3-gizmo.ts +5 -5
  26. package/client/modeller/v3-help.ts +1 -1
  27. package/client/modeller/v3-joint-fan.ts +4 -5
  28. package/client/modeller/v3-keys.ts +1 -1
  29. package/client/modeller/v3-links.ts +9 -12
  30. package/client/modeller/v3-maturity.ts +22 -26
  31. package/client/modeller/v3-refusals.ts +17 -0
  32. package/client/modeller/v3-renderer.ts +1 -1
  33. package/client/modeller/v3-stage-model.ts +2 -2
  34. package/client/modeller/v3-thumbnail.ts +1 -3
  35. package/client/pages/figure-v3-modeller-page.ts +8 -11
  36. package/client/types.ts +2 -31
  37. package/dist-client/graphql/index.js +0 -45
  38. package/dist-client/graphql/index.js.map +1 -1
  39. package/dist-client/modeller/figure-history-panel.d.ts +4 -37
  40. package/dist-client/modeller/figure-history-panel.js +8 -154
  41. package/dist-client/modeller/figure-history-panel.js.map +1 -1
  42. package/dist-client/modeller/figure-v3-capability.d.ts +1 -1
  43. package/dist-client/modeller/figure-v3-capability.js +1 -1
  44. package/dist-client/modeller/figure-v3-capability.js.map +1 -1
  45. package/dist-client/modeller/figure-v3-clips.d.ts +2 -2
  46. package/dist-client/modeller/figure-v3-clips.js +2 -2
  47. package/dist-client/modeller/figure-v3-clips.js.map +1 -1
  48. package/dist-client/modeller/figure-v3-controls.d.ts +1 -1
  49. package/dist-client/modeller/figure-v3-controls.js +2 -2
  50. package/dist-client/modeller/figure-v3-controls.js.map +1 -1
  51. package/dist-client/modeller/figure-v3-first-save.d.ts +1 -1
  52. package/dist-client/modeller/figure-v3-first-save.js +1 -1
  53. package/dist-client/modeller/figure-v3-first-save.js.map +1 -1
  54. package/dist-client/modeller/figure-v3-links.d.ts +5 -5
  55. package/dist-client/modeller/figure-v3-links.js +6 -6
  56. package/dist-client/modeller/figure-v3-links.js.map +1 -1
  57. package/dist-client/modeller/figure-v3-material.d.ts +6 -6
  58. package/dist-client/modeller/figure-v3-material.js +11 -11
  59. package/dist-client/modeller/figure-v3-material.js.map +1 -1
  60. package/dist-client/modeller/figure-v3-parts.d.ts +6 -8
  61. package/dist-client/modeller/figure-v3-parts.js +1 -1
  62. package/dist-client/modeller/figure-v3-parts.js.map +1 -1
  63. package/dist-client/modeller/figure-v3-preview.js.map +1 -1
  64. package/dist-client/modeller/figure-v3-properties.d.ts +4 -5
  65. package/dist-client/modeller/figure-v3-properties.js +5 -6
  66. package/dist-client/modeller/figure-v3-properties.js.map +1 -1
  67. package/dist-client/modeller/figure-v3-verdict.d.ts +2 -2
  68. package/dist-client/modeller/figure-v3-verdict.js +9 -10
  69. package/dist-client/modeller/figure-v3-verdict.js.map +1 -1
  70. package/dist-client/modeller/figure-view.d.ts +2 -3
  71. package/dist-client/modeller/figure-view.js.map +1 -1
  72. package/dist-client/modeller/modeller-route.d.ts +2 -3
  73. package/dist-client/modeller/modeller-route.js +2 -3
  74. package/dist-client/modeller/modeller-route.js.map +1 -1
  75. package/dist-client/modeller/scene-budget.d.ts +0 -11
  76. package/dist-client/modeller/scene-budget.js +0 -12
  77. package/dist-client/modeller/scene-budget.js.map +1 -1
  78. package/dist-client/modeller/side-panel-styles.d.ts +2 -2
  79. package/dist-client/modeller/side-panel-styles.js +5 -5
  80. package/dist-client/modeller/side-panel-styles.js.map +1 -1
  81. package/dist-client/modeller/v3-align.d.ts +9 -5
  82. package/dist-client/modeller/v3-align.js +13 -3
  83. package/dist-client/modeller/v3-align.js.map +1 -1
  84. package/dist-client/modeller/v3-canvas.d.ts +4 -4
  85. package/dist-client/modeller/v3-canvas.js +9 -9
  86. package/dist-client/modeller/v3-canvas.js.map +1 -1
  87. package/dist-client/modeller/v3-clips.js.map +1 -1
  88. package/dist-client/modeller/v3-controls.js.map +1 -1
  89. package/dist-client/modeller/v3-editor.d.ts +13 -13
  90. package/dist-client/modeller/v3-editor.js +19 -18
  91. package/dist-client/modeller/v3-editor.js.map +1 -1
  92. package/dist-client/modeller/v3-fields.js.map +1 -1
  93. package/dist-client/modeller/v3-figure-facts.d.ts +1 -1
  94. package/dist-client/modeller/v3-figure-facts.js +1 -1
  95. package/dist-client/modeller/v3-figure-facts.js.map +1 -1
  96. package/dist-client/modeller/v3-first-save.js +3 -4
  97. package/dist-client/modeller/v3-first-save.js.map +1 -1
  98. package/dist-client/modeller/v3-gizmo.d.ts +5 -5
  99. package/dist-client/modeller/v3-gizmo.js +1 -1
  100. package/dist-client/modeller/v3-gizmo.js.map +1 -1
  101. package/dist-client/modeller/v3-help.d.ts +1 -1
  102. package/dist-client/modeller/v3-help.js +1 -1
  103. package/dist-client/modeller/v3-help.js.map +1 -1
  104. package/dist-client/modeller/v3-joint-fan.js +4 -5
  105. package/dist-client/modeller/v3-joint-fan.js.map +1 -1
  106. package/dist-client/modeller/v3-keys.js.map +1 -1
  107. package/dist-client/modeller/v3-links.d.ts +5 -7
  108. package/dist-client/modeller/v3-links.js +6 -8
  109. package/dist-client/modeller/v3-links.js.map +1 -1
  110. package/dist-client/modeller/v3-maturity.d.ts +7 -7
  111. package/dist-client/modeller/v3-maturity.js +20 -24
  112. package/dist-client/modeller/v3-maturity.js.map +1 -1
  113. package/dist-client/modeller/v3-refusals.d.ts +6 -0
  114. package/dist-client/modeller/v3-refusals.js +18 -0
  115. package/dist-client/modeller/v3-refusals.js.map +1 -1
  116. package/dist-client/modeller/v3-renderer.js +1 -1
  117. package/dist-client/modeller/v3-renderer.js.map +1 -1
  118. package/dist-client/modeller/v3-stage-model.js.map +1 -1
  119. package/dist-client/modeller/v3-thumbnail.js +1 -3
  120. package/dist-client/modeller/v3-thumbnail.js.map +1 -1
  121. package/dist-client/pages/figure-v3-modeller-page.d.ts +4 -5
  122. package/dist-client/pages/figure-v3-modeller-page.js +8 -11
  123. package/dist-client/pages/figure-v3-modeller-page.js.map +1 -1
  124. package/dist-client/route.d.ts +1 -1
  125. package/dist-client/tsconfig.fui.tsbuildinfo +1 -1
  126. package/dist-client/tsconfig.tsbuildinfo +1 -1
  127. package/dist-client/types.d.ts +2 -29
  128. package/dist-client/types.js +3 -0
  129. package/dist-client/types.js.map +1 -1
  130. package/docs/v3-product-cutover.md +14 -24
  131. package/package.json +5 -5
  132. package/test/browser/modeller-page.js +6 -7
  133. package/test/browser/modeller.check.mjs +9 -16
  134. package/test/fixtures/joint-column.json +1138 -0
  135. package/test/fixtures/joint-roller.json +872 -0
  136. package/test/fixtures/robot-arm-6dof.json +2776 -0
  137. package/test/i18n-prefix-guard.test.ts +0 -31
  138. package/test/modeller-route.test.ts +2 -3
  139. package/test/v3-align.test.ts +9 -4
  140. package/test/v3-clips.test.ts +1 -1
  141. package/test/v3-controls.test.ts +1 -1
  142. package/test/v3-fields.test.ts +4 -4
  143. package/test/v3-first-save.test.ts +1 -1
  144. package/test/v3-gizmo.test.ts +5 -5
  145. package/test/v3-joint-fan.test.ts +12 -42
  146. package/test/v3-keys.test.ts +1 -1
  147. package/test/v3-layout.test.ts +4 -5
  148. package/test/v3-links.test.ts +3 -3
  149. package/test/v3-material.test.ts +3 -3
  150. package/test/v3-maturity.test.ts +8 -9
  151. package/test/v3-parts-wiring.test.ts +3 -3
  152. package/test/v3-preview.test.ts +1 -1
  153. package/test/v3-product-write.test.ts +1 -1
  154. package/test/v3-properties.test.ts +3 -3
  155. package/test/v3-refusals.test.ts +12 -0
  156. package/test/v3-release-panel.test.ts +5 -5
  157. package/test/v3-scene-canvas.test.ts +2 -2
  158. package/test/v3-theme.test.ts +2 -2
  159. package/test/v3-verdict.test.ts +2 -2
  160. package/test/v3-view.test.ts +2 -2
  161. package/translations/en.json +2 -143
  162. package/translations/ja.json +2 -143
  163. package/translations/ko.json +2 -143
  164. package/translations/ms.json +2 -143
  165. package/translations/zh.json +2 -143
  166. package/client/modeller/figure-source.ts +0 -437
  167. package/client/modeller/part-edits.ts +0 -312
  168. package/dist-client/modeller/figure-source.d.ts +0 -238
  169. package/dist-client/modeller/figure-source.js +0 -193
  170. package/dist-client/modeller/figure-source.js.map +0 -1
  171. package/dist-client/modeller/part-edits.d.ts +0 -89
  172. package/dist-client/modeller/part-edits.js +0 -270
  173. package/dist-client/modeller/part-edits.js.map +0 -1
  174. package/test/expect.ts +0 -57
  175. package/test/figure-source.test.ts +0 -511
  176. package/test/part-edits.test.ts +0 -350
@@ -26,7 +26,7 @@ import { ScrollbarStyles } from '@operato/styles';
26
26
  import { alignChanges, boxOf, canMirror, mirrorChanges } from './v3-align.js';
27
27
  import { paletteRecipe } from './v3-palette.js';
28
28
  import { nudgeOf } from './v3-stage-model.js';
29
- import { inDeclaredRoom, narrowingRetryOf, partRefusalOf, placementRefusalOf, sizeRangeRefusalOf } from './v3-refusals.js';
29
+ import { inDeclaredRoom, inputRangeRefusalOf, narrowingRetryOf, partRefusalOf, placementRefusalOf, sizeRangeRefusalOf } from './v3-refusals.js';
30
30
  import { instanceRangeOf, instanceRangeToDeclare, proportionToFollow, rangeDiffers, rangeWith, turnsAboutAJoint, valueNow } from './v3-links.js';
31
31
  import { jointFanOf } from './v3-joint-fan.js';
32
32
  import { jointDragOf } from './v3-joint-drag.js';
@@ -39,16 +39,16 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
39
39
  this.selected = '';
40
40
  this.error = '';
41
41
  this.tab = 'properties';
42
- /** What the middle shows: the parts being edited, or the figure placed on a board at eight sizes (V2's two modes). */
42
+ /** What the middle shows: the parts being edited, or the figure placed on a board at eight sizes. */
43
43
  this.middle = 'edit';
44
44
  /**
45
- * How the workbench shows the figure -- V2's view settings, the board's own state names. The viewer's, kept in
45
+ * How the workbench shows the figure, in the board's own state names. The viewer's, kept in
46
46
  * their browser, never in the figure.
47
47
  */
48
48
  this.view = FigureV3Editor_1.storedView();
49
49
  /**
50
- * Parts hidden on the workbench — the author's view while working, not the asset's visibility. Not saved, as in
51
- * the V2 modeller: a part hidden here is still in the figure, still checked, still drawn on a board.
50
+ * Parts hidden on the workbench — the author's view while working, not the asset's visibility. Not saved: a part
51
+ * hidden here is still in the figure, still checked, still drawn on a board.
52
52
  */
53
53
  this.hiddenParts = new Set();
54
54
  /** A value in hand -- typed, held on a spinner, scrubbed, dragged -- drawn at once and recorded on release. */
@@ -68,7 +68,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
68
68
  /*
69
69
  The session's history is the only one. With the canvas focused the scene took Ctrl+Z as well, undoing on its own
70
70
  board the last value the canvas had written -- which the canvas then told as a drag: an undo of a drag on a
71
- converted part wrote the drag again (2026-09-25). Heard first (capture) and kept from the scene.
71
+ part placed by a rule wrote the drag again (2026-09-25). Heard first (capture) and kept from the scene.
72
72
  */
73
73
  e.stopPropagation();
74
74
  if (action === 'translate' || action === 'rotate' || action === 'scale')
@@ -143,7 +143,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
143
143
  min-width: 0;
144
144
  min-height: 0;
145
145
  }
146
- /* The side: tabs over one panel at a time, each using the whole height (V2's side, and why it had tabs). */
146
+ /* The side: tabs over one panel at a time, each using the whole height. */
147
147
  aside {
148
148
  display: flex;
149
149
  flex-direction: column;
@@ -307,7 +307,8 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
307
307
  this.changed();
308
308
  }
309
309
  catch (error) {
310
- this.error = sizeRangeRefusalOf(error, (key, params) => i18next.t(key, params)) ?? (error instanceof Error ? error.message : String(error));
310
+ const say = (key, params) => i18next.t(key, params);
311
+ this.error = sizeRangeRefusalOf(error, say) ?? inputRangeRefusalOf(error, say) ?? (error instanceof Error ? error.message : String(error));
311
312
  }
312
313
  finally {
313
314
  /* Committed or refused, the value in hand is gone: the figure as it stands is drawn again. */
@@ -400,7 +401,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
400
401
  }
401
402
  /**
402
403
  * The list's own operations, as V3 part edits — each one step of the session's history. The copy and the moved
403
- * part stay selected, as they do in the V2 list.
404
+ * part stay selected.
404
405
  */
405
406
  duplicatePart(id) {
406
407
  this.run(() => {
@@ -487,7 +488,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
487
488
  return this.requestUpdate();
488
489
  }
489
490
  /*
490
- A part whose place is worked out (a converted one) has no numbers for the gizmo to write: the drag is added beside
491
+ A part whose place is worked out has no numbers for the gizmo to write: the drag is added beside
491
492
  its rule (`nudge-part`). A part a joint or a fastening places, or a size that is worked out, is refused -- said in
492
493
  words, not by the part silently springing back (user, 2026-09-24: 「기즈모 컨트롤도 전혀 작동이 안되는군」).
493
494
  */
@@ -495,7 +496,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
495
496
  if (!body)
496
497
  return this.requestUpdate();
497
498
  const { by, turn } = nudgeOf(body, result);
498
- /* A size worked out from the figure's: the drag's factor beside its rule, so it still follows (V2 scaled any part). */
499
+ /* A size worked out from the figure's: the drag's factor beside its rule, so it still follows. */
499
500
  const grow = {};
500
501
  if (result.scale)
501
502
  ['x', 'y', 'z'].forEach((axis, i) => Math.abs(result.scale[i] - 1) > 1e-6 && (grow[axis] = Math.round(result.scale[i] * 1e6) / 1e6));
@@ -531,7 +532,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
531
532
  this.session.apply(changes);
532
533
  });
533
534
  }
534
- /** A mirrored copy: duplicate, then place the copy on the other side — two steps, as the V2 list makes it. */
535
+ /** A mirrored copy: duplicate, then place the copy on the other side — two steps. */
535
536
  mirror(axis) {
536
537
  this.run(() => {
537
538
  const id = this.selected;
@@ -577,7 +578,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
577
578
  </div>`;
578
579
  }
579
580
  /**
580
- * A part's name — the V2 part name field. It renames every value the part owns, and what refers to them follows
581
+ * A part's name. It renames every value the part owns, and what refers to them follows
581
582
  * (figure-model's rename-part), as one step of the history.
582
583
  */
583
584
  /**
@@ -612,7 +613,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
612
613
  : String(error);
613
614
  }
614
615
  }
615
- /** Size response, fastening and motion for the selected part (parity ④ ⑤ ⑥), as authoring commands. */
616
+ /** Size response, fastening and motion for the selected part, as authoring commands. */
616
617
  renderLinks(unavailable, section) {
617
618
  let asset;
618
619
  try {
@@ -638,7 +639,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
638
639
  @v3-part-edit=${(e) => this.run(() => this.session.edit(e.detail.edit))}
639
640
  ></figure-v3-links>`;
640
641
  }
641
- /** The figure's controls: try a value, name it, set its range and travel time, keep the pose (parity row ⑥). */
642
+ /** The figure's controls: try a value, name it, set its range and travel time, keep the pose. */
642
643
  renderControls(view, unavailable) {
643
644
  let asset;
644
645
  try {
@@ -840,8 +841,8 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
840
841
  </button>`;
841
842
  }
842
843
  /**
843
- * The parts list, one row per part the author made: a repeat is one row with how many copies it makes now (V2 listed
844
- * its parts the same way; user, 2026-09-24: the conveyor's sixteen rollers were sixteen rows).
844
+ * The parts list, one row per part the author made: a repeat is one row with how many copies it makes now
845
+ * (user, 2026-09-24: the conveyor's sixteen rollers were sixteen rows).
845
846
  */
846
847
  partRows(geometry) {
847
848
  const rows = new Map();
@@ -874,7 +875,7 @@ let FigureV3Editor = class FigureV3Editor extends LitElement {
874
875
  }
875
876
  }
876
877
  /**
877
- * A repeat: which way its copies run, how many there are now, and how far apart -- V2's `repeat: { axis, pitch }`.
878
+ * A repeat: which way its copies run, how many there are now, and how far apart.
878
879
  * The pitch of a row that fills its length is edited as a number (`set-repeat` makes it the part's own the first
879
880
  * time); a row of a fixed count says its pitch cannot be set yet (figure-model refuses it the same way).
880
881
  */