@things-factory/figure-ui 10.1.51 → 10.1.52

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/figure-ui",
3
- "version": "10.1.51",
3
+ "version": "10.1.52",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "@things-factory:registry": "https://registry.npmjs.org"
@@ -39,8 +39,8 @@
39
39
  "@operato/shell": "^10.0.0",
40
40
  "@operato/styles": "^10.0.0",
41
41
  "@operato/utils": "^10.0.0",
42
- "@things-factory/figure-service": "^10.1.51",
42
+ "@things-factory/figure-service": "^10.1.52",
43
43
  "three": "^0.185.1"
44
44
  },
45
- "gitHead": "973bfc7427199d78f6487f981366aa27d4a76e69"
45
+ "gitHead": "b3ec4f0a38f0759d396f49b1f47c547bff4657be"
46
46
  }
@@ -353,6 +353,31 @@ describe('the fastening form belongs to the part it is for', () => {
353
353
  })
354
354
  })
355
355
 
356
+ describe('a figure made in the modeller is given its size from its parts (user 2026-09-25)', () => {
357
+ before(async () => {
358
+ await mount('box')
359
+ })
360
+
361
+ test('with nothing picked, the figure offers to declare its size; clicked, its size fields appear', async () => {
362
+ const button = await page().evaluateHandle(() => {
363
+ const deep = (root = document) => [...root.querySelectorAll('button')].concat(...[...root.querySelectorAll('*')].filter(e => e.shadowRoot).map(e => deep(e.shadowRoot)))
364
+ return deep().find(b => b.textContent.includes('figure.button.declare-instance-size')) ?? null
365
+ })
366
+ assert.ok(await button.evaluate(b => !!b), 'the button is offered on a figure with no size')
367
+ const box = await button.evaluate(b => {
368
+ b.scrollIntoView({ block: 'center' })
369
+ const r = b.getBoundingClientRect()
370
+ return { x: r.left + r.width / 2, y: r.top + r.height / 2 }
371
+ })
372
+ const start = await state()
373
+ await click(box)
374
+ const after = await state()
375
+ assert.equal(after.error, '', 'not refused')
376
+ assert.equal(after.revision, start.revision + 1, 'one step')
377
+ assert.deepEqual(await read(() => probe.fields('size.')), { 'size.x': 400, 'size.y': 400, 'size.z': 400 }, 'the size it is authored at: its parts now')
378
+ })
379
+ })
380
+
356
381
  test('the page raised no error', () => {
357
382
  assert.deepEqual(opened.errors, [])
358
383
  })
@@ -344,3 +344,22 @@ test('비튼 부품에는 모서리 맞춤을 내놓지도 보내지도 않는
344
344
  assert.deepEqual(alignOf(asset, 'blade', front, { x: 'max', y: 'mm' }, { y: 50 }, true), { y: { mm: 50 } }, '끝 맞춤은 빠지고 거리만 간다')
345
345
  assert.deepEqual(alignOf(asset, 'blade', front, { x: 'max' }, {}), { x: 'max' }, '비틀지 않으면 그대로')
346
346
  })
