@things-factory/figure-ui 10.1.4 → 10.1.5

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 (34) hide show
  1. package/client/graphql/index.ts +87 -12
  2. package/client/modeller/figure-history-panel.ts +324 -0
  3. package/client/modeller/figure-side.ts +19 -1
  4. package/client/pages/figure-list-page.ts +363 -226
  5. package/client/pages/figure-modeller-page.ts +22 -0
  6. package/client/types.ts +17 -0
  7. package/dist-client/graphql/index.d.ts +24 -4
  8. package/dist-client/graphql/index.js +70 -9
  9. package/dist-client/graphql/index.js.map +1 -1
  10. package/dist-client/modeller/figure-history-panel.d.ts +42 -0
  11. package/dist-client/modeller/figure-history-panel.js +343 -0
  12. package/dist-client/modeller/figure-history-panel.js.map +1 -0
  13. package/dist-client/modeller/figure-side.d.ts +6 -0
  14. package/dist-client/modeller/figure-side.js +31 -0
  15. package/dist-client/modeller/figure-side.js.map +1 -1
  16. package/dist-client/pages/figure-list-page.d.ts +44 -21
  17. package/dist-client/pages/figure-list-page.js +351 -246
  18. package/dist-client/pages/figure-list-page.js.map +1 -1
  19. package/dist-client/pages/figure-modeller-page.d.ts +9 -0
  20. package/dist-client/pages/figure-modeller-page.js +20 -0
  21. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  22. package/dist-client/tsconfig.tsbuildinfo +1 -1
  23. package/dist-client/types.d.ts +19 -0
  24. package/dist-client/types.js.map +1 -1
  25. package/package.json +4 -2
  26. package/translations/en.json +15 -0
  27. package/translations/ja.json +17 -2
  28. package/translations/ko.json +17 -2
  29. package/translations/ms.json +17 -2
  30. package/translations/zh.json +17 -2
  31. package/client/viewparts/figure-card.ts +0 -226
  32. package/dist-client/viewparts/figure-card.d.ts +0 -24
  33. package/dist-client/viewparts/figure-card.js +0 -221
  34. package/dist-client/viewparts/figure-card.js.map +0 -1
@@ -31,6 +31,25 @@ export interface Figure {
31
31
  properties?: string;
32
32
  version?: number;
33
33
  }
