@things-factory/figure-ui 10.1.70 → 10.1.72

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 (69) hide show
  1. package/client/graphql/index.ts +28 -69
  2. package/client/modeller/figure-v3-parts.ts +16 -136
  3. package/client/modeller/figure-v3-recipe-catalog.ts +366 -0
  4. package/client/modeller/v3-editor.ts +25 -5
  5. package/client/modeller/v3-fields.ts +21 -16
  6. package/client/modeller/v3-gizmo.ts +1 -1
  7. package/client/modeller/v3-links.ts +7 -66
  8. package/client/modeller/v3-palette.ts +3 -0
  9. package/client/modeller/v3-recipe-source.ts +15 -0
  10. package/client/modeller/v3-recipes.ts +50 -27
  11. package/client/pages/figure-v3-modeller-page.ts +16 -13
  12. package/client/route.ts +0 -4
  13. package/dist-client/graphql/index.d.ts +11 -18
  14. package/dist-client/graphql/index.js +18 -59
  15. package/dist-client/graphql/index.js.map +1 -1
  16. package/dist-client/modeller/figure-v3-parts.d.ts +5 -12
  17. package/dist-client/modeller/figure-v3-parts.js +17 -147
  18. package/dist-client/modeller/figure-v3-parts.js.map +1 -1
  19. package/dist-client/modeller/figure-v3-recipe-catalog.d.ts +38 -0
  20. package/dist-client/modeller/figure-v3-recipe-catalog.js +399 -0
  21. package/dist-client/modeller/figure-v3-recipe-catalog.js.map +1 -0
  22. package/dist-client/modeller/v3-clips.d.ts +1 -1
  23. package/dist-client/modeller/v3-editor.d.ts +8 -3
  24. package/dist-client/modeller/v3-editor.js +35 -6
  25. package/dist-client/modeller/v3-editor.js.map +1 -1
  26. package/dist-client/modeller/v3-fields.d.ts +2 -2
  27. package/dist-client/modeller/v3-fields.js +20 -18
  28. package/dist-client/modeller/v3-fields.js.map +1 -1
  29. package/dist-client/modeller/v3-gizmo.js +1 -1
  30. package/dist-client/modeller/v3-gizmo.js.map +1 -1
  31. package/dist-client/modeller/v3-links.d.ts +8 -25
  32. package/dist-client/modeller/v3-links.js +4 -66
  33. package/dist-client/modeller/v3-links.js.map +1 -1
  34. package/dist-client/modeller/v3-palette.js +3 -0
  35. package/dist-client/modeller/v3-palette.js.map +1 -1
  36. package/dist-client/modeller/v3-recipe-source.d.ts +8 -0
  37. package/dist-client/modeller/v3-recipe-source.js +14 -0
  38. package/dist-client/modeller/v3-recipe-source.js.map +1 -0
  39. package/dist-client/modeller/v3-recipes.d.ts +25 -14
  40. package/dist-client/modeller/v3-recipes.js +42 -28
  41. package/dist-client/modeller/v3-recipes.js.map +1 -1
  42. package/dist-client/pages/figure-v3-modeller-page.d.ts +5 -3
  43. package/dist-client/pages/figure-v3-modeller-page.js +16 -13
  44. package/dist-client/pages/figure-v3-modeller-page.js.map +1 -1
  45. package/dist-client/route.d.ts +1 -1
  46. package/dist-client/route.js +0 -3
  47. package/dist-client/route.js.map +1 -1
  48. package/dist-client/tsconfig.fui.tsbuildinfo +1 -1
  49. package/dist-client/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +5 -4
  51. package/scripts/template-thumbnails.mjs +53 -0
  52. package/test/browser/build.mjs +15 -3
  53. package/test/browser/modeller-page.js +26 -3
  54. package/test/browser/modeller.check.mjs +73 -46
  55. package/test/browser/serve.mjs +7 -1
  56. package/test/browser/thumbnail-page.js +14 -0
  57. package/test/v3-fields.test.ts +5 -1
  58. package/test/v3-links.test.ts +12 -0
  59. package/test/v3-recipes.test.ts +47 -25
  60. package/things-factory.config.js +0 -1
  61. package/translations/en.json +38 -23
  62. package/translations/ja.json +38 -23
  63. package/translations/ko.json +38 -23
  64. package/translations/ms.json +38 -23
  65. package/translations/zh.json +38 -23
  66. package/client/pages/figure-recipe-page.ts +0 -338
  67. package/dist-client/pages/figure-recipe-page.d.ts +0 -41
  68. package/dist-client/pages/figure-recipe-page.js +0 -352
  69. package/dist-client/pages/figure-recipe-page.js.map +0 -1
