@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
|
@@ -0,0 +1,707 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ExpressionSchema, evaluateRecipe, parseRecipe, RECIPE_LIMITS, RECIPE_V2_LIMITS, RecipeSchema, recipeBytes, shapeBounds, shapeTriangles, sweepRecipe, triangleCharge, } from './recipe.js';
|
|
3
|
+
import { ringArea, sectionRings } from './section.js';
|
|
4
|
+
import { boundsOf } from './spatial.js';
|
|
5
|
+
// Agent-facing design capabilities: the schema a design must follow and the validation that
|
|
6
|
+
// is the authority over it. Every surface (MCP, chat, scene programs) wraps these functions.
|
|
7
|
+
/** Bounds closer than this count as touching (metres). */
|
|
8
|
+
const CONTACT_TOLERANCE = 0.002;
|
|
9
|
+
const ISSUE_LIMIT = 20;
|
|
10
|
+
const LIST_LIMIT = 16;
|
|
11
|
+
const vec2 = z.tuple([z.number(), z.number()]);
|
|
12
|
+
const vec3 = z.tuple([z.number(), z.number(), z.number()]);
|
|
13
|
+
const BoundsSchema = z.object({ min: vec3, max: vec3, dimensions: vec3 });
|
|
14
|
+
export const DesignDiagnosticSchema = z.object({
|
|
15
|
+
severity: z.enum(['error', 'warning']),
|
|
16
|
+
code: z.enum([
|
|
17
|
+
'invalid_json',
|
|
18
|
+
'schema',
|
|
19
|
+
'rule',
|
|
20
|
+
'parameters',
|
|
21
|
+
'sweep',
|
|
22
|
+
'floating_component',
|
|
23
|
+
'unbalanced',
|
|
24
|
+
'behind_wall',
|
|
25
|
+
'draw_budget',
|
|
26
|
+
'design_version_not_enabled',
|
|
27
|
+
'design_too_large',
|
|
28
|
+
]),
|
|
29
|
+
path: z.string().optional(),
|
|
30
|
+
message: z.string(),
|
|
31
|
+
/** How to fix it, for rule errors whose message alone does not say. */
|
|
32
|
+
hint: z.string().optional(),
|
|
33
|
+
});
|
|
34
|
+
export const DesignMeasurementsSchema = z.object({
|
|
35
|
+
parameters: z.record(z.string(), z.number()),
|
|
36
|
+
bounds: BoundsSchema,
|
|
37
|
+
shapes: z.number(),
|
|
38
|
+
triangles: z.object({
|
|
39
|
+
/** Triangles the renderer builds. */
|
|
40
|
+
actual: z.number(),
|
|
41
|
+
/** Triangles charged against the recipe budget. */
|
|
42
|
+
budget: z.number(),
|
|
43
|
+
limit: z.number(),
|
|
44
|
+
}),
|
|
45
|
+
/** One draw call per slot and motion group, in build order; `draw_budget` warns above `drawBudget`. */
|
|
46
|
+
drawBudget: z.number(),
|
|
47
|
+
drawGroups: z.array(z.object({
|
|
48
|
+
slot: z.string(),
|
|
49
|
+
motionGroup: z.string().nullable(),
|
|
50
|
+
shapes: z.number(),
|
|
51
|
+
triangles: z.number(),
|
|
52
|
+
})),
|
|
53
|
+
parts: z.array(z.object({
|
|
54
|
+
id: z.string(),
|
|
55
|
+
instances: z.number(),
|
|
56
|
+
shapes: z.number(),
|
|
57
|
+
triangles: z.number(),
|
|
58
|
+
slots: z.array(z.string()),
|
|
59
|
+
motion: z.enum(['hinge', 'slide', 'spin']).nullable(),
|
|
60
|
+
lights: z.number(),
|
|
61
|
+
bounds: BoundsSchema.nullable(),
|
|
62
|
+
})),
|
|
63
|
+
/**
|
|
64
|
+
* The plane the design rests on or hangs from: the floor (y = 0), the wall-side reference
|
|
65
|
+
* (z = its z, geometry in front) or the ceiling reference (y = its y, geometry below).
|
|
66
|
+
* `gap` is the signed distance from the plane to the nearest geometry.
|
|
67
|
+
*/
|
|
68
|
+
datum: z.object({
|
|
69
|
+
kind: z.enum(['floor', 'wall', 'ceiling']),
|
|
70
|
+
axis: z.enum(['y', 'z']),
|
|
71
|
+
value: z.number(),
|
|
72
|
+
gap: z.number(),
|
|
73
|
+
/** Parts touching the datum and their bounds in the datum plane (x/z, or x/y on a wall). */
|
|
74
|
+
contact: z
|
|
75
|
+
.object({ parts: z.array(z.string()), shapes: z.number(), min: vec2, max: vec2 })
|
|
76
|
+
.nullable(),
|
|
77
|
+
/** Floor designs: whether the centre of mass lies over the contact region. */
|
|
78
|
+
balanced: z.boolean().nullable(),
|
|
79
|
+
}),
|
|
80
|
+
/** Groups of shapes whose bounds touch, largest first. */
|
|
81
|
+
components: z.object({
|
|
82
|
+
count: z.number(),
|
|
83
|
+
list: z.array(z.object({
|
|
84
|
+
parts: z.array(z.string()),
|
|
85
|
+
shapes: z.number(),
|
|
86
|
+
bounds: BoundsSchema,
|
|
87
|
+
touchesDatum: z.boolean(),
|
|
88
|
+
datumGap: z.number(),
|
|
89
|
+
/** Distance to the nearest shape outside this component. */
|
|
90
|
+
nearestGap: z.number().nullable(),
|
|
91
|
+
})),
|
|
92
|
+
}),
|
|
93
|
+
surfaces: z.array(z.string()),
|
|
94
|
+
motions: z.number(),
|
|
95
|
+
lights: z.number(),
|
|
96
|
+
});
|
|
97
|
+
export const DesignValidationSchema = z.object({
|
|
98
|
+
valid: z.boolean(),
|
|
99
|
+
diagnostics: z.array(DesignDiagnosticSchema),
|
|
100
|
+
design: z
|
|
101
|
+
.object({
|
|
102
|
+
name: z.string(),
|
|
103
|
+
mounting: z.enum(['floor', 'wall-side', 'ceiling']),
|
|
104
|
+
parameters: z.array(z.object({
|
|
105
|
+
id: z.string(),
|
|
106
|
+
default: z.number(),
|
|
107
|
+
min: z.number(),
|
|
108
|
+
max: z.number(),
|
|
109
|
+
step: z.number(),
|
|
110
|
+
unit: z.string(),
|
|
111
|
+
})),
|
|
112
|
+
slots: z.array(z.string()),
|
|
113
|
+
})
|
|
114
|
+
.nullable(),
|
|
115
|
+
sweep: z
|
|
116
|
+
.object({
|
|
117
|
+
cases: z.number(),
|
|
118
|
+
failed: z.number(),
|
|
119
|
+
failures: z.array(z.object({ values: z.record(z.string(), z.number()), error: z.string() })),
|
|
120
|
+
})
|
|
121
|
+
.nullable(),
|
|
122
|
+
measurements: DesignMeasurementsSchema.nullable(),
|
|
123
|
+
});
|
|
124
|
+
/**
|
|
125
|
+
* The highest design version writers (placement, Studio, converters, agents) may emit. Readers
|
|
126
|
+
* ship one release before writers, so version 2 designs validate and render now and become
|
|
127
|
+
* placeable in the next release.
|
|
128
|
+
*/
|
|
129
|
+
export const DESIGN_WRITE_VERSION = 1;
|
|
130
|
+
const notWritable = (version) => `Version ${version} designs validate and render, but placement accepts version ${DESIGN_WRITE_VERSION} only; writing version ${version} opens in the next release`;
|
|
131
|
+
const DESIGN_RULES = [
|
|
132
|
+
'Validation is the authority. It enforces these rules, which JSON Schema cannot express, and evaluates the defaults, each parameter at its min and max, and 20 seeded samples. Only a design without errors can be placed.',
|
|
133
|
+
'version 1 covers box, roundedBox, cylinder and ellipsoid shapes, flat part motions and at most 16 parts of 24 shapes. Everything marked "v2" below needs "version": 2, and a v2 design stays under 24 KiB of JSON.',
|
|
134
|
+
`${notWritable(2)}.`,
|
|
135
|
+
'Units are metres and radians, +Y is up. A shape position is its centre and size its full extent; rotation is XYZ Euler about the centre. Cylinders run along Y; an ellipsoid fills its size box.',
|
|
136
|
+
'An expression is a number, a parameter id, "index" (the 0-based repeat inside part.count) or {op, args}. Arithmetic strings such as "width / 2" are not supported. Results stay finite and within ±10000, nesting depth ≤ 16, and mod needs a positive divisor. v2 adds {op: "select", args: [i, v0, …]}, which is v_i for an integral i from 0 to n - 1.',
|
|
137
|
+
'IDs are lowercase snake_case. Parameter, slot, part and surface ids are unique; shape ids are unique within their part; "index" is not a parameter id.',
|
|
138
|
+
'Each shape.slot names a declared slot; parameter.part and surface.part name declared parts. At most one parameter binds a resize handle (axis) per axis, per part or per design.',
|
|
139
|
+
'Parameters need min ≤ default ≤ max. unit "count" needs integer min, max, default and step. v2: unit "bool" runs 0..1 and "choice" indexes its options (2–16 labels), both in steps of 1, with an integer default and no axis.',
|
|
140
|
+
'v2: part.when and shape.when build a repeat or a shape only where they evaluate to nonzero; a repeat whose shapes are all skipped builds nothing (no light, motion or named surface), except that a jointed part keeps its joint while it still moves visible children.',
|
|
141
|
+
'part.count evaluates to an integer from 0 to 64. Shape sizes evaluate to 0.001–30 m, and the design stays within 30 m of its origin.',
|
|
142
|
+
'No geometry goes below y = 0, except in v2 ceiling designs, which hang from their reference and may reach below it. Without mounting the design stands on the floor at y = 0 (or its v2 base) and no motion may sweep below it.',
|
|
143
|
+
'mounting "wall-side" needs a named surface without part whose normal is local -Z (rotation [-π/2, 0, 0]). It is the plane that meets the wall: keep geometry in front of it (larger z; geometry behind it passes into the wall and is warned about); no motion may cross behind it.',
|
|
144
|
+
'mounting "ceiling" needs a named surface without part facing +Y (no rotation) at the highest point of the design, and no motion may rise above it; a v2 design with a cut may rise above it inside the cut only (see cuts).',
|
|
145
|
+
'radius applies to roundedBox (at most half the smallest size, default 0.02). topScale applies to cylinders only (0–1). support: true offers a shape top to hosted items; it must be an unrotated box, roundedBox or untapered, solid, full cylinder outside moving parts.',
|
|
146
|
+
'v2 cylinders: segments (3–64 sides, default 24), open (no end caps), inner (hollow wall, inner radius as a fraction 0–1 of the outer) and arc (a partial sweep in (0, 2π] from local +Z toward +X).',
|
|
147
|
+
'v2 extrude: a section in local x/y extruded along local z by length, centred. Sections: rectangle {width, depth, corner?}, round {radius, wall?}, oval {width, depth}, section {family I|C|L|T|Z|rect-tube, width, depth, web, flange} (web and flange thinner than the size; a rect-tube web under half its width) or polygon {outer, holes?} of 3–64 points that must not self-intersect. bevel ≤ min(length / 4, 5 cm, thinnest wall / 2.5).',
|
|
148
|
+
'v2 revolve: profile [radius, height] points (2–64, radius ≥ 0) turned about local Y, with segments and arc as on cylinders. It is closed where the profile meets the axis at both ends over a full turn; otherwise it is a surface drawn from both sides.',
|
|
149
|
+
"v2 part trees: part.parent makes a part move with its parent; it repeats once (riding the parent's repeat 0) or exactly as often as the parent (bound by index), at most 8 levels deep. part.frame {position, rotation} is where its shapes, light and joint are authored; named surfaces stay in design space, even for a framed part.",
|
|
150
|
+
'v2 joints: at most one per part, keyed by joints[].child, with origin and axis in the part frame. fixed takes no values; revolute (radians) and prismatic (metres) need open and may give rest and a range [low, high] containing rest and open; continuous needs speed (radians per second) and no open, range or timing. A part has a flat motion or a joint, not both, and a part with a flat motion cannot sit in a tree.',
|
|
151
|
+
'v2 base (floor designs only): the design-space height that rests on the floor; no geometry or motion may go below it.',
|
|
152
|
+
'v2 cuts (ceiling designs): one rect {size, center?} or circle {diameter, center?} opening in the host ceiling, in the mounting reference plane. The design may rise above the reference only inside its cut, moving parts included.',
|
|
153
|
+
'Motion: hinge 0 < |angle| ≤ π, slide 0 < |distance| ≤ 5 m, spin 0 < |radiansPerSecond| ≤ 20 (joints alike: |open - rest| and range ends within those of rest); delay 0–1 s and duration 0.1–2 s. At most 8 moving parts (flat motions and non-fixed joints) and 32 evaluated motion groups. Named surfaces cannot belong to moving parts or their children.',
|
|
154
|
+
'Lights: at most 12 evaluated. Each light lies within its part instance at rest (±2 cm); lights sharing an emissiveSlot share one color.',
|
|
155
|
+
'Surfaces evaluate to 0.001–30 m sizes within 30 m of the origin, at most 256 in all.',
|
|
156
|
+
'Budgets: 256 expanded shapes (count × shapes, summed over parts; 512 in v2), 100000 budget triangles (v1 charges box 12, roundedBox 588, cylinder 96, ellipsoid 720; v2 charges what the renderer builds, reported as measurements.triangles.actual), 50000 expression evaluations, 131072 characters of JSON (24 KiB in v2), 12000 JSON values nested at most 24 deep, and repeat counts of at most 64.',
|
|
157
|
+
'constraints: each {left, relation, right} must hold (lte: left ≤ right; gte: left ≥ right); message is the error shown when it fails.',
|
|
158
|
+
];
|
|
159
|
+
// Legs sit at (±1, ±1) × (width / 2 − 0.03): x from index mod 2, z from floor(index / 2).
|
|
160
|
+
const legInset = { op: 'sub', args: [{ op: 'div', args: ['width', 2] }, 0.03] };
|
|
161
|
+
const legSign = (bit) => ({ op: 'sub', args: [{ op: 'mul', args: [bit, 2] }, 1] });
|
|
162
|
+
const legOffset = (bit) => ({ op: 'mul', args: [legSign(bit), legInset] });
|
|
163
|
+
/** A small valid design: a square side table with four legs. */
|
|
164
|
+
export const DESIGN_EXAMPLE = {
|
|
165
|
+
version: 1,
|
|
166
|
+
name: 'Side table',
|
|
167
|
+
description: 'Square side table with a solid top on four legs.',
|
|
168
|
+
classification: { category: 'table', functionTags: ['side-table'], tags: ['living'] },
|
|
169
|
+
parameters: [
|
|
170
|
+
{
|
|
171
|
+
id: 'width',
|
|
172
|
+
label: 'Width',
|
|
173
|
+
default: 0.5,
|
|
174
|
+
min: 0.3,
|
|
175
|
+
max: 0.9,
|
|
176
|
+
step: 0.05,
|
|
177
|
+
unit: 'm',
|
|
178
|
+
axis: 'x',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
id: 'height',
|
|
182
|
+
label: 'Height',
|
|
183
|
+
default: 0.55,
|
|
184
|
+
min: 0.4,
|
|
185
|
+
max: 0.8,
|
|
186
|
+
step: 0.05,
|
|
187
|
+
unit: 'm',
|
|
188
|
+
axis: 'y',
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
slots: [{ id: 'wood', label: 'Wood', color: '#a47148', finish: 'wood' }],
|
|
192
|
+
parts: [
|
|
193
|
+
{
|
|
194
|
+
id: 'top',
|
|
195
|
+
label: 'Top',
|
|
196
|
+
count: 1,
|
|
197
|
+
shapes: [
|
|
198
|
+
{
|
|
199
|
+
id: 'board',
|
|
200
|
+
primitive: 'box',
|
|
201
|
+
slot: 'wood',
|
|
202
|
+
size: ['width', 0.03, 'width'],
|
|
203
|
+
position: [0, { op: 'sub', args: ['height', 0.015] }, 0],
|
|
204
|
+
support: true,
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
id: 'legs',
|
|
210
|
+
label: 'Legs',
|
|
211
|
+
count: 4,
|
|
212
|
+
shapes: [
|
|
213
|
+
{
|
|
214
|
+
id: 'leg',
|
|
215
|
+
primitive: 'box',
|
|
216
|
+
slot: 'wood',
|
|
217
|
+
size: [0.04, { op: 'sub', args: ['height', 0.03] }, 0.04],
|
|
218
|
+
position: [
|
|
219
|
+
legOffset({ op: 'mod', args: ['index', 2] }),
|
|
220
|
+
{ op: 'div', args: [{ op: 'sub', args: ['height', 0.03] }, 2] },
|
|
221
|
+
legOffset({ op: 'floor', args: [{ op: 'div', args: ['index', 2] }] }),
|
|
222
|
+
],
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
constraints: [],
|
|
228
|
+
};
|
|
229
|
+
let jsonSchema;
|
|
230
|
+
/** The design contract for agents, generated from `RecipeSchema` (not from the node, whose recipe is opaque). */
|
|
231
|
+
export function describeDesignSchema() {
|
|
232
|
+
if (!jsonSchema) {
|
|
233
|
+
const registry = z.registry();
|
|
234
|
+
registry.add(ExpressionSchema, {
|
|
235
|
+
id: 'Expr',
|
|
236
|
+
description: 'A number, a parameter id, "index" (the 0-based repeat inside part.count) or {op, args}.',
|
|
237
|
+
});
|
|
238
|
+
jsonSchema = {
|
|
239
|
+
title: 'Pascal design',
|
|
240
|
+
description: 'A procedural design: parameters, material slots and parts made of box, roundedBox, cylinder and ellipsoid shapes, and in version 2 extrude and revolve shapes, part trees and joints. Validation enforces rules this schema cannot express and is the authority.',
|
|
241
|
+
...z.toJSONSchema(RecipeSchema, { io: 'input', metadata: registry }),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
return structuredClone({
|
|
245
|
+
version: 2,
|
|
246
|
+
schema: jsonSchema,
|
|
247
|
+
limits: RECIPE_LIMITS,
|
|
248
|
+
limitsV2: RECIPE_V2_LIMITS,
|
|
249
|
+
rules: DESIGN_RULES,
|
|
250
|
+
example: DESIGN_EXAMPLE,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
const EXPRESSION_KEYS = new Set([
|
|
254
|
+
'count',
|
|
255
|
+
'size',
|
|
256
|
+
'position',
|
|
257
|
+
'rotation',
|
|
258
|
+
'radius',
|
|
259
|
+
'topScale',
|
|
260
|
+
'pivot',
|
|
261
|
+
'angle',
|
|
262
|
+
'distance',
|
|
263
|
+
'radiansPerSecond',
|
|
264
|
+
'delay',
|
|
265
|
+
'duration',
|
|
266
|
+
'left',
|
|
267
|
+
'right',
|
|
268
|
+
'when',
|
|
269
|
+
'base',
|
|
270
|
+
'length',
|
|
271
|
+
'bevel',
|
|
272
|
+
'width',
|
|
273
|
+
'depth',
|
|
274
|
+
'corner',
|
|
275
|
+
'wall',
|
|
276
|
+
'web',
|
|
277
|
+
'flange',
|
|
278
|
+
'outer',
|
|
279
|
+
'holes',
|
|
280
|
+
'profile',
|
|
281
|
+
'inner',
|
|
282
|
+
'arc',
|
|
283
|
+
'origin',
|
|
284
|
+
'axis',
|
|
285
|
+
'open',
|
|
286
|
+
'rest',
|
|
287
|
+
'range',
|
|
288
|
+
'speed',
|
|
289
|
+
'center',
|
|
290
|
+
'diameter',
|
|
291
|
+
]);
|
|
292
|
+
function formatPath(path) {
|
|
293
|
+
return path.reduce((text, key) => typeof key === 'number' ? `${text}[${key}]` : `${text}${text ? '.' : ''}${String(key)}`, '');
|
|
294
|
+
}
|
|
295
|
+
function schemaDiagnostics(error, raw) {
|
|
296
|
+
const diagnostics = error.issues.slice(0, ISSUE_LIMIT).map((issue) => {
|
|
297
|
+
let value = raw;
|
|
298
|
+
for (const key of issue.path)
|
|
299
|
+
value = value && typeof value === 'object' ? Reflect.get(value, key) : undefined;
|
|
300
|
+
const got = (JSON.stringify(value) ?? 'nothing').slice(0, 80);
|
|
301
|
+
let message = issue.message;
|
|
302
|
+
if (issue.code === 'invalid_format' && issue.format === 'regex')
|
|
303
|
+
message =
|
|
304
|
+
issue.path.at(-1) === 'color'
|
|
305
|
+
? 'colors are 6-digit hex strings like "#a47148"'
|
|
306
|
+
: issue.path.some((key) => typeof key === 'string' && EXPRESSION_KEYS.has(key))
|
|
307
|
+
? 'expressions are a number, a parameter id, "index" or {op, args}; arithmetic strings are not supported'
|
|
308
|
+
: 'IDs and references are lowercase snake_case matching ^[a-z][a-z0-9_]{0,47}$';
|
|
309
|
+
return {
|
|
310
|
+
severity: 'error',
|
|
311
|
+
code: 'schema',
|
|
312
|
+
path: formatPath(issue.path) || undefined,
|
|
313
|
+
message: `${message} (got ${got})`,
|
|
314
|
+
...(/requires recipe version 2/.test(message) && {
|
|
315
|
+
hint: 'Set "version": 2 (and keep the design under 24 KiB), or leave out the v2 feature.',
|
|
316
|
+
}),
|
|
317
|
+
};
|
|
318
|
+
});
|
|
319
|
+
if (error.issues.length > ISSUE_LIMIT)
|
|
320
|
+
diagnostics.push({
|
|
321
|
+
severity: 'error',
|
|
322
|
+
code: 'schema',
|
|
323
|
+
message: `${error.issues.length - ISSUE_LIMIT} more schema issues omitted; apply the same rules throughout`,
|
|
324
|
+
});
|
|
325
|
+
return diagnostics;
|
|
326
|
+
}
|
|
327
|
+
const message = (error) => (error instanceof Error ? error.message : String(error));
|
|
328
|
+
const ids = (list) => Array.isArray(list)
|
|
329
|
+
? list.flatMap((entry) => (typeof entry?.id === 'string' ? [entry.id] : [])).join(', ') ||
|
|
330
|
+
'none'
|
|
331
|
+
: 'none';
|
|
332
|
+
/** A concrete repair for the rule errors authors hit most, from the design they sent. */
|
|
333
|
+
function ruleHint(text, raw) {
|
|
334
|
+
const design = (raw && typeof raw === 'object' ? raw : {});
|
|
335
|
+
const mounting = design.mounting;
|
|
336
|
+
if (/mounting reference|Mounting requires/i.test(text)) {
|
|
337
|
+
const plain = Array.isArray(design.surfaces)
|
|
338
|
+
? design.surfaces.filter((s) => s && typeof s === 'object' && !('part' in s))
|
|
339
|
+
: [];
|
|
340
|
+
const declared = `mounting.reference is ${JSON.stringify(mounting?.reference)}; surfaces without part: ${ids(plain)}.`;
|
|
341
|
+
return mounting?.attachTo === 'ceiling'
|
|
342
|
+
? `${declared} Declare surfaces: [{"id":"top","label":"Top","position":[0,<highest y of the geometry>,0],"size":[<w>,<d>]}] (no part, no rotation) and mounting: {"attachTo":"ceiling","reference":"top"}.`
|
|
343
|
+
: `${declared} Declare surfaces: [{"id":"back","label":"Back","position":[0,<half height>,0],"rotation":[-1.5707963267948966,0,0],"size":[<width>,<height>]}] (no part) and mounting: {"attachTo":"wall-side","reference":"back"}; keep all geometry at z >= 0.`;
|
|
344
|
+
}
|
|
345
|
+
if (/below the ground|below the floor/.test(text))
|
|
346
|
+
return 'Every shape must stay at y >= 0 for every parameter value: an unrotated box rests at position.y = size.y / 2; use max/min expressions where a parameter moves a part down.';
|
|
347
|
+
if (/^Unknown slot /.test(text))
|
|
348
|
+
return `Declared slots: ${ids(design.slots)}.`;
|
|
349
|
+
if (/^Unknown (part|surface part)/.test(text))
|
|
350
|
+
return `Declared parts: ${ids(design.parts)}.`;
|
|
351
|
+
if (/^Unknown expression reference /.test(text))
|
|
352
|
+
return `Expressions may name declared parameters (${ids(design.parameters)}) or "index".`;
|
|
353
|
+
if (/^Invalid dimensions /.test(text))
|
|
354
|
+
return 'Every size component must evaluate to 0.001–30 m at every parameter value.';
|
|
355
|
+
if (/^Expanded shape budget/.test(text))
|
|
356
|
+
return 'At most 256 shapes after repetition (count × shapes, summed over parts): merge repeated small pieces into fewer, larger shapes.';
|
|
357
|
+
return undefined;
|
|
358
|
+
}
|
|
359
|
+
const plural = (n, noun) => `${n} ${noun}${n === 1 ? '' : 's'}`;
|
|
360
|
+
// `|| 0` folds -0 so results survive a JSON round trip unchanged.
|
|
361
|
+
const round = (value) => Math.round(value * 1e6) / 1e6 || 0;
|
|
362
|
+
const roundVec = (values) => values.map(round);
|
|
363
|
+
const boundsFrom = (min, max) => ({
|
|
364
|
+
min: roundVec(min),
|
|
365
|
+
max: roundVec(max),
|
|
366
|
+
dimensions: roundVec(max.map((v, i) => v - min[i])),
|
|
367
|
+
});
|
|
368
|
+
function unionBounds(entries) {
|
|
369
|
+
const { min, max } = boundsOf(entries.flatMap((entry) => [entry.min, entry.max]));
|
|
370
|
+
return boundsFrom(min, max);
|
|
371
|
+
}
|
|
372
|
+
/** Volume of a shape for the centre of mass (a tapered cylinder is a frustum). */
|
|
373
|
+
function shapeVolume(shape) {
|
|
374
|
+
const [w, h, d] = shape.size;
|
|
375
|
+
const sweep = (shape.arc ?? 2 * Math.PI) / (2 * Math.PI);
|
|
376
|
+
switch (shape.primitive) {
|
|
377
|
+
case 'cylinder': {
|
|
378
|
+
const t = shape.topScale;
|
|
379
|
+
const hollow = shape.inner === undefined ? 1 : 1 - shape.inner ** 2;
|
|
380
|
+
return (((Math.PI / 4) * (1 + t + t * t)) / 3) * w * h * d * hollow * sweep;
|
|
381
|
+
}
|
|
382
|
+
case 'ellipsoid':
|
|
383
|
+
return (Math.PI / 6) * w * h * d;
|
|
384
|
+
case 'extrude': {
|
|
385
|
+
const rings = sectionRings(shape.section);
|
|
386
|
+
const area = Math.abs(ringArea(rings.outer)) -
|
|
387
|
+
rings.holes.reduce((sum, hole) => sum + Math.abs(ringArea(hole)), 0);
|
|
388
|
+
return area * d;
|
|
389
|
+
}
|
|
390
|
+
case 'revolve': {
|
|
391
|
+
// Pappus over the profile closed along the axis: arc · Σ (r1² + r1 r2 + r2²) Δy / 6.
|
|
392
|
+
const profile = shape.profile;
|
|
393
|
+
let sum = 0;
|
|
394
|
+
for (let i = 1; i < profile.length; i++) {
|
|
395
|
+
const [r1, y1] = profile[i - 1], [r2, y2] = profile[i];
|
|
396
|
+
sum += ((r1 * r1 + r1 * r2 + r2 * r2) * (y2 - y1)) / 6;
|
|
397
|
+
}
|
|
398
|
+
return Math.abs(sum) * 2 * Math.PI * sweep;
|
|
399
|
+
}
|
|
400
|
+
default:
|
|
401
|
+
return w * h * d;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/** Draw calls per design above which rendering many instances gets costly. */
|
|
405
|
+
const DRAW_BUDGET = 16;
|
|
406
|
+
function measureDesign(recipe, evaluation, diagnostics) {
|
|
407
|
+
const shapes = evaluation.shapes.map((shape) => ({
|
|
408
|
+
shape,
|
|
409
|
+
...shapeBounds(shape),
|
|
410
|
+
triangles: shapeTriangles(shape),
|
|
411
|
+
charge: triangleCharge(recipe, shape),
|
|
412
|
+
}));
|
|
413
|
+
const reference = recipe.mounting
|
|
414
|
+
? evaluation.surfaces.find((surface) => surface.id === recipe.mounting.reference)
|
|
415
|
+
: undefined;
|
|
416
|
+
const kind = recipe.mounting?.attachTo === 'ceiling'
|
|
417
|
+
? 'ceiling'
|
|
418
|
+
: recipe.mounting?.attachTo === 'wall-side'
|
|
419
|
+
? 'wall'
|
|
420
|
+
: 'floor';
|
|
421
|
+
const axis = kind === 'wall' ? 2 : 1;
|
|
422
|
+
const value = kind === 'floor' ? 0 : (reference?.position[axis] ?? 0);
|
|
423
|
+
// Signed distance from the datum into the design: floor and wall designs grow away from
|
|
424
|
+
// their plane (+Y, +Z), ceiling designs hang below theirs.
|
|
425
|
+
const datumGap = (min, max) => kind === 'ceiling' ? value - max[axis] : min[axis] - value;
|
|
426
|
+
// Real contact: the shape reaches the datum plane from the design side, within tolerance.
|
|
427
|
+
// Geometry entirely beyond the plane (behind the wall, above the ceiling) does not touch it.
|
|
428
|
+
const touches = (min, max) => min[axis] <= value + CONTACT_TOLERANCE && max[axis] >= value - CONTACT_TOLERANCE;
|
|
429
|
+
const planeAxes = kind === 'wall' ? [0, 1] : [0, 2];
|
|
430
|
+
const drawGroups = new Map();
|
|
431
|
+
for (const { shape, triangles } of shapes) {
|
|
432
|
+
const key = JSON.stringify([shape.motionGroup ?? null, shape.slot]);
|
|
433
|
+
const group = drawGroups.get(key) ?? {
|
|
434
|
+
slot: shape.slot,
|
|
435
|
+
motionGroup: shape.motionGroup ?? null,
|
|
436
|
+
shapes: 0,
|
|
437
|
+
triangles: 0,
|
|
438
|
+
};
|
|
439
|
+
group.shapes++;
|
|
440
|
+
group.triangles += triangles;
|
|
441
|
+
drawGroups.set(key, group);
|
|
442
|
+
}
|
|
443
|
+
if (drawGroups.size > DRAW_BUDGET)
|
|
444
|
+
diagnostics.push({
|
|
445
|
+
severity: 'warning',
|
|
446
|
+
code: 'draw_budget',
|
|
447
|
+
message: `${drawGroups.size} draw calls per instance (one per slot and motion group); the budget is ${DRAW_BUDGET}. Share slots across parts, or fold moving parts into fewer motion groups.`,
|
|
448
|
+
});
|
|
449
|
+
const parts = recipe.parts.map((part) => {
|
|
450
|
+
const own = shapes.filter(({ shape }) => shape.partId === part.id);
|
|
451
|
+
return {
|
|
452
|
+
id: part.id,
|
|
453
|
+
// Shape ids are `${part}:${index}:${shape}`; `when` may skip shapes or whole repeats.
|
|
454
|
+
instances: new Set(own.map(({ shape }) => shape.id.split(':')[1])).size,
|
|
455
|
+
shapes: own.length,
|
|
456
|
+
triangles: own.reduce((sum, entry) => sum + entry.triangles, 0),
|
|
457
|
+
slots: [...new Set(own.map(({ shape }) => shape.slot))],
|
|
458
|
+
motion: evaluation.motions.find((motion) => motion.partId === part.id)?.kind ?? null,
|
|
459
|
+
lights: evaluation.lights.filter((light) => light.partId === part.id).length,
|
|
460
|
+
bounds: own.length ? unionBounds(own) : null,
|
|
461
|
+
};
|
|
462
|
+
});
|
|
463
|
+
// Union shapes whose bounds touch into connected components.
|
|
464
|
+
const gapBetween = (a, b) => {
|
|
465
|
+
let sum = 0;
|
|
466
|
+
for (let k = 0; k < 3; k++) {
|
|
467
|
+
const d = Math.max(0, a.min[k] - b.max[k], b.min[k] - a.max[k]);
|
|
468
|
+
sum += d * d;
|
|
469
|
+
}
|
|
470
|
+
return Math.sqrt(sum);
|
|
471
|
+
};
|
|
472
|
+
const root = shapes.map((_, i) => i);
|
|
473
|
+
const find = (i) => {
|
|
474
|
+
while (root[i] !== i) {
|
|
475
|
+
root[i] = root[root[i]];
|
|
476
|
+
i = root[i];
|
|
477
|
+
}
|
|
478
|
+
return i;
|
|
479
|
+
};
|
|
480
|
+
for (let a = 0; a < shapes.length; a++)
|
|
481
|
+
for (let b = a + 1; b < shapes.length; b++)
|
|
482
|
+
if (gapBetween(shapes[a], shapes[b]) <= CONTACT_TOLERANCE)
|
|
483
|
+
root[find(a)] = find(b);
|
|
484
|
+
const componentOf = shapes.map((_, i) => find(i));
|
|
485
|
+
const groups = new Map();
|
|
486
|
+
for (let i = 0; i < shapes.length; i++) {
|
|
487
|
+
const group = groups.get(componentOf[i]) ?? [];
|
|
488
|
+
group.push(i);
|
|
489
|
+
groups.set(componentOf[i], group);
|
|
490
|
+
}
|
|
491
|
+
const components = [...groups.values()]
|
|
492
|
+
.map((indices) => {
|
|
493
|
+
const members = indices.map((i) => shapes[i]);
|
|
494
|
+
let nearest = Infinity;
|
|
495
|
+
for (const i of indices)
|
|
496
|
+
for (let j = 0; j < shapes.length; j++)
|
|
497
|
+
if (componentOf[j] !== componentOf[i])
|
|
498
|
+
nearest = Math.min(nearest, gapBetween(shapes[i], shapes[j]));
|
|
499
|
+
return {
|
|
500
|
+
parts: [...new Set(members.map(({ shape }) => shape.partId))],
|
|
501
|
+
shapes: members.length,
|
|
502
|
+
bounds: unionBounds(members),
|
|
503
|
+
touchesDatum: members.some((entry) => touches(entry.min, entry.max)),
|
|
504
|
+
datumGap: round(Math.min(...members.map((entry) => datumGap(entry.min, entry.max)))),
|
|
505
|
+
nearestGap: Number.isFinite(nearest) ? round(nearest) : null,
|
|
506
|
+
};
|
|
507
|
+
})
|
|
508
|
+
.sort((a, b) => b.shapes - a.shapes);
|
|
509
|
+
const floating = new Map();
|
|
510
|
+
for (const component of components.filter((c) => !c.touchesDatum)) {
|
|
511
|
+
const key = component.parts.join(', ');
|
|
512
|
+
floating.set(key, [...(floating.get(key) ?? []), component]);
|
|
513
|
+
}
|
|
514
|
+
const datumName = kind === 'floor' ? 'the floor (y = 0)' : `the ${kind} reference "${recipe.mounting.reference}"`;
|
|
515
|
+
for (const [parts, list] of floating) {
|
|
516
|
+
const nearest = Math.min(...list.map((c) => c.nearestGap ?? Infinity));
|
|
517
|
+
const subject = list.length === 1
|
|
518
|
+
? `${parts} (${plural(list[0].shapes, 'shape')}) touches`
|
|
519
|
+
: `${list.length} separate groups of ${parts} touch`;
|
|
520
|
+
const distances = [
|
|
521
|
+
...(Number.isFinite(nearest) ? [`nearest other geometry ${nearest} m`] : []),
|
|
522
|
+
`datum ${Math.min(...list.map((c) => c.datumGap))} m`,
|
|
523
|
+
];
|
|
524
|
+
diagnostics.push({
|
|
525
|
+
severity: 'warning',
|
|
526
|
+
code: 'floating_component',
|
|
527
|
+
message: `${subject} neither the rest of the design nor ${datumName} (${distances.join(', ')})`,
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
if (kind === 'wall') {
|
|
531
|
+
const behind = shapes.filter((entry) => datumGap(entry.min, entry.max) < -CONTACT_TOLERANCE);
|
|
532
|
+
if (behind.length)
|
|
533
|
+
diagnostics.push({
|
|
534
|
+
severity: 'warning',
|
|
535
|
+
code: 'behind_wall',
|
|
536
|
+
message: `${[...new Set(behind.map(({ shape }) => shape.partId))].join(', ')} reach${behind.length === 1 ? 'es' : ''} ${round(-Math.min(...behind.map((e) => datumGap(e.min, e.max))))} m behind the wall reference "${recipe.mounting.reference}" and would pass into the wall`,
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
const contactShapes = shapes.filter((entry) => touches(entry.min, entry.max));
|
|
540
|
+
const contact = contactShapes.length
|
|
541
|
+
? {
|
|
542
|
+
parts: [...new Set(contactShapes.map(({ shape }) => shape.partId))],
|
|
543
|
+
shapes: contactShapes.length,
|
|
544
|
+
min: roundVec(planeAxes.map((k) => Math.min(...contactShapes.map((e) => e.min[k])))),
|
|
545
|
+
max: roundVec(planeAxes.map((k) => Math.max(...contactShapes.map((e) => e.max[k])))),
|
|
546
|
+
}
|
|
547
|
+
: null;
|
|
548
|
+
let balanced = null;
|
|
549
|
+
if (kind === 'floor' && contact) {
|
|
550
|
+
let mass = 0;
|
|
551
|
+
const centre = [0, 0];
|
|
552
|
+
for (const { shape } of shapes) {
|
|
553
|
+
const volume = shapeVolume(shape);
|
|
554
|
+
mass += volume;
|
|
555
|
+
centre[0] += volume * shape.position[0];
|
|
556
|
+
centre[1] += volume * shape.position[2];
|
|
557
|
+
}
|
|
558
|
+
balanced = [0, 1].every((i) => {
|
|
559
|
+
const c = centre[i] / mass;
|
|
560
|
+
return c >= contact.min[i] - CONTACT_TOLERANCE && c <= contact.max[i] + CONTACT_TOLERANCE;
|
|
561
|
+
});
|
|
562
|
+
if (!balanced)
|
|
563
|
+
diagnostics.push({
|
|
564
|
+
severity: 'warning',
|
|
565
|
+
code: 'unbalanced',
|
|
566
|
+
message: `The centre of mass (x ${round(centre[0] / mass)}, z ${round(centre[1] / mass)}) lies outside the floor contact region; the design would tip over`,
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
return {
|
|
570
|
+
parameters: { ...evaluation.parameters },
|
|
571
|
+
bounds: boundsFrom(evaluation.min, evaluation.max),
|
|
572
|
+
shapes: shapes.length,
|
|
573
|
+
triangles: {
|
|
574
|
+
actual: shapes.reduce((sum, entry) => sum + entry.triangles, 0),
|
|
575
|
+
budget: shapes.reduce((sum, entry) => sum + entry.charge, 0),
|
|
576
|
+
limit: RECIPE_LIMITS.triangles,
|
|
577
|
+
},
|
|
578
|
+
drawGroups: [...drawGroups.values()],
|
|
579
|
+
drawBudget: DRAW_BUDGET,
|
|
580
|
+
parts,
|
|
581
|
+
datum: {
|
|
582
|
+
kind,
|
|
583
|
+
axis: kind === 'wall' ? 'z' : 'y',
|
|
584
|
+
value: round(value),
|
|
585
|
+
gap: round(Math.min(...shapes.map((entry) => datumGap(entry.min, entry.max)))),
|
|
586
|
+
contact,
|
|
587
|
+
balanced,
|
|
588
|
+
},
|
|
589
|
+
components: { count: components.length, list: components.slice(0, LIST_LIMIT) },
|
|
590
|
+
surfaces: evaluation.surfaces.map((surface) => surface.id),
|
|
591
|
+
motions: evaluation.motions.length,
|
|
592
|
+
lights: evaluation.lights.length,
|
|
593
|
+
};
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* Validate a design (an object or its JSON string) and measure it at `parameters`
|
|
597
|
+
* (defaults otherwise). Never throws: problems come back as coded diagnostics.
|
|
598
|
+
*/
|
|
599
|
+
export function validateDesign(input, options = {}) {
|
|
600
|
+
const failed = (diagnostics) => ({
|
|
601
|
+
valid: false,
|
|
602
|
+
diagnostics,
|
|
603
|
+
design: null,
|
|
604
|
+
sweep: null,
|
|
605
|
+
measurements: null,
|
|
606
|
+
});
|
|
607
|
+
let raw = input;
|
|
608
|
+
if (typeof input === 'string') {
|
|
609
|
+
try {
|
|
610
|
+
raw = JSON.parse(input);
|
|
611
|
+
}
|
|
612
|
+
catch (error) {
|
|
613
|
+
return failed([
|
|
614
|
+
{ severity: 'error', code: 'invalid_json', message: `Not valid JSON: ${message(error)}` },
|
|
615
|
+
]);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
// Nothing above the inline cap can be placed, whatever else is wrong with it. Input JSON
|
|
619
|
+
// cannot serialize (cycles, BigInt) skips the check and is refused by parseRecipe below.
|
|
620
|
+
let bytes = 0;
|
|
621
|
+
try {
|
|
622
|
+
bytes = recipeBytes(raw);
|
|
623
|
+
}
|
|
624
|
+
catch { }
|
|
625
|
+
if (bytes > RECIPE_V2_LIMITS.bytes)
|
|
626
|
+
return failed([
|
|
627
|
+
{
|
|
628
|
+
severity: 'error',
|
|
629
|
+
code: 'design_too_large',
|
|
630
|
+
message: `The design is ${Math.ceil(bytes / 1024)} KiB of compact JSON; inline designs stay under ${RECIPE_V2_LIMITS.bytes / 1024} KiB (R7) until pinned definitions store larger ones. Merge repeated shapes with count and index, or shorten ids and labels`,
|
|
631
|
+
},
|
|
632
|
+
]);
|
|
633
|
+
let recipe;
|
|
634
|
+
try {
|
|
635
|
+
recipe = parseRecipe(raw);
|
|
636
|
+
}
|
|
637
|
+
catch (error) {
|
|
638
|
+
return failed(error instanceof z.ZodError
|
|
639
|
+
? schemaDiagnostics(error, raw)
|
|
640
|
+
: [
|
|
641
|
+
{
|
|
642
|
+
severity: 'error',
|
|
643
|
+
code: 'rule',
|
|
644
|
+
message: message(error),
|
|
645
|
+
...(ruleHint(message(error), raw) && { hint: ruleHint(message(error), raw) }),
|
|
646
|
+
},
|
|
647
|
+
]);
|
|
648
|
+
}
|
|
649
|
+
const diagnostics = [];
|
|
650
|
+
const cases = sweepRecipe(recipe);
|
|
651
|
+
const failures = cases.filter((c) => !c.valid);
|
|
652
|
+
const byError = new Map();
|
|
653
|
+
for (const failure of failures)
|
|
654
|
+
byError.set(failure.error ?? '', [...(byError.get(failure.error ?? '') ?? []), failure]);
|
|
655
|
+
for (const [error, list] of byError)
|
|
656
|
+
diagnostics.push({
|
|
657
|
+
severity: 'error',
|
|
658
|
+
code: 'sweep',
|
|
659
|
+
message: `${error}: fails for ${list.length} of ${cases.length} parameter sets, e.g. ${JSON.stringify(list[0].values)}`,
|
|
660
|
+
...(ruleHint(error, raw) && { hint: ruleHint(error, raw) }),
|
|
661
|
+
});
|
|
662
|
+
if (recipe.version > DESIGN_WRITE_VERSION)
|
|
663
|
+
diagnostics.push({
|
|
664
|
+
severity: 'warning',
|
|
665
|
+
code: 'design_version_not_enabled',
|
|
666
|
+
path: 'version',
|
|
667
|
+
message: notWritable(recipe.version),
|
|
668
|
+
});
|
|
669
|
+
let evaluation;
|
|
670
|
+
try {
|
|
671
|
+
evaluation = evaluateRecipe(recipe, options.parameters ?? {});
|
|
672
|
+
}
|
|
673
|
+
catch (error) {
|
|
674
|
+
diagnostics.push({
|
|
675
|
+
severity: 'error',
|
|
676
|
+
code: 'parameters',
|
|
677
|
+
path: 'parameters',
|
|
678
|
+
message: message(error),
|
|
679
|
+
});
|
|
680
|
+
}
|
|
681
|
+
const measurements = evaluation ? measureDesign(recipe, evaluation, diagnostics) : null;
|
|
682
|
+
return {
|
|
683
|
+
valid: !diagnostics.some((d) => d.severity === 'error'),
|
|
684
|
+
diagnostics,
|
|
685
|
+
design: {
|
|
686
|
+
name: recipe.name,
|
|
687
|
+
mounting: recipe.mounting?.attachTo ?? 'floor',
|
|
688
|
+
parameters: recipe.parameters.map(({ id, default: value, min, max, step, unit }) => ({
|
|
689
|
+
id,
|
|
690
|
+
default: value,
|
|
691
|
+
min,
|
|
692
|
+
max,
|
|
693
|
+
step,
|
|
694
|
+
unit,
|
|
695
|
+
})),
|
|
696
|
+
slots: recipe.slots.map((slot) => slot.id),
|
|
697
|
+
},
|
|
698
|
+
sweep: {
|
|
699
|
+
cases: cases.length,
|
|
700
|
+
failed: failures.length,
|
|
701
|
+
failures: failures
|
|
702
|
+
.slice(0, 8)
|
|
703
|
+
.map(({ values, error }) => ({ values, error: error ?? 'Invalid design' })),
|
|
704
|
+
},
|
|
705
|
+
measurements,
|
|
706
|
+
};
|
|
707
|
+
}
|