34
+ /**
35
+ * 발행된 판 하나.
36
+ *
37
+ * 저작 중 저장은 여기 오지 않는다 — 판본은 발행에서만 생긴다.
38
+ */
39
+ export interface FigureVersion {
40
+ version: number;
41
+ /** 발행하며 남긴 말. */
42
+ comment?: string;
43
+ state?: 'draft' | 'released';
44
+ updatedAt?: string;
45
+ updater?: {
46
+ id: string;
47
+ name: string;
48
+ };
49
+ score?: number;
50
+ triangles?: number;
51
+ groups?: number;
52
+ }
34
53
  export interface FigureListResult {
35
54
  items: Figure[];
36
55
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../client/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 화면이 다루는 모양.\n *\n * 정본 형식(`FigureSource`)의 타입은 **여기서 다시 정의하지 않는다** —\n * `@hatiolab/figure-model` 에서 가져온다. 두 벌이면 갈리고, 갈리면 화면이 서버가\n * 거절할 것을 만들어 낸다.\n */\nexport type { FigureSource, FigureBlueprint, FigurePart, ErrorCode, ViolationCode } from '@hatiolab/figure-model'\n\n/** 서버가 돌려주는 Figure 한 벌. `source` 는 저작면에서만 받는다. */\nexport interface Figure {\n id: string\n /** 컴포넌트 타입 이름. **만든 뒤에 고칠 수 없다.** */\n type: string\n name: string\n description?: string\n category?: string\n state?: 'draft' | 'released'\n /** 재활용 점수 0~100. 서버가 정본에서 계산한다 — 화면이 보내는 값이 아니다. */\n score?: number\n triangles?: number\n groups?: number\n thumbnail?: string\n thumbnailUpdatedAt?: string\n updatedAt?: string\n updater?: { id: string; name: string }\n /** `FigureSource` JSON 문자열. 목록 질의에는 실려 오지 않는다. */\n source?: string\n properties?: string\n version?: number\n}\n\nexport interface FigureListResult {\n items: Figure[]\n total: number\n}\n\n/**\n * 새 Figure.\n *\n * `score`·`triangles`·`groups` 가 없다 — **서버가 정본에서 계산한다.** 화면이 보내면\n * 거짓이 들어오고 목록이 실물과 다른 것을 보여 준다.\n */\nexport interface NewFigure {\n type: string\n name: string\n description?: string\n category?: string\n source: string\n properties?: string\n state?: 'draft' | 'released'\n thumbnail?: string\n}\n\n/**\n * 수정.\n *\n * `type` 이 없다 — 저장되는 식별자라 고칠 수 없다. 배치된 보드가 그 이름으로 타입을\n * 찾으므로, 바꾸면 그 보드가 빈 화면이 된다.\n */\nexport interface FigurePatch {\n name?: string\n description?: string\n category?: string\n source?: string\n properties?: string\n state?: 'draft' | 'released'\n thumbnail?: string\n}\n\n/** 검증 결과 한 줄. 코드는 figure-model 의 것을 그대로 쓴다. */\nexport interface FigureFinding {\n code: string\n message: string\n at?: string\n}\n\n/**\n * 저작 보조가 낸 후보.\n *\n * **정본이 아니다.** 저작자가 보고 받아야 정본이 된다 — 서버는 저장하지 않고\n * 돌려주기만 한다.\n */\nexport interface FigureProposal {\n /** 후보 정본. JSON 문자열이다 — 화면이 파싱한다. */\n source: string\n score: number\n grade: string\n triangles: number\n /** 재질 묶음 = 인스턴스 하나가 무는 draw call. */\n groups: number\n /** 형식은 맞으나 정책을 넘은 것. 막지 않는다 — 저작자가 정한다. */\n violations: FigureFinding[]\n /** 몇 번 만에 됐나. 진단용이다. */\n attempts: number\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../client/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 화면이 다루는 모양.\n *\n * 정본 형식(`FigureSource`)의 타입은 **여기서 다시 정의하지 않는다** —\n * `@hatiolab/figure-model` 에서 가져온다. 두 벌이면 갈리고, 갈리면 화면이 서버가\n * 거절할 것을 만들어 낸다.\n */\nexport type { FigureSource, FigureBlueprint, FigurePart, ErrorCode, ViolationCode } from '@hatiolab/figure-model'\n\n/** 서버가 돌려주는 Figure 한 벌. `source` 는 저작면에서만 받는다. */\nexport interface Figure {\n id: string\n /** 컴포넌트 타입 이름. **만든 뒤에 고칠 수 없다.** */\n type: string\n name: string\n description?: string\n category?: string\n state?: 'draft' | 'released'\n /** 재활용 점수 0~100. 서버가 정본에서 계산한다 — 화면이 보내는 값이 아니다. */\n score?: number\n triangles?: number\n groups?: number\n thumbnail?: string\n thumbnailUpdatedAt?: string\n updatedAt?: string\n updater?: { id: string; name: string }\n /** `FigureSource` JSON 문자열. 목록 질의에는 실려 오지 않는다. */\n source?: string\n properties?: string\n version?: number\n}\n\n/**\n * 발행된 판 하나.\n *\n * 저작 중 저장은 여기 오지 않는다 — 판본은 발행에서만 생긴다.\n */\nexport interface FigureVersion {\n version: number\n /** 발행하며 남긴 말. */\n comment?: string\n state?: 'draft' | 'released'\n updatedAt?: string\n updater?: { id: string; name: string }\n score?: number\n triangles?: number\n groups?: number\n}\n\nexport interface FigureListResult {\n items: Figure[]\n total: number\n}\n\n/**\n * 새 Figure.\n *\n * `score`·`triangles`·`groups` 가 없다 — **서버가 정본에서 계산한다.** 화면이 보내면\n * 거짓이 들어오고 목록이 실물과 다른 것을 보여 준다.\n */\nexport interface NewFigure {\n type: string\n name: string\n description?: string\n category?: string\n source: string\n properties?: string\n state?: 'draft' | 'released'\n thumbnail?: string\n}\n\n/**\n * 수정.\n *\n * `type` 이 없다 — 저장되는 식별자라 고칠 수 없다. 배치된 보드가 그 이름으로 타입을\n * 찾으므로, 바꾸면 그 보드가 빈 화면이 된다.\n */\nexport interface FigurePatch {\n name?: string\n description?: string\n category?: string\n source?: string\n properties?: string\n state?: 'draft' | 'released'\n thumbnail?: string\n}\n\n/** 검증 결과 한 줄. 코드는 figure-model 의 것을 그대로 쓴다. */\nexport interface FigureFinding {\n code: string\n message: string\n at?: string\n}\n\n/**\n * 저작 보조가 낸 후보.\n *\n * **정본이 아니다.** 저작자가 보고 받아야 정본이 된다 — 서버는 저장하지 않고\n * 돌려주기만 한다.\n */\nexport interface FigureProposal {\n /** 후보 정본. JSON 문자열이다 — 화면이 파싱한다. */\n source: string\n score: number\n grade: string\n triangles: number\n /** 재질 묶음 = 인스턴스 하나가 무는 draw call. */\n groups: number\n /** 형식은 맞으나 정책을 넘은 것. 막지 않는다 — 저작자가 정한다. */\n violations: FigureFinding[]\n /** 몇 번 만에 됐나. 진단용이다. */\n attempts: number\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/figure-ui",
3
- "version": "10.1.4",
3
+ "version": "10.1.5",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "@things-factory:registry": "https://registry.npmjs.org"
@@ -29,13 +29,15 @@
29
29
  "@hatiolab/figure-model": "^0.1.12",
30
30
  "@hatiolab/things-scene": "^10.1.6",
31
31
  "@material/web": "^2.0.0",
32
+ "@operato/data-grist": "^10.0.0",
32
33
  "@operato/graphql": "^10.0.0",
33
34
  "@operato/i18n": "^10.0.0",
34
35
  "@operato/layout": "^10.0.0",
36
+ "@operato/p13n": "^10.0.0",
35
37
  "@operato/shell": "^10.0.0",
36
38
  "@operato/styles": "^10.0.0",
37
39
  "@things-factory/figure-service": "^10.1.4",
38
40
  "three": "^0.185.1"
39
41
  },
40
- "gitHead": "c653a2967daa76b3828f1eb7f4eb18934263d4b8"
42
+ "gitHead": "d7e60939822ef18e5311311746b2abd28f169173"
41
43
  }
@@ -13,8 +13,10 @@
13
13
  "button.move-part-down": "move down",
14
14
  "button.move-part-up": "move up",
15
15
  "button.new-figure": "new figure",
16
+ "button.release": "release",
16
17
  "button.remove-part": "delete",
17
18
  "button.reset-view": "reset",
19
+ "button.revert": "revert",
18
20
  "button.save": "save",
19
21
  "button.see-the-trend-chart": "see the trend chart",
20
22
  "button.snap": "snap",
@@ -46,6 +48,7 @@
46
48
  "label.budget-transparent": "transparent materials",
47
49
  "label.budgets": "budgets",
48
50
  "label.by-axis": "maturity by axis",
51
+ "label.capacity": "placement limit",
49
52
  "label.cast-shadow": "cast shadow",
50
53
  "label.coordinate-ground": "coordinate ground",
51
54
  "label.corner-round": "corner round",
@@ -76,6 +79,7 @@
76
79
  "label.follow-camera": "follow camera",
77
80
  "label.guides": "guides",
78
81
  "label.hemisphere-light": "hemisphere light",
82
+ "label.history": "history",
79
83
  "label.hollow-floor": "floor thickness",
80
84
  "label.hollow-wall": "wall thickness",
81
85
  "label.intensity": "intensity",
@@ -111,7 +115,9 @@
111
115
  "label.primitive-wall": "wall",
112
116
  "label.properties": "properties",
113
117
  "label.proposed": "proposed",
118
+ "label.release": "release",
114
119
  "label.released": "released",
120
+ "label.released-versions": "released versions",
115
121
  "label.repeat-axis": "axis it repeats along",
116
122
  "label.repeat-pitch": "pitch",
117
123
  "label.reuse-trend": "reuse trend",
@@ -128,6 +134,7 @@
128
134
  "label.sizing-scale": "scales proportionally",
129
135
  "label.sizing-stretch": "stretches on one axis",
130
136
  "label.sky-color": "sky color",
137
+ "label.state": "state",
131
138
  "label.status-colors": "lit colors (lamps · indicators)",
132
139
  "label.tools": "align",
133
140
  "label.transparent": "transparent",
@@ -139,6 +146,7 @@
139
146
  "label.weight": "weight",
140
147
  "text.add-a-shape": "click to add a part",
141
148
  "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.",
149
+ "text.already-released-edit-to-release-again": "already released. edit and save to go back to draft, then release again.",
142
150
  "text.ask-create-example": "e.g. a three-tier conveyor sorter",
143
151
  "text.ask-revise-example": "e.g. bring it down to two material groups",
144
152
  "text.ask-to-create": "create",
@@ -211,6 +219,7 @@
211
219
  "text.no-findings": "nothing to report.",
212
220
  "text.not-measurable-yet": "not measurable",
213
221
  "text.not-measured-yet": "not measured",
222
+ "text.nothing-released-yet": "nothing released yet. releasing keeps the figure as it is now, as a version.",
214
223
  "text.on-by-default-explained": "the starting state when placed on a board. an instance switching it wins.",
215
224
  "text.other-segment-count": "enter a value",
216
225
  "text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
@@ -221,11 +230,15 @@
221
230
  "text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
222
231
  "text.preview-needs-a-part": "add a part and the board view appears here.",
223
232
  "text.put-on-floor": "drop it to the floor (Z=0).",
233
+ "text.release-needs-a-save-first": "there are unsaved changes. a release publishes what was saved, so save first.",
234
+ "text.releasing": "releasing…",
224
235
  "text.renaming-a-part-breaks-bindings": "the name is a stored identifier — changing it breaks bindings on instances already placed.",
225
236
  "text.repeat-edits-the-unit": "you author one unit even though several appear. the gizmo moves the whole run, while size and rotation apply to that one unit — the pitch is declared separately so the layout stays. a single copy cannot be edited on its own.",
226
237
  "text.repeat-pitch-explained": "centre to centre distance. it does not depend on the part size, so widening or turning the part leaves the layout alone.",
227
238
  "text.report-appears-when-you-add-a-part": "weight and score appear once the figure has a part.",
228
239
  "text.reuse-score-explained": "how much headroom is left in the declared limits. the one closest to its cap sets the score.",
240
+ "text.revert-to-version-confirm": "revert to v{version}? what you are working on will be replaced by that version.",
241
+ "text.save-the-figure-before-releasing": "this figure has not been saved yet. save it and you can release it.",
229
242
  "text.saving": "saving",
230
243
  "text.search-figure-by-name-or-type": "search by name or type",
231
244
  "text.select-a-part-to-edit": "select a part to edit it here.",
@@ -244,8 +257,10 @@
244
257
  "text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
245
258
  "text.type-name-cannot-change": "the type name is a stored identifier and cannot be changed after creation.",
246
259
  "text.unsaved-changes": "unsaved",
260
+ "text.version-number": "v{version}",
247
261
  "text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
248
262
  "text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a board, sharing shape and material across every instance.",
263
+ "text.what-changed-in-this-release": "what changed in this release",
249
264
  "title.figures": "figures",
250
265
  "title.new-figure": "new figure"
251
266
  }