@@ -202,30 +202,45 @@
202
202
  "figure.text.size-declared-to-follow": "the figure size to follow was set from its parts: {x} × {y} × {z} mm.",
203
203
  "figure.label.recipes": "recipes",
204
204
  "figure.text.recipe-needs-a-part": "choose the part to put it on first.",
205
- "figure.text.recipe-onto": "onto {part}.",
206
205
  "figure.button.insert-recipe": "put in",
207
- "figure.text.recipes-intro": "a recipe is a group of parts made often -- a door, a roller row. In the modeller, choose a part and put it in at once.",
208
- "figure.text.recipes-empty": "no recipes yet.",
209
- "figure.label.recipe-draft": "draft",
210
- "figure.label.recipe-inherited": "parent domain",
211
- "figure.text.recipe-target-part": "put onto a chosen part",
212
- "figure.text.recipe-target-figure": "put onto the whole figure",
213
- "figure.text.recipe-own": "this domain's recipe",
214
- "figure.text.recipe-inherited": "the {domain} domain's recipe; copy it here to change it",
215
- "figure.label.recipe-param": "value",
216
- "figure.label.recipe-default": "default",
217
- "figure.label.recipe-range": "range",
218
- "figure.label.yes": "yes",
219
- "figure.label.no": "no",
220
- "figure.button.recipe-release": "release",
221
- "figure.button.recipe-to-draft": "back to draft",
222
- "figure.button.recipe-delete": "delete",
223
- "figure.button.recipe-copy-in": "copy to this domain",
224
- "figure.button.recipe-edit-source": "source (JSON)",
225
- "figure.text.recipe-edit-source": "saved, it is put into an empty room first and not saved if it does not go in. A new name makes a new recipe.",
226
- "figure.text.recipe-preview": "put into a 4 x 3 x 6 m room with its defaults, shown with the room resized.",
227
- "figure.text.recipe-delete-confirm": "delete the {name} recipe. figures already made with it do not change.",
228
- "figure.title.recipes": "recipes",
206
+ "figure.label.recipe-catalog": "recipe catalog",
207
+ "figure.text.recipe-search": "find by name, description or tag",
208
+ "figure.label.recipe-all": "all",
209
+ "figure.label.recipe-category-door": "doors and openings",
210
+ "figure.label.recipe-category-conveyor": "conveying",
211
+ "figure.label.recipe-category-support": "supports and structure",
212
+ "figure.label.recipe-category-safety": "safety",
213
+ "figure.label.recipe-category-signal": "signals and lights",
214
+ "figure.label.recipe-category-control": "controls and electrical",
215
+ "figure.label.recipe-category-handling": "handling",
216
+ "figure.label.recipe-category-storage": "storage and containers",
217
+ "figure.label.recipe-category-utility": "piping and utilities",
218
+ "figure.label.recipe-category-space": "space and building",
219
+ "figure.label.recipe-category-other": "other",
220
+ "figure.label.recipe-adds": "what it puts in",
221
+ "figure.text.recipe-parts": "{parts} parts",
222
+ "figure.text.recipe-slides": "{part}: slides",
223
+ "figure.text.recipe-turns": "{part}: turns",
224
+ "figure.text.recipe-moves-with": "{part}: moves with {leader}",
225
+ "figure.text.recipe-controls": "moved by {count} control(s)",
226
+ "figure.text.recipe-shown-by-control": "{parts}: shown by a control",
227
+ "figure.text.recipe-row": "{part}: a row along the part's length",
228
+ "figure.text.recipe-onto-chosen": "fastened to the chosen part, following its size",
229
+ "figure.text.recipe-onto-figure": "put onto the whole figure",
230
+ "figure.label.recipe-values": "values",
231
+ "figure.button.insert-recipe-onto": "put onto {part}",
232
+ "figure.button.open-recipe-catalog": "recipe catalog ({count})",
233
+ "figure.label.primitive-hollow-box": "tote",
234
+ "figure.label.field-roundX": "corner X",
235
+ "figure.label.field-roundZ": "corner Z",
236
+ "figure.label.field-wallX": "wall X",
237
+ "figure.label.field-wallZ": "wall Z",
238
+ "figure.label.field-floor": "floor",
239
+ "figure.label.face-inside-bottom": "inside bottom",
240
+ "figure.label.face-inside-left": "inside left",
241
+ "figure.label.face-inside-right": "inside right",
242
+ "figure.label.face-inside-back": "inside back",
243
+ "figure.label.face-inside-front": "inside front",
229
244
  "figure.label.placement": "fastening",
