@things-factory/figure-ui 10.1.205 → 10.1.207

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 (105) hide show
  1. package/client/modeller/editor-styles.ts +16 -0
  2. package/client/modeller/editor.ts +53 -137
  3. package/client/modeller/fasten-form.ts +50 -11
  4. package/client/modeller/figure-facts.ts +1 -1
  5. package/client/modeller/figure-fasten-dialog.ts +3 -2
  6. package/client/modeller/figure-history-panel.ts +1 -29
  7. package/client/modeller/figure-links.ts +2 -2
  8. package/client/modeller/figure-preview.ts +10 -12
  9. package/client/modeller/figure-verdict.ts +2 -17
  10. package/client/modeller/gizmo.ts +10 -0
  11. package/client/modeller/keys.ts +10 -1
  12. package/client/modeller/links.ts +32 -41
  13. package/client/modeller/maturity.ts +11 -27
  14. package/client/modeller/palette.ts +1 -1
  15. package/client/modeller/product-session.ts +16 -4
  16. package/client/modeller/refusal-teller.ts +3 -25
  17. package/client/modeller/refusals.ts +20 -33
  18. package/client/pages/figure-modeller-page.ts +7 -22
  19. package/dist-client/modeller/editor-styles.js +16 -0
  20. package/dist-client/modeller/editor-styles.js.map +1 -1
  21. package/dist-client/modeller/editor.d.ts +8 -11
  22. package/dist-client/modeller/editor.js +57 -138
  23. package/dist-client/modeller/editor.js.map +1 -1
  24. package/dist-client/modeller/fasten-form.d.ts +16 -7
  25. package/dist-client/modeller/fasten-form.js +45 -11
  26. package/dist-client/modeller/fasten-form.js.map +1 -1
  27. package/dist-client/modeller/figure-facts.js +1 -1
  28. package/dist-client/modeller/figure-facts.js.map +1 -1
  29. package/dist-client/modeller/figure-fasten-dialog.js +3 -3
  30. package/dist-client/modeller/figure-fasten-dialog.js.map +1 -1
  31. package/dist-client/modeller/figure-history-panel.d.ts +0 -16
  32. package/dist-client/modeller/figure-history-panel.js +1 -27
  33. package/dist-client/modeller/figure-history-panel.js.map +1 -1
  34. package/dist-client/modeller/figure-links.js +2 -2
  35. package/dist-client/modeller/figure-links.js.map +1 -1
  36. package/dist-client/modeller/figure-preview.js +8 -11
  37. package/dist-client/modeller/figure-preview.js.map +1 -1
  38. package/dist-client/modeller/figure-verdict.d.ts +0 -5
  39. package/dist-client/modeller/figure-verdict.js +2 -21
  40. package/dist-client/modeller/figure-verdict.js.map +1 -1
  41. package/dist-client/modeller/gizmo.d.ts +6 -0
  42. package/dist-client/modeller/gizmo.js +11 -0
  43. package/dist-client/modeller/gizmo.js.map +1 -1
  44. package/dist-client/modeller/keys.d.ts +1 -1
  45. package/dist-client/modeller/keys.js +6 -0
  46. package/dist-client/modeller/keys.js.map +1 -1
  47. package/dist-client/modeller/links.d.ts +16 -22
  48. package/dist-client/modeller/links.js +26 -39
  49. package/dist-client/modeller/links.js.map +1 -1
  50. package/dist-client/modeller/maturity.d.ts +2 -4
  51. package/dist-client/modeller/maturity.js +12 -26
  52. package/dist-client/modeller/maturity.js.map +1 -1
  53. package/dist-client/modeller/palette.js +1 -1
  54. package/dist-client/modeller/palette.js.map +1 -1
  55. package/dist-client/modeller/product-session.d.ts +15 -13
  56. package/dist-client/modeller/product-session.js +15 -5
  57. package/dist-client/modeller/product-session.js.map +1 -1
  58. package/dist-client/modeller/refusal-teller.d.ts +1 -12
  59. package/dist-client/modeller/refusal-teller.js +3 -22
  60. package/dist-client/modeller/refusal-teller.js.map +1 -1
  61. package/dist-client/modeller/refusals.d.ts +7 -17
  62. package/dist-client/modeller/refusals.js +17 -34
  63. package/dist-client/modeller/refusals.js.map +1 -1
  64. package/dist-client/pages/figure-modeller-page.d.ts +1 -3
  65. package/dist-client/pages/figure-modeller-page.js +7 -23
  66. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  67. package/dist-client/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +7 -7
  69. package/test/browser/acceptance-page.js +4 -4
  70. package/test/browser/detail-page.js +1 -3
  71. package/test/browser/detail-tabs-page.js +1 -2
  72. package/test/browser/links.check.mjs +32 -50
  73. package/test/browser/modeller.check.mjs +46 -19
  74. package/test/browser/parts-page.js +2 -2
  75. package/test/browser/parts.check.mjs +51 -12
  76. package/test/browser/product-page.check.mjs +6 -9
  77. package/test/browser/product-page.js +1 -2
  78. package/test/browser/screen-page.js +2 -6
  79. package/test/browser/screen.check.mjs +8 -65
  80. package/test/browser/section.check.mjs +27 -0
  81. package/test/fasten-form.test.ts +42 -2
  82. package/test/first-minute.test.ts +2 -3
  83. package/test/fixtures/joint-column.json +1 -66
  84. package/test/fixtures/joint-roller.json +1 -66
  85. package/test/fixtures/robot-arm-6dof.json +2 -67
  86. package/test/gizmo.test.ts +12 -1
  87. package/test/keys.test.ts +11 -0
  88. package/test/links.test.ts +39 -34
  89. package/test/parts-wiring.test.ts +1 -1
  90. package/test/properties.test.ts +9 -12
  91. package/test/refusals.test.ts +20 -42
  92. package/test/resize-with-placement.test.ts +13 -15
  93. package/test/revision.test.ts +1 -2
  94. package/test/verdict.test.ts +1 -15
  95. package/translations/en.json +8 -32
  96. package/translations/es.json +8 -32
  97. package/translations/ja.json +8 -32
  98. package/translations/ko.json +8 -32
  99. package/translations/ms.json +8 -32
  100. package/translations/zh.json +8 -32
  101. package/client/modeller/occupancy.ts +0 -51
  102. package/dist-client/modeller/occupancy.d.ts +0 -31
  103. package/dist-client/modeller/occupancy.js +0 -36
  104. package/dist-client/modeller/occupancy.js.map +0 -1
  105. package/test/release-panel.test.ts +0 -53