@@ -13,8 +13,10 @@
13
13
  "button.move-part-down": "move down",
14
14
  "button.move-part-up": "move up",
15
15
  "button.new-figure": "new figure",
16
+ "button.release": "公開する",
16
17
  "button.remove-part": "delete",
17
18
  "button.reset-view": "reset",
19
+ "button.revert": "戻す",
18
20
  "button.save": "save",
19
21
  "button.see-the-trend-chart": "see the trend chart",
20
22
  "button.snap": "snap",
@@ -46,6 +48,7 @@
46
48
  "label.budget-transparent": "transparent materials",
47
49
  "label.budgets": "budgets",
48
50
  "label.by-axis": "maturity by axis",
51
+ "label.capacity": "配置上限",
49
52
  "label.cast-shadow": "cast shadow",
50
53
  "label.coordinate-ground": "coordinate ground",
51
54
  "label.corner-round": "corner round",
@@ -55,7 +58,7 @@
55
58
  "label.detail-level": "detail level",
56
59
  "label.distinct-materials": "distinct materials",
57
60
  "label.distinct-shapes": "distinct shapes",
58
- "label.draft": "draft",
61
+ "label.draft": "下書き",
59
62
  "label.draw-calls-at-100": "draw calls for 100",
60
63
  "label.draw-calls-at-10k": "draw calls at 10k instances",