230
245
  "figure.label.placement-ceiling": "ceiling-based (ceiling)",
231
246
  "figure.label.placement-center": "center-based (center)",
@@ -202,30 +202,45 @@
202
202
  "figure.text.size-declared-to-follow": "the figure size to follow was set from its parts: {x} × {y} × {z} mm.",
203
203
  "figure.label.recipes": "recipes",
204
204
  "figure.text.recipe-needs-a-part": "choose the part to put it on first.",
205
- "figure.text.recipe-onto": "onto {part}.",
206
205
  "figure.button.insert-recipe": "put in",
207
- "figure.text.recipes-intro": "a recipe is a group of parts made often -- a door, a roller row. In the modeller, choose a part and put it in at once.",
208
- "figure.text.recipes-empty": "no recipes yet.",
209
- "figure.label.recipe-draft": "draft",
210
- "figure.label.recipe-inherited": "parent domain",
211
- "figure.text.recipe-target-part": "put onto a chosen part",
212
- "figure.text.recipe-target-figure": "put onto the whole figure",
213
- "figure.text.recipe-own": "this domain's recipe",
214
- "figure.text.recipe-inherited": "the {domain} domain's recipe; copy it here to change it",
215
- "figure.label.recipe-param": "value",
216
- "figure.label.recipe-default": "default",
217
- "figure.label.recipe-range": "range",
218
- "figure.label.yes": "yes",
219
- "figure.label.no": "no",
220
- "figure.button.recipe-release": "release",
221
- "figure.button.recipe-to-draft": "back to draft",
222
- "figure.button.recipe-delete": "delete",
223
- "figure.button.recipe-copy-in": "copy to this domain",
224
- "figure.button.recipe-edit-source": "source (JSON)",
225
- "figure.text.recipe-edit-source": "saved, it is put into an empty room first and not saved if it does not go in. A new name makes a new recipe.",
226
- "figure.text.recipe-preview": "put into a 4 x 3 x 6 m room with its defaults, shown with the room resized.",
227
- "figure.text.recipe-delete-confirm": "delete the {name} recipe. figures already made with it do not change.",
228
- "figure.title.recipes": "recipes",
206
+ "figure.label.recipe-catalog": "recipe catalog",
207
+ "figure.text.recipe-search": "find by name, description or tag",
208
+ "figure.label.recipe-all": "all",
209
+ "figure.label.recipe-category-door": "doors and openings",
210
+ "figure.label.recipe-category-conveyor": "conveying",
211
+ "figure.label.recipe-category-support": "supports and structure",
212
+ "figure.label.recipe-category-safety": "safety",
213
+ "figure.label.recipe-category-signal": "signals and lights",
214
+ "figure.label.recipe-category-control": "controls and electrical",
215
+ "figure.label.recipe-category-handling": "handling",
216
+ "figure.label.recipe-category-storage": "storage and containers",
217
+ "figure.label.recipe-category-utility": "piping and utilities",
218
+ "figure.label.recipe-category-space": "space and building",
219
+ "figure.label.recipe-category-other": "other",
220
+ "figure.label.recipe-adds": "what it puts in",
221
+ "figure.text.recipe-parts": "{parts} parts",
222
+ "figure.text.recipe-slides": "{part}: slides",
223
+ "figure.text.recipe-turns": "{part}: turns",
224
+ "figure.text.recipe-moves-with": "{part}: moves with {leader}",
225
+ "figure.text.recipe-controls": "moved by {count} control(s)",
226
+ "figure.text.recipe-shown-by-control": "{parts}: shown by a control",
227
+ "figure.text.recipe-row": "{part}: a row along the part's length",
228
+ "figure.text.recipe-onto-chosen": "fastened to the chosen part, following its size",
229
+ "figure.text.recipe-onto-figure": "put onto the whole figure",
230
+ "figure.label.recipe-values": "values",
231
+ "figure.button.insert-recipe-onto": "put onto {part}",
232
+ "figure.button.open-recipe-catalog": "recipe catalog ({count})",
233
+ "figure.label.primitive-hollow-box": "tote",
234
+ "figure.label.field-roundX": "corner X",
235
+ "figure.label.field-roundZ": "corner Z",
236
+ "figure.label.field-wallX": "wall X",
237
+ "figure.label.field-wallZ": "wall Z",
238
+ "figure.label.field-floor": "floor",
239
+ "figure.label.face-inside-bottom": "inside bottom",
240
+ "figure.label.face-inside-left": "inside left",
241
+ "figure.label.face-inside-right": "inside right",
242
+ "figure.label.face-inside-back": "inside back",
243
+ "figure.label.face-inside-front": "inside front",
229
244
  "figure.label.placement": "取り付け",