@@ -12,10 +12,8 @@
12
12
  "figure.button.delete-figure": "delete",
13
13
  "figure.button.discard": "discard",
14
14
  "figure.button.duplicate-part": "duplicate",
15
- "figure.button.fit-base-to-parts": "muatkan pada bahagian",
16
15
  "figure.button.fix-position": "tetapkan di sini",
17
16
  "figure.button.scale-position": "berkadar",
18
- "figure.button.remeasure-range": "ukur semula",
19
17
  "figure.button.scale-uniformly": "besarkan dengan satu nisbah",
20
18
  "figure.label.group-menu": "Tindakan lain",
21
19
  "figure.label.group-more": "Lagi",
@@ -49,7 +47,8 @@
49
47
  "figure.text.catalog-needs-a-save": "boleh ditetapkan selepas disimpan.",
50
48
  "figure.text.fasten-would-loop": "bahagian itu sudah dipasang pada bahagian ini, jadi ia tidak boleh dipasang sebaliknya.",
51
49
  "figure.text.follow-would-loop": "dimensi itu sudah mengikut bahagian ini, jadi kedua-duanya tidak boleh saling mengikut.",
52
- "figure.text.links-need-a-box": "ikut saiz untuk bahagian berbentuk kotak, pasangan untuk kotak dan silinder.",
50
+ "figure.text.part-cannot-follow": "Bahagian ini tidak boleh mengikut saiz.",
51
+ "figure.text.part-cannot-fasten": "Bahagian ini tidak boleh dipasang.",
53
52
  "figure.text.scale-position-explained": "menyimpan kedudukan ini sebagai bahagian saiz figura — pada saiz dua kali, jaraknya dua kali.",
54
53
  "figure.text.repeat-member": "salinan ke-{index} daripada {count} yang dibuat dengan mengulang {name}.",
55
54
  "figure.label.detail-none": "tiada",
@@ -79,12 +78,10 @@
79
78
  "figure.text.gizmo-joint-off-axis": "sendi {joint} hanya berputar pada paksi {axis}. gunakan pemegang putar {axis}.",
80
79
  "figure.text.gizmo-size-follows": "saiz {axis} {part} mengikut ukuran lain. ubahnya di bawah saiz dalam tab gerakan.",
81
80
  "figure.text.gizmo-fastening-places": "{part} dilekatkan pada muka bahagian lain, yang menentukan kedudukannya. tanggalkan dahulu untuk menggerakkannya.",
82
- "figure.text.instance-range-can-widen": "diukur semula dengan bahagian semasa: {ranges} mm.",
83
- "figure.text.size-range-too-small": "di bawah {mm} mm pada {axis} bahagian {part} tiada panjang, namun figura diisytiharkan boleh diletakkan lebih kecil, jadi perubahan ini tidak boleh dibuat. gunakan \"ukur semula\" di bawah saiz yang boleh diletakkan.",
84
- "figure.text.size-range-too-large": "di atas {mm} mm pada {axis} bahagian {part} tidak boleh dilukis, namun figura diisytiharkan boleh diletakkan lebih besar, jadi perubahan ini tidak boleh dibuat. gunakan \"ukur semula\" di bawah saiz yang boleh diletakkan.",
85
- "figure.text.size-range-leaves-out-size": "julat {axis} saiz yang boleh diletakkan, {min}–{max} mm, tidak merangkumi saiznya sekarang, {at} mm. ubah julat supaya merangkuminya.",
86
- "figure.text.size-range-from-zero": "saiz {axis} terkecil yang boleh diletakkan mesti lebih daripada 0.",
87
- "figure.text.size-range-part-gone": "pada saiznya sekarang, {at} mm pada {axis}, satu bahagian sudah tiada panjang. ubah pautan atau saiz.",
81
+ "figure.text.size-range-leaves-out-size": "julat {axis} pada lukisan, {range} mm, tidak merangkumi saiznya sekarang, {at} mm.",
82
+ "figure.text.size-range-from-zero": "{axis} terkecil pada lukisan mesti lebih daripada 0.",
83
+ "figure.text.size-range-moved-min": "{axis} terkecil pada lukisan ditukar daripada {from} mm kepada {to} mm.",
84
+ "figure.text.size-range-moved-max": "{axis} terbesar pada lukisan ditukar daripada {from} mm kepada {to} mm.",
88
85
  "figure.text.input-range-size": "saiz rajah {axis} hanya boleh ditetapkan antara {min} dan {max} mm. nilai diberi: {value} mm",
89
86
  "figure.text.input-range": "nilai ini hanya boleh ditetapkan antara {min} dan {max}. nilai diberi: {value}",
90
87
  "figure.text.part-is-referenced": "'{part}' tidak boleh dipadam: bahagian lain menggunakan nilainya seperti sedia ada.",
@@ -263,6 +260,7 @@
263
260
  "figure.button.gizmo-translate": "move",
264
261
  "figure.button.gizmo-rotate": "turn",
265
262
  "figure.button.gizmo-scale": "resize",
263
+ "figure.text.gizmo-same-measure": "pemegang {axes} ialah satu diameter",
266
264
  "figure.text.gizmo-not-own": "this part is placed by another part or by the size, so it cannot be dragged",
267
265
  "figure.label.shown-when": "shown when",
268
266
  "figure.label.shown-always": "always",
@@ -378,7 +376,6 @@
378
376
  "figure.text.trend-stays": "tidak berubah",
379
377
  "figure.text.trend-flat-lines-overlap": "garis mendatar bertindih pada {value}.",
380
378
  "figure.text.cannot-release-now": "belum boleh diterbitkan",
