@pascal-app/nodes 1.0.5 → 1.0.7

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 (566) hide show
  1. package/README.md +1 -0
  2. package/dist/beam/actions/move-endpoint.d.ts +24 -0
  3. package/dist/beam/actions/move-endpoint.d.ts.map +1 -0
  4. package/dist/beam/actions/move-endpoint.js +54 -0
  5. package/dist/beam/definition.d.ts +14 -0
  6. package/dist/beam/definition.d.ts.map +1 -0
  7. package/dist/beam/definition.js +173 -0
  8. package/dist/beam/draft-settings.d.ts +17 -0
  9. package/dist/beam/draft-settings.d.ts.map +1 -0
  10. package/dist/beam/draft-settings.js +81 -0
  11. package/dist/beam/drafting.d.ts +35 -0
  12. package/dist/beam/drafting.d.ts.map +1 -0
  13. package/dist/beam/drafting.js +103 -0
  14. package/dist/beam/floorplan-affordances.d.ts +8 -0
  15. package/dist/beam/floorplan-affordances.d.ts.map +1 -0
  16. package/dist/beam/floorplan-affordances.js +40 -0
  17. package/dist/beam/floorplan-move.d.ts +11 -0
  18. package/dist/beam/floorplan-move.d.ts.map +1 -0
  19. package/dist/beam/floorplan-move.js +54 -0
  20. package/dist/beam/floorplan.d.ts +11 -0
  21. package/dist/beam/floorplan.d.ts.map +1 -0
  22. package/dist/beam/floorplan.js +91 -0
  23. package/dist/beam/geometry.d.ts +19 -0
  24. package/dist/beam/geometry.d.ts.map +1 -0
  25. package/dist/beam/geometry.js +63 -0
  26. package/dist/beam/index.d.ts +3 -0
  27. package/dist/beam/index.d.ts.map +1 -0
  28. package/dist/beam/index.js +2 -0
  29. package/dist/beam/move-endpoint-tool.d.ts +21 -0
  30. package/dist/beam/move-endpoint-tool.d.ts.map +1 -0
  31. package/dist/beam/move-endpoint-tool.js +49 -0
  32. package/dist/beam/move-tool.d.ts +12 -0
  33. package/dist/beam/move-tool.d.ts.map +1 -0
  34. package/dist/beam/move-tool.js +114 -0
  35. package/dist/beam/panel-model.d.ts +28 -0
  36. package/dist/beam/panel-model.d.ts.map +1 -0
  37. package/dist/beam/panel-model.js +123 -0
  38. package/dist/beam/panel.d.ts +13 -0
  39. package/dist/beam/panel.d.ts.map +1 -0
  40. package/dist/beam/panel.js +107 -0
  41. package/dist/beam/parametrics.d.ts +3 -0
  42. package/dist/beam/parametrics.d.ts.map +1 -0
  43. package/dist/beam/parametrics.js +4 -0
  44. package/dist/beam/renderer.d.ts +13 -0
  45. package/dist/beam/renderer.d.ts.map +1 -0
  46. package/dist/beam/renderer.js +36 -0
  47. package/dist/beam/schema.d.ts +2 -0
  48. package/dist/beam/schema.d.ts.map +1 -0
  49. package/dist/beam/schema.js +1 -0
  50. package/dist/beam/tool.d.ts +13 -0
  51. package/dist/beam/tool.d.ts.map +1 -0
  52. package/dist/beam/tool.js +152 -0
  53. package/dist/box-vent/panel.d.ts.map +1 -1
  54. package/dist/box-vent/panel.js +8 -7
  55. package/dist/cabinet/batchable.d.ts +10 -0
  56. package/dist/cabinet/batchable.d.ts.map +1 -0
  57. package/dist/cabinet/batchable.js +12 -0
  58. package/dist/cabinet/compartment-card.d.ts.map +1 -1
  59. package/dist/cabinet/compartment-card.js +142 -46
  60. package/dist/cabinet/countertop-layout.d.ts +5 -0
  61. package/dist/cabinet/countertop-layout.d.ts.map +1 -1
  62. package/dist/cabinet/definition.d.ts.map +1 -1
  63. package/dist/cabinet/definition.js +3 -0
  64. package/dist/cabinet/dimension-input.d.ts +6 -0
  65. package/dist/cabinet/dimension-input.d.ts.map +1 -0
  66. package/dist/cabinet/dimension-input.js +8 -0
  67. package/dist/cabinet/essential-controls.d.ts.map +1 -1
  68. package/dist/cabinet/essential-controls.js +82 -17
  69. package/dist/cabinet/index.d.ts +1 -1
  70. package/dist/cabinet/index.d.ts.map +1 -1
  71. package/dist/cabinet/index.js +1 -1
  72. package/dist/cabinet/kitchen-catalog.d.ts +17 -4
  73. package/dist/cabinet/kitchen-catalog.d.ts.map +1 -1
  74. package/dist/cabinet/kitchen-catalog.js +45 -7
  75. package/dist/cabinet/kitchen-collection.d.ts.map +1 -1
  76. package/dist/cabinet/kitchen-collection.js +21 -5
  77. package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
  78. package/dist/cabinet/kitchen-module-actions.js +107 -14
  79. package/dist/cabinet/neighbor-placement.d.ts +10 -0
  80. package/dist/cabinet/neighbor-placement.d.ts.map +1 -1
  81. package/dist/cabinet/panel.d.ts.map +1 -1
  82. package/dist/cabinet/panel.js +127 -50
  83. package/dist/cabinet/run-finishing.d.ts +5 -0
  84. package/dist/cabinet/run-finishing.d.ts.map +1 -1
  85. package/dist/cabinet/run-ops.d.ts +5 -0
  86. package/dist/cabinet/run-ops.d.ts.map +1 -1
  87. package/dist/cabinet/run-panel.d.ts.map +1 -1
  88. package/dist/cabinet/run-panel.js +203 -52
  89. package/dist/cabinet/tool.d.ts.map +1 -1
  90. package/dist/cabinet/tool.js +8 -5
  91. package/dist/ceiling/build-up-section.d.ts +7 -0
  92. package/dist/ceiling/build-up-section.d.ts.map +1 -0
  93. package/dist/ceiling/build-up-section.js +57 -0
  94. package/dist/ceiling/definition.d.ts.map +1 -1
  95. package/dist/ceiling/definition.js +3 -1
  96. package/dist/ceiling/floorplan-affordances.d.ts +112 -0
  97. package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
  98. package/dist/ceiling/materials.d.ts +5 -0
  99. package/dist/ceiling/materials.d.ts.map +1 -1
  100. package/dist/ceiling/materials.js +17 -0
  101. package/dist/ceiling/panel-model.d.ts +13 -0
  102. package/dist/ceiling/panel-model.d.ts.map +1 -0
  103. package/dist/ceiling/panel-model.js +49 -0
  104. package/dist/ceiling/panel.d.ts.map +1 -1
  105. package/dist/ceiling/panel.js +82 -18
  106. package/dist/ceiling/renderer.d.ts.map +1 -1
  107. package/dist/ceiling/renderer.js +10 -4
  108. package/dist/ceiling/tool.d.ts.map +1 -1
  109. package/dist/ceiling/tool.js +24 -4
  110. package/dist/chimney/panel.d.ts.map +1 -1
  111. package/dist/chimney/panel.js +113 -41
  112. package/dist/column/definition.d.ts.map +1 -1
  113. package/dist/column/definition.js +3 -0
  114. package/dist/column/floorplan.d.ts.map +1 -1
  115. package/dist/column/floorplan.js +17 -0
  116. package/dist/column/hosted-resize.d.ts +28 -1
  117. package/dist/column/hosted-resize.d.ts.map +1 -1
  118. package/dist/column/panel.d.ts.map +1 -1
  119. package/dist/column/panel.js +125 -37
  120. package/dist/column/post-options.d.ts +10 -0
  121. package/dist/column/post-options.d.ts.map +1 -0
  122. package/dist/column/post-options.js +71 -0
  123. package/dist/column/post-placement.d.ts +78 -0
  124. package/dist/column/post-placement.d.ts.map +1 -0
  125. package/dist/column/post-placement.js +157 -0
  126. package/dist/column/post-section.d.ts +17 -0
  127. package/dist/column/post-section.d.ts.map +1 -0
  128. package/dist/column/post-section.js +95 -0
  129. package/dist/column/post-tool.d.ts +11 -0
  130. package/dist/column/post-tool.d.ts.map +1 -0
  131. package/dist/column/post-tool.js +94 -0
  132. package/dist/column/tool.d.ts +3 -10
  133. package/dist/column/tool.d.ts.map +1 -1
  134. package/dist/column/tool.js +13 -1
  135. package/dist/cupola/panel.d.ts.map +1 -1
  136. package/dist/cupola/panel.js +14 -7
  137. package/dist/door/actions.d.ts +7 -0
  138. package/dist/door/actions.d.ts.map +1 -0
  139. package/dist/door/actions.js +32 -0
  140. package/dist/door/contextual-dimensions.d.ts.map +1 -1
  141. package/dist/door/contextual-dimensions.js +11 -1
  142. package/dist/door/definition.d.ts.map +1 -1
  143. package/dist/door/definition.js +34 -7
  144. package/dist/door/floorplan-affordances.d.ts.map +1 -1
  145. package/dist/door/floorplan-affordances.js +5 -2
  146. package/dist/door/floorplan-move.d.ts.map +1 -1
  147. package/dist/door/floorplan-move.js +28 -6
  148. package/dist/door/floorplan.d.ts +2 -0
  149. package/dist/door/floorplan.d.ts.map +1 -1
  150. package/dist/door/floorplan.js +89 -16
  151. package/dist/door/move-tool.d.ts.map +1 -1
  152. package/dist/door/move-tool.js +60 -16
  153. package/dist/door/paint.d.ts +2 -7
  154. package/dist/door/paint.d.ts.map +1 -1
  155. package/dist/door/paint.js +26 -2
  156. package/dist/door/panel.d.ts.map +1 -1
  157. package/dist/door/panel.js +242 -90
  158. package/dist/door/parametrics.js +1 -1
  159. package/dist/door/placement.d.ts.map +1 -1
  160. package/dist/door/placement.js +9 -2
  161. package/dist/door/swing.d.ts +22 -0
  162. package/dist/door/swing.d.ts.map +1 -0
  163. package/dist/door/swing.js +36 -0
  164. package/dist/door/tool.d.ts.map +1 -1
  165. package/dist/door/tool.js +76 -29
  166. package/dist/dormer/panel-actions-section.d.ts.map +1 -1
  167. package/dist/dormer/panel-actions-section.js +3 -1
  168. package/dist/dormer/panel-position-section.d.ts.map +1 -1
  169. package/dist/dormer/panel-position-section.js +4 -3
  170. package/dist/dormer/panel-windows-section.d.ts.map +1 -1
  171. package/dist/dormer/panel-windows-section.js +38 -1
  172. package/dist/dormer/panel.d.ts.map +1 -1
  173. package/dist/dormer/panel.js +24 -18
  174. package/dist/downspout/inspector-editors.d.ts.map +1 -1
  175. package/dist/downspout/inspector-editors.js +3 -2
  176. package/dist/duct-fitting/inspector-editors.d.ts.map +1 -1
  177. package/dist/duct-fitting/inspector-editors.js +6 -1
  178. package/dist/duct-fitting/tool.d.ts.map +1 -1
  179. package/dist/duct-fitting/tool.js +11 -2
  180. package/dist/duct-terminal/tool.d.ts.map +1 -1
  181. package/dist/duct-terminal/tool.js +11 -2
  182. package/dist/elevator/panel.d.ts.map +1 -1
  183. package/dist/elevator/panel.js +41 -18
  184. package/dist/eyebrow-vent/panel.d.ts.map +1 -1
  185. package/dist/eyebrow-vent/panel.js +16 -6
  186. package/dist/fence/drafting.d.ts +2 -3
  187. package/dist/fence/drafting.d.ts.map +1 -1
  188. package/dist/fence/drafting.js +2 -3
  189. package/dist/fence/inspector-editors.d.ts.map +1 -1
  190. package/dist/fence/inspector-editors.js +64 -21
  191. package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
  192. package/dist/fence/move-endpoint-tool.js +11 -2
  193. package/dist/fence/system.d.ts.map +1 -1
  194. package/dist/fence/system.js +13 -0
  195. package/dist/fence-feature/actions.d.ts.map +1 -1
  196. package/dist/fence-feature/actions.js +5 -2
  197. package/dist/fence-feature/inspector.d.ts.map +1 -1
  198. package/dist/fence-feature/inspector.js +150 -34
  199. package/dist/fence-feature/move-session.d.ts +1 -1
  200. package/dist/floor-opening/floorplan.d.ts +29 -6
  201. package/dist/floor-opening/floorplan.d.ts.map +1 -1
  202. package/dist/floor-opening/floorplan.js +172 -14
  203. package/dist/gutter/downspouts-panel.d.ts.map +1 -1
  204. package/dist/gutter/downspouts-panel.js +14 -2
  205. package/dist/hvac-equipment/tool.d.ts.map +1 -1
  206. package/dist/hvac-equipment/tool.js +3 -2
  207. package/dist/i18n/definition-messages.d.ts +5 -0
  208. package/dist/i18n/definition-messages.d.ts.map +1 -0
  209. package/dist/i18n/definition-messages.js +771 -0
  210. package/dist/index.d.ts +4 -1
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +6 -1
  213. package/dist/item/authored-params.d.ts.map +1 -1
  214. package/dist/item/authored-params.js +19 -4
  215. package/dist/item/floorplan.d.ts +1 -1
  216. package/dist/item/floorplan.d.ts.map +1 -1
  217. package/dist/item/panel.d.ts.map +1 -1
  218. package/dist/item/panel.js +9 -7
  219. package/dist/liquid-line/tool.d.ts.map +1 -1
  220. package/dist/liquid-line/tool.js +10 -3
  221. package/dist/measurement/tool.d.ts +1 -1
  222. package/dist/measurement/tool.d.ts.map +1 -1
  223. package/dist/measurement/tool.js +8 -8
  224. package/dist/pipe-fitting/tool.d.ts.map +1 -1
  225. package/dist/pipe-fitting/tool.js +3 -2
  226. package/dist/pipe-trap/tool.d.ts.map +1 -1
  227. package/dist/pipe-trap/tool.js +7 -2
  228. package/dist/procedural-item/renderer.d.ts.map +1 -1
  229. package/dist/procedural-item/renderer.js +8 -1
  230. package/dist/ridge-vent/panel.d.ts.map +1 -1
  231. package/dist/ridge-vent/panel.js +22 -9
  232. package/dist/roof/barrel-panel.d.ts.map +1 -1
  233. package/dist/roof/barrel-panel.js +7 -3
  234. package/dist/roof/definition.d.ts.map +1 -1
  235. package/dist/roof/definition.js +33 -3
  236. package/dist/roof/floorplan-overrides.d.ts +22 -0
  237. package/dist/roof/floorplan-overrides.d.ts.map +1 -0
  238. package/dist/roof/floorplan-overrides.js +46 -0
  239. package/dist/roof/floorplan-tool.d.ts +9 -0
  240. package/dist/roof/floorplan-tool.d.ts.map +1 -0
  241. package/dist/roof/floorplan-tool.js +168 -0
  242. package/dist/roof/floorplan.d.ts.map +1 -1
  243. package/dist/roof/floorplan.js +131 -41
  244. package/dist/roof/glazing-controls.d.ts +2 -1
  245. package/dist/roof/glazing-controls.d.ts.map +1 -1
  246. package/dist/roof/glazing-controls.js +51 -13
  247. package/dist/roof/glazing-panel-editor.d.ts.map +1 -1
  248. package/dist/roof/glazing-panel-editor.js +40 -13
  249. package/dist/roof/glazing-panel.d.ts.map +1 -1
  250. package/dist/roof/glazing-panel.js +73 -9
  251. package/dist/roof/paint.d.ts +19 -0
  252. package/dist/roof/paint.d.ts.map +1 -0
  253. package/dist/roof/paint.js +158 -0
  254. package/dist/roof/panel.d.ts.map +1 -1
  255. package/dist/roof/panel.js +90 -22
  256. package/dist/roof/renderer.d.ts.map +1 -1
  257. package/dist/roof/renderer.js +13 -2
  258. package/dist/roof/roof-footprint-source.d.ts +17 -0
  259. package/dist/roof/roof-footprint-source.d.ts.map +1 -1
  260. package/dist/roof/roof-footprint-source.js +14 -0
  261. package/dist/roof/roof-footprint.d.ts +36 -2
  262. package/dist/roof/roof-footprint.d.ts.map +1 -1
  263. package/dist/roof/roof-footprint.js +124 -2
  264. package/dist/roof/roof-materials.d.ts.map +1 -1
  265. package/dist/roof/roof-materials.js +10 -1
  266. package/dist/roof/roof-placement-mode.d.ts +0 -2
  267. package/dist/roof/roof-placement-mode.d.ts.map +1 -1
  268. package/dist/roof/roof-placement-mode.js +8 -6
  269. package/dist/roof/roof-plan-creases.d.ts +50 -0
  270. package/dist/roof/roof-plan-creases.d.ts.map +1 -0
  271. package/dist/roof/roof-plan-creases.js +194 -0
  272. package/dist/roof/roof-ridge-mode.d.ts +20 -0
  273. package/dist/roof/roof-ridge-mode.d.ts.map +1 -0
  274. package/dist/roof/roof-ridge-mode.js +16 -0
  275. package/dist/roof/tool.d.ts +17 -4
  276. package/dist/roof/tool.d.ts.map +1 -1
  277. package/dist/roof/tool.js +211 -113
  278. package/dist/roof/wall-catch.d.ts +106 -0
  279. package/dist/roof/wall-catch.d.ts.map +1 -0
  280. package/dist/roof/wall-catch.js +267 -0
  281. package/dist/roof-segment/build-up-section.d.ts +9 -0
  282. package/dist/roof-segment/build-up-section.d.ts.map +1 -0
  283. package/dist/roof-segment/build-up-section.js +191 -0
  284. package/dist/roof-segment/definition.d.ts.map +1 -1
  285. package/dist/roof-segment/definition.js +50 -5
  286. package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
  287. package/dist/roof-segment/floorplan-affordances.js +68 -19
  288. package/dist/roof-segment/floorplan.d.ts.map +1 -1
  289. package/dist/roof-segment/floorplan.js +16 -12
  290. package/dist/roof-segment/paint.d.ts +3 -1
  291. package/dist/roof-segment/paint.d.ts.map +1 -1
  292. package/dist/roof-segment/paint.js +43 -2
  293. package/dist/roof-segment/panel-model.d.ts +23 -0
  294. package/dist/roof-segment/panel-model.d.ts.map +1 -0
  295. package/dist/roof-segment/panel-model.js +64 -0
  296. package/dist/roof-segment/panel.d.ts.map +1 -1
  297. package/dist/roof-segment/panel.js +96 -14
  298. package/dist/roof-segment/parametrics.d.ts.map +1 -1
  299. package/dist/roof-segment/parametrics.js +4 -0
  300. package/dist/roof-segment/renderer.d.ts.map +1 -1
  301. package/dist/roof-segment/renderer.js +26 -5
  302. package/dist/separator/definition.d.ts.map +1 -1
  303. package/dist/separator/definition.js +10 -12
  304. package/dist/separator/floorplan-affordances.d.ts +9 -0
  305. package/dist/separator/floorplan-affordances.d.ts.map +1 -0
  306. package/dist/separator/floorplan-affordances.js +23 -0
  307. package/dist/separator/floorplan.d.ts +9 -0
  308. package/dist/separator/floorplan.d.ts.map +1 -0
  309. package/dist/separator/floorplan.js +54 -0
  310. package/dist/separator/renderer.d.ts +4 -0
  311. package/dist/separator/renderer.d.ts.map +1 -1
  312. package/dist/separator/renderer.js +21 -6
  313. package/dist/separator/selection.d.ts +10 -0
  314. package/dist/separator/selection.d.ts.map +1 -0
  315. package/dist/separator/selection.js +35 -0
  316. package/dist/shared/build-up-controls.d.ts +88 -0
  317. package/dist/shared/build-up-controls.d.ts.map +1 -0
  318. package/dist/shared/build-up-controls.js +139 -0
  319. package/dist/shared/curtain-opening-limits.d.ts.map +1 -1
  320. package/dist/shared/curtain-opening-limits.js +44 -14
  321. package/dist/shared/item-interaction-actions.d.ts.map +1 -1
  322. package/dist/shared/item-interaction-actions.js +11 -2
  323. package/dist/shared/layer-thickness.d.ts +2 -0
  324. package/dist/shared/layer-thickness.d.ts.map +1 -0
  325. package/dist/shared/layer-thickness.js +3 -0
  326. package/dist/shared/move-roof-tool.d.ts.map +1 -1
  327. package/dist/shared/move-roof-tool.js +100 -5
  328. package/dist/shared/node-batch/batchable.d.ts +2 -0
  329. package/dist/shared/node-batch/batchable.d.ts.map +1 -1
  330. package/dist/shared/node-batch/batchable.js +4 -0
  331. package/dist/shared/node-batch/candidates.d.ts +21 -5
  332. package/dist/shared/node-batch/candidates.d.ts.map +1 -1
  333. package/dist/shared/node-batch/candidates.js +85 -50
  334. package/dist/shared/node-batch/system.d.ts.map +1 -1
  335. package/dist/shared/node-batch/system.js +24 -15
  336. package/dist/shared/opening-casing-move.d.ts +16 -0
  337. package/dist/shared/opening-casing-move.d.ts.map +1 -0
  338. package/dist/shared/opening-casing-move.js +33 -0
  339. package/dist/shared/opening-casing-section.d.ts +15 -0
  340. package/dist/shared/opening-casing-section.d.ts.map +1 -0
  341. package/dist/shared/opening-casing-section.js +38 -0
  342. package/dist/shared/opening-casing.d.ts +26 -0
  343. package/dist/shared/opening-casing.d.ts.map +1 -0
  344. package/dist/shared/opening-casing.js +80 -0
  345. package/dist/shared/opening-depth-position.d.ts +13 -0
  346. package/dist/shared/opening-depth-position.d.ts.map +1 -0
  347. package/dist/shared/opening-depth-position.js +34 -0
  348. package/dist/shared/opening-documentation.d.ts.map +1 -1
  349. package/dist/shared/opening-documentation.js +17 -8
  350. package/dist/shared/opening-guides-runtime.d.ts +2 -1
  351. package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
  352. package/dist/shared/opening-guides-runtime.js +11 -7
  353. package/dist/shared/opening-labels.d.ts +11 -0
  354. package/dist/shared/opening-labels.d.ts.map +1 -0
  355. package/dist/shared/opening-labels.js +46 -0
  356. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  357. package/dist/shared/opening-placement-dimensions.js +11 -9
  358. package/dist/shared/opening-plane-offset.d.ts +4 -3
  359. package/dist/shared/opening-plane-offset.d.ts.map +1 -1
  360. package/dist/shared/opening-plane-offset.js +7 -4
  361. package/dist/shared/opening-swap.d.ts +8 -0
  362. package/dist/shared/opening-swap.d.ts.map +1 -0
  363. package/dist/shared/opening-swap.js +18 -0
  364. package/dist/shared/polygon-vertex-affordance.d.ts +19 -0
  365. package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
  366. package/dist/shared/polygon-vertex-affordance.js +65 -6
  367. package/dist/shared/roof-opening-host.d.ts +2 -1
  368. package/dist/shared/roof-opening-host.d.ts.map +1 -1
  369. package/dist/shared/roof-opening-host.js +14 -5
  370. package/dist/shared/roof-wall-opening-cut.d.ts.map +1 -1
  371. package/dist/shared/roof-wall-opening-cut.js +14 -6
  372. package/dist/shared/roof-wall-opening-placement.d.ts +2 -1
  373. package/dist/shared/roof-wall-opening-placement.d.ts.map +1 -1
  374. package/dist/shared/roof-wall-opening-placement.js +6 -4
  375. package/dist/shared/run-hanger-inspector.d.ts.map +1 -1
  376. package/dist/shared/run-hanger-inspector.js +39 -5
  377. package/dist/shared/system-check-panel.d.ts.map +1 -1
  378. package/dist/shared/system-check-panel.js +94 -15
  379. package/dist/shared/wall-attach-target.d.ts.map +1 -1
  380. package/dist/shared/wall-attach-target.js +6 -3
  381. package/dist/shelf/definition.d.ts.map +1 -1
  382. package/dist/shelf/definition.js +2 -0
  383. package/dist/site/ground-hole.d.ts +3 -3
  384. package/dist/site/ground-hole.js +3 -3
  385. package/dist/site/ground-veil.d.ts +5 -12
  386. package/dist/site/ground-veil.d.ts.map +1 -1
  387. package/dist/site/ground-veil.js +9 -33
  388. package/dist/site/panel.d.ts.map +1 -1
  389. package/dist/site/panel.js +52 -12
  390. package/dist/site/renderer.d.ts.map +1 -1
  391. package/dist/site/renderer.js +52 -23
  392. package/dist/skylight/panel.d.ts.map +1 -1
  393. package/dist/skylight/panel.js +49 -19
  394. package/dist/slab/deck-geometry.d.ts +28 -0
  395. package/dist/slab/deck-geometry.d.ts.map +1 -0
  396. package/dist/slab/deck-geometry.js +320 -0
  397. package/dist/slab/definition.d.ts +2 -1
  398. package/dist/slab/definition.d.ts.map +1 -1
  399. package/dist/slab/definition.js +6 -1
  400. package/dist/slab/dependency-tracker.d.ts.map +1 -1
  401. package/dist/slab/dependency-tracker.js +3 -0
  402. package/dist/slab/floorplan-affordances.d.ts +500 -0
  403. package/dist/slab/floorplan-affordances.d.ts.map +1 -1
  404. package/dist/slab/geometry.d.ts.map +1 -1
  405. package/dist/slab/geometry.js +46 -9
  406. package/dist/slab/panel.d.ts.map +1 -1
  407. package/dist/slab/panel.js +97 -21
  408. package/dist/slab/renderer.d.ts +11 -0
  409. package/dist/slab/renderer.d.ts.map +1 -0
  410. package/dist/slab/renderer.js +19 -0
  411. package/dist/slab/system.d.ts.map +1 -1
  412. package/dist/slab/system.js +12 -1
  413. package/dist/solar-panel/panel.d.ts.map +1 -1
  414. package/dist/solar-panel/panel.js +49 -14
  415. package/dist/stair/construction-controls.d.ts +3 -1
  416. package/dist/stair/construction-controls.d.ts.map +1 -1
  417. package/dist/stair/construction-controls.js +75 -12
  418. package/dist/stair/paint.d.ts +6 -0
  419. package/dist/stair/paint.d.ts.map +1 -1
  420. package/dist/stair/panel.d.ts.map +1 -1
  421. package/dist/stair/panel.js +243 -51
  422. package/dist/stair/parametrics.d.ts.map +1 -1
  423. package/dist/stair/parametrics.js +7 -0
  424. package/dist/stair/placement-defaults.d.ts +18 -0
  425. package/dist/stair/placement-defaults.d.ts.map +1 -0
  426. package/dist/stair/placement-defaults.js +27 -0
  427. package/dist/stair/railing-controls.d.ts.map +1 -1
  428. package/dist/stair/railing-controls.js +78 -18
  429. package/dist/stair/renderer.d.ts.map +1 -1
  430. package/dist/stair/renderer.js +16 -10
  431. package/dist/stair/structure-controls.d.ts +18 -0
  432. package/dist/stair/structure-controls.d.ts.map +1 -0
  433. package/dist/stair/structure-controls.js +275 -0
  434. package/dist/stair/tool.d.ts.map +1 -1
  435. package/dist/stair/tool.js +13 -9
  436. package/dist/stair/use-stair-render-data.d.ts +41 -0
  437. package/dist/stair/use-stair-render-data.d.ts.map +1 -1
  438. package/dist/stair-segment/panel.d.ts.map +1 -1
  439. package/dist/stair-segment/panel.js +65 -18
  440. package/dist/turbine-vent/panel.d.ts.map +1 -1
  441. package/dist/turbine-vent/panel.js +14 -5
  442. package/dist/unit/unit-panel.d.ts.map +1 -1
  443. package/dist/unit/unit-panel.js +28 -12
  444. package/dist/wall/actions.d.ts +1 -1
  445. package/dist/wall/actions.d.ts.map +1 -1
  446. package/dist/wall/actions.js +17 -13
  447. package/dist/wall/construction-dimensions.d.ts +6 -0
  448. package/dist/wall/construction-dimensions.d.ts.map +1 -1
  449. package/dist/wall/construction-dimensions.js +8 -0
  450. package/dist/wall/contextual-dimensions.d.ts +6 -0
  451. package/dist/wall/contextual-dimensions.d.ts.map +1 -1
  452. package/dist/wall/contextual-dimensions.js +104 -17
  453. package/dist/wall/curtain-opening-frame.d.ts.map +1 -1
  454. package/dist/wall/curtain-opening-frame.js +6 -4
  455. package/dist/wall/curtain-wall-layout.d.ts +1 -1
  456. package/dist/wall/curtain-wall-layout.d.ts.map +1 -1
  457. package/dist/wall/curtain-wall-layout.js +6 -4
  458. package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
  459. package/dist/wall/curtain-wall-materials.js +8 -3
  460. package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
  461. package/dist/wall/curtain-wall-panel.js +241 -37
  462. package/dist/wall/curve-tool.d.ts.map +1 -1
  463. package/dist/wall/curve-tool.js +2 -3
  464. package/dist/wall/definition.d.ts.map +1 -1
  465. package/dist/wall/definition.js +20 -5
  466. package/dist/wall/floorplan-affordances.d.ts.map +1 -1
  467. package/dist/wall/floorplan-affordances.js +9 -6
  468. package/dist/wall/floorplan-move.d.ts.map +1 -1
  469. package/dist/wall/floorplan-move.js +66 -16
  470. package/dist/wall/floorplan.d.ts +4 -5
  471. package/dist/wall/floorplan.d.ts.map +1 -1
  472. package/dist/wall/floorplan.js +62 -46
  473. package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
  474. package/dist/wall/move-endpoint-tool.js +1 -0
  475. package/dist/wall/move-tool.d.ts.map +1 -1
  476. package/dist/wall/move-tool.js +77 -12
  477. package/dist/wall/paint.d.ts +2 -2
  478. package/dist/wall/paint.d.ts.map +1 -1
  479. package/dist/wall/paint.js +11 -4
  480. package/dist/wall/panel-model.d.ts +17 -2
  481. package/dist/wall/panel-model.d.ts.map +1 -1
  482. package/dist/wall/panel-model.js +158 -18
  483. package/dist/wall/panel.d.ts +8 -0
  484. package/dist/wall/panel.d.ts.map +1 -1
  485. package/dist/wall/panel.js +228 -156
  486. package/dist/wall/parametrics.d.ts +1 -1
  487. package/dist/wall/parametrics.d.ts.map +1 -1
  488. package/dist/wall/parametrics.js +14 -1
  489. package/dist/wall/railing-wall-adapter.d.ts +7 -0
  490. package/dist/wall/railing-wall-adapter.d.ts.map +1 -0
  491. package/dist/wall/railing-wall-adapter.js +38 -0
  492. package/dist/wall/railing-wall-floorplan.d.ts +8 -0
  493. package/dist/wall/railing-wall-floorplan.d.ts.map +1 -0
  494. package/dist/wall/railing-wall-floorplan.js +27 -0
  495. package/dist/wall/railing-wall-geometry.d.ts +12 -0
  496. package/dist/wall/railing-wall-geometry.d.ts.map +1 -0
  497. package/dist/wall/railing-wall-geometry.js +51 -0
  498. package/dist/wall/railing-wall-guard.d.ts +81 -0
  499. package/dist/wall/railing-wall-guard.d.ts.map +1 -0
  500. package/dist/wall/railing-wall-guard.js +435 -0
  501. package/dist/wall/railing-wall-materials.d.ts +11 -0
  502. package/dist/wall/railing-wall-materials.d.ts.map +1 -0
  503. package/dist/wall/railing-wall-materials.js +31 -0
  504. package/dist/wall/railing-wall-panel-model.d.ts +30 -0
  505. package/dist/wall/railing-wall-panel-model.d.ts.map +1 -0
  506. package/dist/wall/railing-wall-panel-model.js +117 -0
  507. package/dist/wall/railing-wall-panel.d.ts +17 -0
  508. package/dist/wall/railing-wall-panel.d.ts.map +1 -0
  509. package/dist/wall/railing-wall-panel.js +42 -0
  510. package/dist/wall/rectangle-command.d.ts +79 -1
  511. package/dist/wall/rectangle-command.d.ts.map +1 -1
  512. package/dist/wall/rectangle-tool.d.ts.map +1 -1
  513. package/dist/wall/rectangle-tool.js +2 -0
  514. package/dist/wall/renderer.d.ts.map +1 -1
  515. package/dist/wall/renderer.js +3 -1
  516. package/dist/wall/skirting-floor-gaps.d.ts +8 -0
  517. package/dist/wall/skirting-floor-gaps.d.ts.map +1 -0
  518. package/dist/wall/skirting-floor-gaps.js +36 -0
  519. package/dist/wall/system.d.ts +0 -14
  520. package/dist/wall/system.d.ts.map +1 -1
  521. package/dist/wall/system.js +6 -1
  522. package/dist/wall/tool.d.ts +16 -0
  523. package/dist/wall/tool.d.ts.map +1 -1
  524. package/dist/wall/tool.js +160 -47
  525. package/dist/wall/treatments.d.ts +3 -0
  526. package/dist/wall/treatments.d.ts.map +1 -1
  527. package/dist/wall/treatments.js +30 -7
  528. package/dist/window/actions.d.ts +7 -0
  529. package/dist/window/actions.d.ts.map +1 -0
  530. package/dist/window/actions.js +29 -0
  531. package/dist/window/definition.d.ts.map +1 -1
  532. package/dist/window/definition.js +11 -2
  533. package/dist/window/floorplan-move.d.ts.map +1 -1
  534. package/dist/window/floorplan-move.js +5 -0
  535. package/dist/window/floorplan.d.ts +2 -0
  536. package/dist/window/floorplan.d.ts.map +1 -1
  537. package/dist/window/floorplan.js +58 -1
  538. package/dist/window/mechanism.d.ts.map +1 -1
  539. package/dist/window/mechanism.js +21 -1
  540. package/dist/window/move-tool.d.ts.map +1 -1
  541. package/dist/window/move-tool.js +10 -3
  542. package/dist/window/paint.d.ts +2 -7
  543. package/dist/window/paint.d.ts.map +1 -1
  544. package/dist/window/paint.js +31 -3
  545. package/dist/window/panel.d.ts.map +1 -1
  546. package/dist/window/panel.js +311 -69
  547. package/dist/window/placement.d.ts.map +1 -1
  548. package/dist/window/placement.js +5 -1
  549. package/dist/window/swing.d.ts +13 -0
  550. package/dist/window/swing.d.ts.map +1 -0
  551. package/dist/window/swing.js +16 -0
  552. package/dist/window/tool.d.ts.map +1 -1
  553. package/dist/window/tool.js +19 -14
  554. package/dist/zone/floorplan-affordances.d.ts +136 -0
  555. package/dist/zone/floorplan-affordances.d.ts.map +1 -1
  556. package/dist/zone/quantities-panel.d.ts.map +1 -1
  557. package/dist/zone/quantities-panel.js +34 -9
  558. package/dist/zone/renderer.d.ts.map +1 -1
  559. package/dist/zone/renderer.js +9 -5
  560. package/package.json +14 -14
  561. package/dist/site/generic-foundation-geometry.d.ts +0 -16
  562. package/dist/site/generic-foundation-geometry.d.ts.map +0 -1
  563. package/dist/site/generic-foundation-geometry.js +0 -75
  564. package/dist/site/generic-foundation.d.ts +0 -4
  565. package/dist/site/generic-foundation.d.ts.map +0 -1
  566. package/dist/site/generic-foundation.js +0 -91