230
245
  "figure.label.placement-ceiling": "天井基準 (ceiling)",
231
246
  "figure.label.placement-center": "中心基準 (center)",
@@ -202,30 +202,45 @@
202
202
  "figure.text.size-declared-to-follow": "따라갈 도형 크기를 부품에 맞춰 {x} × {y} × {z} mm 로 정했습니다.",
203
203
  "figure.label.recipes": "조각",
204
204
  "figure.text.recipe-needs-a-part": "붙일 부품을 먼저 고르세요.",
205
- "figure.text.recipe-onto": "{part} 에 넣습니다.",
206
205
  "figure.button.insert-recipe": "넣기",
207
- "figure.text.recipes-intro": "조각은 문 · 롤러 줄처럼 자주 만드는 부품 묶음입니다. 모델러에서 부품을 고르고 한 번에 넣습니다.",
208
- "figure.text.recipes-empty": "아직 조각이 없습니다.",
209
- "figure.label.recipe-draft": "초안",
210
- "figure.label.recipe-inherited": "상위 도메인",
211
- "figure.text.recipe-target-part": "고른 부품에 넣습니다",
212
- "figure.text.recipe-target-figure": "도형 전체에 넣습니다",
213
- "figure.text.recipe-own": "이 도메인의 조각입니다",
214
- "figure.text.recipe-inherited": "{domain} 도메인의 조각입니다. 고치려면 이 도메인으로 복사합니다",
215
- "figure.label.recipe-param": "값",
216
- "figure.label.recipe-default": "기본값",
217
- "figure.label.recipe-range": "범위",
218
- "figure.label.yes": "예",
219
- "figure.label.no": "아니오",
220
- "figure.button.recipe-release": "발행",
221
- "figure.button.recipe-to-draft": "초안으로",
222
- "figure.button.recipe-delete": "삭제",
223
- "figure.button.recipe-copy-in": "이 도메인으로 복사",
224
- "figure.button.recipe-edit-source": "원본 (JSON)",
225
- "figure.text.recipe-edit-source": "저장하면 빈 방에 넣어 보고, 들어가지 않으면 저장하지 않습니다. 이름을 바꾸면 새 조각이 됩니다.",
226
- "figure.text.recipe-preview": "4 × 3 × 6 m 방에 기본값으로 넣은 모습입니다. 크기를 바꾼 방과 함께 보입니다.",
227
- "figure.text.recipe-delete-confirm": "{name} 조각을 지웁니다. 이 조각으로 이미 만든 도형은 바뀌지 않습니다.",
228
- "figure.title.recipes": "조각",
206
+ "figure.label.recipe-catalog": "조각 카탈로그",
207
+ "figure.text.recipe-search": "이름 · 설명 · 태그로 찾기",
208
+ "figure.label.recipe-all": "전체",
209
+ "figure.label.recipe-category-door": "문 · 개구부",
210
+ "figure.label.recipe-category-conveyor": "반송",
211
+ "figure.label.recipe-category-support": "받침 · 구조",
212
+ "figure.label.recipe-category-safety": "안전",
213
+ "figure.label.recipe-category-signal": "표시 · 조명",
214
+ "figure.label.recipe-category-control": "조작 · 전기",
215
+ "figure.label.recipe-category-handling": "이송 장치",
216
+ "figure.label.recipe-category-storage": "저장 · 용기",
217
+ "figure.label.recipe-category-utility": "배관 · 유틸리티",
218
+ "figure.label.recipe-category-space": "공간 · 건축",
219
+ "figure.label.recipe-category-other": "기타",
220
+ "figure.label.recipe-adds": "넣는 것",
221
+ "figure.text.recipe-parts": "부품 {parts}개",
222
+ "figure.text.recipe-slides": "{part}: 미끄러짐",
223
+ "figure.text.recipe-turns": "{part}: 회전",
224
+ "figure.text.recipe-moves-with": "{part}: {leader} 를 따라 움직임",
225
+ "figure.text.recipe-controls": "조작값 {count}개로 움직임",
226
+ "figure.text.recipe-shown-by-control": "{parts}: 조작값에 따라 보임",
227
+ "figure.text.recipe-row": "{part}: 부품 길이를 따라 줄로 늘어섬",
228
+ "figure.text.recipe-onto-chosen": "고른 부품에 붙고, 그 크기를 따라감",
229
+ "figure.text.recipe-onto-figure": "도형 전체에 넣음",
230
+ "figure.label.recipe-values": "고를 값",
231
+ "figure.button.insert-recipe-onto": "{part} 에 넣기",
232
+ "figure.button.open-recipe-catalog": "조각 카탈로그 ({count})",
233
+ "figure.label.primitive-hollow-box": "통",
234
+ "figure.label.field-roundX": "모서리 X",
235
+ "figure.label.field-roundZ": "모서리 Z",
236
+ "figure.label.field-wallX": "벽 두께 X",
237
+ "figure.label.field-wallZ": "벽 두께 Z",
238
+ "figure.label.field-floor": "바닥 두께",
239
+ "figure.label.face-inside-bottom": "안쪽 바닥",
240
+ "figure.label.face-inside-left": "안쪽 왼쪽",
241
+ "figure.label.face-inside-right": "안쪽 오른쪽",
242
+ "figure.label.face-inside-back": "안쪽 뒤",
243
+ "figure.label.face-inside-front": "안쪽 앞",
229
244
  "figure.label.placement": "붙이기",
