@things-factory/figure-ui 10.1.79 → 10.1.82

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 (145) hide show
  1. package/client/figure-assistant.ts +2 -2
  2. package/client/graphql/index.ts +99 -10
  3. package/client/graphql/reached.ts +25 -0
  4. package/client/graphql/store.ts +27 -4
  5. package/client/modeller/ai-proposal.ts +74 -9
  6. package/client/modeller/align.ts +2 -3
  7. package/client/modeller/canvas.ts +18 -5
  8. package/client/modeller/command-preview.ts +113 -0
  9. package/client/modeller/editor.ts +826 -54
  10. package/client/modeller/fields.ts +12 -4
  11. package/client/modeller/figure-facts.ts +2 -2
  12. package/client/modeller/figure-first-save.ts +36 -14
  13. package/client/modeller/figure-history-panel.ts +133 -14
  14. package/client/modeller/figure-links.ts +385 -68
  15. package/client/modeller/figure-parts.ts +56 -2
  16. package/client/modeller/figure-preview.ts +19 -1
  17. package/client/modeller/figure-properties.ts +3 -3
  18. package/client/modeller/figure-revert-choice.ts +49 -0
  19. package/client/modeller/first-save.ts +16 -0
  20. package/client/modeller/gizmo.ts +0 -16
  21. package/client/modeller/links.ts +142 -15
  22. package/client/modeller/motion-ends.ts +83 -0
  23. package/client/modeller/occupancy.ts +28 -2
  24. package/client/modeller/product-session.ts +154 -18
  25. package/client/modeller/refusals.ts +15 -0
  26. package/client/modeller/revert-request.ts +26 -0
  27. package/client/modeller/side-panel-styles.ts +12 -0
  28. package/client/modeller/stage-model.ts +25 -3
  29. package/client/pages/figure-modeller-page.ts +68 -29
  30. package/dist-client/figure-assistant.js +2 -2
  31. package/dist-client/figure-assistant.js.map +1 -1
  32. package/dist-client/graphql/index.d.ts +39 -2
  33. package/dist-client/graphql/index.js +63 -9
  34. package/dist-client/graphql/index.js.map +1 -1
  35. package/dist-client/graphql/reached.d.ts +10 -0
  36. package/dist-client/graphql/reached.js +28 -0
  37. package/dist-client/graphql/reached.js.map +1 -0
  38. package/dist-client/graphql/store.js +27 -4
  39. package/dist-client/graphql/store.js.map +1 -1
  40. package/dist-client/modeller/ai-proposal.d.ts +31 -2
  41. package/dist-client/modeller/ai-proposal.js +65 -6
  42. package/dist-client/modeller/ai-proposal.js.map +1 -1
  43. package/dist-client/modeller/align.d.ts +1 -1
  44. package/dist-client/modeller/align.js +0 -2
  45. package/dist-client/modeller/align.js.map +1 -1
  46. package/dist-client/modeller/canvas.d.ts +11 -0
  47. package/dist-client/modeller/canvas.js +33 -4
  48. package/dist-client/modeller/canvas.js.map +1 -1
  49. package/dist-client/modeller/clips.d.ts +1 -1
  50. package/dist-client/modeller/command-preview.d.ts +35 -0
  51. package/dist-client/modeller/command-preview.js +95 -0
  52. package/dist-client/modeller/command-preview.js.map +1 -0
  53. package/dist-client/modeller/editor.d.ts +113 -1
  54. package/dist-client/modeller/editor.js +850 -50
  55. package/dist-client/modeller/editor.js.map +1 -1
  56. package/dist-client/modeller/fields.d.ts +3 -2
  57. package/dist-client/modeller/fields.js +10 -3
  58. package/dist-client/modeller/fields.js.map +1 -1
  59. package/dist-client/modeller/figure-facts.js +2 -2
  60. package/dist-client/modeller/figure-facts.js.map +1 -1
  61. package/dist-client/modeller/figure-first-save.d.ts +3 -4
  62. package/dist-client/modeller/figure-first-save.js +41 -14
  63. package/dist-client/modeller/figure-first-save.js.map +1 -1
  64. package/dist-client/modeller/figure-history-panel.d.ts +31 -0
  65. package/dist-client/modeller/figure-history-panel.js +130 -14
  66. package/dist-client/modeller/figure-history-panel.js.map +1 -1
  67. package/dist-client/modeller/figure-links.d.ts +51 -1
  68. package/dist-client/modeller/figure-links.js +392 -72
  69. package/dist-client/modeller/figure-links.js.map +1 -1
  70. package/dist-client/modeller/figure-parts.d.ts +7 -0
  71. package/dist-client/modeller/figure-parts.js +55 -2
  72. package/dist-client/modeller/figure-parts.js.map +1 -1
  73. package/dist-client/modeller/figure-preview.d.ts +6 -0
  74. package/dist-client/modeller/figure-preview.js +22 -1
  75. package/dist-client/modeller/figure-preview.js.map +1 -1
  76. package/dist-client/modeller/figure-properties.js +3 -3
  77. package/dist-client/modeller/figure-properties.js.map +1 -1
  78. package/dist-client/modeller/figure-revert-choice.d.ts +17 -0
  79. package/dist-client/modeller/figure-revert-choice.js +59 -0
  80. package/dist-client/modeller/figure-revert-choice.js.map +1 -0
  81. package/dist-client/modeller/first-save.d.ts +7 -0
  82. package/dist-client/modeller/first-save.js +17 -0
  83. package/dist-client/modeller/first-save.js.map +1 -1
  84. package/dist-client/modeller/gizmo.d.ts +0 -6
  85. package/dist-client/modeller/gizmo.js +0 -18
  86. package/dist-client/modeller/gizmo.js.map +1 -1
  87. package/dist-client/modeller/links.d.ts +49 -4
  88. package/dist-client/modeller/links.js +141 -15
  89. package/dist-client/modeller/links.js.map +1 -1
  90. package/dist-client/modeller/motion-ends.d.ts +12 -0
  91. package/dist-client/modeller/motion-ends.js +65 -0
  92. package/dist-client/modeller/motion-ends.js.map +1 -0
  93. package/dist-client/modeller/occupancy.d.ts +14 -1
  94. package/dist-client/modeller/occupancy.js +14 -1
  95. package/dist-client/modeller/occupancy.js.map +1 -1
  96. package/dist-client/modeller/product-session.d.ts +43 -2
  97. package/dist-client/modeller/product-session.js +146 -12
  98. package/dist-client/modeller/product-session.js.map +1 -1
  99. package/dist-client/modeller/refusals.d.ts +13 -0
  100. package/dist-client/modeller/refusals.js +16 -0
  101. package/dist-client/modeller/refusals.js.map +1 -1
  102. package/dist-client/modeller/revert-request.d.ts +16 -0
  103. package/dist-client/modeller/revert-request.js +11 -0
  104. package/dist-client/modeller/revert-request.js.map +1 -0
  105. package/dist-client/modeller/side-panel-styles.js +12 -0
  106. package/dist-client/modeller/side-panel-styles.js.map +1 -1
  107. package/dist-client/modeller/stage-model.d.ts +18 -2
  108. package/dist-client/modeller/stage-model.js +21 -3
  109. package/dist-client/modeller/stage-model.js.map +1 -1
  110. package/dist-client/pages/figure-modeller-page.d.ts +8 -1
  111. package/dist-client/pages/figure-modeller-page.js +72 -34
  112. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  113. package/dist-client/route.d.ts +1 -1
  114. package/dist-client/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +6 -6
  116. package/test/ai-proposal.test.ts +2 -2
  117. package/test/align.test.ts +50 -5
  118. package/test/browser/acceptance-page.js +187 -0
  119. package/test/browser/build.mjs +5 -1
  120. package/test/browser/revert-page.js +47 -0
  121. package/test/browser/serve-acceptance.mjs +85 -0
  122. package/test/browser/serve-revert.mjs +119 -0
  123. package/test/clip-ai-proposal.test.ts +104 -0
  124. package/test/clip-consent.test.ts +88 -0
  125. package/test/command-preview.test.ts +288 -0
  126. package/test/fields.test.ts +4 -3
  127. package/test/figure-assistant-surface.test.ts +4 -1
  128. package/test/first-minute.test.ts +96 -0
  129. package/test/first-save-suggest.test.ts +42 -0
  130. package/test/gizmo.test.ts +20 -16
  131. package/test/joint-fan.test.ts +2 -1
  132. package/test/layout.test.ts +9 -2
  133. package/test/links.test.ts +7 -4
  134. package/test/proposal-record.test.ts +126 -0
  135. package/test/release-entry.test.ts +28 -0
  136. package/test/release-panel.test.ts +3 -2
  137. package/test/resize-with-placement.test.ts +225 -0
  138. package/test/revert-choice.test.ts +39 -0
  139. package/test/revert-keeping.test.ts +102 -0
  140. package/test/save-landed.test.ts +198 -0
  141. package/translations/en.json +222 -10
  142. package/translations/ja.json +223 -11
  143. package/translations/ko.json +223 -11
  144. package/translations/ms.json +222 -10
  145. package/translations/zh.json +223 -11