@@ -1,37 +1,89 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { usePascalI18n } from '@pascal-app/core';
3
4
  import { SegmentedControl, SliderControl, ToggleControl } from '@pascal-app/editor';
4
5
  import { ArrowDown, ArrowUp, FlipHorizontal2, Minus, Plus, Trash } from 'lucide-react';
5
6
  import { COOKTOP_DEFAULT_GAS_LAYOUT, COOKTOP_DEFAULT_INDUCTION_LAYOUT, compartmentCooktopBurnersOn, compartmentCooktopElementCount, compartmentCooktopLayout, compartmentCooktopShowGrate, compartmentDoorType, compartmentDrawerCount, compartmentPullOutPantryRackStyle, compartmentShelfCount, compartmentSinkLayout, FRIDGE_COLUMN_HEIGHT, isCooktopCompartmentType, isFridgeCompartmentType, isHoodCompartmentType, newCabinetCompartment, patchCompartment, } from './stack.js';
6
7
  const COMPARTMENT_TYPE_OPTIONS = [
7
- { value: 'shelf', label: 'Shelf' },
8
- { value: 'drawer', label: 'Drawer' },
9
- { value: 'door', label: 'Door' },
10
- { value: 'oven', label: 'Oven' },
11
- { value: 'microwave', label: 'Micro' },
12
- { value: 'dishwasher', label: 'Washer' },
13
- { value: 'cooktop', label: 'Hob' },
14
- { value: 'sink', label: 'Sink' },
15
- { value: 'pull-out-pantry', label: 'Pullout' },
8
+ {
9
+ value: 'shelf',
10
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.shelf', message: 'Shelf' },
11
+ },
12
+ {
13
+ value: 'drawer',
14
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.drawer', message: 'Drawer' },
15
+ },
16
+ { value: 'door', label: /* i18n */ { id: 'node.cabinet.compartmentCard.door', message: 'Door' } },
17
+ { value: 'oven', label: /* i18n */ { id: 'node.cabinet.compartmentCard.oven', message: 'Oven' } },
18
+ {
19
+ value: 'microwave',
20
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.micro', message: 'Micro' },
21
+ },
22
+ {
23
+ value: 'dishwasher',
24
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.washer', message: 'Washer' },
25
+ },
26
+ {
27
+ value: 'cooktop',
28
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.hob', message: 'Hob' },
29
+ },
30
+ { value: 'sink', label: /* i18n */ { id: 'node.cabinet.compartmentCard.sink', message: 'Sink' } },
31
+ {
32
+ value: 'pull-out-pantry',
33
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.pullout', message: 'Pullout' },
34
+ },
16
35
  ];