230
245
  "figure.label.placement-ceiling": "천장 기반 (ceiling)",
231
246
  "figure.label.placement-center": "중심 기반 (center)",
@@ -202,30 +202,45 @@
202
202
  "figure.text.size-declared-to-follow": "the figure size to follow was set from its parts: {x} × {y} × {z} mm.",
203
203
  "figure.label.recipes": "recipes",
204
204
  "figure.text.recipe-needs-a-part": "choose the part to put it on first.",
205
- "figure.text.recipe-onto": "onto {part}.",
206
205
  "figure.button.insert-recipe": "put in",
207
- "figure.text.recipes-intro": "a recipe is a group of parts made often -- a door, a roller row. In the modeller, choose a part and put it in at once.",
208
- "figure.text.recipes-empty": "no recipes yet.",
209
- "figure.label.recipe-draft": "draft",
210
- "figure.label.recipe-inherited": "parent domain",
211
- "figure.text.recipe-target-part": "put onto a chosen part",
212
- "figure.text.recipe-target-figure": "put onto the whole figure",
213
- "figure.text.recipe-own": "this domain's recipe",
214
- "figure.text.recipe-inherited": "the {domain} domain's recipe; copy it here to change it",
215
- "figure.label.recipe-param": "value",
216
- "figure.label.recipe-default": "default",
217
- "figure.label.recipe-range": "range",
218
- "figure.label.yes": "yes",
219
- "figure.label.no": "no",
220
- "figure.button.recipe-release": "release",
221
- "figure.button.recipe-to-draft": "back to draft",
222
- "figure.button.recipe-delete": "delete",
223
- "figure.button.recipe-copy-in": "copy to this domain",
224
- "figure.button.recipe-edit-source": "source (JSON)",
225
- "figure.text.recipe-edit-source": "saved, it is put into an empty room first and not saved if it does not go in. A new name makes a new recipe.",
226
- "figure.text.recipe-preview": "put into a 4 x 3 x 6 m room with its defaults, shown with the room resized.",
227
- "figure.text.recipe-delete-confirm": "delete the {name} recipe. figures already made with it do not change.",
228
- "figure.title.recipes": "recipes",
206
+ "figure.label.recipe-catalog": "recipe catalog",
207
+ "figure.text.recipe-search": "find by name, description or tag",
208
+ "figure.label.recipe-all": "all",
209
+ "figure.label.recipe-category-door": "doors and openings",
210
+ "figure.label.recipe-category-conveyor": "conveying",
211
+ "figure.label.recipe-category-support": "supports and structure",
212
+ "figure.label.recipe-category-safety": "safety",
213
+ "figure.label.recipe-category-signal": "signals and lights",
214
+ "figure.label.recipe-category-control": "controls and electrical",
215
+ "figure.label.recipe-category-handling": "handling",
216
+ "figure.label.recipe-category-storage": "storage and containers",
217
+ "figure.label.recipe-category-utility": "piping and utilities",
218
+ "figure.label.recipe-category-space": "space and building",
219
+ "figure.label.recipe-category-other": "other",
220
+ "figure.label.recipe-adds": "what it puts in",
221
+ "figure.text.recipe-parts": "{parts} parts",
222
+ "figure.text.recipe-slides": "{part}: slides",
223
+ "figure.text.recipe-turns": "{part}: turns",
224
+ "figure.text.recipe-moves-with": "{part}: moves with {leader}",
225
+ "figure.text.recipe-controls": "moved by {count} control(s)",
226
+ "figure.text.recipe-shown-by-control": "{parts}: shown by a control",
227
+ "figure.text.recipe-row": "{part}: a row along the part's length",
228
+ "figure.text.recipe-onto-chosen": "fastened to the chosen part, following its size",
229
+ "figure.text.recipe-onto-figure": "put onto the whole figure",
230
+ "figure.label.recipe-values": "values",
231
+ "figure.button.insert-recipe-onto": "put onto {part}",
232
+ "figure.button.open-recipe-catalog": "recipe catalog ({count})",
233
+ "figure.label.primitive-hollow-box": "tote",
234
+ "figure.label.field-roundX": "corner X",
235
+ "figure.label.field-roundZ": "corner Z",
236
+ "figure.label.field-wallX": "wall X",
237
+ "figure.label.field-wallZ": "wall Z",
238
+ "figure.label.field-floor": "floor",
239
+ "figure.label.face-inside-bottom": "inside bottom",
240
+ "figure.label.face-inside-left": "inside left",
241
+ "figure.label.face-inside-right": "inside right",
242
+ "figure.label.face-inside-back": "inside back",
243
+ "figure.label.face-inside-front": "inside front",
229
244
  "figure.label.placement": "lekatan",
