@pascal-app/nodes 1.0.7 → 1.1.0
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/README.md +42 -8
- package/dist/agent-operations/index.d.ts +5 -0
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +10 -0
- package/dist/agent-tools/index.d.ts +195 -0
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +82 -2
- package/dist/beam/definition.d.ts +64 -13
- package/dist/beam/definition.d.ts.map +1 -1
- package/dist/beam/definition.edit.d.ts +4 -0
- package/dist/beam/definition.edit.d.ts.map +1 -0
- package/dist/beam/definition.edit.js +133 -0
- package/dist/beam/definition.js +4 -173
- package/dist/beam/definition.render.d.ts +6 -0
- package/dist/beam/definition.render.d.ts.map +1 -0
- package/dist/beam/definition.render.js +32 -0
- package/dist/beam/floorplan.d.ts.map +1 -1
- package/dist/beam/floorplan.js +2 -2
- package/dist/beam/panel.d.ts.map +1 -1
- package/dist/beam/panel.js +2 -2
- package/dist/beam/tool.d.ts.map +1 -1
- package/dist/beam/tool.js +2 -2
- package/dist/block/definition.d.ts +67 -7
- package/dist/block/definition.d.ts.map +1 -1
- package/dist/block/definition.edit.d.ts +4 -0
- package/dist/block/definition.edit.d.ts.map +1 -0
- package/dist/block/definition.edit.js +28 -0
- package/dist/block/definition.js +5 -144
- package/dist/block/definition.render.d.ts +11 -0
- package/dist/block/definition.render.d.ts.map +1 -0
- package/dist/block/definition.render.js +120 -0
- package/dist/box-vent/definition.d.ts +103 -29
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.edit.d.ts +4 -0
- package/dist/box-vent/definition.edit.d.ts.map +1 -0
- package/dist/box-vent/definition.edit.js +151 -0
- package/dist/box-vent/definition.js +4 -212
- package/dist/box-vent/definition.render.d.ts +6 -0
- package/dist/box-vent/definition.render.d.ts.map +1 -0
- package/dist/box-vent/definition.render.js +40 -0
- package/dist/box-vent/move-tool.d.ts.map +1 -1
- package/dist/box-vent/move-tool.js +6 -5
- package/dist/building/definition.d.ts +49 -11
- package/dist/building/definition.d.ts.map +1 -1
- package/dist/building/definition.edit.d.ts +4 -0
- package/dist/building/definition.edit.d.ts.map +1 -0
- package/dist/building/definition.edit.js +10 -0
- package/dist/building/definition.js +4 -54
- package/dist/building/definition.render.d.ts +6 -0
- package/dist/building/definition.render.d.ts.map +1 -0
- package/dist/building/definition.render.js +38 -0
- package/dist/builtin-definitions.d.ts +9784 -0
- package/dist/builtin-definitions.d.ts.map +1 -0
- package/dist/builtin-definitions.js +113 -0
- package/dist/builtin-edit-contributions.d.ts +9608 -0
- package/dist/builtin-edit-contributions.d.ts.map +1 -0
- package/dist/builtin-edit-contributions.js +112 -0
- package/dist/builtin-plugin-metadata.d.ts +5 -0
- package/dist/builtin-plugin-metadata.d.ts.map +1 -0
- package/dist/builtin-plugin-metadata.js +1 -0
- package/dist/cabinet/definition.d.ts +497 -25
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.edit.d.ts +5 -0
- package/dist/cabinet/definition.edit.d.ts.map +1 -0
- package/dist/cabinet/definition.edit.js +1375 -0
- package/dist/cabinet/definition.js +6 -2115
- package/dist/cabinet/definition.render.d.ts +66 -0
- package/dist/cabinet/definition.render.d.ts.map +1 -0
- package/dist/cabinet/definition.render.js +751 -0
- package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
- package/dist/cabinet/kitchen-module-actions.js +2 -2
- package/dist/cabinet/placement-dimensions.d.ts +36 -2
- package/dist/cabinet/placement-dimensions.d.ts.map +1 -1
- package/dist/cabinet/placement-dimensions.js +68 -2
- package/dist/cabinet/system.js +1 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +268 -15
- package/dist/cabinet/wall-snap.d.ts +5 -1
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +2 -2
- package/dist/ceiling/definition.d.ts +152 -19
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.edit.d.ts +4 -0
- package/dist/ceiling/definition.edit.d.ts.map +1 -0
- package/dist/ceiling/definition.edit.js +125 -0
- package/dist/ceiling/definition.js +4 -207
- package/dist/ceiling/definition.render.d.ts +6 -0
- package/dist/ceiling/definition.render.d.ts.map +1 -0
- package/dist/ceiling/definition.render.js +71 -0
- package/dist/ceiling/panel.js +2 -2
- package/dist/chimney/definition.d.ts +186 -17
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.edit.d.ts +4 -0
- package/dist/chimney/definition.edit.d.ts.map +1 -0
- package/dist/chimney/definition.edit.js +219 -0
- package/dist/chimney/definition.js +4 -390
- package/dist/chimney/definition.render.d.ts +6 -0
- package/dist/chimney/definition.render.d.ts.map +1 -0
- package/dist/chimney/definition.render.js +59 -0
- package/dist/chimney/move-tool.d.ts.map +1 -1
- package/dist/chimney/move-tool.js +6 -4
- package/dist/column/__bench__/geometry.d.ts +2 -0
- package/dist/column/__bench__/geometry.d.ts.map +1 -0
- package/dist/column/__bench__/geometry.js +36 -0
- package/dist/column/bounds.d.ts +7 -0
- package/dist/column/bounds.d.ts.map +1 -0
- package/dist/column/bounds.js +127 -0
- package/dist/column/definition.d.ts +372 -20
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.edit.d.ts +4 -0
- package/dist/column/definition.edit.d.ts.map +1 -0
- package/dist/column/definition.edit.js +323 -0
- package/dist/column/definition.js +4 -439
- package/dist/column/definition.render.d.ts +6 -0
- package/dist/column/definition.render.d.ts.map +1 -0
- package/dist/column/definition.render.js +81 -0
- package/dist/column/edit-policy.d.ts +5 -0
- package/dist/column/edit-policy.d.ts.map +1 -0
- package/dist/column/edit-policy.js +43 -0
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +2 -0
- package/dist/column/floorplan-move.d.ts.map +1 -1
- package/dist/column/floorplan-move.js +5 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +33 -91
- package/dist/column/geometry.d.ts +13 -0
- package/dist/column/geometry.d.ts.map +1 -0
- package/dist/column/geometry.js +294 -0
- package/dist/column/hosted-resize.d.ts +3 -2
- package/dist/column/hosted-resize.d.ts.map +1 -1
- package/dist/column/hosted-resize.js +7 -1
- package/dist/column/inspector-highlight.d.ts +29 -0
- package/dist/column/inspector-highlight.d.ts.map +1 -0
- package/dist/column/inspector-highlight.js +166 -0
- package/dist/column/paint.d.ts.map +1 -1
- package/dist/column/paint.js +12 -2
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +451 -363
- package/dist/column/parametrics.js +1 -1
- package/dist/column/post-section.d.ts.map +1 -1
- package/dist/column/post-section.js +2 -2
- package/dist/column/preset-gallery.d.ts +8 -0
- package/dist/column/preset-gallery.d.ts.map +1 -0
- package/dist/column/preset-gallery.js +98 -0
- package/dist/column/presets.d.ts +16 -0
- package/dist/column/presets.d.ts.map +1 -0
- package/dist/column/presets.js +96 -0
- package/dist/column/property-preview.d.ts +8 -0
- package/dist/column/property-preview.d.ts.map +1 -0
- package/dist/column/property-preview.js +50 -0
- package/dist/column/renderer.d.ts +13 -1
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +174 -198
- package/dist/column/shape.d.ts +4 -4
- package/dist/column/shape.d.ts.map +1 -1
- package/dist/column/shape.js +1 -1
- package/dist/column/surface.d.ts.map +1 -1
- package/dist/column/surface.js +15 -8
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +21 -10
- package/dist/construction-dimension/definition.d.ts +129 -3
- package/dist/construction-dimension/definition.d.ts.map +1 -1
- package/dist/construction-dimension/definition.edit.d.ts +4 -0
- package/dist/construction-dimension/definition.edit.d.ts.map +1 -0
- package/dist/construction-dimension/definition.edit.js +32 -0
- package/dist/construction-dimension/definition.js +4 -83
- package/dist/construction-dimension/definition.render.d.ts +6 -0
- package/dist/construction-dimension/definition.render.d.ts.map +1 -0
- package/dist/construction-dimension/definition.render.js +53 -0
- package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
- package/dist/construction-dimension/floorplan-tool.js +2 -2
- package/dist/cupola/definition.d.ts +95 -10
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.edit.d.ts +4 -0
- package/dist/cupola/definition.edit.d.ts.map +1 -0
- package/dist/cupola/definition.edit.js +103 -0
- package/dist/cupola/definition.js +4 -148
- package/dist/cupola/definition.render.d.ts +6 -0
- package/dist/cupola/definition.render.d.ts.map +1 -0
- package/dist/cupola/definition.render.js +43 -0
- package/dist/cupola/move-tool.d.ts.map +1 -1
- package/dist/cupola/move-tool.js +6 -5
- package/dist/definition-contributions.d.ts +14 -0
- package/dist/definition-contributions.d.ts.map +1 -0
- package/dist/definition-contributions.js +8 -0
- package/dist/door/definition.d.ts +350 -22
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.edit.d.ts +4 -0
- package/dist/door/definition.edit.d.ts.map +1 -0
- package/dist/door/definition.edit.js +246 -0
- package/dist/door/definition.js +4 -341
- package/dist/door/definition.render.d.ts +6 -0
- package/dist/door/definition.render.d.ts.map +1 -0
- package/dist/door/definition.render.js +88 -0
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +11 -8
- package/dist/door/mechanism.d.ts.map +1 -1
- package/dist/door/mechanism.js +1 -2
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +25 -23
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +2 -1
- package/dist/dormer/definition.d.ts +240 -11
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.edit.d.ts +4 -0
- package/dist/dormer/definition.edit.d.ts.map +1 -0
- package/dist/dormer/definition.edit.js +214 -0
- package/dist/dormer/definition.js +4 -319
- package/dist/dormer/definition.render.d.ts +6 -0
- package/dist/dormer/definition.render.d.ts.map +1 -0
- package/dist/dormer/definition.render.js +52 -0
- package/dist/downspout/definition.d.ts +108 -16
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.edit.d.ts +4 -0
- package/dist/downspout/definition.edit.d.ts.map +1 -0
- package/dist/downspout/definition.edit.js +134 -0
- package/dist/downspout/definition.js +4 -188
- package/dist/downspout/definition.render.d.ts +6 -0
- package/dist/downspout/definition.render.d.ts.map +1 -0
- package/dist/downspout/definition.render.js +46 -0
- package/dist/duct-fitting/definition.d.ts +99 -11
- package/dist/duct-fitting/definition.d.ts.map +1 -1
- package/dist/duct-fitting/definition.edit.d.ts +4 -0
- package/dist/duct-fitting/definition.edit.d.ts.map +1 -0
- package/dist/duct-fitting/definition.edit.js +49 -0
- package/dist/duct-fitting/definition.js +4 -135
- package/dist/duct-fitting/definition.render.d.ts +6 -0
- package/dist/duct-fitting/definition.render.d.ts.map +1 -0
- package/dist/duct-fitting/definition.render.js +82 -0
- package/dist/duct-fitting/floorplan.js +1 -1
- package/dist/duct-fitting/geometry.js +2 -1
- package/dist/duct-fitting/move-tool.d.ts.map +1 -1
- package/dist/duct-fitting/move-tool.js +19 -13
- package/dist/duct-fitting/selection.d.ts.map +1 -1
- package/dist/duct-fitting/selection.js +92 -80
- package/dist/duct-segment/continuation.d.ts +2 -2
- package/dist/duct-segment/continuation.d.ts.map +1 -1
- package/dist/duct-segment/continuation.js +53 -2
- package/dist/duct-segment/definition.d.ts +91 -3
- package/dist/duct-segment/definition.d.ts.map +1 -1
- package/dist/duct-segment/definition.edit.d.ts +4 -0
- package/dist/duct-segment/definition.edit.d.ts.map +1 -0
- package/dist/duct-segment/definition.edit.js +100 -0
- package/dist/duct-segment/definition.js +4 -181
- package/dist/duct-segment/definition.render.d.ts +6 -0
- package/dist/duct-segment/definition.render.d.ts.map +1 -0
- package/dist/duct-segment/definition.render.js +89 -0
- package/dist/duct-segment/edit-inspector.d.ts +5 -0
- package/dist/duct-segment/edit-inspector.d.ts.map +1 -0
- package/dist/duct-segment/edit-inspector.js +163 -0
- package/dist/duct-segment/edit-operation.d.ts +17 -0
- package/dist/duct-segment/edit-operation.d.ts.map +1 -0
- package/dist/duct-segment/edit-operation.js +283 -0
- package/dist/duct-segment/floorplan.js +1 -1
- package/dist/duct-segment/geometry.d.ts +0 -40
- package/dist/duct-segment/geometry.d.ts.map +1 -1
- package/dist/duct-segment/geometry.js +2 -77
- package/dist/duct-segment/move-tool.d.ts.map +1 -1
- package/dist/duct-segment/move-tool.js +34 -35
- package/dist/duct-segment/parametrics.d.ts.map +1 -1
- package/dist/duct-segment/parametrics.js +2 -35
- package/dist/duct-segment/profile.d.ts +42 -0
- package/dist/duct-segment/profile.d.ts.map +1 -0
- package/dist/duct-segment/profile.js +78 -0
- package/dist/duct-segment/selection.d.ts.map +1 -1
- package/dist/duct-segment/selection.js +112 -53
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +103 -27
- package/dist/duct-terminal/definition.d.ts +68 -12
- package/dist/duct-terminal/definition.d.ts.map +1 -1
- package/dist/duct-terminal/definition.edit.d.ts +4 -0
- package/dist/duct-terminal/definition.edit.d.ts.map +1 -0
- package/dist/duct-terminal/definition.edit.js +14 -0
- package/dist/duct-terminal/definition.js +4 -87
- package/dist/duct-terminal/definition.render.d.ts +6 -0
- package/dist/duct-terminal/definition.render.d.ts.map +1 -0
- package/dist/duct-terminal/definition.render.js +66 -0
- package/dist/duct-terminal/geometry.d.ts.map +1 -1
- package/dist/duct-terminal/geometry.js +2 -1
- package/dist/duct-terminal/parametrics.d.ts.map +1 -1
- package/dist/duct-terminal/parametrics.js +1 -0
- package/dist/duct-terminal/ports.js +1 -1
- package/dist/elevator/__bench__/runtime.d.ts +2 -0
- package/dist/elevator/__bench__/runtime.d.ts.map +1 -0
- package/dist/elevator/__bench__/runtime.js +38 -0
- package/dist/elevator/definition.d.ts +117 -10
- package/dist/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.edit.d.ts +4 -0
- package/dist/elevator/definition.edit.d.ts.map +1 -0
- package/dist/elevator/definition.edit.js +177 -0
- package/dist/elevator/definition.js +4 -258
- package/dist/elevator/definition.render.d.ts +11 -0
- package/dist/elevator/definition.render.d.ts.map +1 -0
- package/dist/elevator/definition.render.js +96 -0
- package/dist/elevator/floorplan-affordances.d.ts.map +1 -1
- package/dist/elevator/floorplan-affordances.js +11 -9
- package/dist/elevator/floorplan.d.ts +19 -0
- package/dist/elevator/floorplan.d.ts.map +1 -1
- package/dist/elevator/floorplan.js +3 -9
- package/dist/elevator/inspection.d.ts +17 -0
- package/dist/elevator/inspection.d.ts.map +1 -0
- package/dist/elevator/inspection.js +78 -0
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +152 -100
- package/dist/elevator/parametrics.d.ts +1 -1
- package/dist/elevator/parametrics.d.ts.map +1 -1
- package/dist/elevator/parametrics.js +7 -10
- package/dist/elevator/presets.d.ts +17 -0
- package/dist/elevator/presets.d.ts.map +1 -0
- package/dist/elevator/presets.js +52 -0
- package/dist/elevator/renderer.d.ts +2 -1
- package/dist/elevator/renderer.d.ts.map +1 -1
- package/dist/elevator/renderer.edit.d.ts +5 -0
- package/dist/elevator/renderer.edit.d.ts.map +1 -0
- package/dist/elevator/renderer.edit.js +8 -0
- package/dist/elevator/renderer.js +159 -60
- package/dist/elevator/tool.d.ts +2 -0
- package/dist/elevator/tool.d.ts.map +1 -0
- package/dist/elevator/tool.js +250 -0
- package/dist/eyebrow-vent/definition.d.ts +97 -11
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.edit.d.ts +4 -0
- package/dist/eyebrow-vent/definition.edit.d.ts.map +1 -0
- package/dist/eyebrow-vent/definition.edit.js +106 -0
- package/dist/eyebrow-vent/definition.js +4 -152
- package/dist/eyebrow-vent/definition.render.d.ts +6 -0
- package/dist/eyebrow-vent/definition.render.d.ts.map +1 -0
- package/dist/eyebrow-vent/definition.render.js +43 -0
- package/dist/eyebrow-vent/move-tool.d.ts.map +1 -1
- package/dist/eyebrow-vent/move-tool.js +6 -5
- package/dist/fence/definition.d.ts +186 -17
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.edit.d.ts +4 -0
- package/dist/fence/definition.edit.d.ts.map +1 -0
- package/dist/fence/definition.edit.js +282 -0
- package/dist/fence/definition.js +5 -413
- package/dist/fence/definition.render.d.ts +8 -0
- package/dist/fence/definition.render.d.ts.map +1 -0
- package/dist/fence/definition.render.js +124 -0
- package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
- package/dist/fence/move-endpoint-tool.js +2 -2
- package/dist/fence/tool.js +2 -2
- package/dist/fence-feature/definition.d.ts +270 -3
- package/dist/fence-feature/definition.d.ts.map +1 -1
- package/dist/fence-feature/definition.edit.d.ts +5 -0
- package/dist/fence-feature/definition.edit.d.ts.map +1 -0
- package/dist/fence-feature/definition.edit.js +69 -0
- package/dist/fence-feature/definition.js +5 -116
- package/dist/fence-feature/definition.render.d.ts +9 -0
- package/dist/fence-feature/definition.render.d.ts.map +1 -0
- package/dist/fence-feature/definition.render.js +69 -0
- package/dist/floor-opening/definition.d.ts +58 -2
- package/dist/floor-opening/definition.d.ts.map +1 -1
- package/dist/floor-opening/definition.edit.d.ts +4 -0
- package/dist/floor-opening/definition.edit.d.ts.map +1 -0
- package/dist/floor-opening/definition.edit.js +11 -0
- package/dist/floor-opening/definition.js +4 -41
- package/dist/floor-opening/definition.render.d.ts +6 -0
- package/dist/floor-opening/definition.render.d.ts.map +1 -0
- package/dist/floor-opening/definition.render.js +32 -0
- package/dist/guide/definition.d.ts +65 -9
- package/dist/guide/definition.d.ts.map +1 -1
- package/dist/guide/definition.edit.d.ts +4 -0
- package/dist/guide/definition.edit.d.ts.map +1 -0
- package/dist/guide/definition.edit.js +4 -0
- package/dist/guide/definition.js +4 -53
- package/dist/guide/definition.render.d.ts +6 -0
- package/dist/guide/definition.render.d.ts.map +1 -0
- package/dist/guide/definition.render.js +45 -0
- package/dist/gutter/definition.d.ts +113 -18
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.edit.d.ts +4 -0
- package/dist/gutter/definition.edit.d.ts.map +1 -0
- package/dist/gutter/definition.edit.js +121 -0
- package/dist/gutter/definition.js +4 -176
- package/dist/gutter/definition.render.d.ts +6 -0
- package/dist/gutter/definition.render.d.ts.map +1 -0
- package/dist/gutter/definition.render.js +44 -0
- package/dist/gutter/move-tool.d.ts.map +1 -1
- package/dist/gutter/move-tool.js +5 -4
- package/dist/hvac-equipment/definition.d.ts +72 -12
- package/dist/hvac-equipment/definition.d.ts.map +1 -1
- package/dist/hvac-equipment/definition.edit.d.ts +4 -0
- package/dist/hvac-equipment/definition.edit.d.ts.map +1 -0
- package/dist/hvac-equipment/definition.edit.js +13 -0
- package/dist/hvac-equipment/definition.js +4 -92
- package/dist/hvac-equipment/definition.render.d.ts +6 -0
- package/dist/hvac-equipment/definition.render.d.ts.map +1 -0
- package/dist/hvac-equipment/definition.render.js +72 -0
- package/dist/hvac-equipment/floorplan.js +1 -1
- package/dist/hvac-equipment/geometry.d.ts.map +1 -1
- package/dist/hvac-equipment/geometry.js +2 -1
- package/dist/hvac-equipment/parametrics.d.ts.map +1 -1
- package/dist/hvac-equipment/parametrics.js +1 -0
- package/dist/hvac-equipment/ports.js +1 -1
- package/dist/i18n/definition-messages.js +1 -1
- package/dist/imported-mesh/definition.d.ts +54 -4
- package/dist/imported-mesh/definition.d.ts.map +1 -1
- package/dist/imported-mesh/definition.edit.d.ts +4 -0
- package/dist/imported-mesh/definition.edit.d.ts.map +1 -0
- package/dist/imported-mesh/definition.edit.js +5 -0
- package/dist/imported-mesh/definition.js +4 -40
- package/dist/imported-mesh/definition.render.d.ts +6 -0
- package/dist/imported-mesh/definition.render.d.ts.map +1 -0
- package/dist/imported-mesh/definition.render.js +36 -0
- package/dist/index.d.ts +3 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -136
- package/dist/item/definition.d.ts +280 -31
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.edit.d.ts +4 -0
- package/dist/item/definition.edit.d.ts.map +1 -0
- package/dist/item/definition.edit.js +206 -0
- package/dist/item/definition.js +4 -356
- package/dist/item/definition.render.d.ts +6 -0
- package/dist/item/definition.render.d.ts.map +1 -0
- package/dist/item/definition.render.js +128 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +2 -2
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +2 -2
- package/dist/lean-to-extension/definition.d.ts +177 -3
- package/dist/lean-to-extension/definition.d.ts.map +1 -1
- package/dist/lean-to-extension/definition.edit.d.ts +4 -0
- package/dist/lean-to-extension/definition.edit.d.ts.map +1 -0
- package/dist/lean-to-extension/definition.edit.js +392 -0
- package/dist/lean-to-extension/definition.js +4 -433
- package/dist/lean-to-extension/definition.render.d.ts +6 -0
- package/dist/lean-to-extension/definition.render.d.ts.map +1 -0
- package/dist/lean-to-extension/definition.render.js +46 -0
- package/dist/level/definition.d.ts +49 -8
- package/dist/level/definition.d.ts.map +1 -1
- package/dist/level/definition.edit.d.ts +4 -0
- package/dist/level/definition.edit.d.ts.map +1 -0
- package/dist/level/definition.edit.js +4 -0
- package/dist/level/definition.js +4 -60
- package/dist/level/definition.render.d.ts +6 -0
- package/dist/level/definition.render.d.ts.map +1 -0
- package/dist/level/definition.render.js +53 -0
- package/dist/lineset/definition.d.ts +49 -14
- package/dist/lineset/definition.d.ts.map +1 -1
- package/dist/lineset/definition.edit.d.ts +4 -0
- package/dist/lineset/definition.edit.d.ts.map +1 -0
- package/dist/lineset/definition.edit.js +38 -0
- package/dist/lineset/definition.js +4 -119
- package/dist/lineset/definition.render.d.ts +6 -0
- package/dist/lineset/definition.render.d.ts.map +1 -0
- package/dist/lineset/definition.render.js +72 -0
- package/dist/lineset/floorplan.js +1 -1
- package/dist/lineset/geometry.js +1 -1
- package/dist/lineset/move-tool.d.ts.map +1 -1
- package/dist/lineset/move-tool.js +14 -7
- package/dist/liquid-line/definition.d.ts +47 -15
- package/dist/liquid-line/definition.d.ts.map +1 -1
- package/dist/liquid-line/definition.edit.d.ts +4 -0
- package/dist/liquid-line/definition.edit.d.ts.map +1 -0
- package/dist/liquid-line/definition.edit.js +31 -0
- package/dist/liquid-line/definition.js +4 -111
- package/dist/liquid-line/definition.render.d.ts +6 -0
- package/dist/liquid-line/definition.render.d.ts.map +1 -0
- package/dist/liquid-line/definition.render.js +70 -0
- package/dist/liquid-line/floorplan.js +1 -1
- package/dist/liquid-line/geometry.js +1 -1
- package/dist/measurement/definition.d.ts +126 -3
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.edit.d.ts +4 -0
- package/dist/measurement/definition.edit.d.ts.map +1 -0
- package/dist/measurement/definition.edit.js +26 -0
- package/dist/measurement/definition.js +4 -67
- package/dist/measurement/definition.render.d.ts +6 -0
- package/dist/measurement/definition.render.d.ts.map +1 -0
- package/dist/measurement/definition.render.js +43 -0
- package/dist/measurement/floorplan.d.ts.map +1 -1
- package/dist/measurement/floorplan.js +3 -2
- package/dist/measurement/renderer.d.ts.map +1 -1
- package/dist/measurement/renderer.js +2 -3
- package/dist/measurement/selection.d.ts.map +1 -1
- package/dist/measurement/selection.js +2 -2
- package/dist/measurement/tool.d.ts +2 -2
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +3 -3
- package/dist/pipe-fitting/definition.d.ts +73 -9
- package/dist/pipe-fitting/definition.d.ts.map +1 -1
- package/dist/pipe-fitting/definition.edit.d.ts +4 -0
- package/dist/pipe-fitting/definition.edit.d.ts.map +1 -0
- package/dist/pipe-fitting/definition.edit.js +47 -0
- package/dist/pipe-fitting/definition.js +4 -105
- package/dist/pipe-fitting/definition.render.d.ts +6 -0
- package/dist/pipe-fitting/definition.render.d.ts.map +1 -0
- package/dist/pipe-fitting/definition.render.js +54 -0
- package/dist/pipe-fitting/floorplan.js +1 -1
- package/dist/pipe-fitting/geometry.js +1 -1
- package/dist/pipe-fitting/move-tool.d.ts +1 -1
- package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
- package/dist/pipe-fitting/move-tool.js +28 -22
- package/dist/pipe-fitting/parametrics.d.ts.map +1 -1
- package/dist/pipe-fitting/parametrics.js +1 -0
- package/dist/pipe-fitting/ports.js +1 -1
- package/dist/pipe-fitting/selection.d.ts.map +1 -1
- package/dist/pipe-fitting/selection.js +73 -29
- package/dist/pipe-segment/collar-connection.d.ts +12 -0
- package/dist/pipe-segment/collar-connection.d.ts.map +1 -0
- package/dist/pipe-segment/collar-connection.js +58 -0
- package/dist/pipe-segment/connect-operation.d.ts +9 -0
- package/dist/pipe-segment/connect-operation.d.ts.map +1 -0
- package/dist/pipe-segment/connect-operation.js +44 -0
- package/dist/pipe-segment/continuation.d.ts +3 -2
- package/dist/pipe-segment/continuation.d.ts.map +1 -1
- package/dist/pipe-segment/continuation.js +60 -1
- package/dist/pipe-segment/definition.d.ts +78 -13
- package/dist/pipe-segment/definition.d.ts.map +1 -1
- package/dist/pipe-segment/definition.edit.d.ts +4 -0
- package/dist/pipe-segment/definition.edit.d.ts.map +1 -0
- package/dist/pipe-segment/definition.edit.js +48 -0
- package/dist/pipe-segment/definition.js +4 -132
- package/dist/pipe-segment/definition.render.d.ts +6 -0
- package/dist/pipe-segment/definition.render.d.ts.map +1 -0
- package/dist/pipe-segment/definition.render.js +78 -0
- package/dist/pipe-segment/floorplan.d.ts +1 -1
- package/dist/pipe-segment/floorplan.d.ts.map +1 -1
- package/dist/pipe-segment/floorplan.js +34 -1
- package/dist/pipe-segment/geometry.d.ts.map +1 -1
- package/dist/pipe-segment/geometry.js +2 -1
- package/dist/pipe-segment/grade-affordance.d.ts +8 -0
- package/dist/pipe-segment/grade-affordance.d.ts.map +1 -0
- package/dist/pipe-segment/grade-affordance.js +116 -0
- package/dist/pipe-segment/grade-inspector.d.ts +5 -0
- package/dist/pipe-segment/grade-inspector.d.ts.map +1 -0
- package/dist/pipe-segment/grade-inspector.js +91 -0
- package/dist/pipe-segment/grade-label.d.ts +7 -0
- package/dist/pipe-segment/grade-label.d.ts.map +1 -0
- package/dist/pipe-segment/grade-label.js +32 -0
- package/dist/pipe-segment/grade-operation.d.ts +22 -0
- package/dist/pipe-segment/grade-operation.d.ts.map +1 -0
- package/dist/pipe-segment/grade-operation.js +114 -0
- package/dist/pipe-segment/move-tool.d.ts.map +1 -1
- package/dist/pipe-segment/move-tool.js +38 -15
- package/dist/pipe-segment/offset-inspector.d.ts +5 -0
- package/dist/pipe-segment/offset-inspector.d.ts.map +1 -0
- package/dist/pipe-segment/offset-inspector.js +112 -0
- package/dist/pipe-segment/offset-operation.d.ts +9 -0
- package/dist/pipe-segment/offset-operation.d.ts.map +1 -0
- package/dist/pipe-segment/offset-operation.js +104 -0
- package/dist/pipe-segment/parametrics.d.ts.map +1 -1
- package/dist/pipe-segment/parametrics.js +1 -9
- package/dist/pipe-segment/resize-inspector.d.ts +5 -0
- package/dist/pipe-segment/resize-inspector.d.ts.map +1 -0
- package/dist/pipe-segment/resize-inspector.js +75 -0
- package/dist/pipe-segment/resize-operation.d.ts +8 -0
- package/dist/pipe-segment/resize-operation.d.ts.map +1 -0
- package/dist/pipe-segment/resize-operation.js +143 -0
- package/dist/pipe-segment/run-move.d.ts +65 -0
- package/dist/pipe-segment/run-move.d.ts.map +1 -0
- package/dist/pipe-segment/run-move.js +110 -0
- package/dist/pipe-segment/selection.d.ts.map +1 -1
- package/dist/pipe-segment/selection.js +122 -178
- package/dist/pipe-segment/slope.d.ts +3 -0
- package/dist/pipe-segment/slope.d.ts.map +1 -1
- package/dist/pipe-segment/slope.js +47 -0
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +123 -28
- package/dist/pipe-trap/definition.d.ts +54 -9
- package/dist/pipe-trap/definition.d.ts.map +1 -1
- package/dist/pipe-trap/definition.edit.d.ts +4 -0
- package/dist/pipe-trap/definition.edit.d.ts.map +1 -0
- package/dist/pipe-trap/definition.edit.js +13 -0
- package/dist/pipe-trap/definition.js +4 -59
- package/dist/pipe-trap/definition.render.d.ts +6 -0
- package/dist/pipe-trap/definition.render.d.ts.map +1 -0
- package/dist/pipe-trap/definition.render.js +43 -0
- package/dist/pipe-trap/geometry.d.ts.map +1 -1
- package/dist/pipe-trap/geometry.js +2 -1
- package/dist/pipe-trap/parametrics.d.ts.map +1 -1
- package/dist/pipe-trap/parametrics.js +1 -0
- package/dist/procedural-item/definition.d.ts +734 -3
- package/dist/procedural-item/definition.d.ts.map +1 -1
- package/dist/procedural-item/definition.edit.d.ts +4 -0
- package/dist/procedural-item/definition.edit.d.ts.map +1 -0
- package/dist/procedural-item/definition.edit.js +255 -0
- package/dist/procedural-item/definition.js +4 -325
- package/dist/procedural-item/definition.render.d.ts +6 -0
- package/dist/procedural-item/definition.render.d.ts.map +1 -0
- package/dist/procedural-item/definition.render.js +84 -0
- package/dist/procedural-item/renderer.d.ts.map +1 -1
- package/dist/procedural-item/renderer.edit.d.ts +5 -0
- package/dist/procedural-item/renderer.edit.d.ts.map +1 -0
- package/dist/procedural-item/renderer.edit.js +49 -0
- package/dist/procedural-item/renderer.js +4 -21
- package/dist/render.d.ts +4 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +4 -0
- package/dist/ridge-vent/definition.d.ts +95 -15
- package/dist/ridge-vent/definition.d.ts.map +1 -1
- package/dist/ridge-vent/definition.edit.d.ts +4 -0
- package/dist/ridge-vent/definition.edit.d.ts.map +1 -0
- package/dist/ridge-vent/definition.edit.js +148 -0
- package/dist/ridge-vent/definition.js +4 -197
- package/dist/ridge-vent/definition.render.d.ts +6 -0
- package/dist/ridge-vent/definition.render.d.ts.map +1 -0
- package/dist/ridge-vent/definition.render.js +42 -0
- package/dist/ridge-vent/move-tool.d.ts.map +1 -1
- package/dist/ridge-vent/move-tool.js +5 -4
- package/dist/roof/barrel-panel.d.ts.map +1 -1
- package/dist/roof/barrel-panel.js +2 -2
- package/dist/roof/definition.d.ts +325 -8
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.edit.d.ts +4 -0
- package/dist/roof/definition.edit.d.ts.map +1 -0
- package/dist/roof/definition.edit.js +183 -0
- package/dist/roof/definition.js +4 -284
- package/dist/roof/definition.render.d.ts +7 -0
- package/dist/roof/definition.render.d.ts.map +1 -0
- package/dist/roof/definition.render.js +101 -0
- package/dist/roof/geometry-notice.d.ts +5 -0
- package/dist/roof/geometry-notice.d.ts.map +1 -0
- package/dist/roof/geometry-notice.js +27 -0
- package/dist/roof/glazing-controls.d.ts.map +1 -1
- package/dist/roof/glazing-controls.js +2 -2
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +4 -3
- package/dist/roof/tool.d.ts +3 -0
- package/dist/roof/tool.d.ts.map +1 -1
- package/dist/roof/tool.js +56 -170
- package/dist/roof/type-thumbnail-assets.d.ts +3 -0
- package/dist/roof/type-thumbnail-assets.d.ts.map +1 -0
- package/dist/roof/type-thumbnail-assets.js +12 -0
- package/dist/roof/type-thumbnail.d.ts +5 -0
- package/dist/roof/type-thumbnail.d.ts.map +1 -0
- package/dist/roof/type-thumbnail.js +5 -0
- package/dist/roof-segment/definition.d.ts +564 -9
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.edit.d.ts +4 -0
- package/dist/roof-segment/definition.edit.d.ts.map +1 -0
- package/dist/roof-segment/definition.edit.js +305 -0
- package/dist/roof-segment/definition.js +4 -364
- package/dist/roof-segment/definition.render.d.ts +6 -0
- package/dist/roof-segment/definition.render.d.ts.map +1 -0
- package/dist/roof-segment/definition.render.js +59 -0
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +2 -2
- package/dist/roof-segment/paint.d.ts +0 -1
- package/dist/roof-segment/paint.d.ts.map +1 -1
- package/dist/roof-segment/paint.js +0 -1
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +32 -34
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +13 -11
- package/dist/roof-segment/slots.d.ts +2 -0
- package/dist/roof-segment/slots.d.ts.map +1 -0
- package/dist/roof-segment/slots.js +1 -0
- package/dist/scan/definition.d.ts +57 -7
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.edit.d.ts +4 -0
- package/dist/scan/definition.edit.d.ts.map +1 -0
- package/dist/scan/definition.edit.js +4 -0
- package/dist/scan/definition.js +4 -52
- package/dist/scan/definition.render.d.ts +6 -0
- package/dist/scan/definition.render.d.ts.map +1 -0
- package/dist/scan/definition.render.js +46 -0
- package/dist/separator/definition.d.ts +47 -2
- package/dist/separator/definition.d.ts.map +1 -1
- package/dist/separator/definition.edit.d.ts +4 -0
- package/dist/separator/definition.edit.d.ts.map +1 -0
- package/dist/separator/definition.edit.js +13 -0
- package/dist/separator/definition.js +4 -37
- package/dist/separator/definition.render.d.ts +6 -0
- package/dist/separator/definition.render.d.ts.map +1 -0
- package/dist/separator/definition.render.js +27 -0
- package/dist/separator/renderer.d.ts +2 -1
- package/dist/separator/renderer.d.ts.map +1 -1
- package/dist/separator/renderer.edit.d.ts +5 -0
- package/dist/separator/renderer.edit.d.ts.map +1 -0
- package/dist/separator/renderer.edit.js +8 -0
- package/dist/separator/renderer.js +3 -5
- package/dist/separator/selection.d.ts.map +1 -1
- package/dist/separator/selection.js +2 -2
- package/dist/shared/accessory-placement.js +1 -1
- package/dist/shared/auto-fitting.js +1 -1
- package/dist/shared/auto-offset-tag.d.ts +1 -1
- package/dist/shared/auto-offset-tag.d.ts.map +1 -1
- package/dist/shared/auto-offset-tag.js +3 -1
- package/dist/shared/automatic-run-end-cap.d.ts +5 -0
- package/dist/shared/automatic-run-end-cap.d.ts.map +1 -1
- package/dist/shared/automatic-run-end-cap.js +17 -9
- package/dist/shared/connection-feedback.d.ts +6 -3
- package/dist/shared/connection-feedback.d.ts.map +1 -1
- package/dist/shared/connection-feedback.js +29 -6
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -1
- package/dist/shared/curtain-opening-limits.js +2 -3
- package/dist/shared/draft-axis-guides.d.ts.map +1 -1
- package/dist/shared/draft-axis-guides.js +2 -1
- package/dist/shared/duct-adapter.js +1 -1
- package/dist/shared/duct-collar-inspector.d.ts +5 -0
- package/dist/shared/duct-collar-inspector.d.ts.map +1 -0
- package/dist/shared/duct-collar-inspector.js +36 -0
- package/dist/shared/follower-frames.d.ts +15 -0
- package/dist/shared/follower-frames.d.ts.map +1 -0
- package/dist/shared/follower-frames.js +36 -0
- package/dist/shared/handle-drag-scope.d.ts +14 -0
- package/dist/shared/handle-drag-scope.d.ts.map +1 -0
- package/dist/shared/handle-drag-scope.js +36 -0
- package/dist/shared/hosted-resize.d.ts +3 -1
- package/dist/shared/hosted-resize.d.ts.map +1 -1
- package/dist/shared/hosted-resize.js +10 -8
- package/dist/shared/live-preview.d.ts +16 -0
- package/dist/shared/live-preview.d.ts.map +1 -0
- package/dist/shared/live-preview.js +36 -0
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +2 -2
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +1 -1
- package/dist/shared/path-point-affordance.d.ts.map +1 -1
- package/dist/shared/path-point-affordance.js +19 -24
- package/dist/shared/path-segment-affordance.d.ts +2 -1
- package/dist/shared/path-segment-affordance.d.ts.map +1 -1
- package/dist/shared/path-segment-affordance.js +11 -8
- package/dist/shared/pipe-collar-inspector.d.ts +5 -0
- package/dist/shared/pipe-collar-inspector.d.ts.map +1 -0
- package/dist/shared/pipe-collar-inspector.js +27 -0
- package/dist/shared/refrigerant-line-selection.d.ts.map +1 -1
- package/dist/shared/refrigerant-line-selection.js +46 -29
- package/dist/shared/relative-roof-drag.d.ts.map +1 -1
- package/dist/shared/relative-roof-drag.js +5 -4
- package/dist/shared/roof-surface.d.ts.map +1 -1
- package/dist/shared/roof-surface.js +2 -0
- package/dist/shared/run-hangers.d.ts.map +1 -1
- package/dist/shared/run-hangers.js +2 -2
- package/dist/shared/run-move-connectivity.d.ts +15 -6
- package/dist/shared/run-move-connectivity.d.ts.map +1 -1
- package/dist/shared/run-move-connectivity.js +14 -5
- package/dist/shared/run-tool-options.d.ts +8 -0
- package/dist/shared/run-tool-options.d.ts.map +1 -0
- package/dist/shared/run-tool-options.js +166 -0
- package/dist/shared/system-checks.d.ts.map +1 -1
- package/dist/shared/system-checks.js +2 -1
- package/dist/shared/vertical-offset.js +1 -1
- package/dist/shared/wall-opening-ceiling.d.ts +6 -0
- package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
- package/dist/shared/wall-opening-ceiling.js +36 -7
- package/dist/shelf/definition.d.ts +108 -3
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.edit.d.ts +4 -0
- package/dist/shelf/definition.edit.d.ts.map +1 -0
- package/dist/shelf/definition.edit.js +155 -0
- package/dist/shelf/definition.js +4 -272
- package/dist/shelf/definition.render.d.ts +6 -0
- package/dist/shelf/definition.render.d.ts.map +1 -0
- package/dist/shelf/definition.render.js +122 -0
- package/dist/site/definition.d.ts +312 -9
- package/dist/site/definition.d.ts.map +1 -1
- package/dist/site/definition.edit.d.ts +4 -0
- package/dist/site/definition.edit.d.ts.map +1 -0
- package/dist/site/definition.edit.js +4 -0
- package/dist/site/definition.js +4 -55
- package/dist/site/definition.render.d.ts +6 -0
- package/dist/site/definition.render.d.ts.map +1 -0
- package/dist/site/definition.render.js +47 -0
- package/dist/skylight/definition.d.ts +158 -9
- package/dist/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.edit.d.ts +4 -0
- package/dist/skylight/definition.edit.d.ts.map +1 -0
- package/dist/skylight/definition.edit.js +218 -0
- package/dist/skylight/definition.js +4 -271
- package/dist/skylight/definition.render.d.ts +6 -0
- package/dist/skylight/definition.render.d.ts.map +1 -0
- package/dist/skylight/definition.render.js +50 -0
- package/dist/skylight/move-tool.d.ts.map +1 -1
- package/dist/skylight/move-tool.js +7 -5
- package/dist/slab/definition.d.ts +289 -20
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.edit.d.ts +4 -0
- package/dist/slab/definition.edit.d.ts.map +1 -0
- package/dist/slab/definition.edit.js +230 -0
- package/dist/slab/definition.js +4 -334
- package/dist/slab/definition.render.d.ts +6 -0
- package/dist/slab/definition.render.d.ts.map +1 -0
- package/dist/slab/definition.render.js +92 -0
- package/dist/slab/panel.js +2 -2
- package/dist/solar-panel/definition.d.ts +145 -14
- package/dist/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.edit.d.ts +4 -0
- package/dist/solar-panel/definition.edit.d.ts.map +1 -0
- package/dist/solar-panel/definition.edit.js +213 -0
- package/dist/solar-panel/definition.js +4 -263
- package/dist/solar-panel/definition.render.d.ts +6 -0
- package/dist/solar-panel/definition.render.d.ts.map +1 -0
- package/dist/solar-panel/definition.render.js +42 -0
- package/dist/solar-panel/move-tool.d.ts.map +1 -1
- package/dist/solar-panel/move-tool.js +7 -5
- package/dist/spawn/definition.d.ts +48 -3
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.edit.d.ts +4 -0
- package/dist/spawn/definition.edit.d.ts.map +1 -0
- package/dist/spawn/definition.edit.js +64 -0
- package/dist/spawn/definition.js +4 -109
- package/dist/spawn/definition.render.d.ts +6 -0
- package/dist/spawn/definition.render.d.ts.map +1 -0
- package/dist/spawn/definition.render.js +48 -0
- package/dist/stair/definition.d.ts +334 -8
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.edit.d.ts +4 -0
- package/dist/stair/definition.edit.d.ts.map +1 -0
- package/dist/stair/definition.edit.js +377 -0
- package/dist/stair/definition.js +4 -443
- package/dist/stair/definition.render.d.ts +6 -0
- package/dist/stair/definition.render.d.ts.map +1 -0
- package/dist/stair/definition.render.js +65 -0
- package/dist/stair/panel.js +2 -2
- package/dist/stair/structure-controls.d.ts.map +1 -1
- package/dist/stair/structure-controls.js +2 -2
- package/dist/stair-segment/definition.d.ts +130 -7
- package/dist/stair-segment/definition.d.ts.map +1 -1
- package/dist/stair-segment/definition.edit.d.ts +4 -0
- package/dist/stair-segment/definition.edit.d.ts.map +1 -0
- package/dist/stair-segment/definition.edit.js +135 -0
- package/dist/stair-segment/definition.js +4 -172
- package/dist/stair-segment/definition.render.d.ts +6 -0
- package/dist/stair-segment/definition.render.d.ts.map +1 -0
- package/dist/stair-segment/definition.render.js +38 -0
- package/dist/structural-grid/definition.d.ts +50 -3
- package/dist/structural-grid/definition.d.ts.map +1 -1
- package/dist/structural-grid/definition.edit.d.ts +4 -0
- package/dist/structural-grid/definition.edit.d.ts.map +1 -0
- package/dist/structural-grid/definition.edit.js +18 -0
- package/dist/structural-grid/definition.js +4 -51
- package/dist/structural-grid/definition.render.d.ts +6 -0
- package/dist/structural-grid/definition.render.d.ts.map +1 -0
- package/dist/structural-grid/definition.render.js +35 -0
- package/dist/turbine-vent/definition.d.ts +97 -23
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.edit.d.ts +4 -0
- package/dist/turbine-vent/definition.edit.d.ts.map +1 -0
- package/dist/turbine-vent/definition.edit.js +66 -0
- package/dist/turbine-vent/definition.js +4 -121
- package/dist/turbine-vent/definition.render.d.ts +6 -0
- package/dist/turbine-vent/definition.render.d.ts.map +1 -0
- package/dist/turbine-vent/definition.render.js +40 -0
- package/dist/turbine-vent/move-tool.d.ts.map +1 -1
- package/dist/turbine-vent/move-tool.js +6 -5
- package/dist/unit/definition.d.ts +53 -9
- package/dist/unit/definition.d.ts.map +1 -1
- package/dist/unit/definition.edit.d.ts +4 -0
- package/dist/unit/definition.edit.d.ts.map +1 -0
- package/dist/unit/definition.edit.js +4 -0
- package/dist/unit/definition.js +4 -38
- package/dist/unit/definition.render.d.ts +6 -0
- package/dist/unit/definition.render.d.ts.map +1 -0
- package/dist/unit/definition.render.js +30 -0
- package/dist/unit/unit-panel.d.ts.map +1 -1
- package/dist/unit/unit-panel.js +2 -2
- package/dist/wall/contextual-dimensions.d.ts.map +1 -1
- package/dist/wall/contextual-dimensions.js +2 -2
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
- package/dist/wall/curtain-wall-panel.js +2 -2
- package/dist/wall/definition.d.ts +809 -3
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.edit.d.ts +4 -0
- package/dist/wall/definition.edit.d.ts.map +1 -0
- package/dist/wall/definition.edit.js +184 -0
- package/dist/wall/definition.js +4 -279
- package/dist/wall/definition.render.d.ts +6 -0
- package/dist/wall/definition.render.d.ts.map +1 -0
- package/dist/wall/definition.render.js +100 -0
- package/dist/wall/floorplan.js +1 -1
- package/dist/wall/measurement.d.ts.map +1 -1
- package/dist/wall/measurement.js +22 -5
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +3 -3
- package/dist/wall/move-shared.js +1 -1
- package/dist/wall/panel-model.d.ts.map +1 -1
- package/dist/wall/panel-model.js +4 -3
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +15 -6
- package/dist/wall/quick-measurement.js +1 -1
- package/dist/wall/rectangle-command.d.ts +1 -0
- package/dist/wall/rectangle-command.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.js +2 -2
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
- package/dist/wall/split-floorplan-layer.js +2 -2
- package/dist/wall/split-tool.d.ts.map +1 -1
- package/dist/wall/split-tool.js +2 -2
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +138 -36
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +36 -16
- package/dist/window/definition.d.ts +356 -15
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.edit.d.ts +4 -0
- package/dist/window/definition.edit.d.ts.map +1 -0
- package/dist/window/definition.edit.js +255 -0
- package/dist/window/definition.js +5 -338
- package/dist/window/definition.render.d.ts +8 -0
- package/dist/window/definition.render.d.ts.map +1 -0
- package/dist/window/definition.render.js +83 -0
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +7 -4
- package/dist/window/mechanism.js +1 -1
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +7 -11
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +5 -2
- package/dist/zone/contextual-dimensions.d.ts.map +1 -1
- package/dist/zone/contextual-dimensions.js +1 -2
- package/dist/zone/definition.d.ts +264 -9
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.edit.d.ts +4 -0
- package/dist/zone/definition.edit.d.ts.map +1 -0
- package/dist/zone/definition.edit.js +38 -0
- package/dist/zone/definition.js +4 -97
- package/dist/zone/definition.render.d.ts +6 -0
- package/dist/zone/definition.render.d.ts.map +1 -0
- package/dist/zone/definition.render.js +55 -0
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +2 -2
- package/package.json +21 -10
|
@@ -1,319 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { dormerParametrics } from './parametrics.js';
|
|
6
|
-
import { DormerNode } from './schema.js';
|
|
7
|
-
const SIDE_HANDLE_OFFSET = 0.25;
|
|
8
|
-
const HEIGHT_HANDLE_OFFSET = 0.25;
|
|
9
|
-
const ROTATE_CORNER_OFFSET = 0.35;
|
|
10
|
-
const ROTATE_RING_OFFSET = 0.08;
|
|
11
|
-
// Schema/parametrics ranges — keep these aligned with `dormerParametrics`
|
|
12
|
-
// so the in-world drag and the inspector slider clamp identically.
|
|
13
|
-
const MIN_DIM = 0.5;
|
|
14
|
-
const MIN_HEIGHT = 0;
|
|
15
|
-
const MIN_ROOF_HEIGHT = 0;
|
|
16
|
-
const MAX_ROOF_HEIGHT = 2;
|
|
17
|
-
const MIN_SKIRT = 0.2;
|
|
18
|
-
const MAX_SKIRT = 6;
|
|
19
|
-
// Clamp used for handle Y placement so side chevrons stay reachable on
|
|
20
|
-
// dormers whose wall is flat (`height ≈ 0`). The dormer body is
|
|
21
|
-
// `height + roofHeight` tall; if that collapses too, the side arrows
|
|
22
|
-
// would bury into the deck — this floor keeps them visible.
|
|
23
|
-
const MIN_BODY_DISPLAY = 0.3;
|
|
24
|
-
// Mid-Y of the dormer body in dormer-local frame. Y=0 is the eave
|
|
25
|
-
// (where wall meets skirt); body extends up to `height + roofHeight`.
|
|
26
|
-
// Side chevrons sit at the body midpoint so they read as "this is the
|
|
27
|
-
// dormer's footprint" rather than floating at the apex or the eave.
|
|
28
|
-
function getBodyMidY(n) {
|
|
29
|
-
return Math.max(n.height + n.roofHeight, MIN_BODY_DISPLAY) / 2;
|
|
30
|
-
}
|
|
31
|
-
// Width arrow on the +X (right) or -X (left) side. Asymmetric resize:
|
|
32
|
-
// dragging one arrow grows the dormer outward from its own edge while
|
|
33
|
-
// the opposite edge stays world-fixed in segment frame. The dormer's
|
|
34
|
-
// registered ref frame is dormer-local (renderer applies position +
|
|
35
|
-
// rotation on the registered group), so placements are in dormer-local
|
|
36
|
-
// coords — no per-arrow rotation/translation compensation here.
|
|
37
|
-
//
|
|
38
|
-
// `apply` recomputes `position` so the anchored edge stays at the same
|
|
39
|
-
// segment-local point even when the dormer is Y-rotated: project the
|
|
40
|
-
// dormer's local +X onto segment frame via (cos r, -sin r), find the
|
|
41
|
-
// anchored edge's segment-local XZ from the pre-drag node, then place
|
|
42
|
-
// the new center half a new-width away from that anchor in the same
|
|
43
|
-
// direction. Mirrors chimney + roof-segment width handle math.
|
|
44
|
-
function dormerWidthHandle(side) {
|
|
45
|
-
const sign = side === 'right' ? 1 : -1;
|
|
46
|
-
return {
|
|
47
|
-
kind: 'linear-resize',
|
|
48
|
-
axis: 'x',
|
|
49
|
-
// 'min' = -X edge anchored (right arrow grows the +X edge outward).
|
|
50
|
-
// 'max' = +X edge anchored (left arrow grows the -X edge outward).
|
|
51
|
-
anchor: side === 'right' ? 'min' : 'max',
|
|
52
|
-
// Default 'parent' portal (no `'grandparent'` escape). Arrows
|
|
53
|
-
// portal into the host roof segment's registered mesh, which lives
|
|
54
|
-
// inside the roof renderer's `<group name="segments-wrapper">`.
|
|
55
|
-
// That wrapper is `visible={false}` by default; `RoofEditSystem`
|
|
56
|
-
// imperatively flips it to `visible={true}` whenever any accessory
|
|
57
|
-
// hosted on a segment of this roof is selected, so the portaled
|
|
58
|
-
// arrows become visible during selection without us reaching for
|
|
59
|
-
// `portal: 'grandparent'` — which trips the same "Color target has
|
|
60
|
-
// no corresponding fragment stage output" WebGPU pipeline error
|
|
61
|
-
// chimney already documents.
|
|
62
|
-
min: MIN_DIM,
|
|
63
|
-
currentValue: (n) => n.width,
|
|
64
|
-
apply: (initial, newWidth) => {
|
|
65
|
-
const rotY = initial.rotation ?? 0;
|
|
66
|
-
const armX = Math.cos(rotY);
|
|
67
|
-
const armZ = -Math.sin(rotY);
|
|
68
|
-
const anchorX = initial.position[0] - sign * (initial.width / 2) * armX;
|
|
69
|
-
const anchorZ = initial.position[2] - sign * (initial.width / 2) * armZ;
|
|
70
|
-
const newCenterX = anchorX + sign * (newWidth / 2) * armX;
|
|
71
|
-
const newCenterZ = anchorZ + sign * (newWidth / 2) * armZ;
|
|
72
|
-
return {
|
|
73
|
-
width: newWidth,
|
|
74
|
-
position: [newCenterX, initial.position[1], newCenterZ],
|
|
75
|
-
};
|
|
76
|
-
},
|
|
77
|
-
placement: {
|
|
78
|
-
position: (n) => [sign * (n.width / 2 + SIDE_HANDLE_OFFSET), getBodyMidY(n), 0],
|
|
79
|
-
// Flip the left chevron so it points outward toward -X. The
|
|
80
|
-
// generic LinearArrow only auto-orients for axis 'z'; +X / -X
|
|
81
|
-
// facing is up to the descriptor.
|
|
82
|
-
rotationY: () => (side === 'right' ? 0 : Math.PI),
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
// Depth arrow on the +Z (front) or -Z (back) side. Asymmetric resize:
|
|
87
|
-
// dragging one arrow grows the dormer outward from its own edge while
|
|
88
|
-
// the opposite edge stays world-fixed in segment frame — same pattern
|
|
89
|
-
// as `dormerWidthHandle`, just on the Z axis. `apply` recomputes
|
|
90
|
-
// `position` so the anchored edge stays at the same segment-local point
|
|
91
|
-
// even when the dormer is Y-rotated: project the dormer's local +Z onto
|
|
92
|
-
// segment frame via (sin r, cos r), find the anchored edge's segment-
|
|
93
|
-
// local XZ from the pre-drag node, then place the new center half a new-
|
|
94
|
-
// depth away from that anchor in the same direction.
|
|
95
|
-
function dormerDepthHandle(side) {
|
|
96
|
-
const sign = side === 'front' ? 1 : -1;
|
|
97
|
-
return {
|
|
98
|
-
kind: 'linear-resize',
|
|
99
|
-
axis: 'z',
|
|
100
|
-
// 'min' = -Z edge anchored (front arrow grows the +Z edge outward).
|
|
101
|
-
// 'max' = +Z edge anchored (back arrow grows the -Z edge outward).
|
|
102
|
-
anchor: side === 'front' ? 'min' : 'max',
|
|
103
|
-
min: MIN_DIM,
|
|
104
|
-
currentValue: (n) => n.depth,
|
|
105
|
-
apply: (initial, newDepth) => {
|
|
106
|
-
const rotY = initial.rotation ?? 0;
|
|
107
|
-
const armX = Math.sin(rotY);
|
|
108
|
-
const armZ = Math.cos(rotY);
|
|
109
|
-
const anchorX = initial.position[0] - sign * (initial.depth / 2) * armX;
|
|
110
|
-
const anchorZ = initial.position[2] - sign * (initial.depth / 2) * armZ;
|
|
111
|
-
const newCenterX = anchorX + sign * (newDepth / 2) * armX;
|
|
112
|
-
const newCenterZ = anchorZ + sign * (newDepth / 2) * armZ;
|
|
113
|
-
return {
|
|
114
|
-
depth: newDepth,
|
|
115
|
-
position: [newCenterX, initial.position[1], newCenterZ],
|
|
116
|
-
};
|
|
117
|
-
},
|
|
118
|
-
placement: {
|
|
119
|
-
position: (n) => [0, getBodyMidY(n), sign * (n.depth / 2 + SIDE_HANDLE_OFFSET)],
|
|
120
|
-
// The renderer auto-yaws axis-'z' chevrons by -π/2 so the default
|
|
121
|
-
// points +Z (front). Flip the back chevron 180° to point -Z.
|
|
122
|
-
rotationY: () => (side === 'front' ? 0 : Math.PI),
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
// Wall-height tracker — dashed vertical leader from the eave (y=0) up
|
|
127
|
-
// to a draggable cube at the wall top (y=height), centred on the
|
|
128
|
-
// footprint. Reads as "the dormer wall is THIS tall" without claiming
|
|
129
|
-
// the roof apex. Same `linear-resize axis='y'` pipeline as every other
|
|
130
|
-
// height handle; `shape: 'tracker'` only swaps the visual.
|
|
131
|
-
function dormerWallHeightHandle() {
|
|
132
|
-
return {
|
|
133
|
-
kind: 'linear-resize',
|
|
134
|
-
axis: 'y',
|
|
135
|
-
anchor: 'min',
|
|
136
|
-
shape: 'tracker',
|
|
137
|
-
min: MIN_HEIGHT,
|
|
138
|
-
currentValue: (n) => n.height,
|
|
139
|
-
apply: (_n, newValue) => ({ height: newValue }),
|
|
140
|
-
placement: {
|
|
141
|
-
position: (n) => [0, Math.max(n.height, 0.001), 0],
|
|
142
|
-
},
|
|
143
|
-
trackerBaseY: () => 0,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
// Wall-skirt chevron — sits BELOW the eave, at the bottom of the
|
|
147
|
-
// hung-wall skirt that extends down into the host roof. Drag pulls the
|
|
148
|
-
// skirt's bottom edge further down (or up) to grow / shrink
|
|
149
|
-
// `wallSkirtHeight`. Anchor 'max' keeps the eave (y=0) fixed; the
|
|
150
|
-
// linear-resize factor (-1 for anchor 'max') flips the drag sign so
|
|
151
|
-
// dragging the chevron downward increases the value 1:1.
|
|
152
|
-
//
|
|
153
|
-
// Plain arrow (not tracker) because tracker only renders an upward
|
|
154
|
-
// leader; the dashed line would point the wrong way for a downward
|
|
155
|
-
// span. The auto-orient logic in `ArrowHandle` flips the chevron to
|
|
156
|
-
// point -Y when placement.y < 0, so the arrow visibly points down.
|
|
157
|
-
function dormerWallSkirtHandle() {
|
|
158
|
-
return {
|
|
159
|
-
kind: 'linear-resize',
|
|
160
|
-
axis: 'y',
|
|
161
|
-
anchor: 'max',
|
|
162
|
-
min: MIN_SKIRT,
|
|
163
|
-
max: MAX_SKIRT,
|
|
164
|
-
currentValue: (n) => n.wallSkirtHeight,
|
|
165
|
-
apply: (_n, newValue) => ({ wallSkirtHeight: newValue }),
|
|
166
|
-
placement: {
|
|
167
|
-
position: (n) => [0, -(n.wallSkirtHeight + HEIGHT_HANDLE_OFFSET), 0],
|
|
168
|
-
},
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
// Roof-height chevron at the dormer's peak. Drag adjusts `roofHeight`
|
|
172
|
-
// directly — unlike roof-segment there's no pitch back-solve because
|
|
173
|
-
// dormer stores roof height as a literal scalar, not a pitch angle.
|
|
174
|
-
// Placed slightly above the apex (height + roofHeight) so the chevron
|
|
175
|
-
// visually attaches to the ridge.
|
|
176
|
-
function dormerRoofHeightHandle() {
|
|
177
|
-
return {
|
|
178
|
-
kind: 'linear-resize',
|
|
179
|
-
axis: 'y',
|
|
180
|
-
anchor: 'min',
|
|
181
|
-
min: MIN_ROOF_HEIGHT,
|
|
182
|
-
max: MAX_ROOF_HEIGHT,
|
|
183
|
-
currentValue: (n) => n.roofHeight,
|
|
184
|
-
apply: (_n, newValue) => ({ roofHeight: newValue }),
|
|
185
|
-
placement: {
|
|
186
|
-
position: (n) => [0, n.height + n.roofHeight + HEIGHT_HANDLE_OFFSET, 0],
|
|
187
|
-
},
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
// Whole-dormer rotation gizmo at the +X / +Z corner of the footprint,
|
|
191
|
-
// guide ring traces the corner-diagonal radius on hover / drag.
|
|
192
|
-
// Dormer-local frame is the registered group (renderer applies
|
|
193
|
-
// node.position + node.rotation there), so the default rotation pivot
|
|
194
|
-
// (rideObject origin = dormer center) is correct — no
|
|
195
|
-
// `rotationCenter` override needed.
|
|
196
|
-
function dormerRotateHandle() {
|
|
197
|
-
return {
|
|
198
|
-
kind: 'arc-resize',
|
|
199
|
-
axis: 'angular',
|
|
200
|
-
shape: 'rotate',
|
|
201
|
-
// Negate the cursor delta to match three.js Y-rotation handedness
|
|
202
|
-
// (cursor atan2 ticks opposite-handed from `rotation-y`).
|
|
203
|
-
apply: (initial, delta) => ({ rotation: (initial.rotation ?? 0) - delta }),
|
|
204
|
-
placement: {
|
|
205
|
-
position: (n) => {
|
|
206
|
-
const halfX = n.width / 2 + ROTATE_CORNER_OFFSET;
|
|
207
|
-
const halfZ = n.depth / 2 + ROTATE_CORNER_OFFSET;
|
|
208
|
-
return [halfX, getBodyMidY(n), halfZ];
|
|
209
|
-
},
|
|
210
|
-
// The two-headed icon's natural bias points along +X; aim it at
|
|
211
|
-
// the corner (45° outward from the dormer's local frame).
|
|
212
|
-
rotationY: () => -Math.PI / 4,
|
|
213
|
-
},
|
|
214
|
-
decoration: {
|
|
215
|
-
kind: 'ring',
|
|
216
|
-
radius: (n) => Math.hypot(n.width / 2, n.depth / 2) + ROTATE_RING_OFFSET,
|
|
217
|
-
y: (n) => getBodyMidY(n),
|
|
218
|
-
},
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
const dormerHandles = [
|
|
222
|
-
dormerWidthHandle('right'),
|
|
223
|
-
dormerWidthHandle('left'),
|
|
224
|
-
dormerDepthHandle('front'),
|
|
225
|
-
dormerDepthHandle('back'),
|
|
226
|
-
dormerWallHeightHandle(),
|
|
227
|
-
dormerRotateHandle(),
|
|
228
|
-
// The wall-skirt (downward chevron), roof-height (peak chevron), and
|
|
229
|
-
// the asymmetric front/back depth split stay out for now. Re-adding
|
|
230
|
-
// any of them previously fired the "Color target has no
|
|
231
|
-
// corresponding fragment stage output" WebGPU pipeline error chimney
|
|
232
|
-
// already documented for its flue / cap-thickness / cap-overhang
|
|
233
|
-
// extras — only reproducible while `portal: 'grandparent'` was set,
|
|
234
|
-
// which we no longer rely on (RoofEditSystem reveals the wrapper
|
|
235
|
-
// instead). The shapes themselves are valid; if the count budget
|
|
236
|
-
// turns out to also be sensitive without grandparent portal, keep
|
|
237
|
-
// the current compact set.
|
|
238
|
-
// dormerWallSkirtHandle(),
|
|
239
|
-
// dormerRoofHeightHandle(),
|
|
240
|
-
];
|
|
241
|
-
/**
|
|
242
|
-
* Dormer — a small house-shaped protrusion sitting on top of a roof
|
|
243
|
-
* segment. Windows are hosted child nodes; the legacy window* fields remain
|
|
244
|
-
* in the schema only so scene migration can preserve older dormers.
|
|
245
|
-
*
|
|
246
|
-
* The renderer cuts each hosted window from the dormer shell and mounts
|
|
247
|
-
* the regular WindowNode renderer in the selected wall-face frame.
|
|
248
|
-
*/
|
|
249
|
-
export const dormerDefinition = {
|
|
250
|
-
kind: 'dormer',
|
|
251
|
-
schemaVersion: 4,
|
|
252
|
-
schema: DormerNode,
|
|
253
|
-
category: 'structure',
|
|
254
|
-
surfaceRole: 'roof',
|
|
255
|
-
defaults: () => {
|
|
256
|
-
// Zod fills in id/type via their .default() factories; we strip
|
|
257
|
-
// both so the returned shape is a partial template a consumer can
|
|
258
|
-
// spread into createNode() with a fresh id.
|
|
259
|
-
const stub = DormerNodeSchema.parse({});
|
|
260
|
-
const { id: _id, type: _type, ...rest } = stub;
|
|
261
|
-
return rest;
|
|
262
|
-
},
|
|
263
|
-
capabilities: {
|
|
264
|
-
exterior: true,
|
|
265
|
-
selectable: { hitVolume: 'bbox' },
|
|
266
|
-
// Dormers own their WindowNode children. Duplicate the complete subtree
|
|
267
|
-
// so the copied dormer never aliases windows from the source dormer.
|
|
268
|
-
duplicable: { subtree: true },
|
|
269
|
-
deletable: true,
|
|
270
|
-
// Mounts on a roof segment via `roofSegmentId`. Dirty marks
|
|
271
|
-
// cascade to the host segment's parent roof so its merged shell
|
|
272
|
-
// re-CSGs with the new cut. `buildCut` returns the segment-local
|
|
273
|
-
// geometry the merge loop subtracts from shin / deck / wall.
|
|
274
|
-
roofAccessory: {
|
|
275
|
-
buildCut: (node, _hostSegment) => buildDormerRoofCut(node),
|
|
276
|
-
},
|
|
277
|
-
// Paint dispatch for the wall / side / top surface split. The
|
|
278
|
-
// editor's selection-manager routes paint hover / click /
|
|
279
|
-
// preview through this entry rather than carrying a kind-name
|
|
280
|
-
// arm.
|
|
281
|
-
paint: dormerPaint,
|
|
282
|
-
},
|
|
283
|
-
relations: {
|
|
284
|
-
hosts: ['window'],
|
|
285
|
-
cascadeDelete: 'descendants',
|
|
286
|
-
},
|
|
287
|
-
affordanceTools: {
|
|
288
|
-
// Drag-to-place tool for duplicate + move. Reuses the placement
|
|
289
|
-
// ghost preview but seeds it from the moving (cloned) node so the
|
|
290
|
-
// duplicate keeps the source's dimensions, materials, and window
|
|
291
|
-
// options.
|
|
292
|
-
move: () => import('./move-tool.js'),
|
|
293
|
-
},
|
|
294
|
-
parametrics: dormerParametrics,
|
|
295
|
-
handles: dormerHandles,
|
|
296
|
-
floorplan: buildDormerFloorplan,
|
|
297
|
-
rendersChildren: false,
|
|
298
|
-
renderer: {
|
|
299
|
-
kind: 'parametric',
|
|
300
|
-
module: () => import('./renderer.js'),
|
|
301
|
-
},
|
|
302
|
-
preview: () => import('./preview.js'),
|
|
303
|
-
tool: () => import('./tool.js'),
|
|
304
|
-
toolHints: [
|
|
305
|
-
{ key: 'Left click', label: 'Place dormer on roof' },
|
|
306
|
-
{ key: 'R / Shift+R', label: 'Rotate ghost ±15°' },
|
|
307
|
-
{ key: 'Esc', label: 'Cancel' },
|
|
308
|
-
],
|
|
309
|
-
presentation: {
|
|
310
|
-
label: 'Dormer',
|
|
311
|
-
description: 'House-shaped protrusion on a roof segment.',
|
|
312
|
-
icon: { kind: 'url', src: '/icons/dormer.webp' },
|
|
313
|
-
paletteSection: 'structure',
|
|
314
|
-
paletteOrder: 125,
|
|
315
|
-
},
|
|
316
|
-
mcp: {
|
|
317
|
-
description: 'A dormer on a roof segment. Its windows are hosted WindowNode children.',
|
|
318
|
-
},
|
|
319
|
-
};
|
|
1
|
+
import { composeNodeDefinition } from '../definition-contributions.js';
|
|
2
|
+
import { dormerEditContribution } from './definition.edit.js';
|
|
3
|
+
import { dormerRenderDefinition } from './definition.render.js';
|
|
4
|
+
export const dormerDefinition = composeNodeDefinition(dormerRenderDefinition, dormerEditContribution);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NodeRenderDefinition } from '../definition-contributions.js';
|
|
2
|
+
import { DormerNode } from './schema.js';
|
|
3
|
+
export declare const dormerRenderDefinition: NodeRenderDefinition<typeof DormerNode> & {
|
|
4
|
+
kind: 'dormer';
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=definition.render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAkD5F,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DormerNode as DormerNodeSchema, } from '@pascal-app/core';
|
|
2
|
+
import { buildDormerRoofCut } from './csg-geometry.js';
|
|
3
|
+
import { DormerNode } from './schema.js';
|
|
4
|
+
export const dormerRenderDefinition = {
|
|
5
|
+
kind: 'dormer',
|
|
6
|
+
schemaVersion: 4,
|
|
7
|
+
schema: DormerNode,
|
|
8
|
+
category: 'structure',
|
|
9
|
+
surfaceRole: 'roof',
|
|
10
|
+
defaults: () => {
|
|
11
|
+
// Zod fills in id/type via their .default() factories; we strip
|
|
12
|
+
// both so the returned shape is a partial template a consumer can
|
|
13
|
+
// spread into createNode() with a fresh id.
|
|
14
|
+
const stub = DormerNodeSchema.parse({});
|
|
15
|
+
const { id: _id, type: _type, ...rest } = stub;
|
|
16
|
+
return rest;
|
|
17
|
+
},
|
|
18
|
+
capabilities: {
|
|
19
|
+
exterior: true,
|
|
20
|
+
selectable: { hitVolume: 'bbox' },
|
|
21
|
+
// Dormers own their WindowNode children. Duplicate the complete subtree
|
|
22
|
+
// so the copied dormer never aliases windows from the source dormer.
|
|
23
|
+
duplicable: { subtree: true },
|
|
24
|
+
deletable: true,
|
|
25
|
+
// Mounts on a roof segment via `roofSegmentId`. Dirty marks
|
|
26
|
+
// cascade to the host segment's parent roof so its merged shell
|
|
27
|
+
// re-CSGs with the new cut. `buildCut` returns the segment-local
|
|
28
|
+
// geometry the merge loop subtracts from shin / deck / wall.
|
|
29
|
+
roofAccessory: {
|
|
30
|
+
buildCut: (node, _hostSegment) => buildDormerRoofCut(node),
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
relations: {
|
|
34
|
+
hosts: ['window'],
|
|
35
|
+
cascadeDelete: 'descendants',
|
|
36
|
+
},
|
|
37
|
+
rendersChildren: false,
|
|
38
|
+
renderer: {
|
|
39
|
+
kind: 'parametric',
|
|
40
|
+
module: () => import('./renderer.js'),
|
|
41
|
+
},
|
|
42
|
+
presentation: {
|
|
43
|
+
label: 'Dormer',
|
|
44
|
+
description: 'House-shaped protrusion on a roof segment.',
|
|
45
|
+
icon: { kind: 'url', src: '/icons/dormer.webp' },
|
|
46
|
+
paletteSection: 'structure',
|
|
47
|
+
paletteOrder: 125,
|
|
48
|
+
},
|
|
49
|
+
mcp: {
|
|
50
|
+
description: 'A dormer on a roof segment. Its windows are hosted WindowNode children.',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
@@ -1,17 +1,109 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
export declare const downspoutDefinition: import("@pascal-app/core").NodeDefinition<import("zod").ZodObject<{
|
|
2
|
+
object: import("zod").ZodDefault<import("zod").ZodLiteral<"node">>;
|
|
3
|
+
name: import("zod").ZodOptional<import("zod").ZodString>;
|
|
4
|
+
parentId: import("zod").ZodDefault<import("zod").ZodNullable<import("zod").ZodString>>;
|
|
5
|
+
visible: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
|
|
6
|
+
camera: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
7
|
+
position: import("zod").ZodTuple<[import("zod").ZodNumber, import("zod").ZodNumber, import("zod").ZodNumber], null>;
|
|
8
|
+
target: import("zod").ZodTuple<[import("zod").ZodNumber, import("zod").ZodNumber, import("zod").ZodNumber], null>;
|
|
9
|
+
mode: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
10
|
+
orthographic: "orthographic";
|
|
11
|
+
perspective: "perspective";
|
|
12
|
+
}>>;
|
|
13
|
+
fov: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
14
|
+
zoom: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
15
|
+
}, import("zod/v4/core").$strip>>;
|
|
16
|
+
metadata: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>>;
|
|
17
|
+
provenance: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
18
|
+
refs: import("zod").ZodArray<import("zod").ZodObject<{
|
|
19
|
+
ns: import("zod").ZodOptional<import("zod").ZodString>;
|
|
20
|
+
id: import("zod").ZodString;
|
|
21
|
+
role: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
22
|
+
absorbed: "absorbed";
|
|
23
|
+
alias: "alias";
|
|
24
|
+
derived: "derived";
|
|
25
|
+
piece: "piece";
|
|
26
|
+
primary: "primary";
|
|
27
|
+
}>>;
|
|
28
|
+
}, import("zod/v4/core").$strip>>;
|
|
29
|
+
lineage: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
30
|
+
op: import("zod").ZodEnum<{
|
|
31
|
+
attach: "attach";
|
|
32
|
+
convert: "convert";
|
|
33
|
+
duplicate: "duplicate";
|
|
34
|
+
import: "import";
|
|
35
|
+
"make-independent": "make-independent";
|
|
36
|
+
merge: "merge";
|
|
37
|
+
promote: "promote";
|
|
38
|
+
split: "split";
|
|
39
|
+
}>;
|
|
40
|
+
fromIds: import("zod").ZodArray<import("zod").ZodString>;
|
|
41
|
+
}, import("zod/v4/core").$strip>>;
|
|
42
|
+
}, import("zod/v4/core").$strip>>;
|
|
43
|
+
id: import("zod").ZodDefault<import("zod").ZodTemplateLiteral<`downspout_${string}`>>;
|
|
44
|
+
type: import("zod").ZodDefault<import("zod").ZodLiteral<"downspout">>;
|
|
45
|
+
material: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
46
|
+
id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
47
|
+
preset: import("zod").ZodOptional<import("zod").ZodCatch<import("zod").ZodEnum<{
|
|
48
|
+
brick: "brick";
|
|
49
|
+
concrete: "concrete";
|
|
50
|
+
custom: "custom";
|
|
51
|
+
glass: "glass";
|
|
52
|
+
marble: "marble";
|
|
53
|
+
metal: "metal";
|
|
54
|
+
plaster: "plaster";
|
|
55
|
+
tile: "tile";
|
|
56
|
+
white: "white";
|
|
57
|
+
wood: "wood";
|
|
58
|
+
}>>>;
|
|
59
|
+
properties: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
60
|
+
color: import("zod").ZodDefault<import("zod").ZodString>;
|
|
61
|
+
roughness: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
62
|
+
metalness: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
63
|
+
opacity: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
64
|
+
transparent: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
65
|
+
side: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
66
|
+
back: "back";
|
|
67
|
+
double: "double";
|
|
68
|
+
front: "front";
|
|
69
|
+
}>>;
|
|
70
|
+
}, import("zod/v4/core").$strip>>;
|
|
71
|
+
texture: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
72
|
+
url: import("zod").ZodString;
|
|
73
|
+
repeat: import("zod").ZodOptional<import("zod").ZodTuple<[import("zod").ZodNumber, import("zod").ZodNumber], null>>;
|
|
74
|
+
scale: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
75
|
+
offset: import("zod").ZodOptional<import("zod").ZodTuple<[import("zod").ZodNumber, import("zod").ZodNumber], null>>;
|
|
76
|
+
normalMap: import("zod").ZodOptional<import("zod").ZodString>;
|
|
77
|
+
normalScale: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
78
|
+
bumpMap: import("zod").ZodOptional<import("zod").ZodString>;
|
|
79
|
+
bumpScale: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
80
|
+
}, import("zod/v4/core").$strip>>;
|
|
81
|
+
}, import("zod/v4/core").$strip>>;
|
|
82
|
+
slots: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
83
|
+
materialPreset: import("zod").ZodDefault<import("zod").ZodString>;
|
|
84
|
+
gutterId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
85
|
+
outletId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
86
|
+
length: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
87
|
+
lengthMode: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
88
|
+
manual: "manual";
|
|
89
|
+
"to-ground": "to-ground";
|
|
90
|
+
}>>;
|
|
91
|
+
diameter: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
92
|
+
standoff: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
93
|
+
shape: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
94
|
+
auto: "auto";
|
|
95
|
+
rect: "rect";
|
|
96
|
+
round: "round";
|
|
97
|
+
}>>;
|
|
98
|
+
strapStyle: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
99
|
+
band: "band";
|
|
100
|
+
none: "none";
|
|
101
|
+
}>>;
|
|
102
|
+
strapSpacing: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
103
|
+
terminal: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
104
|
+
kickout: "kickout";
|
|
105
|
+
splash: "splash";
|
|
106
|
+
straight: "straight";
|
|
107
|
+
}>>;
|
|
108
|
+
}, import("zod/v4/core").$strip>>;
|
|
17
109
|
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/downspout/definition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/downspout/definition.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAG/B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/downspout/definition.edit.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AASvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAqI7C,eAAO,MAAM,yBAAyB,EAAE,oBAAoB,CAAC,OAAO,aAAa,CAchF,CAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { useLiveNodeOverrides, useScene, } from '@pascal-app/core';
|
|
2
|
+
import { surfacePaintCapability } from '../shared/surface-paint.js';
|
|
3
|
+
import { downspoutParametrics } from './parametrics.js';
|
|
4
|
+
import { computeDownspoutPath, downspoutPipeDims, effectiveWallJog, resolveDownspoutRouting, } from './routing.js';
|
|
5
|
+
// Mirrors the parametric `min`s so handle drags can't shrink the pipe
|
|
6
|
+
// past what the inspector would accept.
|
|
7
|
+
const MIN_LENGTH = 0.1;
|
|
8
|
+
// The length cube + dashed leader ride the straight WALL RUN, offset
|
|
9
|
+
// outward (+Z, over the eave) past the pipe surface so they float clear
|
|
10
|
+
// of the pipe instead of touching it.
|
|
11
|
+
const LENGTH_HANDLE_PAD = 0.12;
|
|
12
|
+
// Lift the length cube a little up the run from the very bottom so it
|
|
13
|
+
// reads as a height grip rather than sitting at the pipe's end. Clamped
|
|
14
|
+
// to the run top so it never climbs above the straight section.
|
|
15
|
+
const CUBE_LIFT = 0.18;
|
|
16
|
+
// Side-move arrows: how far ±X (along the eave) they sit from the pipe,
|
|
17
|
+
// and how far below the gutter floor — near the top so they read as
|
|
18
|
+
// "grab and slide along the eave".
|
|
19
|
+
const SIDE_MOVE_OFFSET = 0.22;
|
|
20
|
+
const SIDE_MOVE_Y = -0.12;
|
|
21
|
+
/**
|
|
22
|
+
* Length tracker — a dashed vertical leader from the outlet (Y = 0,
|
|
23
|
+
* the gutter floor) down to a small cube near the bottom of the
|
|
24
|
+
* straight wall run, `anchor: 'max'` + `axis: 'y'` so dragging the
|
|
25
|
+
* cube down extends the pipe 1:1.
|
|
26
|
+
*
|
|
27
|
+
* Both the cube and the leader sit on the wall-run line but offset
|
|
28
|
+
* outward (away from the pipe) by `radius + LENGTH_HANDLE_PAD`, so the
|
|
29
|
+
* whole dimension floats clear of the pipe — it reads as "change the
|
|
30
|
+
* height" rather than a box jammed onto the kicked-out mouth. The cube
|
|
31
|
+
* rides the run BOTTOM (above the kickout), not the mouth, so the
|
|
32
|
+
* dimension stays on the straight part.
|
|
33
|
+
*/
|
|
34
|
+
function downspoutLengthHandle() {
|
|
35
|
+
return {
|
|
36
|
+
kind: 'linear-resize',
|
|
37
|
+
axis: 'y',
|
|
38
|
+
anchor: 'max',
|
|
39
|
+
shape: 'tracker',
|
|
40
|
+
min: MIN_LENGTH,
|
|
41
|
+
gridSnap: true,
|
|
42
|
+
currentValue: (n) => n.length,
|
|
43
|
+
apply: (_n, newValue) => ({
|
|
44
|
+
length: Math.max(MIN_LENGTH, newValue),
|
|
45
|
+
lengthMode: 'manual',
|
|
46
|
+
}),
|
|
47
|
+
placement: {
|
|
48
|
+
position: (n, scene) => {
|
|
49
|
+
const routing = resolveDownspoutRouting(n, scene);
|
|
50
|
+
const path = computeDownspoutPath(n.length, effectiveWallJog(n, routing), (n.terminal ?? 'splash') !== 'straight');
|
|
51
|
+
const halfZ = downspoutPipeDims(n, routing).halfZ;
|
|
52
|
+
const y = Math.min(path.wallRunTopY, path.wallRunBottomY + CUBE_LIFT);
|
|
53
|
+
return [0, y, path.wallRunZ + halfZ + LENGTH_HANDLE_PAD];
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
// Leader starts at Y = 0 (outlet / gutter floor) and runs DOWN past
|
|
57
|
+
// the cube — same tracker the wall / chimney height fields use.
|
|
58
|
+
trackerBaseY: () => 0,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Usable half-span — keep the outlet a hair inside each end so the
|
|
62
|
+
// collar never lands on a cap (the geometry clamps too; this bounds the
|
|
63
|
+
// drag). Reads the host gutter's length.
|
|
64
|
+
function moveBound(n, gutter) {
|
|
65
|
+
return Math.max(0.05, Math.max(0.05, gutter?.length ?? 2) / 2 - 0.1);
|
|
66
|
+
}
|
|
67
|
+
// Effective outlet offset for `currentValue` — reads the gutter's live
|
|
68
|
+
// override first (so the dragged value tracks) then the store.
|
|
69
|
+
function readOutletOffset(n) {
|
|
70
|
+
if (!n.gutterId)
|
|
71
|
+
return 0;
|
|
72
|
+
const id = n.gutterId;
|
|
73
|
+
const override = useLiveNodeOverrides.getState().get(id);
|
|
74
|
+
const gutter = useScene.getState().nodes[id];
|
|
75
|
+
const outlets = override?.outlets ?? gutter?.outlets ?? [];
|
|
76
|
+
return outlets.find((o) => o.id === n.outletId)?.offset ?? 0;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Side-move arrow — one of a ±X pair that slides the downspout along the
|
|
80
|
+
* eave. The position lives on the host gutter's outlet
|
|
81
|
+
* (`gutter.outlets[].offset`), not on the downspout, so `overrideTarget`
|
|
82
|
+
* redirects the drag's live override + commit to the gutter and `apply`
|
|
83
|
+
* returns the gutter's patch. The arrows sit near the top of the pipe
|
|
84
|
+
* and ride its group, which moves with the outlet — so they track the
|
|
85
|
+
* cursor 1:1 (`anchor: 'min'` → factor +1).
|
|
86
|
+
*/
|
|
87
|
+
function downspoutMoveHandle(side) {
|
|
88
|
+
const sign = side === 'right' ? 1 : -1;
|
|
89
|
+
return {
|
|
90
|
+
kind: 'linear-resize',
|
|
91
|
+
axis: 'x',
|
|
92
|
+
anchor: 'min',
|
|
93
|
+
cursor: 'ew-resize',
|
|
94
|
+
gridSnap: true,
|
|
95
|
+
overrideTarget: (n) => (n.gutterId ? n.gutterId : undefined),
|
|
96
|
+
currentValue: (n) => readOutletOffset(n),
|
|
97
|
+
apply: (n, newOffset, scene) => {
|
|
98
|
+
const gutter = n.gutterId ? scene.get(n.gutterId) : undefined;
|
|
99
|
+
if (!gutter)
|
|
100
|
+
return {};
|
|
101
|
+
const outlets = (gutter.outlets ?? []).map((o) => o.id === n.outletId ? { ...o, offset: newOffset, generatedBy: undefined } : o);
|
|
102
|
+
// Patch targets the GUTTER (overrideTarget), not the downspout.
|
|
103
|
+
return { outlets };
|
|
104
|
+
},
|
|
105
|
+
min: (n, scene) => -moveBound(n, n.gutterId ? scene.get(n.gutterId) : undefined),
|
|
106
|
+
max: (n, scene) => moveBound(n, n.gutterId ? scene.get(n.gutterId) : undefined),
|
|
107
|
+
placement: {
|
|
108
|
+
// Static ±X beside the top of the pipe; the group it rides moves
|
|
109
|
+
// with the outlet, so the arrow stays under the cursor as it slides.
|
|
110
|
+
position: () => [sign * SIDE_MOVE_OFFSET, SIDE_MOVE_Y, 0],
|
|
111
|
+
rotationY: () => (side === 'right' ? 0 : Math.PI),
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const downspoutHandles = [
|
|
116
|
+
downspoutLengthHandle(),
|
|
117
|
+
downspoutMoveHandle('left'),
|
|
118
|
+
downspoutMoveHandle('right'),
|
|
119
|
+
];
|
|
120
|
+
export const downspoutEditContribution = {
|
|
121
|
+
snapProfile: 'item',
|
|
122
|
+
capabilities: {
|
|
123
|
+
paint: { ...surfacePaintCapability, materialTarget: 'downspout' },
|
|
124
|
+
},
|
|
125
|
+
parametrics: downspoutParametrics,
|
|
126
|
+
handles: downspoutHandles,
|
|
127
|
+
preview: () => import('./preview.js'),
|
|
128
|
+
tool: () => import('./tool.js'),
|
|
129
|
+
toolHints: [
|
|
130
|
+
{ key: 'Hover gutter', label: 'Highlight outlet' },
|
|
131
|
+
{ key: 'Left click', label: 'Drop downspout from outlet' },
|
|
132
|
+
{ key: 'Esc', label: 'Cancel' },
|
|
133
|
+
],
|
|
134
|
+
};
|