@pascal-app/nodes 1.0.6 → 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
@@ -17,11 +17,38 @@ export const KITCHEN_ITEMS = CABINET_PRESETS.map((preset) => ({
17
17
  'cooktop-induction': 'electric induction hob stove cooktop',
18
18
  }[preset.id],
19
19
  }));
20
- export function kitchenItemMatches(id, query) {
20
+ /**
21
+ * Preset names in the UI language. The presets keep their English labels
22
+ * (agents and MCP read them); the kitchen picker and replace dialog show these.
23
+ */
24
+ export const KITCHEN_ITEM_LABELS = {
25
+ 'wall-cabinet': /* i18n */ { id: 'node.cabinet.preset.wallCabinet', message: 'Wall cabinet' },
26
+ 'base-door': /* i18n */ { id: 'node.cabinet.preset.baseCabinet', message: 'Base cabinet' },
27
+ 'drawer-base': /* i18n */ { id: 'node.cabinet.preset.drawerCabinet', message: 'Drawer cabinet' },
28
+ dishwasher: /* i18n */ { id: 'node.cabinet.preset.dishwasher', message: 'Dishwasher' },
29
+ 'cooktop-gas': /* i18n */ { id: 'node.cabinet.preset.gasCooktop', message: 'Gas cooktop' },
30
+ 'cooktop-induction': /* i18n */ {
31
+ id: 'node.cabinet.preset.inductionCooktop',
32
+ message: 'Induction cooktop',
33
+ },
34
+ 'sink-base': /* i18n */ { id: 'node.cabinet.preset.sinkCabinet', message: 'Sink cabinet' },
35
+ 'tall-pantry': /* i18n */ { id: 'node.cabinet.preset.tallPantry', message: 'Tall Pantry' },
36
+ 'oven-tower': /* i18n */ { id: 'node.cabinet.preset.ovenTower', message: 'Oven Tower' },
37
+ 'fridge-single': /* i18n */ { id: 'node.cabinet.preset.fridge', message: 'Fridge' },
38
+ };
39
+ export const KITCHEN_GROUP_TITLES = {
40
+ Cabinets: /* i18n */ { id: 'node.cabinet.kitchenGroup.cabinets', message: 'Cabinets' },
41
+ 'Appliances & fixtures': /* i18n */ {
42
+ id: 'node.cabinet.kitchenGroup.appliances',
43
+ message: 'Appliances & fixtures',
44
+ },
45
+ };
46
+ /** `label` is the name the picker shows, when it is not the English one. */
47
+ export function kitchenItemMatches(id, query, label = '') {
21
48
  const item = KITCHEN_ITEMS.find((entry) => entry.id === id);
22
49
  if (!item)
23
50
  return false;
24
- const text = `${item.label} ${item.keywords} kitchen cabinet`.toLowerCase();
51
+ const text = `${item.label} ${label} ${item.keywords} kitchen cabinet`.toLowerCase();
25
52
  return query
26
53
  .trim()
27
54
  .toLowerCase()
@@ -50,13 +77,24 @@ export function kitchenPresetForModule(node, run) {
50
77
  return 'drawer-base';
51
78
  return 'base-door';
52
79
  }
53
- /** The kitchen's placed modules a query names; fillers are part of their run, not items. */
54
- export function findKitchenItems(nodes, query) {
80
+ /** A placed module's preset, reading its parent: an upper attached to a module is a wall cabinet. */
81
+ export function kitchenPresetForPlacedModule(nodes, node) {
82
+ const parent = node.parentId ? nodes[node.parentId] : undefined;
83
+ if (parent?.type === 'cabinet-module')
84
+ return 'wall-cabinet';
85
+ return kitchenPresetForModule(node, parent?.type === 'cabinet' ? parent : undefined);
86
+ }
87
+ /**
88
+ * The kitchen's placed modules a query names; fillers are part of their run,
89
+ * not items. `labelFor` gives the name the UI shows for a preset, when it is
90
+ * not the English one.
91
+ */
92
+ export function findKitchenItems(nodes, query, labelFor) {
55
93
  return Object.values(nodes).filter((node) => {
56
94
  if (node.type !== 'cabinet-module' || node.moduleKind !== 'standard')
57
95
  return false;
58
- const parent = node.parentId ? nodes[node.parentId] : undefined;
59
- const id = kitchenPresetForModule(node, parent?.type === 'cabinet' ? parent : undefined);
60
- return (kitchenItemMatches(id, query) || (node.name ?? '').toLowerCase().includes(query.toLowerCase()));
96
+ const id = kitchenPresetForPlacedModule(nodes, node);
97
+ return (kitchenItemMatches(id, query, labelFor?.(id)) ||
98
+ (node.name ?? '').toLowerCase().includes(query.toLowerCase()));
61
99
  });
62
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kitchen-collection.d.ts","sourceRoot":"","sources":["../../src/cabinet/kitchen-collection.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE;IAAE,EAAE,EAAE,eAAe,CAAA;CAAE,+BAc/D;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,WAAkB,GACnB,EAAE;IACD,QAAQ,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,+BA+DA"}
1
+ {"version":3,"file":"kitchen-collection.d.ts","sourceRoot":"","sources":["../../src/cabinet/kitchen-collection.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE;IAAE,EAAE,EAAE,eAAe,CAAA;CAAE,+BAc/D;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,WAAkB,GACnB,EAAE;IACD,QAAQ,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,+BA8EA"}
@@ -1,19 +1,35 @@
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 { BuildPanelSection, BuildToolGrid, BuildToolTile } from '@pascal-app/editor';
4
5
  import { useId, useState } from 'react';
5
- import { KITCHEN_ITEMS, kitchenItemMatches } from './kitchen-catalog.js';
6
+ import { KITCHEN_GROUP_TITLES, KITCHEN_ITEM_LABELS, KITCHEN_ITEMS, kitchenItemMatches, } from './kitchen-catalog.js';
6
7
  import useCabinetPlacementStatus from './placement-status.js';
7
8
  export function KitchenThumbnail({ id }) {
8
9
  return (_jsx("img", { src: `/icons/kitchen/${id}.webp`, alt: "", "aria-hidden": "true", width: 256, height: 256, loading: "lazy", decoding: "async", draggable: false, className: "h-20 w-full object-contain" }));
9
10
  }
10
11
  export function KitchenCollection({ onSelect, activeId, query, includeWall = true, }) {
12
+ const i18n = usePascalI18n();
11
13
  const [search, setSearch] = useState('');
12
14
  const placementTarget = useCabinetPlacementStatus((state) => state.target);
13
15
  const inputId = useId();
14
- const items = KITCHEN_ITEMS.filter((item) => (includeWall || item.id !== 'wall-cabinet') && kitchenItemMatches(item.id, query ?? search));
15
- return (_jsxs("div", { className: "space-y-3", children: [placementTarget && (_jsx("p", { role: "status", className: "rounded-lg border border-border bg-muted/40 px-3 py-2 text-xs", children: placementTarget })), query === undefined && (_jsxs("div", { children: [_jsx("label", { htmlFor: inputId, className: "sr-only", children: "Search kitchen items" }), _jsx("input", { id: inputId, type: "search", placeholder: "Search fridge, sink, cabinets\u2026", value: search, onChange: (event) => setSearch(event.target.value), className: "h-9 w-full rounded-lg border border-border bg-background px-3 text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" })] })), ['Cabinets', 'Appliances & fixtures'].map((group) => {
16
+ const items = KITCHEN_ITEMS.filter((item) => (includeWall || item.id !== 'wall-cabinet') &&
17
+ kitchenItemMatches(item.id, query ?? search, i18n._(KITCHEN_ITEM_LABELS[item.id])));
18
+ return (_jsxs("div", { className: "space-y-3", children: [placementTarget && (_jsx("p", { role: "status", className: "rounded-lg border border-border bg-muted/40 px-3 py-2 text-xs", children: placementTarget })), query === undefined && (_jsxs("div", { children: [_jsx("label", { htmlFor: inputId, className: "sr-only", children: i18n._({
19
+ id: 'node.cabinet.kitchenCollection.searchKitchenItems',
20
+ message: 'Search kitchen items',
21
+ }) }), _jsx("input", { id: inputId, type: "search", placeholder: i18n._({
22
+ id: 'node.cabinet.kitchenCollection.searchFridgeSinkCabinets',
23
+ message: 'Search fridge, sink, cabinets…',
24
+ }), value: search, onChange: (event) => setSearch(event.target.value), className: "h-9 w-full rounded-lg border border-border bg-background px-3 text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" })] })), ['Cabinets', 'Appliances & fixtures'].map((group) => {
16
25
  const entries = items.filter((item) => item.group === group);
17
- return (entries.length > 0 && (_jsx(BuildPanelSection, { id: `kitchen-${group === 'Cabinets' ? 'cabinets' : 'appliances'}`, title: group, children: _jsx(BuildToolGrid, { columns: 3, children: entries.map((item) => (_jsx(BuildToolTile, { "aria-label": `Choose ${item.label}`, active: activeId === item.id, tone: "neutral", iconSrc: `/icons/kitchen/${item.id}.webp`, label: item.label, onClick: () => onSelect(item.id) }, item.id))) }) }, group)));
18
- }), !items.length && (_jsx("p", { role: "status", className: "text-xs text-muted-foreground", children: "No kitchen items match. Try \u201Cfridge\u201D, \u201Csink\u201D, or \u201Ccabinet\u201D." }))] }));
26
+ return (entries.length > 0 && (_jsx(BuildPanelSection, { id: `kitchen-${group === 'Cabinets' ? 'cabinets' : 'appliances'}`, title: i18n._(KITCHEN_GROUP_TITLES[group]), children: _jsx(BuildToolGrid, { columns: 3, children: entries.map((item) => (_jsx(BuildToolTile, { "aria-label": i18n._({
27
+ id: 'node.cabinet.kitchenCollection.chooseLabel',
28
+ message: 'Choose {label}',
29
+ values: { label: i18n._(KITCHEN_ITEM_LABELS[item.id]) },
30
+ }), active: activeId === item.id, tone: "neutral", iconSrc: `/icons/kitchen/${item.id}.webp`, label: i18n._(KITCHEN_ITEM_LABELS[item.id]), onClick: () => onSelect(item.id) }, item.id))) }) }, group)));
31
+ }), !items.length && (_jsx("p", { role: "status", className: "text-xs text-muted-foreground", children: i18n._({
32
+ id: 'node.cabinet.kitchenCollection.noKitchenItemsMatchTryFridge',
33
+ message: 'No kitchen items match. Try “fridge”, “sink”, or “cabinet”.',
34
+ }) }))] }));
19
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kitchen-module-actions.d.ts","sourceRoot":"","sources":["../../src/cabinet/kitchen-module-actions.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAIjB,MAAM,kBAAkB,CAAA;AAMzB,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,WAAW,CAAA;AAYnE,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,GAAG,EACH,SAAS,GACV,EAAE;IACD,IAAI,EAAE,iBAAiB,CAAA;IACvB,GAAG,EAAE,WAAW,CAAA;IAChB,SAAS,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;CACzC,+BAsNA"}
1
+ {"version":3,"file":"kitchen-module-actions.d.ts","sourceRoot":"","sources":["../../src/cabinet/kitchen-module-actions.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAKjB,MAAM,kBAAkB,CAAA;AAOzB,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,WAAW,CAAA;AAYnE,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,GAAG,EACH,SAAS,GACV,EAAE;IACD,IAAI,EAAE,iBAAiB,CAAA;IACvB,GAAG,EAAE,WAAW,CAAA;IAChB,SAAS,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;CACzC,+BAyTA"}
@@ -1,10 +1,11 @@
1
1
  'use client';
2
2
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { CabinetModuleNode, createSceneApi, runAsSingleSceneHistoryStep, useScene, } from '@pascal-app/core';
3
+ import { CabinetModuleNode, createSceneApi, runAsSingleSceneHistoryStep, usePascalI18n, useScene, } from '@pascal-app/core';
4
4
  import { ActionButton, formatLinearMeasurement } from '@pascal-app/editor';
5
5
  import { useViewer } from '@pascal-app/viewer';
6
6
  import { useState } from 'react';
7
7
  import { applyCabinetModuleInsertion, cabinetModuleForRunInsertion } from './insertion.js';
8
+ import { KITCHEN_ITEM_LABELS } from './kitchen-catalog.js';
8
9
  import { KitchenCollection } from './kitchen-collection.js';
9
10
  import { cabinetPresetById } from './presets.js';
10
11
  import { moduleMaxX, moduleMinX, planRunModuleInsertion, runWallConstraints } from './run-layout.js';
@@ -12,6 +13,7 @@ import { bumpCabinetRunLayoutRevision, cabinetModulesForRun, cornerPinnedEndsFor
12
13
  import { planCabinetPresetReflow } from './run-panel.js';
13
14
  import { backAnchoredModuleZ } from './stack.js';
14
15
  export function KitchenModuleActions({ node, run, onReplace, }) {
16
+ const i18n = usePascalI18n();
15
17
  const [action, setAction] = useState(null);
16
18
  const [presetId, setPresetId] = useState(null);
17
19
  const [error, setError] = useState(null);
@@ -21,6 +23,7 @@ export function KitchenModuleActions({ node, run, onReplace, }) {
21
23
  const format = (value) => formatLinearMeasurement(value, unit, notation);
22
24
  const modules = cabinetModulesForRun(run, nodes);
23
25
  const preset = presetId ? cabinetPresetById(presetId) : null;
26
+ const presetLabel = presetId ? i18n._(KITCHEN_ITEM_LABELS[presetId]) : '';
24
27
  const patch = preset?.createPatch(run);
25
28
  const module = patch
26
29
  ? cabinetModuleForRunInsertion(CabinetModuleNode.parse({
@@ -80,7 +83,10 @@ export function KitchenModuleActions({ node, run, onReplace, }) {
80
83
  else if (module && insertion?.ok) {
81
84
  const id = applyCabinetModuleInsertion({ module, plan: insertion, run, sceneApi: api });
82
85
  if (!id)
83
- throw new Error('The kitchen changed. Select an item again to refresh the preview.');
86
+ throw new Error(i18n._({
87
+ id: 'node.cabinet.kitchenModuleActions.kitchenChanged',
88
+ message: 'The kitchen changed. Select an item again to refresh the preview.',
89
+ }));
84
90
  syncCornerRunsFromRunSources({ run: api.get(run.id) ?? run, sceneApi: api });
85
91
  bumpCabinetRunLayoutRevision(api, run);
86
92
  useViewer.getState().setSelection({ selectedIds: [id] });
@@ -89,29 +95,116 @@ export function KitchenModuleActions({ node, run, onReplace, }) {
89
95
  reset();
90
96
  }
91
97
  catch (cause) {
92
- setError(cause instanceof Error ? cause.message : 'Unable to update this kitchen.');
98
+ setError(cause instanceof Error
99
+ ? cause.message
100
+ : i18n._({
101
+ id: 'node.cabinet.kitchenModuleActions.unableToUpdateThisKitchen',
102
+ message: 'Unable to update this kitchen.',
103
+ }));
93
104
  }
94
105
  };
95
106
  const changedId = action === 'replace' ? node.id : module?.id;
96
- return (_jsxs("div", { className: "space-y-3 px-1 pb-2", children: [_jsxs("div", { className: "flex gap-2", children: [_jsx(ActionButton, { label: "Add beside", onClick: () => {
107
+ return (_jsxs("div", { className: "space-y-3 px-1 pb-2", children: [_jsxs("div", { className: "flex gap-2", children: [_jsx(ActionButton, { label: i18n._({
108
+ id: 'node.cabinet.kitchenModuleActions.addBeside',
109
+ message: 'Add beside',
110
+ }), onClick: () => {
97
111
  setAction('right');
98
112
  setPresetId(null);
99
- } }), _jsx(ActionButton, { label: "Replace with\u2026", onClick: () => {
113
+ } }), _jsx(ActionButton, { label: i18n._({
114
+ id: 'node.cabinet.kitchenModuleActions.replaceWith',
115
+ message: 'Replace with…',
116
+ }), onClick: () => {
100
117
  setAction('replace');
101
118
  setPresetId(null);
102
- } })] }), action && (_jsxs("div", { className: "space-y-3 rounded-xl border border-border p-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 text-xs font-medium", children: [_jsx("span", { children: action === 'replace' ? 'Replace selected item' : 'Add beside selected item' }), _jsx("button", { type: "button", onClick: reset, className: "min-h-8 shrink-0 rounded px-2 py-1.5 hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring", children: "Cancel" })] }), action !== 'replace' && (_jsx("div", { className: "flex gap-2", children: ['left', 'right'].map((side) => (_jsx("button", { type: "button", "aria-pressed": action === side, onClick: () => setAction(side), className: `flex-1 rounded-lg border px-2 py-2 text-xs focus-visible:ring-2 focus-visible:ring-ring ${action === side ? 'border-primary bg-primary/10' : 'border-border'}`, children: side === 'left' ? 'Left side' : 'Right side' }, side))) })), _jsx(KitchenCollection, { activeId: presetId, includeWall: false, onSelect: (id) => {
119
+ } })] }), action && (_jsxs("div", { className: "space-y-3 rounded-xl border border-border p-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 text-xs font-medium", children: [_jsx("span", { children: action === 'replace'
120
+ ? i18n._({
121
+ id: 'node.cabinet.kitchenModuleActions.replaceSelectedItem',
122
+ message: 'Replace selected item',
123
+ })
124
+ : i18n._({
125
+ id: 'node.cabinet.kitchenModuleActions.addBesideSelectedItem',
126
+ message: 'Add beside selected item',
127
+ }) }), _jsx("button", { type: "button", onClick: reset, className: "min-h-8 shrink-0 rounded px-2 py-1.5 hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring", children: i18n._({ id: 'node.cabinet.kitchenModuleActions.cancel', message: 'Cancel' }) })] }), action !== 'replace' && (_jsx("div", { className: "flex gap-2", children: ['left', 'right'].map((side) => (_jsx("button", { type: "button", "aria-pressed": action === side, onClick: () => setAction(side), className: `flex-1 rounded-lg border px-2 py-2 text-xs focus-visible:ring-2 focus-visible:ring-ring ${action === side ? 'border-primary bg-primary/10' : 'border-border'}`, children: side === 'left'
128
+ ? i18n._({
129
+ id: 'node.cabinet.kitchenModuleActions.leftSide',
130
+ message: 'Left side',
131
+ })
132
+ : i18n._({
133
+ id: 'node.cabinet.kitchenModuleActions.rightSide',
134
+ message: 'Right side',
135
+ }) }, side))) })), _jsx(KitchenCollection, { activeId: presetId, includeWall: false, onSelect: (id) => {
103
136
  setPresetId(id);
104
137
  setError(null);
105
- } }), preset && (_jsxs("div", { role: "status", className: "space-y-2 border-t border-border pt-3 text-xs", children: [_jsxs("p", { className: "font-medium", children: [preset.label, " \u00B7 ", format(patch?.width ?? 0)] }), fits && planned ? (_jsxs(_Fragment, { children: [_jsx("div", { role: "img", "aria-label": "Kitchen run preview, highlighted item is the proposed change", className: "flex h-12 gap-0.5", children: [...planned]
138
+ } }), preset && (_jsxs("div", { role: "status", className: "space-y-2 border-t border-border pt-3 text-xs", children: [_jsxs("p", { className: "font-medium", children: [presetLabel, " \u00B7 ", format(patch?.width ?? 0)] }), fits && planned ? (_jsxs(_Fragment, { children: [_jsx("div", { role: "img", "aria-label": i18n._({
139
+ id: 'node.cabinet.kitchenModuleActions.kitchenRunPreviewHighlightedItemIs',
140
+ message: 'Kitchen run preview, highlighted item is the proposed change',
141
+ }), className: "flex h-12 gap-0.5", children: [...planned]
106
142
  .sort((a, b) => a.position[0] - b.position[0])
107
- .map((entry) => (_jsx("div", { style: { flex: entry.width }, title: `${entry.id === changedId ? preset.label : (modules.find((existing) => existing.id === entry.id)?.name ?? 'Cabinet')}: ${format(entry.width)}`, className: `min-w-0 rounded border ${entry.id === changedId ? 'border-primary bg-primary/30' : 'border-border bg-muted'}` }, entry.id))) }), _jsx("p", { children: action === 'replace'
108
- ? 'Replaces only the selected item.'
109
- : `Inserts on the ${action} of the selected item.` }), changes.map((entry) => {
143
+ .map((entry) => (_jsx("div", { style: { flex: entry.width }, title: i18n._({
144
+ id: 'node.cabinet.kitchenModuleActions.previewItem',
145
+ message: '{name}: {width}',
146
+ values: {
147
+ name: entry.id === changedId
148
+ ? presetLabel
149
+ : (modules.find((existing) => existing.id === entry.id)?.name ??
150
+ i18n._({
151
+ id: 'node.cabinet.kitchenModuleActions.cabinet',
152
+ message: 'Cabinet',
153
+ })),
154
+ width: format(entry.width),
155
+ },
156
+ }), className: `min-w-0 rounded border ${entry.id === changedId ? 'border-primary bg-primary/30' : 'border-border bg-muted'}` }, entry.id))) }), _jsx("p", { children: action === 'replace'
157
+ ? i18n._({
158
+ id: 'node.cabinet.kitchenModuleActions.replacesOnlyTheSelectedItem',
159
+ message: 'Replaces only the selected item.',
160
+ })
161
+ : i18n._({
162
+ id: 'node.cabinet.kitchenModuleActions.insertsBeside',
163
+ message: '{side, select, left {Inserts on the left of the selected item.} other {Inserts on the right of the selected item.}}',
164
+ values: { side: action },
165
+ }) }), changes.map((entry) => {
110
166
  const before = modules.find((existing) => existing.id === entry.id);
111
- return (_jsxs("p", { className: "text-muted-foreground", children: [before.name || 'Cabinet', ":", ' ', Math.abs(before.width - entry.width) > 0.0001
112
- ? `${format(before.width)} → ${format(entry.width)}`
113
- : `moves ${format(Math.abs(before.position[0] - entry.position[0]))}`] }, entry.id));
167
+ const moduleName = before.name ||
168
+ i18n._({
169
+ id: 'node.cabinet.kitchenModuleActions.cabinet',
170
+ message: 'Cabinet',
171
+ });
172
+ return (_jsx("p", { className: "text-muted-foreground", children: Math.abs(before.width - entry.width) > 0.0001
173
+ ? i18n._({
174
+ id: 'node.cabinet.kitchenModuleActions.resized',
175
+ message: '{name}: {before} → {after}',
176
+ values: {
177
+ name: moduleName,
178
+ before: format(before.width),
179
+ after: format(entry.width),
180
+ },
181
+ })
182
+ : i18n._({
183
+ id: 'node.cabinet.kitchenModuleActions.moved',
184
+ message: '{name}: moves {distance}',
185
+ values: {
186
+ name: moduleName,
187
+ distance: format(Math.abs(before.position[0] - entry.position[0])),
188
+ },
189
+ }) }, entry.id));
114
190
  }), action === 'replace' &&
115
191
  patch?.cabinetType === 'tall' &&
116
- node.children.length > 0 && (_jsx("p", { className: "text-muted-foreground", children: "An upper cabinet attached to this item will be removed to make room." })), _jsx(ActionButton, { label: action === 'replace' ? `Replace with ${preset.label}` : `Add ${preset.label}`, onClick: commit })] })) : (_jsxs("p", { children: ["This ", format(patch?.width ?? 0), " item cannot fit within the current run and its wall or corner limits. Move an end cabinet or free space, then try again."] }))] })), error && (_jsx("p", { role: "alert", className: "text-xs text-destructive", children: error }))] }))] }));
192
+ node.children.length > 0 && (_jsx("p", { className: "text-muted-foreground", children: i18n._({
193
+ id: 'node.cabinet.kitchenModuleActions.anUpperCabinetAttachedToThis',
194
+ message: 'An upper cabinet attached to this item will be removed to make room.',
195
+ }) })), _jsx(ActionButton, { label: action === 'replace'
196
+ ? i18n._({
197
+ id: 'node.cabinet.kitchenModuleActions.replaceWithLabel',
198
+ message: 'Replace with {label}',
199
+ values: { label: presetLabel },
200
+ })
201
+ : i18n._({
202
+ id: 'node.cabinet.kitchenModuleActions.addLabel',
203
+ message: 'Add {label}',
204
+ values: { label: presetLabel },
205
+ }), onClick: commit })] })) : (_jsx("p", { children: i18n._({
206
+ id: 'node.cabinet.kitchenModuleActions.cannotFit',
207
+ message: 'This {width} item cannot fit within the current run and its wall or corner limits. Move an end cabinet or free space, then try again.',
208
+ values: { width: format(patch?.width ?? 0) },
209
+ }) }))] })), error && (_jsx("p", { role: "alert", className: "text-xs text-destructive", children: error }))] }))] }));
117
210
  }
@@ -71,6 +71,11 @@ export declare function resolveCabinetNeighborPlacement({ nodes, levelId, positi
71
71
  url: string;
72
72
  repeat?: [number, number] | undefined;
73
73
  scale?: number | undefined;
74
+ offset?: [number, number] | undefined;
75
+ normalMap?: string | undefined;
76
+ normalScale?: number | undefined;
77
+ bumpMap?: string | undefined;
78
+ bumpScale?: number | undefined;
74
79
  } | undefined;
75
80
  } | undefined;
76
81
  materialPreset?: string | undefined;
@@ -234,6 +239,11 @@ export declare function resolveCabinetNeighborPlacement({ nodes, levelId, positi
234
239
  url: string;
235
240
  repeat?: [number, number] | undefined;
236
241
  scale?: number | undefined;
242
+ offset?: [number, number] | undefined;
243
+ normalMap?: string | undefined;
244
+ normalScale?: number | undefined;
245
+ bumpMap?: string | undefined;
246
+ bumpScale?: number | undefined;
237
247
  } | undefined;
238
248
  } | undefined;
239
249
  materialPreset?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"neighbor-placement.d.ts","sourceRoot":"","sources":["../../src/cabinet/neighbor-placement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAe,MAAM,kBAAkB,CAAA;AAW1F,0FAA0F;AAC1F,wBAAgB,+BAA+B,CAAC,EAC9C,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAgB,GACjB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,MAAM,EAAE,iBAAiB,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAmDA"}
1
+ {"version":3,"file":"neighbor-placement.d.ts","sourceRoot":"","sources":["../../src/cabinet/neighbor-placement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAe,MAAM,kBAAkB,CAAA;AAW1F,0FAA0F;AAC1F,wBAAgB,+BAA+B,CAAC,EAC9C,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAgB,GACjB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,MAAM,EAAE,iBAAiB,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAmDA"}
@@ -1 +1 @@
1
- {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/cabinet/panel.tsx"],"names":[],"mappings":"AAyIA,MAAM,CAAC,OAAO,UAAU,YAAY,uCAm+BnC"}
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/cabinet/panel.tsx"],"names":[],"mappings":"AAwJA,MAAM,CAAC,OAAO,UAAU,YAAY,uCAukCnC"}