@things-factory/figure-ui 10.1.16 → 10.1.17

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 (77) hide show
  1. package/client/modeller/figure-animations.ts +12 -12
  2. package/client/modeller/figure-canvas.ts +32 -48
  3. package/client/modeller/figure-capabilities.ts +10 -10
  4. package/client/modeller/figure-inspector.ts +39 -28
  5. package/client/modeller/figure-parts.ts +1 -1
  6. package/client/modeller/figure-preview.ts +122 -25
  7. package/client/modeller/figure-report.ts +24 -6
  8. package/client/modeller/figure-settings.ts +45 -2
  9. package/client/modeller/figure-side.ts +6 -6
  10. package/client/modeller/figure-source.ts +52 -32
  11. package/client/modeller/figure-thumbnail.ts +5 -5
  12. package/client/modeller/figure-view.ts +53 -0
  13. package/client/modeller/part-edits.ts +36 -36
  14. package/client/modeller/proposal.ts +25 -4
  15. package/client/pages/figure-modeller-page.ts +64 -58
  16. package/dist-client/modeller/figure-animations.d.ts +4 -4
  17. package/dist-client/modeller/figure-animations.js +10 -10
  18. package/dist-client/modeller/figure-animations.js.map +1 -1
  19. package/dist-client/modeller/figure-canvas.d.ts +7 -7
  20. package/dist-client/modeller/figure-canvas.js +27 -40
  21. package/dist-client/modeller/figure-canvas.js.map +1 -1
  22. package/dist-client/modeller/figure-capabilities.d.ts +2 -2
  23. package/dist-client/modeller/figure-capabilities.js +9 -9
  24. package/dist-client/modeller/figure-capabilities.js.map +1 -1
  25. package/dist-client/modeller/figure-inspector.d.ts +16 -5
  26. package/dist-client/modeller/figure-inspector.js +38 -27
  27. package/dist-client/modeller/figure-inspector.js.map +1 -1
  28. package/dist-client/modeller/figure-parts.d.ts +1 -1
  29. package/dist-client/modeller/figure-parts.js +1 -1
  30. package/dist-client/modeller/figure-parts.js.map +1 -1
  31. package/dist-client/modeller/figure-preview.d.ts +39 -0
  32. package/dist-client/modeller/figure-preview.js +112 -23
  33. package/dist-client/modeller/figure-preview.js.map +1 -1
  34. package/dist-client/modeller/figure-report.d.ts +9 -0
  35. package/dist-client/modeller/figure-report.js +23 -5
  36. package/dist-client/modeller/figure-report.js.map +1 -1
  37. package/dist-client/modeller/figure-settings.js +42 -2
  38. package/dist-client/modeller/figure-settings.js.map +1 -1
  39. package/dist-client/modeller/figure-side.d.ts +2 -2
  40. package/dist-client/modeller/figure-side.js +5 -5
  41. package/dist-client/modeller/figure-side.js.map +1 -1
  42. package/dist-client/modeller/figure-source.d.ts +17 -15
  43. package/dist-client/modeller/figure-source.js +40 -21
  44. package/dist-client/modeller/figure-source.js.map +1 -1
  45. package/dist-client/modeller/figure-thumbnail.d.ts +2 -2
  46. package/dist-client/modeller/figure-thumbnail.js +3 -3
  47. package/dist-client/modeller/figure-thumbnail.js.map +1 -1
  48. package/dist-client/modeller/figure-view.d.ts +45 -0
  49. package/dist-client/modeller/figure-view.js +27 -0
  50. package/dist-client/modeller/figure-view.js.map +1 -1
  51. package/dist-client/modeller/part-edits.d.ts +16 -16
  52. package/dist-client/modeller/part-edits.js +35 -35
  53. package/dist-client/modeller/part-edits.js.map +1 -1
  54. package/dist-client/modeller/proposal.d.ts +1 -1
  55. package/dist-client/modeller/proposal.js +15 -3
  56. package/dist-client/modeller/proposal.js.map +1 -1
  57. package/dist-client/pages/figure-modeller-page.d.ts +9 -10
  58. package/dist-client/pages/figure-modeller-page.js +60 -54
  59. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  60. package/dist-client/tsconfig.tsbuildinfo +1 -1
  61. package/dist-server/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +4 -4
  63. package/test/ai-proposal-contract.test.ts +393 -12
  64. package/test/expect.ts +55 -0
  65. package/test/figure-source.test.ts +562 -0
  66. package/test/i18n-prefix-guard.test.ts +1 -1
  67. package/{client/modeller → test}/part-edits.test.ts +50 -45
  68. package/translations/en.json +31 -28
  69. package/translations/ja.json +16 -21
  70. package/translations/ko.json +41 -38
  71. package/translations/ms.json +16 -21
  72. package/translations/zh.json +16 -21
  73. package/client/modeller/figure-ask.ts +0 -265
  74. package/client/modeller/figure-source.test.ts +0 -352
  75. package/dist-client/modeller/figure-ask.d.ts +0 -40
  76. package/dist-client/modeller/figure-ask.js +0 -282
  77. package/dist-client/modeller/figure-ask.js.map +0 -1
@@ -3,12 +3,7 @@
3
3
  "figure.button.add-clip": "clip 추가",
4
4
  "figure.button.add-key": "키 추가",
5
5
  "figure.button.ask": "요청",
6
- "figure.label.candidate-review": "후보 검토 근거",
7
- "figure.text.proposal-feedback-note": "다음 제안에 반영할 메모 (현재 세션에만 사용)",
8
- "figure.text.proposal-feedback-placeholder": "예: 실루엣은 유지하되 포트가 더 잘 보이게",
9
- "figure.text.tools-explained": "맞추기는 위치·크기·회전을 직접 입력한 뒤 빠르게 정렬하는 도구입니다. 왼쪽부터 X 가운데, Z 가운데, 바닥에 붙이기, X 대칭, Z 대칭, 눈금 맞춤입니다. 아이콘 위에 마우스를 올리면 각 동작을 다시 확인할 수 있습니다.",
10
- "figure.text.palette-purpose-explained": "색 이름이 아니라 이 부품이 화면에서 맡을 역할을 고릅니다.",
11
- "figure.button.attach-a-picture": "이미지",
6
+ "figure.button.cancel": "취소",
12
7
  "figure.button.center-x": "X 가운데",