230
245
  "figure.label.placement-ceiling": "berasaskan siling (ceiling)",
231
246
  "figure.label.placement-center": "berasaskan pusat (center)",
@@ -202,30 +202,45 @@
202
202
  "figure.text.size-declared-to-follow": "the figure size to follow was set from its parts: {x} × {y} × {z} mm.",
203
203
  "figure.label.recipes": "recipes",
204
204
  "figure.text.recipe-needs-a-part": "choose the part to put it on first.",
205
- "figure.text.recipe-onto": "onto {part}.",
206
205
  "figure.button.insert-recipe": "put in",
207
- "figure.text.recipes-intro": "a recipe is a group of parts made often -- a door, a roller row. In the modeller, choose a part and put it in at once.",
208
- "figure.text.recipes-empty": "no recipes yet.",
209
- "figure.label.recipe-draft": "draft",
210
- "figure.label.recipe-inherited": "parent domain",
211
- "figure.text.recipe-target-part": "put onto a chosen part",
212
- "figure.text.recipe-target-figure": "put onto the whole figure",
213
- "figure.text.recipe-own": "this domain's recipe",
214
- "figure.text.recipe-inherited": "the {domain} domain's recipe; copy it here to change it",
215
- "figure.label.recipe-param": "value",
216
- "figure.label.recipe-default": "default",
217
- "figure.label.recipe-range": "range",
218
- "figure.label.yes": "yes",
219
- "figure.label.no": "no",
220
- "figure.button.recipe-release": "release",
221
- "figure.button.recipe-to-draft": "back to draft",
222
- "figure.button.recipe-delete": "delete",
223
- "figure.button.recipe-copy-in": "copy to this domain",
224
- "figure.button.recipe-edit-source": "source (JSON)",
225
- "figure.text.recipe-edit-source": "saved, it is put into an empty room first and not saved if it does not go in. A new name makes a new recipe.",
226
- "figure.text.recipe-preview": "put into a 4 x 3 x 6 m room with its defaults, shown with the room resized.",
227
- "figure.text.recipe-delete-confirm": "delete the {name} recipe. figures already made with it do not change.",
228
- "figure.title.recipes": "recipes",
206
+ "figure.label.recipe-catalog": "recipe catalog",
207
+ "figure.text.recipe-search": "find by name, description or tag",
208
+ "figure.label.recipe-all": "all",
209
+ "figure.label.recipe-category-door": "doors and openings",
210
+ "figure.label.recipe-category-conveyor": "conveying",
211
+ "figure.label.recipe-category-support": "supports and structure",
212
+ "figure.label.recipe-category-safety": "safety",
213
+ "figure.label.recipe-category-signal": "signals and lights",
214
+ "figure.label.recipe-category-control": "controls and electrical",
215
+ "figure.label.recipe-category-handling": "handling",
216
+ "figure.label.recipe-category-storage": "storage and containers",
217
+ "figure.label.recipe-category-utility": "piping and utilities",
218
+ "figure.label.recipe-category-space": "space and building",
219
+ "figure.label.recipe-category-other": "other",
220
+ "figure.label.recipe-adds": "what it puts in",
221
+ "figure.text.recipe-parts": "{parts} parts",
222
+ "figure.text.recipe-slides": "{part}: slides",
223
+ "figure.text.recipe-turns": "{part}: turns",
224
+ "figure.text.recipe-moves-with": "{part}: moves with {leader}",
225
+ "figure.text.recipe-controls": "moved by {count} control(s)",
226
+ "figure.text.recipe-shown-by-control": "{parts}: shown by a control",
227
+ "figure.text.recipe-row": "{part}: a row along the part's length",
228
+ "figure.text.recipe-onto-chosen": "fastened to the chosen part, following its size",
229
+ "figure.text.recipe-onto-figure": "put onto the whole figure",
230
+ "figure.label.recipe-values": "values",
231
+ "figure.button.insert-recipe-onto": "put onto {part}",
232
+ "figure.button.open-recipe-catalog": "recipe catalog ({count})",
233
+ "figure.label.primitive-hollow-box": "tote",
234
+ "figure.label.field-roundX": "corner X",
235
+ "figure.label.field-roundZ": "corner Z",
236
+ "figure.label.field-wallX": "wall X",
237
+ "figure.label.field-wallZ": "wall Z",
238
+ "figure.label.field-floor": "floor",
239
+ "figure.label.face-inside-bottom": "inside bottom",
240
+ "figure.label.face-inside-left": "inside left",
241
+ "figure.label.face-inside-right": "inside right",
242
+ "figure.label.face-inside-back": "inside back",
243
+ "figure.label.face-inside-front": "inside front",
229
244
  "figure.label.placement": "附着",
230
245
  "figure.label.placement-ceiling": "天花板基准 (ceiling)",
231
246
  "figure.label.placement-center": "中心基准 (center)",