61
64
  "label.emissive": "emissive",
@@ -76,6 +79,7 @@
76
79
  "label.follow-camera": "follow camera",
77
80
  "label.guides": "guides",
78
81
  "label.hemisphere-light": "hemisphere light",
82
+ "label.history": "履歴",
79
83
  "label.hollow-floor": "floor thickness",
80
84
  "label.hollow-wall": "wall thickness",
81
85
  "label.intensity": "intensity",
@@ -111,7 +115,9 @@
111
115
  "label.primitive-wall": "wall",
112
116
  "label.properties": "properties",
113
117
  "label.proposed": "proposed",
114
- "label.released": "released",
118
+ "label.release": "公開",
119
+ "label.released": "公開済み",
120
+ "label.released-versions": "公開された版",
115
121
  "label.repeat-axis": "axis it repeats along",
116
122
  "label.repeat-pitch": "pitch",
117
123
  "label.reuse-trend": "reuse trend",
@@ -128,6 +134,7 @@
128
134
  "label.sizing-scale": "scales proportionally",
129
135
  "label.sizing-stretch": "stretches on one axis",
130
136
  "label.sky-color": "sky color",
137
+ "label.state": "状態",
131
138
  "label.status-colors": "lit colors (lamps · indicators)",
132
139
  "label.tools": "align",
133
140
  "label.transparent": "transparent",
@@ -139,6 +146,7 @@
139
146
  "label.weight": "weight",
140
147
  "text.add-a-shape": "click to add a part",
141
148
  "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.",
149
+ "text.already-released-edit-to-release-again": "すでに公開済みです。修正して保存すると下書きに戻り、そこで再び公開できます。",
142
150
  "text.ask-create-example": "e.g. a three-tier conveyor sorter",
143
151
  "text.ask-revise-example": "e.g. bring it down to two material groups",
144
152
  "text.ask-to-create": "create",
@@ -211,6 +219,7 @@
211
219
  "text.no-findings": "nothing to report.",
212
220
  "text.not-measurable-yet": "not measurable",
213
221
  "text.not-measured-yet": "not measured",
222
+ "text.nothing-released-yet": "まだ公開した版がありません。公開すると、その時点のフィギュアが版として残ります。",
214
223
  "text.on-by-default-explained": "the starting state when placed on a board. an instance switching it wins.",
215
224
  "text.other-segment-count": "enter a value",
216
225
  "text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
@@ -221,11 +230,15 @@
221
230
  "text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
222
231
  "text.preview-needs-a-part": "add a part and the board view appears here.",
223
232
  "text.put-on-floor": "drop it to the floor (Z=0).",
233
+ "text.release-needs-a-save-first": "保存していない変更があります。公開は保存されたものを出すので、先に保存してください。",
234
+ "text.releasing": "公開しています…",
224
235
  "text.renaming-a-part-breaks-bindings": "the name is a stored identifier — changing it breaks bindings on instances already placed.",
225
236
  "text.repeat-edits-the-unit": "you author one unit even though several appear. the gizmo moves the whole run, while size and rotation apply to that one unit — the pitch is declared separately so the layout stays. a single copy cannot be edited on its own.",
226
237
  "text.repeat-pitch-explained": "centre to centre distance. it does not depend on the part size, so widening or turning the part leaves the layout alone.",
227
238
  "text.report-appears-when-you-add-a-part": "weight and score appear once the figure has a part.",
228
239
  "text.reuse-score-explained": "how much headroom is left in the declared limits. the one closest to its cap sets the score.",