@@ -51,7 +51,7 @@
51
51
  "figure.text.scale-position-explained": "menyimpan kedudukan ini sebagai bahagian saiz figura — pada saiz dua kali, jaraknya dua kali.",
52
52
  "figure.text.repeat-member": "salinan ke-{index} daripada {count} yang dibuat dengan mengulang {name}.",
53
53
  "figure.label.detail-none": "tiada",
54
- "figure.label.repeat": "ulangan",
54
+ "figure.label.repeat": "disusun sebaris",
55
55
  "figure.text.repeat-fits-length": "seberapa banyak salinan yang muat pada panjang figura dengan jarak ini.",
56
56
  "figure.text.repeat-fixed-count": "ulangan dengan bilangan tetap; jaraknya belum boleh ditetapkan.",
57
57
  "figure.text.repeat-what-pitch-gives": "{count} pada panjang {length} mm · boleh diletakkan sehingga {longest} mm ({limit} sebaris).",
@@ -59,6 +59,8 @@
59
59
  "figure.text.gizmo-joint-places": "sendi menentukan kedudukan {part}. gerakkannya dengan kawalannya di tab gerakan.",
60
60
  "figure.label.motion-continuous": "putaran tanpa henti",
61
61
  "figure.text.fasten-before-moving": "lekatkan pada bahagian lain atau lantai dahulu; kemudian ia boleh bergerak.",