17
- const FRIDGE_TYPE_OPTION = { value: 'fridge', label: 'Fridge' };
18
- const HOOD_TYPE_OPTION = { value: 'hood', label: 'Chimney' };
36
+ const FRIDGE_TYPE_OPTION = {
37
+ value: 'fridge',
38
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.fridge', message: 'Fridge' },
39
+ };
40
+ const HOOD_TYPE_OPTION = {
41
+ value: 'hood',
42
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.chimney', message: 'Chimney' },
43
+ };
19
44
  const COMPARTMENT_TYPE_CONTROL_OPTIONS = [...COMPARTMENT_TYPE_OPTIONS, FRIDGE_TYPE_OPTION];
20
45
  const WALL_COMPARTMENT_TYPE_CONTROL_OPTIONS = [
21
- { value: 'shelf', label: 'Shelf' },
22
- { value: 'drawer', label: 'Drawer' },
23
- { value: 'door', label: 'Door' },
46
+ {
47
+ value: 'shelf',
48
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.shelf', message: 'Shelf' },
49
+ },
50
+ {
51
+ value: 'drawer',
52
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.drawer', message: 'Drawer' },
53
+ },
54
+ { value: 'door', label: /* i18n */ { id: 'node.cabinet.compartmentCard.door', message: 'Door' } },
24
55
  HOOD_TYPE_OPTION,
25
56
  ];
