@things-factory/figure-ui 10.1.16 → 10.1.18

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 (78) hide show
  1. package/client/modeller/figure-animations.ts +331 -124
  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 +151 -41
  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 +62 -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 +27 -4
  15. package/client/pages/figure-modeller-page.ts +65 -58
  16. package/dist-client/modeller/figure-animations.d.ts +37 -8
  17. package/dist-client/modeller/figure-animations.js +293 -122
  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 +56 -6
  32. package/dist-client/modeller/figure-preview.js +132 -39
  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 +25 -15
  43. package/dist-client/modeller/figure-source.js +42 -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 +16 -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 +61 -54
  59. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  60. package/dist-client/route.d.ts +1 -1
  61. package/dist-client/tsconfig.tsbuildinfo +1 -1
  62. package/dist-server/tsconfig.tsbuildinfo +1 -1
  63. package/package.json +5 -5
  64. package/test/ai-proposal-contract.test.ts +433 -12
  65. package/test/expect.ts +55 -0
  66. package/test/figure-source.test.ts +572 -0
  67. package/test/i18n-prefix-guard.test.ts +9 -12
  68. package/{client/modeller → test}/part-edits.test.ts +50 -45
  69. package/translations/en.json +46 -35
  70. package/translations/ja.json +16 -21
  71. package/translations/ko.json +56 -45
  72. package/translations/ms.json +16 -21
  73. package/translations/zh.json +16 -21
  74. package/client/modeller/figure-ask.ts +0 -265
  75. package/client/modeller/figure-source.test.ts +0 -352
  76. package/dist-client/modeller/figure-ask.d.ts +0 -40
  77. package/dist-client/modeller/figure-ask.js +0 -282
  78. package/dist-client/modeller/figure-ask.js.map +0 -1
@@ -2,13 +2,9 @@
2
2
  "figure.button.add-channel": "채널 추가",
3
3
  "figure.button.add-clip": "clip 추가",
4
4
  "figure.button.add-key": "키 추가",
5
+ "figure.button.add-parameter": "파라미터 추가",
5
6
  "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": "이미지",
7
+ "figure.button.cancel": "취소",
12
8
  "figure.button.center-x": "X 가운데",
13
9
  "figure.button.center-z": "Z 가운데",
14
10
  "figure.button.close": "닫기",
@@ -22,29 +18,30 @@
22
18
  "figure.button.new-figure": "새 Figure",
23
19
  "figure.button.pivot-clear": "제 중심으로",
24
20
  "figure.button.pivot-set": "적기",
21
+ "figure.button.redo": "다시 실행",
25
22
  "figure.button.release-figure": "발행하기",
26
23
  "figure.button.remove": "삭제",
27
24
  "figure.button.remove-part": "삭제",
28
25
  "figure.button.reset-view": "처음으로",
29
26
  "figure.button.revert": "되돌리기",
30
27
  "figure.button.save": "저장",
31
- "figure.button.undo": "실행 취소",
32
- "figure.button.redo": "다시 실행",
33
28
  "figure.button.see-the-trend-chart": "추이 그래프 보기",
34
29
  "figure.button.snap": "눈금에",
35
30
  "figure.button.take-n-changes": "{n}개 적용",
36
31
  "figure.button.to-floor": "바닥에",
32
+ "figure.button.undo": "실행 취소",
37
33
  "figure.label.accepts": "받는 것",
38
34
  "figure.label.anchor": "붙잡는 면",
35
+ "figure.label.anchor-advanced": "고급 비율 유지",
39
36
  "figure.label.anchor-aspect-x": "x 축이 커지는 만큼만 커진다 (비율 유지)",
40
37
  "figure.label.anchor-aspect-y": "y 축이 커지는 만큼만 커진다 (비율 유지)",
41
38
  "figure.label.anchor-aspect-z": "z 축이 커지는 만큼만 커진다 (비율 유지)",
42
39
  "figure.label.anchor-auto": "자동 ({rule})",
43
- "figure.label.anchor-advanced": "고급 비율 유지",
44
- "figure.label.anchor-choice-auto": "자동",
40
+ "figure.label.anchor-center": "가운데에 남고 크기는 그대로",
45
41
  "figure.label.anchor-choice-aspect-x": "X 비율 유지",
