@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
@@ -1,4 +1,3 @@
1
- import { buildSpawnFloorplan } from './floorplan.js';
2
1
  import { spawnRotateAffordance } from './floorplan-affordances.js';
3
2
  import { spawnFloorplanMoveTarget } from './floorplan-move.js';
4
3
  import { spawnParametrics } from './parametrics.js';
@@ -43,14 +42,6 @@ export const spawnEditContribution = {
43
42
  snapProfile: 'item',
44
43
  parametrics: spawnParametrics,
45
44
  handles: [spawnRotateHandle(), spawnMoveHandle()],
46
- // Stage C migration: floor-plan rendering via def.floorplan.
47
- // floorplan-panel.tsx's `floorplanSpawnEntries` short-circuits to []
48
- // when `nodeRegistry.has('spawn')`, so this builder is the single
49
- // path. FloorplanRegistryLayer renders + handles click-to-select;
50
- // FloorplanRegistryActionMenu handles move / duplicate (disabled) /
51
- // delete. Legacy spawn click handlers in FloorplanNodeLayer become
52
- // dead code once Phase 6 cleanup removes the [] entries path.
53
- floorplan: buildSpawnFloorplan,
54
45
  floorplanMoveTarget: spawnFloorplanMoveTarget,
55
46
  floorplanAffordances: {
56
47
  'spawn-rotate': spawnRotateAffordance,
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CA8C3F,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CA+C3F,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { buildSpawnFloorplan } from './floorplan.js';
1
2
  import { SpawnNode } from './schema.js';
2
3
  export const spawnRenderDefinition = {
3
4
  kind: 'spawn',
@@ -35,6 +36,7 @@ export const spawnRenderDefinition = {
35
36
  kind: 'parametric',
36
37
  module: () => import('./renderer.js'),
37
38
  },
39
+ floorplan: buildSpawnFloorplan,
38
40
  presentation: {
39
41
  label: 'Spawn Point',
40
42
  description: 'Player or camera origin within a level. One per level.',
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/stair/definition.edit.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAavE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA8XzC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CA2DxE,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/stair/definition.edit.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAYvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA8XzC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CA8CxE,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { computeStairSegmentFloorStackTransforms, planStairSweepEdit, resolveStairTotalRise, resolveStairWinder, useScene, } from '@pascal-app/core';
2
- import { buildStairFloorplan } from './floorplan.js';
3
2
  import { curvedStairInnerRadiusAffordance, curvedStairSweepAffordance, curvedStairWidthAffordance, segmentLengthAffordance, segmentWidthAffordance, stairRotateAffordance, } from './floorplan-affordances.js';
4
3
  import { stairFloorplanMoveTarget } from './floorplan-move.js';
5
4
  import { stairPaint } from './paint.js';
@@ -317,11 +316,6 @@ function stairHandles(node) {
317
316
  return handles;
318
317
  }
319
318
  export const stairEditContribution = {
320
- extensions: {
321
- 'pascal:editor/floorplan': {
322
- linkedLevelIds: (node) => node.toLevelId && node.toLevelId !== node.parentId ? [node.toLevelId] : [],
323
- },
324
- },
325
319
  snapProfile: 'structural',
326
320
  // A footprint with a clear front: you approach a stair from the low end,
327
321
  // which sits on the -Z side of the run (the run ascends along +Z). Show the
@@ -348,13 +342,6 @@ export const stairEditContribution = {
348
342
  tool: () => import('./tool.js'),
349
343
  parametrics: stairParametrics,
350
344
  handles: stairHandles,
351
- // Stage C — stair is the parent; it walks its `stair-segment` children
352
- // via `ctx.children` and emits the whole stack as one registry entry.
353
- // Each flight's transform depends on every prior sibling's
354
- // `length` / `height` / `attachmentSide`, so individual segments can't
355
- // compute their own polygon in isolation. See
356
- // `nodes/src/stair/floorplan.ts` for the emitter.
357
- floorplan: buildStairFloorplan,
358
345
  floorplanMoveTarget: stairFloorplanMoveTarget,
359
346
  // 2D drag affordances mirror the 3D in-world arrows on selected stairs:
360
347
  // - `segment-width` / `segment-length` drive per-segment side & length
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/stair/definition.render.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAgE3F,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/stair/definition.render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CA0E3F,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { getStairFloorPlacedFootprints, StairNode as StairNodeSchema, stairFootprintAABB, stairSlots, } from '@pascal-app/core';
2
+ import { buildStairFloorplan } from './floorplan.js';
2
3
  import { StairNode } from './schema.js';
3
4
  export const stairRenderDefinition = {
4
5
  kind: 'stair',
@@ -52,6 +53,15 @@ export const stairRenderDefinition = {
52
53
  module: () => import('./system.js'),
53
54
  priority: 3,
54
55
  },
56
+ // Stage C — stair is the parent; it walks its `stair-segment` children
57
+ // via `ctx.children` and emits the whole stack as one registry entry.
58
+ // Each flight's transform depends on every prior sibling's
59
+ // `length` / `height` / `attachmentSide`, so individual segments can't
60
+ // compute their own polygon in isolation. See
61
+ // `nodes/src/stair/floorplan.ts` for the emitter.
62
+ floorplan: buildStairFloorplan,
63
+ // A stair that climbs to an upper floor shows on that floor's plan too.
64
+ floorplanLinkedLevelIds: (node) => node.toLevelId && node.toLevelId !== node.parentId ? [node.toLevelId] : [],
55
65
  presentation: {
56
66
  label: 'Stair',
57
67
  description: 'A stair composed of one or more flights with configurable treads, risers, railings.',
@@ -1 +1 @@
1
- {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../../src/stair/documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAKpB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAOzB,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EAEpB,MAAM,cAAc,CAAA;AAUrB,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAAA;AAE9C,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACvC,kBAAkB,CAUpB;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,kBAAkB,GAC5B,wBAAwB,GAAG,IAAI,CA0BjC;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,eAAe,GACnB,iBAAiB,EAAE,CAYrB"}
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../../src/stair/documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAMpB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAMzB,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EAEpB,MAAM,cAAc,CAAA;AAUrB,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAAA;AAE9C,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACvC,kBAAkB,CAUpB;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,kBAAkB,GAC5B,wBAAwB,GAAG,IAAI,CA0BjC;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,eAAe,GACnB,iBAAiB,EAAE,CAYrB"}
@@ -1,5 +1,4 @@
1
- import { resolveStairArcDimensions, resolveStairTotalRise, resolveStairWinder, useScene, } from '@pascal-app/core';
2
- import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/editor';
1
+ import { floorplanGeometryMetadata, readFloorplanContext, resolveStairArcDimensions, resolveStairTotalRise, resolveStairWinder, useScene, } from '@pascal-app/core';
3
2
  import { formatConstructionLength, } from '../shared/construction-length.js';
4
3
  const ANNOTATION_OFFSET = 0.28;
5
4
  const ANNOTATION_FONT_SIZE = 0.125;
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/stair/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,SAAS,EAEV,MAAM,kBAAkB,CAAA;AAiCzB,oEAAoE;AACpE,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,EACnB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAoiB1B"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/stair/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,SAAS,EAEV,MAAM,kBAAkB,CAAA;AA+BzB,oEAAoE;AACpE,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,EACnB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAoiB1B"}
@@ -1,10 +1,9 @@
1
- import { computeSegmentTransforms, measureStairDetail, resolveStairArcDimensions, resolveStairHandrailPaths, resolveStairRailPaths, resolveStairWalkingPaths, rotateXZ, } from '@pascal-app/core';
1
+ import { buildSvgAnnularSectorPath, buildSvgArcPath, buildSvgArrowHeadPoints, computeSegmentTransforms, floorplanGeometryMetadata, getArcPlanPoint, measureStairDetail, resolveStairArcDimensions, resolveStairHandrailPaths, resolveStairRailPaths, resolveStairWalkingPaths, rotateXZ, } from '@pascal-app/core';
2
2
  // Offset from the stair's footprint edge to the rotation chevron's
3
3
  // origin. Same magnitude as `STAIR_ROTATE_CORNER_OFFSET` in
4
4
  // `definition.ts` so the 2D handle visually lines up with where the 3D
5
5
  // curved-arrow gizmo would sit at the matching world point.
6
6
  const STAIR_ROTATE_PLAN_OFFSET = 0.4;
7
- import { buildSvgAnnularSectorPath, buildSvgArcPath, buildSvgArrowHeadPoints, floorplanGeometryMetadata, getArcPlanPoint, } from '@pascal-app/editor';
8
7
  import { buildStairDocumentation, resolveStairPlanDirection, resolveStraightStairDirectionArrow, stairPlanBreakStep, } from './documentation.js';
9
8
  import { buildFloorplanStairEntry } from './plan-entry.js';
10
9
  /** The stair parent emits its complete cumulative segment chain. */
@@ -1 +1 @@
1
- {"version":3,"file":"plan-entry.d.ts","sourceRoot":"","sources":["../../src/stair/plan-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAoB5E,KAAK,oBAAoB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAAA;AAC5D,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACvC,YAAY,EAAE,OAAO,EAAE,CAAA;IACvB,OAAO,EAAE,gBAAgB,CAAA;IACzB,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,SAAS,EAAE,OAAO,EAAE,EAAE,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAA;IACtC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAA;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,0BAA0B,EAAE,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AA8TD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,qBAAqB,EAChC,aAAa,UAAO,GACnB,OAAO,EAAE,CA0BX;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,cAAc,UAAQ,GACrB,mBAAmB,GAAG,IAAI,CAiG5B"}
1
+ {"version":3,"file":"plan-entry.d.ts","sourceRoot":"","sources":["../../src/stair/plan-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAkB5E,KAAK,oBAAoB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAAA;AAC5D,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACvC,YAAY,EAAE,OAAO,EAAE,CAAA;IACvB,OAAO,EAAE,gBAAgB,CAAA;IACzB,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,SAAS,EAAE,OAAO,EAAE,EAAE,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAA;IACtC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAA;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,0BAA0B,EAAE,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AA8TD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,qBAAqB,EAChC,aAAa,UAAO,GACnB,OAAO,EAAE,CA0BX;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,cAAc,UAAQ,GACrB,mBAAmB,GAAG,IAAI,CAiG5B"}
@@ -1,5 +1,4 @@
1
- import { computeSegmentTransforms, measureStairDetail, resolveStairArcDimensions, resolveStairConstruction, resolveStairWalkingPaths, resolveStairWinder, resolveStairWinderFootprint, stairSegmentDetailError, } from '@pascal-app/core';
2
- import { clampPlanValue, getPlanPointDistance, getThickPlanLinePolygon, interpolatePlanPoint, movePlanPointTowards, rotatePlanVector, } from '@pascal-app/editor';
1
+ import { clampPlanValue, computeSegmentTransforms, getPlanPointDistance, getThickPlanLinePolygon, interpolatePlanPoint, measureStairDetail, movePlanPointTowards, resolveStairArcDimensions, resolveStairConstruction, resolveStairWalkingPaths, resolveStairWinder, resolveStairWinderFootprint, rotatePlanVector, stairSegmentDetailError, } from '@pascal-app/core';
3
2
  const FLOORPLAN_STAIR_OUTLINE_BAND_THICKNESS = 0.05;
4
3
  const FLOORPLAN_STAIR_OUTLINE_MAX_FRACTION = 0.18;
5
4
  const FLOORPLAN_STAIR_TREAD_BAND_THICKNESS = 0.05 * 0.82;
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/structural-grid/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,eAAO,MAAM,8BAA8B,EAAE,oBAAoB,CAAC,OAAO,kBAAkB,CAgB1F,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/structural-grid/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,eAAO,MAAM,8BAA8B,EAAE,oBAAoB,CAAC,OAAO,kBAAkB,CAe1F,CAAA"}
@@ -1,4 +1,3 @@
1
- import { buildStructuralGridFloorplan } from './floorplan.js';
2
1
  export const structuralGridEditContribution = {
3
2
  extensions: {
4
3
  'pascal:editor/floorplan': {
@@ -8,7 +7,6 @@ export const structuralGridEditContribution = {
8
7
  },
9
8
  },
10
9
  snapProfile: 'structural',
11
- floorplan: buildStructuralGridFloorplan,
12
10
  toolHints: [
13
11
  { key: 'Left click', label: 'Start grid axis' },
14
12
  { key: 'Left click', label: 'Finish grid axis' },
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/structural-grid/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,8BAA8B,EAAE,oBAAoB,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC7F,IAAI,EAAE,iBAAiB,CAAA;CAmCxB,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/structural-grid/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,8BAA8B,EAAE,oBAAoB,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAC7F,IAAI,EAAE,iBAAiB,CAAA;CAoCxB,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { buildStructuralGridFloorplan } from './floorplan.js';
1
2
  import { StructuralGridNode } from './schema.js';
2
3
  export const structuralGridRenderDefinition = {
3
4
  kind: 'structural-grid',
@@ -22,6 +23,7 @@ export const structuralGridRenderDefinition = {
22
23
  presettable: false,
23
24
  },
24
25
  dirtyTracking: false,
26
+ floorplan: buildStructuralGridFloorplan,
25
27
  presentation: {
26
28
  label: 'Structural Grid',
27
29
  description: 'Persistent construction grid axis with identification bubbles.',
@@ -1,4 +1,4 @@
1
- import { withFloorplanGeometryMetadata } from '@pascal-app/editor';
1
+ import { withFloorplanGeometryMetadata } from '@pascal-app/core';
2
2
  const GRID_BUBBLE_RADIUS = 0.22;
3
3
  const GRID_LABEL_SIZE = 0.18;
4
4
  function bubble(point, label, stroke) {
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/turbine-vent/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAuD/C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAiBpF,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/turbine-vent/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAuD/C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAgBpF,CAAA"}
@@ -1,4 +1,3 @@
1
- import { buildTurbineVentFloorplan } from './floorplan.js';
2
1
  import { turbineVentPaint } from './paint.js';
3
2
  import { turbineVentParametrics } from './parametrics.js';
4
3
  const SIDE_HANDLE_OFFSET = 0.25;
@@ -53,7 +52,6 @@ export const turbineVentEditContribution = {
53
52
  },
54
53
  parametrics: turbineVentParametrics,
55
54
  handles: turbineVentHandles,
56
- floorplan: buildTurbineVentFloorplan,
57
55
  preview: () => import('./preview.js'),
58
56
  tool: () => import('./tool.js'),
59
57
  affordanceTools: {
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/turbine-vent/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;CAuCrB,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/turbine-vent/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,GAAG;IACvF,IAAI,EAAE,cAAc,CAAA;CAwCrB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { TurbineVentNode as TurbineVentNodeSchema, turbineVentSlots } from '@pascal-app/core';
2
+ import { buildTurbineVentFloorplan } from './floorplan.js';
2
3
  import { TurbineVentNode } from './schema.js';
3
4
  export const turbineVentRenderDefinition = {
4
5
  kind: 'turbine-vent',
@@ -27,6 +28,7 @@ export const turbineVentRenderDefinition = {
27
28
  kind: 'parametric',
28
29
  module: () => import('./renderer.js'),
29
30
  },
31
+ floorplan: buildTurbineVentFloorplan,
30
32
  presentation: {
31
33
  label: 'Turbine Vent',
32
34
  description: 'Wind-driven spinning whirlybird exhaust vent for a roof slope.',
@@ -1 +1 @@
1
- {"version":3,"file":"contextual-dimensions.d.ts","sourceRoot":"","sources":["../../src/wall/contextual-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAKpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAGzB,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC7B,yBAAyB,EAAE,OAAO,CAAA;IAClC,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAgOD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAiD1B;AAED,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,uBAAuB,GAC/B,iBAAiB,GAAG,IAAI,CAyE1B"}
1
+ {"version":3,"file":"contextual-dimensions.d.ts","sourceRoot":"","sources":["../../src/wall/contextual-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAOpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAEzB,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC7B,yBAAyB,EAAE,OAAO,CAAA;IAClC,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAgOD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAiD1B;AAED,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,uBAAuB,GAC/B,iBAAiB,GAAG,IAAI,CAyE1B"}
@@ -1,5 +1,4 @@
1
- import { formatLinearMeasurement, getWallCurveFrameAt, getWallCurveLength, getWallFaceOffsets, isCurvedWall, } from '@pascal-app/core';
2
- import { readFloorplanContext, readFloorplanMetricNotationOverride } from '@pascal-app/editor';
1
+ import { formatLinearMeasurement, getWallCurveFrameAt, getWallCurveLength, getWallFaceOffsets, isCurvedWall, readFloorplanContext, readFloorplanMetricNotationOverride, } from '@pascal-app/core';
3
2
  const WALL_CONNECTION_TOLERANCE = 0.03;
4
3
  function formatLength(value, ctx) {
5
4
  return formatLinearMeasurement(value, ctx.viewState?.unit ?? 'metric', readFloorplanMetricNotationOverride(ctx) ?? 'meters');
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/wall/definition.edit.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAmBvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AA8BxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAwJtE,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/wall/definition.edit.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAkBvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AA8BxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAoJtE,CAAA"}
@@ -1,7 +1,6 @@
1
1
  import { DRAFTING_SURFACE_EXTENSION_KEY, getWallDrawVariant, PANEL_MODEL_EXTENSION, selectedWallDimensions, useEditor, } from '@pascal-app/editor';
2
2
  import { buildWallContextualDimensions } from './contextual-dimensions.js';
3
3
  import { hasWallCurveBlockingChildren } from './curve-eligibility.js';
4
- import { buildWallFloorplan, computeWallFloorplanLevelData } from './floorplan.js';
5
4
  import { wallCurveAffordance, wallMoveEndpointAffordance, wallThicknessAffordance, } from './floorplan-affordances.js';
6
5
  import { wallFloorplanMoveTarget } from './floorplan-move.js';
7
6
  import { wallFloorplanSiblingOverrides } from './floorplan-overrides.js';
@@ -112,10 +111,6 @@ export const wallEditContribution = {
112
111
  move: () => import('./move-tool.js'),
113
112
  split: () => import('./split-tool.js'),
114
113
  },
115
- // Stage C: floor-plan rendering. Precomputes the level miter graph once
116
- // per render pass, then the builder reads its own junctions by wall id.
117
- computeFloorplanLevelData: computeWallFloorplanLevelData,
118
- floorplan: buildWallFloorplan,
119
114
  floorplanDependsOnSiblings: true,
120
115
  // 2D drag affordances triggered by `endpoint-handle` primitives in
121
116
  // `def.floorplan`'s output. Sister to `affordanceTools` (3D) — the
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/wall/definition.render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAQvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAsGxF,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/wall/definition.render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AASvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CA0GxF,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { DEFAULT_WALL_THICKNESS, getWallBaseElevationForNodes, getWallEffectiveHeightForNodes, isRailingWall, wallSlots, } from '@pascal-app/core';
2
2
  import { wallSeenFromOutside } from './exterior.js';
3
+ import { buildWallFloorplan, computeWallFloorplanLevelData } from './floorplan.js';
3
4
  import { matchWallMeasurementFeature, resolveWallMeasurementFeature, wallMeasurementFeatures, } from './measurement.js';
4
5
  import { wallQuickMeasurement } from './quick-measurement.js';
5
6
  import { WallNode } from './schema.js';
@@ -87,6 +88,10 @@ export const wallRenderDefinition = {
87
88
  match: (node, _ctx, point, maxDistance) => matchWallMeasurementFeature(node, point, maxDistance),
88
89
  resolve: (node, _ctx, reference) => resolveWallMeasurementFeature(node, reference),
89
90
  },
91
+ // Stage C: floor-plan rendering. Precomputes the level miter graph once
92
+ // per render pass, then the builder reads its own junctions by wall id.
93
+ computeFloorplanLevelData: computeWallFloorplanLevelData,
94
+ floorplan: buildWallFloorplan,
90
95
  presentation: {
91
96
  label: 'Wall',
92
97
  description: 'A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items.',
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAapB,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EAClB,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AAazB,OAAO,EAML,KAAK,6BAA6B,EACnC,MAAM,2BAA2B,CAAA;AA4ClC,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,aAAa,CAAA;IACrB,cAAc,EAAE,aAAa,CAAA;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,mBAAmB,EAAE,kBAAkB,CAAA;IACvC,+FAA+F;IAC/F,QAAQ,CAAC,sBAAsB,EAAE,6BAA6B,CAAA;CAC/D,CAAA;AAqJD,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,sBAAsB,CAoBzB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAoRjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/wall/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,iBAAiB,EAItB,KAAK,eAAe,EAiBpB,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EAClB,KAAK,QAAQ,EAKd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAML,KAAK,6BAA6B,EACnC,MAAM,2BAA2B,CAAA;AA4ClC,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,aAAa,CAAA;IACrB,cAAc,EAAE,aAAa,CAAA;IAC7B,WAAW,EAAE,kBAAkB,CAAA;IAC/B,mBAAmB,EAAE,kBAAkB,CAAA;IACvC,+FAA+F;IAC/F,QAAQ,CAAC,sBAAsB,EAAE,6BAA6B,CAAA;CAC/D,CAAA;AAqJD,wBAAgB,6BAA6B,CAAC,EAC5C,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,sBAAsB,CAoBzB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAoRjG"}
@@ -1,5 +1,4 @@
1
- import { calculateLevelLayerMiters, calculateLevelMiters, getWallBodyCenterOffset, getWallCurveFrameAt, getWallCurveLength, getWallEffectiveHeightForNodes, getWallFaceOffsets, getWallLayerPolylines, getWallLocalFaceZ, getWallMidpointHandlePoint, getWallPlanFootprint, getWallThickness, isCurvedWall, isRailingWall, wallLayerBoundaryOffsets, } from '@pascal-app/core';
2
- import { floorplanGeometryMetadata, readFloorplanContext, WALL_PULL_AFFORDANCE, WALL_PULL_GRIP_TITLE, WALL_PUSH_AFFORDANCE, wallPullSeed, } from '@pascal-app/editor';
1
+ import { calculateLevelLayerMiters, calculateLevelMiters, floorplanGeometryMetadata, getWallBodyCenterOffset, getWallCurveFrameAt, getWallCurveLength, getWallEffectiveHeightForNodes, getWallFaceOffsets, getWallLayerPolylines, getWallLocalFaceZ, getWallMidpointHandlePoint, getWallPlanFootprint, getWallThickness, isCurvedWall, isRailingWall, readFloorplanContext, WALL_PULL_AFFORDANCE, WALL_PULL_GRIP_TITLE, WALL_PUSH_AFFORDANCE, wallLayerBoundaryOffsets, wallPullSeed, } from '@pascal-app/core';
3
2
  import { constructionDimensionStandard } from '../shared/construction-dimension-standards.js';
4
3
  import { buildCurvedWallConstructionDimensions, buildLevelWallConstructionDimensionPlan, buildWallConstructionDimensions, constructionDimensionFace, renderPlannedConstructionDimensions, } from './construction-dimensions.js';
5
4
  import { buildCurtainWallFloorplan } from './curtain-wall-floorplan.js';
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/window/definition.edit.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAyBvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA+N1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAoD1E,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/window/definition.edit.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAqBvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA+N1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAgD1E,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { getDormerWallHorizontalBoundsAtHeight, getDormerWallOpeningVerticalBounds, } from '@pascal-app/core';
2
2
  import { curtainOpeningResizeMax } from '../shared/curtain-opening-limits.js';
3
- import { buildWindowFloorplanSchedule, computeWindowFloorplanLevelData, } from '../shared/opening-documentation.js';
3
+ import { buildWindowFloorplanSchedule } 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 { buildWindowContextualDimensions } from './contextual-dimensions.js';
12
12
  import { resolveWindowHandlePortalTarget } from './definition.render.js';
13
- import { buildWindowFloorplan } from './floorplan.js';
14
13
  import { windowWidthAffordance } from './floorplan-affordances.js';
15
14
  import { windowFloorplanMoveTarget } from './floorplan-move.js';
16
15
  import { windowPaint } from './paint.js';
@@ -220,10 +219,6 @@ export const windowEditContribution = {
220
219
  ? scriptedOpeningHandles(node, windowWidthHandle, () => windowHeightHandle('top'))
221
220
  : windowHandles,
222
221
  preview: () => import('./preview.js'),
223
- // Stage C: floor-plan polygon. ctx.parent gives the wall for direction
224
- // + thickness — same shape as door.
225
- floorplan: buildWindowFloorplan,
226
- computeFloorplanLevelData: computeWindowFloorplanLevelData,
227
222
  floorplanDependsOnSiblings: true,
228
223
  // Opening symbols position from `ctx.parent` (the host wall); merge the
229
224
  // 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/window/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,QAAQ,EACR,UAAU,IAAI,cAAc,EAC7B,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAC3B,SAAS,GAAG,IAAI,CAWlB;AAED,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAgE5F,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/window/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,QAAQ,EACR,UAAU,IAAI,cAAc,EAC7B,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAOvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAC3B,SAAS,GAAG,IAAI,CAWlB;AAED,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAoE5F,CAAA"}
@@ -1,8 +1,10 @@
1
1
  import { windowSlots } from '@pascal-app/core';
2
2
  import { NEW_WINDOW_FRAME_THICKNESS } from '@pascal-app/core/building';
3
3
  import { windowBatchable } from '../shared/node-batch/batchable.js';
4
+ import { computeWindowFloorplanLevelData } 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 { buildWindowFloorplan } from './floorplan.js';
6
8
  import { windowMechanism } from './mechanism.js';
7
9
  import { WindowNode } from './schema.js';
8
10
  export function resolveWindowHandlePortalTarget(window, scene) {
@@ -70,6 +72,10 @@ export const windowRenderDefinition = {
70
72
  module: () => import('./system.js'),
71
73
  priority: 3,
72
74
  },
75
+ // Stage C: floor-plan polygon. ctx.parent gives the wall for direction
76
+ // + thickness — same shape as door.
77
+ floorplan: buildWindowFloorplan,
78
+ computeFloorplanLevelData: computeWindowFloorplanLevelData,
73
79
  presentation: {
74
80
  label: 'Window',
75
81
  description: 'A window cut into a wall. Animated open/close for opening windows.',
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/window/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAEjB,eAAe,EAEf,UAAU,EACX,MAAM,kBAAkB,CAAA;AAgFzB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CA6R1B"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/window/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAEjB,eAAe,EAEf,UAAU,EACX,MAAM,kBAAkB,CAAA;AAiFzB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CA6R1B"}
@@ -1,5 +1,4 @@
1
- import { cornerPair, getWallBodyCenterOffset, openingExteriorFace, openingHostFacing, } from '@pascal-app/core';
2
- import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/editor';
1
+ import { cornerPair, floorplanGeometryMetadata, getWallBodyCenterOffset, openingExteriorFace, openingHostFacing, readFloorplanContext, } 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/zone/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAYvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CA8BtE,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/zone/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAWvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CA6BtE,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { buildZoneContextualDimensions } from './contextual-dimensions.js';
2
- import { buildZoneFloorplan } from './floorplan.js';
3
2
  import { zoneAddVertexAffordance, zoneDeleteVertexAffordance, zoneMoveEdgeAffordance, zoneMoveVertexAffordance, } from './floorplan-affordances.js';
4
3
  import { zoneFloorplanMoveTarget } from './floorplan-move.js';
5
4
  import { zoneParametrics } from './parametrics.js';
@@ -14,7 +13,6 @@ export const zoneEditContribution = {
14
13
  },
15
14
  },
16
15
  parametrics: zoneParametrics,
17
- floorplan: buildZoneFloorplan,
18
16
  // Every unit under the building, not just the current owner: a zone that
19
17
  // joins its first unit has no owner to depend on until the unit changes.
20
18
  floorplanDependencies: (node, nodes) => [
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/zone/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAmDxF,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/zone/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAoDxF,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { ZoneNode as ZoneNodeSchema } from '@pascal-app/core';
2
2
  import { polygonMeasurementFeatures } from '../shared/polygon-measurement.js';
3
+ import { buildZoneFloorplan } from './floorplan.js';
3
4
  import { zoneQuickMeasurement } from './quick-measurement.js';
4
5
  import { ZoneNode } from './schema.js';
5
6
  export const zoneRenderDefinition = {
@@ -42,6 +43,7 @@ export const zoneRenderDefinition = {
42
43
  module: () => import('./system.js'),
43
44
  priority: 4,
44
45
  },
46
+ floorplan: buildZoneFloorplan,
45
47
  presentation: {
46
48
  label: 'Zone',
47
49
  description: 'A polygonal site zone (lawn, water, paving) with a TSL gradient material.',
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/zone/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAGpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AASzB;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAiKjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/zone/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAIpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAQzB;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAiKjG"}
@@ -1,5 +1,4 @@
1
- import { polygonInteriorPoint, } from '@pascal-app/core';
2
- import { floorplanGeometryMetadata, readFloorplanContext } from '@pascal-app/editor';
1
+ import { floorplanGeometryMetadata, polygonInteriorPoint, readFloorplanContext, } from '@pascal-app/core';
3
2
  import { formatConstructionLength, } from '../shared/construction-length.js';
4
3
  import { buildRoomClearDimensions } from './room-clear-dimensions.js';
5
4
  import { owningUnitForZone } from './unit-membership.js';
@@ -1 +1 @@
1
- {"version":3,"file":"room-clear-dimensions.d.ts","sourceRoot":"","sources":["../../src/zone/room-clear-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAIpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAuBzB,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,EAAE,CA4DrB"}
1
+ {"version":3,"file":"room-clear-dimensions.d.ts","sourceRoot":"","sources":["../../src/zone/room-clear-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAKpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAsBzB,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,EAAE,CA4DrB"}
@@ -1,5 +1,4 @@
1
- import { detectSpacesForLevel, getWallLocalFaceZ, } from '@pascal-app/core';
2
- import { readFloorplanContext } from '@pascal-app/editor';
1
+ import { detectSpacesForLevel, getWallLocalFaceZ, readFloorplanContext, } from '@pascal-app/core';
3
2
  import { formatConstructionLength, } from '../shared/construction-length.js';
4
3
  const LINE_TOLERANCE = 1e-4;
5
4
  const ANGLE_TOLERANCE = 1e-3;
@@ -1,5 +1,4 @@
1
- import { type AnyNode, type ZoneNode } from '@pascal-app/core';
2
- import type { FloorplanSchedule } from '@pascal-app/editor';
1
+ import { type AnyNode, type FloorplanSchedule, type ZoneNode } from '@pascal-app/core';
3
2
  import { type ConstructionLengthProfile, type ConstructionLinearUnit } from '../shared/construction-length.js';
4
3
  export declare function buildRoomFloorplanSchedule(args: {
5
4
  siblings: ReadonlyArray<ZoneNode>;
@@ -1 +1 @@
1
- {"version":3,"file":"room-documentation.d.ts","sourceRoot":"","sources":["../../src/zone/room-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAA;AAKtC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;CACpC,GAAG,iBAAiB,GAAG,IAAI,CA0C3B"}
1
+ {"version":3,"file":"room-documentation.d.ts","sourceRoot":"","sources":["../../src/zone/room-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAA;AAKtC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;CACpC,GAAG,iBAAiB,GAAG,IAAI,CA0C3B"}
@@ -1,4 +1,4 @@
1
- import { deriveZoneQuantityReport } from '@pascal-app/core';
1
+ import { deriveZoneQuantityReport, } from '@pascal-app/core';
2
2
  import { formatConstructionLength, } from '../shared/construction-length.js';
3
3
  const SQUARE_FEET_PER_SQUARE_METER = 10.76391041671;
4
4
  const ROOM_NUMBER_COLLATOR = new Intl.Collator('en', { numeric: true, sensitivity: 'base' });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pascal-app/nodes",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Built-in node bundles for the Pascal 3D editor — one folder per kind, exported as `builtinPlugin`",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -44,9 +44,9 @@
44
44
  "bench:elevator": "bun test ./src/elevator/__bench__/rendering.bench.tsx && bun ./src/elevator/__bench__/runtime.ts"
45
45
  },
46
46
  "peerDependencies": {
47
- "@pascal-app/core": "^1.1.0",
48
- "@pascal-app/editor": "^1.1.0",
49
- "@pascal-app/viewer": "^1.1.0",
47
+ "@pascal-app/core": "^1.1.2",
48
+ "@pascal-app/editor": "^1.1.2",
49
+ "@pascal-app/viewer": "^1.1.2",
50
50
  "@react-three/drei": "^10",
51
51
  "@react-three/fiber": "^9",
52
52
  "lucide-react": "^1",
@@ -58,10 +58,10 @@
58
58
  "devDependencies": {
59
59
  "@modelcontextprotocol/client": "^2.4.0",
60
60
  "@modelcontextprotocol/server": "^2.4.0",
61
- "@pascal-app/core": "^1.1.0",
62
- "@pascal-app/editor": "^1.1.0",
63
- "@pascal-app/mcp": "^1.1.0",
64
- "@pascal-app/viewer": "^1.1.0",
61
+ "@pascal-app/core": "^1.1.2",
62
+ "@pascal-app/editor": "^1.1.2",
63
+ "@pascal-app/mcp": "^1.1.2",
64
+ "@pascal-app/viewer": "^1.1.2",
65
65
  "@pascal/typescript-config": "*",
66
66
  "@react-three/test-renderer": "^9.1.1",
67
67
  "@types/bun": "^1.4.4",