381
- "figure.text.fit-needs-parts": "tiada bahagian untuk dipadankan — tambah bentuk dahulu.",
382
379
  "figure.text.nothing-blocks-release": "tiada apa pada bentuk semasa yang menghalang penerbitan.",
383
380
  "figure.text.verdict-asking": "sedang menyemak…",
384
381
  "figure.text.verdict-not-received": "semakan tidak diterima — {reason}",
@@ -604,7 +601,6 @@
604
601
  "figure.button.propose-room": "Compute bounds",
605
602
  "figure.button.confirm-room": "Declare these bounds",
606
603
  "figure.label.room-undeclared": "not declared yet",
607
- "figure.label.room-declared": "Diisytiharkan sekarang",
608
604
  "figure.label.mounting-face": "Mounting face",
609
605
  "figure.button.clear-mounting-face": "Clear",
610
606
  "figure.text.mounting-face-unchecked-at-center": "tidak disemak untuk figure di tengah",
@@ -737,11 +733,6 @@
737
733
  "figure.label.motion-travel-mm": "julat sendiri (mm)",
738
734
  "figure.label.motion-travel-is": "jarak gerak: {part} · {axis} + {plus} mm",
739
735
  "figure.label.align-share": "jarak dari tengah — nisbah saiz rajah",
740
- "figure.text.link-needs-smaller-range": "dengan pautan ini {part} hilang apabila {axis} rajah di bawah {mm} mm, dan saiz yang diisytihar pergi lebih rendah.",
741
- "figure.button.narrow-range-from": "sempitkan {axis} dari {mm} mm dan pautkan",
742
- "figure.text.link-needs-larger-range": "dengan pautan ini rajah tidak boleh dilukis apabila {axis} melebihi {mm} mm, dan saiz yang diisytihar pergi lebih tinggi.",
743
- "figure.button.narrow-range-to": "sempitkan {axis} hingga {mm} mm dan pautkan",
744
- "figure.text.part-in-declared-space": "'{part}' berada dalam ruang yang diisytihar, jadi ia tidak boleh dipadam begitu sahaja. ia boleh dipadam dengan ruang dimuatkan semula pada bahagian yang tinggal.",
745
736
  "figure.button.change-motion": "ubah gerakan",
746
737
  "figure.button.apply-motion-change": "guna perubahan",
747
738
  "figure.button.cancel-motion-change": "biarkan",
@@ -780,7 +771,6 @@
780
771
  "figure.text.document-nesting-too-deep": "Data rajah bersarang sedalam {at} aras. Sehingga {max} aras diterima.",
781
772
  "figure.text.part-name-has-nested": "Bahagian '{nested}' dinamakan di bawah bahagian ini. Namakan semula bahagian itu dahulu.",
782
773
  "figure.text.recipe-step-refused": "Terhenti pada langkah {step} resipi. {why} ({code})",
783
- "figure.text.removal-space-refitted": "Ruang dipadankan semula dengan bahagian yang tinggal.",
784
774
  "figure.text.placement-intent-floor": "Letakan lantai: bahagian bawah mengekalkan jaraknya sekarang dari lantai (Y=0) apabila saiz berubah. Kedudukannya di atas lantai (X, Z) kekal.",
785
775
  "figure.text.placement-intent-ceiling": "Letakan siling: bahagian atas mengekalkan jaraknya sekarang dari siling (Y=0) apabila saiz berubah. Kedudukannya di bawah siling (X, Z) kekal.",
786
776
  "figure.text.placement-intent-wall": "Letakan dinding: bahagian belakang mengekalkan jaraknya sekarang dari dinding (Z=0) apabila saiz berubah. Kedudukannya pada dinding (X, Y) kekal.",
@@ -812,17 +802,6 @@
812
802
  "figure.text.resize-refused-position-rule": "Kedudukan {axis} bagi {part} ditetapkan oleh input atau ungkapan. Jika digunakan, ia diganti dengan hubungan {place}.",
813
803
  "figure.text.resize-refused-no-face": "{part} tiada muka rata untuk dilekatkan pada {place}.",
814
804
  "figure.text.axis-held-by-rule": "tidak boleh diubah di sini",
815
- "figure.label.room-only-inputs": "Digunakan hanya untuk mengira ruang letakan",
816
- "figure.text.room-only-inputs": "Nilai ini tidak mengalihkan bahagian. Ruang yang diisytiharkan dikira daripadanya.",
817
- "figure.button.room-refit": "Kira semula ruang…",
818
- "figure.label.room-refit": "Kira semula ruang",
819
- "figure.label.room-proposed": "Selepas dikira semula",
820
- "figure.label.room-at-authored": "Saiz dilukis",
821
- "figure.label.room-at-largest": "Saiz terbesar",
822
- "figure.text.room-same": "sama",
823
- "figure.text.room-part-outside": "{part}: {mm} mm di luar pada {axis}",
824
- "figure.text.room-nothing-outside": "tiada bahagian di luar pada saiz yang diukur",
825
- "figure.button.room-refit-confirm": "Kira semula begini",
826
805
  "figure.text.resize-gap-off": "Muka bahagian ini {mm} mm dari satah {place}.",
827
806
  "figure.text.resize-gap-through": "Bahagian ini menembusi satah {place} sejauh {mm} mm.",
828
807
  "figure.button.resize-keep-gap": "{scope}: ikut saiz, kekalkan jarak {mm} mm",
@@ -832,7 +811,6 @@
832
811
  "figure.button.resize-onto-plane-wall": "{scope}: ikut saiz, dibawa ke dinding",
833
812
  "figure.text.resize-refused-gap-choice": "Muka {part} tidak menyentuh satah {place}. Pilih sama ada kekalkan jarak atau bawa ke satah.",
834
813
  "figure.text.resize-replaces": "Jika digunakan, medan {fields} diganti dengan lekatan {place}. Tiada apa-apa bergerak sekarang.",
835
- "figure.text.room-drops": "Mengesahkan membuang medan yang tidak lagi digunakan: {fields}",
836
814
  "figure.button.resize-unfollow": "Kembalikan kepada tetap",
837
815
  "figure.label.resize-pending": "Tindak balas saiz untuk digunakan",
838
816
  "figure.text.resize-already-following": "(sudah mengikut)",