46
42
  "figure.label.anchor-choice-aspect-y": "Y 비율 유지",
47
43
  "figure.label.anchor-choice-aspect-z": "Z 비율 유지",
44
+ "figure.label.anchor-choice-auto": "자동",
48
45
  "figure.label.anchor-choice-center": "가운데 고정",
49
46
  "figure.label.anchor-choice-max-x": "오른쪽 면",
50
47
  "figure.label.anchor-choice-max-y": "위 면",
@@ -54,7 +51,6 @@
54
51
  "figure.label.anchor-choice-min-z": "뒤 면",
55
52
  "figure.label.anchor-choice-scale": "함께 확대",
56
53
  "figure.label.anchor-choice-span": "양쪽 채움",
57
- "figure.label.anchor-center": "가운데에 남고 크기는 그대로",
58
54
  "figure.label.anchor-max": "큰 쪽 면에 붙어 있는다",
59
55
  "figure.label.anchor-max-x": "오른쪽 면에 붙어 있는다",
60
56
  "figure.label.anchor-max-y": "위 면에 붙어 있는다",
@@ -66,11 +62,7 @@
66
62
  "figure.label.anchor-scale": "상자와 함께 커진다",
67
63
  "figure.label.anchor-span": "양쪽 면에 닿아 사이를 채운다",
68
64
  "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": "리프트 높이 변경",
65
+ "figure.label.assumed-board": "놓이는 보드",
74
66
  "figure.label.axis-consistency": "표현 일관성",
75
67
  "figure.label.axis-consistency-short": "일관성",
76
68
  "figure.label.axis-depth": "높이",
@@ -94,13 +86,16 @@
94
86
  "figure.label.budget-transparent": "투명 재질",
95
87
  "figure.label.budgets": "한도",
96
88
  "figure.label.by-axis": "축별 성숙도",
89
+ "figure.label.candidate-review": "후보 검토 근거",
97
90
  "figure.label.cast-shadow": "그림자 드리우기",
98
91
  "figure.label.category": "분류",
92
+ "figure.label.ceiling-height": "천장 높이 (mm)",
99
93
  "figure.label.channel-path": "무엇을",
100
94
  "figure.label.channel-pivot": "회전 중심",
101
95
  "figure.label.channel-target": "부품",
102
96
  "figure.label.channels": "채널",
103
97
  "figure.label.clip-name": "clip 이름",
98
+ "figure.label.clips": "애니메이션 · 시각이 흐릅니다",
104
99
  "figure.label.coordinate-ground": "좌표 바탕",
105
100
  "figure.label.corner-round": "모서리 굴림",
106
101
  "figure.label.detail-L": "상세",
@@ -112,8 +107,6 @@
112
107
  "figure.label.draft": "초안",
113
108
  "figure.label.draw-calls-at-100": "100개 기준 draw call",
114
109
  "figure.label.draw-calls-at-10k": "1만개 기준 draw call",
115
- "figure.label.drive-hold": "위치",
116
- "figure.label.drive-loop": "배속",
117
110
  "figure.label.emissive": "자체발광",
118
111
  "figure.label.emissive-color": "켜진 색",
119
112
  "figure.label.environment": "환경",
@@ -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,12 @@
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": "팔레트 토큰",
162
+ "figure.label.parameter-default": "기본값",
163
+ "figure.label.parameter-name": "파라미터 이름",
164
+ "figure.label.parameter-range": "범위",
165
+ "figure.label.parameters": "파라미터 · 값이 자세를 만듭니다",
171
166
  "figure.label.part": "부품",
172
167
  "figure.label.part-material": "재질",
173
168
  "figure.label.part-position": "위치 (중심)",
@@ -177,6 +172,9 @@
177
172
  "figure.label.path-scale": "배율",
178
173
  "figure.label.path-translation": "옮김",
179
174
  "figure.label.placement": "위치와 크기",
175
+ "figure.label.placement-ceiling": "천정 기반 (ceiling)",
176
+ "figure.label.placement-center": "중심 기반 (center)",
177
+ "figure.label.placement-floor": "바닥 기반 (floor)",
180
178
  "figure.label.placement-limit": "배치 한도",
181
179
  "figure.label.preset": "프리셋",
182
180
  "figure.label.preset-ceramic": "도자",