13
8
  "figure.button.center-z": "Z 가운데",
14
9
  "figure.button.close": "닫기",
@@ -22,29 +17,30 @@
22
17
  "figure.button.new-figure": "새 Figure",
23
18
  "figure.button.pivot-clear": "제 중심으로",
24
19
  "figure.button.pivot-set": "적기",
20
+ "figure.button.redo": "다시 실행",
25
21
  "figure.button.release-figure": "발행하기",
26
22
  "figure.button.remove": "삭제",
27
23
  "figure.button.remove-part": "삭제",
28
24
  "figure.button.reset-view": "처음으로",
29
25
  "figure.button.revert": "되돌리기",
30
26
  "figure.button.save": "저장",
31
- "figure.button.undo": "실행 취소",
32
- "figure.button.redo": "다시 실행",
33
27
  "figure.button.see-the-trend-chart": "추이 그래프 보기",
34
28
  "figure.button.snap": "눈금에",
35
29
  "figure.button.take-n-changes": "{n}개 적용",
36
30
  "figure.button.to-floor": "바닥에",
31
+ "figure.button.undo": "실행 취소",
37
32
  "figure.label.accepts": "받는 것",
38
33
  "figure.label.anchor": "붙잡는 면",
34
+ "figure.label.anchor-advanced": "고급 비율 유지",
39
35
  "figure.label.anchor-aspect-x": "x 축이 커지는 만큼만 커진다 (비율 유지)",
40
36
  "figure.label.anchor-aspect-y": "y 축이 커지는 만큼만 커진다 (비율 유지)",
41
37
  "figure.label.anchor-aspect-z": "z 축이 커지는 만큼만 커진다 (비율 유지)",
42
38
  "figure.label.anchor-auto": "자동 ({rule})",
43
- "figure.label.anchor-advanced": "고급 비율 유지",
44
- "figure.label.anchor-choice-auto": "자동",
39
+ "figure.label.anchor-center": "가운데에 남고 크기는 그대로",
45
40
  "figure.label.anchor-choice-aspect-x": "X 비율 유지",
46
41
  "figure.label.anchor-choice-aspect-y": "Y 비율 유지",
47
42
  "figure.label.anchor-choice-aspect-z": "Z 비율 유지",
43
+ "figure.label.anchor-choice-auto": "자동",
48
44
  "figure.label.anchor-choice-center": "가운데 고정",
49
45
  "figure.label.anchor-choice-max-x": "오른쪽 면",
50
46
  "figure.label.anchor-choice-max-y": "위 면",
@@ -54,7 +50,6 @@
54
50
  "figure.label.anchor-choice-min-z": "뒤 면",
55
51
  "figure.label.anchor-choice-scale": "함께 확대",
56
52
  "figure.label.anchor-choice-span": "양쪽 채움",
57
- "figure.label.anchor-center": "가운데에 남고 크기는 그대로",
58
53
  "figure.label.anchor-max": "큰 쪽 면에 붙어 있는다",
59
54
  "figure.label.anchor-max-x": "오른쪽 면에 붙어 있는다",
60
55
  "figure.label.anchor-max-y": "위 면에 붙어 있는다",
@@ -66,11 +61,7 @@
66
61
  "figure.label.anchor-scale": "상자와 함께 커진다",
67
62
  "figure.label.anchor-span": "양쪽 면에 닿아 사이를 채운다",
68
63
  "figure.label.animation": "애니메이션",
69
- "figure.label.motion-intent": "무엇을 움직일까요?",
70
- "figure.label.recipe-conveyor": "컨베이어 롤러 계속 회전",
71
- "figure.label.recipe-gate": "문 또는 게이트 열기",
72
- "figure.label.recipe-pusher": "푸셔 위치 이동",
73
- "figure.label.recipe-lift": "리프트 높이 변경",
64
+ "figure.label.assumed-board": "놓이는 보드",
74
65
  "figure.label.axis-consistency": "표현 일관성",
75
66
  "figure.label.axis-consistency-short": "일관성",
76
67
  "figure.label.axis-depth": "높이",
@@ -94,8 +85,10 @@
94
85
  "figure.label.budget-transparent": "투명 재질",
95
86
  "figure.label.budgets": "한도",
96
87
  "figure.label.by-axis": "축별 성숙도",
88
+ "figure.label.candidate-review": "후보 검토 근거",
97
89
  "figure.label.cast-shadow": "그림자 드리우기",
98
90
  "figure.label.category": "분류",
91
+ "figure.label.ceiling-height": "천장 높이 (mm)",
99
92
  "figure.label.channel-path": "무엇을",
100
93
  "figure.label.channel-pivot": "회전 중심",
101
94
  "figure.label.channel-target": "부품",
@@ -126,10 +119,7 @@
126
119
  "figure.label.environment-sunny": "맑음",
127
120
  "figure.label.environment-warehouse": "창고",
128
121
  "figure.label.figure": "도형",
129
- "figure.label.figure-placement": "3D 배치 기준",
130
- "figure.label.placement-floor": "바닥 기반 (floor)",
131
- "figure.label.placement-ceiling": "천정 기반 (ceiling)",
132
- "figure.label.placement-center": "중심 기반 (center)",
122
+ "figure.label.figure-placement": "배치 기준",
133
123
  "figure.label.figure-released": "발행됨",
134
124
  "figure.label.figure-type": "타입",
135
125
  "figure.label.findings": "확인할 점",
@@ -150,13 +140,12 @@
150
140
  "figure.label.maturity": "성숙도",
151
141
  "figure.label.mode-edit": "편집",
