@pascal-app/core 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +247 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.js +429 -0
- package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/add-stair-cases.js +176 -0
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/build-room-cases.js +1005 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts +67 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/cases.js +868 -0
- package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/corner-window-cases.js +155 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +14 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +709 -0
- package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts +7 -0
- package/dist/agent-operations/__fixtures__/find-by-type-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/find-by-type-cases.js +21 -0
- package/dist/agent-operations/__fixtures__/finish-cases.d.ts +7 -0
- package/dist/agent-operations/__fixtures__/finish-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/finish-cases.js +758 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.js +370 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.js +321 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +2237 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/native-materials.js +82 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.js +639 -0
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts +24 -0
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/notation-cases.js +356 -0
- package/dist/agent-operations/__fixtures__/place-items-cases.d.ts +17 -0
- package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/place-items-cases.js +584 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +19726 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.js +106 -0
- package/dist/agent-operations/__fixtures__/roof-cases.d.ts +9 -0
- package/dist/agent-operations/__fixtures__/roof-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/roof-cases.js +382 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.js +473 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +417 -0
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts +5 -0
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +149 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +290 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/site-cases.js +780 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +7 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/structure-cases.js +1215 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +313 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.js +350 -0
- package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/view-assets-cases.js +155 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts +50 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.js +425 -0
- package/dist/agent-operations/achieved.d.ts +21 -0
- package/dist/agent-operations/achieved.d.ts.map +1 -0
- package/dist/agent-operations/achieved.js +48 -0
- package/dist/agent-operations/add-column.d.ts +23 -0
- package/dist/agent-operations/add-column.d.ts.map +1 -0
- package/dist/agent-operations/add-column.js +99 -0
- package/dist/agent-operations/add-fence.d.ts +18 -0
- package/dist/agent-operations/add-fence.d.ts.map +1 -0
- package/dist/agent-operations/add-fence.js +48 -0
- package/dist/agent-operations/add-level.d.ts +17 -0
- package/dist/agent-operations/add-level.d.ts.map +1 -0
- package/dist/agent-operations/add-level.js +130 -0
- package/dist/agent-operations/add-object.d.ts +143 -0
- package/dist/agent-operations/add-object.d.ts.map +1 -0
- package/dist/agent-operations/add-object.js +522 -0
- package/dist/agent-operations/add-wall.d.ts +13 -0
- package/dist/agent-operations/add-wall.d.ts.map +1 -0
- package/dist/agent-operations/add-wall.js +73 -0
- package/dist/agent-operations/apply-changes.d.ts +22 -0
- package/dist/agent-operations/apply-changes.d.ts.map +1 -0
- package/dist/agent-operations/apply-changes.js +125 -0
- package/dist/agent-operations/apply-outcome.d.ts +21 -0
- package/dist/agent-operations/apply-outcome.d.ts.map +1 -0
- package/dist/agent-operations/apply-outcome.js +33 -0
- package/dist/agent-operations/asset-views.d.ts +75 -0
- package/dist/agent-operations/asset-views.d.ts.map +1 -0
- package/dist/agent-operations/asset-views.js +234 -0
- package/dist/agent-operations/author-scene.d.ts +157 -0
- package/dist/agent-operations/author-scene.d.ts.map +1 -0
- package/dist/agent-operations/author-scene.js +1076 -0
- package/dist/agent-operations/authored-scene-merge.d.ts +4 -0
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -0
- package/dist/agent-operations/authored-scene-merge.js +96 -0
- package/dist/agent-operations/batch.d.ts +22 -0
- package/dist/agent-operations/batch.d.ts.map +1 -0
- package/dist/agent-operations/batch.js +104 -0
- package/dist/agent-operations/ceiling-object-observations.d.ts +31 -0
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -0
- package/dist/agent-operations/ceiling-object-observations.js +111 -0
- package/dist/agent-operations/collections.d.ts +28 -0
- package/dist/agent-operations/collections.d.ts.map +1 -0
- package/dist/agent-operations/collections.js +130 -0
- package/dist/agent-operations/corner-window.d.ts +19 -0
- package/dist/agent-operations/corner-window.d.ts.map +1 -0
- package/dist/agent-operations/corner-window.js +84 -0
- package/dist/agent-operations/create-roof.d.ts +32 -0
- package/dist/agent-operations/create-roof.d.ts.map +1 -0
- package/dist/agent-operations/create-roof.js +304 -0
- package/dist/agent-operations/create-room.d.ts +38 -0
- package/dist/agent-operations/create-room.d.ts.map +1 -0
- package/dist/agent-operations/create-room.js +245 -0
- package/dist/agent-operations/create-stair.d.ts +11 -0
- package/dist/agent-operations/create-stair.d.ts.map +1 -0
- package/dist/agent-operations/create-stair.js +330 -0
- package/dist/agent-operations/delete-node.d.ts +6 -0
- package/dist/agent-operations/delete-node.d.ts.map +1 -0
- package/dist/agent-operations/delete-node.js +9 -0
- package/dist/agent-operations/design-brief.d.ts +38 -0
- package/dist/agent-operations/design-brief.d.ts.map +1 -0
- package/dist/agent-operations/design-brief.js +300 -0
- package/dist/agent-operations/designs.d.ts +24 -0
- package/dist/agent-operations/designs.d.ts.map +1 -0
- package/dist/agent-operations/designs.js +48 -0
- package/dist/agent-operations/door-clearance.d.ts +150 -0
- package/dist/agent-operations/door-clearance.d.ts.map +1 -0
- package/dist/agent-operations/door-clearance.js +391 -0
- package/dist/agent-operations/duplicate-level.d.ts +12 -0
- package/dist/agent-operations/duplicate-level.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-level.js +55 -0
- package/dist/agent-operations/find-by-type.d.ts +18 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -0
- package/dist/agent-operations/find-by-type.js +317 -0
- package/dist/agent-operations/furnish-room.d.ts +39 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -0
- package/dist/agent-operations/furnish-room.js +306 -0
- package/dist/agent-operations/furniture-kind.d.ts +22 -0
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -0
- package/dist/agent-operations/furniture-kind.js +69 -0
- package/dist/agent-operations/get-node.d.ts +12 -0
- package/dist/agent-operations/get-node.d.ts.map +1 -0
- package/dist/agent-operations/get-node.js +105 -0
- package/dist/agent-operations/hosted-services.d.ts +14 -0
- package/dist/agent-operations/hosted-services.d.ts.map +1 -0
- package/dist/agent-operations/hosted-services.js +22 -0
- package/dist/agent-operations/index.d.ts +489 -0
- package/dist/agent-operations/index.d.ts.map +1 -0
- package/dist/agent-operations/index.js +141 -0
- package/dist/agent-operations/item-space.d.ts +22 -0
- package/dist/agent-operations/item-space.d.ts.map +1 -0
- package/dist/agent-operations/item-space.js +69 -0
- package/dist/agent-operations/layout-clearance.d.ts +157 -0
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -0
- package/dist/agent-operations/layout-clearance.js +500 -0
- package/dist/agent-operations/level-height-fill.d.ts +12 -0
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -0
- package/dist/agent-operations/level-height-fill.js +59 -0
- package/dist/agent-operations/level-reads.d.ts +37 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -0
- package/dist/agent-operations/level-reads.js +168 -0
- package/dist/agent-operations/level-target.d.ts +11 -0
- package/dist/agent-operations/level-target.d.ts.map +1 -0
- package/dist/agent-operations/level-target.js +29 -0
- package/dist/agent-operations/list-levels.d.ts +4 -0
- package/dist/agent-operations/list-levels.d.ts.map +1 -0
- package/dist/agent-operations/list-levels.js +54 -0
- package/dist/agent-operations/material-preset.d.ts +11 -0
- package/dist/agent-operations/material-preset.d.ts.map +1 -0
- package/dist/agent-operations/material-preset.js +68 -0
- package/dist/agent-operations/material-refs.d.ts +30 -0
- package/dist/agent-operations/material-refs.d.ts.map +1 -0
- package/dist/agent-operations/material-refs.js +105 -0
- package/dist/agent-operations/merge-windows.d.ts +6 -0
- package/dist/agent-operations/merge-windows.d.ts.map +1 -0
- package/dist/agent-operations/merge-windows.js +27 -0
- package/dist/agent-operations/move-roofs.d.ts +9 -0
- package/dist/agent-operations/move-roofs.d.ts.map +1 -0
- package/dist/agent-operations/move-roofs.js +29 -0
- package/dist/agent-operations/node-patch.d.ts +3 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -0
- package/dist/agent-operations/node-patch.js +114 -0
- package/dist/agent-operations/paint.d.ts +22 -0
- package/dist/agent-operations/paint.d.ts.map +1 -0
- package/dist/agent-operations/paint.js +329 -0
- package/dist/agent-operations/photo-elevation.d.ts +155 -0
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -0
- package/dist/agent-operations/photo-elevation.js +761 -0
- package/dist/agent-operations/place-in-room.d.ts +29 -0
- package/dist/agent-operations/place-in-room.d.ts.map +1 -0
- package/dist/agent-operations/place-in-room.js +403 -0
- package/dist/agent-operations/place-items.d.ts +20 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -0
- package/dist/agent-operations/place-items.js +239 -0
- package/dist/agent-operations/plan-geometry.d.ts +24 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -0
- package/dist/agent-operations/plan-geometry.js +97 -0
- package/dist/agent-operations/point-context.d.ts +139 -0
- package/dist/agent-operations/point-context.d.ts.map +1 -0
- package/dist/agent-operations/point-context.js +1 -0
- package/dist/agent-operations/project-files.d.ts +9 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -0
- package/dist/agent-operations/project-files.js +25 -0
- package/dist/agent-operations/record-made.d.ts +18 -0
- package/dist/agent-operations/record-made.d.ts.map +1 -0
- package/dist/agent-operations/record-made.js +28 -0
- package/dist/agent-operations/roof-footprint.d.ts +24 -0
- package/dist/agent-operations/roof-footprint.d.ts.map +1 -0
- package/dist/agent-operations/roof-footprint.js +242 -0
- package/dist/agent-operations/roof-writes.d.ts +20 -0
- package/dist/agent-operations/roof-writes.d.ts.map +1 -0
- package/dist/agent-operations/roof-writes.js +165 -0
- package/dist/agent-operations/room-findings.d.ts +54 -0
- package/dist/agent-operations/room-findings.d.ts.map +1 -0
- package/dist/agent-operations/room-findings.js +143 -0
- package/dist/agent-operations/room-floor-script.d.ts +23 -0
- package/dist/agent-operations/room-floor-script.d.ts.map +1 -0
- package/dist/agent-operations/room-floor-script.js +54 -0
- package/dist/agent-operations/room-structure.d.ts +87 -0
- package/dist/agent-operations/room-structure.d.ts.map +1 -0
- package/dist/agent-operations/room-structure.js +144 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +94 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -0
- package/dist/agent-operations/scene-checkpoint.js +176 -0
- package/dist/agent-operations/scene-materials.d.ts +15 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -0
- package/dist/agent-operations/scene-materials.js +62 -0
- package/dist/agent-operations/scene-measure.d.ts +73 -0
- package/dist/agent-operations/scene-measure.d.ts.map +1 -0
- package/dist/agent-operations/scene-measure.js +73 -0
- package/dist/agent-operations/scene-queries.d.ts +4941 -0
- package/dist/agent-operations/scene-queries.d.ts.map +1 -0
- package/dist/agent-operations/scene-queries.js +74 -0
- package/dist/agent-operations/scene-review.d.ts +52 -0
- package/dist/agent-operations/scene-review.d.ts.map +1 -0
- package/dist/agent-operations/scene-review.js +106 -0
- package/dist/agent-operations/scene-view.d.ts +165 -0
- package/dist/agent-operations/scene-view.d.ts.map +1 -0
- package/dist/agent-operations/scene-view.js +916 -0
- package/dist/agent-operations/search-assets.d.ts +14 -0
- package/dist/agent-operations/search-assets.d.ts.map +1 -0
- package/dist/agent-operations/search-assets.js +43 -0
- package/dist/agent-operations/search-materials.d.ts +18 -0
- package/dist/agent-operations/search-materials.d.ts.map +1 -0
- package/dist/agent-operations/search-materials.js +165 -0
- package/dist/agent-operations/set-checkpoint.d.ts +9 -0
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -0
- package/dist/agent-operations/set-checkpoint.js +31 -0
- package/dist/agent-operations/set-ground-level.d.ts +12 -0
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -0
- package/dist/agent-operations/set-ground-level.js +61 -0
- package/dist/agent-operations/site.d.ts +21 -0
- package/dist/agent-operations/site.d.ts.map +1 -0
- package/dist/agent-operations/site.js +123 -0
- package/dist/agent-operations/stairs.d.ts +5 -0
- package/dist/agent-operations/stairs.d.ts.map +1 -0
- package/dist/agent-operations/stairs.js +70 -0
- package/dist/agent-operations/types.d.ts +118 -0
- package/dist/agent-operations/types.d.ts.map +1 -0
- package/dist/agent-operations/types.js +1 -0
- package/dist/agent-operations/verify-scene.d.ts +84 -0
- package/dist/agent-operations/verify-scene.d.ts.map +1 -0
- package/dist/agent-operations/verify-scene.js +548 -0
- package/dist/agent-operations/wall-face-script.d.ts +28 -0
- package/dist/agent-operations/wall-face-script.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-script.js +62 -0
- package/dist/agent-operations/wall-object-observations.d.ts +41 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -0
- package/dist/agent-operations/wall-object-observations.js +249 -0
- package/dist/agent-operations/wall-opening.d.ts +65 -0
- package/dist/agent-operations/wall-opening.d.ts.map +1 -0
- package/dist/agent-operations/wall-opening.js +55 -0
- package/dist/agent-operations/wall-skirting.d.ts +24 -0
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -0
- package/dist/agent-operations/wall-skirting.js +85 -0
- package/dist/agent-tools/achieved.d.ts +9 -0
- package/dist/agent-tools/achieved.d.ts.map +1 -0
- package/dist/agent-tools/achieved.js +8 -0
- package/dist/agent-tools/add-object.d.ts +47 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -0
- package/dist/agent-tools/add-object.js +92 -0
- package/dist/agent-tools/assets.d.ts +21 -0
- package/dist/agent-tools/assets.d.ts.map +1 -0
- package/dist/agent-tools/assets.js +30 -0
- package/dist/agent-tools/author-scene.d.ts +651 -0
- package/dist/agent-tools/author-scene.d.ts.map +1 -0
- package/dist/agent-tools/author-scene.js +252 -0
- package/dist/agent-tools/batch.d.ts +25 -0
- package/dist/agent-tools/batch.d.ts.map +1 -0
- package/dist/agent-tools/batch.js +61 -0
- package/dist/agent-tools/checkpoints.d.ts +13 -0
- package/dist/agent-tools/checkpoints.d.ts.map +1 -0
- package/dist/agent-tools/checkpoints.js +16 -0
- package/dist/agent-tools/clear-scene.d.ts +10 -0
- package/dist/agent-tools/clear-scene.d.ts.map +1 -0
- package/dist/agent-tools/clear-scene.js +9 -0
- package/dist/agent-tools/collections.d.ts +35 -0
- package/dist/agent-tools/collections.d.ts.map +1 -0
- package/dist/agent-tools/collections.js +31 -0
- package/dist/agent-tools/columns.d.ts +44 -0
- package/dist/agent-tools/columns.d.ts.map +1 -0
- package/dist/agent-tools/columns.js +59 -0
- package/dist/agent-tools/contract.d.ts +68 -0
- package/dist/agent-tools/contract.d.ts.map +1 -0
- package/dist/agent-tools/contract.js +1 -0
- package/dist/agent-tools/corner-window.d.ts +46 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -0
- package/dist/agent-tools/corner-window.js +47 -0
- package/dist/agent-tools/create-room.d.ts +64 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -0
- package/dist/agent-tools/create-room.js +97 -0
- package/dist/agent-tools/design-brief.d.ts +408 -0
- package/dist/agent-tools/design-brief.d.ts.map +1 -0
- package/dist/agent-tools/design-brief.js +149 -0
- package/dist/agent-tools/designs.d.ts +34 -0
- package/dist/agent-tools/designs.d.ts.map +1 -0
- package/dist/agent-tools/designs.js +50 -0
- package/dist/agent-tools/fences.d.ts +28 -0
- package/dist/agent-tools/fences.d.ts.map +1 -0
- package/dist/agent-tools/fences.js +31 -0
- package/dist/agent-tools/find-by-type.d.ts +18 -0
- package/dist/agent-tools/find-by-type.d.ts.map +1 -0
- package/dist/agent-tools/find-by-type.js +35 -0
- package/dist/agent-tools/furnish-room.d.ts +28 -0
- package/dist/agent-tools/furnish-room.d.ts.map +1 -0
- package/dist/agent-tools/furnish-room.js +37 -0
- package/dist/agent-tools/hosted-services.d.ts +438 -0
- package/dist/agent-tools/hosted-services.d.ts.map +1 -0
- package/dist/agent-tools/hosted-services.js +181 -0
- package/dist/agent-tools/index.d.ts +1543 -0
- package/dist/agent-tools/index.d.ts.map +1 -0
- package/dist/agent-tools/index.js +126 -0
- package/dist/agent-tools/levels.d.ts +80 -0
- package/dist/agent-tools/levels.d.ts.map +1 -0
- package/dist/agent-tools/levels.js +87 -0
- package/dist/agent-tools/measurement.d.ts +55 -0
- package/dist/agent-tools/measurement.d.ts.map +1 -0
- package/dist/agent-tools/measurement.js +144 -0
- package/dist/agent-tools/merge-windows.d.ts +10 -0
- package/dist/agent-tools/merge-windows.d.ts.map +1 -0
- package/dist/agent-tools/merge-windows.js +12 -0
- package/dist/agent-tools/node-id.d.ts +3 -0
- package/dist/agent-tools/node-id.d.ts.map +1 -0
- package/dist/agent-tools/node-id.js +2 -0
- package/dist/agent-tools/nodes.d.ts +17 -0
- package/dist/agent-tools/nodes.d.ts.map +1 -0
- package/dist/agent-tools/nodes.js +13 -0
- package/dist/agent-tools/notation-inventory.d.ts +16 -0
- package/dist/agent-tools/notation-inventory.d.ts.map +1 -0
- package/dist/agent-tools/notation-inventory.js +105 -0
- package/dist/agent-tools/paint.d.ts +46 -0
- package/dist/agent-tools/paint.d.ts.map +1 -0
- package/dist/agent-tools/paint.js +29 -0
- package/dist/agent-tools/photo-elevation.d.ts +32 -0
- package/dist/agent-tools/photo-elevation.d.ts.map +1 -0
- package/dist/agent-tools/photo-elevation.js +73 -0
- package/dist/agent-tools/place-in-room.d.ts +35 -0
- package/dist/agent-tools/place-in-room.d.ts.map +1 -0
- package/dist/agent-tools/place-in-room.js +61 -0
- package/dist/agent-tools/place-items.d.ts +19 -0
- package/dist/agent-tools/place-items.d.ts.map +1 -0
- package/dist/agent-tools/place-items.js +29 -0
- package/dist/agent-tools/project-files.d.ts +189 -0
- package/dist/agent-tools/project-files.d.ts.map +1 -0
- package/dist/agent-tools/project-files.js +99 -0
- package/dist/agent-tools/refusal.d.ts +20 -0
- package/dist/agent-tools/refusal.d.ts.map +1 -0
- package/dist/agent-tools/refusal.js +29 -0
- package/dist/agent-tools/retired.d.ts +21 -0
- package/dist/agent-tools/retired.d.ts.map +1 -0
- package/dist/agent-tools/retired.js +29 -0
- package/dist/agent-tools/roofs.d.ts +100 -0
- package/dist/agent-tools/roofs.d.ts.map +1 -0
- package/dist/agent-tools/roofs.js +96 -0
- package/dist/agent-tools/room-structure.d.ts +446 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -0
- package/dist/agent-tools/room-structure.js +210 -0
- package/dist/agent-tools/search-materials.d.ts +39 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -0
- package/dist/agent-tools/search-materials.js +31 -0
- package/dist/agent-tools/site.d.ts +27 -0
- package/dist/agent-tools/site.d.ts.map +1 -0
- package/dist/agent-tools/site.js +40 -0
- package/dist/agent-tools/sources.d.ts +12 -0
- package/dist/agent-tools/sources.d.ts.map +1 -0
- package/dist/agent-tools/sources.js +11 -0
- package/dist/agent-tools/stairs.d.ts +106 -0
- package/dist/agent-tools/stairs.d.ts.map +1 -0
- package/dist/agent-tools/stairs.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +13 -0
- package/dist/agent-tools/verify-scene.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene.js +21 -0
- package/dist/agent-tools/view-scene.d.ts +81 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -0
- package/dist/agent-tools/view-scene.js +123 -0
- package/dist/agent-tools/wall-openings.d.ts +167 -0
- package/dist/agent-tools/wall-openings.d.ts.map +1 -0
- package/dist/agent-tools/wall-openings.js +148 -0
- package/dist/agent-tools/walls.d.ts +21 -0
- package/dist/agent-tools/walls.d.ts.map +1 -0
- package/dist/agent-tools/walls.js +35 -0
- package/dist/agent-tools/write-target.d.ts +12 -0
- package/dist/agent-tools/write-target.d.ts.map +1 -0
- package/dist/agent-tools/write-target.js +10 -0
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +940 -0
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -0
- package/dist/building/__fixtures__/wall-opening-cases.js +367 -0
- package/dist/building/corner-window.d.ts +56 -0
- package/dist/building/corner-window.d.ts.map +1 -0
- package/dist/building/corner-window.js +179 -0
- package/dist/building/door-types.d.ts +22 -0
- package/dist/building/door-types.d.ts.map +1 -0
- package/dist/building/door-types.js +167 -0
- package/dist/building/floor-item-fit.d.ts +38 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -0
- package/dist/building/floor-item-fit.js +47 -0
- package/dist/building/ground-level.d.ts +26 -0
- package/dist/building/ground-level.d.ts.map +1 -0
- package/dist/building/ground-level.js +58 -0
- package/dist/building/index.d.ts +12 -0
- package/dist/building/index.d.ts.map +1 -0
- package/dist/building/index.js +11 -0
- package/dist/building/level-duplication.d.ts +9842 -0
- package/dist/building/level-duplication.d.ts.map +1 -0
- package/dist/building/level-duplication.js +328 -0
- package/dist/building/level-insertion.d.ts +55 -0
- package/dist/building/level-insertion.d.ts.map +1 -0
- package/dist/building/level-insertion.js +35 -0
- package/dist/building/merge-windows.d.ts +58 -0
- package/dist/building/merge-windows.d.ts.map +1 -0
- package/dist/building/merge-windows.js +189 -0
- package/dist/building/opening-style-presets.d.ts +46 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -0
- package/dist/building/opening-style-presets.js +195 -0
- package/dist/building/photo-elevation.d.ts +125 -0
- package/dist/building/photo-elevation.d.ts.map +1 -0
- package/dist/building/photo-elevation.js +404 -0
- package/dist/building/wall-gaps.d.ts +13 -0
- package/dist/building/wall-gaps.d.ts.map +1 -0
- package/dist/building/wall-gaps.js +158 -0
- package/dist/building/wall-openings.d.ts +480 -0
- package/dist/building/wall-openings.d.ts.map +1 -0
- package/dist/building/wall-openings.js +259 -0
- package/dist/building/window-types.d.ts +17 -0
- package/dist/building/window-types.d.ts.map +1 -0
- package/dist/building/window-types.js +31 -0
- package/dist/capture/schema.d.ts +22 -22
- package/dist/capture/source.d.ts.map +1 -1
- package/dist/capture/source.js +1 -1
- package/dist/commands/structure/apply-zone-transform.d.ts +23 -0
- package/dist/commands/structure/apply-zone-transform.d.ts.map +1 -0
- package/dist/commands/structure/apply-zone-transform.js +55 -0
- package/dist/commands/structure/create-mezzanine.d.ts +12 -0
- package/dist/commands/structure/create-mezzanine.d.ts.map +1 -0
- package/dist/commands/structure/create-mezzanine.js +46 -0
- package/dist/commands/structure/create-zone.d.ts +43 -0
- package/dist/commands/structure/create-zone.d.ts.map +1 -0
- package/dist/commands/structure/create-zone.js +175 -0
- package/dist/commands/structure/delete-zone.d.ts +51 -0
- package/dist/commands/structure/delete-zone.d.ts.map +1 -0
- package/dist/commands/structure/delete-zone.js +354 -0
- package/dist/commands/structure/divide-zone.d.ts +38 -0
- package/dist/commands/structure/divide-zone.d.ts.map +1 -0
- package/dist/commands/structure/divide-zone.js +186 -0
- package/dist/commands/structure/duplicate-zone.d.ts +7 -0
- package/dist/commands/structure/duplicate-zone.d.ts.map +1 -0
- package/dist/commands/structure/duplicate-zone.js +21 -0
- package/dist/commands/structure/floor-opening.d.ts +36 -0
- package/dist/commands/structure/floor-opening.d.ts.map +1 -0
- package/dist/commands/structure/floor-opening.js +124 -0
- package/dist/commands/structure/index.d.ts +22 -0
- package/dist/commands/structure/index.d.ts.map +1 -0
- package/dist/commands/structure/index.js +20 -0
- package/dist/commands/structure/lock-outside-faces.d.ts +12 -0
- package/dist/commands/structure/lock-outside-faces.d.ts.map +1 -0
- package/dist/commands/structure/lock-outside-faces.js +32 -0
- package/dist/commands/structure/merge-zones.d.ts +5 -0
- package/dist/commands/structure/merge-zones.d.ts.map +1 -0
- package/dist/commands/structure/merge-zones.js +22 -0
- package/dist/commands/structure/mezzanine-content.d.ts +16 -0
- package/dist/commands/structure/mezzanine-content.d.ts.map +1 -0
- package/dist/commands/structure/mezzanine-content.js +109 -0
- package/dist/commands/structure/plan-mezzanine-stair.d.ts +7 -0
- package/dist/commands/structure/plan-mezzanine-stair.d.ts.map +1 -0
- package/dist/commands/structure/plan-mezzanine-stair.js +127 -0
- package/dist/commands/structure/plan-wall-deletion.d.ts +9 -0
- package/dist/commands/structure/plan-wall-deletion.d.ts.map +1 -0
- package/dist/commands/structure/plan-wall-deletion.js +151 -0
- package/dist/commands/structure/rebase-floor-reference.d.ts +7 -0
- package/dist/commands/structure/rebase-floor-reference.d.ts.map +1 -0
- package/dist/commands/structure/rebase-floor-reference.js +90 -0
- package/dist/commands/structure/resize-mezzanine.d.ts +8 -0
- package/dist/commands/structure/resize-mezzanine.d.ts.map +1 -0
- package/dist/commands/structure/resize-mezzanine.js +43 -0
- package/dist/commands/structure/rotate-zone.d.ts +8 -0
- package/dist/commands/structure/rotate-zone.d.ts.map +1 -0
- package/dist/commands/structure/rotate-zone.js +28 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +62 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -0
- package/dist/commands/structure/set-floor-foundation.js +162 -0
- package/dist/commands/structure/set-room-floor-construction.d.ts +8 -0
- package/dist/commands/structure/set-room-floor-construction.d.ts.map +1 -0
- package/dist/commands/structure/set-room-floor-construction.js +72 -0
- package/dist/commands/structure/set-wall-geometry.d.ts +10 -0
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -0
- package/dist/commands/structure/set-wall-geometry.js +52 -0
- package/dist/commands/structure/set-zone-edges.d.ts +14 -0
- package/dist/commands/structure/set-zone-edges.d.ts.map +1 -0
- package/dist/commands/structure/set-zone-edges.js +143 -0
- package/dist/commands/structure/set-zone-intent.d.ts +43 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -0
- package/dist/commands/structure/set-zone-intent.js +144 -0
- package/dist/commands/structure/shared.d.ts +4941 -0
- package/dist/commands/structure/shared.d.ts.map +1 -0
- package/dist/commands/structure/shared.js +102 -0
- package/dist/commands/structure/transform-zone.d.ts +23 -0
- package/dist/commands/structure/transform-zone.d.ts.map +1 -0
- package/dist/commands/structure/transform-zone.js +472 -0
- package/dist/commands/structure/validate-mezzanine.d.ts +5 -0
- package/dist/commands/structure/validate-mezzanine.d.ts.map +1 -0
- package/dist/commands/structure/validate-mezzanine.js +46 -0
- package/dist/commands/structure/zone-crossings.d.ts +8 -0
- package/dist/commands/structure/zone-crossings.d.ts.map +1 -0
- package/dist/commands/structure/zone-crossings.js +162 -0
- package/dist/commands/structure/zone-drop.d.ts +4 -0
- package/dist/commands/structure/zone-drop.d.ts.map +1 -0
- package/dist/commands/structure/zone-drop.js +68 -0
- package/dist/commands/structure/zone-insertion.d.ts +4 -0
- package/dist/commands/structure/zone-insertion.d.ts.map +1 -0
- package/dist/commands/structure/zone-insertion.js +200 -0
- package/dist/commands/structure/zone-transform-content.d.ts +6 -0
- package/dist/commands/structure/zone-transform-content.d.ts.map +1 -0
- package/dist/commands/structure/zone-transform-content.js +117 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +5792 -0
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -0
- package/dist/commands/structure/zone-wall-merge.js +135 -0
- package/dist/contracts/reference-discovery.d.ts +18 -0
- package/dist/contracts/reference-discovery.d.ts.map +1 -0
- package/dist/contracts/reference-discovery.js +100 -0
- package/dist/contracts/reference-inventory.d.ts +44 -0
- package/dist/contracts/reference-inventory.d.ts.map +1 -0
- package/dist/contracts/reference-inventory.js +952 -0
- package/dist/events/bus.d.ts +90 -10
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/capture-sessions.d.ts +5 -0
- package/dist/events/capture-sessions.d.ts.map +1 -0
- package/dist/events/capture-sessions.js +31 -0
- package/dist/hooks/scene-registry/item-clip-registry.d.ts +6 -3
- package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -1
- package/dist/hooks/scene-registry/item-clip-registry.js +2 -1
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +15 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +4 -4
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +56 -71
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3948 -2034
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +86 -83
- package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.d.ts +1 -0
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +21 -5
- package/dist/hooks/spatial-grid/use-spatial-query.d.ts +3 -3
- package/dist/hooks/spatial-grid/wall-spatial-grid.d.ts.map +1 -1
- package/dist/index.d.ts +109 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +103 -12
- package/dist/lib/__bench__/near-linear-walls.d.ts +2 -0
- package/dist/lib/__bench__/near-linear-walls.d.ts.map +1 -0
- package/dist/lib/__bench__/near-linear-walls.js +24 -0
- package/dist/lib/__bench__/structure-preview.bench.d.ts +2 -0
- package/dist/lib/__bench__/structure-preview.bench.d.ts.map +1 -0
- package/dist/lib/__bench__/structure-preview.bench.js +72 -0
- package/dist/lib/__fixtures__/mezzanine.d.ts +15636 -0
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -0
- package/dist/lib/__fixtures__/mezzanine.js +43 -0
- package/dist/lib/absorb-wall-separators.d.ts +4912 -0
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -0
- package/dist/lib/absorb-wall-separators.js +65 -0
- package/dist/lib/angle-accumulator.d.ts +3 -0
- package/dist/lib/angle-accumulator.d.ts.map +1 -0
- package/dist/lib/angle-accumulator.js +13 -0
- package/dist/lib/artifact-store.d.ts +31 -0
- package/dist/lib/artifact-store.d.ts.map +1 -0
- package/dist/lib/artifact-store.js +42 -0
- package/dist/lib/assembly-stack.d.ts +54 -0
- package/dist/lib/assembly-stack.d.ts.map +1 -0
- package/dist/lib/assembly-stack.js +52 -0
- package/dist/lib/asset-storage.d.ts.map +1 -1
- package/dist/lib/asset-storage.js +3 -0
- package/dist/lib/below-grade-footprints.d.ts +65 -0
- package/dist/lib/below-grade-footprints.d.ts.map +1 -0
- package/dist/lib/below-grade-footprints.js +181 -0
- package/dist/lib/building-footprint.d.ts +33 -0
- package/dist/lib/building-footprint.d.ts.map +1 -0
- package/dist/lib/building-footprint.js +89 -0
- package/dist/lib/canonical-opening-ring.d.ts +3 -0
- package/dist/lib/canonical-opening-ring.d.ts.map +1 -0
- package/dist/lib/canonical-opening-ring.js +14 -0
- package/dist/lib/ceiling-children.d.ts +8 -0
- package/dist/lib/ceiling-children.d.ts.map +1 -0
- package/dist/lib/ceiling-children.js +36 -0
- package/dist/lib/ceiling-surface.d.ts +40 -0
- package/dist/lib/ceiling-surface.d.ts.map +1 -0
- package/dist/lib/ceiling-surface.js +65 -0
- package/dist/lib/corner-pair.d.ts +1129 -0
- package/dist/lib/corner-pair.d.ts.map +1 -0
- package/dist/lib/corner-pair.js +130 -0
- package/dist/lib/corner-snap.d.ts +54 -0
- package/dist/lib/corner-snap.d.ts.map +1 -0
- package/dist/lib/corner-snap.js +125 -0
- package/dist/lib/critically-damped.d.ts +11 -0
- package/dist/lib/critically-damped.d.ts.map +1 -0
- package/dist/lib/critically-damped.js +14 -0
- package/dist/lib/cutter-host.d.ts +5 -0
- package/dist/lib/cutter-host.d.ts.map +1 -0
- package/dist/lib/cutter-host.js +30 -0
- package/dist/lib/deepest-drawn.d.ts +18 -0
- package/dist/lib/deepest-drawn.d.ts.map +1 -0
- package/dist/lib/deepest-drawn.js +65 -0
- package/dist/lib/door-operation.d.ts +1 -1
- package/dist/lib/exterior-wall-loops.d.ts +17 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -0
- package/dist/lib/exterior-wall-loops.js +334 -0
- package/dist/lib/finish-script.d.ts +61 -0
- package/dist/lib/finish-script.d.ts.map +1 -0
- package/dist/lib/finish-script.js +86 -0
- package/dist/lib/floor-construction-lift.d.ts +4 -0
- package/dist/lib/floor-construction-lift.d.ts.map +1 -0
- package/dist/lib/floor-construction-lift.js +54 -0
- package/dist/lib/floor-footprint-key.d.ts +3 -0
- package/dist/lib/floor-footprint-key.d.ts.map +1 -0
- package/dist/lib/floor-footprint-key.js +9 -0
- package/dist/lib/floor-footprint-name.d.ts +11 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -0
- package/dist/lib/floor-footprint-name.js +52 -0
- package/dist/lib/floor-foundation-datum.d.ts +31 -0
- package/dist/lib/floor-foundation-datum.d.ts.map +1 -0
- package/dist/lib/floor-foundation-datum.js +226 -0
- package/dist/lib/floor-foundation-stack.d.ts +16 -0
- package/dist/lib/floor-foundation-stack.d.ts.map +1 -0
- package/dist/lib/floor-foundation-stack.js +214 -0
- package/dist/lib/floor-intent-changes.d.ts +10 -0
- package/dist/lib/floor-intent-changes.d.ts.map +1 -0
- package/dist/lib/floor-intent-changes.js +461 -0
- package/dist/lib/floor-opening-footprints.d.ts +24 -0
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -0
- package/dist/lib/floor-opening-footprints.js +127 -0
- package/dist/lib/floor-opening-intent.d.ts +16 -0
- package/dist/lib/floor-opening-intent.d.ts.map +1 -0
- package/dist/lib/floor-opening-intent.js +82 -0
- package/dist/lib/floor-plate-id.d.ts +5 -0
- package/dist/lib/floor-plate-id.d.ts.map +1 -0
- package/dist/lib/floor-plate-id.js +20 -0
- package/dist/lib/floor-plate-paint.d.ts +10 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -0
- package/dist/lib/floor-plate-paint.js +31 -0
- package/dist/lib/floor-plates.d.ts +211 -0
- package/dist/lib/floor-plates.d.ts.map +1 -0
- package/dist/lib/floor-plates.js +729 -0
- package/dist/lib/floor-room-faces.d.ts +5 -0
- package/dist/lib/floor-room-faces.d.ts.map +1 -0
- package/dist/lib/floor-room-faces.js +29 -0
- package/dist/lib/floor-script.d.ts +24 -0
- package/dist/lib/floor-script.d.ts.map +1 -0
- package/dist/lib/floor-script.js +51 -0
- package/dist/lib/floor-step-finish.d.ts +49 -0
- package/dist/lib/floor-step-finish.d.ts.map +1 -0
- package/dist/lib/floor-step-finish.js +128 -0
- package/dist/lib/foundation-construction.d.ts +73 -0
- package/dist/lib/foundation-construction.d.ts.map +1 -0
- package/dist/lib/foundation-construction.js +242 -0
- package/dist/lib/foundation-standard.d.ts +30 -0
- package/dist/lib/foundation-standard.d.ts.map +1 -0
- package/dist/lib/foundation-standard.js +30 -0
- package/dist/lib/foundation-wall.d.ts +36 -0
- package/dist/lib/foundation-wall.d.ts.map +1 -0
- package/dist/lib/foundation-wall.js +66 -0
- package/dist/lib/generic-foundation.d.ts +40 -0
- package/dist/lib/generic-foundation.d.ts.map +1 -0
- package/dist/lib/generic-foundation.js +200 -0
- package/dist/lib/geometry-script-node.d.ts +111 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -0
- package/dist/lib/geometry-script-node.js +173 -0
- package/dist/lib/geometry-surfaces.d.ts +61 -0
- package/dist/lib/geometry-surfaces.d.ts.map +1 -0
- package/dist/lib/geometry-surfaces.js +156 -0
- package/dist/lib/grade-standing.d.ts +38 -0
- package/dist/lib/grade-standing.d.ts.map +1 -0
- package/dist/lib/grade-standing.js +137 -0
- package/dist/lib/ground-level.d.ts +20 -0
- package/dist/lib/ground-level.d.ts.map +1 -0
- package/dist/lib/ground-level.js +49 -0
- package/dist/lib/ground-over-part.d.ts +13 -0
- package/dist/lib/ground-over-part.d.ts.map +1 -0
- package/dist/lib/ground-over-part.js +94 -0
- package/dist/lib/ground-seat.d.ts +47 -0
- package/dist/lib/ground-seat.d.ts.map +1 -0
- package/dist/lib/ground-seat.js +61 -0
- package/dist/lib/ground-window.d.ts +39 -0
- package/dist/lib/ground-window.d.ts.map +1 -0
- package/dist/lib/ground-window.js +147 -0
- package/dist/lib/item-slab-support.d.ts +14 -0
- package/dist/lib/item-slab-support.d.ts.map +1 -0
- package/dist/lib/item-slab-support.js +40 -0
- package/dist/lib/level-footprints.d.ts +23 -0
- package/dist/lib/level-footprints.d.ts.map +1 -0
- package/dist/lib/level-footprints.js +398 -0
- package/dist/lib/level-name.d.ts +7 -0
- package/dist/lib/level-name.d.ts.map +1 -1
- package/dist/lib/level-name.js +11 -3
- package/dist/lib/new-zone.d.ts +10 -0
- package/dist/lib/new-zone.d.ts.map +1 -0
- package/dist/lib/new-zone.js +10 -0
- package/dist/lib/node-ancestry.d.ts +30 -0
- package/dist/lib/node-ancestry.d.ts.map +1 -0
- package/dist/lib/node-ancestry.js +76 -0
- package/dist/lib/object-cuts.d.ts +11 -0
- package/dist/lib/object-cuts.d.ts.map +1 -0
- package/dist/lib/object-cuts.js +63 -0
- package/dist/lib/opening-floor-datum.d.ts +24 -0
- package/dist/lib/opening-floor-datum.d.ts.map +1 -0
- package/dist/lib/opening-floor-datum.js +144 -0
- package/dist/lib/own-floor-intent.d.ts +15 -0
- package/dist/lib/own-floor-intent.d.ts.map +1 -0
- package/dist/lib/own-floor-intent.js +201 -0
- package/dist/lib/plate-reference.d.ts +3 -0
- package/dist/lib/plate-reference.d.ts.map +1 -0
- package/dist/lib/plate-reference.js +91 -0
- package/dist/lib/plate-surface.d.ts +120 -0
- package/dist/lib/plate-surface.d.ts.map +1 -0
- package/dist/lib/plate-surface.js +727 -0
- package/dist/lib/point-ask.d.ts +9 -0
- package/dist/lib/point-ask.d.ts.map +1 -0
- package/dist/lib/point-ask.js +36 -0
- package/dist/lib/polygon-boolean.d.ts +17 -0
- package/dist/lib/polygon-boolean.d.ts.map +1 -0
- package/dist/lib/polygon-boolean.js +195 -0
- package/dist/lib/polygon-label.d.ts +7 -0
- package/dist/lib/polygon-label.d.ts.map +1 -0
- package/dist/lib/polygon-label.js +94 -0
- package/dist/lib/room-drawn-floor.d.ts +29 -0
- package/dist/lib/room-drawn-floor.d.ts.map +1 -0
- package/dist/lib/room-drawn-floor.js +88 -0
- package/dist/lib/room-floor-choices.d.ts +11 -0
- package/dist/lib/room-floor-choices.d.ts.map +1 -0
- package/dist/lib/room-floor-choices.js +60 -0
- package/dist/lib/room-floor-feasibility.d.ts +25 -0
- package/dist/lib/room-floor-feasibility.d.ts.map +1 -0
- package/dist/lib/room-floor-feasibility.js +293 -0
- package/dist/lib/room-floor-plate.d.ts +3 -0
- package/dist/lib/room-floor-plate.d.ts.map +1 -0
- package/dist/lib/room-floor-plate.js +4 -0
- package/dist/lib/room-graph.d.ts +79 -0
- package/dist/lib/room-graph.d.ts.map +1 -0
- package/dist/lib/room-graph.js +1267 -0
- package/dist/lib/room-name.d.ts +12 -0
- package/dist/lib/room-name.d.ts.map +1 -0
- package/dist/lib/room-name.js +24 -0
- package/dist/lib/room-topology-index.d.ts +53 -5
- package/dist/lib/room-topology-index.d.ts.map +1 -1
- package/dist/lib/room-topology-index.js +176 -30
- package/dist/lib/room-vertical-placement.d.ts +12 -0
- package/dist/lib/room-vertical-placement.d.ts.map +1 -0
- package/dist/lib/room-vertical-placement.js +28 -0
- package/dist/lib/room-zone-adoption.d.ts +74 -0
- package/dist/lib/room-zone-adoption.d.ts.map +1 -0
- package/dist/lib/room-zone-adoption.js +150 -0
- package/dist/lib/script-inputs-key.d.ts +3 -0
- package/dist/lib/script-inputs-key.d.ts.map +1 -0
- package/dist/lib/script-inputs-key.js +13 -0
- package/dist/lib/setback-envelope.d.ts +163 -0
- package/dist/lib/setback-envelope.d.ts.map +1 -0
- package/dist/lib/setback-envelope.js +822 -0
- package/dist/lib/site-flatwork.d.ts +11 -0
- package/dist/lib/site-flatwork.d.ts.map +1 -0
- package/dist/lib/site-flatwork.js +11 -0
- package/dist/lib/site-ground-height.d.ts +13 -0
- package/dist/lib/site-ground-height.d.ts.map +1 -0
- package/dist/lib/site-ground-height.js +16 -0
- package/dist/lib/site-placement.d.ts +362 -0
- package/dist/lib/site-placement.d.ts.map +1 -0
- package/dist/lib/site-placement.js +942 -0
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +33 -12
- package/dist/lib/slots.d.ts +20 -0
- package/dist/lib/slots.d.ts.map +1 -1
- package/dist/lib/slots.js +44 -0
- package/dist/lib/snap-ease.d.ts +20 -0
- package/dist/lib/snap-ease.d.ts.map +1 -0
- package/dist/lib/snap-ease.js +50 -0
- package/dist/lib/space-detection.d.ts +14 -94
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +244 -1616
- package/dist/lib/structure-commit.d.ts +38 -0
- package/dist/lib/structure-commit.d.ts.map +1 -0
- package/dist/lib/structure-commit.js +52 -0
- package/dist/lib/structure-kernel.d.ts +66 -0
- package/dist/lib/structure-kernel.d.ts.map +1 -0
- package/dist/lib/structure-kernel.js +737 -0
- package/dist/lib/structure-reconcile.d.ts +15 -0
- package/dist/lib/structure-reconcile.d.ts.map +1 -0
- package/dist/lib/structure-reconcile.js +218 -0
- package/dist/lib/surface-support-references.d.ts +4 -0
- package/dist/lib/surface-support-references.d.ts.map +1 -0
- package/dist/lib/surface-support-references.js +19 -0
- package/dist/lib/terrain-contours.d.ts +29 -0
- package/dist/lib/terrain-contours.d.ts.map +1 -0
- package/dist/lib/terrain-contours.js +199 -0
- package/dist/lib/terrain-source-persisted.d.ts +42 -0
- package/dist/lib/terrain-source-persisted.d.ts.map +1 -0
- package/dist/lib/terrain-source-persisted.js +68 -0
- package/dist/lib/terrain-source.d.ts +2 -40
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -68
- package/dist/lib/terrain-support-query.d.ts +93 -0
- package/dist/lib/terrain-support-query.d.ts.map +1 -0
- package/dist/lib/terrain-support-query.js +187 -0
- package/dist/lib/terrain-support.d.ts +1 -77
- package/dist/lib/terrain-support.d.ts.map +1 -1
- package/dist/lib/terrain-support.js +3 -181
- package/dist/lib/unit-containment.js +2 -2
- package/dist/lib/unit-report.d.ts.map +1 -1
- package/dist/lib/unit-report.js +5 -4
- package/dist/lib/wall-face-script.d.ts +66 -0
- package/dist/lib/wall-face-script.d.ts.map +1 -0
- package/dist/lib/wall-face-script.js +235 -0
- package/dist/lib/zone-colors.d.ts +11 -0
- package/dist/lib/zone-colors.d.ts.map +1 -0
- package/dist/lib/zone-colors.js +32 -0
- package/dist/lib/zone-quantities.d.ts.map +1 -1
- package/dist/lib/zone-quantities.js +117 -228
- package/dist/material-kinds.d.ts +9 -0
- package/dist/material-kinds.d.ts.map +1 -0
- package/dist/material-kinds.js +30 -0
- package/dist/material-library.d.ts +13 -5
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +622 -27
- package/dist/node-slots/block.d.ts +7 -0
- package/dist/node-slots/block.d.ts.map +1 -0
- package/dist/node-slots/block.js +27 -0
- package/dist/node-slots/cabinet.d.ts +4 -0
- package/dist/node-slots/cabinet.d.ts.map +1 -0
- package/dist/node-slots/cabinet.js +24 -0
- package/dist/node-slots/ceiling.d.ts +6 -0
- package/dist/node-slots/ceiling.d.ts.map +1 -0
- package/dist/node-slots/ceiling.js +7 -0
- package/dist/node-slots/column.d.ts +9 -0
- package/dist/node-slots/column.d.ts.map +1 -0
- package/dist/node-slots/column.js +24 -0
- package/dist/node-slots/door.d.ts +9 -0
- package/dist/node-slots/door.d.ts.map +1 -0
- package/dist/node-slots/door.js +20 -0
- package/dist/node-slots/duct.d.ts +5 -0
- package/dist/node-slots/duct.d.ts.map +1 -0
- package/dist/node-slots/duct.js +5 -0
- package/dist/node-slots/elevator.d.ts +9 -0
- package/dist/node-slots/elevator.d.ts.map +1 -0
- package/dist/node-slots/elevator.js +17 -0
- package/dist/node-slots/fence.d.ts +10 -0
- package/dist/node-slots/fence.d.ts.map +1 -0
- package/dist/node-slots/fence.js +23 -0
- package/dist/node-slots/index.d.ts +26 -0
- package/dist/node-slots/index.d.ts.map +1 -0
- package/dist/node-slots/index.js +98 -0
- package/dist/node-slots/lean-to-extension.d.ts +5 -0
- package/dist/node-slots/lean-to-extension.d.ts.map +1 -0
- package/dist/node-slots/lean-to-extension.js +15 -0
- package/dist/node-slots/procedural-item.d.ts +4 -0
- package/dist/node-slots/procedural-item.d.ts.map +1 -0
- package/dist/node-slots/procedural-item.js +3 -0
- package/dist/node-slots/roof-accessories.d.ts +9 -0
- package/dist/node-slots/roof-accessories.d.ts.map +1 -0
- package/dist/node-slots/roof-accessories.js +34 -0
- package/dist/node-slots/roof.d.ts +5 -0
- package/dist/node-slots/roof.d.ts.map +1 -0
- package/dist/node-slots/roof.js +12 -0
- package/dist/node-slots/shelf.d.ts +9 -0
- package/dist/node-slots/shelf.d.ts.map +1 -0
- package/dist/node-slots/shelf.js +30 -0
- package/dist/node-slots/slab.d.ts +7 -0
- package/dist/node-slots/slab.d.ts.map +1 -0
- package/dist/node-slots/slab.js +21 -0
- package/dist/node-slots/stair.d.ts +10 -0
- package/dist/node-slots/stair.d.ts.map +1 -0
- package/dist/node-slots/stair.js +21 -0
- package/dist/node-slots/wall.d.ts +12 -0
- package/dist/node-slots/wall.d.ts.map +1 -0
- package/dist/node-slots/wall.js +55 -0
- package/dist/node-slots/window.d.ts +5 -0
- package/dist/node-slots/window.d.ts.map +1 -0
- package/dist/node-slots/window.js +11 -0
- package/dist/procedural-items/design-placement.d.ts +49 -0
- package/dist/procedural-items/design-placement.d.ts.map +1 -0
- package/dist/procedural-items/design-placement.js +129 -0
- package/dist/procedural-items/design.d.ts +261 -0
- package/dist/procedural-items/design.d.ts.map +1 -0
- package/dist/procedural-items/design.js +707 -0
- package/dist/procedural-items/fixtures.d.ts +515 -75
- package/dist/procedural-items/fixtures.d.ts.map +1 -1
- package/dist/procedural-items/index.d.ts +5 -0
- package/dist/procedural-items/index.d.ts.map +1 -1
- package/dist/procedural-items/index.js +5 -0
- package/dist/procedural-items/integration.d.ts +156 -35
- package/dist/procedural-items/integration.d.ts.map +1 -1
- package/dist/procedural-items/joints.d.ts +56 -0
- package/dist/procedural-items/joints.d.ts.map +1 -0
- package/dist/procedural-items/joints.js +251 -0
- package/dist/procedural-items/library-colors.d.ts +34 -22
- package/dist/procedural-items/library-colors.d.ts.map +1 -1
- package/dist/procedural-items/library-colors.js +37 -3
- package/dist/procedural-items/motion-controller.d.ts +29 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -0
- package/dist/procedural-items/motion-controller.js +130 -0
- package/dist/procedural-items/node.d.ts +528 -62
- package/dist/procedural-items/node.d.ts.map +1 -1
- package/dist/procedural-items/query.d.ts +19 -2
- package/dist/procedural-items/query.d.ts.map +1 -1
- package/dist/procedural-items/query.js +78 -39
- package/dist/procedural-items/recipe.d.ts +260 -16
- package/dist/procedural-items/recipe.d.ts.map +1 -1
- package/dist/procedural-items/recipe.js +933 -61
- package/dist/procedural-items/section.d.ts +27 -0
- package/dist/procedural-items/section.d.ts.map +1 -0
- package/dist/procedural-items/section.js +237 -0
- package/dist/procedural-items/spatial.d.ts +21 -0
- package/dist/procedural-items/spatial.d.ts.map +1 -1
- package/dist/procedural-items/spatial.js +90 -0
- package/dist/registry/handles.d.ts +2 -0
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +6 -4
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +4 -2
- package/dist/registry/mechanism.d.ts +9 -0
- package/dist/registry/mechanism.d.ts.map +1 -0
- package/dist/registry/mechanism.js +21 -0
- package/dist/registry/registry.d.ts +6 -3
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +59 -22
- package/dist/registry/scene-api.d.ts +21 -0
- package/dist/registry/scene-api.d.ts.map +1 -1
- package/dist/registry/scene-api.js +29 -13
- package/dist/registry/subtree.d.ts +8 -0
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +55 -0
- package/dist/registry/types.d.ts +460 -12
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +2 -0
- package/dist/schema/assembly.d.ts +153 -0
- package/dist/schema/assembly.d.ts.map +1 -0
- package/dist/schema/assembly.js +155 -0
- package/dist/schema/asset-url.d.ts +2 -1
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +5 -2
- package/dist/schema/base.d.ts +28 -2
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +2 -0
- package/dist/schema/camera.d.ts +1 -1
- package/dist/schema/collection-templates.d.ts +46 -0
- package/dist/schema/collection-templates.d.ts.map +1 -0
- package/dist/schema/collection-templates.js +14 -0
- package/dist/schema/collections.d.ts +7 -0
- package/dist/schema/collections.d.ts.map +1 -1
- package/dist/schema/cut.d.ts +29 -0
- package/dist/schema/cut.d.ts.map +1 -0
- package/dist/schema/cut.js +50 -0
- package/dist/schema/geometry-metadata.d.ts +51 -0
- package/dist/schema/geometry-metadata.d.ts.map +1 -0
- package/dist/schema/geometry-metadata.js +57 -0
- package/dist/schema/geometry-source.d.ts +260 -0
- package/dist/schema/geometry-source.d.ts.map +1 -0
- package/dist/schema/geometry-source.js +144 -0
- package/dist/schema/index.d.ts +27 -12
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +29 -10
- package/dist/schema/material.d.ts +33 -33
- package/dist/schema/nodes/barrel-roof.d.ts +3 -0
- package/dist/schema/nodes/barrel-roof.d.ts.map +1 -0
- package/dist/schema/nodes/barrel-roof.js +11 -0
- package/dist/schema/nodes/block.d.ts +27 -1
- package/dist/schema/nodes/block.d.ts.map +1 -1
- package/dist/schema/nodes/block.js +1 -1
- package/dist/schema/nodes/box-vent.d.ts +32 -6
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/building.d.ts +28 -1
- package/dist/schema/nodes/building.d.ts.map +1 -1
- package/dist/schema/nodes/building.js +2 -0
- package/dist/schema/nodes/cabinet.d.ts +167 -114
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.js +1 -1
- package/dist/schema/nodes/ceiling.d.ts +44 -7
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +8 -0
- package/dist/schema/nodes/chimney.d.ts +42 -16
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +321 -187
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +4 -0
- package/dist/schema/nodes/construction-dimension.d.ts +53 -27
- package/dist/schema/nodes/construction-dimension.d.ts.map +1 -1
- package/dist/schema/nodes/cupola.d.ts +34 -8
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/curtain-wall.d.ts +21 -20
- package/dist/schema/nodes/curtain-wall.d.ts.map +1 -1
- package/dist/schema/nodes/curtain-wall.js +23 -0
- package/dist/schema/nodes/door.d.ts +170 -44
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +37 -33
- package/dist/schema/nodes/dormer.d.ts +56 -29
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +36 -10
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/duct-fitting.d.ts +44 -18
- package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
- package/dist/schema/nodes/duct-segment.d.ts +34 -8
- package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
- package/dist/schema/nodes/duct-terminal.d.ts +31 -5
- package/dist/schema/nodes/duct-terminal.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +34 -8
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +32 -6
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence-feature.d.ts +141 -0
- package/dist/schema/nodes/fence-feature.d.ts.map +1 -0
- package/dist/schema/nodes/fence-feature.js +21 -0
- package/dist/schema/nodes/fence-types.d.ts +32 -0
- package/dist/schema/nodes/fence-types.d.ts.map +1 -0
- package/dist/schema/nodes/fence-types.js +22 -0
- package/dist/schema/nodes/fence.d.ts +175 -18
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +76 -7
- package/dist/schema/nodes/floor-opening.d.ts +61 -0
- package/dist/schema/nodes/floor-opening.d.ts.map +1 -0
- package/dist/schema/nodes/floor-opening.js +17 -0
- package/dist/schema/nodes/guide.d.ts +27 -1
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/gutter.d.ts +33 -7
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/gutter.js +6 -5
- package/dist/schema/nodes/hvac-equipment.d.ts +32 -6
- package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -1
- package/dist/schema/nodes/imported-mesh.d.ts +27 -1
- package/dist/schema/nodes/imported-mesh.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +169 -13
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +13 -0
- package/dist/schema/nodes/lean-to-extension.d.ts +55 -29
- package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -1
- package/dist/schema/nodes/level.d.ts +28 -2
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/lineset.d.ts +27 -1
- package/dist/schema/nodes/lineset.d.ts.map +1 -1
- package/dist/schema/nodes/liquid-line.d.ts +27 -1
- package/dist/schema/nodes/liquid-line.d.ts.map +1 -1
- package/dist/schema/nodes/measurement.d.ts +27 -1
- package/dist/schema/nodes/measurement.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +41 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -0
- package/dist/schema/nodes/opening-types.js +48 -0
- package/dist/schema/nodes/pipe-fitting.d.ts +34 -8
- package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-segment.d.ts +30 -4
- package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-trap.d.ts +28 -2
- package/dist/schema/nodes/pipe-trap.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.d.ts +33 -7
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +3 -1
- package/dist/schema/nodes/roof-glazing-config.d.ts +90 -0
- package/dist/schema/nodes/roof-glazing-config.d.ts.map +1 -0
- package/dist/schema/nodes/roof-glazing-config.js +34 -0
- package/dist/schema/nodes/roof-glazing.d.ts +57 -0
- package/dist/schema/nodes/roof-glazing.d.ts.map +1 -0
- package/dist/schema/nodes/roof-glazing.js +514 -0
- package/dist/schema/nodes/roof-segment-resize.d.ts +4 -0
- package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-resize.js +21 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts +5 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-shape.js +44 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-walls.js +26 -1
- package/dist/schema/nodes/roof-segment.d.ts +175 -40
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +100 -20
- package/dist/schema/nodes/roof-types.d.ts +14 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -0
- package/dist/schema/nodes/roof-types.js +14 -0
- package/dist/schema/nodes/roof.d.ts +122 -21
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +6 -0
- package/dist/schema/nodes/scan.d.ts +27 -1
- package/dist/schema/nodes/scan.d.ts.map +1 -1
- package/dist/schema/nodes/separator.d.ts +50 -0
- package/dist/schema/nodes/separator.d.ts.map +1 -0
- package/dist/schema/nodes/separator.js +8 -0
- package/dist/schema/nodes/shelf.d.ts +35 -9
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site-facts.d.ts +64 -0
- package/dist/schema/nodes/site-facts.d.ts.map +1 -0
- package/dist/schema/nodes/site-facts.js +73 -0
- package/dist/schema/nodes/site.d.ts +235 -1
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +115 -1
- package/dist/schema/nodes/skylight.d.ts +64 -38
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +91 -7
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +37 -2
- package/dist/schema/nodes/solar-panel.d.ts +40 -14
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/spawn.d.ts +27 -1
- package/dist/schema/nodes/spawn.d.ts.map +1 -1
- package/dist/schema/nodes/stair-construction.d.ts +21 -0
- package/dist/schema/nodes/stair-construction.d.ts.map +1 -0
- package/dist/schema/nodes/stair-construction.js +13 -0
- package/dist/schema/nodes/stair-defaults.d.ts +16 -0
- package/dist/schema/nodes/stair-defaults.d.ts.map +1 -0
- package/dist/schema/nodes/stair-defaults.js +15 -0
- package/dist/schema/nodes/stair-design-targets.d.ts +9 -0
- package/dist/schema/nodes/stair-design-targets.d.ts.map +1 -0
- package/dist/schema/nodes/stair-design-targets.js +7 -0
- package/dist/schema/nodes/stair-segment.d.ts +78 -10
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.js +13 -0
- package/dist/schema/nodes/stair-types.d.ts +29 -0
- package/dist/schema/nodes/stair-types.d.ts.map +1 -0
- package/dist/schema/nodes/stair-types.js +23 -0
- package/dist/schema/nodes/stair.d.ts +131 -38
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +46 -3
- package/dist/schema/nodes/structural-grid.d.ts +27 -1
- package/dist/schema/nodes/structural-grid.d.ts.map +1 -1
- package/dist/schema/nodes/surface-hole-metadata.d.ts +4 -1
- package/dist/schema/nodes/surface-hole-metadata.d.ts.map +1 -1
- package/dist/schema/nodes/surface-hole-metadata.js +2 -1
- package/dist/schema/nodes/surface-paint-region.d.ts +14 -0
- package/dist/schema/nodes/surface-paint-region.d.ts.map +1 -0
- package/dist/schema/nodes/surface-paint-region.js +12 -0
- package/dist/schema/nodes/turbine-vent.d.ts +32 -6
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/unit.d.ts +29 -3
- package/dist/schema/nodes/unit.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +771 -147
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +204 -186
- package/dist/schema/nodes/window.d.ts +173 -38
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +22 -14
- package/dist/schema/nodes/zone.d.ts +291 -4
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +56 -0
- package/dist/schema/provenance.d.ts +118 -0
- package/dist/schema/provenance.d.ts.map +1 -0
- package/dist/schema/provenance.js +76 -0
- package/dist/schema/scene-material.d.ts +5 -5
- package/dist/schema/site-presentation.d.ts +100 -0
- package/dist/schema/site-presentation.d.ts.map +1 -0
- package/dist/schema/site-presentation.js +83 -0
- package/dist/schema/source-ref.d.ts +23 -0
- package/dist/schema/source-ref.d.ts.map +1 -0
- package/dist/schema/source-ref.js +29 -0
- package/dist/schema/types.d.ts +4442 -653
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +7 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -1
- package/dist/services/alignment-anchors.d.ts +2 -1
- package/dist/services/alignment-anchors.d.ts.map +1 -1
- package/dist/services/alignment-anchors.js +9 -6
- package/dist/services/index.d.ts +5 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +5 -1
- package/dist/services/level-height.d.ts.map +1 -1
- package/dist/services/level-height.js +10 -4
- package/dist/services/port-connectivity.d.ts +4 -0
- package/dist/services/port-connectivity.d.ts.map +1 -1
- package/dist/services/port-connectivity.js +35 -0
- package/dist/services/project-file-sink.d.ts +9 -0
- package/dist/services/project-file-sink.d.ts.map +1 -0
- package/dist/services/project-file-sink.js +13 -0
- package/dist/services/roof-bearing.d.ts +62 -0
- package/dist/services/roof-bearing.d.ts.map +1 -0
- package/dist/services/roof-bearing.js +234 -0
- package/dist/services/roof-level.d.ts +121 -0
- package/dist/services/roof-level.d.ts.map +1 -0
- package/dist/services/roof-level.js +280 -0
- package/dist/services/roof-move.d.ts +83 -0
- package/dist/services/roof-move.d.ts.map +1 -0
- package/dist/services/roof-move.js +316 -0
- package/dist/services/stair-surface-snap.d.ts +14 -0
- package/dist/services/stair-surface-snap.d.ts.map +1 -0
- package/dist/services/stair-surface-snap.js +116 -0
- package/dist/services/storey-datum.d.ts +12 -0
- package/dist/services/storey-datum.d.ts.map +1 -0
- package/dist/services/storey-datum.js +18 -0
- package/dist/services/storey.d.ts +72 -6
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +215 -12
- package/dist/services/surface-hosting.d.ts.map +1 -1
- package/dist/services/surface-hosting.js +4 -1
- package/dist/solar-panel-presets.d.ts +2 -2
- package/dist/store/actions/node-actions.d.ts +4994 -8
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +541 -175
- package/dist/store/derived-node-guard.d.ts +84 -0
- package/dist/store/derived-node-guard.d.ts.map +1 -0
- package/dist/store/derived-node-guard.js +586 -0
- package/dist/store/history-control.d.ts +73 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +183 -5
- package/dist/store/history-drafts.d.ts +48 -0
- package/dist/store/history-drafts.d.ts.map +1 -0
- package/dist/store/history-drafts.js +403 -0
- package/dist/store/history-invalidation.d.ts.map +1 -1
- package/dist/store/history-invalidation.js +1 -0
- package/dist/store/item-interaction.d.ts +28 -0
- package/dist/store/item-interaction.d.ts.map +1 -0
- package/dist/store/item-interaction.js +34 -0
- package/dist/store/registered-node-defaults.d.ts +11 -0
- package/dist/store/registered-node-defaults.d.ts.map +1 -0
- package/dist/store/registered-node-defaults.js +25 -0
- package/dist/store/scene-annotations.d.ts +9827 -0
- package/dist/store/scene-annotations.d.ts.map +1 -0
- package/dist/store/scene-annotations.js +107 -0
- package/dist/store/scene-preview.d.ts +16 -0
- package/dist/store/scene-preview.d.ts.map +1 -0
- package/dist/store/scene-preview.js +144 -0
- package/dist/store/use-interactive.d.ts +23 -1
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +128 -5
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-terrain.d.ts.map +1 -1
- package/dist/store/use-live-transforms.d.ts.map +1 -1
- package/dist/store/use-scene.d.ts +68 -12
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +452 -308
- package/dist/systems/elevator/elevator-dispatch.js +1 -1
- package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-sync.js +4 -6
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +12 -6
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +8 -3
- package/dist/systems/fence/fence-centerline.d.ts.map +1 -1
- package/dist/systems/fence/fence-centerline.js +6 -5
- package/dist/systems/fence/fence-features.d.ts +36 -0
- package/dist/systems/fence/fence-features.d.ts.map +1 -0
- package/dist/systems/fence/fence-features.js +105 -0
- package/dist/systems/fence/fence-spline.d.ts +8 -5
- package/dist/systems/fence/fence-spline.d.ts.map +1 -1
- package/dist/systems/fence/fence-spline.js +51 -16
- package/dist/systems/owned-floor-openings.d.ts +9 -0
- package/dist/systems/owned-floor-openings.d.ts.map +1 -0
- package/dist/systems/owned-floor-openings.js +347 -0
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -0
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -0
- package/dist/systems/reconcile-owned-floor-openings.js +25 -0
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +9 -3
- package/dist/systems/roof/roof-elevation.d.ts +5 -0
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +91 -62
- package/dist/systems/slab/__fixtures__/doorway-steps.d.ts +8 -0
- package/dist/systems/slab/__fixtures__/doorway-steps.d.ts.map +1 -0
- package/dist/systems/slab/__fixtures__/doorway-steps.js +62 -0
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +6743 -0
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -0
- package/dist/systems/slab/__fixtures__/floor-step.js +66 -0
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +6848 -0
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -0
- package/dist/systems/slab/__fixtures__/raised-room.js +54 -0
- package/dist/systems/slab/ensure-slab-openings.d.ts +9 -0
- package/dist/systems/slab/ensure-slab-openings.d.ts.map +1 -0
- package/dist/systems/slab/ensure-slab-openings.js +41 -0
- package/dist/systems/slab/slab-support.d.ts +30 -8
- package/dist/systems/slab/slab-support.d.ts.map +1 -1
- package/dist/systems/slab/slab-support.js +547 -62
- package/dist/systems/stair/stair-base-elevation.d.ts +3 -0
- package/dist/systems/stair/stair-base-elevation.d.ts.map +1 -0
- package/dist/systems/stair/stair-base-elevation.js +49 -0
- package/dist/systems/stair/stair-clearance.d.ts +39 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -0
- package/dist/systems/stair/stair-clearance.js +508 -0
- package/dist/systems/stair/stair-construction.d.ts +37 -0
- package/dist/systems/stair/stair-construction.d.ts.map +1 -0
- package/dist/systems/stair/stair-construction.js +314 -0
- package/dist/systems/stair/stair-detail-budget.d.ts +13 -0
- package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -0
- package/dist/systems/stair/stair-detail-budget.js +64 -0
- package/dist/systems/stair/stair-flight.d.ts +2 -2
- package/dist/systems/stair/stair-flight.d.ts.map +1 -1
- package/dist/systems/stair/stair-flight.js +4 -3
- package/dist/systems/stair/stair-floor-footprints.d.ts +7 -0
- package/dist/systems/stair/stair-floor-footprints.d.ts.map +1 -0
- package/dist/systems/stair/stair-floor-footprints.js +113 -0
- package/dist/systems/stair/stair-footprint.d.ts +9 -1
- package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.js +123 -57
- package/dist/systems/stair/stair-layout.d.ts +39 -0
- package/dist/systems/stair/stair-layout.d.ts.map +1 -0
- package/dist/systems/stair/stair-layout.js +58 -0
- package/dist/systems/stair/stair-opening-preview.d.ts +4022 -2061
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.d.ts +8 -2
- package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.js +136 -315
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +40 -8
- package/dist/systems/stair/stair-presets.d.ts +284 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -0
- package/dist/systems/stair/stair-presets.js +158 -0
- package/dist/systems/stair/stair-rail-budget.d.ts +6 -0
- package/dist/systems/stair/stair-rail-budget.d.ts.map +1 -0
- package/dist/systems/stair/stair-rail-budget.js +36 -0
- package/dist/systems/stair/stair-rail-path.d.ts +22 -0
- package/dist/systems/stair/stair-rail-path.d.ts.map +1 -0
- package/dist/systems/stair/stair-rail-path.js +497 -0
- package/dist/systems/stair/stair-rise-edit.d.ts +9 -0
- package/dist/systems/stair/stair-rise-edit.d.ts.map +1 -0
- package/dist/systems/stair/stair-rise-edit.js +46 -0
- package/dist/systems/stair/stair-rise-query.d.ts +40 -0
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -0
- package/dist/systems/stair/stair-rise-query.js +175 -0
- package/dist/systems/stair/stair-rise.d.ts +4 -19
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +8 -71
- package/dist/systems/stair/stair-sizing.d.ts +416 -0
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -0
- package/dist/systems/stair/stair-sizing.js +255 -0
- package/dist/systems/stair/stair-sweep-edit.d.ts +7 -0
- package/dist/systems/stair/stair-sweep-edit.d.ts.map +1 -0
- package/dist/systems/stair/stair-sweep-edit.js +8 -0
- package/dist/systems/stair/stair-walking-line.d.ts +5 -0
- package/dist/systems/stair/stair-walking-line.d.ts.map +1 -0
- package/dist/systems/stair/stair-walking-line.js +91 -0
- package/dist/systems/stair/stair-winder.d.ts +36 -0
- package/dist/systems/stair/stair-winder.d.ts.map +1 -0
- package/dist/systems/stair/stair-winder.js +173 -0
- package/dist/systems/wall/wall-assembly.d.ts +245 -0
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -0
- package/dist/systems/wall/wall-assembly.js +875 -0
- package/dist/systems/wall/wall-curve.d.ts +7 -1
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +34 -5
- package/dist/systems/wall/wall-finish.d.ts +102 -0
- package/dist/systems/wall/wall-finish.d.ts.map +1 -0
- package/dist/systems/wall/wall-finish.js +264 -0
- package/dist/systems/wall/wall-footprint.d.ts +3 -0
- package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
- package/dist/systems/wall/wall-footprint.js +15 -13
- package/dist/systems/wall/wall-frame.d.ts +45 -0
- package/dist/systems/wall/wall-frame.d.ts.map +1 -0
- package/dist/systems/wall/wall-frame.js +170 -0
- package/dist/systems/wall/wall-layer-bands.d.ts +38 -0
- package/dist/systems/wall/wall-layer-bands.d.ts.map +1 -0
- package/dist/systems/wall/wall-layer-bands.js +109 -0
- package/dist/systems/wall/wall-merge.d.ts +20 -1
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +189 -18
- package/dist/systems/wall/wall-mitering.d.ts +6 -5
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +70 -20
- package/dist/systems/wall/wall-operations.d.ts +1 -1
- package/dist/systems/wall/wall-operations.d.ts.map +1 -1
- package/dist/systems/wall/wall-operations.js +2 -1
- package/dist/systems/wall/wall-paint-plan.d.ts +30 -0
- package/dist/systems/wall/wall-paint-plan.d.ts.map +1 -0
- package/dist/systems/wall/wall-paint-plan.js +167 -0
- package/dist/systems/wall/wall-room-sides.d.ts +14 -0
- package/dist/systems/wall/wall-room-sides.d.ts.map +1 -0
- package/dist/systems/wall/wall-room-sides.js +67 -0
- package/dist/systems/wall/wall-step-openings.d.ts +17 -0
- package/dist/systems/wall/wall-step-openings.d.ts.map +1 -0
- package/dist/systems/wall/wall-step-openings.js +32 -0
- package/dist/systems/wall/wall-top.d.ts +7 -8
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +15 -13
- package/dist/systems/wall/wall-topology.d.ts +25 -0
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +408 -5
- package/dist/systems/wall/wall-trim.d.ts +7 -0
- package/dist/systems/wall/wall-trim.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim.js +10 -0
- package/dist/utils/clone-scene-graph.d.ts +6 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +131 -15
- package/dist/utils/ensure-scene-openings.d.ts +9823 -0
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -0
- package/dist/utils/ensure-scene-openings.js +29 -0
- package/dist/utils/exterior-threshold-migration.d.ts +4 -0
- package/dist/utils/exterior-threshold-migration.d.ts.map +1 -0
- package/dist/utils/exterior-threshold-migration.js +114 -0
- package/dist/utils/floor-follow-migration.d.ts +3 -0
- package/dist/utils/floor-follow-migration.d.ts.map +1 -0
- package/dist/utils/floor-follow-migration.js +29 -0
- package/dist/utils/floor-opening-migration.d.ts +13 -0
- package/dist/utils/floor-opening-migration.d.ts.map +1 -0
- package/dist/utils/floor-opening-migration.js +148 -0
- package/dist/utils/floor-piece-adoption.d.ts +50 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -0
- package/dist/utils/floor-piece-adoption.js +182 -0
- package/dist/utils/floor-plate-migration.d.ts +4936 -0
- package/dist/utils/floor-plate-migration.d.ts.map +1 -0
- package/dist/utils/floor-plate-migration.js +1360 -0
- package/dist/utils/heal-plan-coordinates.d.ts +2 -0
- package/dist/utils/heal-plan-coordinates.d.ts.map +1 -0
- package/dist/utils/heal-plan-coordinates.js +69 -0
- package/dist/utils/heal-scene-graph.d.ts +32 -6
- package/dist/utils/heal-scene-graph.d.ts.map +1 -1
- package/dist/utils/heal-scene-graph.js +78 -16
- package/dist/utils/legacy-material-slots.d.ts +23 -0
- package/dist/utils/legacy-material-slots.d.ts.map +1 -0
- package/dist/utils/legacy-material-slots.js +120 -0
- package/dist/utils/legacy-opening-datums.d.ts +11 -0
- package/dist/utils/legacy-opening-datums.d.ts.map +1 -0
- package/dist/utils/legacy-opening-datums.js +92 -0
- package/dist/utils/legacy-wall-datums.d.ts +6 -0
- package/dist/utils/legacy-wall-datums.d.ts.map +1 -0
- package/dist/utils/legacy-wall-datums.js +199 -0
- package/dist/utils/load-migration.d.ts +28 -0
- package/dist/utils/load-migration.d.ts.map +1 -0
- package/dist/utils/load-migration.js +89 -0
- package/dist/utils/node-defaults.d.ts +37 -0
- package/dist/utils/node-defaults.d.ts.map +1 -0
- package/dist/utils/node-defaults.js +96 -0
- package/dist/utils/normalize-legacy-structure.d.ts +2 -0
- package/dist/utils/normalize-legacy-structure.d.ts.map +1 -0
- package/dist/utils/normalize-legacy-structure.js +61 -0
- package/dist/utils/omit-undefined.d.ts +2 -0
- package/dist/utils/omit-undefined.d.ts.map +1 -0
- package/dist/utils/omit-undefined.js +17 -0
- package/dist/utils/owned-floor-opening-migration.d.ts +4918 -0
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -0
- package/dist/utils/owned-floor-opening-migration.js +365 -0
- package/dist/utils/reconcile-structure-on-load.d.ts +4918 -0
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -0
- package/dist/utils/reconcile-structure-on-load.js +307 -0
- package/dist/utils/room-zone-migration.d.ts +18 -0
- package/dist/utils/room-zone-migration.d.ts.map +1 -0
- package/dist/utils/room-zone-migration.js +258 -0
- package/dist/utils/scene-migrations.d.ts +16 -1
- package/dist/utils/scene-migrations.d.ts.map +1 -1
- package/dist/utils/scene-migrations.js +15 -1
- package/dist/utils/semantic-equal.d.ts +3 -0
- package/dist/utils/semantic-equal.d.ts.map +1 -0
- package/dist/utils/semantic-equal.js +26 -0
- package/dist/utils/structure-id.d.ts +4 -0
- package/dist/utils/structure-id.d.ts.map +1 -0
- package/dist/utils/structure-id.js +115 -0
- package/dist/utils/types.d.ts.map +1 -1
- package/dist/utils/vertical-scene-migration.d.ts +8 -8
- package/dist/utils/vertical-scene-migration.d.ts.map +1 -1
- package/dist/utils/vertical-scene-migration.js +18 -8
- package/dist/utils/wall-assembly-migration.d.ts +14 -0
- package/dist/utils/wall-assembly-migration.d.ts.map +1 -0
- package/dist/utils/wall-assembly-migration.js +23 -0
- package/dist/utils/wall-face-migration.d.ts +23 -0
- package/dist/utils/wall-face-migration.d.ts.map +1 -0
- package/dist/utils/wall-face-migration.js +246 -0
- package/dist/validation/opening-bounds.d.ts +36 -0
- package/dist/validation/opening-bounds.d.ts.map +1 -0
- package/dist/validation/opening-bounds.js +34 -0
- package/dist/validation/validate-build-json.d.ts +2 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +36 -1
- package/package.json +69 -10
- package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +0 -13
- package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +0 -1
- package/dist/services/surface-hosting-procedural-parity.fixtures.js +0 -4691
- package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +0 -1060
- package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +0 -1
- package/dist/services/surface-hosting-shelf-parity.fixtures.js +0 -3127
package/dist/store/use-scene.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { temporal } from 'zundo';
|
|
3
3
|
import { create } from 'zustand';
|
|
4
|
-
import {
|
|
4
|
+
import { toSceneMaterialRef } from '../material-library.js';
|
|
5
5
|
import { getNodePluginId, isNodeKindEnabled, nodeRegistry } from '../registry/registry.js';
|
|
6
6
|
import { BuildingNode } from '../schema/index.js';
|
|
7
7
|
import { generateCollectionId } from '../schema/collections.js';
|
|
@@ -10,25 +10,35 @@ import { DoorNode as DoorNodeSchema } from '../schema/nodes/door.js';
|
|
|
10
10
|
import { createDormerDefaultWindow, DormerNode as DormerNodeSchema, getDormerDefaultWindowFace, } from '../schema/nodes/dormer.js';
|
|
11
11
|
import { ElevatorNode as ElevatorNodeSchema } from '../schema/nodes/elevator.js';
|
|
12
12
|
import { LevelNode, normalizeLevelBaseElevation } from '../schema/nodes/level.js';
|
|
13
|
+
import { RoofGlazing } from '../schema/nodes/roof-glazing.js';
|
|
13
14
|
import { getPitchFromActiveRoofHeight, } from '../schema/nodes/roof-segment.js';
|
|
14
15
|
import { segmentPointToRoofWallFace } from '../schema/nodes/roof-segment-walls.js';
|
|
15
16
|
import { ShelfNode as ShelfNodeSchema } from '../schema/nodes/shelf.js';
|
|
16
17
|
import { SiteNode } from '../schema/nodes/site.js';
|
|
17
18
|
import { getEffectiveStairSurfaceMaterial, StairNode as StairNodeSchema, } from '../schema/nodes/stair.js';
|
|
18
19
|
import { StairSegmentNode as StairSegmentNodeSchema } from '../schema/nodes/stair-segment.js';
|
|
19
|
-
import { getEffectiveWallSurfaceMaterial } from '../schema/nodes/wall.js';
|
|
20
20
|
import { WindowNode as WindowNodeSchema } from '../schema/nodes/window.js';
|
|
21
|
-
import {
|
|
21
|
+
import { SceneMaterial } from '../schema/scene-material.js';
|
|
22
22
|
import { AnyNode as AnyNodeSchema } from '../schema/types.js';
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
23
|
+
import { DEFAULT_LEVEL_HEIGHT } from '../services/level-height.js';
|
|
24
|
+
import { ensureSceneOpenings } from '../utils/ensure-scene-openings.js';
|
|
25
|
+
import { migrateFloorPlates, migrateSlabSlots } from '../utils/floor-plate-migration.js';
|
|
26
26
|
import { healSceneNodes } from '../utils/heal-scene-graph.js';
|
|
27
|
+
import { legacySpecToMaterialRef, migrateSingleMaterialSlots, migrateWallSurfaceMaterials, } from '../utils/legacy-material-slots.js';
|
|
28
|
+
import { materializeNodeDefaults } from '../utils/node-defaults.js';
|
|
29
|
+
import { normalizeLegacyStructure } from '../utils/normalize-legacy-structure.js';
|
|
30
|
+
import { materializeLegacyAutoOpenings } from '../utils/owned-floor-opening-migration.js';
|
|
31
|
+
import { reconcileStructureOnLoad } from '../utils/reconcile-structure-on-load.js';
|
|
27
32
|
import { removeRetiredDrawingSheetNodes } from '../utils/retired-scene-nodes.js';
|
|
33
|
+
import { migrateCeilingRoomLinks, migrateRoomZones } from '../utils/room-zone-migration.js';
|
|
28
34
|
import { migrateVerticalSceneNodes } from '../utils/vertical-scene-migration.js';
|
|
35
|
+
import { migrateLegacyWallAssemblies } from '../utils/wall-assembly-migration.js';
|
|
36
|
+
import { migrateWallFaceBands, migrateWallFaceKeys } from '../utils/wall-face-migration.js';
|
|
29
37
|
import * as nodeActions from './actions/node-actions.js';
|
|
30
|
-
import { areSceneSnapshotsEqual, getSceneHistoryPauseDepth, notifySceneCommit, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runWithSceneCommitNodeIds, } from './history-control.js';
|
|
38
|
+
import { areSceneSnapshotsEqual, beginSceneHistoryPauseSession, getSceneHistoryPauseDepth, isRestoringSceneHistory, notifySceneCommit, pauseSceneHistory, resetSceneHistoryPauseDepth, resumeSceneHistory, runAsRemoteSceneChange, runAsSceneHistoryRestore, runSceneWriteGuards, runWithSceneCommitNodeIds, } from './history-control.js';
|
|
39
|
+
import { beginSceneHistoryDraft as beginSceneHistoryDraftIn, clearSceneHistoryDrafts, createdSceneHistoryDraftIds, hasSceneHistoryDrafts, noteSceneHistoryDraftWrite, sceneHistoryDraftRevertUpdates as sceneHistoryDraftRevertUpdatesIn, settleSceneHistoryDrafts, withAdoptedDraftsAsOriginal, withDraftsRestored, } from './history-drafts.js';
|
|
31
40
|
import { getHistoryDirtyNodeIds } from './history-invalidation.js';
|
|
41
|
+
import { retainSceneAnnotations, withoutSceneAnnotations, withoutSceneNodeAnnotations, writeSceneNodeField, } from './scene-annotations.js';
|
|
32
42
|
import { invalidatePendingHydration, isHydrationNormalization, queueSceneNormalization, runSceneHydration, } from './scene-hydration.js';
|
|
33
43
|
import useLiveNodeOverrides from './use-live-node-overrides.js';
|
|
34
44
|
import useLiveTransforms from './use-live-transforms.js';
|
|
@@ -128,6 +138,20 @@ function normalizeWindowNode(node) {
|
|
|
128
138
|
const parsed = compiledNodeSchema(WindowNodeSchema).safeParse(node);
|
|
129
139
|
return parsed.success ? { ...node, ...parsed.data } : null;
|
|
130
140
|
}
|
|
141
|
+
// Slabs and ceilings written by third-party exporters (scanning apps, IFC
|
|
142
|
+
// hand-offs) can legitimately omit `holes` / `holeMetadata` / `autoFromWalls`:
|
|
143
|
+
// the schema gives them defaults. The opening sync and the public viewer read
|
|
144
|
+
// those fields on the raw node, so a missing `holes` throws
|
|
145
|
+
// "Cannot read properties of undefined (reading 'map')" and the scene never
|
|
146
|
+
// renders. Only the hole fields are filled here — a full zod parse would also
|
|
147
|
+
// default `thickness`, which the vertical-model migration below must still see
|
|
148
|
+
// as absent on legacy solids.
|
|
149
|
+
function normalizeSurfaceHoleFields(node) {
|
|
150
|
+
const holes = Array.isArray(node.holes) ? node.holes : [];
|
|
151
|
+
const holeMetadata = Array.isArray(node.holeMetadata) ? node.holeMetadata : [];
|
|
152
|
+
const autoFromWalls = node.type === 'slab' && node.autoFromWalls === undefined ? { autoFromWalls: false } : {};
|
|
153
|
+
return { ...node, holes, holeMetadata, ...autoFromWalls };
|
|
154
|
+
}
|
|
131
155
|
function normalizeShelfNode(node) {
|
|
132
156
|
const sanitized = {
|
|
133
157
|
...node,
|
|
@@ -217,91 +241,6 @@ function migrateElevatorParent(id, node, nodes) {
|
|
|
217
241
|
parentId: buildingId,
|
|
218
242
|
};
|
|
219
243
|
}
|
|
220
|
-
// Reuse an already-minted scene material for an identical inline legacy
|
|
221
|
-
// material so a whole building painted one custom colour collapses to one
|
|
222
|
-
// shared datablock (mirrors `commitSlotPaint`'s dedupe-on-match).
|
|
223
|
-
function findMintedSceneMaterialRef(material, mintedMaterials) {
|
|
224
|
-
const target = JSON.stringify(material);
|
|
225
|
-
for (const sceneMaterial of Object.values(mintedMaterials)) {
|
|
226
|
-
if (JSON.stringify(sceneMaterial.material) === target) {
|
|
227
|
-
return toSceneMaterialRef(sceneMaterial.id);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
return undefined;
|
|
231
|
-
}
|
|
232
|
-
// Turn a legacy surface spec (`{ material, materialPreset }`) into a
|
|
233
|
-
// `MaterialRef`: a preset that's already a `library:`/`scene:` ref is used
|
|
234
|
-
// as-is; an inline material mints (or reuses) a scene material. Returns
|
|
235
|
-
// undefined when the spec carries no material. Shared by every legacy→slots
|
|
236
|
-
// migration below.
|
|
237
|
-
function legacySpecToMaterialRef(spec, mintedMaterials) {
|
|
238
|
-
if (typeof spec.materialPreset === 'string' && parseMaterialRef(spec.materialPreset)) {
|
|
239
|
-
return spec.materialPreset;
|
|
240
|
-
}
|
|
241
|
-
if (spec.material !== undefined) {
|
|
242
|
-
const existing = findMintedSceneMaterialRef(spec.material, mintedMaterials);
|
|
243
|
-
if (existing)
|
|
244
|
-
return existing;
|
|
245
|
-
const id = generateSceneMaterialId();
|
|
246
|
-
mintedMaterials[id] = {
|
|
247
|
-
id,
|
|
248
|
-
name: `Material ${Object.keys(mintedMaterials).length + 1}`,
|
|
249
|
-
material: spec.material,
|
|
250
|
-
};
|
|
251
|
-
return toSceneMaterialRef(id);
|
|
252
|
-
}
|
|
253
|
-
return undefined;
|
|
254
|
-
}
|
|
255
|
-
// Move the retired inline `material*` / `interiorMaterial*` / `exteriorMaterial*`
|
|
256
|
-
// fields onto the unified `node.slots` model (interior / exterior → a
|
|
257
|
-
// `library:`/`scene:` ref), minting scene materials for inline customs into
|
|
258
|
-
// `mintedMaterials` (merged into the scene material map by the caller). Already
|
|
259
|
-
// slot-modelled walls and walls with no legacy material are left untouched.
|
|
260
|
-
function migrateWallSurfaceMaterials(node, mintedMaterials) {
|
|
261
|
-
if (node.slots && (node.slots.interior !== undefined || node.slots.exterior !== undefined)) {
|
|
262
|
-
return node;
|
|
263
|
-
}
|
|
264
|
-
const slots = { ...(node.slots ?? {}) };
|
|
265
|
-
for (const side of ['interior', 'exterior']) {
|
|
266
|
-
const spec = getEffectiveWallSurfaceMaterial(node, side);
|
|
267
|
-
const ref = legacySpecToMaterialRef(spec, mintedMaterials);
|
|
268
|
-
if (ref)
|
|
269
|
-
slots[side] = ref;
|
|
270
|
-
}
|
|
271
|
-
if (Object.keys(slots).length === 0) {
|
|
272
|
-
return node;
|
|
273
|
-
}
|
|
274
|
-
return {
|
|
275
|
-
...node,
|
|
276
|
-
slots,
|
|
277
|
-
material: undefined,
|
|
278
|
-
materialPreset: undefined,
|
|
279
|
-
interiorMaterial: undefined,
|
|
280
|
-
interiorMaterialPreset: undefined,
|
|
281
|
-
exteriorMaterial: undefined,
|
|
282
|
-
exteriorMaterialPreset: undefined,
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
// Move a kind's single legacy `material` / `materialPreset` onto its declared
|
|
286
|
-
// slots. A pre-slot-model node painted one material rendered that material on
|
|
287
|
-
// every part (each slot resolves `node.slots[slot]` → legacy → default), so the
|
|
288
|
-
// migration writes the same ref to every slot id the kind can expose — unused
|
|
289
|
-
// conditional slots are harmless. Already slot-modelled or unpainted nodes are
|
|
290
|
-
// left untouched. Mirrors `migrateWallSurfaceMaterials` for single-surface and
|
|
291
|
-
// whole-object kinds (slab, ceiling, fence, column, shelf).
|
|
292
|
-
function migrateSingleMaterialSlots(node, slotIds, mintedMaterials) {
|
|
293
|
-
if (node.slots && Object.keys(node.slots).length > 0) {
|
|
294
|
-
return node;
|
|
295
|
-
}
|
|
296
|
-
const ref = legacySpecToMaterialRef({ material: node.material, materialPreset: node.materialPreset }, mintedMaterials);
|
|
297
|
-
if (!ref) {
|
|
298
|
-
return node;
|
|
299
|
-
}
|
|
300
|
-
const slots = {};
|
|
301
|
-
for (const slotId of slotIds)
|
|
302
|
-
slots[slotId] = ref;
|
|
303
|
-
return { ...node, slots, material: undefined, materialPreset: undefined };
|
|
304
|
-
}
|
|
305
244
|
function migrateRoleMaterialSlots(node, roles, mintedMaterials) {
|
|
306
245
|
const slots = { ...(node.slots ?? {}) };
|
|
307
246
|
const next = { ...node };
|
|
@@ -509,22 +448,6 @@ function migrateConstructionDimension(node) {
|
|
|
509
448
|
}),
|
|
510
449
|
};
|
|
511
450
|
}
|
|
512
|
-
function migrateWallAssembly(node) {
|
|
513
|
-
if (!Object.hasOwn(node, 'assemblyLayers'))
|
|
514
|
-
return node;
|
|
515
|
-
const assemblyThickness = Array.isArray(node.assemblyLayers)
|
|
516
|
-
? node.assemblyLayers.reduce((total, layer) => {
|
|
517
|
-
if (!(layer && typeof layer === 'object'))
|
|
518
|
-
return total;
|
|
519
|
-
const thickness = layer.thickness;
|
|
520
|
-
return typeof thickness === 'number' && Number.isFinite(thickness) && thickness > 0
|
|
521
|
-
? total + thickness
|
|
522
|
-
: total;
|
|
523
|
-
}, 0)
|
|
524
|
-
: 0;
|
|
525
|
-
const { assemblyLayers: _assemblyLayers, ...wall } = node;
|
|
526
|
-
return assemblyThickness > 0 ? { ...wall, thickness: assemblyThickness } : wall;
|
|
527
|
-
}
|
|
528
451
|
function migrateBlockRename(id, node, nodes) {
|
|
529
452
|
if (node.type !== 'custom-mesh')
|
|
530
453
|
return [id, node];
|
|
@@ -561,7 +484,7 @@ function migrateBlockHostedItem(node) {
|
|
|
561
484
|
function migrateNodes(nodes) {
|
|
562
485
|
// Repair pre-existing corruption (null children, zero-length walls) before
|
|
563
486
|
// any per-type migration runs, so already-saved scenes load cleanly.
|
|
564
|
-
const { nodes: healed } = healSceneNodes(nodes);
|
|
487
|
+
const { nodes: healed } = healSceneNodes(normalizeLegacyStructure(nodes));
|
|
565
488
|
const { nodes: patchedNodes } = removeRetiredDrawingSheetNodes(healed);
|
|
566
489
|
// Scene materials minted while moving legacy wall fields onto `node.slots`;
|
|
567
490
|
// merged into the scene material map by the caller (`setScene`).
|
|
@@ -635,10 +558,15 @@ function migrateNodes(nodes) {
|
|
|
635
558
|
// The migration result is cast, not zod-parsed, so the schema default never
|
|
636
559
|
// applies on its own — this branch is the only place it lands.
|
|
637
560
|
if (node.type === 'roof-segment') {
|
|
561
|
+
if (node.glazing !== undefined) {
|
|
562
|
+
const glazing = RoofGlazing.safeParse(node.glazing);
|
|
563
|
+
if (glazing.success)
|
|
564
|
+
patchedNodes[id] = { ...patchedNodes[id], glazing: glazing.data };
|
|
565
|
+
}
|
|
638
566
|
const currentPitch = node.pitch;
|
|
639
567
|
const hasValidPitch = typeof currentPitch === 'number' && currentPitch > 0;
|
|
640
568
|
if (!hasValidPitch) {
|
|
641
|
-
const { roofHeight, ...rest } =
|
|
569
|
+
const { roofHeight, ...rest } = patchedNodes[id];
|
|
642
570
|
const width = typeof node.width === 'number' ? node.width : 8;
|
|
643
571
|
const depth = typeof node.depth === 'number' ? node.depth : 6;
|
|
644
572
|
const roofType = (typeof node.roofType === 'string' ? node.roofType : 'gable');
|
|
@@ -661,6 +589,9 @@ function migrateNodes(nodes) {
|
|
|
661
589
|
patchedNodes[id] = normalized;
|
|
662
590
|
}
|
|
663
591
|
}
|
|
592
|
+
if (node.type === 'slab' || node.type === 'ceiling') {
|
|
593
|
+
patchedNodes[id] = normalizeSurfaceHoleFields(patchedNodes[id] ?? node);
|
|
594
|
+
}
|
|
664
595
|
// Dormers originally rendered one inline parametric window. Promote that
|
|
665
596
|
// default to a real hosted WindowNode so additional windows can use the
|
|
666
597
|
// regular window tool and inspector without changing the old appearance.
|
|
@@ -706,7 +637,7 @@ function migrateNodes(nodes) {
|
|
|
706
637
|
}
|
|
707
638
|
}
|
|
708
639
|
if (node.type === 'wall') {
|
|
709
|
-
patchedNodes[id] = migrateWallSurfaceMaterials(
|
|
640
|
+
patchedNodes[id] = migrateWallSurfaceMaterials(patchedNodes[id], mintedMaterials);
|
|
710
641
|
}
|
|
711
642
|
// Cabinet v2→v3: node-level `doorStyle` was dead (geometry reads only the
|
|
712
643
|
// per-compartment `doorType`) and was removed from both cabinet schemas;
|
|
@@ -822,30 +753,6 @@ function migrateNodes(nodes) {
|
|
|
822
753
|
if (node.type === 'roof') {
|
|
823
754
|
patchedNodes[id] = migrateRoofSurfaceMaterials(patchedNodes[id]);
|
|
824
755
|
}
|
|
825
|
-
// Legacy: site.children used to hold nested BuildingNode / ItemNode
|
|
826
|
-
// objects (see the SiteNode schema before the children-as-ids fix).
|
|
827
|
-
// Flatten any leftover nested children into ids, and absorb the
|
|
828
|
-
// embedded nodes into the flat map so the rest of the loader can
|
|
829
|
-
// treat the site like every other parent.
|
|
830
|
-
if (node.type === 'site' && Array.isArray(node.children)) {
|
|
831
|
-
let needsFlatten = false;
|
|
832
|
-
const flattened = [];
|
|
833
|
-
for (const child of node.children) {
|
|
834
|
-
if (typeof child === 'string') {
|
|
835
|
-
flattened.push(child);
|
|
836
|
-
}
|
|
837
|
-
else if (child && typeof child === 'object' && typeof child.id === 'string') {
|
|
838
|
-
needsFlatten = true;
|
|
839
|
-
flattened.push(child.id);
|
|
840
|
-
if (!patchedNodes[child.id]) {
|
|
841
|
-
patchedNodes[child.id] = { ...child, parentId: id };
|
|
842
|
-
}
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
if (needsFlatten) {
|
|
846
|
-
patchedNodes[id] = { ...node, children: flattened };
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
756
|
// Level children normalization.
|
|
850
757
|
// Pre-0.9.1 JSONs may carry child IDs that no longer exist in the node
|
|
851
758
|
// map (e.g. elevator IDs that lived under a level before the elevator
|
|
@@ -898,8 +805,28 @@ function migrateNodes(nodes) {
|
|
|
898
805
|
patchedNodes[id] = normalized;
|
|
899
806
|
}
|
|
900
807
|
}
|
|
901
|
-
const
|
|
902
|
-
|
|
808
|
+
const walls = migrateLegacyWallAssemblies(patchedNodes);
|
|
809
|
+
const vertical = migrateVerticalSceneNodes(walls.nodes);
|
|
810
|
+
const rooms = migrateRoomZones(vertical.nodes);
|
|
811
|
+
const ceilings = migrateCeilingRoomLinks(rooms.nodes);
|
|
812
|
+
const legacyOpeningsPrepared = Object.values(ceilings.nodes).some((value) => {
|
|
813
|
+
const node = value;
|
|
814
|
+
return node.type === 'slab' && node.autoFromWalls && !node.plateRole;
|
|
815
|
+
}) &&
|
|
816
|
+
Object.values(ceilings.nodes).some((value) => {
|
|
817
|
+
const node = value;
|
|
818
|
+
return node.type === 'stair' || node.type === 'elevator';
|
|
819
|
+
});
|
|
820
|
+
const plates = migrateFloorPlates(materializeLegacyAutoOpenings(ceilings.nodes, true));
|
|
821
|
+
const slots = migrateSlabSlots(plates.nodes);
|
|
822
|
+
const openings = ensureSceneOpenings(slots.nodes).nodes;
|
|
823
|
+
// M1 before M2: bands move onto geometric faces, then become paint regions.
|
|
824
|
+
const wallFaces = migrateWallFaceKeys(openings);
|
|
825
|
+
const structure = reconcileStructureOnLoad(migrateWallFaceBands(wallFaces.nodes).nodes, vertical.nodes, { legacyOpeningsPrepared });
|
|
826
|
+
return {
|
|
827
|
+
nodes: materializeNodeDefaults(structure.nodes).nodes,
|
|
828
|
+
mintedMaterials,
|
|
829
|
+
};
|
|
903
830
|
}
|
|
904
831
|
function getNodeChildIds(node) {
|
|
905
832
|
if (!('children' in node && Array.isArray(node.children))) {
|
|
@@ -949,23 +876,36 @@ function collectReachableNodeIds(nodes, rootNodeIds) {
|
|
|
949
876
|
}
|
|
950
877
|
return reachable;
|
|
951
878
|
}
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
879
|
+
/** Collection membership lives in `collection.nodeIds`; items alone mirror it in `collectionIds`. */
|
|
880
|
+
function mirrorItemMembership(nodes, collectionId, nodeIds, member) {
|
|
881
|
+
let next = nodes;
|
|
882
|
+
for (const nodeId of nodeIds) {
|
|
883
|
+
const node = next[nodeId];
|
|
884
|
+
if (node?.type !== 'item')
|
|
885
|
+
continue;
|
|
886
|
+
const current = node.collectionIds ?? [];
|
|
887
|
+
if (current.includes(collectionId) === member)
|
|
888
|
+
continue;
|
|
889
|
+
if (next === nodes)
|
|
890
|
+
next = { ...nodes };
|
|
891
|
+
next[nodeId] = {
|
|
892
|
+
...node,
|
|
893
|
+
collectionIds: member
|
|
894
|
+
? [...current, collectionId]
|
|
895
|
+
: current.filter((id) => id !== collectionId),
|
|
896
|
+
};
|
|
968
897
|
}
|
|
898
|
+
return next;
|
|
899
|
+
}
|
|
900
|
+
/**
|
|
901
|
+
* `parts` without the subtrees of `draftIds`, and without the references to them (children,
|
|
902
|
+
* procedural attachments, collections, roots). Returns `parts` itself when there is nothing to drop.
|
|
903
|
+
*/
|
|
904
|
+
function withoutDraftSubtrees(parts, draftIds) {
|
|
905
|
+
const { nodes, rootNodeIds, collections } = parts;
|
|
906
|
+
const transientNodeIds = new Set([...draftIds].filter((id) => Boolean(nodes[id])));
|
|
907
|
+
if (transientNodeIds.size === 0)
|
|
908
|
+
return parts;
|
|
969
909
|
const childIdsByParentId = new Map();
|
|
970
910
|
const addChild = (parentId, childId) => {
|
|
971
911
|
const childIds = childIdsByParentId.get(parentId) ?? new Set();
|
|
@@ -990,7 +930,7 @@ function sceneHistorySnapshotFromState(state) {
|
|
|
990
930
|
pendingIds.push(childId);
|
|
991
931
|
}
|
|
992
932
|
}
|
|
993
|
-
const
|
|
933
|
+
const documentNodes = {};
|
|
994
934
|
for (const [id, sourceNode] of Object.entries(nodes)) {
|
|
995
935
|
if (transientNodeIds.has(id))
|
|
996
936
|
continue;
|
|
@@ -1007,31 +947,76 @@ function sceneHistorySnapshotFromState(state) {
|
|
|
1007
947
|
node = { ...node, attachments };
|
|
1008
948
|
}
|
|
1009
949
|
if (!('children' in node && Array.isArray(node.children))) {
|
|
1010
|
-
|
|
950
|
+
documentNodes[id] = node;
|
|
1011
951
|
continue;
|
|
1012
952
|
}
|
|
1013
953
|
const children = node.children.filter((childId) => !transientNodeIds.has(childId));
|
|
1014
|
-
|
|
954
|
+
documentNodes[id] =
|
|
1015
955
|
children.length === node.children.length ? node : { ...node, children };
|
|
1016
956
|
}
|
|
1017
|
-
const
|
|
957
|
+
const documentCollections = {};
|
|
1018
958
|
for (const [id, collection] of Object.entries(collections)) {
|
|
1019
959
|
const nodeIds = collection.nodeIds.filter((nodeId) => !transientNodeIds.has(nodeId));
|
|
1020
960
|
if (collection.controlNodeId && transientNodeIds.has(collection.controlNodeId)) {
|
|
1021
961
|
const { controlNodeId: _controlNodeId, ...rest } = collection;
|
|
1022
|
-
|
|
962
|
+
documentCollections[id] = { ...rest, nodeIds };
|
|
1023
963
|
}
|
|
1024
964
|
else {
|
|
1025
|
-
|
|
965
|
+
documentCollections[id] =
|
|
1026
966
|
nodeIds.length === collection.nodeIds.length ? collection : { ...collection, nodeIds };
|
|
1027
967
|
}
|
|
1028
968
|
}
|
|
1029
969
|
return {
|
|
1030
|
-
nodes:
|
|
970
|
+
nodes: documentNodes,
|
|
1031
971
|
rootNodeIds: rootNodeIds.filter((id) => !transientNodeIds.has(id)),
|
|
1032
|
-
collections:
|
|
972
|
+
collections: documentCollections,
|
|
973
|
+
};
|
|
974
|
+
}
|
|
975
|
+
function isFreshPlacementNode(node) {
|
|
976
|
+
const metadata = node.metadata;
|
|
977
|
+
return (!!metadata &&
|
|
978
|
+
typeof metadata === 'object' &&
|
|
979
|
+
!Array.isArray(metadata) &&
|
|
980
|
+
metadata.isNew === true);
|
|
981
|
+
}
|
|
982
|
+
/**
|
|
983
|
+
* Fresh placement nodes are renderable drafts, not document history. Excluding their entire
|
|
984
|
+
* subtree here protects both local undo and external commit subscribers. Carried drafts
|
|
985
|
+
* (history-drafts.ts) are kept out the same way.
|
|
986
|
+
*/
|
|
987
|
+
function sceneHistorySnapshotFromState(state) {
|
|
988
|
+
const { nodes, materials, installedPlugins, hasExplicitPluginInstallState } = state;
|
|
989
|
+
const kept = withoutDraftSubtrees(state, [
|
|
990
|
+
...createdSceneHistoryDraftIds(),
|
|
991
|
+
...Object.values(nodes)
|
|
992
|
+
.filter(isFreshPlacementNode)
|
|
993
|
+
.map((node) => node.id),
|
|
994
|
+
]);
|
|
995
|
+
return {
|
|
996
|
+
nodes: withAdoptedDraftsAsOriginal(nodes, kept.nodes),
|
|
997
|
+
rootNodeIds: kept.rootNodeIds,
|
|
998
|
+
collections: kept.collections,
|
|
1033
999
|
materials,
|
|
1034
1000
|
installedPlugins,
|
|
1001
|
+
hasExplicitPluginInstallState,
|
|
1002
|
+
};
|
|
1003
|
+
}
|
|
1004
|
+
/**
|
|
1005
|
+
* The current scene as every save writes it: without the drafts an interaction is carrying —
|
|
1006
|
+
* created carry drafts (history-drafts.ts) and the `drafts` the caller owns — and with adopted
|
|
1007
|
+
* carry drafts as they were before the carry. Never inferred from metadata: committed nodes can
|
|
1008
|
+
* still carry `metadata.isNew`, so only explicitly owned drafts are left out.
|
|
1009
|
+
*/
|
|
1010
|
+
export function getSceneDocument(drafts = []) {
|
|
1011
|
+
const state = useScene.getState();
|
|
1012
|
+
const kept = withoutDraftSubtrees(state, [...createdSceneHistoryDraftIds(), ...drafts]);
|
|
1013
|
+
return {
|
|
1014
|
+
nodes: withAdoptedDraftsAsOriginal(state.nodes, kept.nodes),
|
|
1015
|
+
rootNodeIds: kept.rootNodeIds,
|
|
1016
|
+
collections: kept.collections,
|
|
1017
|
+
materials: state.materials,
|
|
1018
|
+
installedPlugins: state.installedPlugins,
|
|
1019
|
+
hasExplicitPluginInstallState: state.hasExplicitPluginInstallState,
|
|
1035
1020
|
};
|
|
1036
1021
|
}
|
|
1037
1022
|
/**
|
|
@@ -1091,7 +1076,26 @@ function createSceneStore(config) {
|
|
|
1091
1076
|
};
|
|
1092
1077
|
return create()(hydratedConfig);
|
|
1093
1078
|
}
|
|
1094
|
-
function runTemporalJump(target,
|
|
1079
|
+
function runTemporalJump(target, restore) {
|
|
1080
|
+
const draftsBefore = useScene.getState().nodes;
|
|
1081
|
+
const restoreDrafts = () => {
|
|
1082
|
+
const current = useScene.getState().nodes;
|
|
1083
|
+
const nodes = retainSceneAnnotations(draftsBefore, withDraftsRestored(draftsBefore, current) ?? current);
|
|
1084
|
+
if (nodes === current)
|
|
1085
|
+
return;
|
|
1086
|
+
// The carry's own state, not a new step: a tracked write here would clear redo.
|
|
1087
|
+
const pause = beginSceneHistoryPauseSession(useScene);
|
|
1088
|
+
try {
|
|
1089
|
+
useScene.setState({ nodes });
|
|
1090
|
+
}
|
|
1091
|
+
finally {
|
|
1092
|
+
pause.end();
|
|
1093
|
+
}
|
|
1094
|
+
};
|
|
1095
|
+
runTemporalJumpOnly(target, () => runAsSceneHistoryRestore(restore));
|
|
1096
|
+
restoreDrafts();
|
|
1097
|
+
}
|
|
1098
|
+
function runTemporalJumpOnly(target, jump) {
|
|
1095
1099
|
if (!target?.nodes) {
|
|
1096
1100
|
jump();
|
|
1097
1101
|
return;
|
|
@@ -1104,7 +1108,6 @@ function runTemporalJump(target, jump) {
|
|
|
1104
1108
|
const next = target.nodes[nodeId];
|
|
1105
1109
|
if (previous === next)
|
|
1106
1110
|
continue;
|
|
1107
|
-
// Structural hierarchy changes keep the full-level reconciliation fallback.
|
|
1108
1111
|
if ([previous, next].some((node) => node && ['site', 'building', 'level'].includes(node.type))) {
|
|
1109
1112
|
jump();
|
|
1110
1113
|
return;
|
|
@@ -1136,6 +1139,7 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1136
1139
|
readOnly: false,
|
|
1137
1140
|
setReadOnly: (readOnly) => set({ readOnly }),
|
|
1138
1141
|
unloadScene: () => {
|
|
1142
|
+
runSceneWriteGuards();
|
|
1139
1143
|
invalidatePendingHydration();
|
|
1140
1144
|
set({
|
|
1141
1145
|
hydrationToken: null,
|
|
@@ -1157,11 +1161,12 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1157
1161
|
set({ installedPlugins, hasExplicitPluginInstallState });
|
|
1158
1162
|
},
|
|
1159
1163
|
setScene: (nodes, rootNodeIds, extra) => {
|
|
1164
|
+
runSceneWriteGuards();
|
|
1160
1165
|
// Apply backward compatibility migrations
|
|
1161
1166
|
const { nodes: patchedNodes, mintedMaterials } = migrateNodes(nodes);
|
|
1162
|
-
// Scene materials minted by the
|
|
1163
|
-
// loaded palette
|
|
1164
|
-
//
|
|
1167
|
+
// Scene materials minted by the legacy→slots migrations join the
|
|
1168
|
+
// loaded palette. Their ids are content-derived, so an existing entry
|
|
1169
|
+
// with the same id (the hosted authority minted it) is the same material.
|
|
1165
1170
|
const materials = { ...mintedMaterials, ...(extra?.materials ?? {}) };
|
|
1166
1171
|
// Remove orphans: nodes whose parentId points to a non-existent node
|
|
1167
1172
|
const cleanedNodes = { ...patchedNodes };
|
|
@@ -1198,37 +1203,22 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1198
1203
|
installedPlugins: Array.from(new Set(extra?.installedPlugins ?? [])),
|
|
1199
1204
|
hasExplicitPluginInstallState: extra?.hasExplicitPluginInstallState ?? false,
|
|
1200
1205
|
});
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1206
|
+
if (!get().readOnly &&
|
|
1207
|
+
Object.values(get().nodes).some((node) => node.type === 'stair')) {
|
|
1208
|
+
queueSceneNormalization(() => {
|
|
1209
|
+
if (get().hydrationId !== hydrationId)
|
|
1210
|
+
return;
|
|
1211
|
+
const { updates } = ensureSceneOpenings(get().nodes);
|
|
1212
|
+
if (!updates.length)
|
|
1213
|
+
return;
|
|
1214
|
+
pauseSceneHistory(useScene);
|
|
1215
|
+
try {
|
|
1216
|
+
get().updateNodes(updates);
|
|
1211
1217
|
}
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
}
|
|
1216
|
-
if (hydratedNodes.some((node) => node.type === 'stair')) {
|
|
1217
|
-
// Spatial-grid subscribers must settle first. Owning this pass
|
|
1218
|
-
// here also covers opening systems that mount after the load.
|
|
1219
|
-
queueSceneNormalization(() => {
|
|
1220
|
-
if (get().hydrationId !== hydrationId)
|
|
1221
|
-
return;
|
|
1222
|
-
pauseSceneHistory(useScene);
|
|
1223
|
-
try {
|
|
1224
|
-
applyNormalization(syncStairRises(get().nodes));
|
|
1225
|
-
applyNormalization(syncAutoStairOpenings(get().nodes));
|
|
1226
|
-
}
|
|
1227
|
-
finally {
|
|
1228
|
-
resumeSceneHistory(useScene);
|
|
1229
|
-
}
|
|
1230
|
-
});
|
|
1231
|
-
}
|
|
1218
|
+
finally {
|
|
1219
|
+
resumeSceneHistory(useScene);
|
|
1220
|
+
}
|
|
1221
|
+
});
|
|
1232
1222
|
}
|
|
1233
1223
|
// Mark all nodes as dirty to trigger re-validation
|
|
1234
1224
|
Object.values(get().nodes).forEach((node) => {
|
|
@@ -1281,7 +1271,7 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1281
1271
|
parentId: building.id,
|
|
1282
1272
|
level: 0,
|
|
1283
1273
|
children: [],
|
|
1284
|
-
height:
|
|
1274
|
+
height: DEFAULT_LEVEL_HEIGHT,
|
|
1285
1275
|
});
|
|
1286
1276
|
// Define all nodes flat
|
|
1287
1277
|
const nodes = {
|
|
@@ -1303,33 +1293,24 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1303
1293
|
clearDirty: (id) => {
|
|
1304
1294
|
get().dirtyNodes.delete(id);
|
|
1305
1295
|
},
|
|
1306
|
-
createNodes: (ops) => nodeActions.createNodesAction(set, get, ops),
|
|
1307
|
-
createNode: (node, parentId) => nodeActions.createNodesAction(set, get, [{ node, parentId }]),
|
|
1308
|
-
applyNodeChanges: (changes) => nodeActions.applyNodeChangesAction(set, get, changes),
|
|
1309
|
-
updateNodes: (updates) => nodeActions.updateNodesAction(set, get, updates),
|
|
1310
|
-
updateNode: (id, data) => nodeActions.updateNodesAction(set, get, [{ id, data }]),
|
|
1296
|
+
createNodes: (ops, options) => nodeActions.createNodesAction(set, get, ops, options),
|
|
1297
|
+
createNode: (node, parentId, options) => nodeActions.createNodesAction(set, get, [{ node, parentId }], options),
|
|
1298
|
+
applyNodeChanges: (changes, options) => nodeActions.applyNodeChangesAction(set, get, changes, options),
|
|
1299
|
+
updateNodes: (updates, options) => nodeActions.updateNodesAction(set, get, updates, options),
|
|
1300
|
+
updateNode: (id, data, options) => nodeActions.updateNodesAction(set, get, [{ id, data }], options),
|
|
1301
|
+
detachDerivedNode: (id, data) => nodeActions.detachDerivedNodeAction(set, get, id, data),
|
|
1311
1302
|
// --- DELETE ---
|
|
1312
|
-
deleteNodes: (ids) => nodeActions.deleteNodesAction(set, get, ids),
|
|
1313
|
-
deleteNode: (id) => nodeActions.deleteNodesAction(set, get, [id]),
|
|
1303
|
+
deleteNodes: (ids, options) => nodeActions.deleteNodesAction(set, get, ids, options),
|
|
1304
|
+
deleteNode: (id, options) => nodeActions.deleteNodesAction(set, get, [id], options),
|
|
1314
1305
|
// --- COLLECTIONS ---
|
|
1315
1306
|
createCollection: (name, nodeIds = []) => {
|
|
1316
1307
|
if (get().readOnly)
|
|
1317
1308
|
return '';
|
|
1318
1309
|
const id = generateCollectionId();
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
const nextNodes = { ...state.nodes };
|
|
1324
|
-
for (const nodeId of nodeIds) {
|
|
1325
|
-
const node = nextNodes[nodeId];
|
|
1326
|
-
if (!node)
|
|
1327
|
-
continue;
|
|
1328
|
-
const existing = ('collectionIds' in node ? node.collectionIds : undefined) ?? [];
|
|
1329
|
-
nextNodes[nodeId] = { ...node, collectionIds: [...existing, id] };
|
|
1330
|
-
}
|
|
1331
|
-
return { collections: nextCollections, nodes: nextNodes };
|
|
1332
|
-
});
|
|
1310
|
+
set((state) => ({
|
|
1311
|
+
collections: { ...state.collections, [id]: { id, name, nodeIds: [...nodeIds] } },
|
|
1312
|
+
nodes: mirrorItemMembership(state.nodes, id, nodeIds, true),
|
|
1313
|
+
}));
|
|
1333
1314
|
return id;
|
|
1334
1315
|
},
|
|
1335
1316
|
deleteCollection: (id) => {
|
|
@@ -1339,18 +1320,10 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1339
1320
|
const col = state.collections[id];
|
|
1340
1321
|
const nextCollections = { ...state.collections };
|
|
1341
1322
|
delete nextCollections[id];
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
if (!(node && 'collectionIds' in node))
|
|
1347
|
-
continue;
|
|
1348
|
-
nextNodes[nodeId] = {
|
|
1349
|
-
...node,
|
|
1350
|
-
collectionIds: node.collectionIds.filter((cid) => cid !== id),
|
|
1351
|
-
};
|
|
1352
|
-
}
|
|
1353
|
-
return { collections: nextCollections, nodes: nextNodes };
|
|
1323
|
+
return {
|
|
1324
|
+
collections: nextCollections,
|
|
1325
|
+
nodes: mirrorItemMembership(state.nodes, id, col?.nodeIds ?? [], false),
|
|
1326
|
+
};
|
|
1354
1327
|
});
|
|
1355
1328
|
},
|
|
1356
1329
|
updateCollection: (id, data) => {
|
|
@@ -1363,50 +1336,38 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1363
1336
|
return { collections: { ...state.collections, [id]: { ...col, ...data } } };
|
|
1364
1337
|
});
|
|
1365
1338
|
},
|
|
1366
|
-
addToCollection: (id,
|
|
1339
|
+
addToCollection: (id, nodeIds) => {
|
|
1367
1340
|
if (get().readOnly)
|
|
1368
1341
|
return;
|
|
1369
1342
|
set((state) => {
|
|
1370
1343
|
const col = state.collections[id];
|
|
1371
|
-
|
|
1344
|
+
const added = nodeIds.filter((nodeId) => !col?.nodeIds.includes(nodeId));
|
|
1345
|
+
if (!col || added.length === 0)
|
|
1372
1346
|
return state;
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
return { collections: nextCollections };
|
|
1380
|
-
const existing = ('collectionIds' in node ? node.collectionIds : undefined) ?? [];
|
|
1381
|
-
const nextNodes = {
|
|
1382
|
-
...state.nodes,
|
|
1383
|
-
[nodeId]: { ...node, collectionIds: [...existing, id] },
|
|
1347
|
+
return {
|
|
1348
|
+
collections: {
|
|
1349
|
+
...state.collections,
|
|
1350
|
+
[id]: { ...col, nodeIds: [...col.nodeIds, ...added] },
|
|
1351
|
+
},
|
|
1352
|
+
nodes: mirrorItemMembership(state.nodes, id, added, true),
|
|
1384
1353
|
};
|
|
1385
|
-
return { collections: nextCollections, nodes: nextNodes };
|
|
1386
1354
|
});
|
|
1387
1355
|
},
|
|
1388
|
-
removeFromCollection: (id,
|
|
1356
|
+
removeFromCollection: (id, nodeIds) => {
|
|
1389
1357
|
if (get().readOnly)
|
|
1390
1358
|
return;
|
|
1391
1359
|
set((state) => {
|
|
1392
1360
|
const col = state.collections[id];
|
|
1393
|
-
|
|
1361
|
+
const removed = nodeIds.filter((nodeId) => col?.nodeIds.includes(nodeId));
|
|
1362
|
+
if (!col || removed.length === 0)
|
|
1394
1363
|
return state;
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
const node = state.nodes[nodeId];
|
|
1400
|
-
if (!(node && 'collectionIds' in node))
|
|
1401
|
-
return { collections: nextCollections };
|
|
1402
|
-
const nextNodes = {
|
|
1403
|
-
...state.nodes,
|
|
1404
|
-
[nodeId]: {
|
|
1405
|
-
...node,
|
|
1406
|
-
collectionIds: node.collectionIds.filter((cid) => cid !== id),
|
|
1364
|
+
return {
|
|
1365
|
+
collections: {
|
|
1366
|
+
...state.collections,
|
|
1367
|
+
[id]: { ...col, nodeIds: col.nodeIds.filter((nodeId) => !removed.includes(nodeId)) },
|
|
1407
1368
|
},
|
|
1369
|
+
nodes: mirrorItemMembership(state.nodes, id, removed, false),
|
|
1408
1370
|
};
|
|
1409
|
-
return { collections: nextCollections, nodes: nextNodes };
|
|
1410
1371
|
});
|
|
1411
1372
|
},
|
|
1412
1373
|
// --- SCENE MATERIALS ---
|
|
@@ -1438,7 +1399,7 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1438
1399
|
},
|
|
1439
1400
|
}), {
|
|
1440
1401
|
partialize: (state) => sceneHistorySnapshotFromState(state),
|
|
1441
|
-
equality: (pastState, currentState) => areSceneSnapshotsEqual(pastState, currentState),
|
|
1402
|
+
equality: (pastState, currentState) => areSceneSnapshotsEqual({ ...pastState, nodes: withoutSceneAnnotations(pastState.nodes) }, { ...currentState, nodes: withoutSceneAnnotations(currentState.nodes) }),
|
|
1442
1403
|
onSave: (pastState, currentState) => {
|
|
1443
1404
|
notifySceneCommit({
|
|
1444
1405
|
origin: 'local',
|
|
@@ -1450,8 +1411,14 @@ const useScene = createSceneStore(temporal((set, get) => ({
|
|
|
1450
1411
|
const state = config(set, get, store);
|
|
1451
1412
|
return {
|
|
1452
1413
|
...state,
|
|
1453
|
-
undo: (steps = 1) =>
|
|
1454
|
-
|
|
1414
|
+
undo: (steps = 1) => {
|
|
1415
|
+
runSceneWriteGuards();
|
|
1416
|
+
return runTemporalJump(get().pastStates.slice().splice(-steps, steps)[0], () => state.undo(steps));
|
|
1417
|
+
},
|
|
1418
|
+
redo: (steps = 1) => {
|
|
1419
|
+
runSceneWriteGuards();
|
|
1420
|
+
return runTemporalJump(get().futureStates.slice().splice(-steps, steps)[0], () => state.redo(steps));
|
|
1421
|
+
},
|
|
1455
1422
|
};
|
|
1456
1423
|
},
|
|
1457
1424
|
limit: 50, // Limit to last 50 actions
|
|
@@ -1467,6 +1434,23 @@ const invalidateForLiveState = () => {
|
|
|
1467
1434
|
useLiveNodeOverrides.subscribe(invalidateForLiveState);
|
|
1468
1435
|
useLiveTransforms.subscribe(invalidateForLiveState);
|
|
1469
1436
|
useScene.subscribe(invalidateForLiveState);
|
|
1437
|
+
// Systems rebuild a node's geometry only when it is dirty, so a preview that
|
|
1438
|
+
// drops its override without marking the node left it drawn at the preview
|
|
1439
|
+
// (a cancelled wall move's floor still pushed out). Whoever clears an
|
|
1440
|
+
// override, or one of its fields, the node rebuilds from the scene.
|
|
1441
|
+
useLiveNodeOverrides.subscribe(function markClearedOverridesDirty(state, previous) {
|
|
1442
|
+
if (state.overrides === previous.overrides)
|
|
1443
|
+
return;
|
|
1444
|
+
let scene = null;
|
|
1445
|
+
for (const [id, before] of previous.overrides) {
|
|
1446
|
+
const after = state.overrides.get(id);
|
|
1447
|
+
if (after === before || (after && Object.keys(before).every((key) => key in after)))
|
|
1448
|
+
continue;
|
|
1449
|
+
scene ??= useScene.getState();
|
|
1450
|
+
if (scene.nodes[id])
|
|
1451
|
+
scene.markDirty(id);
|
|
1452
|
+
}
|
|
1453
|
+
});
|
|
1470
1454
|
export default useScene;
|
|
1471
1455
|
let sceneReadOnlyLeaseCount = 0;
|
|
1472
1456
|
let sceneReadOnlyLeaseBaseline = false;
|
|
@@ -1523,7 +1507,8 @@ function sceneOperationPatchHasLiveConflict(beforeState, changes) {
|
|
|
1523
1507
|
return false;
|
|
1524
1508
|
}
|
|
1525
1509
|
function areScenePatchValuesEqual(left, right) {
|
|
1526
|
-
|
|
1510
|
+
// Compensation crosses JSON, which serializes both signed zeros as 0.
|
|
1511
|
+
if (left === right)
|
|
1527
1512
|
return true;
|
|
1528
1513
|
if (typeof left !== typeof right || left === null || right === null)
|
|
1529
1514
|
return false;
|
|
@@ -1537,8 +1522,10 @@ function areScenePatchValuesEqual(left, right) {
|
|
|
1537
1522
|
return false;
|
|
1538
1523
|
const leftRecord = left;
|
|
1539
1524
|
const rightRecord = right;
|
|
1540
|
-
|
|
1541
|
-
|
|
1525
|
+
// Recorded compensation nodes have crossed JSON, which omits undefined properties.
|
|
1526
|
+
const leftKeys = Object.keys(leftRecord).filter((key) => leftRecord[key] !== undefined);
|
|
1527
|
+
const rightKeys = Object.keys(rightRecord).filter((key) => rightRecord[key] !== undefined);
|
|
1528
|
+
if (leftKeys.length !== rightKeys.length)
|
|
1542
1529
|
return false;
|
|
1543
1530
|
return leftKeys.every((key) => Object.hasOwn(rightRecord, key) &&
|
|
1544
1531
|
areScenePatchValuesEqual(leftRecord[key], rightRecord[key]));
|
|
@@ -1617,7 +1604,7 @@ function sceneOperationPatchNextState(beforeState, changes) {
|
|
|
1617
1604
|
!Number.isSafeInteger(change.position) ||
|
|
1618
1605
|
change.position < 0 ||
|
|
1619
1606
|
siblings?.[change.position] !== id ||
|
|
1620
|
-
!areScenePatchValuesEqual(current, change.node)) {
|
|
1607
|
+
!areScenePatchValuesEqual(withoutSceneNodeAnnotations(current), withoutSceneNodeAnnotations(change.node))) {
|
|
1621
1608
|
return null;
|
|
1622
1609
|
}
|
|
1623
1610
|
deleteIds.add(id);
|
|
@@ -1626,11 +1613,6 @@ function sceneOperationPatchNextState(beforeState, changes) {
|
|
|
1626
1613
|
if (deleteIds.has(id))
|
|
1627
1614
|
return null;
|
|
1628
1615
|
}
|
|
1629
|
-
for (const node of Object.values(beforeState.nodes)) {
|
|
1630
|
-
const parentId = node.parentId ?? null;
|
|
1631
|
-
if (parentId && deleteIds.has(parentId) && !deleteIds.has(node.id))
|
|
1632
|
-
return null;
|
|
1633
|
-
}
|
|
1634
1616
|
const nextNodes = { ...beforeState.nodes };
|
|
1635
1617
|
let nextRootNodeIds = deleteIds.size > 0
|
|
1636
1618
|
? beforeState.rootNodeIds.filter((id) => !deleteIds.has(id))
|
|
@@ -1665,8 +1647,7 @@ function sceneOperationPatchNextState(beforeState, changes) {
|
|
|
1665
1647
|
if (!parent)
|
|
1666
1648
|
return null;
|
|
1667
1649
|
if (createIds.has(parentId)) {
|
|
1668
|
-
if (!('children' in parent) ||
|
|
1669
|
-
!Array.isArray(parent.children) ||
|
|
1650
|
+
if (!('children' in parent && Array.isArray(parent.children)) ||
|
|
1670
1651
|
parent.children[change.position] !== change.node.id) {
|
|
1671
1652
|
return null;
|
|
1672
1653
|
}
|
|
@@ -1676,6 +1657,66 @@ function sceneOperationPatchNextState(beforeState, changes) {
|
|
|
1676
1657
|
placements.push(change);
|
|
1677
1658
|
existingParentCreates.set(parentId, placements);
|
|
1678
1659
|
}
|
|
1660
|
+
for (const { id, data, removeFields } of changes.nodeUpdates) {
|
|
1661
|
+
const node = nextNodes[id];
|
|
1662
|
+
if (!node ||
|
|
1663
|
+
createIds.has(id) ||
|
|
1664
|
+
deleteIds.has(id) ||
|
|
1665
|
+
updateIds.has(id) ||
|
|
1666
|
+
('id' in data && data.id !== node.id) ||
|
|
1667
|
+
('type' in data && data.type !== node.type) ||
|
|
1668
|
+
('object' in data && data.object !== node.object) ||
|
|
1669
|
+
removeFields.some((field) => field === 'id' || field === 'object' || field === 'type' || Object.hasOwn(data, field))) {
|
|
1670
|
+
return null;
|
|
1671
|
+
}
|
|
1672
|
+
updateIds.add(id);
|
|
1673
|
+
let candidate = { ...node };
|
|
1674
|
+
for (const [field, value] of Object.entries(data)) {
|
|
1675
|
+
const written = writeSceneNodeField(candidate, field, value, true);
|
|
1676
|
+
if (!written)
|
|
1677
|
+
return null;
|
|
1678
|
+
candidate = written;
|
|
1679
|
+
}
|
|
1680
|
+
for (const field of removeFields) {
|
|
1681
|
+
const written = writeSceneNodeField(candidate, field, undefined, false);
|
|
1682
|
+
if (!written)
|
|
1683
|
+
return null;
|
|
1684
|
+
candidate = written;
|
|
1685
|
+
}
|
|
1686
|
+
const validated = parseSceneOperationPatchNode(candidate);
|
|
1687
|
+
if (!validated ||
|
|
1688
|
+
validated.id !== id ||
|
|
1689
|
+
validated.type !== node.type ||
|
|
1690
|
+
validated.object !== node.object) {
|
|
1691
|
+
return null;
|
|
1692
|
+
}
|
|
1693
|
+
nextNodes[id] = candidate;
|
|
1694
|
+
}
|
|
1695
|
+
for (const id of updateIds) {
|
|
1696
|
+
const previousParent = beforeState.nodes[id]?.parentId;
|
|
1697
|
+
const parentId = nextNodes[id]?.parentId;
|
|
1698
|
+
if (previousParent === parentId)
|
|
1699
|
+
continue;
|
|
1700
|
+
if (previousParent) {
|
|
1701
|
+
const parent = nextNodes[previousParent];
|
|
1702
|
+
if (parent && 'children' in parent && Array.isArray(parent.children))
|
|
1703
|
+
nextNodes[previousParent] = {
|
|
1704
|
+
...parent,
|
|
1705
|
+
children: parent.children.filter((child) => child !== id),
|
|
1706
|
+
};
|
|
1707
|
+
}
|
|
1708
|
+
else
|
|
1709
|
+
nextRootNodeIds = nextRootNodeIds.filter((child) => child !== id);
|
|
1710
|
+
if (parentId) {
|
|
1711
|
+
const parent = nextNodes[parentId];
|
|
1712
|
+
if (!(parent && 'children' in parent && Array.isArray(parent.children)))
|
|
1713
|
+
return null;
|
|
1714
|
+
if (!parent.children.includes(id))
|
|
1715
|
+
nextNodes[parentId] = { ...parent, children: [...parent.children, id] };
|
|
1716
|
+
}
|
|
1717
|
+
else if (!nextRootNodeIds.includes(id))
|
|
1718
|
+
nextRootNodeIds = [...nextRootNodeIds, id];
|
|
1719
|
+
}
|
|
1679
1720
|
const insertedRoots = insertSceneStructuralPlacements(nextRootNodeIds, rootCreates);
|
|
1680
1721
|
if (!insertedRoots)
|
|
1681
1722
|
return null;
|
|
@@ -1689,6 +1730,10 @@ function sceneOperationPatchNextState(beforeState, changes) {
|
|
|
1689
1730
|
return null;
|
|
1690
1731
|
nextNodes[parentId] = { ...parent, children };
|
|
1691
1732
|
}
|
|
1733
|
+
for (const node of Object.values(nextNodes)) {
|
|
1734
|
+
if (node.parentId && deleteIds.has(node.parentId))
|
|
1735
|
+
return null;
|
|
1736
|
+
}
|
|
1692
1737
|
for (const change of parsedCreates) {
|
|
1693
1738
|
const parentId = change.node.parentId ?? null;
|
|
1694
1739
|
const siblings = structuralSiblingIds(nextNodes, nextRootNodeIds, parentId);
|
|
@@ -1701,31 +1746,6 @@ function sceneOperationPatchNextState(beforeState, changes) {
|
|
|
1701
1746
|
return null;
|
|
1702
1747
|
}
|
|
1703
1748
|
}
|
|
1704
|
-
for (const { id, data, removeFields } of changes.nodeUpdates) {
|
|
1705
|
-
const node = nextNodes[id];
|
|
1706
|
-
if (!node ||
|
|
1707
|
-
createIds.has(id) ||
|
|
1708
|
-
deleteIds.has(id) ||
|
|
1709
|
-
updateIds.has(id) ||
|
|
1710
|
-
('id' in data && data.id !== node.id) ||
|
|
1711
|
-
('type' in data && data.type !== node.type) ||
|
|
1712
|
-
('object' in data && data.object !== node.object) ||
|
|
1713
|
-
removeFields.some((field) => field === 'id' || field === 'object' || field === 'type' || Object.hasOwn(data, field))) {
|
|
1714
|
-
return null;
|
|
1715
|
-
}
|
|
1716
|
-
updateIds.add(id);
|
|
1717
|
-
const candidate = { ...node, ...data };
|
|
1718
|
-
for (const field of removeFields)
|
|
1719
|
-
delete candidate[field];
|
|
1720
|
-
const validated = parseSceneOperationPatchNode(candidate);
|
|
1721
|
-
if (!validated ||
|
|
1722
|
-
validated.id !== id ||
|
|
1723
|
-
validated.type !== node.type ||
|
|
1724
|
-
validated.object !== node.object) {
|
|
1725
|
-
return null;
|
|
1726
|
-
}
|
|
1727
|
-
nextNodes[id] = candidate;
|
|
1728
|
-
}
|
|
1729
1749
|
const materials = changes.materialChanges.length > 0 ? { ...beforeState.materials } : beforeState.materials;
|
|
1730
1750
|
for (const { id, material } of changes.materialChanges) {
|
|
1731
1751
|
if (materialIds.has(id) ||
|
|
@@ -1738,16 +1758,88 @@ function sceneOperationPatchNextState(beforeState, changes) {
|
|
|
1738
1758
|
else
|
|
1739
1759
|
materials[id] = material;
|
|
1740
1760
|
}
|
|
1741
|
-
|
|
1761
|
+
const collectionChanges = changes.collectionChanges ?? [];
|
|
1762
|
+
const collections = collectionChanges.length > 0 ? { ...beforeState.collections } : beforeState.collections;
|
|
1763
|
+
const collectionIds = new Set();
|
|
1764
|
+
for (const { id, collection } of collectionChanges) {
|
|
1765
|
+
if (collectionIds.has(id) || (collection !== null && collection.id !== id))
|
|
1766
|
+
return null;
|
|
1767
|
+
collectionIds.add(id);
|
|
1768
|
+
if (collection === null)
|
|
1769
|
+
delete collections[id];
|
|
1770
|
+
else
|
|
1771
|
+
collections[id] = collection;
|
|
1772
|
+
}
|
|
1773
|
+
const pluginChanges = changes.pluginChanges ?? [];
|
|
1774
|
+
if (changes.pluginInstallState) {
|
|
1775
|
+
return {
|
|
1776
|
+
collections,
|
|
1777
|
+
materials,
|
|
1778
|
+
nodes: nextNodes,
|
|
1779
|
+
rootNodeIds: nextRootNodeIds,
|
|
1780
|
+
installedPlugins: [...changes.pluginInstallState.installedPlugins],
|
|
1781
|
+
hasExplicitPluginInstallState: changes.pluginInstallState.explicit,
|
|
1782
|
+
};
|
|
1783
|
+
}
|
|
1784
|
+
if (pluginChanges.length === 0) {
|
|
1785
|
+
return { collections, materials, nodes: nextNodes, rootNodeIds: nextRootNodeIds };
|
|
1786
|
+
}
|
|
1787
|
+
const installedPlugins = new Set(beforeState.installedPlugins);
|
|
1788
|
+
const pluginIds = new Set();
|
|
1789
|
+
for (const { id, installed } of pluginChanges) {
|
|
1790
|
+
if (!id || pluginIds.has(id))
|
|
1791
|
+
return null;
|
|
1792
|
+
pluginIds.add(id);
|
|
1793
|
+
if (installed)
|
|
1794
|
+
installedPlugins.add(id);
|
|
1795
|
+
else
|
|
1796
|
+
installedPlugins.delete(id);
|
|
1797
|
+
}
|
|
1798
|
+
return {
|
|
1799
|
+
collections,
|
|
1800
|
+
materials,
|
|
1801
|
+
nodes: nextNodes,
|
|
1802
|
+
rootNodeIds: nextRootNodeIds,
|
|
1803
|
+
installedPlugins: Array.from(installedPlugins),
|
|
1804
|
+
// A shared install list is a decision someone made, so hosts must not
|
|
1805
|
+
// re-add their default plugins on top of it.
|
|
1806
|
+
hasExplicitPluginInstallState: true,
|
|
1807
|
+
};
|
|
1742
1808
|
}
|
|
1743
|
-
export function applySceneOperationPatch(changes) {
|
|
1809
|
+
export function applySceneOperationPatch(changes, options = {}) {
|
|
1810
|
+
runSceneWriteGuards();
|
|
1744
1811
|
const beforeState = useScene.getState();
|
|
1745
1812
|
if (changes.nodeUpdates.length === 0 &&
|
|
1746
1813
|
changes.materialChanges.length === 0 &&
|
|
1747
1814
|
changes.nodeCreates.length === 0 &&
|
|
1748
|
-
changes.nodeDeletes.length === 0
|
|
1815
|
+
changes.nodeDeletes.length === 0 &&
|
|
1816
|
+
!changes.pluginChanges?.length &&
|
|
1817
|
+
!changes.collectionChanges?.length &&
|
|
1818
|
+
!changes.pluginInstallState) {
|
|
1749
1819
|
return false;
|
|
1750
1820
|
}
|
|
1821
|
+
if (options.undoable &&
|
|
1822
|
+
!(useScene.temporal.getState().isTracking &&
|
|
1823
|
+
getSceneHistoryPauseDepth() === 0 &&
|
|
1824
|
+
!hasSceneHistoryDrafts())) {
|
|
1825
|
+
return false;
|
|
1826
|
+
}
|
|
1827
|
+
if (options.annotation &&
|
|
1828
|
+
(options.undoable ||
|
|
1829
|
+
beforeState.readOnly ||
|
|
1830
|
+
!useScene.temporal.getState().isTracking ||
|
|
1831
|
+
getSceneHistoryPauseDepth() > 0 ||
|
|
1832
|
+
hasSceneHistoryDrafts()))
|
|
1833
|
+
return false;
|
|
1834
|
+
if (options.annotation &&
|
|
1835
|
+
(changes.nodeCreates.length ||
|
|
1836
|
+
changes.nodeDeletes.length ||
|
|
1837
|
+
changes.materialChanges.length ||
|
|
1838
|
+
changes.pluginChanges?.length ||
|
|
1839
|
+
changes.collectionChanges?.length ||
|
|
1840
|
+
changes.pluginInstallState ||
|
|
1841
|
+
changes.nodeUpdates.some(({ data, removeFields }) => removeFields.length || Object.keys(data).some((field) => field !== 'source.images'))))
|
|
1842
|
+
return false;
|
|
1751
1843
|
if (sceneOperationPatchHasLiveConflict(beforeState, changes))
|
|
1752
1844
|
return false;
|
|
1753
1845
|
const next = sceneOperationPatchNextState(beforeState, changes);
|
|
@@ -1758,7 +1850,7 @@ export function applySceneOperationPatch(changes) {
|
|
|
1758
1850
|
if (shouldScopeHistoryPause)
|
|
1759
1851
|
pauseSceneHistory(useScene);
|
|
1760
1852
|
try {
|
|
1761
|
-
useScene.setState(next);
|
|
1853
|
+
runAsRemoteSceneChange(() => useScene.setState(next));
|
|
1762
1854
|
}
|
|
1763
1855
|
finally {
|
|
1764
1856
|
if (shouldScopeHistoryPause)
|
|
@@ -1777,6 +1869,12 @@ export function applySceneOperationPatch(changes) {
|
|
|
1777
1869
|
}
|
|
1778
1870
|
if (areSceneSnapshotsEqual(before, current))
|
|
1779
1871
|
return false;
|
|
1872
|
+
if (options.undoable) {
|
|
1873
|
+
useScene.temporal.setState(({ pastStates }) => ({
|
|
1874
|
+
pastStates: [...pastStates, before],
|
|
1875
|
+
futureStates: [],
|
|
1876
|
+
}));
|
|
1877
|
+
}
|
|
1780
1878
|
for (const id of touchedNodeIds) {
|
|
1781
1879
|
if (current.nodes[id])
|
|
1782
1880
|
currentState.markDirty(id);
|
|
@@ -1816,10 +1914,22 @@ export function applySceneOperationPatch(changes) {
|
|
|
1816
1914
|
currentState.markDirty(node.parentId);
|
|
1817
1915
|
}
|
|
1818
1916
|
}
|
|
1917
|
+
if (changes.pluginChanges?.length || changes.pluginInstallState) {
|
|
1918
|
+
for (const node of Object.values(current.nodes)) {
|
|
1919
|
+
if (!getNodePluginId(node.type))
|
|
1920
|
+
continue;
|
|
1921
|
+
if (!isNodeKindEnabled(node.type, currentState.installedPlugins)) {
|
|
1922
|
+
currentState.clearDirty(node.id);
|
|
1923
|
+
}
|
|
1924
|
+
else if (!isNodeKindEnabled(node.type, beforeState.installedPlugins)) {
|
|
1925
|
+
currentState.markDirty(node.id);
|
|
1926
|
+
}
|
|
1927
|
+
}
|
|
1928
|
+
}
|
|
1819
1929
|
for (const { node } of changes.nodeDeletes)
|
|
1820
1930
|
currentState.clearDirty(node.id);
|
|
1821
1931
|
notifySceneCommit({
|
|
1822
|
-
origin: 'host',
|
|
1932
|
+
origin: options.annotation ? 'local' : 'host',
|
|
1823
1933
|
before,
|
|
1824
1934
|
current,
|
|
1825
1935
|
});
|
|
@@ -1833,20 +1943,22 @@ export function applyScenePatch(changes) {
|
|
|
1833
1943
|
});
|
|
1834
1944
|
}
|
|
1835
1945
|
export function applySceneSnapshot(snapshot, options) {
|
|
1946
|
+
runSceneWriteGuards();
|
|
1836
1947
|
const before = sceneHistorySnapshotFromState(useScene.getState());
|
|
1837
1948
|
const temporalState = useScene.temporal.getState();
|
|
1838
|
-
if (!temporalState.isTracking || getSceneHistoryPauseDepth() > 0) {
|
|
1949
|
+
if (!temporalState.isTracking || getSceneHistoryPauseDepth() > 0 || hasSceneHistoryDrafts()) {
|
|
1839
1950
|
throw new Error('Cannot replace the scene snapshot during an active interaction');
|
|
1840
1951
|
}
|
|
1841
1952
|
useLiveNodeOverrides.getState().clearAll();
|
|
1842
1953
|
useLiveTransforms.getState().clearAll();
|
|
1843
1954
|
pauseSceneHistory(useScene);
|
|
1844
1955
|
try {
|
|
1845
|
-
useScene.getState().setScene(snapshot.nodes, snapshot.rootNodeIds, {
|
|
1956
|
+
runAsRemoteSceneChange(() => useScene.getState().setScene(snapshot.nodes, snapshot.rootNodeIds, {
|
|
1846
1957
|
collections: snapshot.collections,
|
|
1847
1958
|
installedPlugins: snapshot.installedPlugins,
|
|
1959
|
+
hasExplicitPluginInstallState: options.explicitPluginInstallState,
|
|
1848
1960
|
materials: snapshot.materials,
|
|
1849
|
-
});
|
|
1961
|
+
}));
|
|
1850
1962
|
useScene.temporal.getState().clear();
|
|
1851
1963
|
}
|
|
1852
1964
|
finally {
|
|
@@ -1861,8 +1973,37 @@ export function applySceneSnapshot(snapshot, options) {
|
|
|
1861
1973
|
// Track previous temporal state lengths for identifying history jumps
|
|
1862
1974
|
let prevPastLength = 0;
|
|
1863
1975
|
let prevFutureLength = 0;
|
|
1976
|
+
/**
|
|
1977
|
+
* Runs one of a carry's own writes to its drafts (see history-drafts.ts) under a short pause,
|
|
1978
|
+
* and marks the adopted drafts' fields it changed as carry-owned.
|
|
1979
|
+
*/
|
|
1980
|
+
export function runSceneHistoryDraftWrite(write) {
|
|
1981
|
+
const before = useScene.getState().nodes;
|
|
1982
|
+
const wasRawPaused = !useScene.temporal.getState().isTracking && getSceneHistoryPauseDepth() === 0;
|
|
1983
|
+
const pause = beginSceneHistoryPauseSession(useScene);
|
|
1984
|
+
try {
|
|
1985
|
+
return write();
|
|
1986
|
+
}
|
|
1987
|
+
finally {
|
|
1988
|
+
noteSceneHistoryDraftWrite(before, useScene.getState().nodes);
|
|
1989
|
+
pause.end();
|
|
1990
|
+
// Legacy movers can co-mount with the overlay without owning a counted pause.
|
|
1991
|
+
if (wasRawPaused && getSceneHistoryPauseDepth() === 0)
|
|
1992
|
+
useScene.temporal.getState().pause();
|
|
1993
|
+
}
|
|
1994
|
+
}
|
|
1995
|
+
/** Updates that revert the fields a carry still holds on `ids` (see history-drafts.ts). */
|
|
1996
|
+
export function sceneHistoryDraftRevertUpdates(ids) {
|
|
1997
|
+
return sceneHistoryDraftRevertUpdatesIn(useScene.getState().nodes, ids);
|
|
1998
|
+
}
|
|
1999
|
+
/** Registers a carried draft (see history-drafts.ts); returns the call that ends it. */
|
|
2000
|
+
export function beginSceneHistoryDraft(id, original) {
|
|
2001
|
+
return beginSceneHistoryDraftIn(id, original, useScene.getState().nodes);
|
|
2002
|
+
}
|
|
2003
|
+
export { settleSceneHistoryDrafts };
|
|
1864
2004
|
export function clearSceneHistory() {
|
|
1865
2005
|
resetSceneHistoryPauseDepth();
|
|
2006
|
+
clearSceneHistoryDrafts();
|
|
1866
2007
|
// Resetting the pause-depth counter without resuming would strand the
|
|
1867
2008
|
// temporal store in `isTracking: false` if a pause window was active when
|
|
1868
2009
|
// the scene was (re)loaded — every edit after the load would then be
|
|
@@ -1882,10 +2023,13 @@ useScene.temporal.subscribe((state, previousState) => {
|
|
|
1882
2023
|
return;
|
|
1883
2024
|
const currentPastLength = state.pastStates.length;
|
|
1884
2025
|
const currentFutureLength = state.futureStates.length;
|
|
2026
|
+
// Only the store's own undo / redo jump history: a new edit after an undo also
|
|
2027
|
+
// grows the past and drops the redo stack, and is not a redo.
|
|
1885
2028
|
// Undo: futureStates increases (state moved from past to future)
|
|
1886
2029
|
// Redo: pastStates increases while futureStates decreases (state moved from future to past)
|
|
1887
|
-
const
|
|
1888
|
-
const
|
|
2030
|
+
const jumping = isRestoringSceneHistory();
|
|
2031
|
+
const didUndo = jumping && currentFutureLength > prevFutureLength;
|
|
2032
|
+
const didRedo = jumping && currentPastLength > prevPastLength && currentFutureLength < prevFutureLength;
|
|
1889
2033
|
if (didUndo || didRedo) {
|
|
1890
2034
|
// Capture both layouts before another synchronous jump can replace them.
|
|
1891
2035
|
// The state pushed onto the opposite stack includes history-paused derived
|