@@ -194,6 +192,10 @@
194
192
  "figure.label.primitive-wall": "벽",
195
193
  "figure.label.properties": "속성",
196
194
  "figure.label.proposed": "제안",
195
+ "figure.label.recipe-conveyor": "컨베이어 롤러 계속 회전",
196
+ "figure.label.recipe-gate": "문 또는 게이트 열기",
197
+ "figure.label.recipe-lift": "리프트 높이 변경",
198
+ "figure.label.recipe-pusher": "푸셔 위치 이동",
197
199
  "figure.label.release": "발행",
198
200
  "figure.label.released-versions": "발행된 판",
199
201
  "figure.label.repeat-axis": "늘어나는 축",
@@ -210,6 +212,10 @@
210
212
  "figure.label.rung-none": "그리기만 한다",
211
213
  "figure.label.same-as-off": "꺼진 색과 같게",
212
214
  "figure.label.scene-floor": "바닥",
215
+ "figure.label.scene-reference": "씬 좌표 기준",
216
+ "figure.label.scene-reference-floor": "바닥 기준 (floor)",
217
+ "figure.label.scene-reference-inverted": "천장 기준 (inverted)",
218
+ "figure.label.scene-reference-space": "중심 기준 (space)",
213
219
  "figure.label.segments": "분할 수",
214
220
  "figure.label.shape": "도형",
215
221
  "figure.label.shape-detail": "형상 세부",
@@ -245,18 +251,8 @@
245
251
  "figure.text.animated-parts-over": "한도를 넘었습니다. 막지는 않지만 여럿 놓을 때 이 도형이 프레임을 많이 씁니다.",
246
252
  "figure.text.animation-empty-examples": "도는 롤러 · 미끄러지는 문짝 · 오르내리는 리프트 · 깜빡이는 표시등.",
247
253
  "figure.text.animation-empty-what-it-is": "이 도형은 아직 움직이지 않습니다. clip 은 부품 여럿을 한 벌로 움직이는 단위입니다 — 문 열림은 왼짝과 오른짝이 반대로 미끄러지는 것 하나입니다.",
248
- "figure.text.animation-is-driven-by-a-fact": "clip 하나가 부품 여럿을 함께 움직입니다. 보드에서는 사실이 값을 정합니다 「지금 40% 열려 있다」처럼.",
254
+ "figure.text.animation-is-driven-by-a-fact": "움직임은 갈래입니다. 시각이 흐르는 애니메이션과, 인스턴스가 값이 그대로 자세가 되는 파라미터입니다.",
249
255
  "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
256
  "figure.text.assistant-proposed-a-figure": "제안을 만들었습니다. 오른쪽이 제안한 결과입니다.",
261
257
  "figure.text.axes-not-measurable-yet": "아직 못 재는 축은 그림에 넣지 않았습니다 — {axes}. 이유는 아래에 있습니다.",
262
258
  "figure.text.bound-by-drawCalls": "draw call 이 먼저 한계에 닿습니다 — 1개당 {per}, 한 도면 {budget} 기준.",
@@ -268,17 +264,21 @@
268
264
  "figure.text.capacity-from-repeat": "칸 수는 반복 설정과 인스턴스 크기로 정해진다",
269
265
  "figure.text.category-explained": "팔레트에서 묶어 보이는 기준입니다. 도형 하나에 하나만 둡니다 — 한 도형이 두 묶음에 있으면 저작자가 같은 것을 두 번 만납니다.",
270
266
  "figure.text.category-placeholder": "예: 컨베이어",
267
+ "figure.text.ceiling-height-explained": "천정 기반 도형을 미리보기에서 어디에 매달지 정합니다. 도형은 자기가 놓일 방의 높이를 모릅니다.",
271
268
  "figure.text.center-on-x": "기준 상자의 X 가운데로 옮깁니다.",
272
269
  "figure.text.center-on-z": "기준 상자의 Z 가운데로 옮깁니다.",
273
270
  "figure.text.change-added": "새 부품",
274
- "figure.text.change-anchor": "기준점",
271
+ "figure.text.change-animations": "움직임",
275
272
  "figure.text.change-base": "기준 치수",
273
+ "figure.text.change-capabilities": "능력",
276
274
  "figure.text.change-changed": "바뀐 부품",