152
142
  "figure.label.mode-preview": "미리보기",
143
+ "figure.label.motion-intent": "무엇을 움직일까요?",
153
144
  "figure.label.name": "이름",
154
145
  "figure.label.no-color-chosen": "색 미지정",
155
146
  "figure.label.none": "없음",
156
147
  "figure.label.now": "현재",
157
148
  "figure.label.on-by-default": "기본으로 켜 둔다",
158
- "figure.label.palette-token": "팔레트 토큰",
159
- "figure.label.palette-role": "색 역할",
160
149
  "figure.label.palette-purpose-accent": "강조 부품 · 손잡이·커버처럼 눈에 띄어야 할 곳",
161
150
  "figure.label.palette-purpose-danger": "위험 신호 · 오류·정지 상태를 알리는 표시등",
162
151
  "figure.label.palette-purpose-dark": "프레임·그림자 · 어두운 구조와 테두리",
@@ -168,6 +157,8 @@
168
157
  "figure.label.palette-purpose-success": "정상 신호 · 정상 동작 상태를 알리는 표시등",
169
158
  "figure.label.palette-purpose-surface": "표면·바탕 · 넓은 바탕 면",
170
159
  "figure.label.palette-purpose-warning": "주의 신호 · 확인이 필요한 상태를 알리는 표시등",
160
+ "figure.label.palette-role": "색 역할",
161
+ "figure.label.palette-token": "팔레트 토큰",
171
162
  "figure.label.part": "부품",
172
163
  "figure.label.part-material": "재질",
173
164
  "figure.label.part-position": "위치 (중심)",
@@ -177,6 +168,9 @@
177
168
  "figure.label.path-scale": "배율",
178
169
  "figure.label.path-translation": "옮김",
179
170
  "figure.label.placement": "위치와 크기",
171
+ "figure.label.placement-ceiling": "천정 기반 (ceiling)",
172
+ "figure.label.placement-center": "중심 기반 (center)",
173
+ "figure.label.placement-floor": "바닥 기반 (floor)",
180
174
  "figure.label.placement-limit": "배치 한도",
181
175
  "figure.label.preset": "프리셋",
182
176
  "figure.label.preset-ceramic": "도자",
@@ -194,6 +188,10 @@
194
188
  "figure.label.primitive-wall": "벽",
195
189
  "figure.label.properties": "속성",
196
190
  "figure.label.proposed": "제안",
191
+ "figure.label.recipe-conveyor": "컨베이어 롤러 계속 회전",
192
+ "figure.label.recipe-gate": "문 또는 게이트 열기",
193
+ "figure.label.recipe-lift": "리프트 높이 변경",
194
+ "figure.label.recipe-pusher": "푸셔 위치 이동",
197
195
  "figure.label.release": "발행",
198
196
  "figure.label.released-versions": "발행된 판",
199
197
  "figure.label.repeat-axis": "늘어나는 축",
@@ -210,6 +208,10 @@
210
208
  "figure.label.rung-none": "그리기만 한다",
211
209
  "figure.label.same-as-off": "꺼진 색과 같게",
212
210
  "figure.label.scene-floor": "바닥",
211
+ "figure.label.scene-reference": "씬 좌표 기준",
212
+ "figure.label.scene-reference-floor": "바닥 기준 (floor)",
213
+ "figure.label.scene-reference-inverted": "천장 기준 (inverted)",
214
+ "figure.label.scene-reference-space": "중심 기준 (space)",
213
215
  "figure.label.segments": "분할 수",
214
216
  "figure.label.shape": "도형",
215
217
  "figure.label.shape-detail": "형상 세부",
@@ -247,16 +249,6 @@
247
249
  "figure.text.animation-empty-what-it-is": "이 도형은 아직 움직이지 않습니다. clip 은 부품 여럿을 한 벌로 움직이는 단위입니다 — 문 열림은 왼짝과 오른짝이 반대로 미끄러지는 것 하나입니다.",
248
250
  "figure.text.animation-is-driven-by-a-fact": "clip 하나가 부품 여럿을 함께 움직입니다. 보드에서는 사실이 그 값을 정합니다 — 「지금 40% 열려 있다」처럼.",
249
251
  "figure.text.animation-needs-a-named-part": "부품이 먼저 있어야 합니다. clip 은 부품을 가리켜 움직입니다.",
250
- "figure.text.motion-intent-help": "움직일 부품을 고른 뒤 목적을 선택하세요. 만들어진 동작은 아래 고급 편집에서 조정할 수 있습니다.",
251
- "figure.text.recipe-conveyor": "계속 움직임 · 입력값은 속도 또는 배속",
252
- "figure.text.recipe-gate": "상태 위치 · 입력값은 열림 비율 0~100%",
253
- "figure.text.recipe-pusher": "상태 위치 · 입력값은 이동 위치 0~100%",
254
- "figure.text.recipe-lift": "상태 위치 · 입력값은 높이 0~100%",
255
- "figure.text.ask-create-example": "예: 3단 선반형 컨베이어 소터",
256
- "figure.text.ask-revise-example": "예: 재질 묶음을 2개로 줄여줘",
257
- "figure.text.ask-to-create": "신규",
258
- "figure.text.ask-to-revise": "수정",
259
- "figure.text.asking": "만드는 중…",
260
252
  "figure.text.assistant-proposed-a-figure": "제안을 만들었습니다. 오른쪽이 제안한 결과입니다.",
261
253
  "figure.text.axes-not-measurable-yet": "아직 못 재는 축은 그림에 넣지 않았습니다 — {axes}. 이유는 아래에 있습니다.",
262
254
  "figure.text.bound-by-drawCalls": "draw call 이 먼저 한계에 닿습니다 — 1개당 {per}, 한 도면 {budget} 기준.",
@@ -268,13 +260,16 @@
268
260
  "figure.text.capacity-from-repeat": "칸 수는 반복 설정과 인스턴스 크기로 정해진다",
