@pascal-app/nodes 1.1.0 → 1.1.2

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 (277) hide show
  1. package/README.md +3 -2
  2. package/dist/beam/definition.edit.d.ts.map +1 -1
  3. package/dist/beam/definition.edit.js +0 -2
  4. package/dist/beam/definition.render.d.ts.map +1 -1
  5. package/dist/beam/definition.render.js +2 -0
  6. package/dist/beam/floorplan.d.ts.map +1 -1
  7. package/dist/beam/floorplan.js +1 -2
  8. package/dist/block/definition.edit.d.ts.map +1 -1
  9. package/dist/block/definition.edit.js +0 -2
  10. package/dist/block/definition.render.d.ts.map +1 -1
  11. package/dist/block/definition.render.js +2 -0
  12. package/dist/block/floorplan.d.ts.map +1 -1
  13. package/dist/block/floorplan.js +1 -2
  14. package/dist/box-vent/definition.edit.d.ts.map +1 -1
  15. package/dist/box-vent/definition.edit.js +0 -2
  16. package/dist/box-vent/definition.render.d.ts.map +1 -1
  17. package/dist/box-vent/definition.render.js +2 -0
  18. package/dist/builtin-definitions.d.ts +57 -57
  19. package/dist/builtin-edit-contributions.d.ts +1 -1
  20. package/dist/cabinet/definition.edit.d.ts.map +1 -1
  21. package/dist/cabinet/definition.edit.js +0 -3
  22. package/dist/cabinet/definition.render.d.ts.map +1 -1
  23. package/dist/cabinet/definition.render.js +3 -0
  24. package/dist/cabinet/floorplan.js +1 -1
  25. package/dist/ceiling/definition.edit.d.ts.map +1 -1
  26. package/dist/ceiling/definition.edit.js +0 -2
  27. package/dist/ceiling/definition.render.d.ts.map +1 -1
  28. package/dist/ceiling/definition.render.js +2 -0
  29. package/dist/chimney/definition.edit.d.ts.map +1 -1
  30. package/dist/chimney/definition.edit.js +0 -2
  31. package/dist/chimney/definition.render.d.ts.map +1 -1
  32. package/dist/chimney/definition.render.js +2 -0
  33. package/dist/chimney/panel.js +1 -1
  34. package/dist/column/definition.edit.d.ts.map +1 -1
  35. package/dist/column/definition.edit.js +0 -3
  36. package/dist/column/definition.render.d.ts.map +1 -1
  37. package/dist/column/definition.render.js +3 -0
  38. package/dist/column/floorplan.d.ts.map +1 -1
  39. package/dist/column/floorplan.js +1 -2
  40. package/dist/column/renderer.d.ts.map +1 -1
  41. package/dist/column/renderer.js +1 -1
  42. package/dist/construction-dimension/definition.edit.d.ts.map +1 -1
  43. package/dist/construction-dimension/definition.edit.js +0 -2
  44. package/dist/construction-dimension/definition.render.d.ts.map +1 -1
  45. package/dist/construction-dimension/definition.render.js +2 -0
  46. package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
  47. package/dist/construction-dimension/floorplan-tool.js +2 -2
  48. package/dist/construction-dimension/floorplan.d.ts.map +1 -1
  49. package/dist/construction-dimension/floorplan.js +1 -2
  50. package/dist/cupola/definition.edit.d.ts.map +1 -1
  51. package/dist/cupola/definition.edit.js +0 -2
  52. package/dist/cupola/definition.render.d.ts.map +1 -1
  53. package/dist/cupola/definition.render.js +2 -0
  54. package/dist/definition-contributions.d.ts +1 -1
  55. package/dist/definition-contributions.d.ts.map +1 -1
  56. package/dist/door/definition.edit.d.ts.map +1 -1
  57. package/dist/door/definition.edit.js +1 -6
  58. package/dist/door/definition.render.d.ts.map +1 -1
  59. package/dist/door/definition.render.js +6 -0
  60. package/dist/door/floorplan.d.ts.map +1 -1
  61. package/dist/door/floorplan.js +1 -2
  62. package/dist/dormer/definition.edit.d.ts.map +1 -1
  63. package/dist/dormer/definition.edit.js +0 -2
  64. package/dist/dormer/definition.render.d.ts.map +1 -1
  65. package/dist/dormer/definition.render.js +2 -0
  66. package/dist/dormer/panel-position-section.js +1 -1
  67. package/dist/duct-fitting/definition.edit.d.ts.map +1 -1
  68. package/dist/duct-fitting/definition.edit.js +0 -2
  69. package/dist/duct-fitting/definition.render.d.ts.map +1 -1
  70. package/dist/duct-fitting/definition.render.js +2 -0
  71. package/dist/duct-segment/continuation-handle.d.ts +8 -0
  72. package/dist/duct-segment/continuation-handle.d.ts.map +1 -0
  73. package/dist/duct-segment/continuation-handle.js +36 -0
  74. package/dist/duct-segment/continuation.d.ts +1 -5
  75. package/dist/duct-segment/continuation.d.ts.map +1 -1
  76. package/dist/duct-segment/continuation.js +2 -36
  77. package/dist/duct-segment/definition.edit.d.ts.map +1 -1
  78. package/dist/duct-segment/definition.edit.js +0 -2
  79. package/dist/duct-segment/definition.render.d.ts.map +1 -1
  80. package/dist/duct-segment/definition.render.js +2 -0
  81. package/dist/duct-segment/floorplan.js +1 -1
  82. package/dist/duct-segment/selection.d.ts.map +1 -1
  83. package/dist/duct-segment/selection.js +2 -1
  84. package/dist/duct-segment/tool.d.ts.map +1 -1
  85. package/dist/duct-segment/tool.js +2 -1
  86. package/dist/duct-terminal/definition.edit.d.ts.map +1 -1
  87. package/dist/duct-terminal/definition.edit.js +0 -2
  88. package/dist/duct-terminal/definition.render.d.ts.map +1 -1
  89. package/dist/duct-terminal/definition.render.js +2 -0
  90. package/dist/elevator/definition.edit.d.ts.map +1 -1
  91. package/dist/elevator/definition.edit.js +0 -10
  92. package/dist/elevator/definition.render.d.ts.map +1 -1
  93. package/dist/elevator/definition.render.js +10 -0
  94. package/dist/eyebrow-vent/definition.edit.d.ts.map +1 -1
  95. package/dist/eyebrow-vent/definition.edit.js +0 -2
  96. package/dist/eyebrow-vent/definition.render.d.ts.map +1 -1
  97. package/dist/eyebrow-vent/definition.render.js +2 -0
  98. package/dist/fence/definition.edit.d.ts.map +1 -1
  99. package/dist/fence/definition.edit.js +0 -6
  100. package/dist/fence/definition.render.d.ts.map +1 -1
  101. package/dist/fence/definition.render.js +2 -0
  102. package/dist/fence-feature/definition.edit.d.ts.map +1 -1
  103. package/dist/fence-feature/definition.edit.js +0 -3
  104. package/dist/fence-feature/definition.render.d.ts.map +1 -1
  105. package/dist/fence-feature/definition.render.js +3 -0
  106. package/dist/floor-opening/definition.edit.d.ts.map +1 -1
  107. package/dist/floor-opening/definition.edit.js +1 -3
  108. package/dist/floor-opening/definition.render.d.ts.map +1 -1
  109. package/dist/floor-opening/definition.render.js +3 -0
  110. package/dist/floor-opening/floorplan-affordances.d.ts +150 -0
  111. package/dist/floor-opening/floorplan-affordances.d.ts.map +1 -0
  112. package/dist/floor-opening/floorplan-affordances.js +67 -0
  113. package/dist/floor-opening/floorplan.d.ts +2 -151
  114. package/dist/floor-opening/floorplan.d.ts.map +1 -1
  115. package/dist/floor-opening/floorplan.js +0 -66
  116. package/dist/gutter/definition.edit.d.ts.map +1 -1
  117. package/dist/gutter/definition.edit.js +0 -2
  118. package/dist/gutter/definition.render.d.ts.map +1 -1
  119. package/dist/gutter/definition.render.js +2 -0
  120. package/dist/hvac-equipment/definition.edit.d.ts.map +1 -1
  121. package/dist/hvac-equipment/definition.edit.js +0 -2
  122. package/dist/hvac-equipment/definition.render.d.ts.map +1 -1
  123. package/dist/hvac-equipment/definition.render.js +2 -0
  124. package/dist/imported-mesh/definition.edit.d.ts.map +1 -1
  125. package/dist/imported-mesh/definition.edit.js +0 -2
  126. package/dist/imported-mesh/definition.render.d.ts.map +1 -1
  127. package/dist/imported-mesh/definition.render.js +2 -0
  128. package/dist/item/definition.edit.d.ts.map +1 -1
  129. package/dist/item/definition.edit.js +1 -4
  130. package/dist/item/definition.render.d.ts.map +1 -1
  131. package/dist/item/definition.render.js +4 -0
  132. package/dist/item/floorplan.d.ts.map +1 -1
  133. package/dist/item/floorplan.js +1 -2
  134. package/dist/item/plan-symbols.js +1 -1
  135. package/dist/lean-to-extension/definition.edit.d.ts.map +1 -1
  136. package/dist/lean-to-extension/definition.edit.js +0 -2
  137. package/dist/lean-to-extension/definition.render.d.ts.map +1 -1
  138. package/dist/lean-to-extension/definition.render.js +2 -0
  139. package/dist/lineset/definition.edit.d.ts.map +1 -1
  140. package/dist/lineset/definition.edit.js +0 -2
  141. package/dist/lineset/definition.render.d.ts.map +1 -1
  142. package/dist/lineset/definition.render.js +2 -0
  143. package/dist/liquid-line/definition.edit.d.ts.map +1 -1
  144. package/dist/liquid-line/definition.edit.js +0 -2
  145. package/dist/liquid-line/definition.render.d.ts.map +1 -1
  146. package/dist/liquid-line/definition.render.js +2 -0
  147. package/dist/measurement/definition.edit.d.ts.map +1 -1
  148. package/dist/measurement/definition.edit.js +0 -2
  149. package/dist/measurement/definition.render.d.ts.map +1 -1
  150. package/dist/measurement/definition.render.js +2 -0
  151. package/dist/measurement/floorplan.d.ts.map +1 -1
  152. package/dist/measurement/floorplan.js +2 -3
  153. package/dist/pipe-fitting/definition.edit.d.ts.map +1 -1
  154. package/dist/pipe-fitting/definition.edit.js +0 -2
  155. package/dist/pipe-fitting/definition.render.d.ts.map +1 -1
  156. package/dist/pipe-fitting/definition.render.js +2 -0
  157. package/dist/pipe-segment/continuation-handle.d.ts +9 -0
  158. package/dist/pipe-segment/continuation-handle.d.ts.map +1 -0
  159. package/dist/pipe-segment/continuation-handle.js +35 -0
  160. package/dist/pipe-segment/continuation.d.ts +1 -5
  161. package/dist/pipe-segment/continuation.d.ts.map +1 -1
  162. package/dist/pipe-segment/continuation.js +2 -35
  163. package/dist/pipe-segment/definition.edit.d.ts.map +1 -1
  164. package/dist/pipe-segment/definition.edit.js +0 -2
  165. package/dist/pipe-segment/definition.render.d.ts.map +1 -1
  166. package/dist/pipe-segment/definition.render.js +2 -0
  167. package/dist/pipe-segment/floorplan.js +1 -1
  168. package/dist/pipe-segment/selection.d.ts.map +1 -1
  169. package/dist/pipe-segment/selection.js +2 -1
  170. package/dist/pipe-segment/tool.d.ts.map +1 -1
  171. package/dist/pipe-segment/tool.js +2 -1
  172. package/dist/pipe-trap/definition.edit.d.ts.map +1 -1
  173. package/dist/pipe-trap/definition.edit.js +0 -2
  174. package/dist/pipe-trap/definition.render.d.ts.map +1 -1
  175. package/dist/pipe-trap/definition.render.js +2 -0
  176. package/dist/procedural-item/definition.edit.d.ts.map +1 -1
  177. package/dist/procedural-item/definition.edit.js +1 -54
  178. package/dist/procedural-item/definition.render.d.ts.map +1 -1
  179. package/dist/procedural-item/definition.render.js +55 -2
  180. package/dist/ridge-vent/definition.edit.d.ts.map +1 -1
  181. package/dist/ridge-vent/definition.edit.js +0 -2
  182. package/dist/ridge-vent/definition.render.d.ts.map +1 -1
  183. package/dist/ridge-vent/definition.render.js +2 -0
  184. package/dist/roof/definition.d.ts +1 -1
  185. package/dist/roof/definition.edit.d.ts.map +1 -1
  186. package/dist/roof/definition.edit.js +0 -2
  187. package/dist/roof/definition.render.d.ts.map +1 -1
  188. package/dist/roof/definition.render.js +16 -5
  189. package/dist/roof/floorplan.d.ts.map +1 -1
  190. package/dist/roof/floorplan.js +1 -2
  191. package/dist/roof/renderer.d.ts.map +1 -1
  192. package/dist/roof/renderer.js +10 -5
  193. package/dist/roof-segment/definition.edit.d.ts.map +1 -1
  194. package/dist/roof-segment/definition.edit.js +0 -2
  195. package/dist/roof-segment/definition.render.d.ts.map +1 -1
  196. package/dist/roof-segment/definition.render.js +2 -0
  197. package/dist/separator/definition.edit.d.ts.map +1 -1
  198. package/dist/separator/definition.edit.js +0 -2
  199. package/dist/separator/definition.render.d.ts.map +1 -1
  200. package/dist/separator/definition.render.js +2 -0
  201. package/dist/separator/floorplan.js +1 -1
  202. package/dist/shared/opening-documentation.d.ts +1 -1
  203. package/dist/shared/opening-documentation.d.ts.map +1 -1
  204. package/dist/shared/opening-documentation.js +1 -2
  205. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  206. package/dist/shared/opening-placement-dimensions.js +1 -2
  207. package/dist/shared/scripted-opening.d.ts +8 -1
  208. package/dist/shared/scripted-opening.d.ts.map +1 -1
  209. package/dist/shared/scripted-opening.js +6 -8
  210. package/dist/shelf/definition.edit.d.ts.map +1 -1
  211. package/dist/shelf/definition.edit.js +0 -2
  212. package/dist/shelf/definition.render.d.ts.map +1 -1
  213. package/dist/shelf/definition.render.js +2 -0
  214. package/dist/skylight/definition.edit.d.ts.map +1 -1
  215. package/dist/skylight/definition.edit.js +0 -2
  216. package/dist/skylight/definition.render.d.ts.map +1 -1
  217. package/dist/skylight/definition.render.js +2 -0
  218. package/dist/skylight/panel.js +1 -1
  219. package/dist/slab/definition.edit.d.ts.map +1 -1
  220. package/dist/slab/definition.edit.js +0 -4
  221. package/dist/slab/definition.render.d.ts.map +1 -1
  222. package/dist/slab/definition.render.js +4 -0
  223. package/dist/slab/floorplan.d.ts.map +1 -1
  224. package/dist/slab/floorplan.js +1 -2
  225. package/dist/solar-panel/definition.edit.d.ts.map +1 -1
  226. package/dist/solar-panel/definition.edit.js +0 -2
  227. package/dist/solar-panel/definition.render.d.ts.map +1 -1
  228. package/dist/solar-panel/definition.render.js +2 -0
  229. package/dist/spawn/definition.edit.d.ts.map +1 -1
  230. package/dist/spawn/definition.edit.js +0 -9
  231. package/dist/spawn/definition.render.d.ts.map +1 -1
  232. package/dist/spawn/definition.render.js +2 -0
  233. package/dist/stair/definition.edit.d.ts.map +1 -1
  234. package/dist/stair/definition.edit.js +0 -13
  235. package/dist/stair/definition.render.d.ts.map +1 -1
  236. package/dist/stair/definition.render.js +10 -0
  237. package/dist/stair/documentation.d.ts.map +1 -1
  238. package/dist/stair/documentation.js +1 -2
  239. package/dist/stair/floorplan.d.ts.map +1 -1
  240. package/dist/stair/floorplan.js +1 -2
  241. package/dist/stair/plan-entry.d.ts.map +1 -1
  242. package/dist/stair/plan-entry.js +1 -2
  243. package/dist/structural-grid/definition.edit.d.ts.map +1 -1
  244. package/dist/structural-grid/definition.edit.js +0 -2
  245. package/dist/structural-grid/definition.render.d.ts.map +1 -1
  246. package/dist/structural-grid/definition.render.js +2 -0
  247. package/dist/structural-grid/floorplan.js +1 -1
  248. package/dist/turbine-vent/definition.edit.d.ts.map +1 -1
  249. package/dist/turbine-vent/definition.edit.js +0 -2
  250. package/dist/turbine-vent/definition.render.d.ts.map +1 -1
  251. package/dist/turbine-vent/definition.render.js +2 -0
  252. package/dist/wall/contextual-dimensions.d.ts.map +1 -1
  253. package/dist/wall/contextual-dimensions.js +1 -2
  254. package/dist/wall/definition.edit.d.ts.map +1 -1
  255. package/dist/wall/definition.edit.js +0 -5
  256. package/dist/wall/definition.render.d.ts.map +1 -1
  257. package/dist/wall/definition.render.js +5 -0
  258. package/dist/wall/floorplan.d.ts.map +1 -1
  259. package/dist/wall/floorplan.js +1 -2
  260. package/dist/window/definition.edit.d.ts.map +1 -1
  261. package/dist/window/definition.edit.js +1 -6
  262. package/dist/window/definition.render.d.ts.map +1 -1
  263. package/dist/window/definition.render.js +6 -0
  264. package/dist/window/floorplan.d.ts.map +1 -1
  265. package/dist/window/floorplan.js +1 -2
  266. package/dist/zone/definition.edit.d.ts.map +1 -1
  267. package/dist/zone/definition.edit.js +0 -2
  268. package/dist/zone/definition.render.d.ts.map +1 -1
  269. package/dist/zone/definition.render.js +2 -0
  270. package/dist/zone/floorplan.d.ts.map +1 -1
  271. package/dist/zone/floorplan.js +1 -2
  272. package/dist/zone/room-clear-dimensions.d.ts.map +1 -1
  273. package/dist/zone/room-clear-dimensions.js +1 -2
  274. package/dist/zone/room-documentation.d.ts +1 -2
  275. package/dist/zone/room-documentation.d.ts.map +1 -1
  276. package/dist/zone/room-documentation.js +1 -1
  277. package/package.json +8 -8
