@pascal-app/editor 1.0.6 → 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/package.json +18 -15
- package/src/components/editor/action-menu-button.tsx +4 -1
- package/src/components/editor/alignment-3d-guide-layer.tsx +102 -11
- package/src/components/editor/bake-thumbnail.tsx +3 -2
- package/src/components/editor/custom-camera-controls.tsx +110 -42
- package/src/components/editor/duplicate-node.ts +2 -1
- package/src/components/editor/elevation-3d-guide-layer.tsx +1 -1
- package/src/components/editor/first-person-controls.tsx +77 -68
- package/src/components/editor/fit-scene-framing.test.ts +318 -0
- package/src/components/editor/fit-scene-framing.ts +142 -0
- package/src/components/editor/floating-action-menu.tsx +31 -11
- package/src/components/editor/floating-building-action-menu.tsx +1 -1
- package/src/components/editor/floor-openings-overlay.tsx +1 -1
- package/src/components/editor/floor-region-controls.tsx +2 -2
- package/src/components/editor/floorplan-panel.test.ts +220 -0
- package/src/components/editor/floorplan-panel.tsx +458 -140
- package/src/components/editor/floorplan-wall-typing-keys.test.tsx +152 -0
- package/src/components/editor/floorplan-wall-typing-keys.ts +79 -0
- package/src/components/editor/footprint-height-handle.tsx +2 -2
- package/src/components/editor/grid.tsx +24 -15
- package/src/components/editor/group-actions.ts +19 -1
- package/src/components/editor/group-floating-action-menu.tsx +1 -1
- package/src/components/editor/group-move-3d.ts +27 -2
- package/src/components/editor/group-selection-box-3d.tsx +4 -1
- package/src/components/editor/group-transform-shared.ts +23 -1
- package/src/components/editor/index.tsx +150 -20
- package/src/components/editor/inspector-extension-actions.tsx +36 -0
- package/src/components/editor/localized-html.tsx +22 -0
- package/src/components/editor/measurement-pill.tsx +1 -1
- package/src/components/editor/node-action-menu.tsx +46 -12
- package/src/components/editor/node-arrow-handles.tsx +2 -3
- package/src/components/editor/open-wall-ends-3d-layer.tsx +2 -3
- package/src/components/editor/open-wall-ends-hint.tsx +1 -1
- package/src/components/editor/opening-guides-3d-layer.tsx +1 -1
- package/src/components/editor/quick-measurement-card.tsx +1 -1
- package/src/components/editor/registry-action-contributions.test.tsx +67 -6
- package/src/components/editor/registry-action-contributions.tsx +115 -15
- package/src/components/editor/riser-diagram-panel.tsx +59 -9
- package/src/components/editor/room-controls.tsx +4 -3
- package/src/components/editor/room-handles-2d.tsx +158 -7
- package/src/components/editor/room-handles.tsx +244 -54
- package/src/components/editor/room-highlight.tsx +2 -0
- package/src/components/editor/room-labels.tsx +33 -17
- package/src/components/editor/selection-manager.tsx +15 -102
- package/src/components/editor/separator-end-grip.tsx +74 -0
- package/src/components/editor/site-edge-labels.tsx +7 -3
- package/src/components/editor/thumbnail-generator.test.ts +15 -6
- package/src/components/editor/thumbnail-generator.tsx +26 -1
- package/src/components/editor/use-floorplan-background-placement.ts +55 -52
- package/src/components/editor/views/view-bar.tsx +111 -26
- package/src/components/editor/wall-measurement-label.tsx +31 -15
- package/src/components/editor/wall-move-side-handles.tsx +15 -7
- package/src/components/editor/wall-pull-grip.tsx +193 -0
- package/src/components/editor/wall-region-handles.tsx +2 -2
- package/src/components/editor/wall-snap-beacon-layer.tsx +134 -33
- package/src/components/editor-2d/floorplan-adjacent-walls-layer.test.ts +76 -0
- package/src/components/editor-2d/floorplan-adjacent-walls-layer.tsx +186 -0
- package/src/components/editor-2d/floorplan-alignment-guide-layer.tsx +63 -3
- package/src/components/editor-2d/floorplan-group-move.tsx +32 -4
- package/src/components/editor-2d/floorplan-measurement-tool-layer.test.ts +6 -0
- package/src/components/editor-2d/floorplan-measurement-tool-layer.tsx +33 -24
- package/src/components/editor-2d/floorplan-open-wall-ends-layer.tsx +12 -5
- package/src/components/editor-2d/floorplan-registry-action-menu.tsx +2 -1
- package/src/components/editor-2d/floorplan-registry-move-overlay.tsx +29 -5
- package/src/components/editor-2d/floorplan-snap-beacon-layer.tsx +96 -4
- package/src/components/editor-2d/renderers/floorplan-dimension-edit-overlay.tsx +52 -12
- package/src/components/editor-2d/renderers/floorplan-draft-measurement.tsx +7 -1
- package/src/components/editor-2d/renderers/floorplan-placement-preview-layer.tsx +13 -1
- package/src/components/editor-2d/renderers/floorplan-placement-typing-hud.test.tsx +35 -0
- package/src/components/editor-2d/renderers/floorplan-placement-typing-hud.tsx +65 -0
- package/src/components/editor-2d/renderers/floorplan-registry-layer.test.ts +34 -1
- package/src/components/editor-2d/renderers/floorplan-registry-layer.tsx +211 -39
- package/src/components/procedural-items/inspector.tsx +59 -12
- package/src/components/systems/ceiling/ceiling-bracket-batch.test.ts +2 -0
- package/src/components/systems/ceiling/ceiling-system.test.ts +141 -0
- package/src/components/systems/ceiling/ceiling-system.tsx +53 -18
- package/src/components/systems/roof/roof-edit-system.test.tsx +15 -1
- package/src/components/systems/roof/roof-edit-system.tsx +30 -19
- package/src/components/tools/distribution/distribution-run-tool.test.tsx +371 -3
- package/src/components/tools/distribution/distribution-run-tool.tsx +200 -58
- package/src/components/tools/item/move-tool.tsx +1 -6
- package/src/components/tools/item/placement-history.test.tsx +1 -1
- package/src/components/tools/item/placement-strategies.test.ts +64 -1
- package/src/components/tools/item/placement-strategies.ts +5 -9
- package/src/components/tools/item/use-placement-coordinator.tsx +31 -35
- package/src/components/tools/paint-region/wall-paint-region-tool.tsx +1 -1
- package/src/components/tools/registry/item-surface-move.test.ts +11 -0
- package/src/components/tools/registry/move-registry-node-tool.test.ts +42 -1
- package/src/components/tools/registry/move-registry-node-tool.tsx +38 -14
- package/src/components/tools/select/select-candidates.test.ts +45 -0
- package/src/components/tools/select/select-candidates.ts +13 -2
- package/src/components/tools/shared/cursor-sphere.tsx +10 -3
- package/src/components/tools/shared/draft-measurement-label.tsx +1 -1
- package/src/components/tools/shared/placement-box.tsx +2 -6
- package/src/components/tools/shared/placement-coordinate-input.tsx +94 -0
- package/src/components/tools/shared/placement-dimension-guides.tsx +1 -1
- package/src/components/tools/shared/segment-angle.ts +0 -4
- package/src/components/tools/site/terrain-brush-cursor.tsx +1 -1
- package/src/components/tools/tool-manager.tsx +1 -24
- package/src/components/tools/wall/wall-drafting.test.ts +299 -23
- package/src/components/tools/wall/wall-drafting.ts +132 -24
- package/src/components/tools/wall/wall-pull-snap.test.ts +274 -0
- package/src/components/tools/wall/wall-pull-snap.ts +563 -0
- package/src/components/tools/wall/wall-snap-geometry.test.ts +113 -1
- package/src/components/tools/wall/wall-snap-geometry.ts +137 -0
- package/src/components/tools/wall/wall-typed-entry.test.ts +99 -0
- package/src/components/tools/wall/wall-typed-entry.ts +70 -0
- package/src/components/tools/zone/zone-tool.tsx +3 -3
- package/src/components/ui/action-menu/action-button.tsx +2 -0
- package/src/components/ui/action-menu/camera-actions.tsx +8 -7
- package/src/components/ui/action-menu/control-modes.tsx +9 -5
- package/src/components/ui/action-menu/follow-pascal-pill.tsx +3 -1
- package/src/components/ui/action-menu/follow-pascal-toggle.tsx +7 -1
- package/src/components/ui/action-menu/furnish-tools.tsx +7 -6
- package/src/components/ui/action-menu/index.tsx +1 -0
- package/src/components/ui/action-menu/measurement-control.tsx +35 -29
- package/src/components/ui/action-menu/point-ask-button.tsx +4 -3
- package/src/components/ui/action-menu/structure-tools.tsx +25 -23
- package/src/components/ui/action-menu/view-toggles.test.ts +18 -0
- package/src/components/ui/action-menu/view-toggles.tsx +256 -51
- package/src/components/ui/build-panel/build-panel.tsx +163 -25
- package/src/components/ui/command-palette/editor-commands.tsx +38 -11
- package/src/components/ui/controls/finish-swatch.tsx +45 -19
- package/src/components/ui/controls/material-picker.tsx +24 -17
- package/src/components/ui/controls/metric-control.test.ts +52 -0
- package/src/components/ui/controls/metric-control.tsx +62 -24
- package/src/components/ui/controls/segmented-control.tsx +5 -2
- package/src/components/ui/controls/slider-control.test.tsx +23 -0
- package/src/components/ui/controls/slider-control.tsx +47 -19
- package/src/components/ui/controls/tool-options-panel.tsx +74 -44
- package/src/components/ui/floating-level-selector.tsx +100 -48
- package/src/components/ui/helpers/building-helper.tsx +5 -3
- package/src/components/ui/helpers/contextual-helper-panel.tsx +97 -37
- package/src/components/ui/helpers/helper-manager.test.tsx +106 -3
- package/src/components/ui/helpers/helper-manager.tsx +136 -57
- package/src/components/ui/helpers/item-helper.tsx +6 -4
- package/src/components/ui/helpers/registered-tool-helper.tsx +3 -1
- package/src/components/ui/level-duplicate-dialog.tsx +32 -23
- package/src/components/ui/level-wall-copy-prompt.tsx +124 -0
- package/src/components/ui/panels/collections/collections-popover.tsx +11 -11
- package/src/components/ui/panels/deck-boards-fields.tsx +136 -0
- package/src/components/ui/panels/floor-foundation-panel.tsx +114 -39
- package/src/components/ui/panels/floor-opening-panel.tsx +74 -26
- package/src/components/ui/panels/inspector-extensions.tsx +66 -0
- package/src/components/ui/panels/mobile-panel-sheet.tsx +3 -1
- package/src/components/ui/panels/mobile-selection-bar.tsx +34 -28
- package/src/components/ui/panels/multi-field-value.test.ts +27 -0
- package/src/components/ui/panels/multi-field-value.ts +20 -1
- package/src/components/ui/panels/multi-height-mode.tsx +11 -10
- package/src/components/ui/panels/multi-parametric-inspector.tsx +122 -34
- package/src/components/ui/panels/multi-selection-panel.tsx +76 -36
- package/src/components/ui/panels/node-display.ts +35 -24
- package/src/components/ui/panels/panel-manager.tsx +9 -5
- package/src/components/ui/panels/panel-wrapper.tsx +63 -127
- package/src/components/ui/panels/parametric-field-control.tsx +13 -10
- package/src/components/ui/panels/parametric-inspector.tsx +18 -12
- package/src/components/ui/panels/reference-panel.tsx +51 -35
- package/src/components/ui/panels/room-construction-rows.tsx +465 -66
- package/src/components/ui/panels/room-name-options.test.ts +36 -3
- package/src/components/ui/panels/room-name-options.ts +110 -11
- package/src/components/ui/panels/room-openings-field.tsx +22 -13
- package/src/components/ui/panels/room-panel.tsx +207 -100
- package/src/components/ui/panels/shape-choice.tsx +7 -5
- package/src/components/ui/panels/wall-region-list.tsx +7 -7
- package/src/components/ui/primitives/shortcut-token.tsx +10 -6
- package/src/components/ui/right-stack.test.ts +13 -6
- package/src/components/ui/right-stack.tsx +21 -10
- package/src/components/ui/sidebar/icon-rail.tsx +11 -9
- package/src/components/ui/sidebar/panels/items-panel/function-tree-panel.tsx +10 -10
- package/src/components/ui/sidebar/panels/items-panel/index.tsx +10 -9
- package/src/components/ui/sidebar/panels/settings-panel/index.tsx +3 -0
- package/src/components/ui/sidebar/panels/settings-panel/keyboard-shortcuts-dialog.tsx +102 -32
- package/src/components/ui/sidebar/panels/settings-panel/load-build-dialog.tsx +1 -5
- package/src/components/ui/sidebar/panels/site-panel/building-tree-node.tsx +4 -3
- package/src/components/ui/sidebar/panels/site-panel/ceiling-tree-node.tsx +5 -3
- package/src/components/ui/sidebar/panels/site-panel/chimney-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/collection-tree-node.tsx +7 -5
- package/src/components/ui/sidebar/panels/site-panel/column-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/default-names.ts +75 -0
- package/src/components/ui/sidebar/panels/site-panel/door-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/dormer-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/elevator-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/fence-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/gutter-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/index.tsx +118 -72
- package/src/components/ui/sidebar/panels/site-panel/inline-rename-input.tsx +36 -3
- package/src/components/ui/sidebar/panels/site-panel/item-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/level-tree-node.tsx +7 -4
- package/src/components/ui/sidebar/panels/site-panel/registry-tree-node.tsx +8 -2
- package/src/components/ui/sidebar/panels/site-panel/roof-tree-node.tsx +8 -5
- package/src/components/ui/sidebar/panels/site-panel/shelf-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/slab-tree-node.tsx +9 -4
- package/src/components/ui/sidebar/panels/site-panel/solar-panel-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/spawn-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/stair-tree-node.tsx +8 -7
- package/src/components/ui/sidebar/panels/site-panel/tree-node-actions.tsx +7 -6
- package/src/components/ui/sidebar/panels/site-panel/tree-node.tsx +16 -1
- package/src/components/ui/sidebar/panels/site-panel/unit-tree-node.tsx +15 -8
- package/src/components/ui/sidebar/panels/site-panel/wall-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/window-tree-node.tsx +4 -2
- package/src/components/ui/sidebar/panels/site-panel/zone-membership-checkbox.tsx +3 -1
- package/src/components/ui/sidebar/panels/site-panel/zone-tree-node.tsx +19 -9
- package/src/components/ui/sidebar/panels/zone-panel/index.tsx +25 -14
- package/src/components/ui/sidebar/tab-bar.tsx +4 -1
- package/src/components/ui/sidebar/use-plugin-panels.tsx +19 -10
- package/src/components/ui/snap-target-badge.tsx +7 -6
- package/src/components/ui/wall-type/wall-type-editor-dialog.tsx +721 -0
- package/src/components/ui/wall-type/wall-type-menu.tsx +167 -0
- package/src/components/viewer/floorplan-compass-button.tsx +12 -3
- package/src/components/viewer/floorplan-preview.tsx +27 -19
- package/src/components/viewer/render-settings-menu.tsx +294 -0
- package/src/components/viewer/sky-control.tsx +710 -0
- package/src/components/viewer/use-viewer-ui-sounds.test.ts +15 -0
- package/src/components/viewer/use-viewer-ui-sounds.ts +46 -0
- package/src/components/viewer/viewer-controls-bar.tsx +278 -260
- package/src/components/viewer/viewer-hover-label.tsx +12 -4
- package/src/components/viewer/viewer-rooms.tsx +62 -5
- package/src/components/viewer/viewer-scene-header.tsx +28 -17
- package/src/components/viewer/viewer-stage-switcher.tsx +4 -2
- package/src/components/viewer-overlay.tsx +8 -0
- package/src/components/walkthrough-hud.tsx +75 -2
- package/src/hooks/use-keyboard.test.ts +85 -4
- package/src/hooks/use-keyboard.ts +65 -7
- package/src/hooks/use-selected-room.ts +12 -1
- package/src/i18n/floor-footprint-name.ts +30 -0
- package/src/i18n/level-name.ts +39 -0
- package/src/i18n/locales/en/messages.po +15849 -0
- package/src/i18n/locales/en/messages.ts +1 -0
- package/src/i18n/locales/en-XA/messages.ts +1 -0
- package/src/i18n/locales/es/messages.po +39331 -0
- package/src/i18n/locales/es/messages.ts +1 -0
- package/src/i18n/locales/fr/messages.po +39331 -0
- package/src/i18n/locales/fr/messages.ts +1 -0
- package/src/i18n/locales/ja/messages.po +39331 -0
- package/src/i18n/locales/ja/messages.ts +1 -0
- package/src/i18n/locales/zh-CN/messages.po +39331 -0
- package/src/i18n/locales/zh-CN/messages.ts +1 -0
- package/src/i18n/locales.test.ts +63 -0
- package/src/i18n/locales.ts +32 -0
- package/src/i18n/message-slot.tsx +25 -0
- package/src/i18n/node-messages.ts +169 -0
- package/src/i18n/pseudo-locale.ts +17 -0
- package/src/i18n/published-entry.test.ts +17 -0
- package/src/i18n/scene-theme-name.ts +16 -0
- package/src/index.tsx +224 -45
- package/src/lib/add-storey.test.ts +3 -3
- package/src/lib/contextual-help.test.ts +20 -1
- package/src/lib/contextual-help.ts +101 -19
- package/src/lib/continuation.ts +38 -11
- package/src/lib/elevation-guides.ts +21 -6
- package/src/lib/elevator-support.ts +1 -72
- package/src/lib/floor-footprints.test.ts +3 -2
- package/src/lib/floor-footprints.ts +1 -9
- package/src/lib/floor-foundation-support.test.ts +15 -6
- package/src/lib/floor-opening-draft.ts +1 -1
- package/src/lib/floor-region-session.ts +1 -1
- package/src/lib/floorplan/dimension-drive.test.ts +36 -2
- package/src/lib/floorplan/dimension-drive.ts +68 -3
- package/src/lib/floorplan/floorplan-export.test.ts +16 -5
- package/src/lib/floorplan/floorplan-export.tsx +13 -16
- package/src/lib/floorplan/floorplan-extension.test.ts +11 -12
- package/src/lib/floorplan/floorplan-extension.ts +37 -18
- package/src/lib/floorplan/floorplan-mode.test.ts +13 -6
- package/src/lib/floorplan/floorplan-mode.ts +14 -12
- package/src/lib/floorplan/floorplan-plugin-install.test.tsx +1 -1
- package/src/lib/floorplan/floorplan-readonly.ts +3 -3
- package/src/lib/floorplan/open-wall-ends.ts +2 -1
- package/src/lib/floorplan/schedules.ts +10 -6
- package/src/lib/floorplan/site-plan/site-annotations.test.ts +46 -1
- package/src/lib/floorplan/site-plan/site-annotations.ts +3 -0
- package/src/lib/floorplan/site-plan/site-parts.ts +6 -3
- package/src/lib/geometry-script/author.test.ts +114 -0
- package/src/lib/geometry-script/author.ts +55 -23
- package/src/lib/geometry-script/client.ts +3 -0
- package/src/lib/geometry-script/finish-scripts.ts +7 -7
- package/src/lib/gesture-lifecycle.ts +3 -1
- package/src/lib/glb-export.test.ts +327 -0
- package/src/lib/glb-export.ts +70 -2
- package/src/lib/grid-frame.test.ts +56 -3
- package/src/lib/grid-frame.ts +28 -1
- package/src/lib/history.test.ts +2 -1
- package/src/lib/hud-title.ts +48 -24
- package/src/lib/ifc-export.test.ts +41 -1
- package/src/lib/inspector-card-mode.test.ts +3 -31
- package/src/lib/inspector-card-mode.ts +5 -10
- package/src/lib/inspector-expanded.test.ts +13 -0
- package/src/lib/inspector-expanded.ts +13 -1
- package/src/lib/interaction/scope.ts +1 -0
- package/src/lib/keyboard-pan.test.ts +7 -0
- package/src/lib/keyboard-pan.ts +9 -2
- package/src/lib/layer-thickness.test.ts +22 -0
- package/src/lib/layer-thickness.ts +79 -0
- package/src/lib/level-selection.test.ts +18 -2
- package/src/lib/level-selection.ts +31 -8
- package/src/lib/linear-display.ts +1 -1
- package/src/lib/live-gesture-round-trip.test.ts +1 -1
- package/src/lib/lot/drop-in.test.ts +59 -1
- package/src/lib/lot/drop-in.ts +42 -50
- package/src/lib/material-swatch-style.ts +24 -0
- package/src/lib/measurement-label.test.ts +1 -1
- package/src/lib/measurement-parser.ts +7 -3
- package/src/lib/measurements.test.ts +24 -6
- package/src/lib/measurements.ts +1 -203
- package/src/lib/mezzanine-selection.test.ts +3 -1
- package/src/lib/node-action-movement.test.tsx +115 -0
- package/src/lib/node-action-movement.ts +2 -0
- package/src/lib/orbit-near-plane.test.ts +12 -0
- package/src/lib/orbit-near-plane.ts +13 -0
- package/src/lib/paint-regions.test.ts +8 -5
- package/src/lib/paint-scope.test.ts +53 -0
- package/src/lib/paint-scope.ts +18 -4
- package/src/lib/panel-rows.ts +17 -8
- package/src/lib/placement-metadata.ts +4 -0
- package/src/lib/point-ask/describe-target.ts +6 -8
- package/src/lib/point-ask/region.ts +1 -1
- package/src/lib/print-shell-compiler.ts +12 -1
- package/src/lib/print-wall-solids.test.ts +11 -0
- package/src/lib/print-wall-solids.ts +9 -0
- package/src/lib/reference-scale.ts +83 -0
- package/src/lib/room-assembly-overlay.ts +1 -1
- package/src/lib/room-built-on.test.ts +28 -17
- package/src/lib/room-built-on.ts +21 -17
- package/src/lib/room-construction-commands.ts +3 -2
- package/src/lib/room-construction.test.ts +28 -1
- package/src/lib/room-construction.ts +14 -0
- package/src/lib/room-controls-phase6.test.ts +141 -1
- package/src/lib/room-handle-drag.ts +554 -58
- package/src/lib/room-name-catalog.test.ts +8 -0
- package/src/lib/room-name-catalog.ts +8 -1
- package/src/lib/room-name-messages.test.ts +132 -0
- package/src/lib/room-name-messages.ts +147 -0
- package/src/lib/room-name-storage.test.ts +334 -0
- package/src/lib/room-push-dimensions.test.ts +38 -1
- package/src/lib/room-push-dimensions.ts +226 -2
- package/src/lib/room-selection.test.ts +23 -6
- package/src/lib/scene-bounds.test.ts +144 -0
- package/src/lib/scene-bounds.ts +79 -15
- package/src/lib/scene-clipboard.test.ts +70 -49
- package/src/lib/scene-clipboard.ts +11 -5
- package/src/lib/selection-cycle.ts +63 -0
- package/src/lib/separator-edit.test.ts +431 -0
- package/src/lib/separator-edit.ts +179 -0
- package/src/lib/separator-lines.ts +38 -0
- package/src/lib/sfx-bus.ts +27 -1
- package/src/lib/sfx-player.ts +16 -0
- package/src/lib/snapping-mode.test.ts +23 -1
- package/src/lib/tool-cursor-icon.ts +5 -1
- package/src/lib/tool-shortcuts.ts +130 -0
- package/src/lib/viewer-selection.test.ts +28 -24
- package/src/lib/viewer-selection.ts +21 -6
- package/src/lib/wall-draw-variant.test.ts +7 -6
- package/src/lib/wall-draw-variant.ts +107 -6
- package/src/lib/wall-nudge.test.ts +44 -0
- package/src/lib/wall-nudge.ts +131 -0
- package/src/lib/wall-parallel-snap.test.ts +83 -0
- package/src/lib/wall-parallel-snap.ts +176 -0
- package/src/lib/wall-placement-pointer.test.ts +23 -0
- package/src/lib/wall-placement-pointer.ts +18 -0
- package/src/lib/wall-pull.test.ts +245 -0
- package/src/lib/wall-pull.ts +209 -0
- package/src/lib/wall-push-line-up.test.ts +132 -0
- package/src/lib/wall-region-list.ts +17 -6
- package/src/lib/wall-run-snap.test.ts +188 -0
- package/src/lib/wall-run-snap.ts +83 -0
- package/src/lib/wall-type.test.ts +125 -0
- package/src/lib/wall-type.ts +119 -0
- package/src/lib/window-interaction.test.ts +44 -0
- package/src/lib/world-grid-snap.test.ts +139 -2
- package/src/lib/world-grid-snap.ts +102 -105
- package/src/store/use-alignment-guides.ts +27 -1
- package/src/store/use-editor.tsx +53 -0
- package/src/store/use-floorplan-annotation-visibility.test.ts +64 -0
- package/src/store/use-floorplan-annotation-visibility.ts +47 -22
- package/src/store/use-placement-typing.test.ts +165 -0
- package/src/store/use-placement-typing.ts +186 -0
- package/src/store/use-wall-snap-indicator.ts +15 -2
- package/src/components/tools/elevator/elevator-defaults.ts +0 -8
- package/src/components/tools/elevator/elevator-tool.tsx +0 -372
- package/src/components/tools/elevator/move-elevator-tool.tsx +0 -262
- package/src/lib/door-interaction.ts +0 -102
- package/src/lib/measurement-label.ts +0 -68
- package/src/lib/window-interaction.ts +0 -100
package/src/index.tsx
CHANGED
|
@@ -2,11 +2,25 @@
|
|
|
2
2
|
// own shells on top of `@pascal-app/editor` (community-app, embedders)
|
|
3
3
|
// don't have to learn three separate package imports. The canonical
|
|
4
4
|
// definitions still live in `@pascal-app/core` / `@pascal-app/viewer`.
|
|
5
|
+
import { registerCompiledMessages as registerEditorMessages } from '@pascal-app/core'
|
|
6
|
+
import { messages as editorEnglishMessages } from './i18n/locales/en/messages'
|
|
7
|
+
|
|
8
|
+
// Published-package consumers need compiled English too: Lingui cannot
|
|
9
|
+
// interpolate a raw fallback literal in production. Other bundled locales
|
|
10
|
+
// remain explicitly host-registered through `@pascal-app/editor/locales`.
|
|
11
|
+
registerEditorMessages('en', '', editorEnglishMessages)
|
|
12
|
+
|
|
5
13
|
export {
|
|
6
14
|
type ApplySceneSnapshotOptions,
|
|
7
15
|
acquireSceneReadOnlyLease,
|
|
8
16
|
applyScenePatch,
|
|
9
17
|
applySceneSnapshot,
|
|
18
|
+
buildMeasurementAngleArcPoints,
|
|
19
|
+
type CompiledTranslationMessages,
|
|
20
|
+
closeDoorOpenState,
|
|
21
|
+
closeWindowOpenState,
|
|
22
|
+
createI18n,
|
|
23
|
+
cubicMetersToVolumeUnit,
|
|
10
24
|
DEFAULT_CURVED_STAIR_INNER_RADIUS,
|
|
11
25
|
DEFAULT_CURVED_STAIR_SWEEP_ANGLE,
|
|
12
26
|
DEFAULT_SPIRAL_SHOW_CENTER_COLUMN,
|
|
@@ -22,6 +36,37 @@ export {
|
|
|
22
36
|
DEFAULT_STAIR_THICKNESS,
|
|
23
37
|
DEFAULT_STAIR_TYPE,
|
|
24
38
|
DEFAULT_STAIR_WIDTH,
|
|
39
|
+
defaultI18n,
|
|
40
|
+
formatAngleRadians,
|
|
41
|
+
formatAreaLabel,
|
|
42
|
+
formatLength,
|
|
43
|
+
formatLinearMeasurement,
|
|
44
|
+
formatNumber,
|
|
45
|
+
formatVolumeLabel,
|
|
46
|
+
getAreaUnitLabel,
|
|
47
|
+
getDisplayedDoorValue,
|
|
48
|
+
getDisplayedWindowShutterValue,
|
|
49
|
+
getDisplayedWindowValue,
|
|
50
|
+
getLinearUnitLabel,
|
|
51
|
+
getLocale,
|
|
52
|
+
getVolumeUnitLabel,
|
|
53
|
+
isOperableWindowType,
|
|
54
|
+
type LinearUnit,
|
|
55
|
+
linearControlValueToMeters,
|
|
56
|
+
linearUnitToMeters,
|
|
57
|
+
metersToLinearUnit,
|
|
58
|
+
normalizeDecimalInput,
|
|
59
|
+
openDoorOpenState,
|
|
60
|
+
openWindowOpenState,
|
|
61
|
+
type PascalI18n,
|
|
62
|
+
PascalI18nProvider,
|
|
63
|
+
parseLinearMeasurementInput,
|
|
64
|
+
parseLocalizedNumber,
|
|
65
|
+
registerCompiledMessages,
|
|
66
|
+
registerMessages,
|
|
67
|
+
resolveElevatorNodeSupportY,
|
|
68
|
+
resolveElevatorSupportLevelId,
|
|
69
|
+
resolveElevatorSupportY,
|
|
25
70
|
type SceneCommit,
|
|
26
71
|
type SceneCommitListener,
|
|
27
72
|
type SceneCommitOrigin,
|
|
@@ -29,10 +74,31 @@ export {
|
|
|
29
74
|
type SceneNodePatch,
|
|
30
75
|
type ScenePatch,
|
|
31
76
|
type SceneSnapshot,
|
|
77
|
+
separatorFloorElevation,
|
|
78
|
+
setLocale,
|
|
79
|
+
setWindowShuttersOpenState,
|
|
80
|
+
squareMetersToAreaUnit,
|
|
81
|
+
subscribe,
|
|
32
82
|
subscribeSceneCommits,
|
|
83
|
+
type TranslationMessage,
|
|
84
|
+
type TranslationMessages,
|
|
85
|
+
type TranslationParams,
|
|
86
|
+
translate,
|
|
87
|
+
useLocale,
|
|
88
|
+
usePascalI18n,
|
|
33
89
|
useScene,
|
|
90
|
+
type WindowOpenAnimationOptions,
|
|
91
|
+
type WindowShutterField,
|
|
34
92
|
} from '@pascal-app/core'
|
|
35
|
-
export {
|
|
93
|
+
export {
|
|
94
|
+
MEASUREMENT_ACTIVE_COLOR,
|
|
95
|
+
MEASUREMENT_DANGLING_COLOR,
|
|
96
|
+
MEASUREMENT_PERSISTENT_COLOR,
|
|
97
|
+
measurementPolygonLabelAnchor,
|
|
98
|
+
measurementPresentationColor,
|
|
99
|
+
triangulateMeasurementPolygon,
|
|
100
|
+
useViewer,
|
|
101
|
+
} from '@pascal-app/viewer'
|
|
36
102
|
export type { EditorProps } from './components/editor'
|
|
37
103
|
export { default as Editor } from './components/editor'
|
|
38
104
|
export { ActionMenuButton } from './components/editor/action-menu-button'
|
|
@@ -68,6 +134,7 @@ export { FloatingActionMenu as FloatingMenu } from './components/editor/floating
|
|
|
68
134
|
// flags. Tools place onto `useViewer.selection.levelId`, so the host must set a
|
|
69
135
|
// building + level selection first.
|
|
70
136
|
export { EDITOR_GRID_INPUT_NAME, Grid } from './components/editor/grid'
|
|
137
|
+
export { Html as LocalizedHtml } from './components/editor/localized-html'
|
|
71
138
|
export {
|
|
72
139
|
DimensionPill,
|
|
73
140
|
type DimensionPillPart,
|
|
@@ -98,12 +165,15 @@ export {
|
|
|
98
165
|
} from './components/editor/node-arrow-handles'
|
|
99
166
|
export { QuickMeasurementCard } from './components/editor/quick-measurement-card'
|
|
100
167
|
export { SelectionManager } from './components/editor/selection-manager'
|
|
168
|
+
export { SeparatorEndGrip } from './components/editor/separator-end-grip'
|
|
101
169
|
export {
|
|
102
170
|
type SnapshotCameraData,
|
|
103
171
|
ThumbnailGenerator,
|
|
104
172
|
} from './components/editor/thumbnail-generator'
|
|
105
173
|
export { PLUGINS_VIEW_ID } from './components/editor/views/use-editor-views'
|
|
106
174
|
export { WallMoveSideHandles } from './components/editor/wall-move-side-handles'
|
|
175
|
+
export { WallPushArrow } from './components/editor/wall-push-arrow'
|
|
176
|
+
export { useWallsBelowSetting } from './components/editor-2d/floorplan-adjacent-walls-layer'
|
|
107
177
|
export { useFloorplanRender } from './components/editor-2d/floorplan-render-context'
|
|
108
178
|
export { FloorplanDimensionRenderer } from './components/editor-2d/renderers/floorplan-dimension-renderer'
|
|
109
179
|
export {
|
|
@@ -124,6 +194,7 @@ export {
|
|
|
124
194
|
buildSvgArrowHeadPoints,
|
|
125
195
|
getArcPlanPoint,
|
|
126
196
|
} from './components/editor-2d/svg-paths'
|
|
197
|
+
export { useCeilingsSetting } from './components/systems/ceiling/ceiling-system'
|
|
127
198
|
export type {
|
|
128
199
|
SelectionAffordanceHistoryApi,
|
|
129
200
|
SelectionAffordanceInteractionApi,
|
|
@@ -154,7 +225,11 @@ export {
|
|
|
154
225
|
usePlacementCoordinator,
|
|
155
226
|
} from './components/tools/item/use-placement-coordinator'
|
|
156
227
|
export { MoveRegistryNodeTool } from './components/tools/registry/move-registry-node-tool'
|
|
157
|
-
export {
|
|
228
|
+
export {
|
|
229
|
+
type RegistryToolContextValue,
|
|
230
|
+
RegistryToolProvider,
|
|
231
|
+
useRegistryToolContext,
|
|
232
|
+
} from './components/tools/registry-tool-context'
|
|
158
233
|
export { CursorSphere } from './components/tools/shared/cursor-sphere'
|
|
159
234
|
export {
|
|
160
235
|
DRAFT_LABEL_Y_OFFSET,
|
|
@@ -171,6 +246,7 @@ export {
|
|
|
171
246
|
resolveLevelConstructionPlane,
|
|
172
247
|
} from './components/tools/shared/horizontal-construction-plane'
|
|
173
248
|
export { PlacementBox } from './components/tools/shared/placement-box'
|
|
249
|
+
export { PlacementCoordinateInput } from './components/tools/shared/placement-coordinate-input'
|
|
174
250
|
export { PlacementDimensionGuides } from './components/tools/shared/placement-dimension-guides'
|
|
175
251
|
// Pointer-decided support surface (deck top vs floor underneath) — the
|
|
176
252
|
// draw tools (wall / fence) ride their grid plane and commit cap on it.
|
|
@@ -186,7 +262,6 @@ export {
|
|
|
186
262
|
type PolygonEditorProps,
|
|
187
263
|
} from './components/tools/shared/polygon-editor'
|
|
188
264
|
export {
|
|
189
|
-
formatAngleRadians,
|
|
190
265
|
getAngleArcToSegmentReference,
|
|
191
266
|
getAngleToSegmentReference,
|
|
192
267
|
getSegmentAngleReferenceAtPoint,
|
|
@@ -195,6 +270,7 @@ export {
|
|
|
195
270
|
export { preloadRegistryToolModules, ToolManager } from './components/tools/tool-manager'
|
|
196
271
|
export {
|
|
197
272
|
chainEndJoinsExistingWall,
|
|
273
|
+
createInvisibleWallOnCurrentLevel,
|
|
198
274
|
createWallOnCurrentLevel,
|
|
199
275
|
findWallSnapTarget,
|
|
200
276
|
getSegmentGridStep,
|
|
@@ -212,6 +288,26 @@ export {
|
|
|
212
288
|
type WallPlanPoint,
|
|
213
289
|
type WallSnapRadii,
|
|
214
290
|
} from './components/tools/wall/wall-drafting'
|
|
291
|
+
export {
|
|
292
|
+
lockWallPullDirection,
|
|
293
|
+
snapWallPullPoint,
|
|
294
|
+
WALL_PULL_ANGLE_STEP,
|
|
295
|
+
WALL_PULL_LOCK_TOLERANCE,
|
|
296
|
+
WALL_PULL_SNAP_LABELS,
|
|
297
|
+
WALL_PULL_SNAP_RADII,
|
|
298
|
+
type WallPullDirectionLock,
|
|
299
|
+
type WallPullGuide,
|
|
300
|
+
type WallPullGuideKind,
|
|
301
|
+
type WallPullSnapInput,
|
|
302
|
+
type WallPullSnapKind,
|
|
303
|
+
type WallPullSnapRadii,
|
|
304
|
+
type WallPullSnapResult,
|
|
305
|
+
} from './components/tools/wall/wall-pull-snap'
|
|
306
|
+
export {
|
|
307
|
+
formatWallDraftHeading,
|
|
308
|
+
resolveTypedWallEnd,
|
|
309
|
+
wallDraftHeadingDegrees,
|
|
310
|
+
} from './components/tools/wall/wall-typed-entry'
|
|
215
311
|
// `ToolbarLeft` / `ToolbarRight` alias `ViewerToolbarLeft` / `ViewerToolbarRight`
|
|
216
312
|
// (same components) under the names headless hosts compose their toolbars with.
|
|
217
313
|
export {
|
|
@@ -234,6 +330,8 @@ export {
|
|
|
234
330
|
} from './components/ui/build-panel/build-panel'
|
|
235
331
|
export { useCommandPalette } from './components/ui/command-palette'
|
|
236
332
|
export { ActionButton, ActionGroup } from './components/ui/controls/action-button'
|
|
333
|
+
// A finish row in a node panel: the paint tool's picker and its write for one paint role.
|
|
334
|
+
export { FinishSwatch } from './components/ui/controls/finish-swatch'
|
|
237
335
|
export {
|
|
238
336
|
MaterialPaintPanel,
|
|
239
337
|
type MaterialPaintPanelProps,
|
|
@@ -275,13 +373,17 @@ export { applyMultiHeightMode } from './components/ui/panels/multi-height-mode'
|
|
|
275
373
|
// a kind-owned panel and need PanelWrapper for the chrome.
|
|
276
374
|
export { PanelWrapper } from './components/ui/panels/panel-wrapper'
|
|
277
375
|
export { ParametricInspector as Inspector } from './components/ui/panels/parametric-inspector'
|
|
376
|
+
// A floor's script (a room's, a slab's): its code to read and a way to take it off.
|
|
377
|
+
export { ScriptedFinishRow } from './components/ui/panels/room-panel'
|
|
278
378
|
export { ShapeChoice } from './components/ui/panels/shape-choice'
|
|
279
379
|
export { WallPaintRegionList } from './components/ui/panels/wall-region-list'
|
|
280
380
|
export { PALETTE_COLORS } from './components/ui/primitives/color-dot'
|
|
281
381
|
export {
|
|
282
382
|
DropdownMenu,
|
|
283
383
|
DropdownMenuContent,
|
|
384
|
+
DropdownMenuGroup,
|
|
284
385
|
DropdownMenuItem,
|
|
386
|
+
DropdownMenuLabel,
|
|
285
387
|
DropdownMenuSeparator,
|
|
286
388
|
DropdownMenuSub,
|
|
287
389
|
DropdownMenuSubContent,
|
|
@@ -316,6 +418,8 @@ export {
|
|
|
316
418
|
SnapTargetBadge,
|
|
317
419
|
SnapTargetIcon,
|
|
318
420
|
} from './components/ui/snap-target-badge'
|
|
421
|
+
// A wall's project wall types: new, edit, duplicate (the wall panel's Assembly).
|
|
422
|
+
export { WallTypeMenu } from './components/ui/wall-type/wall-type-menu'
|
|
319
423
|
export {
|
|
320
424
|
FloorplanCompassButton,
|
|
321
425
|
type FloorplanCompassButtonProps,
|
|
@@ -325,7 +429,14 @@ export {
|
|
|
325
429
|
type FloorplanPreviewProps,
|
|
326
430
|
type FloorplanPreviewScene,
|
|
327
431
|
} from './components/viewer/floorplan-preview'
|
|
432
|
+
export {
|
|
433
|
+
DaylightMenu,
|
|
434
|
+
EdgesToggleItem,
|
|
435
|
+
QualityMenu,
|
|
436
|
+
} from './components/viewer/render-settings-menu'
|
|
437
|
+
export { openSkyPanel, SkyControl, useSkyPanel } from './components/viewer/sky-control'
|
|
328
438
|
export { useViewerCameraNavigationSync } from './components/viewer/use-viewer-camera-navigation-sync'
|
|
439
|
+
export { useViewerUiSounds } from './components/viewer/use-viewer-ui-sounds'
|
|
329
440
|
export {
|
|
330
441
|
ViewerControlsBar,
|
|
331
442
|
type ViewerControlsBarProps,
|
|
@@ -351,6 +462,7 @@ export {
|
|
|
351
462
|
type ViewerStageSwitcherProps,
|
|
352
463
|
} from './components/viewer/viewer-stage-switcher'
|
|
353
464
|
export {
|
|
465
|
+
DroneHud,
|
|
354
466
|
WalkthroughHud,
|
|
355
467
|
type WalkthroughHudProps,
|
|
356
468
|
type WalkthroughInteract,
|
|
@@ -366,6 +478,18 @@ export { usePlacementNotice } from './hooks/use-placement-notice'
|
|
|
366
478
|
export { useReducedMotion } from './hooks/use-reduced-motion'
|
|
367
479
|
export { useSelectedRoom } from './hooks/use-selected-room'
|
|
368
480
|
export { type Selection, useSelection } from './hooks/use-selection'
|
|
481
|
+
export { localizedLevelName } from './i18n/level-name'
|
|
482
|
+
export {
|
|
483
|
+
messageSlug,
|
|
484
|
+
nodeDescriptionDescriptor,
|
|
485
|
+
nodeLabel,
|
|
486
|
+
nodeLabelDescriptor,
|
|
487
|
+
toolHintChipLabel,
|
|
488
|
+
toolHintDescriptor,
|
|
489
|
+
toolHintKey,
|
|
490
|
+
toolHintLabel,
|
|
491
|
+
} from './i18n/node-messages'
|
|
492
|
+
export { sceneThemeName } from './i18n/scene-theme-name'
|
|
369
493
|
export {
|
|
370
494
|
clearPlacementSurface,
|
|
371
495
|
getPlacementSurface,
|
|
@@ -396,7 +520,12 @@ export {
|
|
|
396
520
|
resolveCeilingPlanPointSnap,
|
|
397
521
|
} from './lib/ceiling-plan-snap'
|
|
398
522
|
export { EDITOR_LAYER } from './lib/constants'
|
|
399
|
-
export
|
|
523
|
+
export {
|
|
524
|
+
AXIS_MOVE_DRAG_LABEL,
|
|
525
|
+
type ContextualShortcutHint,
|
|
526
|
+
PATH_POINT_DRAG_LABEL,
|
|
527
|
+
ROTATE_HANDLE_DRAG_LABEL,
|
|
528
|
+
} from './lib/contextual-help'
|
|
400
529
|
export {
|
|
401
530
|
CONTEXTUAL_HELP_NODE_EXTENSION_KEY,
|
|
402
531
|
type ContextualHelpNodeExtension,
|
|
@@ -411,11 +540,6 @@ export {
|
|
|
411
540
|
nextContinuation,
|
|
412
541
|
} from './lib/continuation'
|
|
413
542
|
export { canDirectMoveNode } from './lib/direct-manipulation'
|
|
414
|
-
export {
|
|
415
|
-
closeDoorOpenState,
|
|
416
|
-
getDisplayedDoorValue,
|
|
417
|
-
openDoorOpenState,
|
|
418
|
-
} from './lib/door-interaction'
|
|
419
543
|
export { downloadProjectFile } from './lib/download-project-file'
|
|
420
544
|
export { createEditorApi } from './lib/editor-api'
|
|
421
545
|
export {
|
|
@@ -437,12 +561,7 @@ export {
|
|
|
437
561
|
resolveElevationSnapMatch,
|
|
438
562
|
resolveStructuralElevationSnap,
|
|
439
563
|
} from './lib/elevation-guides'
|
|
440
|
-
export {
|
|
441
|
-
resolveCurrentBuildingId,
|
|
442
|
-
resolveElevatorNodeSupportY,
|
|
443
|
-
resolveElevatorSupportLevelId,
|
|
444
|
-
resolveElevatorSupportY,
|
|
445
|
-
} from './lib/elevator-support'
|
|
564
|
+
export { resolveCurrentBuildingId } from './lib/elevator-support'
|
|
446
565
|
export type { ExportTextureUtils } from './lib/export-texture-utils'
|
|
447
566
|
export { getFloatingMenuScale } from './lib/floating-menu-scale'
|
|
448
567
|
export { startOpeningDraft } from './lib/floor-opening-draft'
|
|
@@ -491,6 +610,7 @@ export {
|
|
|
491
610
|
type FloorplanSchedule,
|
|
492
611
|
type FloorplanToolContext,
|
|
493
612
|
type FloorplanToolMode,
|
|
613
|
+
type FloorplanWallDimensionFaces,
|
|
494
614
|
floorplanGeometryMetadata,
|
|
495
615
|
getFloorplanNodeExtension,
|
|
496
616
|
readFloorplanContext,
|
|
@@ -584,6 +704,11 @@ export {
|
|
|
584
704
|
editorFinishScriptHost,
|
|
585
705
|
finishScriptCode,
|
|
586
706
|
} from './lib/geometry-script/finish-scripts'
|
|
707
|
+
export {
|
|
708
|
+
beginGesture,
|
|
709
|
+
type GestureCancelReason,
|
|
710
|
+
type GestureHandle,
|
|
711
|
+
} from './lib/gesture-lifecycle'
|
|
587
712
|
export { exportSceneToGlb, type GlbExportOptions } from './lib/glb-export'
|
|
588
713
|
export {
|
|
589
714
|
type EditorGridEvent,
|
|
@@ -620,6 +745,11 @@ export {
|
|
|
620
745
|
scopeNodeId,
|
|
621
746
|
} from './lib/interaction/scope'
|
|
622
747
|
export { isEditableKeyboardTarget } from './lib/keyboard-pan'
|
|
748
|
+
export {
|
|
749
|
+
formatLayerDepth,
|
|
750
|
+
formatLayerThickness,
|
|
751
|
+
parseLayerThickness,
|
|
752
|
+
} from './lib/layer-thickness'
|
|
623
753
|
export { selectPlacedNode } from './lib/level-selection'
|
|
624
754
|
// Lot drop-in — address → parcel → streets → front edge → setbacks, on the
|
|
625
755
|
// site node, through the parcel provider the host sets.
|
|
@@ -664,10 +794,6 @@ export {
|
|
|
664
794
|
isCreatableMeasurementKind,
|
|
665
795
|
normalizeCreatableMeasurementKind,
|
|
666
796
|
} from './lib/measurement-kind'
|
|
667
|
-
export {
|
|
668
|
-
measurementPolygonLabelAnchor,
|
|
669
|
-
triangulateMeasurementPolygon,
|
|
670
|
-
} from './lib/measurement-label'
|
|
671
797
|
export {
|
|
672
798
|
type LingoUnitSpec,
|
|
673
799
|
lingoUnitSpec,
|
|
@@ -677,25 +803,8 @@ export {
|
|
|
677
803
|
parseMeasurement,
|
|
678
804
|
} from './lib/measurement-parser'
|
|
679
805
|
export {
|
|
680
|
-
buildMeasurementAngleArcPoints,
|
|
681
|
-
cubicMetersToVolumeUnit,
|
|
682
|
-
formatAreaLabel,
|
|
683
|
-
formatLinearMeasurement,
|
|
684
|
-
formatVolumeLabel,
|
|
685
|
-
getAreaUnitLabel,
|
|
686
|
-
getLinearUnitLabel,
|
|
687
|
-
getVolumeUnitLabel,
|
|
688
|
-
type LinearUnit,
|
|
689
|
-
linearControlValueToMeters,
|
|
690
|
-
linearUnitToMeters,
|
|
691
|
-
MEASUREMENT_ACTIVE_COLOR,
|
|
692
|
-
MEASUREMENT_DANGLING_COLOR,
|
|
693
806
|
MEASUREMENT_FLOORPLAN_COLOR,
|
|
694
|
-
MEASUREMENT_PERSISTENT_COLOR,
|
|
695
807
|
measurementFloorplanPresentationColor,
|
|
696
|
-
measurementPresentationColor,
|
|
697
|
-
metersToLinearUnit,
|
|
698
|
-
squareMetersToAreaUnit,
|
|
699
808
|
} from './lib/measurements'
|
|
700
809
|
export type {
|
|
701
810
|
ModelExport,
|
|
@@ -713,6 +822,7 @@ export {
|
|
|
713
822
|
} from './lib/paint-scope'
|
|
714
823
|
export {
|
|
715
824
|
getNodePanelModel,
|
|
825
|
+
type MultiPanelControl,
|
|
716
826
|
type NodePanelModel,
|
|
717
827
|
PANEL_MODEL_EXTENSION,
|
|
718
828
|
type PanelAction,
|
|
@@ -773,7 +883,13 @@ export { clearRoofDuplicateMetadata, duplicateRoofSubtree } from './lib/roof-dup
|
|
|
773
883
|
// kind-owned door / window tools in `@pascal-app/nodes` and the item
|
|
774
884
|
// placement coordinator's roof-wall strategy.
|
|
775
885
|
export { hasRoofFaceChildOverlap, type RoofWallHit, resolveRoofWallHit } from './lib/roof-wall-hit'
|
|
776
|
-
export {
|
|
886
|
+
export {
|
|
887
|
+
selectedWallDimensions,
|
|
888
|
+
separatorPushHandles,
|
|
889
|
+
WALL_PUSH_AFFORDANCE,
|
|
890
|
+
type WallPushArrowPayload,
|
|
891
|
+
} from './lib/room-handle-drag'
|
|
892
|
+
export { displayRoomName } from './lib/room-name-messages'
|
|
777
893
|
export type { RoomKey, RoomSelectionRecord } from './lib/room-selection'
|
|
778
894
|
export { popRoomSelection, selectRoom } from './lib/room-selection-commands'
|
|
779
895
|
export {
|
|
@@ -790,8 +906,13 @@ export {
|
|
|
790
906
|
remapSceneMaterialRefs,
|
|
791
907
|
sceneMaterialUsageCounts,
|
|
792
908
|
} from './lib/scene-material-refs'
|
|
909
|
+
export {
|
|
910
|
+
beginSeparatorEndDrag,
|
|
911
|
+
runSeparatorEndDrag,
|
|
912
|
+
type SeparatorEndDrag,
|
|
913
|
+
} from './lib/separator-edit'
|
|
793
914
|
export { movementSfxStepKey } from './lib/sfx/movement-tick'
|
|
794
|
-
export { emitDeleteSFX, triggerSFX } from './lib/sfx-bus'
|
|
915
|
+
export { emitDeleteSFX, initSFXBus, triggerSFX } from './lib/sfx-bus'
|
|
795
916
|
export { playSFX, type SFXName, type SFXPlaybackOptions } from './lib/sfx-player'
|
|
796
917
|
export { showSidebarPanel } from './lib/sidebar-panel'
|
|
797
918
|
export {
|
|
@@ -848,6 +969,7 @@ export {
|
|
|
848
969
|
sculptFieldForSite,
|
|
849
970
|
terrainPointInsideSite,
|
|
850
971
|
} from './lib/terrain-sculpt'
|
|
972
|
+
export { withToolShortcut } from './lib/tool-shortcuts'
|
|
851
973
|
export { isTypingTarget } from './lib/typing-target'
|
|
852
974
|
export { enterUnitFocus } from './lib/units'
|
|
853
975
|
export { exportSceneToUsdz, type UsdzExportOptions } from './lib/usdz-export'
|
|
@@ -868,10 +990,27 @@ export {
|
|
|
868
990
|
} from './lib/viewer-selection'
|
|
869
991
|
export {
|
|
870
992
|
getWallDrawVariant,
|
|
993
|
+
getWallLineKind,
|
|
994
|
+
INVISIBLE_WALL_DRAFT_THICKNESS,
|
|
995
|
+
invisibleWallDraftSnapLines,
|
|
871
996
|
selectWallDrawVariant,
|
|
997
|
+
selectWallKind,
|
|
998
|
+
useWallDraftThickness,
|
|
872
999
|
useWallDrawVariant,
|
|
1000
|
+
useWallKind,
|
|
1001
|
+
WALL_KINDS,
|
|
873
1002
|
type WallDrawVariant,
|
|
1003
|
+
type WallKind,
|
|
1004
|
+
type WallLineKind,
|
|
874
1005
|
} from './lib/wall-draw-variant'
|
|
1006
|
+
export {
|
|
1007
|
+
nearestWallParallelTarget,
|
|
1008
|
+
nudgeWallPosition,
|
|
1009
|
+
publishWallParallelGuide,
|
|
1010
|
+
WALL_PARALLEL_SNAP_RADIUS,
|
|
1011
|
+
type WallParallelTarget,
|
|
1012
|
+
wallParallelTargets,
|
|
1013
|
+
} from './lib/wall-parallel-snap'
|
|
875
1014
|
export {
|
|
876
1015
|
createWallPointerTracker,
|
|
877
1016
|
wallPointerInParent,
|
|
@@ -884,13 +1023,33 @@ export {
|
|
|
884
1023
|
startWallPolygonDraft,
|
|
885
1024
|
wallPolygonDraftWalls,
|
|
886
1025
|
} from './lib/wall-polygon-draft'
|
|
887
|
-
export { writeWindowChanges } from './lib/window-changes'
|
|
888
1026
|
export {
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
1027
|
+
endWallPullRun,
|
|
1028
|
+
releaseWallPullDrag,
|
|
1029
|
+
startWallPull,
|
|
1030
|
+
useWallPullRun,
|
|
1031
|
+
WALL_PULL_AFFORDANCE,
|
|
1032
|
+
WALL_PULL_GRIP_TITLE,
|
|
1033
|
+
type WallPullGripPayload,
|
|
1034
|
+
type WallPullRun,
|
|
1035
|
+
wallDraftIsRun,
|
|
1036
|
+
wallPullSeed,
|
|
1037
|
+
wallPullTypePatch,
|
|
1038
|
+
} from './lib/wall-pull'
|
|
1039
|
+
export {
|
|
1040
|
+
isWallRunFree,
|
|
1041
|
+
publishWallRunFeedback,
|
|
1042
|
+
snapWallRunDraftPoint,
|
|
1043
|
+
wallRunDirection,
|
|
1044
|
+
} from './lib/wall-run-snap'
|
|
1045
|
+
export {
|
|
1046
|
+
deleteProjectWallType,
|
|
1047
|
+
saveProjectWallType,
|
|
1048
|
+
useProjectWallTypes,
|
|
1049
|
+
type WallTypePlacement,
|
|
1050
|
+
wallTypePlacementOf,
|
|
1051
|
+
} from './lib/wall-type'
|
|
1052
|
+
export { writeWindowChanges } from './lib/window-changes'
|
|
894
1053
|
export {
|
|
895
1054
|
getActiveBuildingPose,
|
|
896
1055
|
projectAlignmentGuidesWorldToActiveBuildingLocal,
|
|
@@ -900,7 +1059,11 @@ export {
|
|
|
900
1059
|
snapWorldXZForActiveBuilding,
|
|
901
1060
|
} from './lib/world-grid-snap'
|
|
902
1061
|
export { subscribeCameraPose } from './store/camera-pose-store'
|
|
903
|
-
export {
|
|
1062
|
+
export {
|
|
1063
|
+
type DraftGuideLine,
|
|
1064
|
+
type DraftGuides,
|
|
1065
|
+
default as useAlignmentGuides,
|
|
1066
|
+
} from './store/use-alignment-guides'
|
|
904
1067
|
export { default as useAudio } from './store/use-audio'
|
|
905
1068
|
export { type CameraHintAction, useCameraHintFocus } from './store/use-camera-hint-focus'
|
|
906
1069
|
export { type CommandAction, useCommandRegistry } from './store/use-command-registry'
|
|
@@ -1009,6 +1172,22 @@ export {
|
|
|
1009
1172
|
default as usePlacementPreview,
|
|
1010
1173
|
type PlacementPreviewDimension,
|
|
1011
1174
|
} from './store/use-placement-preview'
|
|
1175
|
+
export {
|
|
1176
|
+
isPlacementTypingKey,
|
|
1177
|
+
isPlacementTypingStartKey,
|
|
1178
|
+
PLACEMENT_TYPING_DISTANCE_OFFSET,
|
|
1179
|
+
PLACEMENT_TYPING_LENGTH_ANGLE,
|
|
1180
|
+
type PlacementTypingField,
|
|
1181
|
+
type PlacementTypingKeyOptions,
|
|
1182
|
+
type PlacementTypingKeyOutcome,
|
|
1183
|
+
type PlacementTypingProjection,
|
|
1184
|
+
type PlacementTypingSession,
|
|
1185
|
+
type PlacementTypingState,
|
|
1186
|
+
type PlacementTypingValues,
|
|
1187
|
+
placementTypingLengthOptions,
|
|
1188
|
+
routePlacementTypingKey,
|
|
1189
|
+
usePlacementTyping,
|
|
1190
|
+
} from './store/use-placement-typing'
|
|
1012
1191
|
export { usePointAsk } from './store/use-point-ask'
|
|
1013
1192
|
export {
|
|
1014
1193
|
activateQuickMeasurementHudSource,
|
|
@@ -145,11 +145,11 @@ describe('setGroundFloor', () => {
|
|
|
145
145
|
|
|
146
146
|
const standing = (id: string) => levelGradeStanding(useScene.getState().nodes, id)
|
|
147
147
|
|
|
148
|
-
test('seats the building so the level stands
|
|
148
|
+
test('seats the building so the level stands on grade, the ones under it below it, in one undo step', () => {
|
|
149
149
|
expect(standing('level_lower')).toBe('at-grade')
|
|
150
150
|
expect(setGroundFloor('level_reception' as LevelNode['id'])).toBe(true)
|
|
151
151
|
const nodes = useScene.getState().nodes
|
|
152
|
-
expect((nodes[BUILDING as AnyNodeId] as BuildingNode).position).toEqual([0, -3.
|
|
152
|
+
expect((nodes[BUILDING as AnyNodeId] as BuildingNode).position).toEqual([0, -3.4, 0])
|
|
153
153
|
expect((nodes[BUILDING as AnyNodeId] as BuildingNode).groundLevelId).toBe('level_reception')
|
|
154
154
|
expect(standing('level_reception')).toBe('at-grade')
|
|
155
155
|
expect(standing('level_lower')).toBe('below-grade')
|
|
@@ -172,6 +172,6 @@ describe('setGroundFloor', () => {
|
|
|
172
172
|
const basement = addStoreyBelow(BUILDING)
|
|
173
173
|
expect(basement.level).toBe(-3)
|
|
174
174
|
expect(standing(basement.id)).toBe('below-grade')
|
|
175
|
-
expect(levelFloorWorldY(useScene.getState().nodes, 'level_reception')).toBeCloseTo(0
|
|
175
|
+
expect(levelFloorWorldY(useScene.getState().nodes, 'level_reception')).toBeCloseTo(0, 9)
|
|
176
176
|
})
|
|
177
177
|
})
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
import {
|
|
2
|
+
import type { MessageDescriptor } from '@pascal-app/core'
|
|
3
|
+
import {
|
|
4
|
+
type ContextualShortcutHint,
|
|
5
|
+
resolveRotateHandleHelpHints as rotateHints,
|
|
6
|
+
resolveSelectModeHelpHints as selectHints,
|
|
7
|
+
} from './contextual-help'
|
|
8
|
+
|
|
9
|
+
// Hints carry message descriptors; these tests read their English.
|
|
10
|
+
const text = (value: MessageDescriptor | string) =>
|
|
11
|
+
typeof value === 'string' ? value : value.message
|
|
12
|
+
const english = (hints: ContextualShortcutHint[]) =>
|
|
13
|
+
hints.map(({ label, subtitle, ...hint }) => ({
|
|
14
|
+
...hint,
|
|
15
|
+
label: text(label),
|
|
16
|
+
...(subtitle ? { subtitle: text(subtitle) } : {}),
|
|
17
|
+
}))
|
|
18
|
+
const resolveRotateHandleHelpHints = (...args: Parameters<typeof rotateHints>) =>
|
|
19
|
+
english(rotateHints(...args))
|
|
20
|
+
const resolveSelectModeHelpHints = (...args: Parameters<typeof selectHints>) =>
|
|
21
|
+
english(selectHints(...args))
|
|
3
22
|
|
|
4
23
|
test('rotation advertises Alt as the temporary free-rotation override', () => {
|
|
5
24
|
expect(resolveRotateHandleHelpHints(false)).toEqual([
|