269
261
  "figure.text.category-explained": "팔레트에서 묶어 보이는 기준입니다. 도형 하나에 하나만 둡니다 — 한 도형이 두 묶음에 있으면 저작자가 같은 것을 두 번 만납니다.",
270
262
  "figure.text.category-placeholder": "예: 컨베이어",
263
+ "figure.text.ceiling-height-explained": "천정 기반 도형을 미리보기에서 어디에 매달지 정합니다. 도형은 자기가 놓일 방의 높이를 모릅니다.",
271
264
  "figure.text.center-on-x": "기준 상자의 X 가운데로 옮깁니다.",
272
265
  "figure.text.center-on-z": "기준 상자의 Z 가운데로 옮깁니다.",
273
266
  "figure.text.change-added": "새 부품",
274
- "figure.text.change-anchor": "기준점",
267
+ "figure.text.change-animations": "움직임",
275
268
  "figure.text.change-base": "기준 치수",
269
+ "figure.text.change-capabilities": "능력",
276
270
  "figure.text.change-changed": "바뀐 부품",
277
271
  "figure.text.change-detail": "디테일 등급",
272
+ "figure.text.change-placement": "배치 기준",
278
273
  "figure.text.change-removed": "삭제되는 부품",
279
274
  "figure.text.change-styleKit": "스타일 킷",
280
275
  "figure.text.channel-target-is-gone": "그런 부품이 없습니다. 부품 이름을 바꾸었다면 여기서도 다시 고르십시오.",
@@ -298,6 +293,7 @@
298
293
  "figure.text.expand-parts-pane": "부품 목록 펼치기",
299
294
  "figure.text.expand-properties-pane": "속성 칸 펼치기",
300
295
  "figure.text.figure-display-name": "표시 이름",
296
+ "figure.text.figure-type-placeholder": "도형 식별 타입 (예: OHT)",
301
297
  "figure.text.find-by-this-tag": "이 태그로 찾기",
302
298
  "figure.text.fits-n-instances": "{n}개까지",
303
299
  "figure.text.floor-explained": "좌표 바탕과 겹치므로 보통 끈다",
@@ -331,6 +327,8 @@
331
327
  "figure.text.mirror-would-overlap": "이미 가운데에 있어 대칭이 제자리입니다. 겹친 부품이 생깁니다.",
332
328
  "figure.text.mode-edit-explained": "부품을 놓고 고칩니다. 늘 기준 크기입니다.",
333
329
  "figure.text.mode-preview-explained": "보드에 놓았을 때의 모습입니다. 기준 크기와 늘린 것을 나란히 놓습니다.",
330
+ "figure.text.more-segment-options": "고급 분할 수",
331
+ "figure.text.motion-intent-help": "움직일 부품을 고른 뒤 목적을 선택하세요. 만들어진 동작은 아래 고급 편집에서 조정할 수 있습니다.",
334
332
  "figure.text.must-fix-to-release": "고쳐야 하는 것",
335
333
  "figure.text.n-of-limit": "{used} / {limit}",
336
334
  "figure.text.n-parts-at-most": "부품 {limit}개까지",
@@ -342,7 +340,7 @@
342
340
  "figure.text.nothing-released-yet": "아직 발행한 판이 없습니다. 발행하면 그때의 도형이 판으로 남습니다.",
343
341
  "figure.text.on-by-default-explained": "보드에 놓았을 때의 처음 상태입니다. 인스턴스가 켜고 끄면 그것이 이깁니다.",
344
342
  "figure.text.other-segment-count": "직접 입력",
345
- "figure.text.more-segment-options": "고급 분할 ",
343
+ "figure.text.palette-purpose-explained": " 이름이 아니라 이 부품이 화면에서 맡을 역할을 고릅니다.",
346
344
  "figure.text.part-limit-reached": "디테일 등급이 허용하는 부품 수를 모두 사용했습니다. 등급을 올리거나 부품을 삭제하세요.",
347
345
  "figure.text.part-limit-reached-short": "{level} 등급은 부품 {limit}개까지입니다. 등급을 올리거나 부품을 삭제하세요.",
348
346
  "figure.text.part-name-cannot-be-empty": "부품 이름을 입력해 주세요.",
@@ -351,12 +349,17 @@
351
349
  "figure.text.path-translation-unit": "부품 기준으로 옮긴 거리입니다. 0 이 제자리입니다.",
352
350
  "figure.text.pick-a-shape-above-to-start": "위에서 도형을 선택해 첫 부품을 추가하세요.",
353
351
  "figure.text.picked-changes-do-not-validate": "선택한 조합은 형식에 맞지 않습니다",
354
- "figure.text.picture-is-for-proportions": "비율과 형태를 참고합니다. 표면 무늬는 반영하지 않습니다.",
355
352
  "figure.text.pivot-defaults-to-the-part-centre": "적지 않으면 부품 제 중심입니다. 부품 기준 좌표입니다.",
356
353
  "figure.text.placement-explained": "3D 씬에서 객체의 기준면을 정합니다 (바닥: AGV/컨베이어, 천정: OHT/호이스트, 중심: 센서/드론).",
357
354
  "figure.text.preview-blocked-by-errors": "형식을 어겨서 세울 수 없습니다. 성숙도 탭에 사유가 있습니다.",
358
355
  "figure.text.preview-needs-a-part": "보드에 놓았을 때의 모습을 표시합니다. 부품을 만들면 표시됩니다.",
356
+ "figure.text.proposal-feedback-note": "다음 제안에 반영할 메모 (현재 세션에만 사용)",
357
+ "figure.text.proposal-feedback-placeholder": "예: 실루엣은 유지하되 포트가 더 잘 보이게",
359
358
  "figure.text.put-on-floor": "바닥(Z=0)에 붙입니다.",