26
57
  const FRIDGE_STYLE_OPTIONS = [
27
- { value: 'fridge-single', label: 'Single' },
28
- { value: 'fridge-double', label: 'Double' },
29
- { value: 'fridge-top-freezer', label: 'Top Freezer' },
30
- { value: 'fridge-bottom-freezer', label: 'Bottom Freezer' },
58
+ {
59
+ value: 'fridge-single',
60
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.single', message: 'Single' },
61
+ },
62
+ {
63
+ value: 'fridge-double',
64
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.double', message: 'Double' },
65
+ },
66
+ {
67
+ value: 'fridge-top-freezer',
68
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.topFreezer', message: 'Top Freezer' },
69
+ },
70
+ {
71
+ value: 'fridge-bottom-freezer',
72
+ label: /* i18n */ {
73
+ id: 'node.cabinet.compartmentCard.bottomFreezer',
74
+ message: 'Bottom Freezer',
75
+ },
76
+ },
31
77
  ];
32
78
  const COOKTOP_STYLE_OPTIONS = [
33
- { value: 'cooktop-gas', label: 'Gas' },
34
- { value: 'cooktop-induction', label: 'Induction' },
79
+ {
80
+ value: 'cooktop-gas',
81
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.gas', message: 'Gas' },
82
+ },
83
+ {
84
+ value: 'cooktop-induction',
85
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.induction', message: 'Induction' },
86
+ },
35
87
  ];
