@pascal-app/nodes 1.0.6 → 1.0.7
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 +1 -0
- package/dist/beam/actions/move-endpoint.d.ts +24 -0
- package/dist/beam/actions/move-endpoint.d.ts.map +1 -0
- package/dist/beam/actions/move-endpoint.js +54 -0
- package/dist/beam/definition.d.ts +14 -0
- package/dist/beam/definition.d.ts.map +1 -0
- package/dist/beam/definition.js +173 -0
- package/dist/beam/draft-settings.d.ts +17 -0
- package/dist/beam/draft-settings.d.ts.map +1 -0
- package/dist/beam/draft-settings.js +81 -0
- package/dist/beam/drafting.d.ts +35 -0
- package/dist/beam/drafting.d.ts.map +1 -0
- package/dist/beam/drafting.js +103 -0
- package/dist/beam/floorplan-affordances.d.ts +8 -0
- package/dist/beam/floorplan-affordances.d.ts.map +1 -0
- package/dist/beam/floorplan-affordances.js +40 -0
- package/dist/beam/floorplan-move.d.ts +11 -0
- package/dist/beam/floorplan-move.d.ts.map +1 -0
- package/dist/beam/floorplan-move.js +54 -0
- package/dist/beam/floorplan.d.ts +11 -0
- package/dist/beam/floorplan.d.ts.map +1 -0
- package/dist/beam/floorplan.js +91 -0
- package/dist/beam/geometry.d.ts +19 -0
- package/dist/beam/geometry.d.ts.map +1 -0
- package/dist/beam/geometry.js +63 -0
- package/dist/beam/index.d.ts +3 -0
- package/dist/beam/index.d.ts.map +1 -0
- package/dist/beam/index.js +2 -0
- package/dist/beam/move-endpoint-tool.d.ts +21 -0
- package/dist/beam/move-endpoint-tool.d.ts.map +1 -0
- package/dist/beam/move-endpoint-tool.js +49 -0
- package/dist/beam/move-tool.d.ts +12 -0
- package/dist/beam/move-tool.d.ts.map +1 -0
- package/dist/beam/move-tool.js +114 -0
- package/dist/beam/panel-model.d.ts +28 -0
- package/dist/beam/panel-model.d.ts.map +1 -0
- package/dist/beam/panel-model.js +123 -0
- package/dist/beam/panel.d.ts +13 -0
- package/dist/beam/panel.d.ts.map +1 -0
- package/dist/beam/panel.js +107 -0
- package/dist/beam/parametrics.d.ts +3 -0
- package/dist/beam/parametrics.d.ts.map +1 -0
- package/dist/beam/parametrics.js +4 -0
- package/dist/beam/renderer.d.ts +13 -0
- package/dist/beam/renderer.d.ts.map +1 -0
- package/dist/beam/renderer.js +36 -0
- package/dist/beam/schema.d.ts +2 -0
- package/dist/beam/schema.d.ts.map +1 -0
- package/dist/beam/schema.js +1 -0
- package/dist/beam/tool.d.ts +13 -0
- package/dist/beam/tool.d.ts.map +1 -0
- package/dist/beam/tool.js +152 -0
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +8 -7
- package/dist/cabinet/batchable.d.ts +10 -0
- package/dist/cabinet/batchable.d.ts.map +1 -0
- package/dist/cabinet/batchable.js +12 -0
- package/dist/cabinet/compartment-card.d.ts.map +1 -1
- package/dist/cabinet/compartment-card.js +142 -46
- package/dist/cabinet/countertop-layout.d.ts +5 -0
- package/dist/cabinet/countertop-layout.d.ts.map +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +3 -0
- package/dist/cabinet/dimension-input.d.ts +6 -0
- package/dist/cabinet/dimension-input.d.ts.map +1 -0
- package/dist/cabinet/dimension-input.js +8 -0
- package/dist/cabinet/essential-controls.d.ts.map +1 -1
- package/dist/cabinet/essential-controls.js +82 -17
- package/dist/cabinet/index.d.ts +1 -1
- package/dist/cabinet/index.d.ts.map +1 -1
- package/dist/cabinet/index.js +1 -1
- package/dist/cabinet/kitchen-catalog.d.ts +17 -4
- package/dist/cabinet/kitchen-catalog.d.ts.map +1 -1
- package/dist/cabinet/kitchen-catalog.js +45 -7
- package/dist/cabinet/kitchen-collection.d.ts.map +1 -1
- package/dist/cabinet/kitchen-collection.js +21 -5
- package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
- package/dist/cabinet/kitchen-module-actions.js +107 -14
- package/dist/cabinet/neighbor-placement.d.ts +10 -0
- package/dist/cabinet/neighbor-placement.d.ts.map +1 -1
- package/dist/cabinet/panel.d.ts.map +1 -1
- package/dist/cabinet/panel.js +127 -50
- package/dist/cabinet/run-finishing.d.ts +5 -0
- package/dist/cabinet/run-finishing.d.ts.map +1 -1
- package/dist/cabinet/run-ops.d.ts +5 -0
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-panel.d.ts.map +1 -1
- package/dist/cabinet/run-panel.js +203 -52
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +8 -5
- package/dist/ceiling/build-up-section.d.ts +7 -0
- package/dist/ceiling/build-up-section.d.ts.map +1 -0
- package/dist/ceiling/build-up-section.js +57 -0
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +3 -1
- package/dist/ceiling/floorplan-affordances.d.ts +112 -0
- package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
- package/dist/ceiling/materials.d.ts +5 -0
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +17 -0
- package/dist/ceiling/panel-model.d.ts +13 -0
- package/dist/ceiling/panel-model.d.ts.map +1 -0
- package/dist/ceiling/panel-model.js +49 -0
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +82 -18
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +10 -4
- package/dist/ceiling/tool.d.ts.map +1 -1
- package/dist/ceiling/tool.js +24 -4
- package/dist/chimney/panel.d.ts.map +1 -1
- package/dist/chimney/panel.js +113 -41
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +3 -0
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +17 -0
- package/dist/column/hosted-resize.d.ts +28 -1
- package/dist/column/hosted-resize.d.ts.map +1 -1
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +125 -37
- package/dist/column/post-options.d.ts +10 -0
- package/dist/column/post-options.d.ts.map +1 -0
- package/dist/column/post-options.js +71 -0
- package/dist/column/post-placement.d.ts +78 -0
- package/dist/column/post-placement.d.ts.map +1 -0
- package/dist/column/post-placement.js +157 -0
- package/dist/column/post-section.d.ts +17 -0
- package/dist/column/post-section.d.ts.map +1 -0
- package/dist/column/post-section.js +95 -0
- package/dist/column/post-tool.d.ts +11 -0
- package/dist/column/post-tool.d.ts.map +1 -0
- package/dist/column/post-tool.js +94 -0
- package/dist/column/tool.d.ts +3 -10
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +13 -1
- package/dist/cupola/panel.d.ts.map +1 -1
- package/dist/cupola/panel.js +14 -7
- package/dist/door/actions.d.ts +7 -0
- package/dist/door/actions.d.ts.map +1 -0
- package/dist/door/actions.js +32 -0
- package/dist/door/contextual-dimensions.d.ts.map +1 -1
- package/dist/door/contextual-dimensions.js +11 -1
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +34 -7
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +5 -2
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +28 -6
- package/dist/door/floorplan.d.ts +2 -0
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +89 -16
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +60 -16
- package/dist/door/paint.d.ts +2 -7
- package/dist/door/paint.d.ts.map +1 -1
- package/dist/door/paint.js +26 -2
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +242 -90
- package/dist/door/parametrics.js +1 -1
- package/dist/door/placement.d.ts.map +1 -1
- package/dist/door/placement.js +9 -2
- package/dist/door/swing.d.ts +22 -0
- package/dist/door/swing.d.ts.map +1 -0
- package/dist/door/swing.js +36 -0
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +76 -29
- package/dist/dormer/panel-actions-section.d.ts.map +1 -1
- package/dist/dormer/panel-actions-section.js +3 -1
- package/dist/dormer/panel-position-section.d.ts.map +1 -1
- package/dist/dormer/panel-position-section.js +4 -3
- package/dist/dormer/panel-windows-section.d.ts.map +1 -1
- package/dist/dormer/panel-windows-section.js +38 -1
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +24 -18
- package/dist/downspout/inspector-editors.d.ts.map +1 -1
- package/dist/downspout/inspector-editors.js +3 -2
- package/dist/duct-fitting/inspector-editors.d.ts.map +1 -1
- package/dist/duct-fitting/inspector-editors.js +6 -1
- package/dist/duct-fitting/tool.d.ts.map +1 -1
- package/dist/duct-fitting/tool.js +11 -2
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +11 -2
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +41 -18
- package/dist/eyebrow-vent/panel.d.ts.map +1 -1
- package/dist/eyebrow-vent/panel.js +16 -6
- package/dist/fence/drafting.d.ts +2 -3
- package/dist/fence/drafting.d.ts.map +1 -1
- package/dist/fence/drafting.js +2 -3
- package/dist/fence/inspector-editors.d.ts.map +1 -1
- package/dist/fence/inspector-editors.js +64 -21
- package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
- package/dist/fence/move-endpoint-tool.js +11 -2
- package/dist/fence/system.d.ts.map +1 -1
- package/dist/fence/system.js +13 -0
- package/dist/fence-feature/actions.d.ts.map +1 -1
- package/dist/fence-feature/actions.js +5 -2
- package/dist/fence-feature/inspector.d.ts.map +1 -1
- package/dist/fence-feature/inspector.js +150 -34
- package/dist/fence-feature/move-session.d.ts +1 -1
- package/dist/floor-opening/floorplan.d.ts +29 -6
- package/dist/floor-opening/floorplan.d.ts.map +1 -1
- package/dist/floor-opening/floorplan.js +172 -14
- package/dist/gutter/downspouts-panel.d.ts.map +1 -1
- package/dist/gutter/downspouts-panel.js +14 -2
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +3 -2
- package/dist/i18n/definition-messages.d.ts +5 -0
- package/dist/i18n/definition-messages.d.ts.map +1 -0
- package/dist/i18n/definition-messages.js +771 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/item/authored-params.d.ts.map +1 -1
- package/dist/item/authored-params.js +19 -4
- package/dist/item/floorplan.d.ts +1 -1
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/panel.d.ts.map +1 -1
- package/dist/item/panel.js +9 -7
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +10 -3
- package/dist/measurement/tool.d.ts +1 -1
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +8 -8
- package/dist/pipe-fitting/tool.d.ts.map +1 -1
- package/dist/pipe-fitting/tool.js +3 -2
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +7 -2
- package/dist/procedural-item/renderer.d.ts.map +1 -1
- package/dist/procedural-item/renderer.js +8 -1
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +22 -9
- package/dist/roof/barrel-panel.d.ts.map +1 -1
- package/dist/roof/barrel-panel.js +7 -3
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +33 -3
- package/dist/roof/floorplan-overrides.d.ts +22 -0
- package/dist/roof/floorplan-overrides.d.ts.map +1 -0
- package/dist/roof/floorplan-overrides.js +46 -0
- package/dist/roof/floorplan-tool.d.ts +9 -0
- package/dist/roof/floorplan-tool.d.ts.map +1 -0
- package/dist/roof/floorplan-tool.js +168 -0
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +131 -41
- package/dist/roof/glazing-controls.d.ts +2 -1
- package/dist/roof/glazing-controls.d.ts.map +1 -1
- package/dist/roof/glazing-controls.js +51 -13
- package/dist/roof/glazing-panel-editor.d.ts.map +1 -1
- package/dist/roof/glazing-panel-editor.js +40 -13
- package/dist/roof/glazing-panel.d.ts.map +1 -1
- package/dist/roof/glazing-panel.js +73 -9
- package/dist/roof/paint.d.ts +19 -0
- package/dist/roof/paint.d.ts.map +1 -0
- package/dist/roof/paint.js +158 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +90 -22
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +13 -2
- package/dist/roof/roof-footprint-source.d.ts +17 -0
- package/dist/roof/roof-footprint-source.d.ts.map +1 -1
- package/dist/roof/roof-footprint-source.js +14 -0
- package/dist/roof/roof-footprint.d.ts +36 -2
- package/dist/roof/roof-footprint.d.ts.map +1 -1
- package/dist/roof/roof-footprint.js +124 -2
- package/dist/roof/roof-materials.d.ts.map +1 -1
- package/dist/roof/roof-materials.js +10 -1
- package/dist/roof/roof-placement-mode.d.ts +0 -2
- package/dist/roof/roof-placement-mode.d.ts.map +1 -1
- package/dist/roof/roof-placement-mode.js +8 -6
- package/dist/roof/roof-plan-creases.d.ts +50 -0
- package/dist/roof/roof-plan-creases.d.ts.map +1 -0
- package/dist/roof/roof-plan-creases.js +194 -0
- package/dist/roof/roof-ridge-mode.d.ts +20 -0
- package/dist/roof/roof-ridge-mode.d.ts.map +1 -0
- package/dist/roof/roof-ridge-mode.js +16 -0
- package/dist/roof/tool.d.ts +17 -4
- package/dist/roof/tool.d.ts.map +1 -1
- package/dist/roof/tool.js +211 -113
- package/dist/roof/wall-catch.d.ts +106 -0
- package/dist/roof/wall-catch.d.ts.map +1 -0
- package/dist/roof/wall-catch.js +267 -0
- package/dist/roof-segment/build-up-section.d.ts +9 -0
- package/dist/roof-segment/build-up-section.d.ts.map +1 -0
- package/dist/roof-segment/build-up-section.js +191 -0
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +50 -5
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +68 -19
- package/dist/roof-segment/floorplan.d.ts.map +1 -1
- package/dist/roof-segment/floorplan.js +16 -12
- package/dist/roof-segment/paint.d.ts +3 -1
- package/dist/roof-segment/paint.d.ts.map +1 -1
- package/dist/roof-segment/paint.js +43 -2
- package/dist/roof-segment/panel-model.d.ts +23 -0
- package/dist/roof-segment/panel-model.d.ts.map +1 -0
- package/dist/roof-segment/panel-model.js +64 -0
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +96 -14
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +4 -0
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +26 -5
- package/dist/separator/definition.d.ts.map +1 -1
- package/dist/separator/definition.js +10 -12
- package/dist/separator/floorplan-affordances.d.ts +9 -0
- package/dist/separator/floorplan-affordances.d.ts.map +1 -0
- package/dist/separator/floorplan-affordances.js +23 -0
- package/dist/separator/floorplan.d.ts +9 -0
- package/dist/separator/floorplan.d.ts.map +1 -0
- package/dist/separator/floorplan.js +54 -0
- package/dist/separator/renderer.d.ts +4 -0
- package/dist/separator/renderer.d.ts.map +1 -1
- package/dist/separator/renderer.js +21 -6
- package/dist/separator/selection.d.ts +10 -0
- package/dist/separator/selection.d.ts.map +1 -0
- package/dist/separator/selection.js +35 -0
- package/dist/shared/build-up-controls.d.ts +88 -0
- package/dist/shared/build-up-controls.d.ts.map +1 -0
- package/dist/shared/build-up-controls.js +139 -0
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -1
- package/dist/shared/curtain-opening-limits.js +44 -14
- package/dist/shared/item-interaction-actions.d.ts.map +1 -1
- package/dist/shared/item-interaction-actions.js +11 -2
- package/dist/shared/layer-thickness.d.ts +2 -0
- package/dist/shared/layer-thickness.d.ts.map +1 -0
- package/dist/shared/layer-thickness.js +3 -0
- package/dist/shared/move-roof-tool.d.ts.map +1 -1
- package/dist/shared/move-roof-tool.js +100 -5
- package/dist/shared/node-batch/batchable.d.ts +2 -0
- package/dist/shared/node-batch/batchable.d.ts.map +1 -1
- package/dist/shared/node-batch/batchable.js +4 -0
- package/dist/shared/node-batch/candidates.d.ts +21 -5
- package/dist/shared/node-batch/candidates.d.ts.map +1 -1
- package/dist/shared/node-batch/candidates.js +85 -50
- package/dist/shared/node-batch/system.d.ts.map +1 -1
- package/dist/shared/node-batch/system.js +24 -15
- package/dist/shared/opening-casing-move.d.ts +16 -0
- package/dist/shared/opening-casing-move.d.ts.map +1 -0
- package/dist/shared/opening-casing-move.js +33 -0
- package/dist/shared/opening-casing-section.d.ts +15 -0
- package/dist/shared/opening-casing-section.d.ts.map +1 -0
- package/dist/shared/opening-casing-section.js +38 -0
- package/dist/shared/opening-casing.d.ts +26 -0
- package/dist/shared/opening-casing.d.ts.map +1 -0
- package/dist/shared/opening-casing.js +80 -0
- package/dist/shared/opening-depth-position.d.ts +13 -0
- package/dist/shared/opening-depth-position.d.ts.map +1 -0
- package/dist/shared/opening-depth-position.js +34 -0
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +17 -8
- package/dist/shared/opening-guides-runtime.d.ts +2 -1
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +11 -7
- package/dist/shared/opening-labels.d.ts +11 -0
- package/dist/shared/opening-labels.d.ts.map +1 -0
- package/dist/shared/opening-labels.js +46 -0
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +11 -9
- package/dist/shared/opening-plane-offset.d.ts +4 -3
- package/dist/shared/opening-plane-offset.d.ts.map +1 -1
- package/dist/shared/opening-plane-offset.js +7 -4
- package/dist/shared/opening-swap.d.ts +8 -0
- package/dist/shared/opening-swap.d.ts.map +1 -0
- package/dist/shared/opening-swap.js +18 -0
- package/dist/shared/polygon-vertex-affordance.d.ts +19 -0
- package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
- package/dist/shared/polygon-vertex-affordance.js +65 -6
- package/dist/shared/roof-opening-host.d.ts +2 -1
- package/dist/shared/roof-opening-host.d.ts.map +1 -1
- package/dist/shared/roof-opening-host.js +14 -5
- package/dist/shared/roof-wall-opening-cut.d.ts.map +1 -1
- package/dist/shared/roof-wall-opening-cut.js +14 -6
- package/dist/shared/roof-wall-opening-placement.d.ts +2 -1
- package/dist/shared/roof-wall-opening-placement.d.ts.map +1 -1
- package/dist/shared/roof-wall-opening-placement.js +6 -4
- package/dist/shared/run-hanger-inspector.d.ts.map +1 -1
- package/dist/shared/run-hanger-inspector.js +39 -5
- package/dist/shared/system-check-panel.d.ts.map +1 -1
- package/dist/shared/system-check-panel.js +94 -15
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +6 -3
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.js +2 -0
- package/dist/site/ground-hole.d.ts +3 -3
- package/dist/site/ground-hole.js +3 -3
- package/dist/site/ground-veil.d.ts +5 -12
- package/dist/site/ground-veil.d.ts.map +1 -1
- package/dist/site/ground-veil.js +9 -33
- package/dist/site/panel.d.ts.map +1 -1
- package/dist/site/panel.js +52 -12
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +52 -23
- package/dist/skylight/panel.d.ts.map +1 -1
- package/dist/skylight/panel.js +49 -19
- package/dist/slab/deck-geometry.d.ts +28 -0
- package/dist/slab/deck-geometry.d.ts.map +1 -0
- package/dist/slab/deck-geometry.js +320 -0
- package/dist/slab/definition.d.ts +2 -1
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +6 -1
- package/dist/slab/dependency-tracker.d.ts.map +1 -1
- package/dist/slab/dependency-tracker.js +3 -0
- package/dist/slab/floorplan-affordances.d.ts +500 -0
- package/dist/slab/floorplan-affordances.d.ts.map +1 -1
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +46 -9
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +97 -21
- package/dist/slab/renderer.d.ts +11 -0
- package/dist/slab/renderer.d.ts.map +1 -0
- package/dist/slab/renderer.js +19 -0
- package/dist/slab/system.d.ts.map +1 -1
- package/dist/slab/system.js +12 -1
- package/dist/solar-panel/panel.d.ts.map +1 -1
- package/dist/solar-panel/panel.js +49 -14
- package/dist/stair/construction-controls.d.ts +3 -1
- package/dist/stair/construction-controls.d.ts.map +1 -1
- package/dist/stair/construction-controls.js +75 -12
- package/dist/stair/paint.d.ts +6 -0
- package/dist/stair/paint.d.ts.map +1 -1
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +243 -51
- package/dist/stair/parametrics.d.ts.map +1 -1
- package/dist/stair/parametrics.js +7 -0
- package/dist/stair/placement-defaults.d.ts +18 -0
- package/dist/stair/placement-defaults.d.ts.map +1 -0
- package/dist/stair/placement-defaults.js +27 -0
- package/dist/stair/railing-controls.d.ts.map +1 -1
- package/dist/stair/railing-controls.js +78 -18
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +16 -10
- package/dist/stair/structure-controls.d.ts +18 -0
- package/dist/stair/structure-controls.d.ts.map +1 -0
- package/dist/stair/structure-controls.js +275 -0
- package/dist/stair/tool.d.ts.map +1 -1
- package/dist/stair/tool.js +13 -9
- package/dist/stair/use-stair-render-data.d.ts +41 -0
- package/dist/stair/use-stair-render-data.d.ts.map +1 -1
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +65 -18
- package/dist/turbine-vent/panel.d.ts.map +1 -1
- package/dist/turbine-vent/panel.js +14 -5
- package/dist/unit/unit-panel.d.ts.map +1 -1
- package/dist/unit/unit-panel.js +28 -12
- package/dist/wall/actions.d.ts +1 -1
- package/dist/wall/actions.d.ts.map +1 -1
- package/dist/wall/actions.js +17 -13
- package/dist/wall/construction-dimensions.d.ts +6 -0
- package/dist/wall/construction-dimensions.d.ts.map +1 -1
- package/dist/wall/construction-dimensions.js +8 -0
- package/dist/wall/contextual-dimensions.d.ts +6 -0
- package/dist/wall/contextual-dimensions.d.ts.map +1 -1
- package/dist/wall/contextual-dimensions.js +104 -17
- package/dist/wall/curtain-opening-frame.d.ts.map +1 -1
- package/dist/wall/curtain-opening-frame.js +6 -4
- package/dist/wall/curtain-wall-layout.d.ts +1 -1
- package/dist/wall/curtain-wall-layout.d.ts.map +1 -1
- package/dist/wall/curtain-wall-layout.js +6 -4
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
- package/dist/wall/curtain-wall-materials.js +8 -3
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
- package/dist/wall/curtain-wall-panel.js +241 -37
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +2 -3
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +20 -5
- package/dist/wall/floorplan-affordances.d.ts.map +1 -1
- package/dist/wall/floorplan-affordances.js +9 -6
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +66 -16
- package/dist/wall/floorplan.d.ts +4 -5
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +62 -46
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +1 -0
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +77 -12
- package/dist/wall/paint.d.ts +2 -2
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +11 -4
- package/dist/wall/panel-model.d.ts +17 -2
- package/dist/wall/panel-model.d.ts.map +1 -1
- package/dist/wall/panel-model.js +158 -18
- package/dist/wall/panel.d.ts +8 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +228 -156
- package/dist/wall/parametrics.d.ts +1 -1
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +14 -1
- package/dist/wall/railing-wall-adapter.d.ts +7 -0
- package/dist/wall/railing-wall-adapter.d.ts.map +1 -0
- package/dist/wall/railing-wall-adapter.js +38 -0
- package/dist/wall/railing-wall-floorplan.d.ts +8 -0
- package/dist/wall/railing-wall-floorplan.d.ts.map +1 -0
- package/dist/wall/railing-wall-floorplan.js +27 -0
- package/dist/wall/railing-wall-geometry.d.ts +12 -0
- package/dist/wall/railing-wall-geometry.d.ts.map +1 -0
- package/dist/wall/railing-wall-geometry.js +51 -0
- package/dist/wall/railing-wall-guard.d.ts +81 -0
- package/dist/wall/railing-wall-guard.d.ts.map +1 -0
- package/dist/wall/railing-wall-guard.js +435 -0
- package/dist/wall/railing-wall-materials.d.ts +11 -0
- package/dist/wall/railing-wall-materials.d.ts.map +1 -0
- package/dist/wall/railing-wall-materials.js +31 -0
- package/dist/wall/railing-wall-panel-model.d.ts +30 -0
- package/dist/wall/railing-wall-panel-model.d.ts.map +1 -0
- package/dist/wall/railing-wall-panel-model.js +117 -0
- package/dist/wall/railing-wall-panel.d.ts +17 -0
- package/dist/wall/railing-wall-panel.d.ts.map +1 -0
- package/dist/wall/railing-wall-panel.js +42 -0
- package/dist/wall/rectangle-command.d.ts +79 -1
- package/dist/wall/rectangle-command.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.js +2 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +3 -1
- package/dist/wall/skirting-floor-gaps.d.ts +8 -0
- package/dist/wall/skirting-floor-gaps.d.ts.map +1 -0
- package/dist/wall/skirting-floor-gaps.js +36 -0
- package/dist/wall/system.d.ts +0 -14
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +6 -1
- package/dist/wall/tool.d.ts +16 -0
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +160 -47
- package/dist/wall/treatments.d.ts +3 -0
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +30 -7
- package/dist/window/actions.d.ts +7 -0
- package/dist/window/actions.d.ts.map +1 -0
- package/dist/window/actions.js +29 -0
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +11 -2
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +5 -0
- package/dist/window/floorplan.d.ts +2 -0
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +58 -1
- package/dist/window/mechanism.d.ts.map +1 -1
- package/dist/window/mechanism.js +21 -1
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +10 -3
- package/dist/window/paint.d.ts +2 -7
- package/dist/window/paint.d.ts.map +1 -1
- package/dist/window/paint.js +31 -3
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +311 -69
- package/dist/window/placement.d.ts.map +1 -1
- package/dist/window/placement.js +5 -1
- package/dist/window/swing.d.ts +13 -0
- package/dist/window/swing.d.ts.map +1 -0
- package/dist/window/swing.js +16 -0
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +19 -14
- package/dist/zone/floorplan-affordances.d.ts +136 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +34 -9
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +9 -5
- package/package.json +14 -14
- package/dist/site/generic-foundation-geometry.d.ts +0 -16
- package/dist/site/generic-foundation-geometry.d.ts.map +0 -1
- package/dist/site/generic-foundation-geometry.js +0 -75
- package/dist/site/generic-foundation.d.ts +0 -4
- package/dist/site/generic-foundation.d.ts.map +0 -1
- package/dist/site/generic-foundation.js +0 -91
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/site/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/site/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,QAAQ,EAgBd,MAAM,kBAAkB,CAAA;AAsKzB,eAAO,MAAM,YAAY,aAAc;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,uCAmqBxD,CAAA;eAEc,YAAY"}
|
package/dist/site/renderer.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { belowGradeFloorY, belowGradeFootprints, coveredBelowGradeFootprints, groundPitFloorY, intersection, sightTriangle, siteFrontEdge, siteSetbackEnvelope, streetCorners, surfaceHeightAt, terrainContours, terrainFieldOf, union, unionPolygons, useLiveNodeOverrides, useLiveTerrain, useRegistry, useScene, } from '@pascal-app/core';
|
|
4
|
-
import { backdropColors, backdropGradient, groundWindowMaskNode, NodeRenderer, SITE_GROUND, siteGroundShown, UNDERGROUND_RIM, useImmersiveXRPresentation, useNodeEvents, useSceneAtmosphere, useSceneGroundReplacement, useViewer, } from '@pascal-app/viewer';
|
|
3
|
+
import { belowGradeFloorY, belowGradeFootprints, coveredBelowGradeFootprints, groundPitFloorY, intersection, sightTriangle, siteFrontEdge, siteSetbackEnvelope, streetCorners, surfaceHeightAt, terrainContours, terrainFieldOf, terrainOverFloors, union, unionPolygons, useLiveNodeOverrides, useLiveTerrain, useRegistry, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { backdropColors, backdropGradient, createDaylightGroundMaterial, DAYLIGHT_PARCEL, groundWindowMaskNode, isDaylightAtmosphere, NodeRenderer, SITE_GROUND, siteGroundShown, UNDERGROUND_RIM, useImmersiveXRPresentation, useNodeEvents, useSceneAtmosphere, useSceneGroundReplacement, useViewer, } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useMemo, useRef } from 'react';
|
|
6
6
|
import { BufferAttribute, BufferGeometry, DoubleSide, Path, Shape, ShapeGeometry, } from 'three';
|
|
7
7
|
import { cameraPosition, color, mix, positionWorld, smoothstep, float as tslFloat, vec2, } from 'three/tsl';
|
|
8
8
|
import { MeshLambertNodeMaterial } from 'three/webgpu';
|
|
9
|
-
import { GenericFoundation } from './generic-foundation.js';
|
|
10
9
|
import { GroundHole, groundHoleColorNode, groundHoleShadowNode, solidGroundMaskNode, } from './ground-hole.js';
|
|
11
|
-
import { GroundVeil,
|
|
10
|
+
import { GroundVeil, groundVeilMaterial, horizonVeilMaterial, noopRaycast } from './ground-veil.js';
|
|
12
11
|
import { GroundWindowSystem } from './ground-window-system.js';
|
|
13
12
|
import { buildPatternedRibbon, PROPERTY_LINE_PATTERN, SETBACK_LINE_PATTERN, updateRibbonHeights, } from './line-ribbon.js';
|
|
14
13
|
import { getRecessedSlabGroundHoles } from './recessed-slab-ground-holes.js';
|
|
@@ -87,7 +86,13 @@ export const SiteRenderer = ({ node }) => {
|
|
|
87
86
|
const groundReplaced = useSceneGroundReplacement();
|
|
88
87
|
useRegistry(node.id, 'site', ref);
|
|
89
88
|
const theme = useViewer((state) => state.sceneAppearance);
|
|
90
|
-
|
|
89
|
+
// The colored appearance's daylight look: a neutral parcel, lit by the sky (Standard), on a
|
|
90
|
+
// squared ground whose horizon the atmosphere's fog blends into the sky.
|
|
91
|
+
const daylight = isDaylightAtmosphere(atmosphere);
|
|
92
|
+
// Solid shading is Lambert everywhere (the sky reaches it as a hemisphere light, not the
|
|
93
|
+
// environment), so the daylight grounds follow it.
|
|
94
|
+
const solid = useViewer((state) => state.shading === 'solid');
|
|
95
|
+
const bgColor = daylight ? DAYLIGHT_PARCEL : theme.ground;
|
|
91
96
|
const { background: backgroundColor, sky: skyColor, haze, skyDeep } = backdropColors(theme);
|
|
92
97
|
const maxLightIntensity = Math.max(1, ...theme.lights.map((light) => light.intensity));
|
|
93
98
|
const livePolygon = useLiveNodeOverrides((state) => state.overrides.get(node.id)?.polygon ?? null);
|
|
@@ -123,8 +128,8 @@ export const SiteRenderer = ({ node }) => {
|
|
|
123
128
|
return { cx, cz, radius };
|
|
124
129
|
}, [polygonPoints]);
|
|
125
130
|
// Where the ground meets the levels below grade. `all` says whether the scene has any (the
|
|
126
|
-
// ground materials carry the hole's mask from then on); `shown` is what the hole is cut over
|
|
127
|
-
// the
|
|
131
|
+
// ground materials carry the hole's mask from then on); `shown` is what the hole is cut over under
|
|
132
|
+
// the veil: the level shown and the ones between it and grade, as
|
|
128
133
|
// the level display hides them. While the level shown is not below grade the last such set is
|
|
129
134
|
// kept, so a hole easing shut keeps its shape. `covered` is the part of them under the house
|
|
130
135
|
// itself, whatever level is shown: the ground stands open there (see `holes`).
|
|
@@ -170,7 +175,9 @@ export const SiteRenderer = ({ node }) => {
|
|
|
170
175
|
// not when a floor is picked), the opening a uniform; without one the materials stay plain.
|
|
171
176
|
const hasBasement = buried.all.length > 0;
|
|
172
177
|
const groundMaterial = useMemo(() => {
|
|
173
|
-
const material =
|
|
178
|
+
const material = daylight
|
|
179
|
+
? createDaylightGroundMaterial(solid, { color: bgColor })
|
|
180
|
+
: new MeshLambertNodeMaterial({ color: bgColor });
|
|
174
181
|
material.polygonOffset = true;
|
|
175
182
|
material.polygonOffsetFactor = 1;
|
|
176
183
|
material.polygonOffsetUnits = 1;
|
|
@@ -188,13 +195,29 @@ export const SiteRenderer = ({ node }) => {
|
|
|
188
195
|
material.maskNode = groundWindowMaskNode();
|
|
189
196
|
}
|
|
190
197
|
return material;
|
|
191
|
-
}, [bgColor, hasBasement]);
|
|
198
|
+
}, [bgColor, daylight, hasBasement, solid]);
|
|
192
199
|
// Presentation horizon: a large ground disc under the lot, fading into the
|
|
193
200
|
// active fog radiance (or the theme backdrop when there is no atmosphere) so
|
|
194
201
|
// the scene sits on an "infinite" plane instead of a hard-edged plate. Never pickable.
|
|
195
202
|
const horizonMaterial = useMemo(() => {
|
|
196
203
|
if (!fadeBounds || groundReplaced)
|
|
197
204
|
return null;
|
|
205
|
+
if (daylight) {
|
|
206
|
+
const material = createDaylightGroundMaterial(solid, { horizon: atmosphere?.fogRadiance });
|
|
207
|
+
material.polygonOffset = true;
|
|
208
|
+
material.polygonOffsetFactor = 2;
|
|
209
|
+
material.polygonOffsetUnits = 2;
|
|
210
|
+
if (hasBasement) {
|
|
211
|
+
;
|
|
212
|
+
material.maskNode = solidGroundMaskNode();
|
|
213
|
+
material.receivedShadowNode = groundHoleShadowNode();
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
;
|
|
217
|
+
material.maskNode = groundWindowMaskNode();
|
|
218
|
+
}
|
|
219
|
+
return material;
|
|
220
|
+
}
|
|
198
221
|
const material = new MeshLambertNodeMaterial({ color: bgColor });
|
|
199
222
|
const center = vec2(fadeBounds.cx, fadeBounds.cz);
|
|
200
223
|
const dist = positionWorld.xz.sub(center).length();
|
|
@@ -239,6 +262,8 @@ export const SiteRenderer = ({ node }) => {
|
|
|
239
262
|
}
|
|
240
263
|
return material;
|
|
241
264
|
}, [
|
|
265
|
+
solid,
|
|
266
|
+
daylight,
|
|
242
267
|
hasBasement,
|
|
243
268
|
atmosphere,
|
|
244
269
|
bgColor,
|
|
@@ -267,6 +292,16 @@ export const SiteRenderer = ({ node }) => {
|
|
|
267
292
|
slabPolygonsCache.current = next;
|
|
268
293
|
return next;
|
|
269
294
|
});
|
|
295
|
+
// Inside a storey's own floor the ground never shows over it: the part of each floor plate the
|
|
296
|
+
// terrain stands over (a slope interpolated just over a walk-out's floor included) is cut too.
|
|
297
|
+
const overFloorsCache = useRef([]);
|
|
298
|
+
const overFloors = useScene((state) => {
|
|
299
|
+
const next = terrainOverFloors(state.nodes);
|
|
300
|
+
if (polygonsMatch(next, overFloorsCache.current))
|
|
301
|
+
return overFloorsCache.current;
|
|
302
|
+
overFloorsCache.current = next;
|
|
303
|
+
return next;
|
|
304
|
+
});
|
|
270
305
|
// What the ground is cut open over: the recessed slabs, and the basement under the house. The
|
|
271
306
|
// house covers that part of a basement, so the ground there is open whatever level is shown:
|
|
272
307
|
// from outside nothing changes, and a stairwell, a floor opening or a walkthrough on the stair
|
|
@@ -278,19 +313,13 @@ export const SiteRenderer = ({ node }) => {
|
|
|
278
313
|
// the triangulation.
|
|
279
314
|
const coverOpen = !(belowGrade && groundMode === 'solid');
|
|
280
315
|
const holes = useMemo(() => {
|
|
281
|
-
|
|
316
|
+
const open = [...buried.covered, ...overFloors];
|
|
317
|
+
if (!coverOpen || open.length === 0 || !polygonPoints || polygonPoints.length < 3)
|
|
282
318
|
return slabPolygons;
|
|
283
|
-
const inLot = intersection(union(
|
|
319
|
+
const inLot = intersection(union(open), polygonPoints);
|
|
284
320
|
const covered = inLot.filter((piece) => piece.holes.length === 0).map((piece) => piece.outer);
|
|
285
321
|
return covered.length > 0 ? [...slabPolygons, ...covered] : slabPolygons;
|
|
286
|
-
}, [coverOpen, buried.covered, polygonPoints, slabPolygons]);
|
|
287
|
-
const gradeRings = useMemo(() => buried.shown.map((outline) => gradeRingGeometry(outline, persistedField)), [buried.shown, persistedField]);
|
|
288
|
-
useEffect(() => () => {
|
|
289
|
-
for (const ring of gradeRings)
|
|
290
|
-
ring.dispose();
|
|
291
|
-
}, [gradeRings]);
|
|
292
|
-
const gradeRing = useMemo(gradeRingMaterial, []);
|
|
293
|
-
useEffect(() => () => gradeRing.dispose(), [gradeRing]);
|
|
322
|
+
}, [coverOpen, buried.covered, overFloors, polygonPoints, slabPolygons]);
|
|
294
323
|
// Ground shape: site polygon with slab footprints punched as holes
|
|
295
324
|
const groundShape = useMemo(() => {
|
|
296
325
|
if (!polygonPoints || polygonPoints.length < 3)
|
|
@@ -312,7 +341,8 @@ export const SiteRenderer = ({ node }) => {
|
|
|
312
341
|
const horizonGeometry = useMemo(() => {
|
|
313
342
|
if (!fadeBounds || groundReplaced)
|
|
314
343
|
return null;
|
|
315
|
-
|
|
344
|
+
// Daylight: reach the atmosphere's fog end so the ground meets the sky at the horizon.
|
|
345
|
+
const radius = daylight ? 6000 : Math.max(fadeBounds.radius * 8, 400);
|
|
316
346
|
const shape = new Shape();
|
|
317
347
|
const segments = 64;
|
|
318
348
|
shape.moveTo(radius, 0);
|
|
@@ -323,7 +353,7 @@ export const SiteRenderer = ({ node }) => {
|
|
|
323
353
|
shape.closePath();
|
|
324
354
|
addSlabHoles(shape, holes, fadeBounds.cx, fadeBounds.cz);
|
|
325
355
|
return new ShapeGeometry(shape);
|
|
326
|
-
}, [fadeBounds, holes, groundReplaced]);
|
|
356
|
+
}, [daylight, fadeBounds, holes, groundReplaced]);
|
|
327
357
|
useEffect(() => () => horizonGeometry?.dispose(), [horizonGeometry]);
|
|
328
358
|
useEffect(() => () => horizonMaterial?.dispose(), [horizonMaterial]);
|
|
329
359
|
// Boundary line geometry, subdivided against the terrain grid when there is one.
|
|
@@ -534,7 +564,6 @@ export const SiteRenderer = ({ node }) => {
|
|
|
534
564
|
if (!(node && lineGeometry)) {
|
|
535
565
|
return null;
|
|
536
566
|
}
|
|
537
|
-
return (_jsxs("group", { ref: ref, ...handlers, children: [_jsx(GroundWindowSystem, {}), _jsx(
|
|
538
|
-
gradeRings.map((geometry, index) => (_jsx(GroundVeil, { geometry: geometry, material: gradeRing, shows: "veiled" }, index))), showSiteSurfaces && ribbons && (_jsxs(_Fragment, { children: [_jsx("mesh", { frustumCulled: false, geometry: ribbons.property, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#1c1917", depthWrite: false, side: DoubleSide, toneMapped: false }) }), ribbons.envelope && (_jsx("mesh", { frustumCulled: false, geometry: ribbons.envelope, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.85, side: DoubleSide, toneMapped: false, transparent: true }) })), ribbons.triangles.map((g, i) => (_jsx("mesh", { frustumCulled: false, geometry: g, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.85, side: DoubleSide, toneMapped: false, transparent: true }) }, i))), _jsx("line", { frustumCulled: false, geometry: lineGeometry, renderOrder: 8, children: _jsx("lineBasicMaterial", { color: "#1c1917", opacity: 0.5, transparent: true }) })] })), showSiteSurfaces && !ribbons && (_jsx("line", { frustumCulled: false, geometry: lineGeometry, renderOrder: 9, children: _jsx("lineBasicMaterial", { color: "#f59e0b", linewidth: 2, opacity: 0.6, transparent: true }) })), showSiteSurfaces && contourGeometry && (_jsx("lineSegments", { frustumCulled: false, geometry: contourGeometry, raycast: noopRaycast, renderOrder: 8, children: _jsx("lineBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.22, toneMapped: false, transparent: true }) }))] }));
|
|
567
|
+
return (_jsxs("group", { ref: ref, ...handlers, children: [_jsx(GroundWindowSystem, {}), _jsx(GroundHole, { drawnFloorY: buried.drawnFloorY, floorY: buried.floorY, footprints: buried.shown, present: hasBasement, topAt: groundTopAt, topsoil: bgColor, topY: GROUND_FILL_POSITION[1] }), (node.children ?? []).map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, childId))), showSiteSurfaces && showGround && showTerrain && (_jsx(TerrainRenderer, { holes: holes, material: groundMaterial, polygon: polygonPoints, site: node, veil: groundVeil })), showSiteSurfaces && showGround && groundGeometry && !showTerrain && (_jsxs(_Fragment, { children: [_jsx("mesh", { geometry: groundGeometry, material: groundMaterial, position: GROUND_FILL_POSITION, receiveShadow: true, rotation: FLAT_ON_THE_GROUND, userData: { [SITE_GROUND]: 'solid' } }), _jsx(GroundVeil, { geometry: groundGeometry, material: groundVeil, position: GROUND_FILL_POSITION, rotation: FLAT_ON_THE_GROUND })] })), showGround && !immersiveXR && horizonGeometry && horizonMaterial && fadeBounds && (_jsx("mesh", { geometry: horizonGeometry, material: horizonMaterial, position: [fadeBounds.cx, horizonY, fadeBounds.cz], raycast: noopRaycast, receiveShadow: true, rotation: FLAT_ON_THE_GROUND, userData: { pascalExport: 'strip', [SITE_GROUND]: 'solid' } })), showGround && !immersiveXR && horizonGeometry && horizonVeil && fadeBounds && (_jsx(GroundVeil, { geometry: horizonGeometry, material: horizonVeil, position: [fadeBounds.cx, horizonY, fadeBounds.cz], rotation: FLAT_ON_THE_GROUND })), showSiteSurfaces && ribbons && (_jsxs(_Fragment, { children: [_jsx("mesh", { frustumCulled: false, geometry: ribbons.property, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#1c1917", depthWrite: false, side: DoubleSide, toneMapped: false }) }), ribbons.envelope && (_jsx("mesh", { frustumCulled: false, geometry: ribbons.envelope, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.85, side: DoubleSide, toneMapped: false, transparent: true }) })), ribbons.triangles.map((g, i) => (_jsx("mesh", { frustumCulled: false, geometry: g, raycast: noopRaycast, renderOrder: 9, children: _jsx("meshBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.85, side: DoubleSide, toneMapped: false, transparent: true }) }, i))), _jsx("line", { frustumCulled: false, geometry: lineGeometry, renderOrder: 8, children: _jsx("lineBasicMaterial", { color: "#1c1917", opacity: 0.5, transparent: true }) })] })), showSiteSurfaces && !ribbons && (_jsx("line", { frustumCulled: false, geometry: lineGeometry, renderOrder: 9, children: _jsx("lineBasicMaterial", { color: "#f59e0b", linewidth: 2, opacity: 0.6, transparent: true }) })), showSiteSurfaces && contourGeometry && (_jsx("lineSegments", { frustumCulled: false, geometry: contourGeometry, raycast: noopRaycast, renderOrder: 8, children: _jsx("lineBasicMaterial", { color: "#000000", depthWrite: false, opacity: 0.22, toneMapped: false, transparent: true }) }))] }));
|
|
539
568
|
};
|
|
540
569
|
export default SiteRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/skylight/panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/skylight/panel.tsx"],"names":[],"mappings":"AA2CA,MAAM,CAAC,OAAO,UAAU,aAAa,uCA6jBpC"}
|
package/dist/skylight/panel.js
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { SKYLIGHT_TYPE_ORDER, SKYLIGHT_TYPE_PRESETS, sceneRegistry, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
|
|
3
|
+
import { SKYLIGHT_TYPE_ORDER, SKYLIGHT_TYPE_PRESETS, sceneRegistry, useLiveNodeOverrides, usePascalI18n, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { ActionButton, ActionGroup, PanelSection, PanelWrapper, SegmentedControl, SliderControl, triggerSFX, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Trash2 } from 'lucide-react';
|
|
7
7
|
import { useCallback } from 'react';
|
|
8
8
|
import { Vector3 } from 'three';
|
|
9
9
|
const cn = (...classes) => classes.filter(Boolean).join(' ');
|
|
10
|
+
/** Preset names in the UI language; core's `SKYLIGHT_TYPE_PRESETS` labels stay English. */
|
|
11
|
+
const SKYLIGHT_TYPE_LABELS = {
|
|
12
|
+
flat: /* i18n */ { id: 'node.skylight.type.flat', message: 'Flat roof skylight' },
|
|
13
|
+
'walk-on': /* i18n */ { id: 'node.skylight.type.walkOn', message: 'Walk-on rooflight' },
|
|
14
|
+
lantern: /* i18n */ { id: 'node.skylight.type.lantern', message: 'Roof lantern' },
|
|
15
|
+
opening: /* i18n */ { id: 'node.skylight.type.opening', message: 'Opening skylight' },
|
|
16
|
+
sliding: /* i18n */ { id: 'node.skylight.type.sliding', message: 'Sliding skylight' },
|
|
17
|
+
};
|
|
10
18
|
export default function SkylightPanel() {
|
|
19
|
+
const i18n = usePascalI18n();
|
|
11
20
|
const selectedId = useViewer((s) => s.selection.selectedIds[0]);
|
|
12
21
|
const setSelection = useViewer((s) => s.setSelection);
|
|
13
22
|
const updateNode = useScene((s) => s.updateNode);
|
|
@@ -213,26 +222,47 @@ export default function SkylightPanel() {
|
|
|
213
222
|
motorHousingSize: preset.motorHousingSize,
|
|
214
223
|
});
|
|
215
224
|
};
|
|
216
|
-
return (_jsxs(PanelWrapper, { icon: "/icons/roof.webp", onBack: node.roofSegmentId ? handleBack : undefined, onClose: handleClose, title: node.name || 'Skylight', width: 300, children: [_jsxs(PanelSection, { title:
|
|
225
|
+
return (_jsxs(PanelWrapper, { icon: "/icons/roof.webp", onBack: node.roofSegmentId ? handleBack : undefined, onClose: handleClose, title: node.name || i18n._({ id: 'node.skylight.panel.skylight', message: 'Skylight' }), width: 300, children: [_jsxs(PanelSection, { title: i18n._({ id: 'node.skylight.panel.type', message: 'Type' }), children: [_jsx("div", { className: "grid grid-cols-2 gap-2 px-1 pt-1", children: SKYLIGHT_TYPE_ORDER.map((skylightType) => {
|
|
217
226
|
const isSelected = activeSkylightType === skylightType;
|
|
218
227
|
return (_jsx("button", { className: cn('flex min-h-12 items-center gap-2.5 rounded-lg border px-3 py-2.5 text-left text-xs transition-colors', isSelected
|
|
219
228
|
? 'border-orange-400/60 bg-orange-400/10 text-foreground'
|
|
220
|
-
: 'border-border/50 bg-black/4 dark:bg-[#2C2C2E] text-muted-foreground hover:bg-black/8 dark:hover:bg-[#3e3e3e] hover:text-foreground'), onClick: () => handleTypeChange(skylightType), type: "button", children: _jsx("span", { className: "min-w-0
|
|
221
|
-
}) }), _jsx(SliderControl, { label:
|
|
222
|
-
{ label: 'Top', value: 'top' },
|
|
223
|
-
{
|
|
224
|
-
|
|
225
|
-
|
|
229
|
+
: 'border-border/50 bg-black/4 dark:bg-[#2C2C2E] text-muted-foreground hover:bg-black/8 dark:hover:bg-[#3e3e3e] hover:text-foreground'), onClick: () => handleTypeChange(skylightType), type: "button", children: _jsx("span", { className: "min-w-0 break-words font-medium", children: i18n._(SKYLIGHT_TYPE_LABELS[skylightType]) }) }, skylightType));
|
|
230
|
+
}) }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.glassThickness', message: 'Glass Thickness' }), max: 0.05, min: 0.002, onChange: (v) => previewProp({ glassThickness: v }), onCommit: (v) => commitProp({ glassThickness: v }), precision: 3, restoreOnCommit: false, step: 0.001, unit: "m", value: node.glassThickness ?? 0.01 }), activeSkylightType === 'lantern' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.lanternHeight', message: 'Lantern Height' }), max: 1.0, min: 0.05, onChange: (v) => previewProp({ lanternHeight: v }), onCommit: (v) => commitProp({ lanternHeight: v }), precision: 3, restoreOnCommit: false, step: 0.01, unit: "m", value: node.lanternHeight ?? 0.25 }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.topScale', message: 'Top Scale' }), max: 0.95, min: 0, onChange: (v) => previewProp({ lanternTopScale: v }), onCommit: (v) => commitProp({ lanternTopScale: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "", value: Math.round((node.lanternTopScale ?? 0.25) * 100) / 100 })] })), activeSkylightType === 'opening' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.open', message: 'Open' }), max: 1, min: 0, onChange: (v) => previewProp({ operationState: v }), onCommit: (v) => commitProp({ operationState: v }), precision: 2, restoreOnCommit: false, step: 0.01, unit: "", value: Math.round((node.operationState ?? 0) * 100) / 100 }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.openingAngle', message: 'Opening Angle' }), max: 80, min: 0, onChange: (deg) => previewProp({ openingAngle: (deg * Math.PI) / 180 }), onCommit: (deg) => commitProp({ openingAngle: (deg * Math.PI) / 180 }), precision: 0, restoreOnCommit: false, step: 1, unit: "\u00B0", value: Math.round(((node.openingAngle ?? Math.PI / 10) * 180) / Math.PI) }), _jsx(SegmentedControl, { onChange: (v) => commitProp({ openingSide: v }), options: [
|
|
231
|
+
{ label: i18n._({ id: 'node.skylight.panel.top', message: 'Top' }), value: 'top' },
|
|
232
|
+
{
|
|
233
|
+
label: i18n._({ id: 'node.skylight.panel.bottom', message: 'Bottom' }),
|
|
234
|
+
value: 'bottom',
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
label: i18n._({ id: 'node.skylight.panel.left', message: 'Left' }),
|
|
238
|
+
value: 'left',
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
label: i18n._({ id: 'node.skylight.panel.right', message: 'Right' }),
|
|
242
|
+
value: 'right',
|
|
243
|
+
},
|
|
226
244
|
], value: (node.openingSide ?? 'top') }), _jsx(SegmentedControl, { onChange: (v) => commitProp({ motorHousing: v === 'yes' }), options: [
|
|
227
|
-
{
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
{
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
245
|
+
{
|
|
246
|
+
label: i18n._({ id: 'node.skylight.panel.motor', message: 'Motor' }),
|
|
247
|
+
value: 'yes',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
label: i18n._({ id: 'node.skylight.panel.noMotor', message: 'No Motor' }),
|
|
251
|
+
value: 'no',
|
|
252
|
+
},
|
|
253
|
+
], value: (node.motorHousing ?? false) ? 'yes' : 'no' }), (node.motorHousing ?? false) && (_jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.motorHousing', message: 'Motor Housing' }), max: 0.2, min: 0.03, onChange: (v) => previewProp({ motorHousingSize: v }), onCommit: (v) => commitProp({ motorHousingSize: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.motorHousingSize ?? 0.08 }))] })), activeSkylightType === 'sliding' && (_jsxs(_Fragment, { children: [_jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.open', message: 'Open' }), max: 1, min: 0, onChange: (v) => previewProp({ operationState: v }), onCommit: (v) => commitProp({ operationState: v }), precision: 2, restoreOnCommit: false, step: 0.01, unit: "", value: Math.round((node.operationState ?? 0) * 100) / 100 }), _jsx(SegmentedControl, { onChange: (v) => commitProp({ slideDirection: v }), options: [
|
|
254
|
+
{
|
|
255
|
+
label: i18n._({ id: 'node.skylight.panel.alongZ', message: 'Along Z' }),
|
|
256
|
+
value: 'z',
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
label: i18n._({ id: 'node.skylight.panel.alongX', message: 'Along X' }),
|
|
260
|
+
value: 'x',
|
|
261
|
+
},
|
|
262
|
+
], value: (node.slideDirection ?? 'z') }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.trackWidth', message: 'Track Width' }), max: 0.12, min: 0.02, onChange: (v) => previewProp({ trackWidth: v }), onCommit: (v) => commitProp({ trackWidth: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.trackWidth ?? 0.045 })] }))] }), _jsxs(PanelSection, { title: i18n._({ id: 'node.skylight.panel.dimensions', message: 'Dimensions' }), children: [_jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.width', message: 'Width' }), max: 1000, min: 0.3, onChange: (v) => previewProp({ width: v }), onCommit: (v) => commitProp({ width: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.width }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.height', message: 'Height' }), max: 1000, min: 0.3, onChange: (v) => previewProp({ height: v }), onCommit: (v) => commitProp({ height: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.height })] }), _jsxs(PanelSection, { title: i18n._({ id: 'node.skylight.panel.frame', message: 'Frame' }), children: [_jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.thickness', message: 'Thickness' }), max: 0.2, min: 0.02, onChange: (v) => previewProp({ frameThickness: v }), onCommit: (v) => commitProp({ frameThickness: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.frameThickness ?? 0.05 }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.depth', message: 'Depth' }), max: 0.3, min: 0.02, onChange: (v) => previewProp({ frameDepth: v }), onCommit: (v) => commitProp({ frameDepth: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.frameDepth ?? 0.08 }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.cutoutOffset', message: 'Cutout Offset' }), max: 0.2, min: 0, onChange: (v) => previewProp({ cutoutOffset: v }), onCommit: (v) => commitProp({ cutoutOffset: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.cutoutOffset ?? 0.01 })] }), _jsxs(PanelSection, { title: i18n._({ id: 'node.skylight.panel.curb', message: 'Curb' }), children: [_jsx(SegmentedControl, { onChange: (v) => handleUpdate({ curb: v === 'yes' }), options: [
|
|
263
|
+
{ label: i18n._({ id: 'node.skylight.panel.yes', message: 'Yes' }), value: 'yes' },
|
|
264
|
+
{ label: i18n._({ id: 'node.skylight.panel.no', message: 'No' }), value: 'no' },
|
|
265
|
+
], value: (node.curb ?? false) ? 'yes' : 'no' }), (node.curb ?? false) && (_jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.height', message: 'Height' }), max: 0.3, min: 0.02, onChange: (v) => previewProp({ curbHeight: v }), onCommit: (v) => commitProp({ curbHeight: v }), precision: 3, restoreOnCommit: false, step: 0.005, unit: "m", value: node.curbHeight ?? 0.1 }))] }), _jsxs(PanelSection, { title: i18n._({ id: 'node.skylight.panel.position', message: 'Position' }), children: [_jsx(SliderControl, { label: "X", max: Math.round(worldMaxX * 10) / 10, min: Math.round(worldMinX * 10) / 10, onChange: (newWorldX) => {
|
|
236
266
|
if (!segment)
|
|
237
267
|
return;
|
|
238
268
|
const local = worldToSegLocal(newWorldX, worldZ_now, segment);
|
|
@@ -242,12 +272,12 @@ export default function SkylightPanel() {
|
|
|
242
272
|
return;
|
|
243
273
|
const local = worldToSegLocal(worldX_now, newWorldZ, segment);
|
|
244
274
|
previewProp({ position: [local.localX, 0, local.localZ] });
|
|
245
|
-
}, onCommit: (newWorldZ) => commitWorldPosition(worldX_now, newWorldZ), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: worldZ_now }), _jsx(SliderControl, { label:
|
|
275
|
+
}, onCommit: (newWorldZ) => commitWorldPosition(worldX_now, newWorldZ), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: worldZ_now }), _jsx(SliderControl, { label: i18n._({ id: 'node.skylight.panel.rotation', message: 'Rotation' }), max: 180, min: -180, onChange: (degrees) => {
|
|
246
276
|
const newWorldRot = (degrees * Math.PI) / 180;
|
|
247
277
|
if (!skylightObj)
|
|
248
278
|
return;
|
|
249
279
|
const m = skylightObj.matrixWorld.elements;
|
|
250
280
|
const ancestorWorldY = Math.atan2(-(m[2] ?? 0), m[0] ?? 1);
|
|
251
281
|
previewProp({ rotation: newWorldRot - ancestorWorldY });
|
|
252
|
-
}, onCommit: (degrees) => commitWorldRotation((degrees * Math.PI) / 180), precision: 0, restoreOnCommit: false, step: 1, unit: "\u00B0", value: Math.round((worldRotation_now * 180) / Math.PI) })] }), _jsx(PanelSection, { title:
|
|
282
|
+
}, onCommit: (degrees) => commitWorldRotation((degrees * Math.PI) / 180), precision: 0, restoreOnCommit: false, step: 1, unit: "\u00B0", value: Math.round((worldRotation_now * 180) / Math.PI) })] }), _jsx(PanelSection, { title: i18n._({ id: 'node.skylight.panel.actions', message: 'Actions' }), children: _jsx(ActionGroup, { children: _jsx(ActionButton, { className: "hover:bg-red-500/20", icon: _jsx(Trash2, { className: "h-3.5 w-3.5 text-red-600 dark:text-red-400" }), label: i18n._({ id: 'node.skylight.panel.delete', message: 'Delete' }), onClick: handleDelete }) }) })] }));
|
|
253
283
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type DeckFramingPlan, type DeckPiece, type GeometryContext, type PlateSurfacePartition, type PlateTopCell, type SlabNode } from '@pascal-app/core';
|
|
2
|
+
import { type ColorPreset, type RenderShading } from '@pascal-app/viewer';
|
|
3
|
+
import { Group, type Material } from 'three';
|
|
4
|
+
export type DeckLook = {
|
|
5
|
+
shading: RenderShading;
|
|
6
|
+
textures: boolean;
|
|
7
|
+
colorPreset: ColorPreset;
|
|
8
|
+
sceneTheme?: string;
|
|
9
|
+
};
|
|
10
|
+
export type DeckGeometryOptions = {
|
|
11
|
+
/** The deck's outline: the slab's renderable polygon. */
|
|
12
|
+
polygon: Array<[number, number]>;
|
|
13
|
+
/** The plate's top partition: one set of boards per cell. Null for a drawn slab. */
|
|
14
|
+
partition: PlateSurfacePartition | null;
|
|
15
|
+
/** A cell's finish as a material; `null` asks for the slab's own surface finish. */
|
|
16
|
+
boardMaterial: (cell: PlateTopCell | null) => Material;
|
|
17
|
+
look: DeckLook;
|
|
18
|
+
};
|
|
19
|
+
/** The deck's frame as the engine draws it: a joist a side rim stands in for is the rim. */
|
|
20
|
+
export declare function deckFramePieces(plan: DeckFramingPlan): DeckPiece[];
|
|
21
|
+
/** The deck's frame plan and boards, as drawn for `node`. */
|
|
22
|
+
export declare function planDeck(node: SlabNode, ctx: GeometryContext | undefined, polygon: Array<[number, number]>): {
|
|
23
|
+
boards: import("@pascal-app/core").DeckBoardSettings;
|
|
24
|
+
thickness: number;
|
|
25
|
+
plan: DeckFramingPlan;
|
|
26
|
+
};
|
|
27
|
+
export declare function buildDeckGeometry(node: SlabNode, ctx: GeometryContext | undefined, options: DeckGeometryOptions): Group;
|
|
28
|
+
//# sourceMappingURL=deck-geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deck-geometry.d.ts","sourceRoot":"","sources":["../../src/slab/deck-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,SAAS,EAKd,KAAK,eAAe,EAMpB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAMjB,KAAK,QAAQ,EAId,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAIL,KAAK,EACL,KAAK,QAAQ,EAId,MAAM,OAAO,CAAA;AAkBd,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,yDAAyD;IACzD,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChC,oFAAoF;IACpF,SAAS,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACvC,oFAAoF;IACpF,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,KAAK,QAAQ,CAAA;IACtD,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AA6ND,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,EAAE,CAQlE;AAED,6DAA6D;AAC7D,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GAAG,SAAS,EAChC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;EA0BjC;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GAAG,SAAS,EAChC,OAAO,EAAE,mBAAmB,GAC3B,KAAK,CAgEP"}
|