@@ -5405,7 +5405,7 @@ export declare const builtinEditContributions: {
5405
5405
  cavityInsulation: import("zod").ZodOptional<import("zod").ZodString>;
5406
5406
  }, import("zod/v4/core").$strip>>;
5407
5407
  slots: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
5408
- children: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodDefault<import("zod").ZodTemplateLiteral<`rseg_${string}`>>>>;
5408
+ children: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
5409
5409
  }, import("zod/v4/core").$strip>>;
5410
5410
  'roof-segment': import("./definition-contributions.js").NodeEditContribution<import("zod").ZodObject<{
5411
5411
  object: import("zod").ZodDefault<import("zod").ZodLiteral<"node">>;
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/cabinet/definition.edit.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAsDvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA4mD9D,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAwC5E,CAAA;AAED,eAAO,MAAM,6BAA6B,EAAE,oBAAoB,CAAC,OAAO,iBAAiB,CA0BxF,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/cabinet/definition.edit.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAqDvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA4mD9D,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAuC5E,CAAA;AAED,eAAO,MAAM,6BAA6B,EAAE,oBAAoB,CAAC,OAAO,iBAAiB,CAyBxF,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { cabinetDuplicateWorldPose, cabinetLocalBounds, composeCabinetDuplicatePose, isCabinetModule, isCabinetRun, } from './definition.render.js';
2
- import { buildCabinetFloorplan, buildCabinetModuleFloorplan } from './floorplan.js';
3
2
  import { cabinetModuleFloorplanMoveTarget } from './floorplan-move.js';
4
3
  import { cabinetFloorplanSiblingOverrides } from './floorplan-overrides.js';
5
4
  import { withCabinetHostedChildren } from './hosted-resize.js';
@@ -1315,7 +1314,6 @@ export const cabinetEditContribution = {
1315
1314
  parametrics: cabinetParametrics,
1316
1315
  handles: (node, sceneApi) => cabinetHandles(node, sceneApi).map(withCabinetHostedChildren),
1317
1316
  placementNotice: cabinetPlacementNotice,
1318
- floorplan: buildCabinetFloorplan,
1319
1317
  floorplanSiblingOverrides: cabinetFloorplanSiblingOverrides,
1320
1318
  floorplanAffectedIds: cabinetFloorplanAffectedIds,
1321
1319
  quickActionNodeScope: 'level',
@@ -1356,7 +1354,6 @@ export const cabinetModuleEditContribution = {
1356
1354
  parametrics: cabinetModuleParametrics,
1357
1355
  handles: () => cabinetModuleHandles().map(withCabinetHostedChildren),
1358
1356
  placementNotice: cabinetPlacementNotice,
1359
- floorplan: buildCabinetModuleFloorplan,
1360
1357
  floorplanSiblingOverrides: cabinetFloorplanSiblingOverrides,
1361
1358
  floorplanAffectedIds: cabinetFloorplanAffectedIds,
1362
1359
  // 2D ↔ 3D parity: module position is run-local, so the generic overlay's
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/cabinet/definition.render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/cabinet/definition.render.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { CABINET_METRIC_DEFAULTS, cabinetSlots, findLevelAncestorId, selectionPr
2
2
  import { findWallOpeningConflicts } from '../shared/wall-opening-clearance.js';
3
3
  import { bakeCabinetAnimationClip } from './animation.js';
4
4
  import { cabinetBatchable } from './batchable.js';
5
+ import { buildCabinetFloorplan, buildCabinetModuleFloorplan } from './floorplan.js';
5
6
  import { buildCabinetGeometry } from './geometry.js';
6
7
  import { cabinetModuleParentFrame } from './move-frame.js';
7
8
  import { resolveCabinetGridPosition } from './placement-snap.js';
@@ -600,6 +601,7 @@ export const cabinetRenderDefinition = {
600
601
  hidden: cabinetTreeHidden,
601
602
  childIds: cabinetTreeChildIds,
602
603
  },
604
+ floorplan: buildCabinetFloorplan,
603
605
  presentation: {
604
606
  label: 'Modular Cabinet',
605
607
  description: 'A configurable parametric base cabinet.',
@@ -738,6 +740,7 @@ export const cabinetModuleRenderDefinition = {
738
740
  selectionProxy: {
739
741
  bypassDirectPick: (node, proxyTarget) => node.type === 'cabinet-module' && proxyTarget.type === 'cabinet',
740
742
  },
743
+ floorplan: buildCabinetModuleFloorplan,
741
744
  presentation: {
742
745
  label: 'Cabinet Module',
743
746
  description: 'An editable module inside a modular cabinet run.',
@@ -1,4 +1,4 @@
1
- import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/editor';
1
+ import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/core';
2
2
  import { GAS_HOB_BURNER_RADIUS, gasHobBurners, inductionZones } from './geometry/cooktop.js';
3
3
  import { FAUCET_SETBACK, sinkBowls } from './geometry/sink.js';
4
4
  import { getRunSpanEnds, getRunSpans } from './run-layout.js';
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/ceiling/definition.edit.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAcvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA+E3C,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAgD5E,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/ceiling/definition.edit.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAavE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA+E3C,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CA+C5E,CAAA"}
@@ -1,7 +1,6 @@
1
1
  import { resolveCeilingHeight, useScene, } from '@pascal-app/core';
2
2
  import { clearStructuralElevationGuide, DRAFTING_SURFACE_EXTENSION_KEY, PANEL_MODEL_EXTENSION, publishStructuralElevationGuide, resolveStructuralElevationSnap, } from '@pascal-app/editor';
3
3
  import { sameOutlineSurfaceCounterparts } from '../shared/surface-counterparts.js';
4
- import { buildCeilingFloorplan } from './floorplan.js';
5
4
  import { ceilingAddVertexAffordance, ceilingDeleteVertexAffordance, ceilingMoveEdgeAffordance, ceilingMoveVertexAffordance, } from './floorplan-affordances.js';
6
5
  import { ceilingFloorplanMoveTarget } from './floorplan-move.js';
7
6
  import { CEILING_HANDLE_MIN_HEIGHT, ceilingHeightRange } from './height-bounds.js';
@@ -102,7 +101,6 @@ export const ceilingEditContribution = {
102
101
  'hole-edit': () => import('./hole-editor.js'),
103
102
  move: () => import('./move-tool.js'),
104
103
  },
105
- floorplan: buildCeilingFloorplan,
106
104
  floorplanDependsOnSiblings: true,
107
105
  // 2D move handler — translates polygon by cursor delta from first
108
106
  // pointer position. Mirror of slab; 3D `MoveCeilingTool` skips
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/ceiling/definition.render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAAC,GAAG;IAC/E,IAAI,EAAE,SAAS,CAAA;CAoEhB,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/ceiling/definition.render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAAC,GAAG;IAC/E,IAAI,EAAE,SAAS,CAAA;CAqEhB,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { ceilingSlots, resolveCeilingHeight, useScene, } from '@pascal-app/core';
2
2
  import { surfaceBatchable } from '../shared/node-batch/batchable.js';
3
3
  import { polygonMeasurementFeatures } from '../shared/polygon-measurement.js';
4
+ import { buildCeilingFloorplan } from './floorplan.js';
4
5
  import { CeilingNode } from './schema.js';
5
6
  export const ceilingRenderDefinition = {
6
7
  kind: 'ceiling',
@@ -58,6 +59,7 @@ export const ceilingRenderDefinition = {
58
59
  module: () => import('./system.js'),
59
60
  priority: 4,
60
61
  },
62
+ floorplan: buildCeilingFloorplan,
61
63
  presentation: {
62
64
  label: 'Ceiling',
63
65
  description: 'A polygon-bounded ceiling surface that hosts ceiling-mounted items.',
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/chimney/definition.edit.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA+M3C,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAuB5E,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/chimney/definition.edit.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AA+M3C,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAsB5E,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { getActiveRoofHeight, } from '@pascal-app/core';
2
- import { buildChimneyFloorplan } from './floorplan.js';
3
2
  import { chimneyPaint } from './paint.js';
4
3
  import { chimneyParametrics } from './parametrics.js';
5
4
  // Side handle offsets in metres. Match the roof-segment values so a
@@ -209,7 +208,6 @@ export const chimneyEditContribution = {
209
208
  },
210
209
  parametrics: chimneyParametrics,
211
210
  handles: chimneyHandles,
212
- floorplan: buildChimneyFloorplan,
213
211
  preview: () => import('./preview.js'),
214
212
  tool: () => import('./tool.js'),
215
213
  toolHints: [
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/chimney/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAgBtC,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAAC,GAAG;IAC/E,IAAI,EAAE,SAAS,CAAA;CA6ChB,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/chimney/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAgBtC,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,CAAC,OAAO,WAAW,CAAC,GAAG;IAC/E,IAAI,EAAE,SAAS,CAAA;CA8ChB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { ChimneyNode as ChimneyNodeSchema } from '@pascal-app/core';
2
+ import { buildChimneyFloorplan } from './floorplan.js';
2
3
  import { ChimneyNode } from './schema.js';
3
4
  // Every fresh chimney starts as plain white (body + top). The paint
4
5
  // flow / material picker writes preset refs or full `MaterialSchema`
@@ -46,6 +47,7 @@ export const chimneyRenderDefinition = {
46
47
  kind: 'parametric',
47
48
  module: () => import('./renderer.js'),
48
49
  },
50
+ floorplan: buildChimneyFloorplan,
49
51
  presentation: {
50
52
  label: 'Chimney',
51
53
  description: 'Vertical masonry stack on a roof segment.',
@@ -198,7 +198,7 @@ export default function ChimneyPanel() {
198
198
  let hi_z = Number.NEGATIVE_INFINITY;
199
199
  for (const childId of roof.children ?? []) {
200
200
  const seg = scenestate.nodes[childId];
201
- if (!seg)
201
+ if (seg?.type !== 'roof-segment')
202
202
  continue;
203
203
  const segObj = sceneRegistry.nodes.get(seg.id);
204
204
  if (!segObj)
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/column/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAYvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA4S1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAsC1E,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/column/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAWvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA4S1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAoC1E,CAAA"}
@@ -2,7 +2,6 @@ import { withHostedChildren } from '../shared/hosted-resize.js';
2
2
  import { rebuildScriptedSize } from '../shared/scripted-opening-handles.js';
3
3
  import { columnFootprintHalf } from './bounds.js';
4
4
  import { columnEditPatch, isManagedColumn } from './edit-policy.js';
5
- import { buildColumnFloorplan, computeColumnFloorplanLevelData } from './floorplan.js';
6
5
  import { columnResizeAffordance, columnRotateAffordance } from './floorplan-affordances.js';
7
6
  import { columnFloorplanMoveTarget } from './floorplan-move.js';
8
7
  import { columnHostedPolicy } from './hosted-resize.js';
@@ -302,9 +301,7 @@ export const columnEditContribution = {
302
301
  { key: 'Left click', label: 'Place column' },
303
302
  { key: 'Esc', label: 'Cancel' },
304
303
  ],
305
- computeFloorplanLevelData: computeColumnFloorplanLevelData,
306
304
  floorplanDependsOnSiblings: true,
307
- floorplan: buildColumnFloorplan,
308
305
  // 2D body move routes through this kind-specific target so the column
309
306
  // aligns by its footprint *edges* (and snaps flush to wall faces) instead
310
307
  // of the overlay's generic free-translate path, which aligned by bbox
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/column/definition.render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAQvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAerC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAuE5F,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/column/definition.render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AASvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAerC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAyE5F,CAAA"}
@@ -3,6 +3,7 @@ import { columnBatchable } from '../shared/node-batch/batchable.js';
3
3
  import { collectStructuralGridAxes, resolveStructuralGridSnap, } from '../structural-grid/coordination.js';
4
4
  import { columnFootprintHalf } from './bounds.js';
5
5
  import { isManagedColumn } from './edit-policy.js';
6
+ import { buildColumnFloorplan, computeColumnFloorplanLevelData } from './floorplan.js';
6
7
  import { ColumnNode } from './schema.js';
7
8
  import { columnSurfaceProvider } from './surface.js';
8
9
  function resolveColumnStructuralGridMoveSnap({ candidatePosition, nodes, levelId, }) {
@@ -68,6 +69,8 @@ export const columnRenderDefinition = {
68
69
  kind: 'parametric',
69
70
  module: () => import('./renderer.js'),
70
71
  },
72
+ computeFloorplanLevelData: computeColumnFloorplanLevelData,
73
+ floorplan: buildColumnFloorplan,
71
74
  presentation: {
72
75
  label: 'Column',
73
76
  description: 'A parametric column with configurable cross-section, base, and capital.',
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/column/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAExB,MAAM,kBAAkB,CAAA;AAwBzB,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,EAAE,kBAAkB,EAAE,CAAA;CACtC,CAAA;AAED,wBAAgB,+BAA+B,CAAC,EAC9C,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,wBAAwB,CAI3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAoP1B;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,CAiB9E"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/column/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAExB,MAAM,kBAAkB,CAAA;AAuBzB,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,EAAE,kBAAkB,EAAE,CAAA;CACtC,CAAA;AAED,wBAAgB,+BAA+B,CAAC,EAC9C,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,wBAAwB,CAI3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAoP1B;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,CAiB9E"}
@@ -1,5 +1,4 @@
1
- import { scriptImages, } from '@pascal-app/core';
2
- import { floorplanGeometryMetadata } from '@pascal-app/editor';
1
+ import { floorplanGeometryMetadata, scriptImages, } from '@pascal-app/core';
3
2
  import { collectStructuralGridAxes, resolveStructuralGridReference, } from '../structural-grid/coordination.js';
4
3
  import { columnFootprintHalf } from './bounds.js';
5
4
  import { isManagedColumn } from './edit-policy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/column/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,YAAY,EAMjB,QAAQ,EACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAEL,KAAK,WAAW,EAShB,KAAK,aAAa,EAKnB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAsD,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AAYzF,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAA;AAgDvE,wBAAgB,yBAAyB,CAAC,EACxC,WAAW,EACX,cAAc,EACd,IAAI,EACJ,cAAc,EACd,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE;IACD,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;CAClB,GAAG,QAAQ,CAeX;AAszDD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,aAAc;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,gCA6C3D,CAAA;AAED,eAAO,MAAM,cAAc,sBAAuB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,gCA6ErE,CAAA;eAEc,cAAc"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/column/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,YAAY,EAMjB,QAAQ,EACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAEL,KAAK,WAAW,EAShB,KAAK,aAAa,EAKnB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAsD,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AAYzF,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAA;AAgDvE,wBAAgB,yBAAyB,CAAC,EACxC,WAAW,EACX,cAAc,EACd,IAAI,EACJ,cAAc,EACd,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE;IACD,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;CAClB,GAAG,QAAQ,CAeX;AAszDD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,aAAc;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,gCA6C3D,CAAA;AAED,eAAO,MAAM,cAAc,sBAAuB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,gCAiFrE,CAAA;eAEc,cAAc"}
@@ -911,6 +911,6 @@ export const ColumnRenderer = ({ node: rawNode }) => {
911
911
  dirtySubtree();
912
912
  });
913
913
  }, [node]);
914
- return (_jsx(ColumnMaterialContext.Provider, { value: materials, children: _jsxs(ColumnEdgeSoftnessContext.Provider, { value: node.edgeSoftness ?? 0.025, children: [_jsxs("group", { position: liveTransform?.position ?? node.position, ref: ref, rotation: [0, liveTransform?.rotation ?? node.rotation, 0], visible: node.visible, userData: modelData, ...handlers, children: [_jsx("group", { ref: bodyRef, name: "column-body", children: node.source ? _jsx(ScriptedOpeningModel, { node: node }) : _jsx(ColumnBody, { node: node }) }), node.children.map((id) => (_jsx(NodeRenderer, { nodeId: id }, id)))] }), _jsx(ColumnInspectorOverlay, { nodeId: node.id, body: bodyRef, node: node, position: liveTransform?.position ?? node.position, rotation: liveTransform?.rotation ?? node.rotation })] }) }));
914
+ return (_jsx(ColumnMaterialContext.Provider, { value: materials, children: _jsxs(ColumnEdgeSoftnessContext.Provider, { value: node.edgeSoftness ?? 0.025, children: [_jsxs("group", { position: liveTransform?.position ?? node.position, ref: ref, rotation: [0, liveTransform?.rotation ?? node.rotation, 0], visible: node.visible, userData: modelData, ...handlers, children: [_jsx("group", { ref: bodyRef, name: "column-body", children: node.source ? (_jsx(ScriptedOpeningModel, { host: ref, node: node })) : (_jsx(ColumnBody, { node: node })) }), node.children.map((id) => (_jsx(NodeRenderer, { nodeId: id }, id)))] }), _jsx(ColumnInspectorOverlay, { nodeId: node.id, body: bodyRef, node: node, position: liveTransform?.position ?? node.position, rotation: liveTransform?.rotation ?? node.rotation })] }) }));
915
915
  };
916
916
  export default ColumnRenderer;
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/definition.edit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAQvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAEzD,eAAO,MAAM,qCAAqC,EAAE,oBAAoB,CACtE,OAAO,yBAAyB,CA2BjC,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/definition.edit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAOvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAEzD,eAAO,MAAM,qCAAqC,EAAE,oBAAoB,CACtE,OAAO,yBAAyB,CA0BjC,CAAA"}
@@ -1,6 +1,5 @@
1
1
  import { measurementAnchorReferenceNodeIds } from '@pascal-app/core';
2
2
  import { resolveConstructionDimensionForDrawing } from './drawing-coordination.js';
3
- import { buildConstructionDimensionFloorplan } from './floorplan.js';
4
3
  import { moveConstructionDimensionBaselineAffordance, moveConstructionDimensionWitnessAffordance, } from './floorplan-affordances.js';
5
4
  import { constructionDimensionParametrics } from './parametrics.js';
6
5
  export const constructionDimensionEditContribution = {
@@ -13,7 +12,6 @@ export const constructionDimensionEditContribution = {
13
12
  },
14
13
  snapProfile: 'item',
15
14
  parametrics: constructionDimensionParametrics,
16
- floorplan: buildConstructionDimensionFloorplan,
17
15
  floorplanDependencies: (node) => [
18
16
  ...measurementAnchorReferenceNodeIds(node.anchors),
19
17
  ...(node.controllingDimensionId ? [node.controllingDimensionId] : []),
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,qCAAqC,EAAE,oBAAoB,CACtE,OAAO,yBAAyB,CACjC,GAAG;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAoDnC,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,qCAAqC,EAAE,oBAAoB,CACtE,OAAO,yBAAyB,CACjC,GAAG;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAqDnC,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { buildConstructionDimensionFloorplan } from './floorplan.js';
1
2
  import { ConstructionDimensionNode } from './schema.js';
2
3
  export const constructionDimensionRenderDefinition = {
3
4
  kind: 'construction-dimension',
@@ -40,6 +41,7 @@ export const constructionDimensionRenderDefinition = {
40
41
  presettable: false,
41
42
  },
42
43
  dirtyTracking: false,
44
+ floorplan: buildConstructionDimensionFloorplan,
43
45
  presentation: {
44
46
  label: 'Construction Dimension',
45
47
  description: 'Associative linear, curved, circular, angular, or coordinate plan dimension.',
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan-tool.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/floorplan-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAI9B,KAAK,iBAAiB,EAKtB,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAIL,KAAK,oBAAoB,EAU1B,MAAM,oBAAoB,CAAA;AAY3B,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,CAAA;CAChC,CAAA;AA2ED,wBAAgB,0CAA0C,CACxD,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,OAAO,CAAC,EAAE,SAAS,iBAAiB,EAAE,EACtC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAC3C,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAUzB;AAED,wBAAgB,2CAA2C,CACzD,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,aAAa,EAAE,gBAAgB,EAC/B,IAAI,EAAE,QAAQ,GAAG,UAAU,EAC3B,IAAI,GAAE,yBAAoC,EAC1C,cAAc,GAAE,QAAQ,GAAG,aAAwB,EACnD,iBAAiB,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GACnD,iBAAiB,EAAE,CAqLrB;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,OAAO,GACb,8BAA8B,CAEhC;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CAY5F;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAE1F;AAED,wBAAgB,8CAA8C,CAAC,KAAK,EAAE;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAGV;AAcD,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,yBAAyB,GAC9B,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG,IAAI,CA6B1C;AAED,wBAAgB,uCAAuC,CAAC,EACtD,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,IAAI,GACL,EAAE,oBAAoB,sCAqVtB;eAEc,uCAAuC"}
1
+ {"version":3,"file":"floorplan-tool.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/floorplan-tool.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAEd,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAI9B,KAAK,iBAAiB,EAMtB,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,KAAK,oBAAoB,EAS1B,MAAM,oBAAoB,CAAA;AAY3B,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,CAAA;CAChC,CAAA;AA2ED,wBAAgB,0CAA0C,CACxD,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,OAAO,CAAC,EAAE,SAAS,iBAAiB,EAAE,EACtC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAC3C,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAUzB;AAED,wBAAgB,2CAA2C,CACzD,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,aAAa,EAAE,gBAAgB,EAC/B,IAAI,EAAE,QAAQ,GAAG,UAAU,EAC3B,IAAI,GAAE,yBAAoC,EAC1C,cAAc,GAAE,QAAQ,GAAG,aAAwB,EACnD,iBAAiB,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GACnD,iBAAiB,EAAE,CAqLrB;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,OAAO,GACb,8BAA8B,CAEhC;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CAY5F;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAE1F;AAED,wBAAgB,8CAA8C,CAAC,KAAK,EAAE;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAGV;AAcD,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,yBAAyB,GAC9B,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG,IAAI,CA6B1C;AAED,wBAAgB,uCAAuC,CAAC,EACtD,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,IAAI,GACL,EAAE,oBAAoB,sCAqVtB;eAEc,uCAAuC"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ConstructionDimensionNode, closestMeasurementFeatureBinding, constructionDimensionRequiredAnchorCount, formatLinearMeasurement, getWallArcData, getWallCurveFrameAt, nodeRegistry, } from '@pascal-app/core';
4
- import { buildSvgArcPath, clearSurfacePlanSnapFeedback, FloorplanGeometryRenderer, getArcPlanPoint, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, resolveSurfacePlanPointSnap, triggerSFX, useDrawingView, useFloorplanRender, useInteractionScope, } from '@pascal-app/editor';
3
+ import { buildSvgArcPath, ConstructionDimensionNode, closestMeasurementFeatureBinding, constructionDimensionRequiredAnchorCount, formatLinearMeasurement, getArcPlanPoint, getWallArcData, getWallCurveFrameAt, nodeRegistry, } from '@pascal-app/core';
4
+ import { clearSurfacePlanSnapFeedback, FloorplanGeometryRenderer, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, resolveSurfacePlanPointSnap, triggerSFX, useDrawingView, useFloorplanRender, useInteractionScope, } from '@pascal-app/editor';
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
  import { alignConstructionDimensionDirectionToSharedWall, resolveCircularConstructionDimensionLayout, } from './geometry.js';
7
7
  const SEMANTIC_SNAP_DISTANCE = 0.2;
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,yBAAyB,EACzB,iBAAiB,EAGjB,eAAe,EAIhB,MAAM,kBAAkB,CAAA;AA6BzB,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,yBAAyB,EAC/B,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAiF1B"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/construction-dimension/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,yBAAyB,EACzB,iBAAiB,EAGjB,eAAe,EAIhB,MAAM,kBAAkB,CAAA;AA2BzB,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,yBAAyB,EAC/B,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAiF1B"}
@@ -1,5 +1,4 @@
1
- import { constructionDimensionRequiredAnchorCount, getWallArcData, getWallCurveFrameAt, getWallLocalFaceZ, } from '@pascal-app/core';
2
- import { readFloorplanContext, readFloorplanMetricNotationOverride, withFloorplanGeometryMetadata, } from '@pascal-app/editor';
1
+ import { constructionDimensionRequiredAnchorCount, getWallArcData, getWallCurveFrameAt, getWallLocalFaceZ, readFloorplanContext, readFloorplanMetricNotationOverride, withFloorplanGeometryMetadata, } from '@pascal-app/core';
3
2
  import { resolveMeasurementAnchor } from '../measurement/resolve.js';
4
3
  import { formatConstructionLength, } from '../shared/construction-length.js';
5
4
  import { buildDimensionStringGeometry } from '../shared/dimension-string.js';
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/cupola/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAgG1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAiB1E,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/cupola/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAgG1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAgB1E,CAAA"}
@@ -1,4 +1,3 @@
1
- import { buildCupolaFloorplan } from './floorplan.js';
2
1
  import { cupolaPaint } from './paint.js';
3
2
  import { cupolaParametrics } from './parametrics.js';
4
3
  const SIDE_HANDLE_OFFSET = 0.3;
@@ -90,7 +89,6 @@ export const cupolaEditContribution = {
90
89
  },
91
90
  parametrics: cupolaParametrics,
92
91
  handles: cupolaHandles,
93
- floorplan: buildCupolaFloorplan,
94
92
  preview: () => import('./preview.js'),
95
93
  tool: () => import('./tool.js'),
96
94
  affordanceTools: {
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/cupola/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CA0C5F,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/cupola/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CA2C5F,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { CUPOLA_LOUVERS_DEFAULT, CupolaNode as CupolaNodeSchema, cupolaSlots, } from '@pascal-app/core';
2
+ import { buildCupolaFloorplan } from './floorplan.js';
2
3
  import { CupolaNode } from './schema.js';
3
4
  export const cupolaRenderDefinition = {
4
5
  kind: 'cupola',
@@ -30,6 +31,7 @@ export const cupolaRenderDefinition = {
30
31
  kind: 'parametric',
31
32
  module: () => import('./renderer.js'),
32
33
  },
34
+ floorplan: buildCupolaFloorplan,
33
35
  presentation: {
34
36
  label: 'Cupola',
35
37
  description: 'Louvered roof lantern with a dome or pyramid cap and optional finial.',
@@ -1,6 +1,6 @@
1
1
  import type { AnyNodeDefinition, NodeDefinition } from '@pascal-app/core';
2
2
  type NodeSchema = AnyNodeDefinition['schema'];
3
- type EditField = 'extensions' | 'facingIndicator' | 'drafting' | 'connectedMove' | 'parametrics' | 'placementNotice' | 'quickActions' | 'quickActionNodeScope' | 'tool' | 'affordanceTools' | 'affordances' | 'toolHints' | 'affordanceHints' | 'toolOptions' | 'snapProfile' | 'snapDraftDirectional' | 'preview' | 'keyboardActions' | 'handles' | 'computeFloorplanLevelData' | 'floorplan' | 'floorplanDependencies' | 'floorplanScope' | 'floorplanDependsOnSiblings' | 'floorplanAffectedIds' | 'floorplanSiblingOverrides' | 'floorplanAffordances' | 'floorplanMoveTarget';
3
+ type EditField = 'extensions' | 'facingIndicator' | 'drafting' | 'connectedMove' | 'parametrics' | 'placementNotice' | 'quickActions' | 'quickActionNodeScope' | 'tool' | 'affordanceTools' | 'affordances' | 'toolHints' | 'affordanceHints' | 'toolOptions' | 'snapProfile' | 'snapDraftDirectional' | 'preview' | 'keyboardActions' | 'handles' | 'floorplanDependencies' | 'floorplanDependsOnSiblings' | 'floorplanAffectedIds' | 'floorplanSiblingOverrides' | 'floorplanAffordances' | 'floorplanMoveTarget';
4
4
  type Capabilities<S extends NodeSchema> = NonNullable<NodeDefinition<S>['capabilities']>;
5
5
  export type NodeRenderDefinition<S extends NodeSchema> = Omit<NodeDefinition<S>, EditField | 'capabilities'> & {
6
6
  capabilities: Omit<Capabilities<S>, 'paint'>;
@@ -1 +1 @@
1
- {"version":3,"file":"definition-contributions.d.ts","sourceRoot":"","sources":["../src/definition-contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEzE,KAAK,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAE7C,KAAK,SAAS,GACV,YAAY,GACZ,iBAAiB,GACjB,UAAU,GACV,eAAe,GACf,aAAa,GACb,iBAAiB,GACjB,cAAc,GACd,sBAAsB,GACtB,MAAM,GACN,iBAAiB,GACjB,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,sBAAsB,GACtB,SAAS,GACT,iBAAiB,GACjB,SAAS,GACT,2BAA2B,GAC3B,WAAW,GACX,uBAAuB,GACvB,gBAAgB,GAChB,4BAA4B,GAC5B,sBAAsB,GACtB,2BAA2B,GAC3B,sBAAsB,GACtB,qBAAqB,CAAA;AAEzB,KAAK,YAAY,CAAC,CAAC,SAAS,UAAU,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;AAExF,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,UAAU,IAAI,IAAI,CAC3D,cAAc,CAAC,CAAC,CAAC,EACjB,SAAS,GAAG,cAAc,CAC3B,GAAG;IAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;CAAE,CAAA;AAGpD,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,UAAU,IAAI,OAAO,CAC9D,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAChD,GAAG;IAAE,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC,CAAA;CAAE,CAAA;AAEpE,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,UAAU,EACxD,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC/B,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC5B,cAAc,CAAC,CAAC,CAAC,CAMnB"}
1
+ {"version":3,"file":"definition-contributions.d.ts","sourceRoot":"","sources":["../src/definition-contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEzE,KAAK,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAE7C,KAAK,SAAS,GACV,YAAY,GACZ,iBAAiB,GACjB,UAAU,GACV,eAAe,GACf,aAAa,GACb,iBAAiB,GACjB,cAAc,GACd,sBAAsB,GACtB,MAAM,GACN,iBAAiB,GACjB,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,sBAAsB,GACtB,SAAS,GACT,iBAAiB,GACjB,SAAS,GACT,uBAAuB,GACvB,4BAA4B,GAC5B,sBAAsB,GACtB,2BAA2B,GAC3B,sBAAsB,GACtB,qBAAqB,CAAA;AAEzB,KAAK,YAAY,CAAC,CAAC,SAAS,UAAU,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;AAExF,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,UAAU,IAAI,IAAI,CAC3D,cAAc,CAAC,CAAC,CAAC,EACjB,SAAS,GAAG,cAAc,CAC3B,GAAG;IAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;CAAE,CAAA;AAGpD,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,UAAU,IAAI,OAAO,CAC9D,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAChD,GAAG;IAAE,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC,CAAA;CAAE,CAAA;AAEpE,yFAAyF;AACzF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,UAAU,EACxD,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC/B,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC5B,cAAc,CAAC,CAAC,CAAC,CAMnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/door/definition.edit.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAqBvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAiMxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CA2DtE,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/door/definition.edit.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAiBvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAiMxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAuDtE,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { getDoorOpeningSize } from '@pascal-app/core';
2
2
  import { curtainOpeningResizeMax } from '../shared/curtain-opening-limits.js';
3
- import { buildDoorFloorplanSchedule, computeDoorFloorplanLevelData, } from '../shared/opening-documentation.js';
3
+ import { buildDoorFloorplanSchedule } from '../shared/opening-documentation.js';
4
4
  import { publishOpeningResizeGuides } from '../shared/opening-guides-runtime.js';
5
5
  import { createOpeningPropertyPreview } from '../shared/opening-property-preview.js';
6
6
  import { openingPropertyPreviewHost } from '../shared/opening-property-preview-host.js';
@@ -10,7 +10,6 @@ import { readHostWallCeiling, readHostWallCeilingMaxWidth } from '../shared/wall
10
10
  import { wallFloorplanSiblingOverrides } from '../wall/floorplan-overrides.js';
11
11
  import { buildDoorContextualDimensions } from './contextual-dimensions.js';
12
12
  import { scaleHandleHeight } from './door-math.js';
13
- import { buildDoorFloorplan } from './floorplan.js';
14
13
  import { doorWidthAffordance } from './floorplan-affordances.js';
15
14
  import { doorFloorplanMoveTarget } from './floorplan-move.js';
16
15
  import { doorPaint } from './paint.js';
@@ -204,10 +203,6 @@ export const doorEditContribution = {
204
203
  ? [doorMoveHandle(), ...scriptedOpeningHandles(node, doorWidthHandle, doorHeightHandle)]
205
204
  : doorHandles,
206
205
  preview: () => import('./preview.js'),
207
- // Stage C: floor-plan polygon. Needs ctx.parent (the wall) to compute
208
- // direction + perpendicular for the cutout footprint.
209
- floorplan: buildDoorFloorplan,
210
- computeFloorplanLevelData: computeDoorFloorplanLevelData,
211
206
  floorplanDependsOnSiblings: true,
212
207
  // Opening symbols position from `ctx.parent` (the host wall); merge the
213
208
  // walls' live drag overrides so the symbol tracks a wall / group drag in
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/door/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAiFxF,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/door/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAOvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAqFxF,CAAA"}
@@ -1,8 +1,10 @@
1
1
  import { doorSlots } from '@pascal-app/core';
2
2
  import { NEW_DOOR_FRAME_THICKNESS } from '@pascal-app/core/building';
3
3
  import { doorBatchable } from '../shared/node-batch/batchable.js';
4
+ import { computeDoorFloorplanLevelData } from '../shared/opening-documentation.js';
4
5
  import { buildRoofWallOpeningCut } from '../shared/roof-wall-opening-cut.js';
5
6
  import { openingSeenFromOutside } from '../wall/exterior.js';
7
+ import { buildDoorFloorplan } from './floorplan.js';
6
8
  import { doorMechanism } from './mechanism.js';
7
9
  import { DoorNode } from './schema.js';
8
10
  export const doorRenderDefinition = {
@@ -75,6 +77,10 @@ export const doorRenderDefinition = {
75
77
  // before wall mitering at 4).
76
78
  priority: 3,
77
79
  },
80
+ // Stage C: floor-plan polygon. Needs ctx.parent (the wall) to compute
81
+ // direction + perpendicular for the cutout footprint.
82
+ floorplan: buildDoorFloorplan,
83
+ computeFloorplanLevelData: computeDoorFloorplanLevelData,
78
84
  presentation: {
79
85
  label: 'Door',
80
86
  description: 'A door cut into a wall. Animated open/close state.',
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/door/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EAEjB,eAAe,EAEhB,MAAM,kBAAkB,CAAA;AAezB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CA+1BjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/door/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EAEjB,eAAe,EAEhB,MAAM,kBAAkB,CAAA;AAiBzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CA+1BjG"}
@@ -1,5 +1,4 @@
1
- import { getDoorOpeningSize, getWallBodyCenterOffset, openingHostFacing } from '@pascal-app/core';
2
- import { readFloorplanContext, readFloorplanGeometryMetadata, withFloorplanGeometryMetadata, } from '@pascal-app/editor';
1
+ import { getDoorOpeningSize, getWallBodyCenterOffset, openingHostFacing, readFloorplanContext, readFloorplanGeometryMetadata, withFloorplanGeometryMetadata, } from '@pascal-app/core';
3
2
  import { buildOpeningCasingPlan } from '../shared/opening-casing.js';
4
3
  import { buildOpeningMarkAnnotation, } from '../shared/opening-documentation.js';
5
4
  import { buildOpeningPlacementDimensions } from '../shared/opening-placement-dimensions.js';
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAuM1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAyB1E,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAuM1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAwB1E,CAAA"}
@@ -1,4 +1,3 @@
1
- import { buildDormerFloorplan } from './floorplan.js';
2
1
  import { dormerPaint } from './paint.js';
3
2
  import { dormerParametrics } from './parametrics.js';
4
3
  const SIDE_HANDLE_OFFSET = 0.25;
@@ -203,7 +202,6 @@ export const dormerEditContribution = {
203
202
  },
204
203
  parametrics: dormerParametrics,
205
204
  handles: dormerHandles,
206
- floorplan: buildDormerFloorplan,
207
205
  preview: () => import('./preview.js'),
208
206
  tool: () => import('./tool.js'),
209
207
  toolHints: [
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAkD5F,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAmD5F,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { DormerNode as DormerNodeSchema, } from '@pascal-app/core';
2
2
  import { buildDormerRoofCut } from './csg-geometry.js';
3
+ import { buildDormerFloorplan } from './floorplan.js';
3
4
  import { DormerNode } from './schema.js';
4
5
  export const dormerRenderDefinition = {
5
6
  kind: 'dormer',
@@ -39,6 +40,7 @@ export const dormerRenderDefinition = {
39
40
  kind: 'parametric',
40
41
  module: () => import('./renderer.js'),
41
42
  },
43
+ floorplan: buildDormerFloorplan,
42
44
  presentation: {
43
45
  label: 'Dormer',
44
46
  description: 'House-shaped protrusion on a roof segment.',
@@ -43,7 +43,7 @@ export function DormerPositionSection({ node, segment, roof, selectedId, preview
43
43
  let hi_z = Number.NEGATIVE_INFINITY;
44
44
  for (const childId of roof.children ?? []) {
45
45
  const seg = state.nodes[childId];
46
- if (!seg)
46
+ if (seg?.type !== 'roof-segment')
47
47
  continue;
48
48
  const segObj = sceneRegistry.nodes.get(seg.id);
49
49
  if (!segObj)
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/duct-fitting/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAMvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CA2CpF,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/duct-fitting/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CA0CpF,CAAA"}
@@ -1,7 +1,6 @@
1
1
  import { ductBodyPaint } from '../shared/duct-body-paint.js';
2
2
  import { rotateFittingNode } from '../shared/fitting-rotation.js';
3
3
  import { ductFittingToolOptions } from '../shared/fitting-tool-options.js';
4
- import { buildDuctFittingFloorplan } from './floorplan.js';
5
4
  import { ductFittingParametrics } from './parametrics.js';
6
5
  export const ductFittingEditContribution = {
7
6
  snapProfile: 'item',
@@ -9,7 +8,6 @@ export const ductFittingEditContribution = {
9
8
  paint: ductBodyPaint,
10
9
  },
11
10
  parametrics: ductFittingParametrics,
12
- floorplan: buildDuctFittingFloorplan,
13
11
  // R/T rotate a selected fitting ±45° around the shared active axis.
14
12
  // The default editor rotate only knows Y; fittings need X/Z for
15
13
  // risers, so this overrides it. Alt-cycling of the axis + the axis
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/duct-fitting/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;CAgFrB,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/duct-fitting/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;CAiFrB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { ductBodySlots } from '@pascal-app/core';
2
+ import { buildDuctFittingFloorplan } from './floorplan.js';
2
3
  import { buildDuctFittingGeometry } from './geometry.js';
3
4
  import { getDuctFittingPorts } from './ports.js';
4
5
  import { DuctFittingNode } from './schema.js';
@@ -69,6 +70,7 @@ export const ductFittingRenderDefinition = {
69
70
  n.slots,
70
71
  ]),
71
72
  ports: getDuctFittingPorts,
73
+ floorplan: buildDuctFittingFloorplan,
72
74
  presentation: {
73
75
  label: 'Duct Fitting',
74
76
  description: 'Elbow, tee, reducer, or square-to-round transition connecting duct runs.',
@@ -0,0 +1,8 @@
1
+ import type { AnyNode, DuctSegmentNode } from '@pascal-app/core';
2
+ import type { ScenePort } from '@pascal-app/editor/distribution';
3
+ import { type RunContinuationHandlePlan } from '../shared/elbow-branch-continuation.js';
4
+ export type DuctEndpoint = 'start' | 'end';
5
+ export declare function ductEndpointPort(duct: DuctSegmentNode, endpoint: DuctEndpoint): ScenePort | null;
6
+ export declare function ductContinuationHandlePoint(duct: DuctSegmentNode, endpoint: DuctEndpoint, gap?: number): [number, number, number] | null;
7
+ export declare function ductContinuationHandlePlan(duct: DuctSegmentNode, endpoint: DuctEndpoint, nodes: Readonly<Record<string, AnyNode>>, gap?: number): RunContinuationHandlePlan | null;
8
+ //# sourceMappingURL=continuation-handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-handle.d.ts","sourceRoot":"","sources":["../../src/duct-segment/continuation-handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,qCAAqC,CAAA;AAG5C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,CAAA;AAE1C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAkBhG;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,YAAY,EACtB,GAAG,SAAO,GACT,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQjC;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,GAAG,SAAO,GACT,yBAAyB,GAAG,IAAI,CAGlC"}