36
88
  const GAS_COOKTOP_LAYOUT_OPTIONS = [
37
89
  { value: 'gas-2burner', label: '2' },
@@ -44,27 +96,58 @@ const INDUCTION_COOKTOP_LAYOUT_OPTIONS = [
44
96
  { value: 'induction-4zone', label: '4' },
45
97
  ];
46
98
  const SINK_LAYOUT_OPTIONS = [
47
- { value: 'single', label: 'Single' },
48
- { value: 'double', label: 'Double' },
99
+ {
100
+ value: 'single',
101
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.single', message: 'Single' },
102
+ },
103
+ {
104
+ value: 'double',
105
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.double', message: 'Double' },
106
+ },
49
107
  { value: 'double-offset', label: '60/40' },
50
108
  ];
51
109
  const PULL_OUT_PANTRY_RACK_STYLE_OPTIONS = [
52
- { value: 'wire', label: 'Wire' },
53
- { value: 'tray', label: 'Tray' },
54
- { value: 'glass', label: 'Glass' },
110
+ { value: 'wire', label: /* i18n */ { id: 'node.cabinet.compartmentCard.wire', message: 'Wire' } },
111
+ { value: 'tray', label: /* i18n */ { id: 'node.cabinet.compartmentCard.tray', message: 'Tray' } },
112
+ {
113
+ value: 'glass',
114
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.glass', message: 'Glass' },
115
+ },
55
116
  ];
56
117
  const DOOR_TYPE_OPTIONS = [
57
- { value: 'single-left', label: 'Left' },
58
- { value: 'single-right', label: 'Right' },
59
- { value: 'double', label: 'Double' },
60
- { value: 'glass', label: 'Glass' },
118
+ {
119
+ value: 'single-left',
120
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.left', message: 'Left' },
121
+ },
122
+ {
123
+ value: 'single-right',
124
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.right', message: 'Right' },
125
+ },
126
+ {
127
+ value: 'double',
128
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.double', message: 'Double' },
129
+ },
130
+ {
131
+ value: 'glass',
132
+ label: /* i18n */ { id: 'node.cabinet.compartmentCard.glass', message: 'Glass' },
133
+ },
61
134
  ];
62
135
  const ICON_BUTTON_CLASS = 'flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border/40 bg-black/4 dark:bg-[#2C2C2E] text-muted-foreground transition-colors hover:bg-black/8 dark:hover:bg-[#343437] hover:text-foreground disabled:opacity-30 disabled:hover:bg-black/4 dark:disabled:hover:bg-[#2C2C2E] disabled:hover:text-muted-foreground';
63
136
  const STEPPER_BUTTON_CLASS = 'flex h-8 w-8 items-center justify-center rounded-md border border-border/40 bg-black/4 dark:bg-[#2C2C2E] text-muted-foreground transition-colors hover:bg-black/8 dark:hover:bg-[#343437] hover:text-foreground';
64
137
  function Stepper({ label, value, onChange, min, max, }) {
65
- return (_jsxs("div", { className: "flex items-center justify-between rounded-lg border border-border/30 bg-black/3 dark:bg-black/10 px-2 py-1.5", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: label }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("button", { className: STEPPER_BUTTON_CLASS, onClick: () => onChange(Math.max(min, value - 1)), type: "button", children: _jsx(Minus, { className: "h-3.5 w-3.5" }) }), _jsx("span", { className: "min-w-7 text-center text-xs font-medium tabular-nums text-foreground", children: value }), _jsx("button", { className: STEPPER_BUTTON_CLASS, onClick: () => onChange(Math.min(max, value + 1)), type: "button", children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })] })] }));
138
+ const i18n = usePascalI18n();
139
+ return (_jsxs("div", { className: "flex items-center justify-between rounded-lg border border-border/30 bg-black/3 dark:bg-black/10 px-2 py-1.5", children: [_jsx("span", { className: "text-[11px] font-medium text-muted-foreground", children: label }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("button", { "aria-label": i18n._({
140
+ id: 'node.cabinet.compartmentCard.decrease',
141
+ message: 'Decrease {label}',
142
+ values: { label },
143
+ }), className: STEPPER_BUTTON_CLASS, onClick: () => onChange(Math.max(min, value - 1)), type: "button", children: _jsx(Minus, { className: "h-3.5 w-3.5" }) }), _jsx("span", { className: "min-w-7 text-center text-xs font-medium tabular-nums text-foreground", children: value }), _jsx("button", { "aria-label": i18n._({
144
+ id: 'node.cabinet.compartmentCard.increase',
145
+ message: 'Increase {label}',
146
+ values: { label },
147
+ }), className: STEPPER_BUTTON_CLASS, onClick: () => onChange(Math.min(max, value + 1)), type: "button", children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })] })] }));
66
148
  }
67
149
  function CompartmentTypeControl({ value, onChange, includeHood = false, wallCabinet = false, }) {
150
+ const i18n = usePascalI18n();
68
151
  const options = wallCabinet
69
152
  ? WALL_COMPARTMENT_TYPE_CONTROL_OPTIONS
70
153
  : includeHood
@@ -77,19 +160,26 @@ function CompartmentTypeControl({ value, onChange, includeHood = false, wallCabi
77
160
  isSelected
78
161
  ? 'bg-white dark:bg-[#3e3e3e] text-foreground shadow-sm ring-1 ring-border/50'
79
162
  : 'text-muted-foreground hover:bg-black/4 dark:hover:bg-white/5 hover:text-foreground',
80
- ].join(' '), onClick: () => onChange(option.value), type: "button", children: option.label }, option.value));
163
+ ].join(' '), onClick: () => onChange(option.value), type: "button", children: i18n._(option.label) }, option.value));
81
164
  }) }));
82
165
  }
