@pascal-app/core 0.9.1 → 0.9.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 (321) hide show
  1. package/dist/events/bus.d.ts +30 -2
  2. package/dist/events/bus.d.ts.map +1 -1
  3. package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
  4. package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
  5. package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
  6. package/dist/hooks/scene-registry/scene-registry.d.ts +8 -1
  7. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  8. package/dist/hooks/scene-registry/scene-registry.js +27 -1
  9. package/dist/hooks/scene-registry/scene-registry.test.d.ts +2 -0
  10. package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +1 -0
  11. package/dist/hooks/scene-registry/scene-registry.test.js +26 -0
  12. package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +93 -0
  13. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +69 -12
  14. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  15. package/dist/hooks/spatial-grid/spatial-grid-manager.js +476 -195
  16. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  17. package/dist/hooks/spatial-grid/spatial-grid-sync.js +19 -1
  18. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +2 -0
  19. package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +1 -0
  20. package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +363 -0
  21. package/dist/index.d.ts +16 -6
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +15 -5
  24. package/dist/lib/level-name.d.ts +4 -0
  25. package/dist/lib/level-name.d.ts.map +1 -0
  26. package/dist/lib/level-name.js +10 -0
  27. package/dist/lib/measurement-geometry.d.ts +19 -0
  28. package/dist/lib/measurement-geometry.d.ts.map +1 -0
  29. package/dist/lib/measurement-geometry.js +232 -0
  30. package/dist/lib/measurement-geometry.test.d.ts +2 -0
  31. package/dist/lib/measurement-geometry.test.d.ts.map +1 -0
  32. package/dist/lib/measurement-geometry.test.js +102 -0
  33. package/dist/lib/polygon-geometry.d.ts +0 -1
  34. package/dist/lib/polygon-geometry.d.ts.map +1 -1
  35. package/dist/lib/polygon-geometry.js +0 -18
  36. package/dist/lib/selection-proxy.d.ts +4 -0
  37. package/dist/lib/selection-proxy.d.ts.map +1 -0
  38. package/dist/lib/selection-proxy.js +12 -0
  39. package/dist/lib/slab-polygon.d.ts +31 -2
  40. package/dist/lib/slab-polygon.d.ts.map +1 -1
  41. package/dist/lib/slab-polygon.js +525 -31
  42. package/dist/lib/slab-polygon.test.d.ts +2 -0
  43. package/dist/lib/slab-polygon.test.d.ts.map +1 -0
  44. package/dist/lib/slab-polygon.test.js +635 -0
  45. package/dist/lib/slots.d.ts +14 -0
  46. package/dist/lib/slots.d.ts.map +1 -0
  47. package/dist/lib/slots.js +26 -0
  48. package/dist/lib/space-detection.d.ts +25 -2
  49. package/dist/lib/space-detection.d.ts.map +1 -1
  50. package/dist/lib/space-detection.js +414 -118
  51. package/dist/lib/space-detection.test.js +301 -2
  52. package/dist/lib/wall-distance.d.ts +60 -0
  53. package/dist/lib/wall-distance.d.ts.map +1 -0
  54. package/dist/lib/wall-distance.js +85 -0
  55. package/dist/lib/zone-quantities.d.ts +21 -0
  56. package/dist/lib/zone-quantities.d.ts.map +1 -0
  57. package/dist/lib/zone-quantities.js +183 -0
  58. package/dist/lib/zone-quantities.test.d.ts +2 -0
  59. package/dist/lib/zone-quantities.test.d.ts.map +1 -0
  60. package/dist/lib/zone-quantities.test.js +82 -0
  61. package/dist/material-library.d.ts +20 -1
  62. package/dist/material-library.d.ts.map +1 -1
  63. package/dist/material-library.js +2181 -441
  64. package/dist/registry/handles.d.ts +75 -2
  65. package/dist/registry/handles.d.ts.map +1 -1
  66. package/dist/registry/index.d.ts +3 -3
  67. package/dist/registry/index.d.ts.map +1 -1
  68. package/dist/registry/index.js +1 -1
  69. package/dist/registry/registry.d.ts +46 -3
  70. package/dist/registry/registry.d.ts.map +1 -1
  71. package/dist/registry/registry.js +82 -1
  72. package/dist/registry/registry.test.js +14 -1
  73. package/dist/registry/subtree.d.ts.map +1 -1
  74. package/dist/registry/subtree.js +4 -0
  75. package/dist/registry/subtree.test.js +30 -0
  76. package/dist/registry/types.d.ts +717 -38
  77. package/dist/registry/types.d.ts.map +1 -1
  78. package/dist/schema/index.d.ts +21 -5
  79. package/dist/schema/index.d.ts.map +1 -1
  80. package/dist/schema/index.js +17 -3
  81. package/dist/schema/material.d.ts +3 -2
  82. package/dist/schema/material.d.ts.map +1 -1
  83. package/dist/schema/material.js +7 -5
  84. package/dist/schema/material.test.d.ts +2 -0
  85. package/dist/schema/material.test.d.ts.map +1 -0
  86. package/dist/schema/material.test.js +43 -0
  87. package/dist/schema/nodes/box-vent.d.ts +2 -2
  88. package/dist/schema/nodes/cabinet.d.ts +534 -0
  89. package/dist/schema/nodes/cabinet.d.ts.map +1 -0
  90. package/dist/schema/nodes/cabinet.js +137 -0
  91. package/dist/schema/nodes/ceiling.d.ts +3 -2
  92. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  93. package/dist/schema/nodes/ceiling.js +4 -0
  94. package/dist/schema/nodes/chimney.d.ts +4 -4
  95. package/dist/schema/nodes/column.d.ts +3 -2
  96. package/dist/schema/nodes/column.d.ts.map +1 -1
  97. package/dist/schema/nodes/column.js +3 -0
  98. package/dist/schema/nodes/cupola.d.ts +2 -2
  99. package/dist/schema/nodes/door.d.ts +13 -5
  100. package/dist/schema/nodes/door.d.ts.map +1 -1
  101. package/dist/schema/nodes/door.js +12 -0
  102. package/dist/schema/nodes/dormer.d.ts +8 -8
  103. package/dist/schema/nodes/dormer.js +1 -1
  104. package/dist/schema/nodes/downspout.d.ts +2 -2
  105. package/dist/schema/nodes/duct-fitting.d.ts +91 -0
  106. package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
  107. package/dist/schema/nodes/duct-fitting.js +92 -0
  108. package/dist/schema/nodes/duct-segment.d.ts +61 -0
  109. package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
  110. package/dist/schema/nodes/duct-segment.js +73 -0
  111. package/dist/schema/nodes/duct-terminal.d.ts +57 -0
  112. package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
  113. package/dist/schema/nodes/duct-terminal.js +51 -0
  114. package/dist/schema/nodes/elevator.d.ts +3 -2
  115. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  116. package/dist/schema/nodes/elevator.js +3 -0
  117. package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
  118. package/dist/schema/nodes/fence.d.ts +18 -2
  119. package/dist/schema/nodes/fence.d.ts.map +1 -1
  120. package/dist/schema/nodes/fence.js +25 -2
  121. package/dist/schema/nodes/gutter.d.ts +2 -2
  122. package/dist/schema/nodes/hvac-equipment.d.ts +63 -0
  123. package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
  124. package/dist/schema/nodes/hvac-equipment.js +55 -0
  125. package/dist/schema/nodes/item.d.ts +8 -0
  126. package/dist/schema/nodes/item.d.ts.map +1 -1
  127. package/dist/schema/nodes/item.js +11 -0
  128. package/dist/schema/nodes/level.d.ts +1 -1
  129. package/dist/schema/nodes/level.d.ts.map +1 -1
  130. package/dist/schema/nodes/level.js +2 -0
  131. package/dist/schema/nodes/lineset.d.ts +42 -0
  132. package/dist/schema/nodes/lineset.d.ts.map +1 -0
  133. package/dist/schema/nodes/lineset.js +38 -0
  134. package/dist/schema/nodes/liquid-line.d.ts +34 -0
  135. package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
  136. package/dist/schema/nodes/liquid-line.js +24 -0
  137. package/dist/schema/nodes/measurement.d.ts +306 -0
  138. package/dist/schema/nodes/measurement.d.ts.map +1 -0
  139. package/dist/schema/nodes/measurement.js +87 -0
  140. package/dist/schema/nodes/measurement.test.d.ts +2 -0
  141. package/dist/schema/nodes/measurement.test.d.ts.map +1 -0
  142. package/dist/schema/nodes/measurement.test.js +139 -0
  143. package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
  144. package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
  145. package/dist/schema/nodes/pipe-fitting.js +45 -0
  146. package/dist/schema/nodes/pipe-segment.d.ts +48 -0
  147. package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
  148. package/dist/schema/nodes/pipe-segment.js +36 -0
  149. package/dist/schema/nodes/pipe-trap.d.ts +43 -0
  150. package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
  151. package/dist/schema/nodes/pipe-trap.js +36 -0
  152. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +2 -0
  153. package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +1 -0
  154. package/dist/schema/nodes/ridge-vent-defaults.test.js +205 -0
  155. package/dist/schema/nodes/ridge-vent.d.ts +18 -3
  156. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  157. package/dist/schema/nodes/ridge-vent.js +221 -3
  158. package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
  159. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
  160. package/dist/schema/nodes/roof-segment-shape.js +318 -0
  161. package/dist/schema/nodes/roof-segment-shape.test.d.ts +2 -0
  162. package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +1 -0
  163. package/dist/schema/nodes/roof-segment-shape.test.js +175 -0
  164. package/dist/schema/nodes/roof-segment-surface.test.d.ts +2 -0
  165. package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +1 -0
  166. package/dist/schema/nodes/roof-segment-surface.test.js +48 -0
  167. package/dist/schema/nodes/roof-segment-trim.test.d.ts +2 -0
  168. package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +1 -0
  169. package/dist/schema/nodes/roof-segment-trim.test.js +107 -0
  170. package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
  171. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
  172. package/dist/schema/nodes/roof-segment-walls.js +330 -0
  173. package/dist/schema/nodes/roof-segment-walls.test.d.ts +2 -0
  174. package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +1 -0
  175. package/dist/schema/nodes/roof-segment-walls.test.js +92 -0
  176. package/dist/schema/nodes/roof-segment.d.ts +84 -8
  177. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  178. package/dist/schema/nodes/roof-segment.js +290 -5
  179. package/dist/schema/nodes/roof.d.ts +8 -8
  180. package/dist/schema/nodes/shelf.d.ts +3 -2
  181. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  182. package/dist/schema/nodes/shelf.js +6 -0
  183. package/dist/schema/nodes/skylight.d.ts +10 -10
  184. package/dist/schema/nodes/slab.d.ts +3 -2
  185. package/dist/schema/nodes/slab.d.ts.map +1 -1
  186. package/dist/schema/nodes/slab.js +4 -0
  187. package/dist/schema/nodes/solar-panel.d.ts +4 -4
  188. package/dist/schema/nodes/stair-segment.d.ts +4 -4
  189. package/dist/schema/nodes/stair.d.ts +13 -12
  190. package/dist/schema/nodes/stair.d.ts.map +1 -1
  191. package/dist/schema/nodes/stair.js +3 -0
  192. package/dist/schema/nodes/turbine-vent.d.ts +2 -2
  193. package/dist/schema/nodes/wall.d.ts +245 -6
  194. package/dist/schema/nodes/wall.d.ts.map +1 -1
  195. package/dist/schema/nodes/wall.js +257 -0
  196. package/dist/schema/nodes/wall.test.d.ts +2 -0
  197. package/dist/schema/nodes/wall.test.d.ts.map +1 -0
  198. package/dist/schema/nodes/wall.test.js +208 -0
  199. package/dist/schema/nodes/window.d.ts +11 -3
  200. package/dist/schema/nodes/window.d.ts.map +1 -1
  201. package/dist/schema/nodes/window.js +12 -0
  202. package/dist/schema/nodes/zone.d.ts +2 -0
  203. package/dist/schema/nodes/zone.d.ts.map +1 -1
  204. package/dist/schema/nodes/zone.js +6 -0
  205. package/dist/schema/scene-material.d.ts +41 -0
  206. package/dist/schema/scene-material.d.ts.map +1 -0
  207. package/dist/schema/scene-material.js +9 -0
  208. package/dist/schema/types.d.ts +1089 -94
  209. package/dist/schema/types.d.ts.map +1 -1
  210. package/dist/schema/types.js +23 -0
  211. package/dist/services/alignment-anchors.d.ts.map +1 -1
  212. package/dist/services/alignment-anchors.js +30 -1
  213. package/dist/services/alignment.d.ts +5 -0
  214. package/dist/services/alignment.d.ts.map +1 -1
  215. package/dist/services/alignment.js +2 -0
  216. package/dist/services/hosting.d.ts +8 -0
  217. package/dist/services/hosting.d.ts.map +1 -1
  218. package/dist/services/hosting.js +13 -4
  219. package/dist/services/hosting.test.js +32 -1
  220. package/dist/services/index.d.ts +8 -2
  221. package/dist/services/index.d.ts.map +1 -1
  222. package/dist/services/index.js +8 -2
  223. package/dist/services/level-height.d.ts +28 -0
  224. package/dist/services/level-height.d.ts.map +1 -0
  225. package/dist/services/level-height.js +62 -0
  226. package/dist/services/opening-guides.d.ts +141 -0
  227. package/dist/services/opening-guides.d.ts.map +1 -0
  228. package/dist/services/opening-guides.js +267 -0
  229. package/dist/services/opening-guides.test.d.ts +2 -0
  230. package/dist/services/opening-guides.test.d.ts.map +1 -0
  231. package/dist/services/opening-guides.test.js +208 -0
  232. package/dist/services/port-connectivity.d.ts +115 -0
  233. package/dist/services/port-connectivity.d.ts.map +1 -0
  234. package/dist/services/port-connectivity.js +300 -0
  235. package/dist/services/port-connectivity.test.d.ts +2 -0
  236. package/dist/services/port-connectivity.test.d.ts.map +1 -0
  237. package/dist/services/port-connectivity.test.js +297 -0
  238. package/dist/services/riser-diagram.d.ts +40 -0
  239. package/dist/services/riser-diagram.d.ts.map +1 -0
  240. package/dist/services/riser-diagram.js +110 -0
  241. package/dist/services/riser-diagram.test.d.ts +2 -0
  242. package/dist/services/riser-diagram.test.d.ts.map +1 -0
  243. package/dist/services/riser-diagram.test.js +66 -0
  244. package/dist/services/snap.d.ts +9 -1
  245. package/dist/services/snap.d.ts.map +1 -1
  246. package/dist/services/snap.js +21 -1
  247. package/dist/services/snap.test.js +43 -1
  248. package/dist/services/system-graph.d.ts +30 -0
  249. package/dist/services/system-graph.d.ts.map +1 -0
  250. package/dist/services/system-graph.js +164 -0
  251. package/dist/services/system-graph.test.d.ts +2 -0
  252. package/dist/services/system-graph.test.d.ts.map +1 -0
  253. package/dist/services/system-graph.test.js +138 -0
  254. package/dist/services/validate-dwv.d.ts +32 -0
  255. package/dist/services/validate-dwv.d.ts.map +1 -0
  256. package/dist/services/validate-dwv.js +118 -0
  257. package/dist/services/validate-dwv.test.d.ts +2 -0
  258. package/dist/services/validate-dwv.test.d.ts.map +1 -0
  259. package/dist/services/validate-dwv.test.js +109 -0
  260. package/dist/store/actions/node-actions.d.ts.map +1 -1
  261. package/dist/store/actions/node-actions.js +94 -1
  262. package/dist/store/actions/ridge-vent-update.test.d.ts +2 -0
  263. package/dist/store/actions/ridge-vent-update.test.d.ts.map +1 -0
  264. package/dist/store/actions/ridge-vent-update.test.js +264 -0
  265. package/dist/store/history-control.d.ts +11 -0
  266. package/dist/store/history-control.d.ts.map +1 -1
  267. package/dist/store/history-control.js +33 -0
  268. package/dist/store/use-scene-dirty-tracking.test.d.ts +2 -0
  269. package/dist/store/use-scene-dirty-tracking.test.d.ts.map +1 -0
  270. package/dist/store/use-scene-dirty-tracking.test.js +68 -0
  271. package/dist/store/use-scene-measurement-roundtrip.test.d.ts +2 -0
  272. package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +1 -0
  273. package/dist/store/use-scene-measurement-roundtrip.test.js +97 -0
  274. package/dist/store/use-scene-plugins.test.d.ts +2 -0
  275. package/dist/store/use-scene-plugins.test.d.ts.map +1 -0
  276. package/dist/store/use-scene-plugins.test.js +51 -0
  277. package/dist/store/use-scene-wall-slot-migration.test.d.ts +2 -0
  278. package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +1 -0
  279. package/dist/store/use-scene-wall-slot-migration.test.js +210 -0
  280. package/dist/store/use-scene-window-migration.test.d.ts +2 -0
  281. package/dist/store/use-scene-window-migration.test.d.ts.map +1 -0
  282. package/dist/store/use-scene-window-migration.test.js +85 -0
  283. package/dist/store/use-scene.d.ts +17 -2
  284. package/dist/store/use-scene.d.ts.map +1 -1
  285. package/dist/store/use-scene.js +358 -51
  286. package/dist/systems/elevator/elevator-service.js +1 -1
  287. package/dist/systems/fence/fence-centerline.d.ts +12 -0
  288. package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
  289. package/dist/systems/fence/fence-centerline.js +37 -0
  290. package/dist/systems/fence/fence-spline.d.ts +39 -0
  291. package/dist/systems/fence/fence-spline.d.ts.map +1 -0
  292. package/dist/systems/fence/fence-spline.js +196 -0
  293. package/dist/systems/fence/fence-spline.test.d.ts +2 -0
  294. package/dist/systems/fence/fence-spline.test.d.ts.map +1 -0
  295. package/dist/systems/fence/fence-spline.test.js +136 -0
  296. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  297. package/dist/systems/stair/stair-footprint.js +21 -11
  298. package/dist/systems/stair/stair-opening-preview.d.ts +1139 -469
  299. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  300. package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
  301. package/dist/systems/stair/stair-opening-sync.js +1 -18
  302. package/dist/systems/stair/stair-opening-sync.test.js +39 -0
  303. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  304. package/dist/systems/wall/wall-mitering.js +38 -2
  305. package/dist/systems/wall/wall-mitering.test.d.ts +2 -0
  306. package/dist/systems/wall/wall-mitering.test.d.ts.map +1 -0
  307. package/dist/systems/wall/wall-mitering.test.js +63 -0
  308. package/dist/utils/clone-scene-graph.d.ts +1 -0
  309. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  310. package/dist/utils/clone-scene-graph.js +23 -3
  311. package/dist/utils/clone-scene-graph.test.js +3 -0
  312. package/dist/utils/heal-scene-graph.d.ts +18 -0
  313. package/dist/utils/heal-scene-graph.d.ts.map +1 -0
  314. package/dist/utils/heal-scene-graph.js +90 -0
  315. package/dist/utils/heal-scene-graph.test.d.ts +2 -0
  316. package/dist/utils/heal-scene-graph.test.d.ts.map +1 -0
  317. package/dist/utils/heal-scene-graph.test.js +88 -0
  318. package/dist/validation/validate-build-json.d.ts +1 -0
  319. package/dist/validation/validate-build-json.d.ts.map +1 -1
  320. package/dist/validation/validate-build-json.js +31 -2
  321. package/package.json +3 -3