@@ -1180,11 +1158,9 @@
1180
1158
  "figure.title.namespace-setting": "Namespace Figure",
1181
1159
  "figure.label.namespace": "Namespace",
1182
1160
  "figure.label.follows-part-axis": "{axis} {part}",
1183
- "figure.text.size-and-space-declared-to-follow": "saiz rajah ditetapkan daripada bahagiannya, {x} × {y} × {z} mm, dan ruang yang diambil dipadankan dengannya.",
1184
1161
  "figure.button.release-blocked": "{count} menghalang terbitan",
1185
1162
  "figure.label.preview-way-one": "satu",
1186
1163
  "figure.label.preview-way-eight": "pelbagai saiz",
1187
- "figure.text.preview-needs-space": "tetapkan ruang yang diambil untuk mencuba saiz lain.",
1188
1164
  "figure.text.released-figure-not-deletable": "{name} telah diterbitkan dan tidak boleh dipadam. bersarakan dalam butirannya.",
1189
1165
  "figure.label.retired": "bersara",
1190
1166
  "figure.button.retire": "bersarakan",
@@ -1205,7 +1181,7 @@
1205
1181
  "figure.label.board-size": "saiz pada lukisan",
1206
1182
  "figure.text.board-size-fixed": "Pada lukisan ia sentiasa dilukis pada {x} × {y} × {z} mm.",
1207
1183
  "figure.text.board-size-fixed-explained": "Tekan untuk membolehkan lukisan mengubah saiz figure ini. Pilih bahagian dan tekan «muatkan pada saiz figure» supaya bahagian itu turut membesar.",
1208
- "figure.text.board-size-range-explained": "Lukisan boleh mengubah saiznya dalam julat ini. Hanya bahagian yang mengikut saiznya turut membesar; yang lain kekal.",
1184
+ "figure.text.board-size-range-explained": "Lukisan boleh mengubah saiznya dalam julat ini. Medan kosong ialah setakat yang dibenarkan bahagian; nombor yang ditaip menyempitkannya ke nilai itu. Hanya bahagian yang mengikut saiznya turut membesar; yang lain kekal.",
1209
1185
  "figure.text.board-size-followers": "bahagian yang berubah mengikut saiznya: {parts}",
1210
1186
  "figure.text.board-size-followers-more": "{first} dan {rest} lagi",
1211
1187
  "figure.text.board-size-no-followers": "tiada bahagian berubah mengikut saiznya"
@@ -12,10 +12,8 @@
12
12
  "figure.button.delete-figure": "delete",
13
13
  "figure.button.discard": "discard",
14
14
  "figure.button.duplicate-part": "duplicate",
15
- "figure.button.fit-base-to-parts": "适配部件",
16
15
  "figure.button.fix-position": "固定在此",
17
16
  "figure.button.scale-position": "按比例",
18
- "figure.button.remeasure-range": "重新测量",
19
17
  "figure.button.scale-uniformly": "按单一比例放大",
20
18
  "figure.label.group-menu": "更多操作",
21
19
  "figure.label.group-more": "更多",
@@ -49,7 +47,8 @@
49
47
  "figure.text.catalog-needs-a-save": "保存后即可设置。",
50
48
  "figure.text.fasten-would-loop": "该部件已固定在此部件上,不能反向固定。",
51
49
  "figure.text.follow-would-loop": "该尺寸已跟随此部件,二者不能互相跟随。",
52
- "figure.text.links-need-a-box": "尺寸跟随适用于盒形部件,固定适用于盒形和圆柱部件。",
50
+ "figure.text.part-cannot-follow": "此部件不能跟随尺寸。",
51
+ "figure.text.part-cannot-fasten": "此部件不能连接。",
53
52
  "figure.text.scale-position-explained": "把当前位置保持为图形尺寸的比例——尺寸加倍,距离也加倍。",
54
53
  "figure.text.repeat-member": "重复 {name} 得到的 {count} 个中的第 {index} 个。",
55
54
  "figure.label.detail-none": "无",
@@ -79,12 +78,10 @@
79
78
  "figure.text.gizmo-joint-off-axis": "{joint} 关节只绕 {axis} 轴旋转。请使用 {axis} 旋转手柄。",
80
79
  "figure.text.gizmo-size-follows": "{part} 的 {axis} 尺寸跟随其他尺寸。请在运动标签的尺寸中修改。",
81
80
  "figure.text.gizmo-fastening-places": "{part} 贴在另一个部件的面上,由该面决定位置。要移动请先分离。",
82
- "figure.text.instance-range-can-widen": "按当前部件重新测量为 {ranges} mm。",
83
- "figure.text.size-range-too-small": "此图形的 {axis} 小于 {mm} mm 时 {part} 部件长度为 0,但声明可以放得更小,因此无法进行此更改。请在「可放置的尺寸」中重新测量。",
84
- "figure.text.size-range-too-large": "此图形的 {axis} 大于 {mm} mm 时无法绘制 {part} 部件,但声明可以放得更大,因此无法进行此更改。请在「可放置的尺寸」中重新测量。",
85
- "figure.text.size-range-leaves-out-size": "可放置尺寸的 {axis} 范围 {min}~{max} mm 不包含当前尺寸 {at} mm。请修改范围使其包含当前尺寸。",
86
- "figure.text.size-range-from-zero": "可放置尺寸的 {axis} 最小值必须大于 0。",
87
- "figure.text.size-range-part-gone": "在当前尺寸 {at} mm({axis} 轴)下,已有部件长度为 0。请修改链接或尺寸。",
81
+ "figure.text.size-range-leaves-out-size": "图纸上的 {axis} 范围 {range} mm 不包含当前尺寸 {at} mm。",
82
+ "figure.text.size-range-from-zero": "图纸上的 {axis} 最小值必须大于 0。",
83
+ "figure.text.size-range-moved-min": "图纸上的 {axis} 最小值已从 {from} mm 改为 {to} mm。",
84
+ "figure.text.size-range-moved-max": "图纸上的 {axis} 最大值已从 {from} mm 改为 {to} mm。",
88
85
  "figure.text.input-range-size": "图形尺寸 {axis} 只能设置在 {min} 到 {max} mm 之间。输入值:{value} mm",
