@things-factory/figure-ui 10.1.69 → 10.1.70
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.
- package/client/graphql/index.ts +73 -0
- package/client/modeller/figure-v3-parts.ts +3 -3
- package/client/modeller/v3-recipes.ts +18 -0
- package/client/pages/figure-recipe-page.ts +338 -0
- package/client/route.ts +4 -0
- package/dist-client/graphql/index.d.ts +16 -0
- package/dist-client/graphql/index.js +60 -0
- package/dist-client/graphql/index.js.map +1 -1
- package/dist-client/modeller/figure-v3-parts.js +3 -3
- package/dist-client/modeller/figure-v3-parts.js.map +1 -1
- package/dist-client/modeller/v3-recipes.d.ts +10 -0
- package/dist-client/modeller/v3-recipes.js +18 -0
- package/dist-client/modeller/v3-recipes.js.map +1 -1
- package/dist-client/pages/figure-recipe-page.d.ts +41 -0
- package/dist-client/pages/figure-recipe-page.js +352 -0
- package/dist-client/pages/figure-recipe-page.js.map +1 -0
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +3 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.fui.tsbuildinfo +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/test/v3-recipes.test.ts +16 -0
- package/things-factory.config.js +1 -0
- package/translations/en.json +22 -0
- package/translations/ja.json +22 -0
- package/translations/ko.json +22 -0
- package/translations/ms.json +22 -0
- package/translations/zh.json +22 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/figure-ui",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.70",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"@things-factory:registry": "https://registry.npmjs.org"
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"@operato/styles": "^10.0.0",
|
|
41
41
|
"@operato/utils": "^10.0.0",
|
|
42
42
|
"@things-factory/ai-assistant": "^10.1.58",
|
|
43
|
-
"@things-factory/figure-service": "^10.1.
|
|
43
|
+
"@things-factory/figure-service": "^10.1.70",
|
|
44
44
|
"three": "^0.185.1"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "7c9c614b0cb1d02d401211db76ec0ca0ead344af"
|
|
47
47
|
}
|
package/test/v3-recipes.test.ts
CHANGED
|
@@ -42,3 +42,19 @@ test('편집기는 조각을 도형이 선 그대로 풀어 한 단계로 넣고
|
|
|
42
42
|
const page = read('../client/pages/figure-v3-modeller-page.ts')
|
|
43
43
|
assert.ok(page.includes('.recipes=${this.recipes}') && page.includes('fetchFigureRecipes()'), '페이지가 목록을 읽어 건넨다')
|
|
44
44
|
})
|
|
45
|
+
|
|
46
|
+
test('관리 화면 — 주소에서 도메인을 읽고, 제 조각과 상위 도메인 조각을 가르고, 값이 받는 범위를 적는다', async () => {
|
|
47
|
+
const { subdomainOf, recipeIsOwn, paramRangeOf } = await import('../client/modeller/v3-recipes.ts')
|
|
48
|
+
assert.equal(subdomainOf('/domain/plant-1/figure-recipes'), 'plant-1')
|
|
49
|
+
assert.equal(subdomainOf('/figure-recipes'), '')
|
|
50
|
+
assert.equal(recipeIsOwn({ domain: { subdomain: 'plant-1' } }, 'plant-1'), true)
|
|
51
|
+
assert.equal(recipeIsOwn({ domain: { subdomain: 'system' } }, 'plant-1'), false)
|
|
52
|
+
assert.equal(recipeIsOwn({ domain: { subdomain: 'system' } }, ''), false, '주소가 도메인을 말하지 않으면 제 것이 아니다')
|
|
53
|
+
assert.equal(paramRangeOf(share), '5 – 95 %')
|
|
54
|
+
assert.equal(paramRangeOf({ name: 'leaves', kind: 'choice', default: 2, options: [1, 2] }), '1 / 2')
|
|
55
|
+
const page = read('../client/pages/figure-recipe-page.ts')
|
|
56
|
+
assert.ok(page.includes('applyV3Recipe(room.asset, parseV3Recipe(recipe)'), '미리보기는 검사하는 방에 넣은 모습')
|
|
57
|
+
assert.ok(page.includes("saveFigureRecipe(row.source, 'draft')"), '상위 도메인 것은 초안으로 복사해 고친다')
|
|
58
|
+
assert.ok(page.includes('OxPrompt.open('), '지우기 전에 앱의 확인 창으로 묻는다')
|
|
59
|
+
assert.ok(read('../things-factory.config.js').includes("{ tagname: 'figure-recipe-page', page: 'figure-recipes' }"))
|
|
60
|
+
})
|
package/things-factory.config.js
CHANGED
|
@@ -5,6 +5,7 @@ export default {
|
|
|
5
5
|
route,
|
|
6
6
|
routes: [
|
|
7
7
|
{ tagname: 'figure-list-page', page: 'figure-list' },
|
|
8
|
+
{ tagname: 'figure-recipe-page', page: 'figure-recipes' },
|
|
8
9
|
/* One modeller since ADR-0087 step 5; the old V3 address is an alias. The shell builds the DOM from this table. */
|
|
9
10
|
{ tagname: 'figure-v3-modeller-page', page: 'figure-modeller' },
|
|
10
11
|
{ tagname: 'figure-v3-modeller-page', page: 'figure-v3-modeller' }
|
package/translations/en.json
CHANGED
|
@@ -204,6 +204,28 @@
|
|
|
204
204
|
"figure.text.recipe-needs-a-part": "choose the part to put it on first.",
|
|
205
205
|
"figure.text.recipe-onto": "onto {part}.",
|
|
206
206
|
"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",
|
|
207
229
|
"figure.label.placement": "fastening",
|
|
208
230
|
"figure.label.placement-ceiling": "ceiling-based (ceiling)",
|
|
209
231
|
"figure.label.placement-center": "center-based (center)",
|
package/translations/ja.json
CHANGED
|
@@ -204,6 +204,28 @@
|
|
|
204
204
|
"figure.text.recipe-needs-a-part": "choose the part to put it on first.",
|
|
205
205
|
"figure.text.recipe-onto": "onto {part}.",
|
|
206
206
|
"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",
|
|
207
229
|
"figure.label.placement": "取り付け",
|
|
208
230
|
"figure.label.placement-ceiling": "天井基準 (ceiling)",
|
|
209
231
|
"figure.label.placement-center": "中心基準 (center)",
|
package/translations/ko.json
CHANGED
|
@@ -204,6 +204,28 @@
|
|
|
204
204
|
"figure.text.recipe-needs-a-part": "붙일 부품을 먼저 고르세요.",
|
|
205
205
|
"figure.text.recipe-onto": "{part} 에 넣습니다.",
|
|
206
206
|
"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": "조각",
|
|
207
229
|
"figure.label.placement": "붙이기",
|
|
208
230
|
"figure.label.placement-ceiling": "천장 기반 (ceiling)",
|
|
209
231
|
"figure.label.placement-center": "중심 기반 (center)",
|
package/translations/ms.json
CHANGED
|
@@ -204,6 +204,28 @@
|
|
|
204
204
|
"figure.text.recipe-needs-a-part": "choose the part to put it on first.",
|
|
205
205
|
"figure.text.recipe-onto": "onto {part}.",
|
|
206
206
|
"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",
|
|
207
229
|
"figure.label.placement": "lekatan",
|
|
208
230
|
"figure.label.placement-ceiling": "berasaskan siling (ceiling)",
|
|
209
231
|
"figure.label.placement-center": "berasaskan pusat (center)",
|
package/translations/zh.json
CHANGED
|
@@ -204,6 +204,28 @@
|
|
|
204
204
|
"figure.text.recipe-needs-a-part": "choose the part to put it on first.",
|
|
205
205
|
"figure.text.recipe-onto": "onto {part}.",
|
|
206
206
|
"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",
|
|
207
229
|
"figure.label.placement": "附着",
|
|
208
230
|
"figure.label.placement-ceiling": "天花板基准 (ceiling)",
|
|
209
231
|
"figure.label.placement-center": "中心基准 (center)",
|