@things-factory/figure-ui 10.1.82 → 10.1.83
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/modeller/editor.ts +3 -28
- package/client/modeller/figure-links.ts +47 -101
- package/dist-client/modeller/clips.d.ts +1 -1
- package/dist-client/modeller/editor.d.ts +0 -6
- package/dist-client/modeller/editor.js +2 -28
- package/dist-client/modeller/editor.js.map +1 -1
- package/dist-client/modeller/figure-capability-panel.d.ts +1 -1
- package/dist-client/modeller/figure-clips.d.ts +1 -1
- package/dist-client/modeller/figure-controls.d.ts +1 -1
- package/dist-client/modeller/figure-links.d.ts +3 -3
- package/dist-client/modeller/figure-links.js +45 -96
- package/dist-client/modeller/figure-links.js.map +1 -1
- package/dist-client/modeller/figure-material-panel.d.ts +1 -1
- package/dist-client/modeller/figure-properties.d.ts +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/test/links.test.ts +2 -1
- package/test/resize-with-placement.test.ts +12 -11
- package/translations/en.json +8 -2
- package/translations/ja.json +7 -1
- package/translations/ko.json +9 -3
- package/translations/ms.json +7 -1
- package/translations/zh.json +7 -1
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.83",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"@things-factory:registry": "https://registry.npmjs.org"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"@things-factory/figure-service": "^10.1.82",
|
|
45
45
|
"three": "^0.185.1"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "b01824bdb3fd266eac06a7241941ac0a119a6e5d"
|
|
48
48
|
}
|
package/test/links.test.ts
CHANGED
|
@@ -331,7 +331,8 @@ test('붙여도 제자리 — 폼은 지금 서 있는 자리를 가운데서
|
|
|
331
331
|
row = applyFigureAuthoring(row, { kind: 'attach', part: 'cap', face: 'bottom', to: { part: 'roller', face: 'top' } })
|
|
332
332
|
assert.deepEqual([hangsFrom(row, 'roller', 'plate'), hangsFrom(row, 'cap', 'plate'), hangsFrom(row, 'plate', 'roller')], [true, true, false])
|
|
333
333
|
const form = read('../client/modeller/figure-links.ts')
|
|
334
|
-
assert.equal(form.match(/this\.aimAt\(asset, \{ \.\.\.f, (
|
|
334
|
+
assert.equal(form.match(/this\.aimAt\(asset, \{ \.\.\.f, (target|targetFace):/g)?.length, 2, '상대 부품 · 상대 면을 바꿀 때마다')
|
|
335
|
+
assert.ok(!form.includes("figure.label.stands-on-plane"), '부품 붙이기 폼에 모델 설치 기준을 섞지 않는다')
|
|
335
336
|
/* Kept in the list, not choosable, with the reason (ADR-0097 §5.5). */
|
|
336
337
|
assert.ok(form.includes('const loops = (one: string) => hangsFrom(asset, one, this.partId)'))
|
|
337
338
|
assert.ok(form.includes("html`<option value=${one} disabled>${i18next.t('figure.text.target-would-loop'"))
|
|
@@ -91,23 +91,23 @@ test('fresh, width only, and all set back to fixed are three different answers',
|
|
|
91
91
|
const following = applyFigureAuthoring(a, { kind: 'follow-size', part: 'box', axes: ['y'] })
|
|
92
92
|
assert.deepEqual(resizeAxesOf(following, 'box'), { axes: ['y'], basis: 'chosen' })
|
|
93
93
|
assert.deepEqual(resizeAxesOf(following, 'box', ['x']), { axes: ['x', 'y'], basis: 'chosen' })
|
|
94
|
-
/* The screen:
|
|
94
|
+
/* The screen: size response is no longer a disguised placement command. */
|
|
95
95
|
const links = readFileSync(new URL('../client/modeller/figure-links.ts', import.meta.url), 'utf-8')
|
|
96
|
-
|
|
97
|
-
assert.ok(
|
|
98
|
-
assert.ok(
|
|
99
|
-
assert.ok(links.includes('
|
|
96
|
+
const dimensions = links.slice(links.indexOf(' private renderDimensions('), links.indexOf(' /** The same source'))
|
|
97
|
+
assert.ok(dimensions.includes("this.command({ kind: 'follow-size', part: this.partId })"))
|
|
98
|
+
assert.ok(!dimensions.includes('resize-with-placement'), 'size response does not attach the part')
|
|
99
|
+
assert.ok(!links.includes('figure.label.stands-on-plane'), 'the attachment form does not present a model-placement toggle')
|
|
100
100
|
const ko = JSON.parse(readFileSync(new URL('../translations/ko.json', import.meta.url), 'utf-8'))
|
|
101
|
-
assert.equal(ko['figure.
|
|
101
|
+
assert.equal(ko['figure.button.follow-size'], '모델 크기에 맞추기')
|
|
102
102
|
})
|
|
103
103
|
|
|
104
|
-
test('a part off the floor is
|
|
104
|
+
test('a part off the floor is not moved by choosing its size response', () => {
|
|
105
105
|
let a = addFigureBox(createFigureAsset('UX'), { id: 'shelf', size: { x: 400, y: 40, z: 300 }, position: { x: 0, y: 520, z: 0 } })
|
|
106
106
|
a = applyFigureAuthoring(a, { kind: 'declare-occupancy', proposal: proposeFigureOccupancy(a), placement: 'floor' })
|
|
107
107
|
const asked = planFigureResize(a, { part: 'shelf', axes: resizeAxesOf(a, 'shelf').axes })
|
|
108
108
|
assert.deepEqual([asked.refusal?.code, asked.refusal?.mm], ['GAP_CHOICE', 500])
|
|
109
109
|
const links = readFileSync(new URL('../client/modeller/figure-links.ts', import.meta.url), 'utf-8')
|
|
110
|
-
assert.ok(links.includes("@click=${() => ask('keep')}")
|
|
110
|
+
assert.ok(!links.includes("@click=${() => ask('keep')}"), 'the UI does not offer a size command that also moves the part')
|
|
111
111
|
})
|
|
112
112
|
|
|
113
113
|
test('a field only the room reads is taken out of the part\'s position row and shown apart', () => {
|
|
@@ -164,10 +164,11 @@ test('a fastened part keeps its position and turn rows, with the numbers the rul
|
|
|
164
164
|
assert.ok(!editor.includes('value="—" disabled'), 'not a blank')
|
|
165
165
|
})
|
|
166
166
|
|
|
167
|
-
test('
|
|
167
|
+
test('size response and attachment are separate screen paths', () => {
|
|
168
168
|
const links = readFileSync(new URL('../client/modeller/figure-links.ts', import.meta.url), 'utf-8')
|
|
169
|
-
assert.ok(links.includes('
|
|
170
|
-
assert.ok(
|
|
169
|
+
assert.ok(links.includes('figure.button.fasten-start'))
|
|
170
|
+
assert.ok(links.includes('figure.label.target-part-placeholder'))
|
|
171
|
+
assert.ok(!links.includes('? this.renderHeld(asset)'))
|
|
171
172
|
const ko = JSON.parse(readFileSync(new URL('../translations/ko.json', import.meta.url), 'utf-8'))
|
|
172
173
|
assert.equal(ko['figure.text.held-on-plane'].replace('{face}', '아랫면').replace('{place}', '바닥').replace('{gap}', '0'), '아랫면을 바닥에 유지 중 (간격 0 mm)')
|
|
173
174
|
})
|
package/translations/en.json
CHANGED
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"figure.label.shown-always": "always",
|
|
201
201
|
"figure.label.shown-while": "while {control} is at least",
|
|
202
202
|
"figure.label.shown-at-least": "at least",
|
|
203
|
-
"figure.button.follow-size": "
|
|
203
|
+
"figure.button.follow-size": "Match model size",
|
|
204
204
|
"figure.text.size-declared-to-follow": "the figure size to follow was set from its parts: {x} × {y} × {z} mm.",
|
|
205
205
|
"figure.label.recipes": "recipes",
|
|
206
206
|
"figure.text.recipe-needs-a-part": "choose the part to put it on first.",
|
|
@@ -731,7 +731,8 @@
|
|
|
731
731
|
"figure.label.resize-z": "Depth (Z)",
|
|
732
732
|
"figure.label.resize-custom": "Linked to another rule",
|
|
733
733
|
"figure.label.resize-following": "Follows equipment size",
|
|
734
|
-
"figure.label.resize-advanced": "
|
|
734
|
+
"figure.label.resize-advanced": "Choose size response",
|
|
735
|
+
"figure.text.resize-all-following": "This part changes with the model size.",
|
|
735
736
|
"figure.text.resize-uniform-warning": "This equipment uses uniform scaling, which takes precedence over individual axis changes. Switching this mode is not yet available.",
|
|
736
737
|
"figure.text.preview-setup": "Not resizing as expected? Choose a part to set which dimensions follow and where it stays attached. Preview controls do not change the saved model.",
|
|
737
738
|
"figure.label.resize-part": "Part to configure",
|
|
@@ -829,6 +830,11 @@
|
|
|
829
830
|
"figure.label.model-settings": "Model settings",
|
|
830
831
|
"figure.text.fasten-editing": "Editing the current attachment: its {face} on {target}",
|
|
831
832
|
"figure.text.fasten-new": "Attach anew",
|
|
833
|
+
"figure.text.fasten-start": "Attach this part to a face on another part so they keep their relationship when either changes.",
|
|
834
|
+
"figure.button.fasten-start": "Attach to another part",
|
|
835
|
+
"figure.label.target-part-placeholder": "Choose a part",
|
|
836
|
+
"figure.text.fasten-target-first": "Choose the part to attach to first.",
|
|
837
|
+
"figure.text.fasten-edit-on-plane": "This part is connected to the model's placement reference. Detach it before attaching it to another part.",
|
|
832
838
|
"figure.button.fasten-update": "Update this attachment",
|
|
833
839
|
"figure.button.align-to-floor": "Align to the floor",
|
|
834
840
|
"figure.button.align-to-ceiling": "Align to the ceiling",
|
package/translations/ja.json
CHANGED
|
@@ -731,7 +731,8 @@
|
|
|
731
731
|
"figure.label.resize-z": "奥行き (Z)",
|
|
732
732
|
"figure.label.resize-custom": "別の規則に連結",
|
|
733
733
|
"figure.label.resize-following": "図形と一緒に変わる",
|
|
734
|
-
"figure.label.resize-advanced": "
|
|
734
|
+
"figure.label.resize-advanced": "サイズの反応を設定",
|
|
735
|
+
"figure.text.resize-all-following": "この部品のサイズはモデルのサイズに合わせて変わります。",
|
|
735
736
|
"figure.text.resize-uniform-warning": "この図形は全体を一つの比率で拡大します。方向ごとの変更より全体の比率が優先されます。この方式の切り替えはまだ提供されていません。",
|
|
736
737
|
"figure.text.preview-setup": "思った通りにサイズが変わりませんか? 部品を選んで、伸びる方向と付いている場所を設定してください。この画面の操作値は保存されたモデルを変えません。",
|
|
737
738
|
"figure.label.resize-part": "サイズ追従を設定する部品",
|
|
@@ -829,6 +830,11 @@
|
|
|
829
830
|
"figure.label.model-settings": "モデル設定",
|
|
830
831
|
"figure.text.fasten-editing": "現在の取り付けを編集: {face}を{target}に",
|
|
831
832
|
"figure.text.fasten-new": "新しく取り付ける",
|
|
833
|
+
"figure.text.fasten-start": "別の部品の面に取り付けると、相手の部品が変わっても関係を保ちます。",
|
|
834
|
+
"figure.button.fasten-start": "別の部品に取り付ける",
|
|
835
|
+
"figure.label.target-part-placeholder": "取り付ける部品を選択",
|
|
836
|
+
"figure.text.fasten-target-first": "先に取り付ける部品を選んでください。",
|
|
837
|
+
"figure.text.fasten-edit-on-plane": "この部品はモデルの設置基準に接続されています。別の部品に取り付ける前に外してください。",
|
|
832
838
|
"figure.button.fasten-update": "この取り付けを更新",
|
|
833
839
|
"figure.button.align-to-floor": "床に合わせる",
|
|
834
840
|
"figure.button.align-to-ceiling": "天井に合わせる",
|
package/translations/ko.json
CHANGED
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"figure.label.shown-always": "늘 보임",
|
|
201
201
|
"figure.label.shown-while": "{control} 값에 따라",
|
|
202
202
|
"figure.label.shown-at-least": "이 값 이상에서 보임",
|
|
203
|
-
"figure.button.follow-size": "
|
|
203
|
+
"figure.button.follow-size": "모델 크기에 맞추기",
|
|
204
204
|
"figure.text.size-declared-to-follow": "따라갈 도형 크기를 부품에 맞춰 {x} × {y} × {z} mm 로 정했습니다.",
|
|
205
205
|
"figure.label.recipes": "조각",
|
|
206
206
|
"figure.text.recipe-needs-a-part": "붙일 부품을 먼저 고르세요.",
|
|
@@ -724,14 +724,15 @@
|
|
|
724
724
|
"figure.text.placement-intent-wall": "벽 배치: 뒷면을 벽(Z=0)에서 지금 간격 그대로 유지하며 크기를 따라갑니다. 벽 위의 위치(X·Y)는 그대로입니다.",
|
|
725
725
|
"figure.text.placement-intent-center": "중심 배치: 지금 중심 위치를 그대로 두고 크기만 따라갑니다. 바닥·천장·벽에 붙이지 않습니다.",
|
|
726
726
|
"figure.label.resize-intent": "이 부품은 크기가 바뀔 때",
|
|
727
|
-
"figure.text.resize-intent": "
|
|
727
|
+
"figure.text.resize-intent": "지금은 고정 크기입니다. 모델 크기가 바뀔 때 이 부품도 함께 바꿀지 정할 수 있습니다.",
|
|
728
728
|
"figure.label.resize-diameter": "지름 (X·Z 함께)",
|
|
729
729
|
"figure.label.resize-x": "너비 (X)",
|
|
730
730
|
"figure.label.resize-y": "높이 (Y)",
|
|
731
731
|
"figure.label.resize-z": "깊이 (Z)",
|
|
732
732
|
"figure.label.resize-custom": "다른 규칙에 연결됨",
|
|
733
733
|
"figure.label.resize-following": "도형과 함께 변경",
|
|
734
|
-
"figure.label.resize-advanced": "
|
|
734
|
+
"figure.label.resize-advanced": "크기 반응 정하기",
|
|
735
|
+
"figure.text.resize-all-following": "이 부품의 크기는 모델 크기를 따라 바뀝니다.",
|
|
735
736
|
"figure.text.resize-uniform-warning": "이 도형은 전체 비율 유지 방식입니다. 방향별 변경보다 전체 비율 규칙이 우선합니다. 이 방식의 전환 기능은 아직 제공되지 않습니다.",
|
|
736
737
|
"figure.text.preview-setup": "크기가 기대대로 바뀌지 않나요? 부품을 골라 늘어날 방향과 붙어 있을 자리를 설정하세요. 이 화면의 조작값은 저장된 모델을 바꾸지 않습니다.",
|
|
737
738
|
"figure.label.resize-part": "크기 반응을 설정할 부품",
|
|
@@ -829,6 +830,11 @@
|
|
|
829
830
|
"figure.label.model-settings": "모델 설정",
|
|
830
831
|
"figure.text.fasten-editing": "현재 관계 수정 — {face} → {target}",
|
|
831
832
|
"figure.text.fasten-new": "새로 붙이기",
|
|
833
|
+
"figure.text.fasten-start": "이 부품을 다른 부품의 면에 붙여 두면, 상대 부품의 크기나 위치가 바뀌어도 함께 움직입니다.",
|
|
834
|
+
"figure.button.fasten-start": "다른 부품에 붙이기",
|
|
835
|
+
"figure.label.target-part-placeholder": "붙일 부품 선택",
|
|
836
|
+
"figure.text.fasten-target-first": "먼저 붙일 부품을 고르세요.",
|
|
837
|
+
"figure.text.fasten-edit-on-plane": "이 부품은 현재 모델의 설치 기준면에 연결되어 있습니다. 다른 부품에 붙이려면 먼저 붙임을 푸세요.",
|
|
832
838
|
"figure.button.fasten-update": "이 붙임 수정",
|
|
833
839
|
"figure.button.align-to-floor": "바닥에 맞추기",
|
|
834
840
|
"figure.button.align-to-ceiling": "천장에 맞추기",
|
package/translations/ms.json
CHANGED
|
@@ -731,7 +731,8 @@
|
|
|
731
731
|
"figure.label.resize-z": "Kedalaman (Z)",
|
|
732
732
|
"figure.label.resize-custom": "Dipautkan pada peraturan lain",
|
|
733
733
|
"figure.label.resize-following": "Berubah bersama rajah",
|
|
734
|
-
"figure.label.resize-advanced": "
|
|
734
|
+
"figure.label.resize-advanced": "Tetapkan tindak balas saiz",
|
|
735
|
+
"figure.text.resize-all-following": "Saiz bahagian ini berubah bersama saiz model.",
|
|
735
736
|
"figure.text.resize-uniform-warning": "Rajah ini membesar dengan satu nisbah, yang didahulukan berbanding perubahan setiap arah. Penukaran cara ini belum tersedia.",
|
|
736
737
|
"figure.text.preview-setup": "Saiz tidak berubah seperti dijangka? Pilih bahagian untuk menetapkan arah yang mengikut dan tempat ia dilekatkan. Nilai di sini tidak mengubah model yang disimpan.",
|
|
737
738
|
"figure.label.resize-part": "Bahagian untuk ditetapkan",
|
|
@@ -829,6 +830,11 @@
|
|
|
829
830
|
"figure.label.model-settings": "Tetapan model",
|
|
830
831
|
"figure.text.fasten-editing": "Menyunting lekatan semasa: {face} pada {target}",
|
|
831
832
|
"figure.text.fasten-new": "Lekatkan baharu",
|
|
833
|
+
"figure.text.fasten-start": "Lekatkan bahagian ini pada muka bahagian lain supaya hubungannya kekal apabila salah satu berubah.",
|
|
834
|
+
"figure.button.fasten-start": "Lekatkan pada bahagian lain",
|
|
835
|
+
"figure.label.target-part-placeholder": "Pilih bahagian",
|
|
836
|
+
"figure.text.fasten-target-first": "Pilih bahagian yang hendak dilekatkan dahulu.",
|
|
837
|
+
"figure.text.fasten-edit-on-plane": "Bahagian ini disambungkan kepada rujukan peletakan model. Tanggalkan dahulu sebelum melekatkannya pada bahagian lain.",
|
|
832
838
|
"figure.button.fasten-update": "Kemas kini lekatan ini",
|
|
833
839
|
"figure.button.align-to-floor": "Jajarkan ke lantai",
|
|
834
840
|
"figure.button.align-to-ceiling": "Jajarkan ke siling",
|
package/translations/zh.json
CHANGED
|
@@ -731,7 +731,8 @@
|
|
|
731
731
|
"figure.label.resize-z": "深度(Z)",
|
|
732
732
|
"figure.label.resize-custom": "已链接到其他规则",
|
|
733
733
|
"figure.label.resize-following": "随图形一起变化",
|
|
734
|
-
"figure.label.resize-advanced": "
|
|
734
|
+
"figure.label.resize-advanced": "设置尺寸响应",
|
|
735
|
+
"figure.text.resize-all-following": "此部件会随模型尺寸一起变化。",
|
|
735
736
|
"figure.text.resize-uniform-warning": "此图形按单一比例整体缩放,整体比例优先于各方向的变化。暂不提供切换此方式的功能。",
|
|
736
737
|
"figure.text.preview-setup": "尺寸没有按预期变化?请选择部件,设置跟随的方向和附着的位置。此处的操作值不会更改已保存的模型。",
|
|
737
738
|
"figure.label.resize-part": "要设置尺寸跟随的部件",
|
|
@@ -829,6 +830,11 @@
|
|
|
829
830
|
"figure.label.model-settings": "模型设置",
|
|
830
831
|
"figure.text.fasten-editing": "编辑当前附着:{face}附着在{target}上",
|
|
831
832
|
"figure.text.fasten-new": "新建附着",
|
|
833
|
+
"figure.text.fasten-start": "将此部件附着到另一部件的面上,任一部件变化时都会保持该关系。",
|
|
834
|
+
"figure.button.fasten-start": "附着到另一部件",
|
|
835
|
+
"figure.label.target-part-placeholder": "选择部件",
|
|
836
|
+
"figure.text.fasten-target-first": "请先选择要附着的部件。",
|
|
837
|
+
"figure.text.fasten-edit-on-plane": "此部件当前连接到模型的安装基准。附着到另一部件前请先解除连接。",
|
|
832
838
|
"figure.button.fasten-update": "更新此附着",
|
|
833
839
|
"figure.button.align-to-floor": "对齐地面",
|
|
834
840
|
"figure.button.align-to-ceiling": "对齐天花板",
|