62
+ "figure.text.motion-summary": "{part} · berbanding {against} · {kind} pada paksi {axis}",
63
+ "figure.text.motion-ends-shown": "Kanvas menunjukkan pose di kedua-dua hujung julat ({min} … {max} {unit}), lut sinar. Apa yang di antaranya tidak disemak.",
62
64
  "figure.text.joint-range-holds-zero": "julat mesti mengandungi 0, pose rehat.",
63
65
  "figure.text.gizmo-joint-mimic": "sendi {joint} mengikut {leader}. gerakkan {leader}.",
64
66
  "figure.text.gizmo-joint-fixed-turn": "sendi {joint} tidak berputar. berikan putaran di tab gerakan.",
@@ -268,8 +270,8 @@
268
270
  "figure.label.released-versions": "versi yang diterbitkan",
269
271
  "figure.label.repeat-axis": "axis it repeats along",
270
272
  "figure.label.repeat-count": "bilangan",
271
- "figure.label.repeat-gap": "pitch",
272
- "figure.label.repeat-pitch": "pitch",
273
+ "figure.label.repeat-gap": "pitch (tengah ke tengah)",
274
+ "figure.label.repeat-pitch": "pitch (tengah ke tengah)",
273
275
  "figure.label.reuse-trend": "reuse trend",
274
276
  "figure.label.instance-count": "bilangan instans",
275
277
  "figure.label.rotation-degrees": "rotation (degrees)",
@@ -344,6 +346,11 @@
344
346
  "figure.text.leave-without-saving": "ada perubahan yang belum disimpan. buang dan keluar?",
345
347
  "figure.button.leave-without-saving": "buang dan keluar",
346
348
  "figure.button.keep-editing": "teruskan menyunting",
349
+ "figure.text.clips-would-go": "Menggunakan ini membuang klip berikut: {clips}. Buat asal mengembalikannya.",
350
+ "figure.text.clip-gone": "{clip} (tiada lagi yang digerakkan)",
351
+ "figure.text.clip-changed": "{clip} (kini bergerak berbeza)",
352
+ "figure.button.let-clips-go": "Guna dan buang klip",
353
+ "figure.text.clips-consent-stale": "Model berubah semasa anda membuat keputusan, jadi tiada apa yang digunakan. Cuba lagi.",
347
354
  "figure.text.does-not-block": "tidak menghalang",
348
355
  "figure.text.emissive-explained": "kecerahan permukaan itu sendiri. 0 bermaksud tidak bercahaya, dan ia tidak menerangi sekeliling.",
349
356
  "figure.text.enter-a-type-name": "masukkan nama jenis.",
@@ -412,7 +419,7 @@
412
419
  "figure.text.pose-as-default-explained": "Menulis postur semasa sebagai nilai lalai parameter, supaya figura berdiri begini apabila tiada nilai diberi.",
413
420
  "figure.text.preview-blocked-by-errors": "pratonton tidak dapat dipaparkan kerana ralat format. lihat tab kematangan untuk sebabnya.",
414
421
  "figure.text.preview-needs-a-part": "tambah bahagian untuk melihat rupanya apabila diletakkan pada lukisan.",
415
- "figure.text.put-on-floor": "drop it to the floor (Z=0).",
422
+ "figure.text.put-on-floor": "Mengalihkan bahagian sekali supaya bahagian bawahnya di lantai (Y=0). Ia tidak kekal di situ apabila saiz berubah; untuk itu, gunakan “Ikut saiz, dilekatkan pada lantai”.",
416
423
  "figure.text.range-needs-room": "maksimum mesti melebihi minimum.",
417
424
  "figure.text.release-needs-a-save-first": "terdapat perubahan yang belum disimpan. simpan dahulu.",
418
425
  "figure.text.releasing": "sedang menerbitkan…",
@@ -420,11 +427,11 @@
420
427
  "figure.text.repeat-pitch-explained": "jarak dari pusat ke pusat. ia kekal apabila saiz bahagian berubah.",
421
428
  "figure.text.report-appears-when-you-add-a-part": "memaparkan bilangan segi tiga, draw call dan bilangan yang muat dalam satu lukisan. diukur sebaik sahaja anda membuat bahagian.",
422
429
  "figure.text.reuse-score-explained": "how much headroom is left in the declared limits. the one closest to its cap sets the score.",
423
- "figure.text.revert-to-version-confirm": "kembali ke v{version}? apa yang sedang anda sunting akan diganti dengan versi itu.",
430
+ "figure.text.revert-to-version-confirm": "kembali ke v{version}? draf semasa disimpan di pelayan dan boleh dipulihkan dengan 'batal pengembalian'.",
424
431
  "figure.text.rung-flow-note": "memegang barang dan menerima serta menghantarnya melalui port. penghantar, pelongsor, penyisih",
425
432
  "figure.text.rung-hold-note": "mempunyai slot untuk meletakkan barang. rak, palet, meja kerja",
426
433
  "figure.text.rung-none-note": "tidak menerima apa-apa. kebanyakan figure termasuk di sini.",
427
- "figure.text.save-new-figure-desc": "tetapkan kod jenis unik dan nama paparan bagi figure ini.",
434
+ "figure.text.save-new-figure-desc": "Namakan rajah, dan semak pengecam model yang digunakan papan untuk memanggilnya.",
428
435
  "figure.text.save-the-figure-before-releasing": "figure ini belum disimpan. simpan untuk membolehkan penerbitan.",
429
436
  "figure.text.saving-figure": "saving",