240
+ "text.revert-to-version-confirm": "第{version}版に戻します。作業中の内容がその版のものに変わります。続けますか?",
241
+ "text.save-the-figure-before-releasing": "まだ保存されていません。保存すると公開できます。",
229
242
  "text.saving": "saving",
230
243
  "text.search-figure-by-name-or-type": "search by name or type",
231
244
  "text.select-a-part-to-edit": "select a part to edit it here.",
@@ -244,8 +257,10 @@
244
257
  "text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
245
258
  "text.type-name-cannot-change": "the type name is a stored identifier and cannot be changed after creation.",
246
259
  "text.unsaved-changes": "unsaved",
260
+ "text.version-number": "第{version}版",
247
261
  "text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
248
262
  "text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a board, sharing shape and material across every instance.",
263
+ "text.what-changed-in-this-release": "この版で何が変わったか",
249
264
  "title.figures": "figures",
250
265
  "title.new-figure": "new figure"
251
266
  }
@@ -13,8 +13,10 @@
13
13
  "button.move-part-down": "아래로",
14
14
  "button.move-part-up": "위로",
15
15
  "button.new-figure": "새 Figure",
16
+ "button.release": "발행하기",
16
17
  "button.remove-part": "삭제",
17
18
  "button.reset-view": "처음으로",
19
+ "button.revert": "되돌리기",
18
20
  "button.save": "저장",
19
21
  "button.see-the-trend-chart": "추이 그래프 보기",
20
22
  "button.snap": "눈금에",
@@ -46,6 +48,7 @@
46
48
  "label.budget-transparent": "투명 재질",
47
49
  "label.budgets": "한도",
48
50
  "label.by-axis": "축별 성숙도",
51
+ "label.capacity": "배치 한도",
49
52
  "label.cast-shadow": "그림자 드리우기",
50
53
  "label.coordinate-ground": "좌표 바탕",
51
54
  "label.corner-round": "모서리 굴림",
@@ -55,7 +58,7 @@
55
58
  "label.detail-level": "디테일 등급",
56
59
  "label.distinct-materials": "서로 다른 재질",
57
60
  "label.distinct-shapes": "서로 다른 형상",
58
- "label.draft": "작성 중",
61
+ "label.draft": "초안",
59
62
  "label.draw-calls-at-100": "100개 기준 draw call",
60
63
  "label.draw-calls-at-10k": "1만개 기준 draw call",
61
64
  "label.emissive": "자체발광",
@@ -76,6 +79,7 @@
76
79
  "label.follow-camera": "카메라 따라가기",
77
80
  "label.guides": "안내선",
78
81
  "label.hemisphere-light": "헤미스피어 라이트",
82
+ "label.history": "이력",
79
83
  "label.hollow-floor": "바닥 두께",
80
84
  "label.hollow-wall": "벽 두께",
81
85
  "label.intensity": "세기",
@@ -111,7 +115,9 @@
111
115
  "label.primitive-wall": "벽",
112
116
  "label.properties": "속성",
113
117
  "label.proposed": "제안",
114
- "label.released": "배포됨",
118
+ "label.release": "발행",
119
+ "label.released": "발행됨",
120
+ "label.released-versions": "발행된 판",
115
121
  "label.repeat-axis": "늘어나는 축",
116
122
  "label.repeat-pitch": "한 칸 (피치)",
117
123
  "label.reuse-trend": "재사용 추이",
@@ -128,6 +134,7 @@
128
134
  "label.sizing-scale": "비례 확대",
129
135
  "label.sizing-stretch": "한 축만 늘임",
130
136
  "label.sky-color": "배경색",
137
+ "label.state": "상태",
131
138
  "label.status-colors": "켜진 색 (램프 · 표시등)",
132
139
  "label.tools": "맞추기",
133
140
  "label.transparent": "투명",
@@ -139,6 +146,7 @@
139
146
  "label.weight": "무게",
140
147
  "text.add-a-shape": "클릭하면 부품이 추가됩니다",
141
148
  "text.all-lights-off": "빛이 둘 다 꺼져 있습니다. 스스로 빛나는 면만 보이고 나머지는 까맣게 나옵니다 — 램프가 켜졌는지 확인할 때 쓰는 상태입니다.",
149
+ "text.already-released-edit-to-release-again": "이미 발행되어 있습니다. 고쳐서 저장하면 초안으로 돌아가고, 그때 다시 발행할 수 있습니다.",
142
150
  "text.ask-create-example": "예: 3단 선반형 컨베이어 소터",
143
151
  "text.ask-revise-example": "예: 재질 묶음을 2개로 줄여줘",
144
152
  "text.ask-to-create": "신규",
@@ -211,6 +219,7 @@
211
219
  "text.no-findings": "확인할 점이 없습니다.",
212
220
  "text.not-measurable-yet": "측정 불가",
213
221
  "text.not-measured-yet": "미측정",
222
+ "text.nothing-released-yet": "아직 발행한 판이 없습니다. 발행하면 그때의 도형이 판으로 남습니다.",
214
223
  "text.on-by-default-explained": "보드에 놓았을 때의 처음 상태입니다. 인스턴스가 켜고 끄면 그것이 이깁니다.",