359
+ "figure.text.recipe-conveyor": "계속 움직임 · 입력값은 속도 또는 배속",
360
+ "figure.text.recipe-gate": "상태 위치 · 입력값은 열림 비율 0~100%",
361
+ "figure.text.recipe-lift": "상태 위치 · 입력값은 높이 0~100%",
362
+ "figure.text.recipe-pusher": "상태 위치 · 입력값은 이동 위치 0~100%",
360
363
  "figure.text.release-needs-a-save-first": "저장하지 않은 변경이 있습니다. 발행은 저장된 것을 내보내므로, 먼저 저장하세요.",
361
364
  "figure.text.releasing": "발행하고 있습니다…",
362
365
  "figure.text.renaming-a-part-breaks-bindings": "이름은 저장되는 식별자입니다. 바꾸면 이미 배치된 인스턴스의 바인딩이 끊깁니다.",
@@ -373,8 +376,10 @@
373
376
  "figure.text.rung-flow-note": "담는 것에 더해 문으로 받고 보낸다. 컨베이어 · 슈트 · 소터",
374
377
  "figure.text.rung-hold-note": "물건을 놓을 자리를 갖는다. 랙 · 팔레트 · 작업대",
375
378
  "figure.text.rung-none-note": "물건을 받지 않는다. 대부분의 도형이 여기에 해당한다",
379
+ "figure.text.save-new-figure-desc": "보드와 캔버스에서 식별할 고유 타입 코드와 이름을 정합니다.",
376
380
  "figure.text.save-the-figure-before-releasing": "아직 저장되지 않은 도형입니다. 저장하면 발행할 수 있습니다.",
377
381
  "figure.text.saving-figure": "저장 중",
382
+ "figure.text.scene-reference-explained": "어떤 보드에 놓인 것으로 보고 있는지 정합니다. 도형의 배치 기준과 다릅니다 — 바닥 기준 보드에 천정 기반 도형을 놓으면 보드는 그대로이고 도형이 천장 높이에 매달립니다.",
378
383
  "figure.text.search-figure": "이름 · 타입 · 설명 · 분류 · 태그로 찾기",
379
384
  "figure.text.select-a-part-to-edit": "부품을 선택하면 여기에서 편집합니다.",
380
385
  "figure.text.show-all-parts": "모두 보이기",
@@ -389,6 +394,7 @@
389
394
  "figure.text.tags-explained": "분류로는 못 하는 찾기를 위한 것입니다. 여럿 붙일 수 있습니다 — 컨베이어이면서 반출 구역의 것일 수 있습니다. 쉼표로 나눠 적습니다.",
390
395
  "figure.text.tags-placeholder": "예: 반출, 자동, 2층",
391
396
  "figure.text.thumbnail-not-made-yet": "미리보기 그림 없음",
397
+ "figure.text.tools-explained": "맞추기는 위치·크기·회전을 직접 입력한 뒤 빠르게 정렬하는 도구입니다. 왼쪽부터 X 가운데, Z 가운데, 바닥에 붙이기, X 대칭, Z 대칭, 눈금 맞춤입니다. 아이콘 위에 마우스를 올리면 각 동작을 다시 확인할 수 있습니다.",
392
398
  "figure.text.triangle-count": "삼각형 {count}개",
393
399
  "figure.text.two-keys-at-least": "키가 둘은 있어야 합니다. 하나뿐이면 움직임이 아니라 자세 하나입니다.",
394
400
  "figure.text.type-name-already-taken": "타입 이름 {type} 은 이미 쓰이고 있습니다. 나중에 바꿀 수 없으니 다른 이름을 정해 주세요.",
@@ -398,9 +404,6 @@
398
404
  "figure.text.view-settings-are-not-saved": "여기 설정은 저장되지 않습니다. 보기 편한 상태를 만드는 곳이고, 자산에는 딸려 가지 않습니다.",
399
405
  "figure.text.what-a-figure-is": "Figure 는 직접 저작한 3D 컴포넌트입니다. 단순한 도형을 조합해 만들면 보드에 배치할 수 있는 컴포넌트가 되고, 여러 개를 배치해도 형상과 재질을 공유합니다.",
400
406
  "figure.text.what-changed-in-this-release": "이번 판에서 무엇이 달라졌는지",
401
- "figure.button.cancel": "취소",
402
- "figure.text.figure-type-placeholder": "도형 식별 타입 (예: OHT)",
403
- "figure.text.save-new-figure-desc": "보드와 캔버스에서 식별할 고유 타입 코드와 이름을 정합니다.",
404
407
  "figure.title.figures": "Figure",
405
408
  "figure.title.new-figure": "새 Figure",
406
409
  "figure.title.save-new-figure": "도형 초안 저장"