347
+
348
+ test('모델러에서 만든 도형은 부품에서 재어 도형 크기를 선언한다 — 그 뒤에야 부품이 도형 크기를 따를 수 있다 (사용자 09-25)', async () => {
349
+ const { instanceRangeToDeclare, instanceRangeOf, hasInstanceSize } = await import('../client/modeller/v3-links.ts')
350
+ const { compileV3Asset } = await import('@hatiolab/figure-model')
351
+ let asset = createV3Asset('Conveyor')
352
+ assert.equal(instanceRangeToDeclare(asset), undefined, '부품이 없으면 잴 것이 없다')
353
+ asset = addV3Box(asset, { id: 'frame', size: { x: 2000, y: 100, z: 600 }, position: { x: 0, y: 0, z: 0 } })
354
+ asset = applyV3Authoring(asset, { kind: 'attach', part: 'frame', face: 'bottom', to: { plane: 'mounting-plane' } })
355
+ assert.equal(hasInstanceSize(asset, 'x'), false, '새 도형에는 도형 크기가 없다')
356
+ const toDeclare = instanceRangeToDeclare(asset)!
357
+ assert.deepEqual(toDeclare.at, { x: 2000, y: 100, z: 600 }, '지금 부품의 크기가 선언할 크기')
358
+ asset = applyV3Authoring(asset, { kind: 'declare-instance-size', range: toDeclare.range, at: toDeclare.at })
359
+ assert.ok(instanceRangeOf(asset), '선언 뒤에는 놓일 수 있는 크기가 보인다')
360
+ assert.equal(instanceRangeToDeclare(asset), undefined, '이미 있으면 다시 권하지 않는다')
361
+ assert.equal(hasInstanceSize(asset, 'x'), true, '부품이 도형 크기를 따르는 선택이 열린다')
362
+ asset = applyV3Authoring(asset, { kind: 'link-dimension', part: 'frame', axis: 'x', source: { of: 'instance', axis: 'x' } } as never)
363
+ const at = (size: number) => (compileV3Asset({ ...asset, designInputs: { ...asset.designInputs, 'size.x': size } }).evaluate().geometry.find(g => g.id === 'frame')!.shape.dimensions as { width: number }).width
364
+ assert.equal(at(3000), 3000, '보드가 3000 으로 놓으면 틀도 3000')
365
+ })
@@ -708,5 +708,7 @@
708
708
  "figure.label.repeat-fills": "as many as fill the length",
709
709
  "figure.button.make-repeat": "make a row",
710
710
  "figure.button.remove-repeat": "remove the row",
711
- "figure.label.twist": "twist (°)"
711
+ "figure.label.twist": "twist (°)",
712
+ "figure.text.instance-size-undeclared": "the figure has no size, so a board cannot resize it.",
713
+ "figure.button.declare-instance-size": "declare the figure size"
712
714
  }
@@ -708,5 +708,7 @@
708
708
  "figure.label.repeat-fills": "長さを満たすだけ",
709
709
  "figure.button.make-repeat": "繰り返しを作る",
710
710
  "figure.button.remove-repeat": "繰り返しをなくす",
711
- "figure.label.twist": "ひねり (°)"
711
+ "figure.label.twist": "ひねり (°)",
712
+ "figure.text.instance-size-undeclared": "図形サイズがないため、ボードでサイズを変えられません。",
713
+ "figure.button.declare-instance-size": "図形サイズを宣言"
712
714
  }
@@ -708,5 +708,7 @@
708
708
  "figure.label.repeat-fills": "길이를 채우는 만큼",
709
709
  "figure.button.make-repeat": "되풀이 만들기",
710
710
  "figure.button.remove-repeat": "되풀이 없애기",
711
- "figure.label.twist": "비틀기 (°)"
711
+ "figure.label.twist": "비틀기 (°)",
712
+ "figure.text.instance-size-undeclared": "도형 크기가 없어 보드에서 크기를 바꿀 수 없습니다.",
713
+ "figure.button.declare-instance-size": "도형 크기 선언"
712
714
  }
@@ -708,5 +708,7 @@
708
708
  "figure.label.repeat-fills": "sebanyak yang memenuhi panjang",
709
709
  "figure.button.make-repeat": "buat baris",
710
710
  "figure.button.remove-repeat": "buang baris",
711
- "figure.label.twist": "pusingan (°)"
711
+ "figure.label.twist": "pusingan (°)",
712
+ "figure.text.instance-size-undeclared": "rajah tiada saiz, jadi papan tidak boleh mengubah saiznya.",
713
+ "figure.button.declare-instance-size": "isytihar saiz rajah"
712
714
  }
@@ -708,5 +708,7 @@
708
708
  "figure.label.repeat-fills": "填满长度的数量",
709
709
  "figure.button.make-repeat": "生成重复",
710
710
  "figure.button.remove-repeat": "取消重复",
711
- "figure.label.twist": "扭转 (°)"
711
+ "figure.label.twist": "扭转 (°)",
712
+ "figure.text.instance-size-undeclared": "图形没有尺寸,看板上无法调整大小。",
713
+ "figure.button.declare-instance-size": "声明图形尺寸"
712
714
  }