89
86
  "figure.text.input-range": "此值只能设置在 {min} 到 {max} 之间。输入值:{value}",
90
87
  "figure.text.part-is-referenced": "其他部件直接使用 '{part}' 的值,无法删除。",
@@ -263,6 +260,7 @@
263
260
  "figure.button.gizmo-translate": "move",
264
261
  "figure.button.gizmo-rotate": "turn",
265
262
  "figure.button.gizmo-scale": "resize",
263
+ "figure.text.gizmo-same-measure": "{axes} 手柄是同一直径",
266
264
  "figure.text.gizmo-not-own": "this part is placed by another part or by the size, so it cannot be dragged",
267
265
  "figure.label.shown-when": "shown when",
268
266
  "figure.label.shown-always": "always",
@@ -378,7 +376,6 @@
378
376
  "figure.text.trend-stays": "不变",
379
377
  "figure.text.trend-flat-lines-overlap": "平线在 {value} 处重叠。",
380
378
  "figure.text.cannot-release-now": "现在无法发布",
381
- "figure.text.fit-needs-parts": "没有可适配的部件,请先添加形状。",
382
379
  "figure.text.nothing-blocks-release": "按当前形状,没有阻止发布的问题。",
383
380
  "figure.text.verdict-asking": "正在检查…",
384
381
  "figure.text.verdict-not-received": "未能获得检查结果 — {reason}",
@@ -604,7 +601,6 @@
604
601
  "figure.button.propose-room": "Compute bounds",
605
602
  "figure.button.confirm-room": "Declare these bounds",
606
603
  "figure.label.room-undeclared": "not declared yet",
607
- "figure.label.room-declared": "当前声明",
608
604
  "figure.label.mounting-face": "Mounting face",
609
605
  "figure.button.clear-mounting-face": "Clear",
610
606
  "figure.text.mounting-face-unchecked-at-center": "中心放置,不检查",
@@ -737,11 +733,6 @@
737
733
  "figure.label.motion-travel-mm": "自身范围 (mm)",
738
734
  "figure.label.motion-travel-is": "行程: {part} · {axis} + {plus} mm",
739
735
  "figure.label.align-share": "距中心 — 按图形尺寸比例",
740
- "figure.text.link-needs-smaller-range": "此连接下,图形 {axis} 小于 {mm} mm 时 {part} 会消失,而声明的可放置尺寸低于此值。",
741
- "figure.button.narrow-range-from": "将 {axis} 收窄为 {mm} mm 起并连接",
742
- "figure.text.link-needs-larger-range": "此连接下,图形 {axis} 大于 {mm} mm 时无法绘制,而声明的可放置尺寸高于此值。",
743
- "figure.button.narrow-range-to": "将 {axis} 收窄为 {mm} mm 以内并连接",
744
- "figure.text.part-in-declared-space": "'{part}' 在已声明的空间内,不能直接删除。可以在删除的同时让空间重新适配剩余部件。",
745
736
  "figure.button.change-motion": "修改运动",
746
737
  "figure.button.apply-motion-change": "应用修改",
747
738
  "figure.button.cancel-motion-change": "不修改",
@@ -780,7 +771,6 @@
780
771
  "figure.text.document-nesting-too-deep": "图形数据嵌套了 {at} 层,最多接受 {max} 层。",
781
772
  "figure.text.part-name-has-nested": "部件 '{nested}' 的名称位于此部件名称之下。请先重命名该部件。",
782
773
  "figure.text.recipe-step-refused": "配方在第 {step} 步停止。{why} ({code})",
783
- "figure.text.removal-space-refitted": "空间已重新贴合剩余部件。",
784
774
  "figure.text.placement-intent-floor": "地面放置:尺寸变化时,底面与地面(Y=0)保持当前间距。在地面上的位置(X、Z)不变。",
785
775
  "figure.text.placement-intent-ceiling": "天花板放置:尺寸变化时,顶面与天花板(Y=0)保持当前间距。在天花板下的位置(X、Z)不变。",
786
776
  "figure.text.placement-intent-wall": "墙面放置:尺寸变化时,背面与墙(Z=0)保持当前间距。在墙上的位置(X、Y)不变。",
@@ -812,17 +802,6 @@
812
802
  "figure.text.resize-refused-position-rule": "{part} 的 {axis} 位置由输入值或表达式决定。应用后将改由与{place}的关系决定位置。",
813
803
  "figure.text.resize-refused-no-face": "{part} 没有可附着到{place}的平面。",
814
804
  "figure.text.axis-held-by-rule": "此处不能修改的值",
815
- "figure.label.room-only-inputs": "仅用于计算放置空间",
816
- "figure.text.room-only-inputs": "这些值不会移动部件。声明的空间由这些值计算得出。",
817
- "figure.button.room-refit": "重新计算空间…",
818
- "figure.label.room-refit": "重新计算空间",
819
- "figure.label.room-proposed": "重新计算后",
820
- "figure.label.room-at-authored": "绘制尺寸",
821
- "figure.label.room-at-largest": "最大尺寸",
822
- "figure.text.room-same": "相同",
823
- "figure.text.room-part-outside": "{part}:沿 {axis} 方向超出 {mm} mm",
824
- "figure.text.room-nothing-outside": "在测量的尺寸下没有部件超出",
825
- "figure.button.room-refit-confirm": "按此重新计算",
826
805
  "figure.text.resize-gap-off": "此部件的面距{place}基准面 {mm} mm。",
827
806
  "figure.text.resize-gap-through": "此部件穿过{place}基准面 {mm} mm。",
828
807
  "figure.button.resize-keep-gap": "{scope}:保持 {mm} mm 间距并跟随",
@@ -832,7 +811,6 @@
832
811
  "figure.button.resize-onto-plane-wall": "{scope}:对齐墙面附着并跟随",
833
812
  "figure.text.resize-refused-gap-choice": "{part} 的面未接触{place}基准面。请选择保持间距或对齐基准面。",
834
813
  "figure.text.resize-replaces": "应用后,{fields} 输入将改由{place}附着决定。当前外观不变。",