@@ -1,4 +1,10 @@
1
1
  import { z } from 'zod';
2
+ import { type RoofSegmentNode } from './roof-segment';
3
+ export type RidgeVentLine = {
4
+ name: string;
5
+ start: [number, number];
6
+ end: [number, number];
7
+ };
2
8
  export declare const RidgeVentNode: z.ZodObject<{
3
9
  object: z.ZodDefault<z.ZodLiteral<"node">>;
4
10
  name: z.ZodOptional<z.ZodString>;
@@ -19,7 +25,7 @@ export declare const RidgeVentNode: z.ZodObject<{
19
25
  type: z.ZodDefault<z.ZodLiteral<"ridge-vent">>;
20
26
  material: z.ZodOptional<z.ZodObject<{
21
27
  id: z.ZodOptional<z.ZodString>;
22
- preset: z.ZodOptional<z.ZodEnum<{
28
+ preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
23
29
  custom: "custom";
24
30
  white: "white";
25
31
  brick: "brick";
@@ -30,7 +36,7 @@ export declare const RidgeVentNode: z.ZodObject<{
30
36
  plaster: "plaster";
31
37
  tile: "tile";
32
38
  marble: "marble";
33
- }>>;
39
+ }>>>;
34
40
  properties: z.ZodOptional<z.ZodObject<{
35
41
  color: z.ZodDefault<z.ZodString>;
36
42
  roughness: z.ZodDefault<z.ZodNumber>;
@@ -49,7 +55,7 @@ export declare const RidgeVentNode: z.ZodObject<{
49
55
  scale: z.ZodOptional<z.ZodNumber>;
50
56
  }, z.core.$strip>>;
51
57
  }, z.core.$strip>>;
52
- materialPreset: z.ZodDefault<z.ZodString>;
58
+ materialPreset: z.ZodOptional<z.ZodString>;
53
59
  roofSegmentId: z.ZodOptional<z.ZodString>;
54
60
  position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
55
61
  rotation: z.ZodDefault<z.ZodNumber>;
@@ -64,4 +70,13 @@ export declare const RidgeVentNode: z.ZodObject<{
64
70
  endCaps: z.ZodDefault<z.ZodBoolean>;
65
71
  }, z.core.$strip>;
66
72
  export type RidgeVentNode = z.infer<typeof RidgeVentNode>;
73
+ export declare function getRidgeVentLinesForSegment(segment: RoofSegmentNode): RidgeVentLine[];
74
+ export declare function createDefaultRidgeVentsForSegment(segment: RoofSegmentNode): RidgeVentNode[];
75
+ export declare function isDefaultRidgeVentNode(node: unknown, roofSegmentId?: RoofSegmentNode['id']): node is RidgeVentNode;
76
+ export declare function hasAutoRidgeVentMetadata(segment: Pick<RoofSegmentNode, 'metadata'>): segment is Pick<RoofSegmentNode, 'metadata'> & {
77
+ metadata: Record<string, unknown> & {
78
+ autoRidgeVent: boolean;
79
+ };
80
+ };
81
+ export declare function isAutoRidgeVentEnabled(segment: Pick<RoofSegmentNode, 'id' | 'children' | 'metadata'>, nodes?: Record<string, unknown>): boolean;
67
82
  //# sourceMappingURL=ridge-vent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ridge-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/ridge-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BzB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA"}
1
+ {"version":3,"file":"ridge-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/ridge-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,gBAAgB,CAAA;AAyBvB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BzB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE,CAkJrF;AAQD,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE,CAiB3F;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,aAAa,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,GACpC,IAAI,IAAI,aAAa,CAyBvB;AASD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GACzC,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IAChD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/D,CAEA;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,EAC9D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAUT"}
@@ -2,13 +2,35 @@ import dedent from 'dedent';
2
2
  import { z } from 'zod';
3
3
  import { BaseNode, nodeType, objectId } from '../base';
4
4
  import { MaterialSchema } from '../material';
5
+ import { getDutchRoofMetrics, getRoofSegmentVisibleTopBounds, ROOF_SHAPE_DEFAULTS, } from './roof-segment';
6
+ const MIN_DEFAULT_RIDGE_VENT_LENGTH_M = 0.4;
7
+ const DEFAULT_RIDGE_VENT_GENERATOR = 'default-ridge-vent';
8
+ const AUTO_RIDGE_VENT_METADATA_KEY = 'autoRidgeVent';
9
+ const LEGACY_DEFAULT_RIDGE_VENT_PRESET = 'preset-white';
10
+ const UNTRIMMED_RIDGE_VENT_BOUNDS_TRIM = {
11
+ left: 0,
12
+ right: 0,
13
+ front: 0,
14
+ back: 0,
15
+ frontLeft: 0,
16
+ frontRight: 0,
17
+ backLeft: 0,
18
+ backRight: 0,
19
+ frontLeftX: 0,
20
+ frontLeftZ: 0,
21
+ frontRightX: 0,
22
+ frontRightZ: 0,
23
+ backLeftX: 0,
24
+ backLeftZ: 0,
25
+ backRightX: 0,
26
+ backRightZ: 0,
27
+ };
5
28
  export const RidgeVentNode = BaseNode.extend({
6
29
  id: objectId('rvent'),
7
30
  type: nodeType('ridge-vent'),
8
31
  material: MaterialSchema.optional(),
9
- // See note on box-vent: default to white so the paint inspector
10
- // reflects the current visual state instead of "no material".
11
- materialPreset: z.string().default('preset-white'),
32
+ // Unpainted ridge vents inherit the roof top material in the renderer.
33
+ materialPreset: z.string().optional(),
12
34
  roofSegmentId: z.string().optional(),
13
35
  position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
14
36
  rotation: z.number().default(0),
@@ -28,3 +50,199 @@ export const RidgeVentNode = BaseNode.extend({
28
50
  - style: standard (curved cap) / shingled / metal
29
51
  - endCaps: cap both ends or leave open
30
52
  `);
53
+ export function getRidgeVentLinesForSegment(segment) {
54
+ const bounds = getRoofSegmentVisibleTopBounds({
55
+ ...segment,
56
+ trim: UNTRIMMED_RIDGE_VENT_BOUNDS_TRIM,
57
+ });
58
+ const { width, depth, minX, maxX, minZ, maxZ } = bounds;
59
+ if (segment.roofType === 'flat' || segment.roofType === 'shed')
60
+ return [];
61
+ const halfW = width / 2;
62
+ const halfD = depth / 2;
63
+ const ridgeZVisible = minZ <= 0 && maxZ >= 0;
64
+ const ridgeXVisible = minX <= 0 && maxX >= 0;
65
+ if (segment.roofType === 'mansard') {
66
+ const inset = Math.min(Math.min(width, depth) *
67
+ (segment.mansardSteepWidthRatio ?? ROOF_SHAPE_DEFAULTS.mansardSteepWidthRatio), Math.max(0, Math.min(width, depth) / 2 - 0.01));
68
+ const shoulderMinX = minX + inset;
69
+ const shoulderMaxX = maxX - inset;
70
+ const shoulderMinZ = minZ + inset;
71
+ const shoulderMaxZ = maxZ - inset;
72
+ const topW = Math.max(0, shoulderMaxX - shoulderMinX);
73
+ const topD = Math.max(0, shoulderMaxZ - shoulderMinZ);
74
+ const lowerSlopeLines = [
75
+ {
76
+ name: 'Slope Ridge Vent',
77
+ start: [shoulderMinX, shoulderMaxZ],
78
+ end: [minX, maxZ],
79
+ },
80
+ {
81
+ name: 'Slope Ridge Vent',
82
+ start: [shoulderMaxX, shoulderMaxZ],
83
+ end: [maxX, maxZ],
84
+ },
85
+ {
86
+ name: 'Slope Ridge Vent',
87
+ start: [shoulderMaxX, shoulderMinZ],
88
+ end: [maxX, minZ],
89
+ },
90
+ {
91
+ name: 'Slope Ridge Vent',
92
+ start: [shoulderMinX, shoulderMinZ],
93
+ end: [minX, minZ],
94
+ },
95
+ ];
96
+ if (topW >= topD) {
97
+ const leftRidge = [shoulderMinX + topD / 2, 0];
98
+ const rightRidge = [shoulderMaxX - topD / 2, 0];
99
+ return [
100
+ ...(ridgeZVisible ? [{ name: 'Ridge Vent', start: leftRidge, end: rightRidge }] : []),
101
+ { name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMaxZ], end: leftRidge },
102
+ { name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMinZ], end: leftRidge },
103
+ { name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMaxZ], end: rightRidge },
104
+ { name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMinZ], end: rightRidge },
105
+ ...lowerSlopeLines,
106
+ ];
107
+ }
108
+ const frontRidge = [0, shoulderMaxZ - topW / 2];
109
+ const backRidge = [0, shoulderMinZ + topW / 2];
110
+ return [
111
+ ...(ridgeXVisible ? [{ name: 'Ridge Vent', start: frontRidge, end: backRidge }] : []),
112
+ { name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMaxZ], end: frontRidge },
113
+ { name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMaxZ], end: frontRidge },
114
+ { name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMinZ], end: backRidge },
115
+ { name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMinZ], end: backRidge },
116
+ ...lowerSlopeLines,
117
+ ];
118
+ }
119
+ if (segment.roofType === 'dutch') {
120
+ const { axis, inset } = getDutchRoofMetrics(segment);
121
+ // The rendered hip arris and waist come from the EXPANDED (overhang +
122
+ // shingle) rectangle — the same dims the eave corners below use — while
123
+ // the inset is base-derived (matches getDutchRoofMetrics / the brush
124
+ // builder). Deriving the waist from `getDutchRoofMetrics`' own base-dim
125
+ // half-spans would tilt the hip lines off the arris on any roof with
126
+ // overhang, sinking the vents into the slope. Mirror the mansard branch:
127
+ // one coordinate system (expanded bounds) for both eave and waist.
128
+ const waistLengthRatio = segment.dutchWaistLengthRatio ?? ROOF_SHAPE_DEFAULTS.dutchWaistLengthRatio;
129
+ const waistHalfX = axis === 'x' ? Math.max(0, (halfW - inset) * waistLengthRatio) : Math.max(0, halfW - inset);
130
+ const waistHalfZ = axis === 'x' ? Math.max(0, halfD - inset) : Math.max(0, (halfD - inset) * waistLengthRatio);
131
+ if (!(waistHalfX > 0.001 && waistHalfZ > 0.001))
132
+ return [];
133
+ // Dutch lower hip vents should terminate where the lower slope actually
134
+ // meets the gablet rake, not at the inner waist line of the upper gable
135
+ // triangle. Mirror the rendered roof shell's "outer waist" cap with the
136
+ // same expanded-bounds frame we use for the eave corners above.
137
+ const rake = segment.dutchGabletRake ?? ROOF_SHAPE_DEFAULTS.dutchGabletRake;
138
+ const rakeReach = axis === 'x'
139
+ ? Math.min(Math.max(0, rake), Math.max(0, halfW - waistHalfX) * 0.98)
140
+ : Math.min(Math.max(0, rake), Math.max(0, halfD - waistHalfZ) * 0.98);
141
+ const rakeEndHalfX = axis === 'x' ? waistHalfX + rakeReach : waistHalfX;
142
+ const rakeEndHalfZ = axis === 'x' ? waistHalfZ : waistHalfZ + rakeReach;
143
+ const mainRidgeVisible = axis === 'x' ? ridgeZVisible : ridgeXVisible;
144
+ const ridgeStart = axis === 'x' ? [-rakeEndHalfX, 0] : [0, rakeEndHalfZ];
145
+ const ridgeEnd = axis === 'x' ? [rakeEndHalfX, 0] : [0, -rakeEndHalfZ];
146
+ return [
147
+ ...(mainRidgeVisible ? [{ name: 'Ridge Vent', start: ridgeStart, end: ridgeEnd }] : []),
148
+ { name: 'Hip Ridge Vent', start: [minX, maxZ], end: [-rakeEndHalfX, rakeEndHalfZ] },
149
+ { name: 'Hip Ridge Vent', start: [maxX, maxZ], end: [rakeEndHalfX, rakeEndHalfZ] },
150
+ { name: 'Hip Ridge Vent', start: [maxX, minZ], end: [rakeEndHalfX, -rakeEndHalfZ] },
151
+ { name: 'Hip Ridge Vent', start: [minX, minZ], end: [-rakeEndHalfX, -rakeEndHalfZ] },
152
+ ];
153
+ }
154
+ if (segment.roofType !== 'hip') {
155
+ if (!ridgeZVisible)
156
+ return [];
157
+ return [
158
+ {
159
+ name: 'Ridge Vent',
160
+ start: [minX, 0],
161
+ end: [maxX, 0],
162
+ },
163
+ ];
164
+ }
165
+ if (width >= depth) {
166
+ const leftRidge = [minX + halfD, 0];
167
+ const rightRidge = [maxX - halfD, 0];
168
+ return [
169
+ ...(ridgeZVisible ? [{ name: 'Ridge Vent', start: leftRidge, end: rightRidge }] : []),
170
+ { name: 'Hip Ridge Vent', start: [minX, maxZ], end: leftRidge },
171
+ { name: 'Hip Ridge Vent', start: [minX, minZ], end: leftRidge },
172
+ { name: 'Hip Ridge Vent', start: [maxX, maxZ], end: rightRidge },
173
+ { name: 'Hip Ridge Vent', start: [maxX, minZ], end: rightRidge },
174
+ ];
175
+ }
176
+ const frontRidge = [0, maxZ - halfW];
177
+ const backRidge = [0, minZ + halfW];
178
+ return [
179
+ ...(ridgeXVisible ? [{ name: 'Ridge Vent', start: frontRidge, end: backRidge }] : []),
180
+ { name: 'Hip Ridge Vent', start: [minX, maxZ], end: frontRidge },
181
+ { name: 'Hip Ridge Vent', start: [maxX, maxZ], end: frontRidge },
182
+ { name: 'Hip Ridge Vent', start: [minX, minZ], end: backRidge },
183
+ { name: 'Hip Ridge Vent', start: [maxX, minZ], end: backRidge },
184
+ ];
185
+ }
186
+ function getLineYaw(start, end) {
187
+ const dx = end[0] - start[0];
188
+ const dz = end[1] - start[1];
189
+ return Math.atan2(-dz, dx);
190
+ }
191
+ export function createDefaultRidgeVentsForSegment(segment) {
192
+ return getRidgeVentLinesForSegment(segment)
193
+ .map((line) => {
194
+ const length = Math.hypot(line.end[0] - line.start[0], line.end[1] - line.start[1]);
195
+ if (length < MIN_DEFAULT_RIDGE_VENT_LENGTH_M)
196
+ return null;
197
+ return RidgeVentNode.parse({
198
+ name: line.name,
199
+ roofSegmentId: segment.id,
200
+ position: [(line.start[0] + line.end[0]) / 2, 0, (line.start[1] + line.end[1]) / 2],
201
+ rotation: getLineYaw(line.start, line.end),
202
+ length,
203
+ style: 'shingled',
204
+ metadata: { generatedBy: DEFAULT_RIDGE_VENT_GENERATOR },
205
+ });
206
+ })
207
+ .filter((vent) => vent !== null);
208
+ }
209
+ export function isDefaultRidgeVentNode(node, roofSegmentId) {
210
+ const parsed = RidgeVentNode.safeParse(node);
211
+ if (!parsed.success)
212
+ return false;
213
+ const vent = parsed.data;
214
+ if (roofSegmentId && vent.roofSegmentId !== roofSegmentId)
215
+ return false;
216
+ const metadata = vent.metadata;
217
+ if (typeof metadata === 'object' &&
218
+ metadata !== null &&
219
+ metadata.generatedBy === DEFAULT_RIDGE_VENT_GENERATOR) {
220
+ return true;
221
+ }
222
+ const hasDefaultName = vent.name === 'Ridge Vent' ||
223
+ vent.name === 'Hip Ridge Vent' ||
224
+ vent.name === 'Shoulder Ridge Vent' ||
225
+ vent.name === 'Slope Ridge Vent';
226
+ return (hasDefaultName &&
227
+ vent.style === 'shingled' &&
228
+ vent.material === undefined &&
229
+ vent.materialPreset === LEGACY_DEFAULT_RIDGE_VENT_PRESET);
230
+ }
231
+ function metadataRecord(metadata) {
232
+ if (typeof metadata === 'object' && metadata !== null && !Array.isArray(metadata)) {
233
+ return metadata;
234
+ }
235
+ return {};
236
+ }
237
+ export function hasAutoRidgeVentMetadata(segment) {
238
+ return typeof metadataRecord(segment.metadata)[AUTO_RIDGE_VENT_METADATA_KEY] === 'boolean';
239
+ }
240
+ export function isAutoRidgeVentEnabled(segment, nodes) {
241
+ const metadataValue = metadataRecord(segment.metadata)[AUTO_RIDGE_VENT_METADATA_KEY];
242
+ if (typeof metadataValue === 'boolean') {
243
+ return metadataValue;
244
+ }
245
+ if (!nodes)
246
+ return false;
247
+ return (segment.children ?? []).some((childId) => isDefaultRidgeVentNode(nodes[childId], segment.id));
248
+ }
@@ -0,0 +1,90 @@
1
+ import { type RoofType } from './roof-segment';
2
+ export type RoofShapeFaceVertex = {
3
+ x: number;
4
+ y: number;
5
+ z: number;
6
+ };
7
+ export type RoofShapeInsets = {
8
+ iF?: number;
9
+ iB?: number;
10
+ iL?: number;
11
+ iR?: number;
12
+ dutchI?: number;
13
+ };
14
+ export type RoofShapeRatios = {
15
+ gambrelLowerWidthRatio: number;
16
+ mansardSteepWidthRatio: number;
17
+ dutchHipWidthRatio: number;
18
+ dutchHipHeightRatio: number;
19
+ dutchWaistLengthRatio: number;
20
+ dutchGabletRake: number;
21
+ };
22
+ export declare function getRoofShapeRatios(input: {
23
+ gambrelLowerWidthRatio?: number;
24
+ mansardSteepWidthRatio?: number;
25
+ dutchHipWidthRatio?: number;
26
+ dutchHipHeightRatio?: number;
27
+ dutchWaistLengthRatio?: number;
28
+ dutchGabletRake?: number;
29
+ }): RoofShapeRatios;
30
+ export type DutchRoofShapeMetrics = {
31
+ axis: 'width' | 'depth';
32
+ inset: number;
33
+ middleHeight: number;
34
+ peakHeight: number;
35
+ rakeReach: number;
36
+ innerWaistHalfX: number;
37
+ innerWaistHalfZ: number;
38
+ outerWaistHalfX: number;
39
+ outerWaistHalfZ: number;
40
+ };
41
+ export declare function getDutchRoofShapeMetrics(input: {
42
+ w: number;
43
+ d: number;
44
+ wh: number;
45
+ rh: number;
46
+ dutchI?: number;
47
+ baseW: number;
48
+ baseD: number;
49
+ shapeRatios: RoofShapeRatios;
50
+ }): DutchRoofShapeMetrics | null;
51
+ export declare function getRoofShapeInsets(input: {
52
+ roofType: RoofType;
53
+ width: number;
54
+ depth: number;
55
+ wh: number;
56
+ baseY: number;
57
+ isVoid: boolean;
58
+ brushW: number;
59
+ brushD: number;
60
+ tanTheta: number;
61
+ shingleThickness: number;
62
+ dutchHipWidthRatio: number;
63
+ }): RoofShapeInsets;
64
+ export declare function getDutchEndSlopeFaces(input: {
65
+ w: number;
66
+ d: number;
67
+ wh: number;
68
+ rh: number;
69
+ insets: RoofShapeInsets;
70
+ baseW: number;
71
+ baseD: number;
72
+ shapeRatios: RoofShapeRatios;
73
+ dutchTopRakeThickness?: number;
74
+ }): RoofShapeFaceVertex[][];
75
+ export declare function getRoofModuleFaces(input: {
76
+ type: RoofType;
77
+ w: number;
78
+ d: number;
79
+ wh: number;
80
+ rh: number;
81
+ baseY: number;
82
+ insets: RoofShapeInsets;
83
+ baseW: number;
84
+ baseD: number;
85
+ tanTheta: number;
86
+ shapeRatios: RoofShapeRatios;
87
+ excludeDutchEndSlopes?: boolean;
88
+ dutchTopRakeThickness?: number;
89
+ }): RoofShapeFaceVertex[][];
90
+ //# sourceMappingURL=roof-segment-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roof-segment-shape.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment-shape.ts"],"names":[],"mappings":"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"}