@@ -1,11 +1,5 @@
1
1
  {
2
2
  "figure.button.ask": "ask",
3
- "figure.label.candidate-review": "candidate review",
4
- "figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
5
- "figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
6
- "figure.text.tools-explained": "Use alignment after setting position, size, and rotation. From left: centre X, centre Z, put on floor, mirror X, mirror Z, and snap to grid. Hover an icon to confirm its action.",
7
- "figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
8
- "figure.button.attach-a-picture": "image",
9
3
  "figure.button.center-x": "centre X",
10
4
  "figure.button.center-z": "centre Z",
11
5
  "figure.button.close": "close",
@@ -17,27 +11,28 @@
17
11
  "figure.button.move-part-down": "move down",
18
12
  "figure.button.move-part-up": "move up",
19
13
  "figure.button.new-figure": "new figure",
14
+ "figure.button.redo": "Buat semula",
20
15
  "figure.button.release-figure": "terbitkan",
21
16
  "figure.button.remove-part": "delete",
22
17
  "figure.button.reset-view": "reset",
23
18
  "figure.button.revert": "kembalikan",
24
19
  "figure.button.save": "save",
25
- "figure.button.undo": "Nyahbuat",
26
- "figure.button.redo": "Buat semula",
27
20
  "figure.button.see-the-trend-chart": "see the trend chart",
28
21
  "figure.button.snap": "snap",
29
22
  "figure.button.take-n-changes": "apply {n}",
30
23
  "figure.button.to-floor": "to floor",
24
+ "figure.button.undo": "Nyahbuat",
31
25
  "figure.label.anchor": "pegang permukaan mana",
26
+ "figure.label.anchor-advanced": "advanced proportional sizing",
32
27
  "figure.label.anchor-aspect-x": "membesar hanya sebanyak paksi x (kekalkan nisbah)",
33
28
  "figure.label.anchor-aspect-y": "membesar hanya sebanyak paksi y (kekalkan nisbah)",
34
29
  "figure.label.anchor-aspect-z": "membesar hanya sebanyak paksi z (kekalkan nisbah)",
35
30
  "figure.label.anchor-auto": "automatik ({rule})",
36
- "figure.label.anchor-advanced": "advanced proportional sizing",
37
- "figure.label.anchor-choice-auto": "automatic",
31
+ "figure.label.anchor-center": "kekal di tengah, saiz tidak berubah",
38
32
  "figure.label.anchor-choice-aspect-x": "keep X ratio",
39
33
  "figure.label.anchor-choice-aspect-y": "keep Y ratio",
40
34
  "figure.label.anchor-choice-aspect-z": "keep Z ratio",
35
+ "figure.label.anchor-choice-auto": "automatic",
41
36
  "figure.label.anchor-choice-center": "stay centred",
42
37
  "figure.label.anchor-choice-max-x": "right face",
43
38
  "figure.label.anchor-choice-max-y": "upper face",
@@ -47,7 +42,6 @@
47
42
  "figure.label.anchor-choice-min-z": "back face",
48
43
  "figure.label.anchor-choice-scale": "grow together",
49
44
  "figure.label.anchor-choice-span": "fill both faces",
50
- "figure.label.anchor-center": "kekal di tengah, saiz tidak berubah",
51
45
  "figure.label.anchor-max": "melekat pada permukaan atas",
52
46
  "figure.label.anchor-max-x": "melekat pada permukaan kanan",
53
47
  "figure.label.anchor-max-y": "melekat pada permukaan atas",
@@ -81,6 +75,7 @@
81
75
  "figure.label.budget-transparent": "transparent materials",
82
76
  "figure.label.budgets": "budgets",
83
77
  "figure.label.by-axis": "maturity by axis",
78
+ "figure.label.candidate-review": "candidate review",
84
79
  "figure.label.cast-shadow": "cast shadow",
85
80
  "figure.label.coordinate-ground": "coordinate ground",
86
81
  "figure.label.corner-round": "corner round",
@@ -127,8 +122,6 @@
127
122
  "figure.label.none": "none",
128
123
  "figure.label.now": "current",
129
124
  "figure.label.on-by-default": "on by default",
130
- "figure.label.palette-token": "palette token",
131
- "figure.label.palette-role": "color role",
132
125
  "figure.label.palette-purpose-accent": "accent part · handles and covers that must stand out",
133
126
  "figure.label.palette-purpose-danger": "danger signal · an error or stop indicator",
134
127
  "figure.label.palette-purpose-dark": "frame and shadow · dark structure and edges",
@@ -140,6 +133,8 @@
140
133
  "figure.label.palette-purpose-success": "normal signal · a normal-operation indicator",
141
134
  "figure.label.palette-purpose-surface": "surface and background · broad background faces",
142
135
  "figure.label.palette-purpose-warning": "warning signal · an attention-needed indicator",
136
+ "figure.label.palette-role": "color role",
137
+ "figure.label.palette-token": "palette token",
143
138
  "figure.label.part": "part",
144
139
  "figure.label.part-material": "material",
145
140
  "figure.label.part-position": "position (centre)",
@@ -194,11 +189,6 @@
194
189
  "figure.text.all-lights-off": "both lights are off. only self-lit surfaces show; everything else goes black — this is how you check whether a lamp is lit.",
195
190
  "figure.text.already-released-edit-to-release-again": "sudah diterbitkan. sunting dan simpan untuk kembali ke draf, kemudian terbitkan semula.",
196
191
  "figure.text.anchor-explained": "di mana bahagian ini melekat apabila kotak membesar. Dua bahagian bersentuhan pada permukaan berbeza akan terpisah apabila membesar.",
197
- "figure.text.ask-create-example": "e.g. a three-tier conveyor sorter",
198
- "figure.text.ask-revise-example": "e.g. bring it down to two material groups",
199
- "figure.text.ask-to-create": "create",
200
- "figure.text.ask-to-revise": "revise",
201
- "figure.text.asking": "working…",
202
192
  "figure.text.assistant-proposed-a-figure": "here is a proposal — the result is on the right.",
203
193
  "figure.text.axes-not-measurable-yet": "axes that cannot be measured yet are left off the chart — {axes}. the reason is listed below.",
204
194
  "figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a board.",
@@ -209,10 +199,12 @@
209
199
  "figure.text.center-on-x": "move to the centre of the base box on X.",
210
200
  "figure.text.center-on-z": "move to the centre of the base box on Z.",
211
201
  "figure.text.change-added": "a new part",
212
- "figure.text.change-anchor": "the anchor",
202
+ "figure.text.change-animations": "animasi",
213
203
  "figure.text.change-base": "the base size",
204
+ "figure.text.change-capabilities": "keupayaan",
214
205
  "figure.text.change-changed": "a changed part",
215
206
  "figure.text.change-detail": "the detail level",
207
+ "figure.text.change-placement": "asas letak",
216
208
  "figure.text.change-removed": "a part being removed",
217
209
  "figure.text.change-styleKit": "the style kit",
218
210
  "figure.text.collapse-parts-pane": "collapse the part list",
@@ -258,6 +250,7 @@
258
250
  "figure.text.mirror-would-overlap": "already centred — a mirror would land in the same place and overlap.",
259
251
  "figure.text.mode-edit-explained": "place and edit parts. always at the base size.",
260
252
  "figure.text.mode-preview-explained": "how it looks placed on a board. base size next to the enlarged ones.",
253
+ "figure.text.more-segment-options": "advanced segment counts",
261
254
  "figure.text.must-fix-to-release": "perbaiki dahulu",
262
255
  "figure.text.n-of-limit": "{used} / {limit}",
263
256
  "figure.text.n-parts-at-most": "up to {limit} parts",
@@ -269,14 +262,15 @@
269
262
  "figure.text.nothing-released-yet": "belum ada versi diterbitkan. penerbitan menyimpan figura seperti sekarang sebagai satu versi.",
270
263
  "figure.text.on-by-default-explained": "the starting state when placed on a board. an instance switching it wins.",
271
264
  "figure.text.other-segment-count": "enter a value",
272
- "figure.text.more-segment-options": "advanced segment counts",
265
+ "figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
273
266
  "figure.text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
274
267
  "figure.text.part-limit-reached-short": "level {level} allows {limit} parts. Raise the level or remove a part.",
275
268
  "figure.text.pick-a-shape-above-to-start": "pick a shape above to add the first part.",
276
269
  "figure.text.picked-changes-do-not-validate": "the selected changes do not make a valid figure",
277
- "figure.text.picture-is-for-proportions": "used for proportions and form, not for surface detail.",
278
270
  "figure.text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
279
271
  "figure.text.preview-needs-a-part": "add a part and the board view appears here.",
272
+ "figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
273
+ "figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
280
274
  "figure.text.put-on-floor": "drop it to the floor (Z=0).",
281
275
  "figure.text.release-needs-a-save-first": "ada perubahan yang belum disimpan. penerbitan mengeluarkan apa yang telah disimpan, jadi simpan dahulu.",
282
276
  "figure.text.releasing": "sedang menerbitkan…",
@@ -299,6 +293,7 @@
299
293
  "figure.text.sizing-stretch-explained": "only one axis stretches — like a frame, a belt or a rail.",
300
294
  "figure.text.snap-explained": "rounds position and size to the grid — the same spacing you see on the canvas.",
301
295
  "figure.text.thumbnail-not-made-yet": "no thumbnail yet",
296
+ "figure.text.tools-explained": "Use alignment after setting position, size, and rotation. From left: centre X, centre Z, put on floor, mirror X, mirror Z, and snap to grid. Hover an icon to confirm its action.",
302
297
  "figure.text.triangle-count": "{count} triangles",
303
298
  "figure.text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
304
299
  "figure.text.type-name-cannot-change": "the type name is a stored identifier and cannot be changed after creation.",
@@ -1,11 +1,5 @@
1
1
  {
2
2
  "figure.button.ask": "ask",
3
- "figure.label.candidate-review": "candidate review",
4
- "figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
5
- "figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
6
- "figure.text.tools-explained": "Use alignment after setting position, size, and rotation. From left: centre X, centre Z, put on floor, mirror X, mirror Z, and snap to grid. Hover an icon to confirm its action.",
7
- "figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
8
- "figure.button.attach-a-picture": "image",
9
3
  "figure.button.center-x": "centre X",
10
4
  "figure.button.center-z": "centre Z",
11
5
  "figure.button.close": "close",
@@ -17,27 +11,28 @@
17
11
  "figure.button.move-part-down": "move down",
18
12
  "figure.button.move-part-up": "move up",
19
13
  "figure.button.new-figure": "new figure",
14
+ "figure.button.redo": "重做",
20
15
  "figure.button.release-figure": "发布",
21
16
  "figure.button.remove-part": "delete",
22
17
  "figure.button.reset-view": "reset",
23
18
  "figure.button.revert": "回退",
24
19
  "figure.button.save": "save",
25
- "figure.button.undo": "撤销",
26
- "figure.button.redo": "重做",
27
20
  "figure.button.see-the-trend-chart": "see the trend chart",
28
21
  "figure.button.snap": "snap",
29
22
  "figure.button.take-n-changes": "apply {n}",
30
23
  "figure.button.to-floor": "to floor",
24
+ "figure.button.undo": "撤销",
31
25
  "figure.label.anchor": "抓住哪个面",
26
+ "figure.label.anchor-advanced": "advanced proportional sizing",
32
27
  "figure.label.anchor-aspect-x": "只按 x 轴变大的比例变大 (保持比例)",
33
28
  "figure.label.anchor-aspect-y": "只按 y 轴变大的比例变大 (保持比例)",
34
29
  "figure.label.anchor-aspect-z": "只按 z 轴变大的比例变大 (保持比例)",
35
30
  "figure.label.anchor-auto": "自动 ({rule})",
36
- "figure.label.anchor-advanced": "advanced proportional sizing",
37
- "figure.label.anchor-choice-auto": "automatic",
31
+ "figure.label.anchor-center": "留在中间,尺寸不变",
38
32
  "figure.label.anchor-choice-aspect-x": "keep X ratio",
39
33
  "figure.label.anchor-choice-aspect-y": "keep Y ratio",
40
34
  "figure.label.anchor-choice-aspect-z": "keep Z ratio",
35
+ "figure.label.anchor-choice-auto": "automatic",
41
36
  "figure.label.anchor-choice-center": "stay centred",
42
37
  "figure.label.anchor-choice-max-x": "right face",
43
38
  "figure.label.anchor-choice-max-y": "upper face",
@@ -47,7 +42,6 @@
47
42
  "figure.label.anchor-choice-min-z": "back face",
48
43
  "figure.label.anchor-choice-scale": "grow together",
49
44
  "figure.label.anchor-choice-span": "fill both faces",
50
- "figure.label.anchor-center": "留在中间,尺寸不变",
51
45
  "figure.label.anchor-max": "贴在较大一侧的面",
52
46
  "figure.label.anchor-max-x": "贴在右面",
53
47
  "figure.label.anchor-max-y": "贴在上面",
@@ -81,6 +75,7 @@
81
75
  "figure.label.budget-transparent": "transparent materials",
82
76
  "figure.label.budgets": "budgets",
83
77
  "figure.label.by-axis": "maturity by axis",
78
+ "figure.label.candidate-review": "candidate review",
84
79
  "figure.label.cast-shadow": "cast shadow",
85
80
  "figure.label.coordinate-ground": "coordinate ground",
86
81
  "figure.label.corner-round": "corner round",
@@ -127,8 +122,6 @@
127
122
  "figure.label.none": "none",
128
123
  "figure.label.now": "current",
129
124
  "figure.label.on-by-default": "on by default",
130
- "figure.label.palette-token": "palette token",
131
- "figure.label.palette-role": "color role",
132
125
  "figure.label.palette-purpose-accent": "accent part · handles and covers that must stand out",
133
126
  "figure.label.palette-purpose-danger": "danger signal · an error or stop indicator",
134
127
  "figure.label.palette-purpose-dark": "frame and shadow · dark structure and edges",
@@ -140,6 +133,8 @@
140
133
  "figure.label.palette-purpose-success": "normal signal · a normal-operation indicator",
141
134
  "figure.label.palette-purpose-surface": "surface and background · broad background faces",
142
135
  "figure.label.palette-purpose-warning": "warning signal · an attention-needed indicator",
136
+ "figure.label.palette-role": "color role",
137
+ "figure.label.palette-token": "palette token",
143
138
  "figure.label.part": "part",
144
139
  "figure.label.part-material": "material",
145
140
  "figure.label.part-position": "position (centre)",
@@ -194,11 +189,6 @@
194
189
  "figure.text.all-lights-off": "both lights are off. only self-lit surfaces show; everything else goes black — this is how you check whether a lamp is lit.",
195
190
  "figure.text.already-released-edit-to-release-again": "已经发布。修改并保存会回到草稿,然后可以再次发布。",
196
191
  "figure.text.anchor-explained": "箱体变大时这个部件贴在哪里。相邻部件贴在不同的面上,变大时就会分开。",
197
- "figure.text.ask-create-example": "e.g. a three-tier conveyor sorter",
198
- "figure.text.ask-revise-example": "e.g. bring it down to two material groups",
199
- "figure.text.ask-to-create": "create",
200
- "figure.text.ask-to-revise": "revise",
201
- "figure.text.asking": "working…",
202
192
  "figure.text.assistant-proposed-a-figure": "here is a proposal — the result is on the right.",
203
193
  "figure.text.axes-not-measurable-yet": "axes that cannot be measured yet are left off the chart — {axes}. the reason is listed below.",
204
194
  "figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a board.",
@@ -209,10 +199,12 @@
209
199
  "figure.text.center-on-x": "move to the centre of the base box on X.",
210
200
  "figure.text.center-on-z": "move to the centre of the base box on Z.",
211
201
  "figure.text.change-added": "a new part",
212
- "figure.text.change-anchor": "the anchor",
202
+ "figure.text.change-animations": "动画",
213
203
  "figure.text.change-base": "the base size",
204
+ "figure.text.change-capabilities": "能力",
214
205
  "figure.text.change-changed": "a changed part",
215
206
  "figure.text.change-detail": "the detail level",
207
+ "figure.text.change-placement": "放置基准",
216
208
  "figure.text.change-removed": "a part being removed",
217
209
  "figure.text.change-styleKit": "the style kit",
218
210
  "figure.text.collapse-parts-pane": "collapse the part list",
@@ -258,6 +250,7 @@
258
250
  "figure.text.mirror-would-overlap": "already centred — a mirror would land in the same place and overlap.",
259
251
  "figure.text.mode-edit-explained": "place and edit parts. always at the base size.",
260
252
  "figure.text.mode-preview-explained": "how it looks placed on a board. base size next to the enlarged ones.",
253
+ "figure.text.more-segment-options": "advanced segment counts",
261
254
  "figure.text.must-fix-to-release": "需要修改的项",
262
255
  "figure.text.n-of-limit": "{used} / {limit}",
263
256
  "figure.text.n-parts-at-most": "up to {limit} parts",
@@ -269,14 +262,15 @@
269
262
  "figure.text.nothing-released-yet": "还没有发布过。发布后会把当前的图形保留为一个版本。",
270
263
  "figure.text.on-by-default-explained": "the starting state when placed on a board. an instance switching it wins.",
271
264
  "figure.text.other-segment-count": "enter a value",
272
- "figure.text.more-segment-options": "advanced segment counts",
265
+ "figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
273
266
  "figure.text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
274
267
  "figure.text.part-limit-reached-short": "level {level} allows {limit} parts. Raise the level or remove a part.",
275
268
  "figure.text.pick-a-shape-above-to-start": "pick a shape above to add the first part.",
276
269
  "figure.text.picked-changes-do-not-validate": "the selected changes do not make a valid figure",
277
- "figure.text.picture-is-for-proportions": "used for proportions and form, not for surface detail.",
278
270
  "figure.text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
279
271
  "figure.text.preview-needs-a-part": "add a part and the board view appears here.",
272
+ "figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
273
+ "figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
280
274
  "figure.text.put-on-floor": "drop it to the floor (Z=0).",
281
275
  "figure.text.release-needs-a-save-first": "有未保存的修改。发布的是已保存的内容,请先保存。",
282
276
  "figure.text.releasing": "正在发布…",
@@ -299,6 +293,7 @@
299
293
  "figure.text.sizing-stretch-explained": "only one axis stretches — like a frame, a belt or a rail.",
300
294
  "figure.text.snap-explained": "rounds position and size to the grid — the same spacing you see on the canvas.",
301
295
  "figure.text.thumbnail-not-made-yet": "no thumbnail yet",
296
+ "figure.text.tools-explained": "Use alignment after setting position, size, and rotation. From left: centre X, centre Z, put on floor, mirror X, mirror Z, and snap to grid. Hover an icon to confirm its action.",
302
297
  "figure.text.triangle-count": "{count} triangles",
303
298
  "figure.text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
304
299
  "figure.text.type-name-cannot-change": "the type name is a stored identifier and cannot be changed after creation.",