215
224
  "text.other-segment-count": "직접 입력",
216
225
  "text.part-limit-reached": "디테일 등급이 허용하는 부품 수를 모두 사용했습니다. 등급을 올리거나 부품을 삭제하세요.",
@@ -221,11 +230,15 @@
221
230
  "text.preview-blocked-by-errors": "형식을 어겨서 세울 수 없습니다. 성숙도 탭에 사유가 있습니다.",
222
231
  "text.preview-needs-a-part": "부품이 하나라도 있으면 여기에 보드에 놓인 모습이 나옵니다.",
223
232
  "text.put-on-floor": "바닥(Z=0)에 붙입니다.",
233
+ "text.release-needs-a-save-first": "저장하지 않은 변경이 있습니다. 발행은 저장된 것을 내보내므로, 먼저 저장하세요.",
234
+ "text.releasing": "발행하고 있습니다…",
224
235
  "text.renaming-a-part-breaks-bindings": "이름은 저장되는 식별자입니다. 바꾸면 이미 배치된 인스턴스의 바인딩이 끊깁니다.",
225
236
  "text.repeat-edits-the-unit": "화면에 여럿으로 보여도 저작하는 것은 하나입니다. 기즈모로 옮기면 줄 전체가 움직이고, 크기와 회전은 그 하나에만 걸립니다 — 한 칸은 따로 정하므로 배치는 그대로입니다. 사본 하나만 따로 고칠 수는 없습니다. 가운데를 비우거나 하나만 색을 달리하려면 그 부품을 따로 놓아야 합니다.",
226
237
  "text.repeat-pitch-explained": "중심에서 다음 중심까지의 거리입니다. 부품 크기와 무관해서, 부품을 굵게 하거나 돌려도 배치가 그대로입니다.",
227
238
  "text.report-appears-when-you-add-a-part": "부품이 하나라도 있으면 무게와 점수가 나옵니다.",
228
239
  "text.reuse-score-explained": "정해진 한도에 얼마나 여유가 남았는지입니다. 한도에 가장 가까운 항목 하나가 점수를 정합니다.",
240
+ "text.revert-to-version-confirm": "{version}판으로 되돌립니다. 지금 저작 중인 내용이 그 판의 것으로 바뀝니다. 계속할까요?",
241
+ "text.save-the-figure-before-releasing": "아직 저장되지 않은 도형입니다. 저장하면 발행할 수 있습니다.",
229
242
  "text.saving": "저장 중",
230
243
  "text.search-figure-by-name-or-type": "이름이나 타입으로 찾기",
231
244
  "text.select-a-part-to-edit": "부품을 선택하면 여기에서 편집합니다.",
@@ -244,8 +257,10 @@
244
257
  "text.type-name-already-taken": "타입 이름 {type} 은 이미 쓰이고 있습니다. 나중에 바꿀 수 없으니 다른 이름을 정해 주세요.",
245
258
  "text.type-name-cannot-change": "타입 이름은 저장되는 식별자여서 만든 뒤에는 바꿀 수 없습니다.",
246
259
  "text.unsaved-changes": "저장 안 됨",
260
+ "text.version-number": "{version}판",
247
261
  "text.view-settings-are-not-saved": "여기 설정은 저장되지 않습니다. 보기 편한 상태를 만드는 곳이고, 자산에는 딸려 가지 않습니다.",
248
262
  "text.what-a-figure-is": "Figure 는 직접 저작한 3D 컴포넌트입니다. 단순한 도형을 조합해 만들면 보드에 배치할 수 있는 컴포넌트가 되고, 여러 개를 배치해도 형상과 재질을 공유합니다.",
263
+ "text.what-changed-in-this-release": "이번 판에서 무엇이 달라졌는지",
249
264
  "title.figures": "Figure",
250
265
  "title.new-figure": "새 Figure"
251
266
  }
@@ -13,8 +13,10 @@
13
13
  "button.move-part-down": "move down",
14
14
  "button.move-part-up": "move up",
15
15
  "button.new-figure": "new figure",
16
+ "button.release": "terbitkan",
16
17
  "button.remove-part": "delete",
17
18
  "button.reset-view": "reset",
19
+ "button.revert": "kembalikan",
18
20
  "button.save": "save",
19
21
  "button.see-the-trend-chart": "see the trend chart",
20
22
  "button.snap": "snap",
@@ -46,6 +48,7 @@
46
48
  "label.budget-transparent": "transparent materials",
47
49
  "label.budgets": "budgets",
48
50
  "label.by-axis": "maturity by axis",
51
+ "label.capacity": "had penempatan",
49
52
  "label.cast-shadow": "cast shadow",
50
53
  "label.coordinate-ground": "coordinate ground",
51
54
  "label.corner-round": "corner round",
@@ -55,7 +58,7 @@
55
58
  "label.detail-level": "detail level",
56
59
  "label.distinct-materials": "distinct materials",
57
60
  "label.distinct-shapes": "distinct shapes",
58
- "label.draft": "draft",
61
+ "label.draft": "draf",
59
62
  "label.draw-calls-at-100": "draw calls for 100",
60
63
  "label.draw-calls-at-10k": "draw calls at 10k instances",