277
275
  "figure.text.change-detail": "디테일 등급",
276
+ "figure.text.change-placement": "배치 기준",
278
277
  "figure.text.change-removed": "삭제되는 부품",
279
278
  "figure.text.change-styleKit": "스타일 킷",
280
279
  "figure.text.channel-target-is-gone": "그런 부품이 없습니다. 부품 이름을 바꾸었다면 여기서도 다시 고르십시오.",
281
- "figure.text.clip-name-is-how-it-is-driven": "인스턴스가 이름으로 구동합니다.",
280
+ "figure.text.clip-is-time-running": "시각이 흐릅니다. 인스턴스가 주는 값은 배속입니다 — 도는 롤러가 그렇습니다.",
281
+ "figure.text.clip-name-is-how-it-is-driven": "인스턴스가 이 이름으로 배속을 줍니다.",
282
282
  "figure.text.clip-name-taken": "같은 이름의 clip 이 이미 있습니다. 인스턴스가 이름으로 구동하므로 겹치면 안 됩니다.",
283
283
  "figure.text.clip-needs-a-channel": "채널이 없으면 무엇을 움직이는지 알 수 없습니다.",
284
284
  "figure.text.clip-needs-a-name": "이름이 없으면 구동할 수 없습니다.",
@@ -290,14 +290,12 @@
290
290
  "figure.text.detail-level-explained": "이 형상을 얼마나 상세하게 만들 것인지 밝히는 값입니다. S 단순은 표지나 기둥처럼 형태가 단순한 것, M 보통은 대부분의 설비, L 상세는 화면의 주역이 되는 큰 설비에 씁니다. 밝힌 등급이 부품 수 한도를 정하고, 성숙도가 그 등급에 걸맞게 만들어졌는지 봅니다.",
291
291
  "figure.text.discard-changes-and-start-new": "저장하지 않은 변경이 있습니다. 버리고 새로 시작할까요?",
292
292
  "figure.text.does-not-block": "막지는 않는 것",
293
- "figure.text.drive-explained": "인스턴스가 주는 값을 어떻게 읽을지 정합니다.",
294
- "figure.text.drive-hold-note": "시각이 멈춰 있습니다. 인스턴스가 주는 값은 0~1 위치입니다 — 열린 정도가 그렇습니다.",
295
- "figure.text.drive-loop-note": "시각이 흐릅니다. 인스턴스가 주는 값은 배속입니다 — 도는 롤러가 그렇습니다.",
296
293
  "figure.text.emissive-explained": "이 면이 스스로 밝아집니다. 0 이면 램프가 아닙니다. 주변을 물들이지는 않습니다.",
297
294
  "figure.text.environment-explained": "금속 재질이 무엇을 비출지 정한다. 형상에는 영향이 없다.",
298
295
  "figure.text.expand-parts-pane": "부품 목록 펼치기",
299
296
  "figure.text.expand-properties-pane": "속성 칸 펼치기",
300
297
  "figure.text.figure-display-name": "표시 이름",
298
+ "figure.text.figure-type-placeholder": "도형 식별 타입 (예: OHT)",
301
299
  "figure.text.find-by-this-tag": "이 태그로 찾기",
302
300
  "figure.text.fits-n-instances": "{n}개까지",
303
301
  "figure.text.floor-explained": "좌표 바탕과 겹치므로 보통 끈다",
@@ -331,6 +329,8 @@
331
329
  "figure.text.mirror-would-overlap": "이미 가운데에 있어 대칭이 제자리입니다. 겹친 부품이 생깁니다.",
332
330
  "figure.text.mode-edit-explained": "부품을 놓고 고칩니다. 늘 기준 크기입니다.",
333
331
  "figure.text.mode-preview-explained": "보드에 놓았을 때의 모습입니다. 기준 크기와 늘린 것을 나란히 놓습니다.",
332
+ "figure.text.more-segment-options": "고급 분할 수",
333
+ "figure.text.motion-intent-help": "움직일 부품을 고른 뒤 목적을 선택하세요. 만들어진 동작은 아래 고급 편집에서 조정할 수 있습니다.",
334
334
  "figure.text.must-fix-to-release": "고쳐야 하는 것",