430
437
  "figure.text.scene-reference-explained": "jenis lukisan tempat pratonton meletakkan figure. penempatan figure itu sendiri tidak berubah.",
@@ -473,6 +480,39 @@
473
480
  "figure.label.stands-on-plane": "stand on the mounting plane",
474
481
  "figure.label.facing-meet": "faces meet",
475
482
  "figure.label.facing-flush": "same plane",
483
+ "figure.text.overhang-out": "Ia terkeluar melepasi tepi {face} {on}: {sides}. Ini berasingan daripada ruang rajah.",
484
+ "figure.text.overhang-larger": "Lebih lebar daripada {face} {on}, ia melepasi tepinya: {sides}.",
485
+ "figure.text.overhang-lopsided": "Ia terletak ke satu sisi sepanjang {axes}.",
486
+ "figure.text.overhang-possible": "Ia mungkin terkeluar melepasi tepi {face} {on}: ia dilekatkan berpusing, jadi hanya kotaknya diukur.",
487
+ "figure.text.overhang-unknown": "Sama ada ia berada dalam tepi {face} {on} tidak dapat dibaca.",
488
+ "figure.text.overhang-held": "Bahagian yang dilekatkan padanya ({parts}) terkeluar, atau mungkin terkeluar, melepasi tepi muka tempatnya.",
489
+ "figure.text.overhang-side-low": "{axis} sisi bawah {mm} mm",
490
+ "figure.text.overhang-side-high": "{axis} sisi atas {mm} mm",
491
+ "figure.button.fix-alignment": "ubah penjajaran dan jarak",
492
+ "figure.text.detach-stays": "Apabila ditanggalkan, ia kekal di tempatnya; hanya lekatannya pada {from} hilang.",
493
+ "figure.text.detach-moves": "Apabila ditanggalkan, ia bergerak:",
494
+ "figure.text.detach-keeps-children": "Bahagian yang dilekatkan padanya ({parts}) kekal dilekatkan.",
495
+ "figure.text.detach-clips": "Menanggalkan membuang klip: {clips}. Anda akan ditanya semasa menanggalkan.",
496
+ "figure.text.detach-refused": "Ia tidak boleh ditanggalkan: {reason}",
497
+ "figure.text.preview-refused": "Tidak boleh dilekatkan begini: {reason}",
498
+ "figure.text.preview-stays": "Ia kekal di tempatnya.",
499
+ "figure.text.preview-moves": "Ia bergerak {by} mm, dalam rangka rajah.",
500
+ "figure.text.preview-turns-named": "Ia berpusing {degrees}° pada paksi {axis} rajah.",
501
+ "figure.text.preview-turns-slanted": "Ia berpusing {degrees}° pada paksi condong ({axis}) rajah.",
502
+ "figure.text.preview-carries": "Bergerak bersamanya: {parts}",
503
+ "figure.text.preview-copies": "{n} × {part}",
504
+ "figure.text.preview-clips": "Menggunakan ini membuang klip: {clips}. Anda akan ditanya semasa menggunakannya.",
505
+ "figure.text.preview-face-unknown": "Muka ini tidak dapat ditunjukkan pada kanvas.",
506
+ "figure.text.target-would-loop": "{part} — dilekatkan pada {mine}, tidak boleh dipilih",
507
+ "figure.label.fasten-detail": "Butiran",
508
+ "figure.label.facing": "Cara muka bertemu",
509
+ "figure.text.fasten-summary-default": "Lalai (bertemu · tengah · jarak 0 · pulasan 0)",
510
+ "figure.text.fasten-summary-edge-min": "{axis} tepi bawah",
511
+ "figure.text.fasten-summary-edge-max": "{axis} tepi atas",
512
+ "figure.text.fasten-summary-off-centre": "{axis} {mm} mm dari tengah",
513
+ "figure.text.fasten-summary-follows": "{axis} mengikut nilai",
514
+ "figure.text.fasten-summary-gap": "jarak {mm} mm",
515
+ "figure.text.fasten-summary-twist": "pulasan {degrees}°",
476
516
  "figure.label.gap": "gap (mm)",
477
517
  "figure.label.align": "within the face",
478
518
  "figure.label.align-centre": "di tengah",
@@ -506,7 +546,7 @@
506
546
  "figure.button.propose-room": "Compute bounds",
507
547
  "figure.button.confirm-room": "Declare these bounds",
508
548
  "figure.label.room-undeclared": "not declared yet",
509
- "figure.label.room-declared": "declared",
549
+ "figure.label.room-declared": "Diisytiharkan sekarang",
510
550
  "figure.label.mounting-face": "Mounting face",
511
551
  "figure.text.mounting-face-explained": "The face the figure is mounted on. A separate choice from the room it takes up.",
512
552
  "figure.button.set-mounting-face": "This face",
@@ -611,17 +651,32 @@
611
651
  "figure.label.face-opening-left": "bukaan kiri",
612
652
  "figure.label.face-opening-right": "bukaan kanan",
613
653
  "figure.label.face-opening-top": "bukaan atas",
614
- "figure.label.repeat-fills": "sebanyak yang memenuhi panjang",
615
- "figure.button.make-repeat": "buat baris",
654
+ "figure.label.repeat-fills": "sebanyak yang memenuhi panjang (tetapkan pitch)",
655
+ "figure.button.make-repeat": "susun sebaris",
616
656
  "figure.button.remove-repeat": "buang baris",