83
166
  export function CompartmentCard({ compartment, index, displayIndex, total, carcassHeight, resolvedHeight, width, onReplace, onResizeHeight, onRemove, onMove, allowHood = false, wallCabinet = false, }) {
167
+ const i18n = usePascalI18n();
84
168
  const type = compartment.type;
85
169
  const isFridge = isFridgeCompartmentType(type);
86
170
  const isHood = isHoodCompartmentType(type);
87
171
  const isCooktop = isCooktopCompartmentType(type);
88
172
  return (_jsxs("div", { className: "rounded-lg border border-border/40 bg-black/3 dark:bg-[#252527] p-2", children: [_jsxs("div", { className: "flex items-center justify-between pb-1.5", children: [_jsx("span", { className: "text-[10px] uppercase tracking-wide text-muted-foreground", children: displayIndex === 0
89
- ? 'Top'
173
+ ? i18n._({ id: 'node.cabinet.compartmentCard.top', message: 'Top' })
90
174
  : displayIndex === total - 1
91
- ? 'Bottom'
92
- : `#${total - displayIndex}` }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { className: ICON_BUTTON_CLASS, disabled: index === total - 1, onClick: () => onMove(1), type: "button", children: _jsx(ArrowUp, { className: "h-3.5 w-3.5" }) }), _jsx("button", { className: ICON_BUTTON_CLASS, disabled: index === 0, onClick: () => onMove(-1), type: "button", children: _jsx(ArrowDown, { className: "h-3.5 w-3.5" }) }), _jsx("button", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-red-500/20 bg-red-500/8 text-red-700 dark:text-red-300 transition-colors hover:bg-red-500/15 hover:text-red-700 dark:hover:text-red-200 disabled:opacity-30 disabled:hover:bg-red-500/8", disabled: total <= 1, onClick: onRemove, type: "button", children: _jsx(Trash, { className: "h-3.5 w-3.5" }) })] })] }), _jsxs("div", { className: "pb-2", children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: "Type" }), _jsx(CompartmentTypeControl, { includeHood: allowHood || isHood, wallCabinet: wallCabinet, onChange: (value) => {
175
+ ? i18n._({ id: 'node.cabinet.compartmentCard.bottom', message: 'Bottom' })
176
+ : `#${total - displayIndex}` }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { "aria-label": i18n._({ id: 'node.cabinet.compartmentCard.moveUp', message: 'Move up' }), className: ICON_BUTTON_CLASS, disabled: index === total - 1, onClick: () => onMove(1), type: "button", children: _jsx(ArrowUp, { className: "h-3.5 w-3.5" }) }), _jsx("button", { "aria-label": i18n._({
177
+ id: 'node.cabinet.compartmentCard.moveDown',
178
+ message: 'Move down',
179
+ }), className: ICON_BUTTON_CLASS, disabled: index === 0, onClick: () => onMove(-1), type: "button", children: _jsx(ArrowDown, { className: "h-3.5 w-3.5" }) }), _jsx("button", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-red-500/20 bg-red-500/8 text-red-700 dark:text-red-300 transition-colors hover:bg-red-500/15 hover:text-red-700 dark:hover:text-red-200 disabled:opacity-30 disabled:hover:bg-red-500/8", "aria-label": i18n._({
180
+ id: 'node.cabinet.compartmentCard.removeCompartment',
181
+ message: 'Remove compartment',
182
+ }), disabled: total <= 1, onClick: onRemove, type: "button", children: _jsx(Trash, { className: "h-3.5 w-3.5" }) })] })] }), _jsxs("div", { className: "pb-2", children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.type', message: 'Type' }) }), _jsx(CompartmentTypeControl, { includeHood: allowHood || isHood, wallCabinet: wallCabinet, onChange: (value) => {
93
183
  const nextType = value === 'fridge'
94
184
  ? 'fridge-single'
95
185
  : value === 'hood'
@@ -101,9 +191,9 @@ export function CompartmentCard({ compartment, index, displayIndex, total, carca
101
191
  ...newCabinetCompartment(nextType),
102
192
  id: compartment.id,
103
193
  });
104
- }, value: isFridge ? 'fridge' : isHood ? 'hood' : isCooktop ? 'cooktop' : type })] }), total > 1 && !isHood && !isCooktop && type !== 'sink' && (_jsx("div", { className: "pb-2", children: _jsx(SliderControl, { label: "Height", max: carcassHeight, min: 0.1, onChange: onResizeHeight, precision: 2, step: 0.01, unit: "m", value: resolvedHeight }) })), type === 'shelf' && (_jsx(Stepper, { label: "Shelves", max: 8, min: 0, onChange: (value) => onReplace(patchCompartment(compartment, { shelfCount: value })), value: compartmentShelfCount(compartment) })), type === 'drawer' && (_jsx(Stepper, { label: "Drawers", max: 6, min: 1, onChange: (value) => onReplace(patchCompartment(compartment, { drawerCount: value })), value: compartmentDrawerCount(compartment) })), type === 'door' && (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: "Style" }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { doorType: value })), options: DOOR_TYPE_OPTIONS.map((option) => ({
194
+ }, value: isFridge ? 'fridge' : isHood ? 'hood' : isCooktop ? 'cooktop' : type })] }), total > 1 && !isHood && !isCooktop && type !== 'sink' && (_jsx("div", { className: "pb-2", children: _jsx(SliderControl, { label: i18n._({ id: 'node.cabinet.compartmentCard.height', message: 'Height' }), max: carcassHeight, min: 0.1, onChange: onResizeHeight, precision: 2, step: 0.01, unit: "m", value: resolvedHeight }) })), type === 'shelf' && (_jsx(Stepper, { label: i18n._({ id: 'node.cabinet.compartmentCard.shelves', message: 'Shelves' }), max: 8, min: 0, onChange: (value) => onReplace(patchCompartment(compartment, { shelfCount: value })), value: compartmentShelfCount(compartment) })), type === 'drawer' && (_jsx(Stepper, { label: i18n._({ id: 'node.cabinet.compartmentCard.drawers', message: 'Drawers' }), max: 6, min: 1, onChange: (value) => onReplace(patchCompartment(compartment, { drawerCount: value })), value: compartmentDrawerCount(compartment) })), type === 'door' && (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.style', message: 'Style' }) }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { doorType: value })), options: DOOR_TYPE_OPTIONS.map((option) => ({
105
195
  value: option.value,
106
- label: option.label,
196
+ label: i18n._(option.label),
107
197
  })), value: compartmentDoorType(compartment, width) })] }), _jsxs("button", { className: "flex min-h-8 w-full items-center justify-center gap-1.5 rounded-md border border-border/40 bg-black/4 dark:bg-[#2C2C2E] px-3 py-1.5 text-xs leading-4 font-medium text-foreground transition-colors hover:bg-black/8 dark:hover:bg-[#343437] disabled:cursor-not-allowed disabled:opacity-40", disabled: compartmentDoorType(compartment, width) !== 'single-left' &&
108
198
  compartmentDoorType(compartment, width) !== 'single-right', onClick: () => {
109
199
  const doorType = compartmentDoorType(compartment, width);
@@ -112,13 +202,19 @@ export function CompartmentCard({ compartment, index, displayIndex, total, carca
112
202
  doorType: doorType === 'single-left' ? 'single-right' : 'single-left',
113
203
  }));
114
204
  }
115
- }, title: "Flip the door hinge to the opposite side", type: "button", children: [_jsx(FlipHorizontal2, { className: "h-3.5 w-3.5" }), "Flip hinge"] }), _jsx(Stepper, { label: "Shelves inside", max: 8, min: 0, onChange: (value) => onReplace(patchCompartment(compartment, { shelfCount: value })), value: compartmentShelfCount(compartment) })] })), isFridge && (_jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: "Style" }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, {
205
+ }, title: i18n._({
206
+ id: 'node.cabinet.compartmentCard.flipTheDoorHingeToThe',
207
+ message: 'Flip the door hinge to the opposite side',
208
+ }), type: "button", children: [_jsx(FlipHorizontal2, { className: "h-3.5 w-3.5" }), i18n._({ id: 'node.cabinet.compartmentCard.flipHinge', message: 'Flip hinge' })] }), _jsx(Stepper, { label: i18n._({
209
+ id: 'node.cabinet.compartmentCard.shelvesInside',
210
+ message: 'Shelves inside',
211
+ }), max: 8, min: 0, onChange: (value) => onReplace(patchCompartment(compartment, { shelfCount: value })), value: compartmentShelfCount(compartment) })] })), isFridge && (_jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.style', message: 'Style' }) }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, {
116
212
  type: value,
117
213
  height: compartment.height ?? FRIDGE_COLUMN_HEIGHT,
118
214
  })), options: FRIDGE_STYLE_OPTIONS.map((option) => ({
119
215
  value: option.value,
120
- label: option.label,
121
- })), value: type })] })), isHood && (_jsx("div", { className: "rounded-lg border border-border/30 bg-black/3 dark:bg-black/10 px-2 py-1.5 text-[11px] font-medium text-muted-foreground", children: "Chimney" })), isCooktop && (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: "Surface" }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, {
216
+ label: i18n._(option.label),
217
+ })), value: type })] })), isHood && (_jsx("div", { className: "rounded-lg border border-border/30 bg-black/3 dark:bg-black/10 px-2 py-1.5 text-[11px] font-medium text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.chimney', message: 'Chimney' }) })), isCooktop && (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.surface', message: 'Surface' }) }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, {
122
218
  type: value,
123
219
  cooktopLayout: value === 'cooktop-gas'
124
220
  ? COOKTOP_DEFAULT_GAS_LAYOUT
@@ -128,13 +224,13 @@ export function CompartmentCard({ compartment, index, displayIndex, total, carca
128
224
  cooktopShowGrate: compartmentCooktopShowGrate(compartment),
129
225
  })), options: COOKTOP_STYLE_OPTIONS.map((option) => ({
130
226
  value: option.value,
131
- label: option.label,
132
- })), value: type }), _jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: "Layout" }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { cooktopLayout: value })), options: (type === 'cooktop-gas'
227
+ label: i18n._(option.label),
228
+ })), value: type }), _jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.layout', message: 'Layout' }) }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { cooktopLayout: value })), options: (type === 'cooktop-gas'
133
229
  ? GAS_COOKTOP_LAYOUT_OPTIONS