61
64
  "label.emissive": "emissive",
@@ -76,6 +79,7 @@
76
79
  "label.follow-camera": "follow camera",
77
80
  "label.guides": "guides",
78
81
  "label.hemisphere-light": "hemisphere light",
82
+ "label.history": "sejarah",
79
83
  "label.hollow-floor": "floor thickness",
80
84
  "label.hollow-wall": "wall thickness",
81
85
  "label.intensity": "intensity",
@@ -111,7 +115,9 @@
111
115
  "label.primitive-wall": "wall",
112
116
  "label.properties": "properties",
113
117
  "label.proposed": "proposed",
114
- "label.released": "released",
118
+ "label.release": "terbitkan",
119
+ "label.released": "diterbitkan",
120
+ "label.released-versions": "versi diterbitkan",
115
121
  "label.repeat-axis": "axis it repeats along",
116
122
  "label.repeat-pitch": "pitch",
117
123
  "label.reuse-trend": "reuse trend",
@@ -128,6 +134,7 @@
128
134
  "label.sizing-scale": "scales proportionally",
129
135
  "label.sizing-stretch": "stretches on one axis",
130
136
  "label.sky-color": "sky color",
137
+ "label.state": "keadaan",
131
138
  "label.status-colors": "lit colors (lamps · indicators)",
132
139
  "label.tools": "align",
133
140
  "label.transparent": "transparent",
@@ -139,6 +146,7 @@
139
146
  "label.weight": "weight",
140
147
  "text.add-a-shape": "click to add a part",
141
148
  "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.",
149
+ "text.already-released-edit-to-release-again": "sudah diterbitkan. sunting dan simpan untuk kembali ke draf, kemudian terbitkan semula.",
142
150
  "text.ask-create-example": "e.g. a three-tier conveyor sorter",
143
151
  "text.ask-revise-example": "e.g. bring it down to two material groups",
144
152
  "text.ask-to-create": "create",
@@ -211,6 +219,7 @@
211
219
  "text.no-findings": "nothing to report.",
212
220
  "text.not-measurable-yet": "not measurable",
213
221
  "text.not-measured-yet": "not measured",
222
+ "text.nothing-released-yet": "belum ada versi diterbitkan. penerbitan menyimpan figura seperti sekarang sebagai satu versi.",
214
223
  "text.on-by-default-explained": "the starting state when placed on a board. an instance switching it wins.",
215
224
  "text.other-segment-count": "enter a value",
216
225
  "text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
@@ -221,11 +230,15 @@
221
230
  "text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
222
231
  "text.preview-needs-a-part": "add a part and the board view appears here.",
223
232
  "text.put-on-floor": "drop it to the floor (Z=0).",
233
+ "text.release-needs-a-save-first": "ada perubahan yang belum disimpan. penerbitan mengeluarkan apa yang telah disimpan, jadi simpan dahulu.",
234
+ "text.releasing": "sedang menerbitkan…",
224
235
  "text.renaming-a-part-breaks-bindings": "the name is a stored identifier — changing it breaks bindings on instances already placed.",
225
236
  "text.repeat-edits-the-unit": "you author one unit even though several appear. the gizmo moves the whole run, while size and rotation apply to that one unit — the pitch is declared separately so the layout stays. a single copy cannot be edited on its own.",
226
237
  "text.repeat-pitch-explained": "centre to centre distance. it does not depend on the part size, so widening or turning the part leaves the layout alone.",
227
238
  "text.report-appears-when-you-add-a-part": "weight and score appear once the figure has a part.",
228
239
  "text.reuse-score-explained": "how much headroom is left in the declared limits. the one closest to its cap sets the score.",
240
+ "text.revert-to-version-confirm": "kembali ke v{version}? apa yang sedang anda kerjakan akan digantikan dengan versi itu.",
241
+ "text.save-the-figure-before-releasing": "figura ini belum disimpan. simpan dahulu untuk menerbitkannya.",
229
242
  "text.saving": "saving",
230
243
  "text.search-figure-by-name-or-type": "search by name or type",
231
244
  "text.select-a-part-to-edit": "select a part to edit it here.",
@@ -244,8 +257,10 @@
244
257
  "text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
245
258
  "text.type-name-cannot-change": "the type name is a stored identifier and cannot be changed after creation.",
246
259
  "text.unsaved-changes": "unsaved",
260
+ "text.version-number": "v{version}",
247
261
  "text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
248
262
  "text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a board, sharing shape and material across every instance.",
263
+ "text.what-changed-in-this-release": "apa yang berubah dalam versi ini",
249
264
  "title.figures": "figures",
250
265
  "title.new-figure": "new figure"
251
266
  }
@@ -13,8 +13,10 @@
13
13
  "button.move-part-down": "move down",
14
14
  "button.move-part-up": "move up",
15
15
  "button.new-figure": "new figure",
16
+ "button.release": "发布",
16
17
  "button.remove-part": "delete",
17
18
  "button.reset-view": "reset",
19
+ "button.revert": "回退",
18
20
  "button.save": "save",
19
21
  "button.see-the-trend-chart": "see the trend chart",
20
22
  "button.snap": "snap",