657
+ "figure.label.row-basis": "berapa banyak",
658
+ "figure.label.row-by-count": "bilangan tetap",
659
+ "figure.text.row-count-spreads": "Bilangan tetap disebarkan sekata sepanjang panjang. Semak jaraknya dalam pratonton.",
660
+ "figure.text.row-blocked-unfastened": "Lekatkan {part} pada bahagian lain untuk menyusunnya sebaris di sepanjang bahagian itu.",
661
+ "figure.text.row-blocked-on-plane": "Lekatkan pada bahagian lain, bukan satah pemasangan, untuk menyusunnya sebaris.",
662
+ "figure.text.row-blocked-holds-parts": "Ada bahagian dilekatkan pada bahagian ini, jadi ia tidak boleh disusun sebaris. Susun dahulu; bahagian yang dilekatkan kemudian ikut setiap salinan.",
663
+ "figure.button.go-fasten": "pergi ke pelekatan",
664
+ "figure.text.row-count-pitch": "{count} × {part} · sepanjang {axis} · pitch {pitch} mm (tengah ke tengah)",
665
+ "figure.text.row-count-uneven": "{count} × {part} · sepanjang {axis} · jarak tidak sekata",
666
+ "figure.text.row-ends-centred": "di tengah · {mm} mm tinggal di setiap hujung",
667
+ "figure.text.row-ends": "{low} mm tinggal di hujung bawah · {high} mm di hujung atas",
668
+ "figure.text.row-ends-unknown": "Baki di hujung tidak dapat dibaca.",
669
+ "figure.text.row-companions": "disalin bersama: {parts}",
617
670
  "figure.label.twist": "pusingan (°)",
618
671
  "figure.text.instance-size-undeclared": "rajah tiada saiz, jadi papan tidak boleh mengubah saiznya.",
619
672
  "figure.button.declare-instance-size": "isytihar saiz rajah",
620
673
  "figure.text.proposal-applied": "{n} arahan digunakan sebagai satu langkah.",
674
+ "figure.text.proposal-saved-into": "Disimpan ke dalam: {names}",
621
675
  "figure.text.proposal-needs-modeller": "cadangan ini hanya boleh digunakan semasa rajahnya dibuka dalam pemodel.",
622
676
  "figure.text.proposal-new-figure-unsaved": "rajah baharu sedang dibuat, jadi cadangan tidak digunakan. simpan atau buang dahulu, kemudian jalankan semula.",
623
677
  "figure.text.proposal-not-opened": "rajah baharu tidak dapat dibuka dalam pemodel, jadi cadangan tidak digunakan.",
624
678
  "figure.text.proposal-refused": "pemodel tidak menggunakan cadangan: {reason}",
679
+ "figure.text.proposal-would-drop-clips": "Menggunakan cadangan ini akan membuang klip ({clips}), jadi ia tidak digunakan. Edit sendiri jika anda mahu membuangnya.",
625
680
  "figure.text.proposal-stale": "model berubah selepas cadangan dibuat, jadi ia tidak digunakan. minta sekali lagi.",
626
681
  "figure.label.follows-plus": "tambah (mm)",
627
682
  "figure.label.motion-travel": "jarak gerak",
@@ -663,5 +718,162 @@
663
718
  "figure.text.edit-refused": "Suntingan ini tidak boleh dibuat. ({code})",
664
719
  "figure.text.edit-refused-node-limit": "Rajah terlalu besar untuk ditambah. Ia memuatkan sehingga {max} nod.",
665
720
  "figure.text.recipe-step-refused": "Terhenti pada langkah {step} resipi. {why} ({code})",
