@pascal-app/core 0.8.0 → 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.
- package/dist/events/bus.d.ts +67 -13
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
- package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
- package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
- package/dist/hooks/scene-registry/scene-registry.d.ts +14 -23
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/scene-registry/scene-registry.js +59 -26
- package/dist/hooks/scene-registry/scene-registry.test.d.ts +2 -0
- package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +1 -0
- package/dist/hooks/scene-registry/scene-registry.test.js +26 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +14 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +51 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +2 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +366 -0
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +79 -11
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +508 -141
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +28 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +109 -18
- package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +2 -0
- package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +363 -0
- package/dist/index.d.ts +36 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -6
- package/dist/lib/level-name.d.ts +4 -0
- package/dist/lib/level-name.d.ts.map +1 -0
- package/dist/lib/level-name.js +10 -0
- package/dist/lib/measurement-geometry.d.ts +19 -0
- package/dist/lib/measurement-geometry.d.ts.map +1 -0
- package/dist/lib/measurement-geometry.js +232 -0
- package/dist/lib/measurement-geometry.test.d.ts +2 -0
- package/dist/lib/measurement-geometry.test.d.ts.map +1 -0
- package/dist/lib/measurement-geometry.test.js +102 -0
- package/dist/lib/polygon-geometry.d.ts +0 -1
- package/dist/lib/polygon-geometry.d.ts.map +1 -1
- package/dist/lib/polygon-geometry.js +0 -18
- package/dist/lib/polygon-relations.d.ts +10 -0
- package/dist/lib/polygon-relations.d.ts.map +1 -0
- package/dist/lib/polygon-relations.js +73 -0
- package/dist/lib/selection-proxy.d.ts +4 -0
- package/dist/lib/selection-proxy.d.ts.map +1 -0
- package/dist/lib/selection-proxy.js +12 -0
- package/dist/lib/slab-polygon.d.ts +31 -2
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +525 -31
- package/dist/lib/slab-polygon.test.d.ts +2 -0
- package/dist/lib/slab-polygon.test.d.ts.map +1 -0
- package/dist/lib/slab-polygon.test.js +635 -0
- package/dist/lib/slots.d.ts +14 -0
- package/dist/lib/slots.d.ts.map +1 -0
- package/dist/lib/slots.js +26 -0
- package/dist/lib/space-detection-pause.test.d.ts +2 -0
- package/dist/lib/space-detection-pause.test.d.ts.map +1 -0
- package/dist/lib/space-detection-pause.test.js +42 -0
- package/dist/lib/space-detection.d.ts +54 -2
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +599 -124
- package/dist/lib/space-detection.test.d.ts +2 -0
- package/dist/lib/space-detection.test.d.ts.map +1 -0
- package/dist/lib/space-detection.test.js +376 -0
- package/dist/lib/wall-distance.d.ts +60 -0
- package/dist/lib/wall-distance.d.ts.map +1 -0
- package/dist/lib/wall-distance.js +85 -0
- package/dist/lib/zone-quantities.d.ts +21 -0
- package/dist/lib/zone-quantities.d.ts.map +1 -0
- package/dist/lib/zone-quantities.js +183 -0
- package/dist/lib/zone-quantities.test.d.ts +2 -0
- package/dist/lib/zone-quantities.test.d.ts.map +1 -0
- package/dist/lib/zone-quantities.test.js +82 -0
- package/dist/material-library.d.ts +20 -1
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +3737 -200
- package/dist/registry/__bench__/relations-resolver.bench.d.ts +15 -0
- package/dist/registry/__bench__/relations-resolver.bench.d.ts.map +1 -0
- package/dist/registry/__bench__/relations-resolver.bench.js +170 -0
- package/dist/registry/handles.d.ts +394 -0
- package/dist/registry/handles.d.ts.map +1 -0
- package/dist/registry/handles.js +24 -0
- package/dist/registry/index.d.ts +7 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +4 -0
- package/dist/registry/registry.d.ts +136 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +282 -0
- package/dist/registry/registry.test.d.ts +2 -0
- package/dist/registry/registry.test.d.ts.map +1 -0
- package/dist/registry/registry.test.js +196 -0
- package/dist/registry/relations-resolver.d.ts +42 -0
- package/dist/registry/relations-resolver.d.ts.map +1 -0
- package/dist/registry/relations-resolver.js +77 -0
- package/dist/registry/relations-resolver.test.d.ts +2 -0
- package/dist/registry/relations-resolver.test.d.ts.map +1 -0
- package/dist/registry/relations-resolver.test.js +183 -0
- package/dist/registry/scene-api.d.ts +44 -0
- package/dist/registry/scene-api.d.ts.map +1 -0
- package/dist/registry/scene-api.js +111 -0
- package/dist/registry/scene-api.test.d.ts +2 -0
- package/dist/registry/scene-api.test.d.ts.map +1 -0
- package/dist/registry/scene-api.test.js +183 -0
- package/dist/registry/subtree.d.ts +67 -0
- package/dist/registry/subtree.d.ts.map +1 -0
- package/dist/registry/subtree.js +123 -0
- package/dist/registry/subtree.test.d.ts +2 -0
- package/dist/registry/subtree.test.d.ts.map +1 -0
- package/dist/registry/subtree.test.js +163 -0
- package/dist/registry/types.d.ts +2099 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +1 -0
- package/dist/schema/index.d.ts +35 -4
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +32 -4
- package/dist/schema/material.d.ts +13 -2
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +17 -5
- package/dist/schema/material.test.d.ts +2 -0
- package/dist/schema/material.test.d.ts.map +1 -0
- package/dist/schema/material.test.js +43 -0
- package/dist/schema/nodes/box-vent.d.ts +74 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -0
- package/dist/schema/nodes/box-vent.js +63 -0
- package/dist/schema/nodes/building.d.ts +1 -1
- package/dist/schema/nodes/building.d.ts.map +1 -1
- package/dist/schema/nodes/building.js +3 -2
- package/dist/schema/nodes/cabinet.d.ts +534 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -0
- package/dist/schema/nodes/cabinet.js +137 -0
- package/dist/schema/nodes/ceiling.d.ts +5 -2
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -1
- package/dist/schema/nodes/chimney.d.ts +158 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -0
- package/dist/schema/nodes/chimney.js +67 -0
- package/dist/schema/nodes/column.d.ts +600 -7
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +589 -6
- package/dist/schema/nodes/cupola.d.ts +66 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -0
- package/dist/schema/nodes/cupola.js +28 -0
- package/dist/schema/nodes/door.d.ts +13 -5
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +12 -0
- package/dist/schema/nodes/dormer.d.ts +228 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -0
- package/dist/schema/nodes/dormer.js +119 -0
- package/dist/schema/nodes/downspout.d.ts +75 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -0
- package/dist/schema/nodes/downspout.js +63 -0
- package/dist/schema/nodes/duct-fitting.d.ts +91 -0
- package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/duct-fitting.js +92 -0
- package/dist/schema/nodes/duct-segment.d.ts +61 -0
- package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
- package/dist/schema/nodes/duct-segment.js +73 -0
- package/dist/schema/nodes/duct-terminal.d.ts +57 -0
- package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
- package/dist/schema/nodes/duct-terminal.js +51 -0
- package/dist/schema/nodes/elevator.d.ts +106 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -0
- package/dist/schema/nodes/elevator.js +57 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts +68 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -0
- package/dist/schema/nodes/eyebrow-vent.js +40 -0
- package/dist/schema/nodes/fence.d.ts +19 -2
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +27 -2
- package/dist/schema/nodes/gutter.d.ts +84 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -0
- package/dist/schema/nodes/gutter.js +76 -0
- package/dist/schema/nodes/hvac-equipment.d.ts +63 -0
- package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
- package/dist/schema/nodes/hvac-equipment.js +55 -0
- package/dist/schema/nodes/item.d.ts +12 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +20 -0
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/level.js +4 -0
- package/dist/schema/nodes/lineset.d.ts +42 -0
- package/dist/schema/nodes/lineset.d.ts.map +1 -0
- package/dist/schema/nodes/lineset.js +38 -0
- package/dist/schema/nodes/liquid-line.d.ts +34 -0
- package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
- package/dist/schema/nodes/liquid-line.js +24 -0
- package/dist/schema/nodes/measurement.d.ts +306 -0
- package/dist/schema/nodes/measurement.d.ts.map +1 -0
- package/dist/schema/nodes/measurement.js +87 -0
- package/dist/schema/nodes/measurement.test.d.ts +2 -0
- package/dist/schema/nodes/measurement.test.d.ts.map +1 -0
- package/dist/schema/nodes/measurement.test.js +139 -0
- package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
- package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-fitting.js +45 -0
- package/dist/schema/nodes/pipe-segment.d.ts +48 -0
- package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-segment.js +36 -0
- package/dist/schema/nodes/pipe-trap.d.ts +43 -0
- package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-trap.js +36 -0
- package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +2 -0
- package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +1 -0
- package/dist/schema/nodes/ridge-vent-defaults.test.js +205 -0
- package/dist/schema/nodes/ridge-vent.d.ts +82 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -0
- package/dist/schema/nodes/ridge-vent.js +248 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-shape.js +318 -0
- package/dist/schema/nodes/roof-segment-shape.test.d.ts +2 -0
- package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-shape.test.js +175 -0
- package/dist/schema/nodes/roof-segment-surface.test.d.ts +2 -0
- package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-surface.test.js +48 -0
- package/dist/schema/nodes/roof-segment-trim.test.d.ts +2 -0
- package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-trim.test.js +107 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-walls.js +330 -0
- package/dist/schema/nodes/roof-segment-walls.test.d.ts +2 -0
- package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-walls.test.js +92 -0
- package/dist/schema/nodes/roof-segment.d.ts +273 -3
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +539 -3
- package/dist/schema/nodes/roof.d.ts +8 -8
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -16
- package/dist/schema/nodes/shelf.d.ts +106 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -0
- package/dist/schema/nodes/shelf.js +90 -0
- package/dist/schema/nodes/site.d.ts +1 -122
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +2 -6
- package/dist/schema/nodes/skylight.d.ts +279 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -0
- package/dist/schema/nodes/skylight.js +152 -0
- package/dist/schema/nodes/slab.d.ts +5 -2
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +5 -1
- package/dist/schema/nodes/solar-panel.d.ts +117 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -0
- package/dist/schema/nodes/solar-panel.js +47 -0
- package/dist/schema/nodes/stair-segment.d.ts +4 -4
- package/dist/schema/nodes/stair.d.ts +13 -12
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/surface-hole-metadata.d.ts +2 -0
- package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -1
- package/dist/schema/nodes/surface-hole-metadata.js +3 -1
- package/dist/schema/nodes/turbine-vent.d.ts +68 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -0
- package/dist/schema/nodes/turbine-vent.js +41 -0
- package/dist/schema/nodes/wall.d.ts +245 -6
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +257 -0
- package/dist/schema/nodes/wall.test.d.ts +2 -0
- package/dist/schema/nodes/wall.test.d.ts.map +1 -0
- package/dist/schema/nodes/wall.test.js +208 -0
- package/dist/schema/nodes/window.d.ts +11 -3
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +12 -0
- package/dist/schema/nodes/zone.d.ts +2 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +6 -0
- package/dist/schema/scene-material.d.ts +41 -0
- package/dist/schema/scene-material.d.ts.map +1 -0
- package/dist/schema/scene-material.js +9 -0
- package/dist/schema/types.d.ts +2850 -655
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +49 -0
- package/dist/services/alignment-anchors.d.ts +100 -0
- package/dist/services/alignment-anchors.d.ts.map +1 -0
- package/dist/services/alignment-anchors.js +312 -0
- package/dist/services/alignment-anchors.test.d.ts +2 -0
- package/dist/services/alignment-anchors.test.d.ts.map +1 -0
- package/dist/services/alignment-anchors.test.js +383 -0
- package/dist/services/alignment.d.ts +131 -0
- package/dist/services/alignment.d.ts.map +1 -0
- package/dist/services/alignment.js +171 -0
- package/dist/services/alignment.test.d.ts +2 -0
- package/dist/services/alignment.test.d.ts.map +1 -0
- package/dist/services/alignment.test.js +92 -0
- package/dist/services/drag-session.d.ts +47 -0
- package/dist/services/drag-session.d.ts.map +1 -0
- package/dist/services/drag-session.js +100 -0
- package/dist/services/drag-session.test.d.ts +2 -0
- package/dist/services/drag-session.test.d.ts.map +1 -0
- package/dist/services/drag-session.test.js +219 -0
- package/dist/services/hosting.d.ts +88 -0
- package/dist/services/hosting.d.ts.map +1 -0
- package/dist/services/hosting.js +131 -0
- package/dist/services/hosting.test.d.ts +2 -0
- package/dist/services/hosting.test.d.ts.map +1 -0
- package/dist/services/hosting.test.js +230 -0
- package/dist/services/index.d.ts +13 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +12 -0
- package/dist/services/level-height.d.ts +28 -0
- package/dist/services/level-height.d.ts.map +1 -0
- package/dist/services/level-height.js +62 -0
- package/dist/services/movement.d.ts +48 -0
- package/dist/services/movement.d.ts.map +1 -0
- package/dist/services/movement.js +65 -0
- package/dist/services/movement.test.d.ts +2 -0
- package/dist/services/movement.test.d.ts.map +1 -0
- package/dist/services/movement.test.js +133 -0
- package/dist/services/opening-guides.d.ts +141 -0
- package/dist/services/opening-guides.d.ts.map +1 -0
- package/dist/services/opening-guides.js +267 -0
- package/dist/services/opening-guides.test.d.ts +2 -0
- package/dist/services/opening-guides.test.d.ts.map +1 -0
- package/dist/services/opening-guides.test.js +208 -0
- package/dist/services/port-connectivity.d.ts +115 -0
- package/dist/services/port-connectivity.d.ts.map +1 -0
- package/dist/services/port-connectivity.js +300 -0
- package/dist/services/port-connectivity.test.d.ts +2 -0
- package/dist/services/port-connectivity.test.d.ts.map +1 -0
- package/dist/services/port-connectivity.test.js +297 -0
- package/dist/services/riser-diagram.d.ts +40 -0
- package/dist/services/riser-diagram.d.ts.map +1 -0
- package/dist/services/riser-diagram.js +110 -0
- package/dist/services/riser-diagram.test.d.ts +2 -0
- package/dist/services/riser-diagram.test.d.ts.map +1 -0
- package/dist/services/riser-diagram.test.js +66 -0
- package/dist/services/single-undo-dance.test.d.ts +2 -0
- package/dist/services/single-undo-dance.test.d.ts.map +1 -0
- package/dist/services/single-undo-dance.test.js +210 -0
- package/dist/services/snap.d.ts +80 -0
- package/dist/services/snap.d.ts.map +1 -0
- package/dist/services/snap.js +140 -0
- package/dist/services/snap.test.d.ts +2 -0
- package/dist/services/snap.test.d.ts.map +1 -0
- package/dist/services/snap.test.js +137 -0
- package/dist/services/system-graph.d.ts +30 -0
- package/dist/services/system-graph.d.ts.map +1 -0
- package/dist/services/system-graph.js +164 -0
- package/dist/services/system-graph.test.d.ts +2 -0
- package/dist/services/system-graph.test.d.ts.map +1 -0
- package/dist/services/system-graph.test.js +138 -0
- package/dist/services/validate-dwv.d.ts +32 -0
- package/dist/services/validate-dwv.d.ts.map +1 -0
- package/dist/services/validate-dwv.js +118 -0
- package/dist/services/validate-dwv.test.d.ts +2 -0
- package/dist/services/validate-dwv.test.d.ts.map +1 -0
- package/dist/services/validate-dwv.test.js +109 -0
- package/dist/solar-panel-presets.d.ts +17 -0
- package/dist/solar-panel-presets.d.ts.map +1 -0
- package/dist/solar-panel-presets.js +43 -0
- package/dist/store/actions/node-actions.d.ts +14 -2
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +585 -15
- package/dist/store/actions/node-mutation-sanitize.test.d.ts +2 -0
- package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +1 -0
- package/dist/store/actions/node-mutation-sanitize.test.js +147 -0
- package/dist/store/actions/reparent.test.d.ts +2 -0
- package/dist/store/actions/reparent.test.d.ts.map +1 -0
- package/dist/store/actions/reparent.test.js +212 -0
- package/dist/store/actions/ridge-vent-update.test.d.ts +2 -0
- package/dist/store/actions/ridge-vent-update.test.d.ts.map +1 -0
- package/dist/store/actions/ridge-vent-update.test.js +264 -0
- package/dist/store/history-control.d.ts +11 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +33 -0
- package/dist/store/use-interactive.d.ts +39 -0
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +75 -0
- package/dist/store/use-live-node-overrides.d.ts +22 -0
- package/dist/store/use-live-node-overrides.d.ts.map +1 -0
- package/dist/store/use-live-node-overrides.js +59 -0
- package/dist/store/use-scene-dirty-tracking.test.d.ts +2 -0
- package/dist/store/use-scene-dirty-tracking.test.d.ts.map +1 -0
- package/dist/store/use-scene-dirty-tracking.test.js +68 -0
- package/dist/store/use-scene-elevator-migration.test.d.ts +2 -0
- package/dist/store/use-scene-elevator-migration.test.d.ts.map +1 -0
- package/dist/store/use-scene-elevator-migration.test.js +109 -0
- package/dist/store/use-scene-measurement-roundtrip.test.d.ts +2 -0
- package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +1 -0
- package/dist/store/use-scene-measurement-roundtrip.test.js +97 -0
- package/dist/store/use-scene-plugins.test.d.ts +2 -0
- package/dist/store/use-scene-plugins.test.d.ts.map +1 -0
- package/dist/store/use-scene-plugins.test.js +51 -0
- package/dist/store/use-scene-wall-slot-migration.test.d.ts +2 -0
- package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +1 -0
- package/dist/store/use-scene-wall-slot-migration.test.js +210 -0
- package/dist/store/use-scene-window-migration.test.d.ts +2 -0
- package/dist/store/use-scene-window-migration.test.d.ts.map +1 -0
- package/dist/store/use-scene-window-migration.test.js +85 -0
- package/dist/store/use-scene.d.ts +28 -2
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +546 -49
- package/dist/systems/elevator/elevator-dispatch.d.ts +12 -0
- package/dist/systems/elevator/elevator-dispatch.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-dispatch.js +57 -0
- package/dist/systems/elevator/elevator-geometry.d.ts +15 -0
- package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-geometry.js +50 -0
- package/dist/systems/elevator/elevator-opening-sync.d.ts +6 -0
- package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-opening-sync.js +218 -0
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts +2 -0
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-opening-sync.test.js +146 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts +2 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-opening-system.js +48 -0
- package/dist/systems/elevator/elevator-runtime-system.d.ts +2 -0
- package/dist/systems/elevator/elevator-runtime-system.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-runtime-system.js +8 -0
- package/dist/systems/elevator/elevator-runtime.d.ts +18 -0
- package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-runtime.js +225 -0
- package/dist/systems/elevator/elevator-runtime.test.d.ts +2 -0
- package/dist/systems/elevator/elevator-runtime.test.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-runtime.test.js +64 -0
- package/dist/systems/elevator/elevator-service.d.ts +19 -0
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -0
- package/dist/systems/elevator/elevator-service.js +111 -0
- package/dist/systems/fence/fence-centerline.d.ts +12 -0
- package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
- package/dist/systems/fence/fence-centerline.js +37 -0
- package/dist/systems/fence/fence-spline.d.ts +39 -0
- package/dist/systems/fence/fence-spline.d.ts.map +1 -0
- package/dist/systems/fence/fence-spline.js +196 -0
- package/dist/systems/fence/fence-spline.test.d.ts +2 -0
- package/dist/systems/fence/fence-spline.test.d.ts.map +1 -0
- package/dist/systems/fence/fence-spline.test.js +136 -0
- package/dist/systems/stair/stair-footprint.d.ts +44 -0
- package/dist/systems/stair/stair-footprint.d.ts.map +1 -0
- package/dist/systems/stair/stair-footprint.js +178 -0
- package/dist/systems/stair/stair-opening-preview.d.ts +2447 -0
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -0
- package/dist/systems/stair/stair-opening-preview.js +93 -0
- package/dist/systems/stair/stair-opening-preview.test.d.ts +2 -0
- package/dist/systems/stair/stair-opening-preview.test.d.ts.map +1 -0
- package/dist/systems/stair/stair-opening-preview.test.js +80 -0
- package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.js +155 -147
- package/dist/systems/stair/stair-opening-sync.test.js +424 -2
- package/dist/systems/stair/stair-opening-system.d.ts +2 -0
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -0
- package/dist/systems/stair/stair-opening-system.js +104 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +38 -2
- package/dist/systems/wall/wall-mitering.test.d.ts +2 -0
- package/dist/systems/wall/wall-mitering.test.d.ts.map +1 -0
- package/dist/systems/wall/wall-mitering.test.js +63 -0
- package/dist/systems/wall/wall-move.d.ts +48 -0
- package/dist/systems/wall/wall-move.d.ts.map +1 -0
- package/dist/systems/wall/wall-move.js +193 -0
- package/dist/utils/clone-scene-graph.d.ts +7 -4
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +29 -7
- package/dist/utils/clone-scene-graph.test.d.ts +2 -0
- package/dist/utils/clone-scene-graph.test.d.ts.map +1 -0
- package/dist/utils/clone-scene-graph.test.js +62 -0
- package/dist/utils/heal-scene-graph.d.ts +18 -0
- package/dist/utils/heal-scene-graph.d.ts.map +1 -0
- package/dist/utils/heal-scene-graph.js +90 -0
- package/dist/utils/heal-scene-graph.test.d.ts +2 -0
- package/dist/utils/heal-scene-graph.test.d.ts.map +1 -0
- package/dist/utils/heal-scene-graph.test.js +88 -0
- package/dist/validation/validate-build-json.d.ts +44 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -0
- package/dist/validation/validate-build-json.js +256 -0
- package/package.json +11 -4
|
@@ -76,7 +76,16 @@ const assetSchema = z.object({
|
|
|
76
76
|
src: AssetUrl,
|
|
77
77
|
dimensions: z.tuple([z.number(), z.number(), z.number()]).default([1, 1, 1]), // [w, h, d]
|
|
78
78
|
attachTo: z.enum(['wall', 'wall-side', 'ceiling']).optional(),
|
|
79
|
+
// Ceiling fixtures (e.g. recessed downlights) that embed *into* the ceiling
|
|
80
|
+
// rather than hang below it: the item seats flush with the ceiling plane
|
|
81
|
+
// (its body rising into the void above) and the ceiling is cut out around
|
|
82
|
+
// the item's footprint. Ignored unless `attachTo === 'ceiling'`.
|
|
83
|
+
recessed: z.boolean().optional(),
|
|
79
84
|
tags: z.array(z.string()).optional(),
|
|
85
|
+
// Function-axis tag slugs from the taxonomy. Drives the hierarchical
|
|
86
|
+
// Items-tab browse: a tree node matches when any of its descendant slugs
|
|
87
|
+
// appears here. Absent for the seeded built-in catalog.
|
|
88
|
+
functionTags: z.array(z.string()).optional(),
|
|
80
89
|
// These are "Corrective" transforms to normalize the GLB
|
|
81
90
|
offset: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
82
91
|
rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
@@ -99,8 +108,19 @@ export const ItemNode = BaseNode.extend({
|
|
|
99
108
|
// Wall attachment properties (only used when asset.attachTo is "wall" or "wall-side")
|
|
100
109
|
wallId: z.string().optional(),
|
|
101
110
|
wallT: z.number().optional(), // 0-1 parametric position along wall
|
|
111
|
+
// Alternative wall host: a roof-segment's generated wall face. When
|
|
112
|
+
// set, `position` is FACE-LOCAL — [u along the face, v = bottom edge,
|
|
113
|
+
// z from the wall mid-plane] — exactly the wall-child convention
|
|
114
|
+
// (ItemSystem's wall-side push applies the same way); the renderer
|
|
115
|
+
// mounts the node inside the face frame (`getRoofWallFaceFrame`).
|
|
116
|
+
roofSegmentId: z.string().optional(),
|
|
117
|
+
roofFace: z.enum(['front', 'back', 'right', 'left']).optional(),
|
|
102
118
|
// Denormalized references to collections this node belongs to
|
|
103
119
|
collectionIds: z.array(z.custom()).optional(),
|
|
120
|
+
// Per-slot material overrides. Key = slot id (see deriveSlotId), value = a
|
|
121
|
+
// MaterialRef string ('library:<id>' or 'scene:<id>'). Absent = authored /
|
|
122
|
+
// registry default. A dangling ref renders the default (never blocks).
|
|
123
|
+
slots: z.record(z.string(), z.string()).optional(),
|
|
104
124
|
asset: assetSchema,
|
|
105
125
|
}).describe(dedent `Item node - used to represent a item in the building
|
|
106
126
|
- position: position in level coordinate system (or parent coordinate system if attached)
|
|
@@ -17,7 +17,7 @@ export declare const LevelNode: z.ZodObject<{
|
|
|
17
17
|
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
18
18
|
id: z.ZodDefault<z.ZodTemplateLiteral<`level_${string}`>>;
|
|
19
19
|
type: z.ZodDefault<z.ZodLiteral<"level">>;
|
|
20
|
-
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`fence_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`column_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`zone_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`ceiling_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`guide_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>]>>>;
|
|
20
|
+
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`fence_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`column_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`zone_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`ceiling_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`guide_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`measurement_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`shelf_${string}`>>]>>>;
|
|
21
21
|
level: z.ZodDefault<z.ZodNumber>;
|
|
22
22
|
}, z.core.$strip>;
|
|
23
23
|
export type LevelNode = z.infer<typeof LevelNode>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAiBvB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iBA+BrB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
|
|
@@ -6,8 +6,10 @@ import { ColumnNode } from './column';
|
|
|
6
6
|
import { FenceNode } from './fence';
|
|
7
7
|
import { GuideNode } from './guide';
|
|
8
8
|
import { ItemNode } from './item';
|
|
9
|
+
import { MeasurementNode } from './measurement';
|
|
9
10
|
import { RoofNode } from './roof';
|
|
10
11
|
import { ScanNode } from './scan';
|
|
12
|
+
import { ShelfNode } from './shelf';
|
|
11
13
|
import { SlabNode } from './slab';
|
|
12
14
|
import { SpawnNode } from './spawn';
|
|
13
15
|
import { StairNode } from './stair';
|
|
@@ -29,7 +31,9 @@ export const LevelNode = BaseNode.extend({
|
|
|
29
31
|
StairNode.shape.id,
|
|
30
32
|
ScanNode.shape.id,
|
|
31
33
|
GuideNode.shape.id,
|
|
34
|
+
MeasurementNode.shape.id,
|
|
32
35
|
SpawnNode.shape.id,
|
|
36
|
+
ShelfNode.shape.id,
|
|
33
37
|
]))
|
|
34
38
|
.default([]),
|
|
35
39
|
// Specific props
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Refrigerant lineset — the copper pipe pair that links the outdoor
|
|
4
|
+
* condenser to the indoor coil (furnace / air handler) of a split system.
|
|
5
|
+
* It is the refrigerant-side analogue of a duct run: a polyline of points,
|
|
6
|
+
* but carrying two lines instead of one airway.
|
|
7
|
+
*
|
|
8
|
+
* Real linesets run a fat insulated SUCTION line (cool vapour back to the
|
|
9
|
+
* compressor) beside a thin bare LIQUID line (warm liquid out to the coil).
|
|
10
|
+
* The geometry builder draws a single copper line on the path centerline
|
|
11
|
+
* (sized to `suctionDiameter`, wrapped in a foam jacket when `insulated`);
|
|
12
|
+
* draw the liquid line as a second lineset rather than both off one path.
|
|
13
|
+
*
|
|
14
|
+
* Path coordinates are level-local meters: [x, y, z] tuples, same space as
|
|
15
|
+
* duct paths and grid events. Diameters are nominal copper OD in inches.
|
|
16
|
+
*/
|
|
17
|
+
export declare const LinesetNode: z.ZodObject<{
|
|
18
|
+
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
19
|
+
name: z.ZodOptional<z.ZodString>;
|
|
20
|
+
parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
21
|
+
visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
22
|
+
camera: z.ZodOptional<z.ZodObject<{
|
|
23
|
+
position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
24
|
+
target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
25
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
26
|
+
perspective: "perspective";
|
|
27
|
+
orthographic: "orthographic";
|
|
28
|
+
}>>;
|
|
29
|
+
fov: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
31
|
+
}, z.core.$strip>>;
|
|
32
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
33
|
+
id: z.ZodDefault<z.ZodTemplateLiteral<`lineset_${string}`>>;
|
|
34
|
+
type: z.ZodDefault<z.ZodLiteral<"lineset">>;
|
|
35
|
+
path: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
36
|
+
suctionDiameter: z.ZodDefault<z.ZodNumber>;
|
|
37
|
+
liquidDiameter: z.ZodDefault<z.ZodNumber>;
|
|
38
|
+
insulated: z.ZodDefault<z.ZodBoolean>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type LinesetNode = z.infer<typeof LinesetNode>;
|
|
41
|
+
export type LinesetNodeId = LinesetNode['id'];
|
|
42
|
+
//# sourceMappingURL=lineset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineset.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/lineset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;iBAqBvB,CAAA;AACD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AACrD,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import dedent from 'dedent';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
+
/**
|
|
5
|
+
* Refrigerant lineset — the copper pipe pair that links the outdoor
|
|
6
|
+
* condenser to the indoor coil (furnace / air handler) of a split system.
|
|
7
|
+
* It is the refrigerant-side analogue of a duct run: a polyline of points,
|
|
8
|
+
* but carrying two lines instead of one airway.
|
|
9
|
+
*
|
|
10
|
+
* Real linesets run a fat insulated SUCTION line (cool vapour back to the
|
|
11
|
+
* compressor) beside a thin bare LIQUID line (warm liquid out to the coil).
|
|
12
|
+
* The geometry builder draws a single copper line on the path centerline
|
|
13
|
+
* (sized to `suctionDiameter`, wrapped in a foam jacket when `insulated`);
|
|
14
|
+
* draw the liquid line as a second lineset rather than both off one path.
|
|
15
|
+
*
|
|
16
|
+
* Path coordinates are level-local meters: [x, y, z] tuples, same space as
|
|
17
|
+
* duct paths and grid events. Diameters are nominal copper OD in inches.
|
|
18
|
+
*/
|
|
19
|
+
export const LinesetNode = BaseNode.extend({
|
|
20
|
+
id: objectId('lineset'),
|
|
21
|
+
type: nodeType('lineset'),
|
|
22
|
+
// Polyline path in level-local meters. Minimum two points (start, end).
|
|
23
|
+
path: z.array(z.tuple([z.number(), z.number(), z.number()])).min(2),
|
|
24
|
+
// Nominal suction-line copper OD in inches (the large insulated line).
|
|
25
|
+
// Common residential sizes are 3/4"–1-1/8".
|
|
26
|
+
suctionDiameter: z.number().min(0.25).max(2).default(0.875),
|
|
27
|
+
// Nominal liquid-line copper OD in inches (the small bare line).
|
|
28
|
+
// Common residential sizes are 1/4"–3/8".
|
|
29
|
+
liquidDiameter: z.number().min(0.125).max(1).default(0.375),
|
|
30
|
+
// Whether the suction line carries its foam insulation jacket. Bare = false.
|
|
31
|
+
insulated: z.boolean().default(true),
|
|
32
|
+
}).describe(dedent `
|
|
33
|
+
Refrigerant lineset - copper suction + liquid pair linking a condenser to an indoor coil.
|
|
34
|
+
- path: list of [x, y, z] points in level-local meters (min 2)
|
|
35
|
+
- suctionDiameter: nominal copper OD in inches of the large insulated line (typ. 3/4"-1-1/8")
|
|
36
|
+
- liquidDiameter: nominal copper OD in inches of the small bare line (typ. 1/4"-3/8")
|
|
37
|
+
- insulated: whether the suction line wears its foam jacket
|
|
38
|
+
`);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Standalone refrigerant liquid line — the thin bare-copper line that carries
|
|
4
|
+
* warm liquid out to the indoor coil. It is the line that used to be drawn as
|
|
5
|
+
* the lineset's second rail; broken out here as its own polyline run so it can
|
|
6
|
+
* be drawn on its own, including traced alongside an existing lineset.
|
|
7
|
+
*
|
|
8
|
+
* Path coordinates are level-local meters: [x, y, z] tuples, the same space as
|
|
9
|
+
* lineset and duct paths. Diameter is nominal copper OD in inches.
|
|
10
|
+
*/
|
|
11
|
+
export declare const LiquidLineNode: z.ZodObject<{
|
|
12
|
+
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
13
|
+
name: z.ZodOptional<z.ZodString>;
|
|
14
|
+
parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
15
|
+
visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
16
|
+
camera: z.ZodOptional<z.ZodObject<{
|
|
17
|
+
position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
18
|
+
target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
19
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
20
|
+
perspective: "perspective";
|
|
21
|
+
orthographic: "orthographic";
|
|
22
|
+
}>>;
|
|
23
|
+
fov: z.ZodOptional<z.ZodNumber>;
|
|
24
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
25
|
+
}, z.core.$strip>>;
|
|
26
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
27
|
+
id: z.ZodDefault<z.ZodTemplateLiteral<`liquid-line_${string}`>>;
|
|
28
|
+
type: z.ZodDefault<z.ZodLiteral<"liquid-line">>;
|
|
29
|
+
path: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
30
|
+
diameter: z.ZodDefault<z.ZodNumber>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
export type LiquidLineNode = z.infer<typeof LiquidLineNode>;
|
|
33
|
+
export type LiquidLineNodeId = LiquidLineNode['id'];
|
|
34
|
+
//# sourceMappingURL=liquid-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liquid-line.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/liquid-line.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;iBAa1B,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC3D,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import dedent from 'dedent';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
+
/**
|
|
5
|
+
* Standalone refrigerant liquid line — the thin bare-copper line that carries
|
|
6
|
+
* warm liquid out to the indoor coil. It is the line that used to be drawn as
|
|
7
|
+
* the lineset's second rail; broken out here as its own polyline run so it can
|
|
8
|
+
* be drawn on its own, including traced alongside an existing lineset.
|
|
9
|
+
*
|
|
10
|
+
* Path coordinates are level-local meters: [x, y, z] tuples, the same space as
|
|
11
|
+
* lineset and duct paths. Diameter is nominal copper OD in inches.
|
|
12
|
+
*/
|
|
13
|
+
export const LiquidLineNode = BaseNode.extend({
|
|
14
|
+
id: objectId('liquid-line'),
|
|
15
|
+
type: nodeType('liquid-line'),
|
|
16
|
+
// Polyline path in level-local meters. Minimum two points (start, end).
|
|
17
|
+
path: z.array(z.tuple([z.number(), z.number(), z.number()])).min(2),
|
|
18
|
+
// Nominal copper OD in inches. Common residential sizes are 1/4"–3/8".
|
|
19
|
+
diameter: z.number().min(0.125).max(1).default(0.375),
|
|
20
|
+
}).describe(dedent `
|
|
21
|
+
Standalone refrigerant liquid line - a thin bare-copper polyline run.
|
|
22
|
+
- path: list of [x, y, z] points in level-local meters (min 2)
|
|
23
|
+
- diameter: nominal copper OD in inches (typ. 1/4"-3/8")
|
|
24
|
+
`);
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const MeasurementPoint: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
3
|
+
export declare const MeasurementFeatureParameter: z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>;
|
|
4
|
+
export declare const MeasurementFeatureReference: z.ZodObject<{
|
|
5
|
+
nodeId: z.ZodString;
|
|
6
|
+
featureId: z.ZodString;
|
|
7
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export declare const MeasurementFeatureAnchor: z.ZodObject<{
|
|
10
|
+
kind: z.ZodLiteral<"feature">;
|
|
11
|
+
reference: z.ZodObject<{
|
|
12
|
+
nodeId: z.ZodString;
|
|
13
|
+
featureId: z.ZodString;
|
|
14
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
/** A tuple is a free anchor and remains the compact legacy representation. */
|
|
19
|
+
export declare const MeasurementAnchor: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
20
|
+
kind: z.ZodLiteral<"feature">;
|
|
21
|
+
reference: z.ZodObject<{
|
|
22
|
+
nodeId: z.ZodString;
|
|
23
|
+
featureId: z.ZodString;
|
|
24
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
27
|
+
}, z.core.$strip>]>;
|
|
28
|
+
export declare const DistanceMeasurement: z.ZodObject<{
|
|
29
|
+
kind: z.ZodLiteral<"distance">;
|
|
30
|
+
points: z.ZodTuple<[z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
31
|
+
kind: z.ZodLiteral<"feature">;
|
|
32
|
+
reference: z.ZodObject<{
|
|
33
|
+
nodeId: z.ZodString;
|
|
34
|
+
featureId: z.ZodString;
|
|
35
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
38
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
39
|
+
kind: z.ZodLiteral<"feature">;
|
|
40
|
+
reference: z.ZodObject<{
|
|
41
|
+
nodeId: z.ZodString;
|
|
42
|
+
featureId: z.ZodString;
|
|
43
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
46
|
+
}, z.core.$strip>]>], null>;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
export declare const AngleMeasurement: z.ZodObject<{
|
|
49
|
+
kind: z.ZodLiteral<"angle">;
|
|
50
|
+
points: z.ZodTuple<[z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
51
|
+
kind: z.ZodLiteral<"feature">;
|
|
52
|
+
reference: z.ZodObject<{
|
|
53
|
+
nodeId: z.ZodString;
|
|
54
|
+
featureId: z.ZodString;
|
|
55
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
58
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
59
|
+
kind: z.ZodLiteral<"feature">;
|
|
60
|
+
reference: z.ZodObject<{
|
|
61
|
+
nodeId: z.ZodString;
|
|
62
|
+
featureId: z.ZodString;
|
|
63
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
66
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
67
|
+
kind: z.ZodLiteral<"feature">;
|
|
68
|
+
reference: z.ZodObject<{
|
|
69
|
+
nodeId: z.ZodString;
|
|
70
|
+
featureId: z.ZodString;
|
|
71
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
74
|
+
}, z.core.$strip>]>], null>;
|
|
75
|
+
}, z.core.$strip>;
|
|
76
|
+
export declare const AreaMeasurement: z.ZodObject<{
|
|
77
|
+
kind: z.ZodLiteral<"area">;
|
|
78
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
79
|
+
kind: z.ZodLiteral<"feature">;
|
|
80
|
+
reference: z.ZodObject<{
|
|
81
|
+
nodeId: z.ZodString;
|
|
82
|
+
featureId: z.ZodString;
|
|
83
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
84
|
+
}, z.core.$strip>;
|
|
85
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
86
|
+
}, z.core.$strip>]>>;
|
|
87
|
+
}, z.core.$strip>;
|
|
88
|
+
export declare const PerimeterMeasurement: z.ZodObject<{
|
|
89
|
+
kind: z.ZodLiteral<"perimeter">;
|
|
90
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
91
|
+
kind: z.ZodLiteral<"feature">;
|
|
92
|
+
reference: z.ZodObject<{
|
|
93
|
+
nodeId: z.ZodString;
|
|
94
|
+
featureId: z.ZodString;
|
|
95
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
96
|
+
}, z.core.$strip>;
|
|
97
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
98
|
+
}, z.core.$strip>]>>;
|
|
99
|
+
}, z.core.$strip>;
|
|
100
|
+
export declare const VolumeMeasurement: z.ZodObject<{
|
|
101
|
+
kind: z.ZodLiteral<"volume">;
|
|
102
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
103
|
+
kind: z.ZodLiteral<"feature">;
|
|
104
|
+
reference: z.ZodObject<{
|
|
105
|
+
nodeId: z.ZodString;
|
|
106
|
+
featureId: z.ZodString;
|
|
107
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
108
|
+
}, z.core.$strip>;
|
|
109
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
110
|
+
}, z.core.$strip>]>>;
|
|
111
|
+
extrusion: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
112
|
+
}, z.core.$strip>;
|
|
113
|
+
export declare const MeasurementPayload: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
114
|
+
kind: z.ZodLiteral<"distance">;
|
|
115
|
+
points: z.ZodTuple<[z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
116
|
+
kind: z.ZodLiteral<"feature">;
|
|
117
|
+
reference: z.ZodObject<{
|
|
118
|
+
nodeId: z.ZodString;
|
|
119
|
+
featureId: z.ZodString;
|
|
120
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
121
|
+
}, z.core.$strip>;
|
|
122
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
123
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
124
|
+
kind: z.ZodLiteral<"feature">;
|
|
125
|
+
reference: z.ZodObject<{
|
|
126
|
+
nodeId: z.ZodString;
|
|
127
|
+
featureId: z.ZodString;
|
|
128
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
129
|
+
}, z.core.$strip>;
|
|
130
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
131
|
+
}, z.core.$strip>]>], null>;
|
|
132
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
133
|
+
kind: z.ZodLiteral<"angle">;
|
|
134
|
+
points: z.ZodTuple<[z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
135
|
+
kind: z.ZodLiteral<"feature">;
|
|
136
|
+
reference: z.ZodObject<{
|
|
137
|
+
nodeId: z.ZodString;
|
|
138
|
+
featureId: z.ZodString;
|
|
139
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
140
|
+
}, z.core.$strip>;
|
|
141
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
142
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
143
|
+
kind: z.ZodLiteral<"feature">;
|
|
144
|
+
reference: z.ZodObject<{
|
|
145
|
+
nodeId: z.ZodString;
|
|
146
|
+
featureId: z.ZodString;
|
|
147
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
148
|
+
}, z.core.$strip>;
|
|
149
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
150
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
151
|
+
kind: z.ZodLiteral<"feature">;
|
|
152
|
+
reference: z.ZodObject<{
|
|
153
|
+
nodeId: z.ZodString;
|
|
154
|
+
featureId: z.ZodString;
|
|
155
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
156
|
+
}, z.core.$strip>;
|
|
157
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
158
|
+
}, z.core.$strip>]>], null>;
|
|
159
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
160
|
+
kind: z.ZodLiteral<"area">;
|
|
161
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
162
|
+
kind: z.ZodLiteral<"feature">;
|
|
163
|
+
reference: z.ZodObject<{
|
|
164
|
+
nodeId: z.ZodString;
|
|
165
|
+
featureId: z.ZodString;
|
|
166
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
167
|
+
}, z.core.$strip>;
|
|
168
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
169
|
+
}, z.core.$strip>]>>;
|
|
170
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
171
|
+
kind: z.ZodLiteral<"perimeter">;
|
|
172
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
173
|
+
kind: z.ZodLiteral<"feature">;
|
|
174
|
+
reference: z.ZodObject<{
|
|
175
|
+
nodeId: z.ZodString;
|
|
176
|
+
featureId: z.ZodString;
|
|
177
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
178
|
+
}, z.core.$strip>;
|
|
179
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
180
|
+
}, z.core.$strip>]>>;
|
|
181
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
182
|
+
kind: z.ZodLiteral<"volume">;
|
|
183
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
184
|
+
kind: z.ZodLiteral<"feature">;
|
|
185
|
+
reference: z.ZodObject<{
|
|
186
|
+
nodeId: z.ZodString;
|
|
187
|
+
featureId: z.ZodString;
|
|
188
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
189
|
+
}, z.core.$strip>;
|
|
190
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
191
|
+
}, z.core.$strip>]>>;
|
|
192
|
+
extrusion: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
193
|
+
}, z.core.$strip>], "kind">;
|
|
194
|
+
export declare const MeasurementNode: z.ZodObject<{
|
|
195
|
+
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
196
|
+
name: z.ZodOptional<z.ZodString>;
|
|
197
|
+
parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
198
|
+
visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
199
|
+
camera: z.ZodOptional<z.ZodObject<{
|
|
200
|
+
position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
201
|
+
target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
202
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
203
|
+
perspective: "perspective";
|
|
204
|
+
orthographic: "orthographic";
|
|
205
|
+
}>>;
|
|
206
|
+
fov: z.ZodOptional<z.ZodNumber>;
|
|
207
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
208
|
+
}, z.core.$strip>>;
|
|
209
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
210
|
+
id: z.ZodDefault<z.ZodTemplateLiteral<`measurement_${string}`>>;
|
|
211
|
+
type: z.ZodDefault<z.ZodLiteral<"measurement">>;
|
|
212
|
+
measurement: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
213
|
+
kind: z.ZodLiteral<"distance">;
|
|
214
|
+
points: z.ZodTuple<[z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
215
|
+
kind: z.ZodLiteral<"feature">;
|
|
216
|
+
reference: z.ZodObject<{
|
|
217
|
+
nodeId: z.ZodString;
|
|
218
|
+
featureId: z.ZodString;
|
|
219
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
220
|
+
}, z.core.$strip>;
|
|
221
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
222
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
223
|
+
kind: z.ZodLiteral<"feature">;
|
|
224
|
+
reference: z.ZodObject<{
|
|
225
|
+
nodeId: z.ZodString;
|
|
226
|
+
featureId: z.ZodString;
|
|
227
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
228
|
+
}, z.core.$strip>;
|
|
229
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
230
|
+
}, z.core.$strip>]>], null>;
|
|
231
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
232
|
+
kind: z.ZodLiteral<"angle">;
|
|
233
|
+
points: z.ZodTuple<[z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
234
|
+
kind: z.ZodLiteral<"feature">;
|
|
235
|
+
reference: z.ZodObject<{
|
|
236
|
+
nodeId: z.ZodString;
|
|
237
|
+
featureId: z.ZodString;
|
|
238
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
239
|
+
}, z.core.$strip>;
|
|
240
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
241
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
242
|
+
kind: z.ZodLiteral<"feature">;
|
|
243
|
+
reference: z.ZodObject<{
|
|
244
|
+
nodeId: z.ZodString;
|
|
245
|
+
featureId: z.ZodString;
|
|
246
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
247
|
+
}, z.core.$strip>;
|
|
248
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
249
|
+
}, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
250
|
+
kind: z.ZodLiteral<"feature">;
|
|
251
|
+
reference: z.ZodObject<{
|
|
252
|
+
nodeId: z.ZodString;
|
|
253
|
+
featureId: z.ZodString;
|
|
254
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
255
|
+
}, z.core.$strip>;
|
|
256
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
257
|
+
}, z.core.$strip>]>], null>;
|
|
258
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
259
|
+
kind: z.ZodLiteral<"area">;
|
|
260
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
261
|
+
kind: z.ZodLiteral<"feature">;
|
|
262
|
+
reference: z.ZodObject<{
|
|
263
|
+
nodeId: z.ZodString;
|
|
264
|
+
featureId: z.ZodString;
|
|
265
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
266
|
+
}, z.core.$strip>;
|
|
267
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
268
|
+
}, z.core.$strip>]>>;
|
|
269
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
270
|
+
kind: z.ZodLiteral<"perimeter">;
|
|
271
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
272
|
+
kind: z.ZodLiteral<"feature">;
|
|
273
|
+
reference: z.ZodObject<{
|
|
274
|
+
nodeId: z.ZodString;
|
|
275
|
+
featureId: z.ZodString;
|
|
276
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
277
|
+
}, z.core.$strip>;
|
|
278
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
279
|
+
}, z.core.$strip>]>>;
|
|
280
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
281
|
+
kind: z.ZodLiteral<"volume">;
|
|
282
|
+
base: z.ZodArray<z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
283
|
+
kind: z.ZodLiteral<"feature">;
|
|
284
|
+
reference: z.ZodObject<{
|
|
285
|
+
nodeId: z.ZodString;
|
|
286
|
+
featureId: z.ZodString;
|
|
287
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean, z.ZodNumber]>>>;
|
|
288
|
+
}, z.core.$strip>;
|
|
289
|
+
fallback: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
290
|
+
}, z.core.$strip>]>>;
|
|
291
|
+
extrusion: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
292
|
+
}, z.core.$strip>], "kind">;
|
|
293
|
+
}, z.core.$strip>;
|
|
294
|
+
export type MeasurementPoint = z.infer<typeof MeasurementPoint>;
|
|
295
|
+
export type MeasurementFeatureParameter = z.infer<typeof MeasurementFeatureParameter>;
|
|
296
|
+
export type MeasurementFeatureReference = z.infer<typeof MeasurementFeatureReference>;
|
|
297
|
+
export type MeasurementFeatureAnchor = z.infer<typeof MeasurementFeatureAnchor>;
|
|
298
|
+
export type MeasurementAnchor = z.infer<typeof MeasurementAnchor>;
|
|
299
|
+
export type DistanceMeasurement = z.infer<typeof DistanceMeasurement>;
|
|
300
|
+
export type AngleMeasurement = z.infer<typeof AngleMeasurement>;
|
|
301
|
+
export type AreaMeasurement = z.infer<typeof AreaMeasurement>;
|
|
302
|
+
export type PerimeterMeasurement = z.infer<typeof PerimeterMeasurement>;
|
|
303
|
+
export type VolumeMeasurement = z.infer<typeof VolumeMeasurement>;
|
|
304
|
+
export type MeasurementPayload = z.infer<typeof MeasurementPayload>;
|
|
305
|
+
export type MeasurementNode = z.infer<typeof MeasurementNode>;
|
|
306
|
+
//# sourceMappingURL=measurement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measurement.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/measurement.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,eAAO,MAAM,gBAAgB,2DAAkE,CAAA;AAE/F,eAAO,MAAM,2BAA2B,+DAAuD,CAAA;AAE/F,eAAO,MAAM,2BAA2B;;;;iBAItC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;iBAInC,CAAA;AAEF,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB;;;;;;;;mBAAwD,CAAA;AAiBtF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;iBAG9B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG3B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;iBAG1B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;iBAG/B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAsB1B,CAAA;AAEJ,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAM7B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAa3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AACrF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AACrF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAC/E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AACjE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import dedent from 'dedent';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { areMeasurementPointsCoplanar, MEASUREMENT_PLANAR_TOLERANCE, measurementNormal, } from '../../lib/measurement-geometry';
|
|
4
|
+
import { BaseNode, nodeType, objectId } from '../base';
|
|
5
|
+
const FiniteCoordinate = z.number().finite();
|
|
6
|
+
export const MeasurementPoint = z.tuple([FiniteCoordinate, FiniteCoordinate, FiniteCoordinate]);
|
|
7
|
+
export const MeasurementFeatureParameter = z.union([z.string(), z.boolean(), FiniteCoordinate]);
|
|
8
|
+
export const MeasurementFeatureReference = z.object({
|
|
9
|
+
nodeId: z.string().min(1),
|
|
10
|
+
featureId: z.string().min(1),
|
|
11
|
+
parameters: z.record(z.string(), MeasurementFeatureParameter).optional(),
|
|
12
|
+
});
|
|
13
|
+
export const MeasurementFeatureAnchor = z.object({
|
|
14
|
+
kind: z.literal('feature'),
|
|
15
|
+
reference: MeasurementFeatureReference,
|
|
16
|
+
fallback: MeasurementPoint,
|
|
17
|
+
});
|
|
18
|
+
/** A tuple is a free anchor and remains the compact legacy representation. */
|
|
19
|
+
export const MeasurementAnchor = z.union([MeasurementPoint, MeasurementFeatureAnchor]);
|
|
20
|
+
const fallbackPoint = (anchor) => Array.isArray(anchor) ? anchor : anchor.fallback;
|
|
21
|
+
const PlanarMeasurementBase = z
|
|
22
|
+
.array(MeasurementAnchor)
|
|
23
|
+
.min(3)
|
|
24
|
+
.superRefine((anchors, ctx) => {
|
|
25
|
+
if (!areMeasurementPointsCoplanar(anchors.map(fallbackPoint), MEASUREMENT_PLANAR_TOLERANCE)) {
|
|
26
|
+
ctx.addIssue({
|
|
27
|
+
code: 'custom',
|
|
28
|
+
message: 'Measurement base must be planar and enclose an area',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
export const DistanceMeasurement = z.object({
|
|
33
|
+
kind: z.literal('distance'),
|
|
34
|
+
points: z.tuple([MeasurementAnchor, MeasurementAnchor]),
|
|
35
|
+
});
|
|
36
|
+
export const AngleMeasurement = z.object({
|
|
37
|
+
kind: z.literal('angle'),
|
|
38
|
+
points: z.tuple([MeasurementAnchor, MeasurementAnchor, MeasurementAnchor]),
|
|
39
|
+
});
|
|
40
|
+
export const AreaMeasurement = z.object({
|
|
41
|
+
kind: z.literal('area'),
|
|
42
|
+
base: PlanarMeasurementBase,
|
|
43
|
+
});
|
|
44
|
+
export const PerimeterMeasurement = z.object({
|
|
45
|
+
kind: z.literal('perimeter'),
|
|
46
|
+
base: PlanarMeasurementBase,
|
|
47
|
+
});
|
|
48
|
+
export const VolumeMeasurement = z
|
|
49
|
+
.object({
|
|
50
|
+
kind: z.literal('volume'),
|
|
51
|
+
base: PlanarMeasurementBase,
|
|
52
|
+
extrusion: MeasurementPoint,
|
|
53
|
+
})
|
|
54
|
+
.superRefine((measurement, ctx) => {
|
|
55
|
+
const normal = measurementNormal(measurement.base.map(fallbackPoint));
|
|
56
|
+
const normalComponent = normal
|
|
57
|
+
? Math.abs(normal[0] * measurement.extrusion[0] +
|
|
58
|
+
normal[1] * measurement.extrusion[1] +
|
|
59
|
+
normal[2] * measurement.extrusion[2])
|
|
60
|
+
: 0;
|
|
61
|
+
if (normalComponent <= 1e-9) {
|
|
62
|
+
ctx.addIssue({
|
|
63
|
+
code: 'custom',
|
|
64
|
+
path: ['extrusion'],
|
|
65
|
+
message: 'Measurement extrusion must have a non-zero normal component',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
export const MeasurementPayload = z.discriminatedUnion('kind', [
|
|
70
|
+
DistanceMeasurement,
|
|
71
|
+
AngleMeasurement,
|
|
72
|
+
AreaMeasurement,
|
|
73
|
+
PerimeterMeasurement,
|
|
74
|
+
VolumeMeasurement,
|
|
75
|
+
]);
|
|
76
|
+
export const MeasurementNode = BaseNode.extend({
|
|
77
|
+
id: objectId('measurement'),
|
|
78
|
+
type: nodeType('measurement'),
|
|
79
|
+
measurement: MeasurementPayload,
|
|
80
|
+
}).describe(dedent `
|
|
81
|
+
Measurement node - a persistent level-local 3D measurement annotation
|
|
82
|
+
- distance: exactly two level-local anchors
|
|
83
|
+
- angle: exactly three anchors, with the middle anchor as the vertex
|
|
84
|
+
- area/perimeter: an ordered planar base with at least three anchors
|
|
85
|
+
- volume: an ordered planar base with an extrusion vector
|
|
86
|
+
- an anchor is either a free point tuple or a semantic feature reference with a fallback
|
|
87
|
+
`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measurement.test.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/measurement.test.ts"],"names":[],"mappings":""}
|