134
230
  : INDUCTION_COOKTOP_LAYOUT_OPTIONS).map((option) => ({
135
231
  value: option.value,
136
232
  label: option.label,
137
- })), value: compartmentCooktopLayout(compartment, type) })] }), _jsx(ToggleControl, { checked: compartmentCooktopBurnersOn(compartment), label: "Burners on", onChange: (checked) => {
233
+ })), value: compartmentCooktopLayout(compartment, type) })] }), _jsx(ToggleControl, { checked: compartmentCooktopBurnersOn(compartment), label: i18n._({ id: 'node.cabinet.compartmentCard.burnersOn', message: 'Burners on' }), onChange: (checked) => {
138
234
  const count = compartmentCooktopElementCount(compartment, type);
139
235
  onReplace(patchCompartment(compartment, {
140
236
  cooktopBurnersOn: checked,
@@ -143,11 +239,11 @@ export function CompartmentCard({ compartment, index, displayIndex, total, carca
143
239
  : [],
144
240
  cooktopKnobProgress: Array.from({ length: count }, () => (checked ? 1 : 0)),
145
241
  }));
146
- } }), type === 'cooktop-gas' && (_jsx(ToggleControl, { checked: compartmentCooktopShowGrate(compartment), label: "Top grate", onChange: (checked) => onReplace(patchCompartment(compartment, { cooktopShowGrate: checked })) }))] })), type === 'sink' && (_jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: "Bowls" }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { sinkLayout: value })), options: SINK_LAYOUT_OPTIONS.map((option) => ({
242
+ } }), type === 'cooktop-gas' && (_jsx(ToggleControl, { checked: compartmentCooktopShowGrate(compartment), label: i18n._({ id: 'node.cabinet.compartmentCard.topGrate', message: 'Top grate' }), onChange: (checked) => onReplace(patchCompartment(compartment, { cooktopShowGrate: checked })) }))] })), type === 'sink' && (_jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.bowls', message: 'Bowls' }) }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { sinkLayout: value })), options: SINK_LAYOUT_OPTIONS.map((option) => ({
147
243
  value: option.value,
148
- label: option.label,
149
- })), value: compartmentSinkLayout(compartment) })] })), type === 'pull-out-pantry' && (_jsxs("div", { className: "space-y-2", children: [_jsx(Stepper, { label: "Baskets", max: 8, min: 2, onChange: (value) => onReplace(patchCompartment(compartment, { shelfCount: value })), value: compartmentShelfCount(compartment) }), _jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: "Rack" }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { pantryRackStyle: value })), options: PULL_OUT_PANTRY_RACK_STYLE_OPTIONS.map((option) => ({
244
+ label: typeof option.label === 'string' ? option.label : i18n._(option.label),
245
+ })), value: compartmentSinkLayout(compartment) })] })), type === 'pull-out-pantry' && (_jsxs("div", { className: "space-y-2", children: [_jsx(Stepper, { label: i18n._({ id: 'node.cabinet.compartmentCard.baskets', message: 'Baskets' }), max: 8, min: 2, onChange: (value) => onReplace(patchCompartment(compartment, { shelfCount: value })), value: compartmentShelfCount(compartment) }), _jsxs("div", { children: [_jsx("div", { className: "px-1 pb-1 text-[10px] uppercase tracking-wide text-muted-foreground", children: i18n._({ id: 'node.cabinet.compartmentCard.rack', message: 'Rack' }) }), _jsx(SegmentedControl, { onChange: (value) => onReplace(patchCompartment(compartment, { pantryRackStyle: value })), options: PULL_OUT_PANTRY_RACK_STYLE_OPTIONS.map((option) => ({
150
246
  value: option.value,
151
- label: option.label,
247
+ label: i18n._(option.label),
152
248
  })), value: compartmentPullOutPantryRackStyle(compartment) })] })] }))] }));
153
249
  }
@@ -74,6 +74,11 @@ export declare function getCabinetCountertopLayout(node: CabinetNode, ctx?: Geom
74
74
  url: string;
75
75
  repeat?: [number, number] | undefined;
76
76
  scale?: number | undefined;
77
+ offset?: [number, number] | undefined;
78
+ normalMap?: string | undefined;
79
+ normalScale?: number | undefined;
80
+ bumpMap?: string | undefined;
81
+ bumpScale?: number | undefined;
77
82
  } | undefined;
78
83
  } | undefined;
79
84
  materialPreset?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"countertop-layout.d.ts","sourceRoot":"","sources":["../../src/cabinet/countertop-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,oBAAoB,CAAA;AAIjE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAExE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8BvE,WAAW;iBACR,WAAW;cACd,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;;;IA4DvD"}