666
- "figure.text.removal-space-refitted": "Ruang dipadankan semula dengan bahagian yang tinggal."
721
+ "figure.text.removal-space-refitted": "Ruang dipadankan semula dengan bahagian yang tinggal.",
722
+ "figure.text.placement-intent-floor": "Letakan lantai: bahagian bawah mengekalkan jaraknya sekarang dari lantai (Y=0) apabila saiz berubah. Kedudukannya di atas lantai (X, Z) kekal.",
723
+ "figure.text.placement-intent-ceiling": "Letakan siling: bahagian atas mengekalkan jaraknya sekarang dari siling (Y=0) apabila saiz berubah. Kedudukannya di bawah siling (X, Z) kekal.",
724
+ "figure.text.placement-intent-wall": "Letakan dinding: bahagian belakang mengekalkan jaraknya sekarang dari dinding (Z=0) apabila saiz berubah. Kedudukannya pada dinding (X, Y) kekal.",
725
+ "figure.text.placement-intent-center": "Letakan tengah: kedudukan tengah kekal dan hanya saiz yang mengikut. Tiada apa-apa dilekatkan pada lantai, siling atau dinding.",
726
+ "figure.label.resize-intent": "Apabila saiz berubah, bahagian ini",
727
+ "figure.text.resize-intent": "Setiap arah menunjukkan saiznya sekarang dan apa yang diikutinya. Pilih arah untuk diikuti di bawah, dan gunakannya bersama tempat bahagian kekal.",
728
+ "figure.label.resize-diameter": "Diameter (X dan Z)",
729
+ "figure.label.resize-x": "Lebar (X)",
730
+ "figure.label.resize-y": "Tinggi (Y)",
731
+ "figure.label.resize-z": "Kedalaman (Z)",
732
+ "figure.label.resize-custom": "Dipautkan pada peraturan lain",
733
+ "figure.label.resize-following": "Berubah bersama rajah",
734
+ "figure.label.resize-advanced": "Paut pada bahagian lain · Lanjutan",
735
+ "figure.text.resize-uniform-warning": "Rajah ini membesar dengan satu nisbah, yang didahulukan berbanding perubahan setiap arah. Penukaran cara ini belum tersedia.",
736
+ "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
+ "figure.label.resize-part": "Bahagian untuk ditetapkan",
738
+ "figure.button.configure-size": "Tetapkan tindak balas saiz bahagian ini",
739
+ "figure.text.resize-room-unchanged": "Tindak balas saiz digunakan. Ruang yang diisytiharkan tidak diubah.",
740
+ "figure.button.resize-choice-replace-position": "Ganti peraturan kedudukan dan gunakan",
741
+ "figure.label.resize-place-floor": "lantai",
742
+ "figure.label.resize-place-ceiling": "siling",
743
+ "figure.label.resize-place-wall": "dinding",
744
+ "figure.label.resize-place-center": "tengah",
745
+ "figure.text.resize-refused-held": "{part} sudah dilekatkan pada bahagian lain atau satah. Ubah lekatan itu secara langsung.",
746
+ "figure.text.resize-refused-turned": "{part} diputar, jadi tindakan ini tidak dapat menetapkannya. Pautkan setiap arah dalam tetapan lanjutan.",
747
+ "figure.text.resize-refused-uniform-policy": "Rajah ini membesar dengan satu nisbah. Ubah itu dahulu untuk memberi bahagian tindak balas saiznya sendiri.",
748
+ "figure.text.resize-refused-shape-edit": "Tindakan ini belum menyokong bentuk {part}. Pautkan setiap arah dalam tetapan lanjutan.",
749
+ "figure.text.resize-refused-dimension-rule": "Satu dimensi {part} sudah mengikut peraturan lain. Ubah peraturan itu secara langsung dalam tetapan lanjutan.",
750
+ "figure.text.resize-refused-position-rule": "Kedudukan {axis} bagi {part} ditetapkan oleh input atau ungkapan. Jika digunakan, ia diganti dengan hubungan {place}.",
751
+ "figure.text.resize-refused-no-face": "{part} tiada muka rata untuk dilekatkan pada {place}.",
752
+ "figure.text.axis-held-by-rule": "Ditetapkan oleh peraturan",
753
+ "figure.label.room-only-inputs": "Digunakan hanya untuk mengira ruang letakan",
754
+ "figure.text.room-only-inputs": "Nilai ini tidak mengalihkan bahagian. Ruang yang diisytiharkan dikira daripadanya.",
755
+ "figure.button.room-refit": "Kira semula ruang…",
756
+ "figure.label.room-refit": "Kira semula ruang",
757
+ "figure.label.room-proposed": "Selepas dikira semula",
758
+ "figure.label.room-at-authored": "Saiz dilukis",
759
+ "figure.label.room-at-largest": "Saiz terbesar",
760
+ "figure.text.room-same": "sama",
761
+ "figure.text.room-part-outside": "{part}: {mm} mm di luar pada {axis}",
762
+ "figure.text.room-nothing-outside": "tiada bahagian di luar pada saiz yang diukur",
763
+ "figure.button.room-refit-confirm": "Kira semula begini",
764
+ "figure.text.resize-gap-off": "Muka bahagian ini {mm} mm dari satah {place}.",
765
+ "figure.text.resize-gap-through": "Bahagian ini menembusi satah {place} sejauh {mm} mm.",
766
+ "figure.button.resize-keep-gap": "{scope}: ikut saiz, kekalkan jarak {mm} mm",
767
+ "figure.button.resize-keep-through": "{scope}: ikut saiz, kekal {mm} mm menembusi",
768
+ "figure.button.resize-onto-plane-floor": "{scope}: ikut saiz, dibawa ke lantai",
769
+ "figure.button.resize-onto-plane-ceiling": "{scope}: ikut saiz, dibawa ke siling",
770
+ "figure.button.resize-onto-plane-wall": "{scope}: ikut saiz, dibawa ke dinding",
771
+ "figure.text.resize-refused-gap-choice": "Muka {part} tidak menyentuh satah {place}. Pilih sama ada kekalkan jarak atau bawa ke satah.",
772
+ "figure.text.resize-replaces": "Jika digunakan, medan {fields} diganti dengan lekatan {place}. Tiada apa-apa bergerak sekarang.",
773
+ "figure.text.room-drops": "Mengesahkan membuang medan yang tidak lagi digunakan: {fields}",
774
+ "figure.button.resize-unfollow": "Kembalikan kepada tetap",
775
+ "figure.label.resize-pending": "Tindak balas saiz untuk digunakan",
776
+ "figure.text.resize-already-following": "(sudah mengikut)",
777
+ "figure.text.resize-basis-suggested": "Belum ada arah dipilih, jadi semua ditanda. Nyahtanda yang tidak perlu.",
778
+ "figure.text.resize-basis-chosen": "Hanya arah yang ditanda mengikut. Yang lain kekal saiznya.",
779
+ "figure.text.resize-basis-none": "Tanda sekurang-kurangnya satu arah untuk diikuti.",
780
+ "figure.text.resize-scope-all-3": "Ketiga-tiga arah",
781
+ "figure.text.resize-scope-all-2": "Kedua-dua arah",
782
+ "figure.text.resize-scope-all-1": "Arah ini",
783
+ "figure.text.resize-scope-only": "Hanya {axes}",
784
+ "figure.button.resize-scoped-floor": "{scope}: ikut saiz, dilekatkan pada lantai",
785
+ "figure.button.resize-scoped-ceiling": "{scope}: ikut saiz, dilekatkan pada siling",
786
+ "figure.button.resize-scoped-wall": "{scope}: ikut saiz, dilekatkan pada dinding",
787
+ "figure.button.resize-scoped-center": "{scope}: ikut saiz, kekalkan tengah sekarang",
788
+ "figure.text.resize-move": "(bergerak {mm} mm pada {axis})",
789
+ "figure.text.axes-held-by-rule": "{group} {axes}: ditetapkan oleh peraturan, baca sahaja",
790
+ "figure.text.held-by-rule": "Satu peraturan meletakkan bahagian ini.",
791
+ "figure.text.held-on-plane": "{face} dikekalkan pada {place} (jarak {gap} mm)",
792
+ "figure.text.held-on-part": "Dilekatkan dengan {face} pada {otherFace} {other}",
793
+ "figure.button.open-fastening": "Buka tetapan lekatan",
794
+ "figure.button.detach-held": "Tanggalkan",
795
+ "figure.text.gizmo-size-turned-fastening": "{part} diputar condong atau dilekatkan dipulas, jadi muka yang dikekalkan semasa diseret dan semasa ditulis akan berbeza. Taip saiz dalam medannya -- muka letakan (atau {extreme}) kekal di tempatnya.",
796
+ "figure.label.kept-extreme-floor": "titik terendah",
797
+ "figure.label.kept-extreme-ceiling": "titik tertinggi",
798
+ "figure.label.kept-extreme-wall": "titik paling belakang",
799
+ "figure.label.kept-extreme-center": "tengah",
800
+ "figure.label.align-input": "Mengikut medannya ({field})",
801
+ "figure.label.tab-short-properties": "Sifat",
802
+ "figure.label.tab-short-capability": "Keupayaan",
803
+ "figure.label.tab-short-motion": "Gerakan",
804
+ "figure.label.tab-short-verdict": "Semak",
805
+ "figure.label.tab-short-view": "Paparan",
806
+ "figure.label.tab-short-history": "Sejarah",
807
+ "figure.text.start-question": "Mahu bermula dengan apa?",
808
+ "figure.label.start-shape": "Tambah bentuk asas",
809
+ "figure.text.start-shape-more": "Bentuk lain ada dalam senarai di kiri.",
810
+ "figure.label.start-recipe": "Mula daripada resipi",
811
+ "figure.button.start-recipe": "Semak imbas resipi",
812
+ "figure.label.start-ai": "Draf dengan AI",
813
+ "figure.button.start-ai": "Minta AI membuat draf",
814
+ "figure.text.start-ai-optional": "Pilihan. Anda boleh membinanya sendiri.",
815
+ "figure.text.empty-figure-next": "Tambah bahagian untuk melihat saiz dan letakannya.",
816
+ "figure.label.figure-info-later": "Maklumat rajah · boleh ditetapkan kemudian",
817
+ "figure.text.parts-panel-folded-narrow": "Skrin sempit, jadi senarai bahagian dilipat. Butang panel pada bar alat membukanya semula.",
818
+ "figure.text.summary-follows": "{axes} mengikut rajah",
819
+ "figure.text.summary-ruled": "{axes} mengikut peraturan",
820
+ "figure.text.summary-size-fixed": "Saiz tetap",
821
+ "figure.text.summary-free": "Diletakkan pada kedudukannya · tidak dilekatkan",
822
+ "figure.text.ai-draft-request": "Sila buat draf rajah baharu. Peralatannya: ",
823
+ "figure.text.start-no-recipes": "Belum ada resipi tersedia.",
824
+ "figure.label.start-placement": "Di mana ia diletakkan?",
825
+ "figure.text.placement-is-intent": "Asas pengarangan rajah. Boleh dipilih sebelum ada bahagian; ia tidak mengubah ruang yang diisytiharkan.",
826
+ "figure.button.show-model-settings": "Tunjukkan tetapan model",
827
+ "figure.text.new-figure-name": "Rajah baharu",
828
+ "figure.label.panel-path": "Apa yang dipaparkan",
829
+ "figure.label.model-settings": "Tetapan model",
830
+ "figure.text.fasten-editing": "Menyunting lekatan semasa: {face} pada {target}",
831
+ "figure.text.fasten-new": "Lekatkan baharu",
832
+ "figure.button.fasten-update": "Kemas kini lekatan ini",
833
+ "figure.button.align-to-floor": "Jajarkan ke lantai",
834
+ "figure.button.align-to-ceiling": "Jajarkan ke siling",
835
+ "figure.button.align-to-wall": "Jajarkan ke dinding",
836
+ "figure.button.align-to-center": "Jajarkan ke ketinggian tengah",
837
+ "figure.text.align-to-floor": "Mengalihkannya sekali supaya bahagian bawahnya di lantai (Y=0). Ia tidak dilekatkan.",
838
+ "figure.text.align-to-ceiling": "Mengalihkannya sekali supaya bahagian atasnya di siling (Y=0). Ia tidak dilekatkan.",
839
+ "figure.text.align-to-wall": "Mengalihkannya sekali supaya bahagian belakangnya di dinding (Z=0). Ia tidak dilekatkan.",
840
+ "figure.text.align-to-center": "Mengalihkannya sekali supaya tengahnya pada ketinggian asalan (Y=0). Ia tidak dilekatkan.",
841
+ "figure.text.align-to-floor-tilted": "Kekalkan kecondongan dan jajarkan ke lantai (Y=0). Titik atau tepi terendah menyentuh. Ia tidak dilekatkan.",
842
+ "figure.text.align-to-floor-extreme": "Jajarkan ke lantai (Y=0). Bahagian terendah menyentuh. Ia tidak dilekatkan.",
843
+ "figure.text.aligned-tilted-floor": "Dijajarkan ke lantai, kecondongan dikekalkan. Titik atau tepi terendah menyentuh.",
844
+ "figure.text.aligned-extreme-floor": "Dijajarkan ke lantai. Bahagian terendah menyentuh.",
845
+ "figure.text.align-to-ceiling-tilted": "Kekalkan kecondongan dan jajarkan ke siling (Y=0). Titik atau tepi tertinggi menyentuh. Ia tidak dilekatkan.",
846
+ "figure.text.align-to-ceiling-extreme": "Jajarkan ke siling (Y=0). Bahagian tertinggi menyentuh. Ia tidak dilekatkan.",
847
+ "figure.text.aligned-tilted-ceiling": "Dijajarkan ke siling, kecondongan dikekalkan. Titik atau tepi tertinggi menyentuh.",
848
+ "figure.text.aligned-extreme-ceiling": "Dijajarkan ke siling. Bahagian tertinggi menyentuh.",
849
+ "figure.text.align-to-wall-tilted": "Kekalkan kecondongan dan jajarkan ke dinding (Z=0). Titik atau tepi paling belakang menyentuh. Ia tidak dilekatkan.",
850
+ "figure.text.align-to-wall-extreme": "Jajarkan ke dinding (Z=0). Bahagian paling belakang menyentuh. Ia tidak dilekatkan.",
851
+ "figure.text.aligned-tilted-wall": "Dijajarkan ke dinding, kecondongan dikekalkan. Titik atau tepi paling belakang menyentuh.",
852
+ "figure.text.aligned-extreme-wall": "Dijajarkan ke dinding. Bahagian paling belakang menyentuh.",
853
+ "figure.text.align-refused-held": "{part} dilekatkan, jadi lekatannya menentukan kedudukannya. Ubah dalam tetapan lekatan.",
854
+ "figure.text.align-refused-position-rule": "Satu peraturan menetapkan kedudukan {part}, jadi tiada nombor untuk dialihkan.",
855
+ "figure.text.align-refused-no-face": "Kedudukan {part} tidak dapat diukur.",
856
+ "figure.text.save-unreachable": "Tidak dapat menghubungi pelayan. Sama ada ia disimpan tidak diketahui. Suntingan anda masih ada; simpan semula.",
857
+ "figure.text.released-now-draft": "Rajah yang diterbitkan telah diubah, jadi ia kembali menjadi draf. Papan mengekalkan versi yang diterbitkan sehingga anda menerbitkannya semula.",
858
+ "figure.text.revert-with-unsaved": "Ada perubahan yang belum disimpan. Apa yang perlu dibuat sebelum kembali ke versi {version}?",
859
+ "figure.button.revert-saving": "Simpan, kemudian kembalikan",
860
+ "figure.button.revert-discarding": "Buang dan kembalikan",
861
+ "figure.text.revert-held-unsaved": "Simpanan tidak selesai, jadi tiada apa yang dikembalikan. {reason}",
862
+ "figure.label.kept-drafts": "draf sebelum dikembalikan",
863
+ "figure.text.kept-before-revert": "sebelum kembali ke versi {version}",
864
+ "figure.text.kept-before-undo": "sebelum pengembalian dibatalkan",
865
+ "figure.text.kept-restored": "telah dipulihkan",
866
+ "figure.button.undo-revert": "batal pengembalian",
867
+ "figure.button.redo-revert": "kembalikan semula",
868
+ "figure.text.undo-revert-with-unsaved": "Ada perubahan yang belum disimpan. Apa yang perlu dilakukan sebelum membatalkan pengembalian?",
869
+ "figure.button.save-and-continue": "Simpan, kemudian teruskan",
870
+ "figure.button.discard-and-continue": "Buang dan teruskan",
871
+ "figure.text.revert-needs-server-source": "Model pada pelayan tidak dapat disahkan, jadi tiada yang dikembalikan. Buka semula model.",
872
+ "figure.text.revert-unconfirmed": "Tiada jawapan daripada pelayan, jadi hasilnya tidak diketahui. Tekan sekali lagi untuk menyemaknya dengan permintaan yang sama.",
873
+ "figure.label.figure-identifier": "Pengecam model",
874
+ "figure.text.identifier-suggested": "Pengecam yang dicadangkan. Ia boleh diubah sehingga rajah diterbitkan, dan tidak selepas itu.",
875
+ "figure.text.release-state-released": "Diterbitkan · v{version}",
876
+ "figure.text.release-state-draft-over": "Draf · papan menggunakan v{version}",
877
+ "figure.text.release-state-draft-new": "Draf · belum pernah diterbitkan",
878
+ "figure.button.release": "Terbitkan"
667
879
  }