@pascal-app/core 1.0.0-beta.5 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +23 -0
- package/dist/capture/index.d.ts +3 -0
- package/dist/capture/index.d.ts.map +1 -0
- package/dist/capture/index.js +2 -0
- package/dist/capture/schema.d.ts +417 -0
- package/dist/capture/schema.d.ts.map +1 -0
- package/dist/capture/schema.js +348 -0
- package/dist/capture/source.d.ts +60 -0
- package/dist/capture/source.d.ts.map +1 -0
- package/dist/capture/source.js +254 -0
- package/dist/events/bus.d.ts +55 -7
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/hidden-wall-pointer-hold.d.ts +28 -0
- package/dist/events/hidden-wall-pointer-hold.d.ts.map +1 -0
- package/dist/events/hidden-wall-pointer-hold.js +37 -0
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2785 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +132 -19
- package/dist/hooks/spatial-grid/support-host-patch.d.ts +45 -1
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +171 -6
- package/dist/index.d.ts +14 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/lib/asset-storage.d.ts.map +1 -1
- package/dist/lib/asset-storage.js +4 -1
- package/dist/lib/polygon-union.d.ts +4 -0
- package/dist/lib/polygon-union.d.ts.map +1 -0
- package/dist/lib/polygon-union.js +306 -0
- package/dist/lib/roof-overlap.d.ts +32 -0
- package/dist/lib/roof-overlap.d.ts.map +1 -0
- package/dist/lib/roof-overlap.js +72 -0
- package/dist/lib/slab-polygon.d.ts +35 -2
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +133 -27
- package/dist/lib/space-detection.d.ts +11 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +42 -14
- package/dist/registry/handles.d.ts +24 -3
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +3 -4
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -2
- package/dist/registry/registry.d.ts +13 -6
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +37 -4
- package/dist/registry/scene-api.d.ts +16 -0
- package/dist/registry/scene-api.d.ts.map +1 -1
- package/dist/registry/scene-api.js +49 -1
- package/dist/registry/types.d.ts +226 -13
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/__bench__/node-parsers.bench.d.ts +24 -0
- package/dist/schema/__bench__/node-parsers.bench.d.ts.map +1 -0
- package/dist/schema/__bench__/node-parsers.bench.js +314 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts +28 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -0
- package/dist/schema/__fixtures__/node-fixtures.js +125 -0
- package/dist/schema/base.d.ts +1 -1
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +8 -1
- package/dist/schema/compiled-node-parsers.d.ts +40 -0
- package/dist/schema/compiled-node-parsers.d.ts.map +1 -0
- package/dist/schema/compiled-node-parsers.js +95 -0
- package/dist/schema/index.d.ts +19 -15
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +17 -12
- package/dist/schema/material.d.ts +2 -1
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +1 -0
- package/dist/schema/nodes/automatic-downspout.d.ts +17 -0
- package/dist/schema/nodes/automatic-downspout.d.ts.map +1 -0
- package/dist/schema/nodes/automatic-downspout.js +237 -0
- package/dist/schema/nodes/block.d.ts +107 -0
- package/dist/schema/nodes/block.d.ts.map +1 -0
- package/dist/schema/nodes/block.js +207 -0
- package/dist/schema/nodes/box-vent.d.ts +8 -2
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/box-vent.js +2 -0
- package/dist/schema/nodes/building.d.ts +1 -1
- package/dist/schema/nodes/cabinet.d.ts +25 -3
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.js +26 -5
- package/dist/schema/nodes/ceiling.d.ts +1 -1
- package/dist/schema/nodes/chimney.d.ts +2 -2
- package/dist/schema/nodes/column.d.ts +6 -6
- package/dist/schema/nodes/construction-dimension.d.ts +4 -4
- package/dist/schema/nodes/cupola.d.ts +9 -1
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/cupola.js +2 -0
- package/dist/schema/nodes/door.d.ts +1 -1
- package/dist/schema/nodes/dormer.d.ts +44 -1
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/dormer.js +131 -7
- package/dist/schema/nodes/downspout.d.ts +11 -1
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.js +24 -0
- package/dist/schema/nodes/duct-fitting.d.ts +18 -1
- package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
- package/dist/schema/nodes/duct-fitting.js +25 -4
- package/dist/schema/nodes/duct-segment.d.ts +23 -1
- package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
- package/dist/schema/nodes/duct-segment.js +20 -0
- package/dist/schema/nodes/duct-terminal.d.ts +1 -1
- package/dist/schema/nodes/elevator.d.ts +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +8 -2
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.js +2 -0
- package/dist/schema/nodes/fence.d.ts +1 -1
- package/dist/schema/nodes/guide.d.ts +1 -1
- package/dist/schema/nodes/gutter.d.ts +36 -2
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/gutter.js +308 -1
- package/dist/schema/nodes/hanger-overrides.d.ts +7 -0
- package/dist/schema/nodes/hanger-overrides.d.ts.map +1 -0
- package/dist/schema/nodes/hanger-overrides.js +6 -0
- package/dist/schema/nodes/hvac-equipment.d.ts +1 -1
- package/dist/schema/nodes/item.d.ts +4 -3
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -0
- package/dist/schema/nodes/lean-to-extension.d.ts +212 -0
- package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -0
- package/dist/schema/nodes/lean-to-extension.js +114 -0
- package/dist/schema/nodes/level.d.ts +2 -2
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/lineset.d.ts +1 -1
- package/dist/schema/nodes/liquid-line.d.ts +1 -1
- package/dist/schema/nodes/measurement.d.ts +1 -1
- package/dist/schema/nodes/pipe-fitting.d.ts +9 -1
- package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-fitting.js +6 -2
- package/dist/schema/nodes/pipe-segment.d.ts +23 -1
- package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-segment.js +20 -0
- package/dist/schema/nodes/pipe-trap.d.ts +1 -1
- package/dist/schema/nodes/ridge-vent.d.ts +1 -1
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +4 -1
- package/dist/schema/nodes/roof-segment-shape.d.ts +4 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-shape.js +64 -1
- package/dist/schema/nodes/roof-segment-walls.d.ts +3 -1
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-walls.js +1 -1
- package/dist/schema/nodes/roof-segment.d.ts +41 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +79 -2
- package/dist/schema/nodes/roof.d.ts +22 -1
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +14 -0
- package/dist/schema/nodes/scan.d.ts +19 -2
- package/dist/schema/nodes/scan.d.ts.map +1 -1
- package/dist/schema/nodes/scan.js +11 -1
- package/dist/schema/nodes/shelf.d.ts +2 -2
- package/dist/schema/nodes/site.d.ts +1 -1
- package/dist/schema/nodes/skylight.d.ts +1 -1
- package/dist/schema/nodes/slab.d.ts +1 -1
- package/dist/schema/nodes/solar-panel.d.ts +1 -1
- package/dist/schema/nodes/spawn.d.ts +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +1 -1
- package/dist/schema/nodes/stair.d.ts +1 -1
- package/dist/schema/nodes/structural-grid.d.ts +1 -1
- package/dist/schema/nodes/turbine-vent.d.ts +7 -1
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/turbine-vent.js +2 -0
- package/dist/schema/nodes/wall.d.ts +4 -4
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +7 -1
- package/dist/schema/nodes/window.d.ts +10 -3
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +4 -0
- package/dist/schema/nodes/zone.d.ts +2 -2
- package/dist/schema/nodes/zone.js +1 -1
- package/dist/schema/types.d.ts +484 -109
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +27 -1
- package/dist/services/hosting.d.ts +2 -2
- package/dist/services/hosting.d.ts.map +1 -1
- package/dist/services/hosting.js +4 -4
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/system-graph.d.ts +11 -0
- package/dist/services/system-graph.d.ts.map +1 -1
- package/dist/services/system-graph.js +35 -5
- package/dist/store/actions/node-actions.d.ts +7 -0
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +429 -17
- package/dist/store/history-invalidation.d.ts +3 -0
- package/dist/store/history-invalidation.d.ts.map +1 -0
- package/dist/store/history-invalidation.js +72 -0
- package/dist/store/scene-hydration.d.ts +5 -0
- package/dist/store/scene-hydration.d.ts.map +1 -0
- package/dist/store/scene-hydration.js +57 -0
- package/dist/store/use-scene.d.ts +3 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +332 -64
- package/dist/systems/roof/roof-elevation-system.d.ts +3 -0
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -0
- package/dist/systems/roof/roof-elevation-system.js +94 -0
- package/dist/systems/roof/roof-elevation.d.ts +4 -0
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -0
- package/dist/systems/roof/roof-elevation.js +95 -0
- package/dist/systems/roof/roof-footprint.d.ts +17 -0
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -0
- package/dist/systems/roof/roof-footprint.js +83 -0
- package/dist/systems/stair/stair-flight.d.ts +17 -0
- package/dist/systems/stair/stair-flight.d.ts.map +1 -0
- package/dist/systems/stair/stair-flight.js +27 -0
- package/dist/systems/stair/stair-opening-preview.d.ts +1555 -1328
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts +1 -0
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +93 -96
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +20 -21
- package/dist/systems/wall/wall-curve.d.ts +1 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +73 -0
- package/dist/systems/wall/wall-footprint.d.ts +1 -0
- package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
- package/dist/systems/wall/wall-footprint.js +1 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +26 -0
- package/dist/validation/validate-build-json.d.ts +3 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +49 -2
- package/package.json +10 -3
- package/dist/systems/elevator/elevator-runtime-system.d.ts +0 -2
- package/dist/systems/elevator/elevator-runtime-system.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-runtime-system.js +0 -8
|
@@ -2,7 +2,16 @@ import dedent from 'dedent';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
4
|
import { MaterialSchema } from '../material';
|
|
5
|
-
export const RoofType = z.enum([
|
|
5
|
+
export const RoofType = z.enum([
|
|
6
|
+
'hip',
|
|
7
|
+
'gable',
|
|
8
|
+
'shed',
|
|
9
|
+
'gambrel',
|
|
10
|
+
'dutch',
|
|
11
|
+
'mansard',
|
|
12
|
+
'flat',
|
|
13
|
+
'conical',
|
|
14
|
+
]);
|
|
6
15
|
export const MIN_ROOF_SEGMENT_TRIM_SPAN = 0.1;
|
|
7
16
|
const DEFAULT_ROOF_SEGMENT_WIDTH = 8;
|
|
8
17
|
const DEFAULT_ROOF_SEGMENT_DEPTH = 6;
|
|
@@ -96,6 +105,18 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
96
105
|
// Footprint dimensions
|
|
97
106
|
width: z.number().default(8),
|
|
98
107
|
depth: z.number().default(6),
|
|
108
|
+
// Angular extent of a conical roof. A full cone uses 2π. A signed
|
|
109
|
+
// sweep preserves the direction of the curved wall used to create a
|
|
110
|
+
// conical sector; other roof types ignore both fields.
|
|
111
|
+
conicalStartAngle: z.number().optional(),
|
|
112
|
+
conicalSweepAngle: z
|
|
113
|
+
.number()
|
|
114
|
+
.min(-Math.PI * 2)
|
|
115
|
+
.max(Math.PI * 2)
|
|
116
|
+
.optional(),
|
|
117
|
+
// Overrides the stored sector angles without discarding them, allowing
|
|
118
|
+
// the panel to switch back to the original clipped wall sweep.
|
|
119
|
+
conicalFullCircle: z.boolean().optional(),
|
|
99
120
|
// Segment-local distances trimmed from each footprint side. The trim
|
|
100
121
|
// boundary is projected vertically through the roof volume, so the
|
|
101
122
|
// resulting edge follows the actual sloped roof surfaces.
|
|
@@ -112,6 +133,34 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
112
133
|
deckThickness: z.number().default(0.1),
|
|
113
134
|
overhang: z.number().default(0.3),
|
|
114
135
|
shingleThickness: z.number().default(0.05),
|
|
136
|
+
arc: z
|
|
137
|
+
.object({
|
|
138
|
+
centerX: z.number(),
|
|
139
|
+
centerZ: z.number(),
|
|
140
|
+
radius: z.number(),
|
|
141
|
+
})
|
|
142
|
+
.optional()
|
|
143
|
+
.describe('Concentric-arc descriptor for a curved shed deck, in segment-local coordinates (center + true radius). Absent for a straight deck.'),
|
|
144
|
+
shedSideInfillSpan: z.number().positive().optional(),
|
|
145
|
+
shedSideInfillMinX: z.number().optional(),
|
|
146
|
+
shedSideInfillMaxX: z.number().optional(),
|
|
147
|
+
shedFootprintPieces: z.array(z.array(z.tuple([z.number(), z.number()])).min(3)).optional(),
|
|
148
|
+
shedOpenEndSides: z.array(z.enum(['left', 'right'])).optional(),
|
|
149
|
+
// Shared scene-scope data for comparing shed seams that live under separate
|
|
150
|
+
// roof parents. Kind-owned assembly code supplies it; the renderer remains
|
|
151
|
+
// independent of the kind that produced the segment.
|
|
152
|
+
shedJointFrame: z
|
|
153
|
+
.object({
|
|
154
|
+
position: z.tuple([z.number(), z.number(), z.number()]),
|
|
155
|
+
rotation: z.number(),
|
|
156
|
+
})
|
|
157
|
+
.optional(),
|
|
158
|
+
shedJointOwnerId: z.string().optional(),
|
|
159
|
+
shedJointNeighborIds: z.array(z.string()).optional(),
|
|
160
|
+
shedJointScopeId: z.string().optional(),
|
|
161
|
+
managedByParent: z.boolean().default(false),
|
|
162
|
+
wallShell: z.enum(['auto', 'include', 'omit']).default('auto'),
|
|
163
|
+
shedInsetEndPanels: z.boolean().default(false),
|
|
115
164
|
// Shape-specific ratios. Only the pair matching `roofType` is read; the
|
|
116
165
|
// rest are inert. Defined on every segment so the panel can flip
|
|
117
166
|
// roofType without losing the previous shape's tuning.
|
|
@@ -169,8 +218,10 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
169
218
|
Roof segment node - an individual roof module within a roof group.
|
|
170
219
|
Each segment generates a complete architectural volume (walls + roof).
|
|
171
220
|
Multiple segments can be combined to form complex roof shapes.
|
|
172
|
-
- roofType: hip, gable, shed, gambrel, dutch, mansard, flat
|
|
221
|
+
- roofType: hip, gable, shed, gambrel, dutch, mansard, flat, conical
|
|
173
222
|
- width/depth: footprint dimensions
|
|
223
|
+
- conicalStartAngle / conicalSweepAngle: angular extent of a conical sector (radians)
|
|
224
|
+
- conicalFullCircle: temporarily render the complete cone while preserving the sector angles
|
|
174
225
|
- trim: segment-local side cut distances
|
|
175
226
|
- wallHeight: height of walls below the roof
|
|
176
227
|
- pitch: roof slope in degrees (angle of the primary slope face)
|
|
@@ -184,6 +235,20 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
184
235
|
- dutchGabletRake: gablet barge-board overhang past the gablet end-wall (m, 0 = none)
|
|
185
236
|
- dutchTopRakeThickness: thickness of the top gable rake slab
|
|
186
237
|
`);
|
|
238
|
+
export function getConicalRoofCoverage(node) {
|
|
239
|
+
const storedSweep = node.conicalSweepAngle;
|
|
240
|
+
const inferredFullCircle = storedSweep === undefined || Math.abs(storedSweep) >= Math.PI * 2 - 1e-4;
|
|
241
|
+
const fullCircle = node.conicalFullCircle ?? inferredFullCircle;
|
|
242
|
+
if (fullCircle) {
|
|
243
|
+
return { fullCircle: true, startAngle: 0, sweepAngle: -Math.PI * 2 };
|
|
244
|
+
}
|
|
245
|
+
const hasClippedSweep = storedSweep !== undefined && Math.abs(storedSweep) < Math.PI * 2 - 1e-4;
|
|
246
|
+
return {
|
|
247
|
+
fullCircle: false,
|
|
248
|
+
startAngle: node.conicalStartAngle ?? 0,
|
|
249
|
+
sweepAngle: hasClippedSweep ? storedSweep : -Math.PI,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
187
252
|
function finiteNonNegative(value) {
|
|
188
253
|
return typeof value === 'number' && Number.isFinite(value) ? Math.max(0, value) : 0;
|
|
189
254
|
}
|
|
@@ -323,6 +388,8 @@ export function getDutchRoofMetrics(input) {
|
|
|
323
388
|
function getPrimarySlopeRun(input) {
|
|
324
389
|
const min = Math.min(input.width, input.depth);
|
|
325
390
|
switch (input.roofType) {
|
|
391
|
+
case 'conical':
|
|
392
|
+
return input.width / 2;
|
|
326
393
|
case 'shed':
|
|
327
394
|
return input.depth;
|
|
328
395
|
case 'gable':
|
|
@@ -395,6 +462,7 @@ export function getRoofSegmentVisibleTopBounds(segment) {
|
|
|
395
462
|
let frontExt = deckExt;
|
|
396
463
|
let backExt = deckExt;
|
|
397
464
|
if (segment.roofType === 'hip' ||
|
|
465
|
+
segment.roofType === 'conical' ||
|
|
398
466
|
segment.roofType === 'mansard' ||
|
|
399
467
|
segment.roofType === 'dutch') {
|
|
400
468
|
xExt += shingleOverhang;
|
|
@@ -495,9 +563,18 @@ export function getRoofSegmentSurfaceY(node, localX, localZ) {
|
|
|
495
563
|
const fz = node.depth > 0 ? Math.abs(localZ) / (node.depth / 2) : 0;
|
|
496
564
|
return peakY - Math.max(fx, fz) * activeRh;
|
|
497
565
|
}
|
|
566
|
+
if (node.roofType === 'conical') {
|
|
567
|
+
const radius = Math.max(0.0001, node.width / 2);
|
|
568
|
+
const radialProgress = Math.min(1, Math.hypot(localX, localZ) / radius);
|
|
569
|
+
return peakY - radialProgress * activeRh;
|
|
570
|
+
}
|
|
498
571
|
const t = node.depth > 0 ? Math.abs(localZ) / (node.depth / 2) : 0;
|
|
499
572
|
return peakY - t * activeRh;
|
|
500
573
|
}
|
|
574
|
+
// A shed segment whose deck follows a concentric arc.
|
|
575
|
+
export function isBandedShedSegment(node) {
|
|
576
|
+
return node.roofType === 'shed' && node.arc != null && Number.isFinite(node.arc.radius);
|
|
577
|
+
}
|
|
501
578
|
/**
|
|
502
579
|
* Inverse of `getActiveRoofHeight` — recover the pitch a legacy
|
|
503
580
|
* `roofHeight` value would correspond to. Used by the scene migration.
|
|
@@ -5,6 +5,17 @@ export type RoofSurfaceMaterialSpec = {
|
|
|
5
5
|
material?: MaterialSchemaType;
|
|
6
6
|
materialPreset?: string;
|
|
7
7
|
};
|
|
8
|
+
export declare const RoofSupport: z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
9
|
+
kind: z.ZodLiteral<"level">;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
kind: z.ZodLiteral<"walls">;
|
|
12
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
13
|
+
kind: z.ZodLiteral<"roof">;
|
|
14
|
+
roofSegmentId: z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>;
|
|
15
|
+
localPosition: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
16
|
+
curbHeight: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
}, z.core.$strip>], "kind">>;
|
|
18
|
+
export type RoofSupport = z.infer<typeof RoofSupport>;
|
|
8
19
|
export declare const RoofNode: z.ZodObject<{
|
|
9
20
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
10
21
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -20,7 +31,7 @@ export declare const RoofNode: z.ZodObject<{
|
|
|
20
31
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
21
32
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
22
33
|
}, z.core.$strip>>;
|
|
23
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
34
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
24
35
|
id: z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>;
|
|
25
36
|
type: z.ZodDefault<z.ZodLiteral<"roof">>;
|
|
26
37
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -157,6 +168,16 @@ export declare const RoofNode: z.ZodObject<{
|
|
|
157
168
|
wallMaterialPreset: z.ZodOptional<z.ZodString>;
|
|
158
169
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
159
170
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
171
|
+
support: z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
172
|
+
kind: z.ZodLiteral<"level">;
|
|
173
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
174
|
+
kind: z.ZodLiteral<"walls">;
|
|
175
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
176
|
+
kind: z.ZodLiteral<"roof">;
|
|
177
|
+
roofSegmentId: z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>;
|
|
178
|
+
localPosition: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
179
|
+
curbHeight: z.ZodDefault<z.ZodNumber>;
|
|
180
|
+
}, z.core.$strip>], "kind">>;
|
|
160
181
|
children: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>>>;
|
|
161
182
|
}, z.core.$strip>;
|
|
162
183
|
export type RoofNode = z.infer<typeof RoofNode>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;;;4BAWK,CAAA;AAE7B,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAErD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAS/C,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,uBAAuB,GAC5B,uBAAuB,CAoCzB"}
|
|
@@ -3,6 +3,18 @@ import { z } from 'zod';
|
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
4
|
import { MaterialSchema } from '../material';
|
|
5
5
|
import { RoofSegmentNode } from './roof-segment';
|
|
6
|
+
export const RoofSupport = z
|
|
7
|
+
.discriminatedUnion('kind', [
|
|
8
|
+
z.object({ kind: z.literal('level') }),
|
|
9
|
+
z.object({ kind: z.literal('walls') }),
|
|
10
|
+
z.object({
|
|
11
|
+
kind: z.literal('roof'),
|
|
12
|
+
roofSegmentId: RoofSegmentNode.shape.id,
|
|
13
|
+
localPosition: z.tuple([z.number(), z.number()]),
|
|
14
|
+
curbHeight: z.number().min(0).default(0.5),
|
|
15
|
+
}),
|
|
16
|
+
])
|
|
17
|
+
.default({ kind: 'level' });
|
|
6
18
|
export const RoofNode = BaseNode.extend({
|
|
7
19
|
id: objectId('roof'),
|
|
8
20
|
type: nodeType('roof'),
|
|
@@ -17,6 +29,7 @@ export const RoofNode = BaseNode.extend({
|
|
|
17
29
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
18
30
|
// Rotation around Y axis in radians
|
|
19
31
|
rotation: z.number().default(0),
|
|
32
|
+
support: RoofSupport,
|
|
20
33
|
// Child roof segment IDs
|
|
21
34
|
children: z.array(RoofSegmentNode.shape.id).default([]),
|
|
22
35
|
}).describe(dedent `
|
|
@@ -25,6 +38,7 @@ export const RoofNode = BaseNode.extend({
|
|
|
25
38
|
When not being edited, segments are visually combined into a single solid.
|
|
26
39
|
- position: center position of the roof group
|
|
27
40
|
- rotation: rotation around Y axis
|
|
41
|
+
- support: custom level placement, spatial wall-top following, or a roof-surface attachment
|
|
28
42
|
- children: array of RoofSegmentNode IDs
|
|
29
43
|
`);
|
|
30
44
|
function getLegacyRoofSurfaceMaterial(node) {
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export declare const CaptureSessionReference: z.ZodObject<{
|
|
3
|
+
sessionId: z.ZodString;
|
|
4
|
+
schemaVersion: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
revisionId: z.ZodOptional<z.ZodString>;
|
|
6
|
+
manifestUrl: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
export declare const ScanLayerVisibility: z.ZodPipe<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>, z.ZodTransform<Record<string, boolean>, Record<string, boolean>>>;
|
|
2
9
|
export declare const ScanNode: z.ZodObject<{
|
|
3
10
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
11
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -14,14 +21,24 @@ export declare const ScanNode: z.ZodObject<{
|
|
|
14
21
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
15
22
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
16
23
|
}, z.core.$strip>>;
|
|
17
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
24
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
18
25
|
id: z.ZodDefault<z.ZodTemplateLiteral<`scan_${string}`>>;
|
|
19
26
|
type: z.ZodDefault<z.ZodLiteral<"scan">>;
|
|
20
|
-
url: z.ZodString
|
|
27
|
+
url: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
28
|
+
captureSession: z.ZodDefault<z.ZodNullable<z.ZodObject<{
|
|
29
|
+
sessionId: z.ZodString;
|
|
30
|
+
schemaVersion: z.ZodOptional<z.ZodNumber>;
|
|
31
|
+
revisionId: z.ZodOptional<z.ZodString>;
|
|
32
|
+
manifestUrl: z.ZodOptional<z.ZodString>;
|
|
33
|
+
}, z.core.$strip>>>;
|
|
34
|
+
layers: z.ZodPipe<z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodBoolean>>, z.ZodTransform<Record<string, boolean>, Record<string, boolean>>>;
|
|
21
35
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
22
36
|
rotation: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
23
37
|
scale: z.ZodDefault<z.ZodNumber>;
|
|
24
38
|
opacity: z.ZodDefault<z.ZodNumber>;
|
|
25
39
|
}, z.core.$strip>;
|
|
40
|
+
export type CaptureSessionReference = z.infer<typeof CaptureSessionReference>;
|
|
41
|
+
export type CaptureSessionReferenceInput = z.input<typeof CaptureSessionReference>;
|
|
42
|
+
export type ScanLayerVisibility = z.infer<typeof ScanLayerVisibility>;
|
|
26
43
|
export type ScanNode = z.infer<typeof ScanNode>;
|
|
27
44
|
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,uBAAuB;;;;;iBAElC,CAAA;AAEF,eAAO,MAAM,mBAAmB,mIAGmE,CAAA;AAEnG,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUnB,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAC7E,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAClF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { CaptureSessionLocatorSchema } from '../../capture/schema';
|
|
2
3
|
import { AssetUrl } from '../asset-url';
|
|
3
4
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
5
|
+
export const CaptureSessionReference = CaptureSessionLocatorSchema.extend({
|
|
6
|
+
manifestUrl: AssetUrl.optional(),
|
|
7
|
+
});
|
|
8
|
+
export const ScanLayerVisibility = z
|
|
9
|
+
.record(z.string().min(1), z.boolean())
|
|
10
|
+
.default({ deviceMotion: true, model: true })
|
|
11
|
+
.transform((layers) => ({ deviceMotion: true, model: true, ...layers }));
|
|
4
12
|
export const ScanNode = BaseNode.extend({
|
|
5
13
|
id: objectId('scan'),
|
|
6
14
|
type: nodeType('scan'),
|
|
7
|
-
url: AssetUrl,
|
|
15
|
+
url: AssetUrl.nullable().default(null),
|
|
16
|
+
captureSession: CaptureSessionReference.nullable().default(null),
|
|
17
|
+
layers: ScanLayerVisibility,
|
|
8
18
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
9
19
|
rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
10
20
|
scale: z.number().default(1),
|
|
@@ -41,7 +41,7 @@ export declare const ShelfNode: z.ZodObject<{
|
|
|
41
41
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
42
42
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
43
43
|
}, z.core.$strip>>;
|
|
44
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
44
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
45
45
|
id: z.ZodDefault<z.ZodTemplateLiteral<`shelf_${string}`>>;
|
|
46
46
|
type: z.ZodDefault<z.ZodLiteral<"shelf">>;
|
|
47
47
|
children: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>>>;
|
|
@@ -64,9 +64,9 @@ export declare const ShelfNode: z.ZodObject<{
|
|
|
64
64
|
withSides: z.ZodDefault<z.ZodBoolean>;
|
|
65
65
|
withBottom: z.ZodDefault<z.ZodBoolean>;
|
|
66
66
|
bracketStyle: z.ZodDefault<z.ZodEnum<{
|
|
67
|
+
hidden: "hidden";
|
|
67
68
|
minimal: "minimal";
|
|
68
69
|
industrial: "industrial";
|
|
69
|
-
hidden: "hidden";
|
|
70
70
|
}>>;
|
|
71
71
|
material: z.ZodOptional<z.ZodObject<{
|
|
72
72
|
id: z.ZodOptional<z.ZodString>;
|
|
@@ -14,7 +14,7 @@ export declare const SiteNode: z.ZodObject<{
|
|
|
14
14
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
15
15
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
16
16
|
}, z.core.$strip>>;
|
|
17
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
17
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
18
18
|
id: z.ZodDefault<z.ZodTemplateLiteral<`site_${string}`>>;
|
|
19
19
|
type: z.ZodDefault<z.ZodLiteral<"site">>;
|
|
20
20
|
polygon: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
@@ -168,7 +168,7 @@ export declare const SkylightNode: z.ZodObject<{
|
|
|
168
168
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
169
169
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
170
170
|
}, z.core.$strip>>;
|
|
171
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
171
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
172
172
|
id: z.ZodDefault<z.ZodTemplateLiteral<`skylight_${string}`>>;
|
|
173
173
|
type: z.ZodDefault<z.ZodLiteral<"skylight">>;
|
|
174
174
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -15,7 +15,7 @@ export declare const SlabNode: z.ZodObject<{
|
|
|
15
15
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
16
16
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
17
17
|
}, z.core.$strip>>;
|
|
18
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
18
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
19
19
|
id: z.ZodDefault<z.ZodTemplateLiteral<`slab_${string}`>>;
|
|
20
20
|
type: z.ZodDefault<z.ZodLiteral<"slab">>;
|
|
21
21
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -19,7 +19,7 @@ export declare const SolarPanelNode: z.ZodObject<{
|
|
|
19
19
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
20
20
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
21
21
|
}, z.core.$strip>>;
|
|
22
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
22
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
23
23
|
id: z.ZodDefault<z.ZodTemplateLiteral<`solarpanel_${string}`>>;
|
|
24
24
|
type: z.ZodDefault<z.ZodLiteral<"solar-panel">>;
|
|
25
25
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -14,7 +14,7 @@ export declare const SpawnNode: z.ZodObject<{
|
|
|
14
14
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
15
15
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
16
16
|
}, z.core.$strip>>;
|
|
17
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
17
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
18
18
|
id: z.ZodDefault<z.ZodTemplateLiteral<`spawn_${string}`>>;
|
|
19
19
|
type: z.ZodDefault<z.ZodLiteral<"spawn">>;
|
|
20
20
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
@@ -25,7 +25,7 @@ export declare const StairSegmentNode: z.ZodObject<{
|
|
|
25
25
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
26
26
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
27
27
|
}, z.core.$strip>>;
|
|
28
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
28
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
29
29
|
id: z.ZodDefault<z.ZodTemplateLiteral<`sseg_${string}`>>;
|
|
30
30
|
type: z.ZodDefault<z.ZodLiteral<"stair-segment">>;
|
|
31
31
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -43,7 +43,7 @@ export declare const StairNode: z.ZodObject<{
|
|
|
43
43
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
44
44
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
45
45
|
}, z.core.$strip>>;
|
|
46
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
46
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
47
47
|
id: z.ZodDefault<z.ZodTemplateLiteral<`stair_${string}`>>;
|
|
48
48
|
type: z.ZodDefault<z.ZodLiteral<"stair">>;
|
|
49
49
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -14,7 +14,7 @@ export declare const StructuralGridNode: z.ZodObject<{
|
|
|
14
14
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
15
15
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
16
16
|
}, z.core.$strip>>;
|
|
17
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
17
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
18
18
|
id: z.ZodDefault<z.ZodTemplateLiteral<`structural-grid_${string}`>>;
|
|
19
19
|
type: z.ZodDefault<z.ZodLiteral<"structural-grid">>;
|
|
20
20
|
start: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export declare const TurbineVentMaterialRole: z.ZodEnum<{
|
|
3
|
+
base: "base";
|
|
4
|
+
head: "head";
|
|
5
|
+
}>;
|
|
6
|
+
export type TurbineVentMaterialRole = z.infer<typeof TurbineVentMaterialRole>;
|
|
2
7
|
export declare const TurbineVentNode: z.ZodObject<{
|
|
3
8
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
9
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -14,7 +19,7 @@ export declare const TurbineVentNode: z.ZodObject<{
|
|
|
14
19
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
15
20
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
16
21
|
}, z.core.$strip>>;
|
|
17
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
22
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
18
23
|
id: z.ZodDefault<z.ZodTemplateLiteral<`tvent_${string}`>>;
|
|
19
24
|
type: z.ZodDefault<z.ZodLiteral<"turbine-vent">>;
|
|
20
25
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -49,6 +54,7 @@ export declare const TurbineVentNode: z.ZodObject<{
|
|
|
49
54
|
scale: z.ZodOptional<z.ZodNumber>;
|
|
50
55
|
}, z.core.$strip>>;
|
|
51
56
|
}, z.core.$strip>>;
|
|
57
|
+
slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
52
58
|
materialPreset: z.ZodDefault<z.ZodString>;
|
|
53
59
|
roofSegmentId: z.ZodOptional<z.ZodString>;
|
|
54
60
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turbine-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/turbine-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"turbine-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/turbine-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,uBAAuB;;;EAA2B,CAAA;AAC/D,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2C3B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA"}
|
|
@@ -2,10 +2,12 @@ import dedent from 'dedent';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
4
|
import { MaterialSchema } from '../material';
|
|
5
|
+
export const TurbineVentMaterialRole = z.enum(['base', 'head']);
|
|
5
6
|
export const TurbineVentNode = BaseNode.extend({
|
|
6
7
|
id: objectId('tvent'),
|
|
7
8
|
type: nodeType('turbine-vent'),
|
|
8
9
|
material: MaterialSchema.optional(),
|
|
10
|
+
slots: z.record(z.string(), z.string()).optional(),
|
|
9
11
|
// Default to the white preset so a freshly-placed turbine reads as
|
|
10
12
|
// clean painted/galvanised metal and the paint inspector shows "White"
|
|
11
13
|
// as the current selection (matches box-vent's reasoning).
|
|
@@ -92,7 +92,7 @@ export declare const WallFaceBandConfig: z.ZodPreprocess<z.ZodObject<{
|
|
|
92
92
|
lowerHeight: z.ZodDefault<z.ZodNumber>;
|
|
93
93
|
middleHeight: z.ZodDefault<z.ZodNumber>;
|
|
94
94
|
upperHeight: z.ZodDefault<z.ZodNumber>;
|
|
95
|
-
}, z.core.$strip
|
|
95
|
+
}, z.core.$strip>, unknown>;
|
|
96
96
|
export type WallFaceBandConfig = z.infer<typeof WallFaceBandConfig>;
|
|
97
97
|
export declare const WALL_FACE_BAND_DEFAULT: WallFaceBandConfig;
|
|
98
98
|
export declare const WALL_SKIRTING_SLOT_DEFAULT = "library:preset-softwhite";
|
|
@@ -138,10 +138,10 @@ export declare const WallNode: z.ZodObject<{
|
|
|
138
138
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
139
139
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
140
140
|
}, z.core.$strip>>;
|
|
141
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
141
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
142
142
|
id: z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>;
|
|
143
143
|
type: z.ZodDefault<z.ZodLiteral<"wall">>;
|
|
144
|
-
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`door_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`window_${string}`>>]>>>;
|
|
144
|
+
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`door_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`window_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`leanto_${string}`>>]>>>;
|
|
145
145
|
material: z.ZodOptional<z.ZodObject<{
|
|
146
146
|
id: z.ZodOptional<z.ZodString>;
|
|
147
147
|
preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
@@ -254,7 +254,7 @@ export declare const WallNode: z.ZodObject<{
|
|
|
254
254
|
lowerHeight: z.ZodDefault<z.ZodNumber>;
|
|
255
255
|
middleHeight: z.ZodDefault<z.ZodNumber>;
|
|
256
256
|
upperHeight: z.ZodDefault<z.ZodNumber>;
|
|
257
|
-
}, z.core.$strip
|
|
257
|
+
}, z.core.$strip>, unknown>>;
|
|
258
258
|
skirting: z.ZodOptional<z.ZodObject<{
|
|
259
259
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
260
260
|
sides: z.ZodDefault<z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/wall.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/wall.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { BaseNode, nodeType, objectId } from '../base';
|
|
|
4
4
|
import { MaterialSchema } from '../material';
|
|
5
5
|
import { DoorNode } from './door';
|
|
6
6
|
import { ItemNode } from './item';
|
|
7
|
+
import { LeanToExtensionNode } from './lean-to-extension';
|
|
7
8
|
import { WindowNode } from './window';
|
|
8
9
|
export const WallTreatmentSide = z.enum(['interior', 'exterior', 'both']);
|
|
9
10
|
export const WallTrimProfile = z.enum([
|
|
@@ -112,7 +113,12 @@ export const WallNode = BaseNode.extend({
|
|
|
112
113
|
id: objectId('wall'),
|
|
113
114
|
type: nodeType('wall'),
|
|
114
115
|
children: z
|
|
115
|
-
.array(z.union([
|
|
116
|
+
.array(z.union([
|
|
117
|
+
ItemNode.shape.id,
|
|
118
|
+
DoorNode.shape.id,
|
|
119
|
+
WindowNode.shape.id,
|
|
120
|
+
LeanToExtensionNode.shape.id,
|
|
121
|
+
]))
|
|
116
122
|
.default([]),
|
|
117
123
|
// Legacy single-material wall finish. Read for backward compatibility only.
|
|
118
124
|
material: MaterialSchema.optional(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const WindowType: z.ZodEnum<{
|
|
3
|
-
sliding: "sliding";
|
|
4
3
|
fixed: "fixed";
|
|
4
|
+
sliding: "sliding";
|
|
5
5
|
casement: "casement";
|
|
6
6
|
awning: "awning";
|
|
7
7
|
hopper: "hopper";
|
|
@@ -39,7 +39,7 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
39
39
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
40
40
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
41
41
|
}, z.core.$strip>>;
|
|
42
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
42
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
43
43
|
id: z.ZodDefault<z.ZodTemplateLiteral<`window_${string}`>>;
|
|
44
44
|
type: z.ZodDefault<z.ZodLiteral<"window">>;
|
|
45
45
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -82,6 +82,13 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
82
82
|
back: "back";
|
|
83
83
|
}>>;
|
|
84
84
|
wallId: z.ZodOptional<z.ZodString>;
|
|
85
|
+
dormerId: z.ZodOptional<z.ZodString>;
|
|
86
|
+
dormerFace: z.ZodOptional<z.ZodEnum<{
|
|
87
|
+
front: "front";
|
|
88
|
+
back: "back";
|
|
89
|
+
right: "right";
|
|
90
|
+
left: "left";
|
|
91
|
+
}>>;
|
|
85
92
|
roofSegmentId: z.ZodOptional<z.ZodString>;
|
|
86
93
|
roofFace: z.ZodOptional<z.ZodEnum<{
|
|
87
94
|
front: "front";
|
|
@@ -113,8 +120,8 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
113
120
|
opening: "opening";
|
|
114
121
|
}>>;
|
|
115
122
|
windowType: z.ZodDefault<z.ZodEnum<{
|
|
116
|
-
sliding: "sliding";
|
|
117
123
|
fixed: "fixed";
|
|
124
|
+
sliding: "sliding";
|
|
118
125
|
casement: "casement";
|
|
119
126
|
awning: "awning";
|
|
120
127
|
hopper: "hopper";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,sBAAsB;;;EAAgC,CAAA;AACnE,eAAO,MAAM,wBAAwB;;;;;EAKnC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAC3E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,sBAAsB;;;EAAgC,CAAA;AACnE,eAAO,MAAM,wBAAwB;;;;;EAKnC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAC3E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuFrB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
|
|
@@ -34,6 +34,10 @@ export const WindowNode = BaseNode.extend({
|
|
|
34
34
|
side: z.enum(['front', 'back']).optional(),
|
|
35
35
|
// Wall reference
|
|
36
36
|
wallId: z.string().optional(),
|
|
37
|
+
// Alternative host: a dormer's generated wall face. When set, `position`
|
|
38
|
+
// is FACE-LOCAL — [u along the face, v height, z from the wall mid-plane].
|
|
39
|
+
dormerId: z.string().optional(),
|
|
40
|
+
dormerFace: z.enum(['front', 'back', 'right', 'left']).optional(),
|
|
37
41
|
// Alternative host: a roof-segment's generated wall face (base wall
|
|
38
42
|
// under the roof or a coplanar gable end). When set, `position` is
|
|
39
43
|
// FACE-LOCAL — [u along the face, v height, z from the wall mid-plane]
|
|
@@ -26,8 +26,8 @@ export declare const ZoneNode: z.ZodObject<{
|
|
|
26
26
|
roomNumber: z.ZodDefault<z.ZodString>;
|
|
27
27
|
enclosureStatus: z.ZodDefault<z.ZodEnum<{
|
|
28
28
|
auto: "auto";
|
|
29
|
-
enclosed: "enclosed";
|
|
30
29
|
open: "open";
|
|
30
|
+
enclosed: "enclosed";
|
|
31
31
|
}>>;
|
|
32
32
|
floorFinish: z.ZodDefault<z.ZodString>;
|
|
33
33
|
wallFinish: z.ZodDefault<z.ZodString>;
|
|
@@ -40,7 +40,7 @@ export declare const ZoneNode: z.ZodObject<{
|
|
|
40
40
|
"finish-faces": "finish-faces";
|
|
41
41
|
}>>;
|
|
42
42
|
color: z.ZodDefault<z.ZodString>;
|
|
43
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
43
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
44
44
|
}, z.core.$strip>;
|
|
45
45
|
export type ZoneNode = z.infer<typeof ZoneNode>;
|
|
46
46
|
//# sourceMappingURL=zone.d.ts.map
|
|
@@ -24,7 +24,7 @@ export const ZoneNode = BaseNode.extend({
|
|
|
24
24
|
clearDimensionPolicy: z.enum(['none', 'inside-faces', 'finish-faces']).default('none'),
|
|
25
25
|
// Visual styling
|
|
26
26
|
color: z.string().default('#3b82f6'), // Default blue
|
|
27
|
-
metadata: z.
|
|
27
|
+
metadata: z.record(z.string(), z.unknown()).optional().default({}),
|
|
28
28
|
}).describe(dedent `
|
|
29
29
|
Zone schema - a polygon zone attached to a level
|
|
30
30
|
- object: "zone"
|