335
335
  "figure.text.n-of-limit": "{used} / {limit}",
336
336
  "figure.text.n-parts-at-most": "부품 {limit}개까지",
@@ -342,7 +342,11 @@
342
342
  "figure.text.nothing-released-yet": "아직 발행한 판이 없습니다. 발행하면 그때의 도형이 판으로 남습니다.",
343
343
  "figure.text.on-by-default-explained": "보드에 놓았을 때의 처음 상태입니다. 인스턴스가 켜고 끄면 그것이 이깁니다.",
344
344
  "figure.text.other-segment-count": "직접 입력",
345
- "figure.text.more-segment-options": "고급 분할 ",
345
+ "figure.text.palette-purpose-explained": " 이름이 아니라 이 부품이 화면에서 맡을 역할을 고릅니다.",
346
+ "figure.text.parameter-curve-is-the-value-axis": "곡선의 시각 축이 값의 구간입니다. 처음이 범위의 최소, 끝이 최대이고, 끝 시각이 곧 전 구간을 움직이는 데 걸리는 시간입니다.",
347
+ "figure.text.parameter-is-a-value-not-a-timeline": "재생되는 것이 아니라 지금 그만큼인 것입니다 — 「호이스트가 1200mm 내려와 있다」처럼. 인스턴스가 그 수를 줍니다.",
348
+ "figure.text.parameter-name-is-how-a-value-arrives": "인스턴스가 이 이름으로 값을 줍니다.",
349
+ "figure.text.parameter-needs-a-name": "이름이 없으면 값이 닿을 자리가 없습니다.",
346
350
  "figure.text.part-limit-reached": "디테일 등급이 허용하는 부품 수를 모두 사용했습니다. 등급을 올리거나 부품을 삭제하세요.",
347
351
  "figure.text.part-limit-reached-short": "{level} 등급은 부품 {limit}개까지입니다. 등급을 올리거나 부품을 삭제하세요.",
348
352
  "figure.text.part-name-cannot-be-empty": "부품 이름을 입력해 주세요.",
@@ -351,12 +355,18 @@
351
355
  "figure.text.path-translation-unit": "부품 기준으로 옮긴 거리입니다. 0 이 제자리입니다.",
352
356
  "figure.text.pick-a-shape-above-to-start": "위에서 도형을 선택해 첫 부품을 추가하세요.",
353
357
  "figure.text.picked-changes-do-not-validate": "선택한 조합은 형식에 맞지 않습니다",
354
- "figure.text.picture-is-for-proportions": "비율과 형태를 참고합니다. 표면 무늬는 반영하지 않습니다.",
355
358
  "figure.text.pivot-defaults-to-the-part-centre": "적지 않으면 부품 제 중심입니다. 부품 기준 좌표입니다.",
356
359
  "figure.text.placement-explained": "3D 씬에서 객체의 기준면을 정합니다 (바닥: AGV/컨베이어, 천정: OHT/호이스트, 중심: 센서/드론).",
357
360
  "figure.text.preview-blocked-by-errors": "형식을 어겨서 세울 수 없습니다. 성숙도 탭에 사유가 있습니다.",
358
361
  "figure.text.preview-needs-a-part": "보드에 놓았을 때의 모습을 표시합니다. 부품을 만들면 표시됩니다.",
362
+ "figure.text.proposal-feedback-note": "다음 제안에 반영할 메모 (현재 세션에만 사용)",
363
+ "figure.text.proposal-feedback-placeholder": "예: 실루엣은 유지하되 포트가 더 잘 보이게",
359
364
  "figure.text.put-on-floor": "바닥(Z=0)에 붙입니다.",
365
+ "figure.text.range-needs-room": "최대가 최소보다 커야 합니다. 같으면 움직일 자리가 없습니다.",
366
+ "figure.text.recipe-conveyor": "계속 움직임 · 입력값은 속도 또는 배속",
367
+ "figure.text.recipe-gate": "상태 위치 · 입력값은 열림 비율 0~100%",
368
+ "figure.text.recipe-lift": "상태 위치 · 입력값은 높이 0~100%",
369
+ "figure.text.recipe-pusher": "상태 위치 · 입력값은 이동 위치 0~100%",
360
370
  "figure.text.release-needs-a-save-first": "저장하지 않은 변경이 있습니다. 발행은 저장된 것을 내보내므로, 먼저 저장하세요.",