1
+ {"version":3,"file":"countertop-layout.d.ts","sourceRoot":"","sources":["../../src/cabinet/countertop-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,oBAAoB,CAAA;AAIjE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAExE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8BvE,WAAW;iBACR,WAAW;cACd,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;;;IA4DvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/cabinet/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAET,WAAW,IAAI,eAAe,EAG9B,oBAAoB,EAMpB,cAAc,EACd,QAAQ,EACT,MAAM,kBAAkB,CAAA;AA2DzB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAuKzD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,eAAe,EACrB,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAC3C,oBAAoB,EAAE,CAcxB;AAiKD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAA;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAC1C,mBAAmB,CAWrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAgD9B;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAexE;AAgvDD,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,OAAO,WAAW,CAkNhE,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,OAAO,iBAAiB,CA2K5E,CAAA"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/cabinet/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAET,WAAW,IAAI,eAAe,EAG9B,oBAAoB,EAMpB,cAAc,EACd,QAAQ,EACT,MAAM,kBAAkB,CAAA;AA4DzB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAuKzD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,eAAe,EACrB,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAC3C,oBAAoB,EAAE,CAcxB;AAiKD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAA;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAC1C,mBAAmB,CAWrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAgD9B;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAexE;AAgvDD,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,OAAO,WAAW,CAmNhE,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,OAAO,iBAAiB,CA4K5E,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { CABINET_METRIC_DEFAULTS, cabinetSlots, findLevelAncestorId, selectionProxyIdFromMetadata, } from '@pascal-app/core';
2
2
  import { findWallOpeningConflicts } from '../shared/wall-opening-clearance.js';
3
3
  import { bakeCabinetAnimationClip } from './animation.js';
4
+ import { cabinetBatchable } from './batchable.js';
4
5
  import { buildCabinetFloorplan, buildCabinetModuleFloorplan } from './floorplan.js';
5
6
  import { cabinetModuleFloorplanMoveTarget } from './floorplan-move.js';
6
7
  import { cabinetFloorplanSiblingOverrides } from './floorplan-overrides.js';
@@ -1801,6 +1802,7 @@ export const cabinetDefinition = {
1801
1802
  // material / materialPreset left undefined — paint mode writes slot refs.
1802
1803
  }),
1803
1804
  capabilities: {
1805
+ batchable: cabinetBatchable,
1804
1806
  reveal: { phase: 'furnishing', style: 'drop', height: 0.3 },
1805
1807
  revealOnEdit: ['width', 'depth', 'carcassHeight', 'plinthHeight'],
1806
1808
  surfacePlacement: 'floor-only',
@@ -1998,6 +2000,7 @@ export const cabinetModuleDefinition = {
1998
2000
  // material / materialPreset left undefined — paint mode writes slot refs.
1999
2001
  }),
2000
2002
  capabilities: {
2003
+ batchable: cabinetBatchable,
2001
2004
  selectable: { hitVolume: 'bbox' },
2002
2005
  surfaces: { hosting: cabinetModuleSurfaceProvider },
2003
2006
  movable: {
@@ -0,0 +1,6 @@
1
+ export declare function parseCabinetDimensionInput(input: string, options: {
2
+ locale: string;
3
+ metricNotation: 'meters' | 'millimeters';
4
+ unit: 'metric' | 'imperial';
5
+ }): number | null;
6
+ //# sourceMappingURL=dimension-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimension-input.d.ts","sourceRoot":"","sources":["../../src/cabinet/dimension-input.ts"],"names":[],"mappings":"AAEA,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,QAAQ,GAAG,aAAa,CAAA;IACxC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;CAC5B,GACA,MAAM,GAAG,IAAI,CAWf"}
@@ -0,0 +1,8 @@
1
+ import { parseMeasurement } from '@pascal-app/editor';
2
+ export function parseCabinetDimensionInput(input, options) {
3
+ return parseMeasurement(input, { kind: 'length', unitId: 'm' }, {
4
+ bareUnit: options.unit === 'imperial' ? 'in' : options.metricNotation === 'millimeters' ? 'mm' : 'm',
5
+ locale: options.locale,
6
+ system: options.unit === 'imperial' ? 'imperial' : 'metric',
7
+ });
8
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"essential-controls.d.ts","sourceRoot":"","sources":["../../src/cabinet/essential-controls.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,kBAAkB,EAUxB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE;IACD,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAC7D,sCAwGA"}
1
+ {"version":3,"file":"essential-controls.d.ts","sourceRoot":"","sources":["../../src/cabinet/essential-controls.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,kBAAkB,EAUxB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE;IACD,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAC7D,sCA0KA"}
@@ -1,8 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { usePascalI18n } from '@pascal-app/core';
3
4
  import { PanelSection, SegmentedControl } from '@pascal-app/editor';
4
5
  import { COOKTOP_DEFAULT_GAS_LAYOUT, COOKTOP_DEFAULT_INDUCTION_LAYOUT, compartmentDoorType, compartmentSinkLayout, isCooktopCompartmentType, isFridgeCompartmentType, patchCompartment, } from './stack.js';
5
6
  export function CabinetEssentialControls({ stack, width, onReplace, }) {
7
+ const i18n = usePascalI18n();
6
8
  const entries = stack
7
9
  .map((part, index) => ({ part, index }))
8
10
  .filter(({ part }) => part.type === 'door' ||
@@ -11,33 +13,96 @@ export function CabinetEssentialControls({ stack, width, onReplace, }) {
11
13
  isCooktopCompartmentType(part.type));
12
14
  if (!entries.length)
13
15
  return null;
14
- return (_jsx(PanelSection, { title: "Item options", children: entries.map(({ part, index }) => (_jsxs("div", { className: "space-y-2 pb-2", children: [_jsxs("div", { className: "text-xs text-muted-foreground", children: [part.type === 'door'
15
- ? 'Door direction'
16
+ return (_jsx(PanelSection, { title: i18n._({ id: 'node.cabinet.essentialControls.itemOptions', message: 'Item options' }), children: entries.map(({ part, index }) => (_jsxs("div", { className: "space-y-2 pb-2", children: [_jsxs("div", { className: "text-xs text-muted-foreground", children: [part.type === 'door'
17
+ ? i18n._({
18
+ id: 'node.cabinet.essentialControls.doorDirection',
19
+ message: 'Door direction',
20
+ })
16
21
  : part.type === 'sink'
17
- ? 'Sink layout'
22
+ ? i18n._({
23
+ id: 'node.cabinet.essentialControls.sinkLayout',
24
+ message: 'Sink layout',
25
+ })
18
26
  : isFridgeCompartmentType(part.type)
19
- ? 'Fridge type'
20
- : 'Cooktop type', entries.length > 1 ? ` · ${index + 1}` : ''] }), part.type === 'door' && (_jsx(SegmentedControl, { value: compartmentDoorType(part, width), options: [
21
- { value: 'single-left', label: 'Left hinge' },
22
- { value: 'single-right', label: 'Right hinge' },
23
- { value: 'double', label: 'Double' },
24
- { value: 'glass', label: 'Glass' },
27
+ ? i18n._({
28
+ id: 'node.cabinet.essentialControls.fridgeType',
29
+ message: 'Fridge type',
30
+ })
31
+ : i18n._({
32
+ id: 'node.cabinet.essentialControls.cooktopType',
33
+ message: 'Cooktop type',
34
+ }), entries.length > 1 ? ` · ${index + 1}` : ''] }), part.type === 'door' && (_jsx(SegmentedControl, { value: compartmentDoorType(part, width), options: [
35
+ {
36
+ value: 'single-left',
37
+ label: i18n._({
38
+ id: 'node.cabinet.essentialControls.leftHinge',
39
+ message: 'Left hinge',
40
+ }),
41
+ },
42
+ {
43
+ value: 'single-right',
44
+ label: i18n._({
45
+ id: 'node.cabinet.essentialControls.rightHinge',
46
+ message: 'Right hinge',
47
+ }),
48
+ },
49
+ {
50
+ value: 'double',
51
+ label: i18n._({ id: 'node.cabinet.essentialControls.double', message: 'Double' }),
52
+ },
53
+ {
54
+ value: 'glass',
55
+ label: i18n._({ id: 'node.cabinet.essentialControls.glass', message: 'Glass' }),
56
+ },
25
57
  ], onChange: (value) => onReplace(index, patchCompartment(part, {
26
58
  doorType: value,
27
59
  })) })), part.type === 'sink' && (_jsx(SegmentedControl, { value: compartmentSinkLayout(part), options: [
28
- { value: 'single', label: 'Single' },
29
- { value: 'double', label: 'Double' },
60
+ {
61
+ value: 'single',
62
+ label: i18n._({ id: 'node.cabinet.essentialControls.single', message: 'Single' }),
63
+ },
64
+ {
65
+ value: 'double',
66
+ label: i18n._({ id: 'node.cabinet.essentialControls.double', message: 'Double' }),
67
+ },
30
68
  { value: 'double-offset', label: '60/40' },
31
69
  ], onChange: (value) => onReplace(index, patchCompartment(part, {
32
70
  sinkLayout: value,
33
71
  })) })), isFridgeCompartmentType(part.type) && (_jsx(SegmentedControl, { value: part.type, options: [
34
- { value: 'fridge-single', label: 'Single' },
35
- { value: 'fridge-double', label: 'Double' },
36
- { value: 'fridge-top-freezer', label: 'Top freezer' },
37
- { value: 'fridge-bottom-freezer', label: 'Bottom freezer' },
72
+ {
73
+ value: 'fridge-single',
74
+ label: i18n._({ id: 'node.cabinet.essentialControls.single', message: 'Single' }),
75
+ },
76
+ {
77
+ value: 'fridge-double',
78
+ label: i18n._({ id: 'node.cabinet.essentialControls.double', message: 'Double' }),
79
+ },
80
+ {
81
+ value: 'fridge-top-freezer',
82
+ label: i18n._({
83
+ id: 'node.cabinet.essentialControls.topFreezer',
84
+ message: 'Top freezer',
85
+ }),
86
+ },
87
+ {
88
+ value: 'fridge-bottom-freezer',
89
+ label: i18n._({
90
+ id: 'node.cabinet.essentialControls.bottomFreezer',
91
+ message: 'Bottom freezer',
92
+ }),
93
+ },
38
94
  ], onChange: (value) => onReplace(index, patchCompartment(part, { type: value })) })), isCooktopCompartmentType(part.type) && (_jsx(SegmentedControl, { value: part.type, options: [
39
- { value: 'cooktop-gas', label: 'Gas' },
40
- { value: 'cooktop-induction', label: 'Induction' },
95
+ {
96
+ value: 'cooktop-gas',
97
+ label: i18n._({ id: 'node.cabinet.essentialControls.gas', message: 'Gas' }),
98
+ },
99
+ {
100
+ value: 'cooktop-induction',
101
+ label: i18n._({
102
+ id: 'node.cabinet.essentialControls.induction',
103
+ message: 'Induction',
104
+ }),
105
+ },
41
106
  ], onChange: (value) => onReplace(index, patchCompartment(part, {
42
107
  type: value,
43
108
  cooktopLayout: value === 'cooktop-gas'
@@ -1,6 +1,6 @@
1
1
  export { bakeCabinetAnimationClip, poseCabinetMovingParts } from './animation.js';
2
2
  export { cabinetDefinition, cabinetModuleDefinition } from './definition.js';
3
- export { findKitchenItems, KITCHEN_ITEMS, kitchenItemMatches, kitchenPresetForModule, } from './kitchen-catalog.js';
3
+ export { findKitchenItems, KITCHEN_ITEM_LABELS, KITCHEN_ITEMS, kitchenItemMatches, kitchenPresetForModule, kitchenPresetForPlacedModule, } from './kitchen-catalog.js';
4
4
  export { KitchenCollection, KitchenThumbnail } from './kitchen-collection.js';
5
5
  export { beginKitchenPlacement } from './kitchen-placement.js';
6
6
  export { default as useCabinetPlacementStatus } from './placement-status.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cabinet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EACL,KAAK,oBAAoB,EACzB,OAAO,IAAI,uBAAuB,GACnC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EACL,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cabinet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EACL,KAAK,oBAAoB,EACzB,OAAO,IAAI,uBAAuB,GACnC,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EACL,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,cAAc,CAAA"}
@@ -1,6 +1,6 @@
1
1
  export { bakeCabinetAnimationClip, poseCabinetMovingParts } from './animation.js';
2
2
  export { cabinetDefinition, cabinetModuleDefinition } from './definition.js';
3
- export { findKitchenItems, KITCHEN_ITEMS, kitchenItemMatches, kitchenPresetForModule, } from './kitchen-catalog.js';
3
+ export { findKitchenItems, KITCHEN_ITEM_LABELS, KITCHEN_ITEMS, kitchenItemMatches, kitchenPresetForModule, kitchenPresetForPlacedModule, } from './kitchen-catalog.js';
4
4
  export { KitchenCollection, KitchenThumbnail } from './kitchen-collection.js';
5
5
  export { beginKitchenPlacement } from './kitchen-placement.js';
6
6
  export { default as useCabinetPlacementStatus } from './placement-status.js';
@@ -1,4 +1,4 @@
1
- import type { AnyNode, CabinetModuleNode, CabinetNode } from '@pascal-app/core';
1
+ import type { AnyNode, CabinetModuleNode, CabinetNode, MessageDescriptor } from '@pascal-app/core';
2
2
  import { type CabinetPresetId } from './presets.js';
3
3
  export declare const KITCHEN_ITEMS: {
4
4
  id: CabinetPresetId;
@@ -7,8 +7,21 @@ export declare const KITCHEN_ITEMS: {
7
7
  group: 'Cabinets' | 'Appliances & fixtures';
8
8
  keywords: string;
9
9
  }[];
10
- export declare function kitchenItemMatches(id: CabinetPresetId, query: string): boolean;
10
+ /**
11
+ * Preset names in the UI language. The presets keep their English labels
12
+ * (agents and MCP read them); the kitchen picker and replace dialog show these.
13
+ */
14
+ export declare const KITCHEN_ITEM_LABELS: Record<CabinetPresetId, MessageDescriptor>;
15
+ export declare const KITCHEN_GROUP_TITLES: Record<'Cabinets' | 'Appliances & fixtures', MessageDescriptor>;
16
+ /** `label` is the name the picker shows, when it is not the English one. */
17
+ export declare function kitchenItemMatches(id: CabinetPresetId, query: string, label?: string): boolean;
11
18
  export declare function kitchenPresetForModule(node: CabinetModuleNode, run?: CabinetNode): CabinetPresetId;
12
- /** The kitchen's placed modules a query names; fillers are part of their run, not items. */
13
- export declare function findKitchenItems(nodes: Readonly<Record<string, AnyNode>>, query: string): CabinetModuleNode[];
19
+ /** A placed module's preset, reading its parent: an upper attached to a module is a wall cabinet. */
20
+ export declare function kitchenPresetForPlacedModule(nodes: Readonly<Record<string, AnyNode>>, node: CabinetModuleNode): CabinetPresetId;
21
+ /**
22
+ * The kitchen's placed modules a query names; fillers are part of their run,
23
+ * not items. `labelFor` gives the name the UI shows for a preset, when it is
24
+ * not the English one.
25
+ */
26
+ export declare function findKitchenItems(nodes: Readonly<Record<string, AnyNode>>, query: string, labelFor?: (id: CabinetPresetId) => string): CabinetModuleNode[];
14
27
  //# sourceMappingURL=kitchen-catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kitchen-catalog.d.ts","sourceRoot":"","sources":["../../src/cabinet/kitchen-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAa,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAEjE,eAAO,MAAM,aAAa;;;;WAIQ,UAAU,GAAG,uBAAuB;;GAanE,CAAA;AAEH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAS9E;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,EACvB,GAAG,CAAC,EAAE,WAAW,GAChB,eAAe,CAYjB;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,MAAM,GACZ,iBAAiB,EAAE,CASrB"}
1
+ {"version":3,"file":"kitchen-catalog.d.ts","sourceRoot":"","sources":["../../src/cabinet/kitchen-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAEjE,eAAO,MAAM,aAAa;;;;WAIQ,UAAU,GAAG,uBAAuB;;GAanE,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAc1E,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,UAAU,GAAG,uBAAuB,EAAE,iBAAiB,CAO9F,CAAA;AAEH,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAS1F;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,EACvB,GAAG,CAAC,EAAE,WAAW,GAChB,eAAe,CAYjB;AAED,qGAAqG;AACrG,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,EAAE,iBAAiB,GACtB,eAAe,CAIjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,MAAM,GACzC,iBAAiB,EAAE,CASrB"}