@@ -46,6 +48,7 @@
46
48
  "label.budget-transparent": "transparent materials",
47
49
  "label.budgets": "budgets",
48
50
  "label.by-axis": "maturity by axis",
51
+ "label.capacity": "布置上限",
49
52
  "label.cast-shadow": "cast shadow",
50
53
  "label.coordinate-ground": "coordinate ground",
51
54
  "label.corner-round": "corner round",
@@ -55,7 +58,7 @@
55
58
  "label.detail-level": "detail level",
56
59
  "label.distinct-materials": "distinct materials",
57
60
  "label.distinct-shapes": "distinct shapes",
58
- "label.draft": "draft",
61
+ "label.draft": "草稿",
59
62
  "label.draw-calls-at-100": "draw calls for 100",
60
63
  "label.draw-calls-at-10k": "draw calls at 10k instances",
61
64
  "label.emissive": "emissive",
@@ -76,6 +79,7 @@
76
79
  "label.follow-camera": "follow camera",
77
80
  "label.guides": "guides",
78
81
  "label.hemisphere-light": "hemisphere light",
82
+ "label.history": "历史",
79
83
  "label.hollow-floor": "floor thickness",
80
84
  "label.hollow-wall": "wall thickness",
81
85
  "label.intensity": "intensity",
@@ -111,7 +115,9 @@
111
115
  "label.primitive-wall": "wall",
112
116
  "label.properties": "properties",
113
117
  "label.proposed": "proposed",
114
- "label.released": "released",
118
+ "label.release": "发布",
119
+ "label.released": "已发布",
120
+ "label.released-versions": "已发布版本",
115
121
  "label.repeat-axis": "axis it repeats along",
116
122
  "label.repeat-pitch": "pitch",
117
123
  "label.reuse-trend": "reuse trend",
@@ -128,6 +134,7 @@
128
134
  "label.sizing-scale": "scales proportionally",
129
135
  "label.sizing-stretch": "stretches on one axis",
130
136
  "label.sky-color": "sky color",
137
+ "label.state": "状态",
131
138
  "label.status-colors": "lit colors (lamps · indicators)",
132
139
  "label.tools": "align",
133
140
  "label.transparent": "transparent",
@@ -139,6 +146,7 @@
139
146
  "label.weight": "weight",
140
147
  "text.add-a-shape": "click to add a part",
141
148
  "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.",
149
+ "text.already-released-edit-to-release-again": "已经发布。修改并保存会回到草稿,然后可以再次发布。",
142
150
  "text.ask-create-example": "e.g. a three-tier conveyor sorter",
143
151
  "text.ask-revise-example": "e.g. bring it down to two material groups",
144
152
  "text.ask-to-create": "create",
@@ -211,6 +219,7 @@
211
219
  "text.no-findings": "nothing to report.",
212
220
  "text.not-measurable-yet": "not measurable",
213
221
  "text.not-measured-yet": "not measured",
222
+ "text.nothing-released-yet": "还没有发布过。发布后会把当前的图形保留为一个版本。",
214
223
  "text.on-by-default-explained": "the starting state when placed on a board. an instance switching it wins.",
215
224
  "text.other-segment-count": "enter a value",
216
225
  "text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
@@ -221,11 +230,15 @@
221
230
  "text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
222
231
  "text.preview-needs-a-part": "add a part and the board view appears here.",
223
232
  "text.put-on-floor": "drop it to the floor (Z=0).",
233
+ "text.release-needs-a-save-first": "有未保存的修改。发布的是已保存的内容,请先保存。",
234
+ "text.releasing": "正在发布…",
224
235
  "text.renaming-a-part-breaks-bindings": "the name is a stored identifier — changing it breaks bindings on instances already placed.",
225
236
  "text.repeat-edits-the-unit": "you author one unit even though several appear. the gizmo moves the whole run, while size and rotation apply to that one unit — the pitch is declared separately so the layout stays. a single copy cannot be edited on its own.",
226
237
  "text.repeat-pitch-explained": "centre to centre distance. it does not depend on the part size, so widening or turning the part leaves the layout alone.",
227
238
  "text.report-appears-when-you-add-a-part": "weight and score appear once the figure has a part.",
228
239
  "text.reuse-score-explained": "how much headroom is left in the declared limits. the one closest to its cap sets the score.",
240
+ "text.revert-to-version-confirm": "回退到第{version}版?当前正在编辑的内容会被该版本替换。",
241
+ "text.save-the-figure-before-releasing": "尚未保存。保存后即可发布。",
229
242
  "text.saving": "saving",
230
243
  "text.search-figure-by-name-or-type": "search by name or type",
231
244
  "text.select-a-part-to-edit": "select a part to edit it here.",
@@ -244,8 +257,10 @@
244
257
  "text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
245
258
  "text.type-name-cannot-change": "the type name is a stored identifier and cannot be changed after creation.",
246
259
  "text.unsaved-changes": "unsaved",
260
+ "text.version-number": "第{version}版",
247
261
  "text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
248
262
  "text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a board, sharing shape and material across every instance.",
263
+ "text.what-changed-in-this-release": "这一版有什么变化",
249
264
  "title.figures": "figures",
250
265
  "title.new-figure": "new figure"
251
266
  }