361
371
  "figure.text.releasing": "발행하고 있습니다…",
362
372
  "figure.text.renaming-a-part-breaks-bindings": "이름은 저장되는 식별자입니다. 바꾸면 이미 배치된 인스턴스의 바인딩이 끊깁니다.",
@@ -373,8 +383,10 @@
373
383
  "figure.text.rung-flow-note": "담는 것에 더해 문으로 받고 보낸다. 컨베이어 · 슈트 · 소터",
374
384
  "figure.text.rung-hold-note": "물건을 놓을 자리를 갖는다. 랙 · 팔레트 · 작업대",
375
385
  "figure.text.rung-none-note": "물건을 받지 않는다. 대부분의 도형이 여기에 해당한다",
386
+ "figure.text.save-new-figure-desc": "보드와 캔버스에서 식별할 고유 타입 코드와 이름을 정합니다.",
376
387
  "figure.text.save-the-figure-before-releasing": "아직 저장되지 않은 도형입니다. 저장하면 발행할 수 있습니다.",
377
388
  "figure.text.saving-figure": "저장 중",
389
+ "figure.text.scene-reference-explained": "어떤 보드에 놓인 것으로 보고 있는지 정합니다. 도형의 배치 기준과 다릅니다 — 바닥 기준 보드에 천정 기반 도형을 놓으면 보드는 그대로이고 도형이 천장 높이에 매달립니다.",
378
390
  "figure.text.search-figure": "이름 · 타입 · 설명 · 분류 · 태그로 찾기",
379
391
  "figure.text.select-a-part-to-edit": "부품을 선택하면 여기에서 편집합니다.",
380
392
  "figure.text.show-all-parts": "모두 보이기",
@@ -389,18 +401,17 @@
389
401
  "figure.text.tags-explained": "분류로는 못 하는 찾기를 위한 것입니다. 여럿 붙일 수 있습니다 — 컨베이어이면서 반출 구역의 것일 수 있습니다. 쉼표로 나눠 적습니다.",
390
402
  "figure.text.tags-placeholder": "예: 반출, 자동, 2층",
391
403
  "figure.text.thumbnail-not-made-yet": "미리보기 그림 없음",
404
+ "figure.text.tools-explained": "맞추기는 위치·크기·회전을 직접 입력한 뒤 빠르게 정렬하는 도구입니다. 왼쪽부터 X 가운데, Z 가운데, 바닥에 붙이기, X 대칭, Z 대칭, 눈금 맞춤입니다. 아이콘 위에 마우스를 올리면 각 동작을 다시 확인할 수 있습니다.",
392
405
  "figure.text.triangle-count": "삼각형 {count}개",
393
406
  "figure.text.two-keys-at-least": "키가 둘은 있어야 합니다. 하나뿐이면 움직임이 아니라 자세 하나입니다.",
394
407
  "figure.text.type-name-already-taken": "타입 이름 {type} 은 이미 쓰이고 있습니다. 나중에 바꿀 수 없으니 다른 이름을 정해 주세요.",
395
408
  "figure.text.type-name-cannot-change": "타입 이름은 저장되는 식별자여서 만든 뒤에는 바꿀 수 없습니다.",
409
+ "figure.text.unit-is-a-word-not-a-rule": "화면과 인스턴스가 읽는 낱말입니다 — mm · deg · % 처럼. 형식은 해석하지 않습니다.",
396
410
  "figure.text.unsaved-changes": "저장 안 됨",
397
411
  "figure.text.version-number": "{version}판",
398
412
  "figure.text.view-settings-are-not-saved": "여기 설정은 저장되지 않습니다. 보기 편한 상태를 만드는 곳이고, 자산에는 딸려 가지 않습니다.",
399
413
  "figure.text.what-a-figure-is": "Figure 는 직접 저작한 3D 컴포넌트입니다. 단순한 도형을 조합해 만들면 보드에 배치할 수 있는 컴포넌트가 되고, 여러 개를 배치해도 형상과 재질을 공유합니다.",
400
414
  "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
415
  "figure.title.figures": "Figure",
405
416
  "figure.title.new-figure": "새 Figure",
406
417
  "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.",