835
- "figure.text.room-drops": "确认后将删除不再使用的输入:{fields}",
836
814
  "figure.button.resize-unfollow": "改回固定",
837
815
  "figure.label.resize-pending": "要应用的尺寸跟随",
838
816
  "figure.text.resize-already-following": "(已跟随)",
@@ -1180,11 +1158,9 @@
1180
1158
  "figure.title.namespace-setting": "Figure 命名空间",
1181
1159
  "figure.label.namespace": "命名空间",
1182
1160
  "figure.label.follows-part-axis": "{part} 的 {axis}",
1183
- "figure.text.size-and-space-declared-to-follow": "已按部件将图形尺寸设为 {x} × {y} × {z} mm,并按部件确定了占用空间。",
1184
1161
  "figure.button.release-blocked": "无法发布 {count}",
1185
1162
  "figure.label.preview-way-one": "单台",
1186
1163
  "figure.label.preview-way-eight": "多种尺寸",
1187
- "figure.text.preview-needs-space": "确定占用空间后即可尝试其他尺寸。",
1188
1164
  "figure.text.released-figure-not-deletable": "{name} 已发布,无法删除。请在详情中将其退役。",
1189
1165
  "figure.label.retired": "已退役",
1190
1166
  "figure.button.retire": "退役",
@@ -1205,7 +1181,7 @@
1205
1181
  "figure.label.board-size": "图纸上的尺寸",
1206
1182
  "figure.text.board-size-fixed": "放到图纸上时始终按 {x} × {y} × {z} mm 绘制。",
1207
1183
  "figure.text.board-size-fixed-explained": "按下后可在图纸上调整此图形的尺寸。选中部件并按「适配图形尺寸」,该部件会一起伸缩。",
1208
- "figure.text.board-size-range-explained": "可在图纸上按此范围调整尺寸。只有跟随尺寸的部件会一起伸缩,其余保持不变。",
1184
+ "figure.text.board-size-range-explained": "可在图纸上按此范围调整尺寸。空栏表示部件允许的范围,输入数字则缩小到该值。只有跟随尺寸的部件会一起伸缩,其余保持不变。",
1209
1185
  "figure.text.board-size-followers": "随尺寸变化的部件:{parts}",
1210
1186
  "figure.text.board-size-followers-more": "{first} 等 {rest} 个",
1211
1187
  "figure.text.board-size-no-followers": "没有随尺寸变化的部件"
@@ -1,51 +0,0 @@
1
- import { proposeFigureOccupancy, type FigureAsset, type FigureAuthoringAction, type FigureRoomRefit } from '@hatiolab/figure-model'
2
-
3
- /**
4
- * 「부품에 맞추기」의 짝 — 공간을 지금 부품에서 다시 선언하는 한 걸음.
5
- *
6
- * figure-model 은 이것을 둘로 나눠 두었다: 제안(`proposeFigureOccupancy`)은 무엇이 선언될지를 보여 주고, 확인
7
- * (`declare-occupancy`)은 그 제안이 읽은 모양 그대로일 때만 받는다. 저작자가 누른 단추가 그 확인이다. 제안과 확인
8
- * 사이에 모델이 바뀌면 figure-model 이 `OCCUPANCY_STALE` 로 거절하므로, 여기서는 누른 순간의 원본으로 둘을 한
9
- * 번에 만든다.
10
- *
11
- * 범위는 움직임 전체다(`over: 'range'`). 쉬는 자세만 담으면 움직이는 부품이 선언한 공간을 넘어 발행 판정이 다시
12
- * 막는다. 배치 기준은 이미 선언된 것을 지키고, 처음 선언하는 도형은 바닥에 선다고 둔다 — 새로 만든 도형의
13
- * 모델러 기본이 바닥이다.
14
- */
15
- export function occupancyFromParts(
16
- asset: FigureAsset,
17
- /** A different face to place it by — the properties tab's choice. Absent keeps the declared one. */
18
- placement?: 'floor' | 'ceiling' | 'center' | 'wall'
19
- ): Extract<FigureAuthoringAction, { kind: 'declare-occupancy' }> {
20
- return {
21
- kind: 'declare-occupancy',
22
- proposal: proposeFigureOccupancy(asset, { over: 'range' }),
23
- /* The placement is the figure's own now (ADR-0097): named only when a different one is asked for. */
24
- ...(placement && placement !== (asset.placement ?? 'floor') ? { placement } : {})
25
- }
26
- }
27
-
28
- /**
29
- * 공간 다시 계산의 확인 표 — 선언된 공간과 제안된 공간을 그린 크기와 가장 큰 크기에서, 축마다 한 줄로. 같은 줄은
30
- * 같다고 적는다. 밖으로 나간 부품은 figure-model 이 잰 것만 적는다 — 재지 않은 것을 「넘친다」고 단정하지 않는다
31
- * (설계자 2026-09-27).
32
- */
33
- export interface RoomRefitRow {
34
- at: 'authored' | 'largest'
35
- axis: 'x' | 'y' | 'z'
36
- declared: string
37
- proposed: string
38
- same: boolean
39
- }
40
- export function roomRefitRowsOf(refit: FigureRoomRefit): RoomRefitRow[] {
41
- const span = (b: { min: number; max: number }) => `${Math.round(b.min)} ~ ${Math.round(b.max)}`
42
- const rows: RoomRefitRow[] = []
43
- for (const at of ['authored', 'largest'] as const) {
44
- const declared = refit.declared[at],
45
- proposed = refit.proposed[at]
46
- if (!declared || !proposed) continue
47
- for (const axis of ['x', 'y', 'z'] as const)
48
- rows.push({ at, axis, declared: span(declared[axis]), proposed: span(proposed[axis]), same: span(declared[axis]) === span(proposed[axis]) })
49
- }
50
- return rows
51
- }
@@ -1,31 +0,0 @@
1
- import { type FigureAsset, type FigureAuthoringAction, type FigureRoomRefit } from '@hatiolab/figure-model';
2
- /**
3
- * 「부품에 맞추기」의 짝 — 공간을 지금 부품에서 다시 선언하는 한 걸음.
4
- *
5
- * figure-model 은 이것을 둘로 나눠 두었다: 제안(`proposeFigureOccupancy`)은 무엇이 선언될지를 보여 주고, 확인
6
- * (`declare-occupancy`)은 그 제안이 읽은 모양 그대로일 때만 받는다. 저작자가 누른 단추가 그 확인이다. 제안과 확인
7
- * 사이에 모델이 바뀌면 figure-model 이 `OCCUPANCY_STALE` 로 거절하므로, 여기서는 누른 순간의 원본으로 둘을 한
8
- * 번에 만든다.
9
- *
10
- * 범위는 움직임 전체다(`over: 'range'`). 쉬는 자세만 담으면 움직이는 부품이 선언한 공간을 넘어 발행 판정이 다시
11
- * 막는다. 배치 기준은 이미 선언된 것을 지키고, 처음 선언하는 도형은 바닥에 선다고 둔다 — 새로 만든 도형의
12
- * 모델러 기본이 바닥이다.
13
- */
14
- export declare function occupancyFromParts(asset: FigureAsset,
15
- /** A different face to place it by — the properties tab's choice. Absent keeps the declared one. */
16
- placement?: 'floor' | 'ceiling' | 'center' | 'wall'): Extract<FigureAuthoringAction, {
17
- kind: 'declare-occupancy';
18
- }>;
19
- /**
20
- * 공간 다시 계산의 확인 표 — 선언된 공간과 제안된 공간을 그린 크기와 가장 큰 크기에서, 축마다 한 줄로. 같은 줄은
21
- * 같다고 적는다. 밖으로 나간 부품은 figure-model 이 잰 것만 적는다 — 재지 않은 것을 「넘친다」고 단정하지 않는다
22
- * (설계자 2026-09-27).
23
- */
24
- export interface RoomRefitRow {
25
- at: 'authored' | 'largest';
26
- axis: 'x' | 'y' | 'z';
27
- declared: string;
28
- proposed: string;
29
- same: boolean;
30
- }
31
- export declare function roomRefitRowsOf(refit: FigureRoomRefit): RoomRefitRow[];
@@ -1,36 +0,0 @@
1
- import { proposeFigureOccupancy } from '@hatiolab/figure-model';
2
- /**
3
- * 「부품에 맞추기」의 짝 — 공간을 지금 부품에서 다시 선언하는 한 걸음.
4
- *
5
- * figure-model 은 이것을 둘로 나눠 두었다: 제안(`proposeFigureOccupancy`)은 무엇이 선언될지를 보여 주고, 확인
6
- * (`declare-occupancy`)은 그 제안이 읽은 모양 그대로일 때만 받는다. 저작자가 누른 단추가 그 확인이다. 제안과 확인
7
- * 사이에 모델이 바뀌면 figure-model 이 `OCCUPANCY_STALE` 로 거절하므로, 여기서는 누른 순간의 원본으로 둘을 한
8
- * 번에 만든다.
9
- *
10
- * 범위는 움직임 전체다(`over: 'range'`). 쉬는 자세만 담으면 움직이는 부품이 선언한 공간을 넘어 발행 판정이 다시
11
- * 막는다. 배치 기준은 이미 선언된 것을 지키고, 처음 선언하는 도형은 바닥에 선다고 둔다 — 새로 만든 도형의
12
- * 모델러 기본이 바닥이다.
13
- */
14
- export function occupancyFromParts(asset,
15
- /** A different face to place it by — the properties tab's choice. Absent keeps the declared one. */
16
- placement) {
17
- return {
18
- kind: 'declare-occupancy',
19
- proposal: proposeFigureOccupancy(asset, { over: 'range' }),
20
- /* The placement is the figure's own now (ADR-0097): named only when a different one is asked for. */
21
- ...(placement && placement !== (asset.placement ?? 'floor') ? { placement } : {})
22
- };
23
- }
24
- export function roomRefitRowsOf(refit) {
25
- const span = (b) => `${Math.round(b.min)} ~ ${Math.round(b.max)}`;
26
- const rows = [];
27
- for (const at of ['authored', 'largest']) {
28
- const declared = refit.declared[at], proposed = refit.proposed[at];
29
- if (!declared || !proposed)
30
- continue;
31
- for (const axis of ['x', 'y', 'z'])
32
- rows.push({ at, axis, declared: span(declared[axis]), proposed: span(proposed[axis]), same: span(declared[axis]) === span(proposed[axis]) });
33
- }
34
- return rows;
35
- }
36
- //# sourceMappingURL=occupancy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"occupancy.js","sourceRoot":"","sources":["../../client/modeller/occupancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAsE,MAAM,wBAAwB,CAAA;AAEnI;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAkB;AAClB,oGAAoG;AACpG,SAAmD;IAEnD,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,sBAAsB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1D,qGAAqG;QACrG,GAAG,CAAC,SAAS,IAAI,SAAS,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClF,CAAA;AACH,CAAC;AAcD,MAAM,UAAU,eAAe,CAAC,KAAsB;IACpD,MAAM,IAAI,GAAG,CAAC,CAA+B,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;IAC/F,MAAM,IAAI,GAAmB,EAAE,CAAA;IAC/B,KAAK,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAU,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;YAAE,SAAQ;QACpC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU;YACzC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;IAChJ,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import { proposeFigureOccupancy, type FigureAsset, type FigureAuthoringAction, type FigureRoomRefit } from '@hatiolab/figure-model'\n\n/**\n * 「부품에 맞추기」의 짝 — 공간을 지금 부품에서 다시 선언하는 한 걸음.\n *\n * figure-model 은 이것을 둘로 나눠 두었다: 제안(`proposeFigureOccupancy`)은 무엇이 선언될지를 보여 주고, 확인\n * (`declare-occupancy`)은 그 제안이 읽은 모양 그대로일 때만 받는다. 저작자가 누른 단추가 그 확인이다. 제안과 확인\n * 사이에 모델이 바뀌면 figure-model 이 `OCCUPANCY_STALE` 로 거절하므로, 여기서는 누른 순간의 원본으로 둘을 한\n * 번에 만든다.\n *\n * 범위는 움직임 전체다(`over: 'range'`). 쉬는 자세만 담으면 움직이는 부품이 선언한 공간을 넘어 발행 판정이 다시\n * 막는다. 배치 기준은 이미 선언된 것을 지키고, 처음 선언하는 도형은 바닥에 선다고 둔다 — 새로 만든 도형의\n * 모델러 기본이 바닥이다.\n */\nexport function occupancyFromParts(\n asset: FigureAsset,\n /** A different face to place it by — the properties tab's choice. Absent keeps the declared one. */\n placement?: 'floor' | 'ceiling' | 'center' | 'wall'\n): Extract<FigureAuthoringAction, { kind: 'declare-occupancy' }> {\n return {\n kind: 'declare-occupancy',\n proposal: proposeFigureOccupancy(asset, { over: 'range' }),\n /* The placement is the figure's own now (ADR-0097): named only when a different one is asked for. */\n ...(placement && placement !== (asset.placement ?? 'floor') ? { placement } : {})\n }\n}\n\n/**\n * 공간 다시 계산의 확인 표 — 선언된 공간과 제안된 공간을 그린 크기와 가장 큰 크기에서, 축마다 한 줄로. 같은 줄은\n * 같다고 적는다. 밖으로 나간 부품은 figure-model 이 잰 것만 적는다 — 재지 않은 것을 「넘친다」고 단정하지 않는다\n * (설계자 2026-09-27).\n */\nexport interface RoomRefitRow {\n at: 'authored' | 'largest'\n axis: 'x' | 'y' | 'z'\n declared: string\n proposed: string\n same: boolean\n}\nexport function roomRefitRowsOf(refit: FigureRoomRefit): RoomRefitRow[] {\n const span = (b: { min: number; max: number }) => `${Math.round(b.min)} ~ ${Math.round(b.max)}`\n const rows: RoomRefitRow[] = []\n for (const at of ['authored', 'largest'] as const) {\n const declared = refit.declared[at],\n proposed = refit.proposed[at]\n if (!declared || !proposed) continue\n for (const axis of ['x', 'y', 'z'] as const)\n rows.push({ at, axis, declared: span(declared[axis]), proposed: span(proposed[axis]), same: span(declared[axis]) === span(proposed[axis]) })\n }\n return rows\n}\n"]}
@@ -1,53 +0,0 @@
1
- /*
2
- * **화면에서 발행할 수 있다** (ADR-0087 5단계의 선행 조건, 2026-09-24).
3
- *
4
- * 모델러에는 발행 패널이 없었다 — 저장은 되고 발행 · 판본 · 복원 · 판정을 볼 자리가 없었다. 복사본 검증의
5
- * 「32 개 발행 통과」는 스크립트가 서버의 문을 직접 부른 것이지 화면이 아니었다. 그리고 새로 만든 도형은 전부
6
- * 「공간 선언 없음」으로 발행이 막히는데, 그 선언을 할 단추가 화면 어디에도 없었다. 5단계에서 `figure-modeller`
7
- * 가 이 화면으로 바뀌면 새 도형은 영영 발행할 수 없었다.
8
- *
9
- * 두 축을 본다: 조치가 **정말로** 판정을 푸는가(figure-model 의 게이트로 잰다), 그리고 화면이 그 조치와 패널을
10
- * 실제로 잇는가.
11
- */
12
- import { test } from 'node:test'
13
- import assert from 'node:assert/strict'
14
-
15
- import {
16
- addFigureBox,
17
- applyFigureAuthoring,
18
- createFigureAsset,
19
- inspectFigureAsset,
20
- proposeFigureOccupancy,
21
- serializeFigureAsset
22
- } from '@hatiolab/figure-model'
23
-
24
- import { occupancyFromParts } from '../client/modeller/occupancy.ts'
25
-
26
- const codes = (asset: Parameters<typeof inspectFigureAsset>[0]) => inspectFigureAsset(asset).violations.map(v => v.code)
27
-
28
- test('새로 만든 도형의 「공간 선언 없음」을 「부품에 맞추기」 한 번이 푼다', () => {
29
- let asset = createFigureAsset('Probe')
30
- asset = addFigureBox(asset, { id: 'body', size: { x: 100, y: 100, z: 100 }, position: { x: 0, y: 50, z: 0 } })
31
- assert.deepEqual(codes(asset), ['OCCUPANCY_UNDECLARED'], '전제: 선언 없는 도형은 막힌다')
32
-
33
- const fitted = applyFigureAuthoring(asset, occupancyFromParts(asset))
34
-
35
- assert.deepEqual(codes(fitted), [])
36
- assert.equal(fitted.placement ?? 'floor', 'floor', '처음 선언하는 도형은 바닥에 선다')
37
- assert.equal('placement' in (fitted.occupancy ?? {}), false, '배치는 공간이 아니라 도형 자신의 설정 (ADR-0097)')
38
- })
39
-
40
- test('선언한 공간을 넘은 부품도 같은 한 번으로 풀리고, 배치 기준은 지킨다', () => {
41
- let asset = createFigureAsset('Probe')
42
- asset = addFigureBox(asset, { id: 'body', size: { x: 100, y: 100, z: 100 }, position: { x: 0, y: 50, z: 0 } })
43
- asset = applyFigureAuthoring(asset, { kind: 'declare-occupancy', proposal: proposeFigureOccupancy(asset, { over: 'range' }), placement: 'center' })
44
- asset = addFigureBox(asset, { id: 'arm', size: { x: 100, y: 100, z: 100 }, position: { x: 900, y: 50, z: 0 } })
45
- assert.ok(codes(asset).includes('PART_OUTSIDE_OCCUPANCY'), '전제: 넘은 부품은 막힌다')
46
-
47
- const fitted = applyFigureAuthoring(asset, occupancyFromParts(asset))
48
-
49
- assert.deepEqual(codes(fitted), [])
50
- assert.equal(fitted.placement, 'center', '이미 선언된 배치 기준을 바꾸지 않는다')
51
- })
52
-
53
- /* The page hangs the panel and takes what it sends -- fit, released, reverted -- checked in test/browser/product-page.check.mjs. */