@pascal-app/core 1.0.0-beta.4 → 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-manager.d.ts +12 -0
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +39 -1
- 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 +15 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -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/room-topology-index.d.ts +50 -0
- package/dist/lib/room-topology-index.d.ts.map +1 -0
- package/dist/lib/room-topology-index.js +237 -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 +40 -3
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +890 -246
- package/dist/registry/handles.d.ts +24 -3
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +3 -3
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/registry.d.ts +29 -6
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +111 -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 +261 -13
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/use-registry-version.d.ts +11 -0
- package/dist/registry/use-registry-version.d.ts.map +1 -0
- package/dist/registry/use-registry-version.js +15 -0
- 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 +20 -15
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +19 -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 +5 -2
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/level.js +9 -0
- 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 +485 -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 +2 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/storey.d.ts +3 -10
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +45 -15
- 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 +15 -4
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +458 -19
- package/dist/store/history-control.d.ts +5 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +68 -6
- 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 +407 -227
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +16 -11
- 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/slab/slab-support.d.ts +0 -31
- package/dist/systems/slab/slab-support.d.ts.map +1 -1
- package/dist/systems/slab/slab-support.js +26 -4
- 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 +1556 -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.js +21 -20
- 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/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +88 -9
- package/dist/systems/wall/wall-topology.d.ts +53 -0
- package/dist/systems/wall/wall-topology.d.ts.map +1 -0
- package/dist/systems/wall/wall-topology.js +414 -0
- package/dist/utils/clone-scene-graph.d.ts +2 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +39 -2
- package/dist/utils/scene-migrations.d.ts +1 -0
- package/dist/utils/scene-migrations.d.ts.map +1 -1
- package/dist/utils/scene-migrations.js +1 -0
- package/dist/utils/vertical-scene-migration.d.ts +13 -0
- package/dist/utils/vertical-scene-migration.d.ts.map +1 -0
- package/dist/utils/vertical-scene-migration.js +179 -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
|
@@ -43,8 +43,13 @@ export type EditorApi = {
|
|
|
43
43
|
engageTangentMove: (node: AnyNode, index: number, side: 'in' | 'out') => void;
|
|
44
44
|
};
|
|
45
45
|
export type HandlePortal = 'self' | 'parent' | 'grandparent';
|
|
46
|
+
export type HandlePortalTarget<N> = (node: N, sceneApi: SceneApi) => AnyNodeId | null | undefined;
|
|
46
47
|
export type HandleAxis = 'x' | 'y' | 'z';
|
|
47
48
|
export type HandleAnchor = 'center' | 'min' | 'max';
|
|
49
|
+
/** Keyboard modifiers captured for a handle-resize tick. */
|
|
50
|
+
export type HandleDragModifiers = {
|
|
51
|
+
readonly altKey: boolean;
|
|
52
|
+
};
|
|
48
53
|
/** 3D position + rotation of the arrow in its portal target's local space. */
|
|
49
54
|
export type HandlePlacement<N> = {
|
|
50
55
|
/**
|
|
@@ -96,14 +101,14 @@ export type LinearResizeHandle<N> = {
|
|
|
96
101
|
axis: HandleAxis;
|
|
97
102
|
anchor: HandleAnchor;
|
|
98
103
|
currentValue: (node: N) => number;
|
|
99
|
-
apply: (node: N, newValue: number, sceneApi: SceneApi) => Partial<N>;
|
|
104
|
+
apply: (node: N, newValue: number, sceneApi: SceneApi, modifiers?: HandleDragModifiers) => Partial<N>;
|
|
100
105
|
/**
|
|
101
106
|
* Additional live-only patches for geometry owned by related nodes. The
|
|
102
107
|
* editor publishes these during the drag and clears them on release or
|
|
103
108
|
* cancellation; committed scene writes remain the responsibility of
|
|
104
109
|
* `commit` (or the generic selected-node update).
|
|
105
110
|
*/
|
|
106
|
-
previewOverrides?: (node: N, newValue: number, sceneApi: SceneApi) => ReadonlyArray<readonly [AnyNodeId, Partial<AnyNode>]>;
|
|
111
|
+
previewOverrides?: (node: N, newValue: number, sceneApi: SceneApi, modifiers?: HandleDragModifiers) => ReadonlyArray<readonly [AnyNodeId, Partial<AnyNode>]>;
|
|
107
112
|
/** Optional live-scene visibility gate for context-dependent arrows. */
|
|
108
113
|
visible?: (node: N, sceneApi: SceneApi) => boolean;
|
|
109
114
|
/**
|
|
@@ -113,7 +118,7 @@ export type LinearResizeHandle<N> = {
|
|
|
113
118
|
* final write here to fan the resize out to siblings / parents while keeping
|
|
114
119
|
* the handle UI generic.
|
|
115
120
|
*/
|
|
116
|
-
commit?: (node: N, patch: Partial<N>, sceneApi: SceneApi) => void;
|
|
121
|
+
commit?: (node: N, patch: Partial<N>, sceneApi: SceneApi, modifiers?: HandleDragModifiers) => void;
|
|
117
122
|
/**
|
|
118
123
|
* Optional per-tick hook fired while this handle is being dragged, with the
|
|
119
124
|
* live (in-progress, override-merged) node. A pure side-channel for transient
|
|
@@ -146,6 +151,13 @@ export type LinearResizeHandle<N> = {
|
|
|
146
151
|
gridSnap?: boolean;
|
|
147
152
|
/** Kind-owned magnetic snap for the resized scalar, gated by the active snapping mode. */
|
|
148
153
|
magneticSnap?: (node: N, newValue: number, sceneApi: SceneApi) => number;
|
|
154
|
+
/**
|
|
155
|
+
* Kind-owned structural connection snap. Unlike alignment snapping, this is
|
|
156
|
+
* active in every snapping mode and is bypassed only by the held Alt force
|
|
157
|
+
* modifier. Use it when the snapped result changes connectivity, such as two
|
|
158
|
+
* lean-to roof edges becoming one continuous run.
|
|
159
|
+
*/
|
|
160
|
+
connectionSnap?: (node: N, newValue: number, sceneApi: SceneApi) => number;
|
|
149
161
|
placement: HandlePlacement<N>;
|
|
150
162
|
/**
|
|
151
163
|
* Dimension this handle steers (e.g. `'height'`). When set, the editor
|
|
@@ -162,6 +174,7 @@ export type LinearResizeHandle<N> = {
|
|
|
162
174
|
* need to ride the wall's rotation.
|
|
163
175
|
*/
|
|
164
176
|
portal?: HandlePortal;
|
|
177
|
+
portalTarget?: HandlePortalTarget<N>;
|
|
165
178
|
cursor?: Cursor;
|
|
166
179
|
/** Optional visual guide shown while the arrow is hovered or dragging. */
|
|
167
180
|
decoration?: HandleDecoration<N>;
|
|
@@ -223,6 +236,7 @@ export type RadialResizeHandle<N> = {
|
|
|
223
236
|
max?: number | ((node: N, sceneApi: SceneApi) => number);
|
|
224
237
|
placement: HandlePlacement<N>;
|
|
225
238
|
portal?: HandlePortal;
|
|
239
|
+
portalTarget?: HandlePortalTarget<N>;
|
|
226
240
|
/** Optional visual guide shown while the arrow is hovered or dragging. */
|
|
227
241
|
decoration?: HandleDecoration<N>;
|
|
228
242
|
};
|
|
@@ -249,8 +263,10 @@ export type ArcResizeHandle<N = any> = {
|
|
|
249
263
|
/** Optional metadata for descriptors that bundle two handles per kind. */
|
|
250
264
|
end?: 'start' | 'end';
|
|
251
265
|
apply: (initialNode: N, delta: number, sceneApi: SceneApi) => Partial<N>;
|
|
266
|
+
visible?: (node: N, sceneApi: SceneApi) => boolean;
|
|
252
267
|
placement: HandlePlacement<N>;
|
|
253
268
|
portal?: HandlePortal;
|
|
269
|
+
portalTarget?: HandlePortalTarget<N>;
|
|
254
270
|
/** Optional visual guide shown while the arrow is hovered or dragging. */
|
|
255
271
|
decoration?: HandleDecoration<N>;
|
|
256
272
|
/**
|
|
@@ -295,6 +311,7 @@ export type EndpointMoveHandle<N> = {
|
|
|
295
311
|
/** Called with the world-space hit on the ground plane. */
|
|
296
312
|
apply: (node: N, worldPoint: readonly [number, number, number], sceneApi: SceneApi) => Partial<N>;
|
|
297
313
|
portal?: HandlePortal;
|
|
314
|
+
portalTarget?: HandlePortalTarget<N>;
|
|
298
315
|
};
|
|
299
316
|
/**
|
|
300
317
|
* Click-to-engage affordance. The descriptor doesn't drive a drag — its
|
|
@@ -339,7 +356,9 @@ export type TapActionHandle<N = any> = {
|
|
|
339
356
|
* stands it up against the node's facing plane (a wall face).
|
|
340
357
|
*/
|
|
341
358
|
plane?: 'horizontal' | 'node-normal';
|
|
359
|
+
visible?: (node: N, sceneApi: SceneApi) => boolean;
|
|
342
360
|
portal?: HandlePortal;
|
|
361
|
+
portalTarget?: HandlePortalTarget<N>;
|
|
343
362
|
cursor?: Cursor;
|
|
344
363
|
};
|
|
345
364
|
/**
|
|
@@ -381,6 +400,7 @@ export type TranslateHandle<N = any> = {
|
|
|
381
400
|
*/
|
|
382
401
|
snapExtents?: (node: N, sceneApi: SceneApi) => readonly [number, number] | null;
|
|
383
402
|
portal?: HandlePortal;
|
|
403
|
+
portalTarget?: HandlePortalTarget<N>;
|
|
384
404
|
};
|
|
385
405
|
/**
|
|
386
406
|
* Click-to-latch cube. Renders a small persistent cube at `placement` that
|
|
@@ -399,6 +419,7 @@ export type LatchHandle<N = any> = {
|
|
|
399
419
|
group: string;
|
|
400
420
|
placement: HandlePlacement<N>;
|
|
401
421
|
portal?: HandlePortal;
|
|
422
|
+
portalTarget?: HandlePortalTarget<N>;
|
|
402
423
|
};
|
|
403
424
|
export type HandleDescriptor<N = any> = LinearResizeHandle<N> | RadialResizeHandle<N> | ArcResizeHandle<N> | EndpointMoveHandle<N> | TapActionHandle<N> | TranslateHandle<N> | LatchHandle<N>;
|
|
404
425
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/registry/handles.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB;;;;OAIG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACnC;;;;OAIG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACvC;;;OAGG;IACH,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,KAAK,IAAI,CAAA;IACtE;;;OAGG;IACH,sBAAsB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D;;;;OAIG;IACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,KAAK,IAAI,CAAA;CAC9E,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAA;AAE5D,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAExC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;AAEnD,8EAA8E;AAC9E,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5E,oDAAoD;IACpD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;AAE7E;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAA;IAC/C,+CAA+C;IAC/C,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IACvB,kEAAkE;IAClE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAC5E,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;IAClC,IAAI,EAAE,eAAe,CAAA;IACrB,0DAA0D;IAC1D,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IACjC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/registry/handles.ts"],"names":[],"mappings":"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"}
|
package/dist/registry/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export type { ArcResizeHandle, Cursor, EditorApi, EndpointMoveHandle, HandleAnchor, HandleAxis, HandleDescriptor, HandleList, HandlePlacement, HandlePortal, LatchHandle, LinearResizeHandle, RadialResizeHandle, TapActionHandle, TranslateHandle, } from './handles';
|
|
2
|
-
export { bakePolicyOf, discoverPlugins, extendPluginDiscovery, getHostRefFields, getNodePluginId, getSelectableKinds, hasRegistry3DMoveTool, isDrawnViaTool, isDrawnViaToolKind, isNodeKindEnabled, isPresettable, isPresettableKind, isRegistryMovable, isRegistrySelectable, kindsWithBakePolicy, kindsWithFloorplanScope, loadPlugin, nodeRegistry, type PluginDiscovery, registerNode, resolveFacingIndicator, setPluginDiscovery, } from './registry';
|
|
1
|
+
export type { ArcResizeHandle, Cursor, EditorApi, EndpointMoveHandle, HandleAnchor, HandleAxis, HandleDescriptor, HandleDragModifiers, HandleList, HandlePlacement, HandlePortal, LatchHandle, LinearResizeHandle, RadialResizeHandle, TapActionHandle, TranslateHandle, } from './handles';
|
|
2
|
+
export { bakePolicyOf, discoverPlugins, extendPluginDiscovery, getHostRefFields, getInspectorExtensions, getNodePluginId, getRegistryVersion, getSelectableKinds, hasRegistry3DMoveTool, isDrawnViaTool, isDrawnViaToolKind, isNodeKindEnabled, isPresettable, isPresettableKind, isRegistryMovable, isRegistrySelectable, isSelectionHighlightEnabled, kindsWithBakePolicy, kindsWithFloorplanScope, loadPlugin, nodeRegistry, onRegistryChange, type PluginDiscovery, registerNode, resolveFacingIndicator, setPluginDiscovery, } from './registry';
|
|
3
3
|
export { type CascadeContext, type ChildQuery, cascadeDirty, collectDescendants, type SpatialQuery, } from './relations-resolver';
|
|
4
4
|
export { createSceneApi, type SceneStoreLike } from './scene-api';
|
|
5
5
|
export { type CloneNodesIntoOptions, type CloneNodesIntoResult, cloneNodesInto, collectSubtree, type Subtree, } from './subtree';
|
|
6
|
-
export type { Affordance, AlignmentFootprint, AlignmentFootprintConfig, AnyNodeDefinition, AssetRef, BakePolicy, BakeReplaceRenderer, Capabilities, CapabilityCtx, CuttableConfig, DimensionTerminator, DimensionTextPosition, DistributionRole, DragAction, DuplicableConfig, DuplicateSubtreeCloneArgs, DuplicateSubtreeCloneResult, EditorCtx, ExportAnimationContext, FloorPlacedConfig, FloorPlacedFootprint, FloorPlacedFootprintContext, FloorPlacedFootprintResolver, FloorPlacedFootprintsResolver, FloorplanAffordance, FloorplanAffordanceModifiers, FloorplanAffordancePoint, FloorplanAffordanceSession, FloorplanGeometry, FloorplanMoveTarget, FloorplanMoveTargetSession, FloorplanPalette, FloorplanPoint, FloorplanStyle, GeometryContext, GroupMoveSnapArgs, HostableConfig, IconRef, Issue, KeyboardAction, KeyboardActions, LazyComponent, LiveTransformLike, McpOverrides, MeasurementContribution, MeasurementFeature, MeasurementFeatureBinding, MeasurementFeatureGeometry, MeasurementSnapKind, Modifiers, MovableConfig, MovableParentFrame, NodeCategory, NodeDefinition, NodePort, NodeQuickAction, NodeQuickActionIcon, NodeQuickActionNodeScope, NodeQuickActionProvider, NodeQuickActionResult, NodeRegistry, PaintCapability, PaintEffectiveMaterialArgs, PaintPatchArgs, PaintPreviewArgs, PaintResolveArgs, ParamAction, ParametricDescriptor, ParamField, ParamGroup, ParentFrameSnapMatch, Plugin, Presentation, QuickMeasurementMetric, QuickMeasurementQuantity, QuickMeasurementReport, Relations, RendererSource, RoofAccessoryConfig, RotatableConfig, ScalableConfig, SceneActionCapability, SceneApi, SelectableConfig, SlotDeclaration, SnapPointKind, SnapProfile, SnappableConfig, SnapServicesLike, SurfacePoint, SurfaceQuery, SurfaceRole, SurfacesConfig, SystemContribution, ToolHint, ToolHintChip, Vec2, } from './types';
|
|
6
|
+
export type { Affordance, AlignmentFootprint, AlignmentFootprintConfig, AnyNodeDefinition, AssetRef, BakeGeometryAsyncBuilder, BakeGeometryBuilder, BakePolicy, BakeReplaceRenderer, Capabilities, CapabilityCtx, CuttableConfig, DimensionTerminator, DimensionTextPosition, DistributionRole, DragAction, DuplicableConfig, DuplicateSubtreeCloneArgs, DuplicateSubtreeCloneResult, EditorCtx, ExportAnimationContext, FaceHostCapability, FaceHostPlacementArgs, FaceHostPlacementResult, FaceHostStoredPlacementArgs, FaceHostStoredValidityArgs, FloorPlacedConfig, FloorPlacedFootprint, FloorPlacedFootprintContext, FloorPlacedFootprintResolver, FloorPlacedFootprintsResolver, FloorplanAffordance, FloorplanAffordanceModifiers, FloorplanAffordancePoint, FloorplanAffordanceSession, FloorplanGeometry, FloorplanMoveTarget, FloorplanMoveTargetSession, FloorplanPalette, FloorplanPoint, FloorplanScope, FloorplanStyle, GeometryContext, GridSnapPositionArgs, GroupMoveSnapArgs, GroupMoveSnapResult, HostableConfig, IconRef, InspectorExtension, Issue, KeyboardAction, KeyboardActions, LazyComponent, LiveTransformLike, McpOverrides, MeasurementContribution, MeasurementFeature, MeasurementFeatureBinding, MeasurementFeatureGeometry, MeasurementSnapKind, Modifiers, MovableConfig, MovableParentFrame, NodeCategory, NodeDefinition, NodePort, NodeQuickAction, NodeQuickActionIcon, NodeQuickActionNodeScope, NodeQuickActionProvider, NodeQuickActionResult, NodeRegistry, PaintCapability, PaintEffectiveMaterialArgs, PaintPatchArgs, PaintPreviewArgs, PaintResolveArgs, ParamAction, ParametricDescriptor, ParamField, ParamGroup, ParentFrameSnapMatch, Plugin, Presentation, QuickMeasurementMetric, QuickMeasurementQuantity, QuickMeasurementReport, Relations, RendererSource, RoofAccessoryConfig, RotatableConfig, ScalableConfig, SceneActionCapability, SceneApi, SelectableConfig, SlotDeclaration, SnapPointKind, SnapProfile, SnappableConfig, SnapServicesLike, SurfacePoint, SurfaceQuery, SurfaceRole, SurfacesConfig, SystemContribution, ToolHint, ToolHintChip, ToolOption, ToolOptionChoice, Vec2, } from './types';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,MAAM,EACN,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,YAAY,EACZ,KAAK,eAAe,EACpB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,YAAY,EACZ,kBAAkB,EAClB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACjE,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,cAAc,EACd,cAAc,EACd,KAAK,OAAO,GACb,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,SAAS,EACT,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,KAAK,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,MAAM,EACN,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,IAAI,GACL,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"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"}
|
package/dist/registry/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { bakePolicyOf, discoverPlugins, extendPluginDiscovery, getHostRefFields, getNodePluginId, getSelectableKinds, hasRegistry3DMoveTool, isDrawnViaTool, isDrawnViaToolKind, isNodeKindEnabled, isPresettable, isPresettableKind, isRegistryMovable, isRegistrySelectable, kindsWithBakePolicy, kindsWithFloorplanScope, loadPlugin, nodeRegistry, registerNode, resolveFacingIndicator, setPluginDiscovery, } from './registry';
|
|
1
|
+
export { bakePolicyOf, discoverPlugins, extendPluginDiscovery, getHostRefFields, getInspectorExtensions, getNodePluginId, getRegistryVersion, getSelectableKinds, hasRegistry3DMoveTool, isDrawnViaTool, isDrawnViaToolKind, isNodeKindEnabled, isPresettable, isPresettableKind, isRegistryMovable, isRegistrySelectable, isSelectionHighlightEnabled, kindsWithBakePolicy, kindsWithFloorplanScope, loadPlugin, nodeRegistry, onRegistryChange, registerNode, resolveFacingIndicator, setPluginDiscovery, } from './registry';
|
|
2
2
|
export { cascadeDirty, collectDescendants, } from './relations-resolver';
|
|
3
3
|
export { createSceneApi } from './scene-api';
|
|
4
4
|
export { cloneNodesInto, collectSubtree, } from './subtree';
|
|
@@ -1,11 +1,28 @@
|
|
|
1
|
-
import type { AnyNodeDefinition, BakePolicy, NodeRegistry, Plugin } from './types';
|
|
1
|
+
import type { AnyNodeDefinition, BakePolicy, FloorplanScope, InspectorExtension, NodeRegistry, Plugin } from './types';
|
|
2
|
+
/** Monotonic counter, bumped on every kind registration (and test reset). */
|
|
3
|
+
export declare function getRegistryVersion(): number;
|
|
4
|
+
/**
|
|
5
|
+
* Subscribe to registry changes (a kind registered via {@link registerNode}
|
|
6
|
+
* / {@link loadPlugin}, or a test reset). Returns the unsubscribe function.
|
|
7
|
+
* `useSyncExternalStore`-compatible.
|
|
8
|
+
*/
|
|
9
|
+
export declare function onRegistryChange(listener: () => void): () => void;
|
|
2
10
|
export declare const nodeRegistry: NodeRegistry & {
|
|
3
11
|
_register: (def: AnyNodeDefinition) => void;
|
|
4
12
|
_reset: () => void;
|
|
13
|
+
_snapshot: () => () => void;
|
|
5
14
|
};
|
|
6
15
|
export declare function registerNode(def: AnyNodeDefinition): void;
|
|
7
16
|
/** The plugin that registered a node kind, when it came through {@link loadPlugin}. */
|
|
8
17
|
export declare function getNodePluginId(kind: string): string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Inspector-card sections registered for a node kind
|
|
20
|
+
* ({@link InspectorExtension}), in plugin load order. Callers must still
|
|
21
|
+
* apply the project's install gate (`installedPlugins` — same rule as
|
|
22
|
+
* {@link isNodeKindEnabled}) before rendering. Re-derive on the
|
|
23
|
+
* registry-version bump: plugins register asynchronously after mount.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getInspectorExtensions(kind: string): InspectorExtension[];
|
|
9
26
|
/**
|
|
10
27
|
* Whether a registered kind should participate in a project. Kinds registered
|
|
11
28
|
* directly by the host and the built-in plugin are always enabled. An omitted
|
|
@@ -29,14 +46,20 @@ export declare function getSelectableKinds(): string[];
|
|
|
29
46
|
* in expression chains like `if (node.type === 'wall' || isRegistrySelectable(node.type))`.
|
|
30
47
|
*/
|
|
31
48
|
export declare function isRegistrySelectable(kind: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Whether the editor should apply its material-based selection highlight to a
|
|
51
|
+
* kind. Selection highlighting is enabled by default, including for legacy or
|
|
52
|
+
* unregistered kinds; definitions may explicitly opt out.
|
|
53
|
+
*/
|
|
54
|
+
export declare function isSelectionHighlightEnabled(kind: string): boolean;
|
|
32
55
|
/**
|
|
33
56
|
* Kinds whose `def.floorplanScope` matches the requested scope. Used by
|
|
34
|
-
* `FloorplanRegistryLayer` to discover building-scoped kinds
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
57
|
+
* `FloorplanRegistryLayer` to discover building- and site-scoped kinds
|
|
58
|
+
* without hardcoding kind names in the editor layer. `'level'` is the
|
|
59
|
+
* default, so `kindsWithFloorplanScope('level')` includes kinds that
|
|
60
|
+
* didn't set the field at all.
|
|
38
61
|
*/
|
|
39
|
-
export declare function kindsWithFloorplanScope(scope:
|
|
62
|
+
export declare function kindsWithFloorplanScope(scope: FloorplanScope): string[];
|
|
40
63
|
/**
|
|
41
64
|
* A kind's {@link BakePolicy} from the registry, defaulting to `'static'` for
|
|
42
65
|
* kinds that don't declare one (or aren't registered). The bake and the baked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,44 @@
|
|
|
1
1
|
const HOST_API_VERSION = 1;
|
|
2
2
|
const BUILTIN_PLUGIN_ID = 'pascal:core';
|
|
3
3
|
const pluginIdsByKind = new Map();
|
|
4
|
+
// Inspector-card sections contributed by plugins, fanned out per node kind
|
|
5
|
+
// (`Plugin.inspectorExtensions`). Filled by `loadPlugin`, cleared by the
|
|
6
|
+
// test reset alongside `pluginIdsByKind`. Consumers re-derive on the
|
|
7
|
+
// registry-version bump — plugins load asynchronously, after first mount.
|
|
8
|
+
const inspectorExtensionsByKind = new Map();
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Registry change notification. Plugin kinds register ASYNCHRONOUSLY (app
|
|
11
|
+
// bootstraps discover them via dynamic imports — see `discoverPlugins`), so
|
|
12
|
+
// any consumer that snapshots the registry at mount (the selection managers'
|
|
13
|
+
// `getSelectableKinds()` subscription lists) goes stale the moment a plugin
|
|
14
|
+
// loads after it. `_register` / `_reset` bump a monotonic version and notify
|
|
15
|
+
// listeners; `useRegistryVersion()` (registry/use-registry-version.ts) turns
|
|
16
|
+
// that into a React re-render so effects can re-derive their kind lists.
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
let registryVersion = 0;
|
|
19
|
+
const registryListeners = new Set();
|
|
20
|
+
function notifyRegistryChanged() {
|
|
21
|
+
registryVersion += 1;
|
|
22
|
+
// Copy before iterating — a listener may unsubscribe (or subscribe) as a
|
|
23
|
+
// consequence of the notification.
|
|
24
|
+
for (const listener of [...registryListeners])
|
|
25
|
+
listener();
|
|
26
|
+
}
|
|
27
|
+
/** Monotonic counter, bumped on every kind registration (and test reset). */
|
|
28
|
+
export function getRegistryVersion() {
|
|
29
|
+
return registryVersion;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Subscribe to registry changes (a kind registered via {@link registerNode}
|
|
33
|
+
* / {@link loadPlugin}, or a test reset). Returns the unsubscribe function.
|
|
34
|
+
* `useSyncExternalStore`-compatible.
|
|
35
|
+
*/
|
|
36
|
+
export function onRegistryChange(listener) {
|
|
37
|
+
registryListeners.add(listener);
|
|
38
|
+
return () => {
|
|
39
|
+
registryListeners.delete(listener);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
4
42
|
// True in dev / test builds, false in production. Tries Vite's
|
|
5
43
|
// `import.meta.env.DEV` first (the editor app's bundler) and falls back
|
|
6
44
|
// to `process.env.NODE_ENV !== 'production'` for Node test runners.
|
|
@@ -61,11 +99,39 @@ class NodeRegistryImpl {
|
|
|
61
99
|
}
|
|
62
100
|
}
|
|
63
101
|
this.defs.set(def.kind, def);
|
|
102
|
+
notifyRegistryChanged();
|
|
64
103
|
}
|
|
65
104
|
// Test-only — clears the registry. Not exported from the package barrel.
|
|
66
105
|
_reset() {
|
|
67
106
|
this.defs.clear();
|
|
68
107
|
pluginIdsByKind.clear();
|
|
108
|
+
inspectorExtensionsByKind.clear();
|
|
109
|
+
notifyRegistryChanged();
|
|
110
|
+
}
|
|
111
|
+
// Test-only — captures the registry (definitions + plugin bookkeeping) and
|
|
112
|
+
// returns a restore function. The registry is a module singleton and bun
|
|
113
|
+
// runs a package's test files sequentially in ONE process, so a test that
|
|
114
|
+
// registers a throwaway kind (or `_reset()`s) without restoring leaks that
|
|
115
|
+
// state into every later test FILE — and file order varies by platform
|
|
116
|
+
// (macOS vs CI Linux), which turns the leak into an order-dependent flake.
|
|
117
|
+
// Wrap registry mutations in `const restore = nodeRegistry._snapshot()`
|
|
118
|
+
// + `restore()` in `afterEach`/`finally`.
|
|
119
|
+
_snapshot() {
|
|
120
|
+
const defs = new Map(this.defs);
|
|
121
|
+
const pluginIds = new Map(pluginIdsByKind);
|
|
122
|
+
const extensions = new Map(Array.from(inspectorExtensionsByKind, ([kind, list]) => [kind, [...list]]));
|
|
123
|
+
return () => {
|
|
124
|
+
this.defs.clear();
|
|
125
|
+
for (const [kind, def] of defs)
|
|
126
|
+
this.defs.set(kind, def);
|
|
127
|
+
pluginIdsByKind.clear();
|
|
128
|
+
for (const [kind, id] of pluginIds)
|
|
129
|
+
pluginIdsByKind.set(kind, id);
|
|
130
|
+
inspectorExtensionsByKind.clear();
|
|
131
|
+
for (const [kind, list] of extensions)
|
|
132
|
+
inspectorExtensionsByKind.set(kind, [...list]);
|
|
133
|
+
notifyRegistryChanged();
|
|
134
|
+
};
|
|
69
135
|
}
|
|
70
136
|
}
|
|
71
137
|
export const nodeRegistry = new NodeRegistryImpl();
|
|
@@ -76,6 +142,16 @@ export function registerNode(def) {
|
|
|
76
142
|
export function getNodePluginId(kind) {
|
|
77
143
|
return pluginIdsByKind.get(kind);
|
|
78
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Inspector-card sections registered for a node kind
|
|
147
|
+
* ({@link InspectorExtension}), in plugin load order. Callers must still
|
|
148
|
+
* apply the project's install gate (`installedPlugins` — same rule as
|
|
149
|
+
* {@link isNodeKindEnabled}) before rendering. Re-derive on the
|
|
150
|
+
* registry-version bump: plugins register asynchronously after mount.
|
|
151
|
+
*/
|
|
152
|
+
export function getInspectorExtensions(kind) {
|
|
153
|
+
return inspectorExtensionsByKind.get(kind) ?? [];
|
|
154
|
+
}
|
|
79
155
|
/**
|
|
80
156
|
* Whether a registered kind should participate in a project. Kinds registered
|
|
81
157
|
* directly by the host and the built-in plugin are always enabled. An omitted
|
|
@@ -114,12 +190,20 @@ export function getSelectableKinds() {
|
|
|
114
190
|
export function isRegistrySelectable(kind) {
|
|
115
191
|
return nodeRegistry.get(kind)?.capabilities.selectable !== undefined;
|
|
116
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Whether the editor should apply its material-based selection highlight to a
|
|
195
|
+
* kind. Selection highlighting is enabled by default, including for legacy or
|
|
196
|
+
* unregistered kinds; definitions may explicitly opt out.
|
|
197
|
+
*/
|
|
198
|
+
export function isSelectionHighlightEnabled(kind) {
|
|
199
|
+
return nodeRegistry.get(kind)?.capabilities.selectionHighlight !== false;
|
|
200
|
+
}
|
|
117
201
|
/**
|
|
118
202
|
* Kinds whose `def.floorplanScope` matches the requested scope. Used by
|
|
119
|
-
* `FloorplanRegistryLayer` to discover building-scoped kinds
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
203
|
+
* `FloorplanRegistryLayer` to discover building- and site-scoped kinds
|
|
204
|
+
* without hardcoding kind names in the editor layer. `'level'` is the
|
|
205
|
+
* default, so `kindsWithFloorplanScope('level')` includes kinds that
|
|
206
|
+
* didn't set the field at all.
|
|
123
207
|
*/
|
|
124
208
|
export function kindsWithFloorplanScope(scope) {
|
|
125
209
|
const result = [];
|
|
@@ -241,6 +325,29 @@ export async function loadPlugin(plugin) {
|
|
|
241
325
|
registerNode(def);
|
|
242
326
|
pluginIdsByKind.set(def.kind, plugin.id);
|
|
243
327
|
}
|
|
328
|
+
let extensionsChanged = false;
|
|
329
|
+
for (const extension of plugin.inspectorExtensions ?? []) {
|
|
330
|
+
for (const kind of extension.kinds) {
|
|
331
|
+
const list = inspectorExtensionsByKind.get(kind);
|
|
332
|
+
if (!list) {
|
|
333
|
+
inspectorExtensionsByKind.set(kind, [extension]);
|
|
334
|
+
extensionsChanged = true;
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
// Same-id re-registration replaces in place (dev HMR re-runs
|
|
338
|
+
// `loadPlugin`); a fresh id appends in load order.
|
|
339
|
+
const existing = list.findIndex((e) => e.id === extension.id);
|
|
340
|
+
if (existing >= 0)
|
|
341
|
+
list[existing] = extension;
|
|
342
|
+
else
|
|
343
|
+
list.push(extension);
|
|
344
|
+
extensionsChanged = true;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// Nodes already notified per `registerNode`; bump once more so a plugin
|
|
348
|
+
// that only contributes inspector extensions still re-renders consumers.
|
|
349
|
+
if (extensionsChanged)
|
|
350
|
+
notifyRegistryChanged();
|
|
244
351
|
}
|
|
245
352
|
const defaultPluginDiscovery = async () => [];
|
|
246
353
|
let pluginDiscovery = defaultPluginDiscovery;
|
|
@@ -16,10 +16,26 @@ export type SceneStoreLike = {
|
|
|
16
16
|
node: AnyNode;
|
|
17
17
|
parentId?: AnyNodeId;
|
|
18
18
|
}[]) => void;
|
|
19
|
+
applyNodeChanges?: (changes: {
|
|
20
|
+
create?: {
|
|
21
|
+
node: AnyNode;
|
|
22
|
+
parentId?: AnyNodeId;
|
|
23
|
+
}[];
|
|
24
|
+
update?: {
|
|
25
|
+
id: AnyNodeId;
|
|
26
|
+
data: Partial<AnyNode>;
|
|
27
|
+
}[];
|
|
28
|
+
delete?: AnyNodeId[];
|
|
29
|
+
}) => void;
|
|
19
30
|
updateNode: (id: AnyNodeId, data: Partial<AnyNode>) => void;
|
|
20
31
|
deleteNode: (id: AnyNodeId) => void;
|
|
21
32
|
markDirty: (id: AnyNodeId) => void;
|
|
22
33
|
};
|
|
34
|
+
subscribe?: (listener: (state: {
|
|
35
|
+
nodes: Record<AnyNodeId, AnyNode>;
|
|
36
|
+
}, previous: {
|
|
37
|
+
nodes: Record<AnyNodeId, AnyNode>;
|
|
38
|
+
}) => void) => () => void;
|
|
23
39
|
temporal: {
|
|
24
40
|
getState: () => {
|
|
25
41
|
pause: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-api.d.ts","sourceRoot":"","sources":["../../src/registry/scene-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"scene-api.d.ts","sourceRoot":"","sources":["../../src/registry/scene-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAWzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM;QACd,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACjC,WAAW,EAAE,SAAS,EAAE,CAAA;QACxB,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;QACzD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;SAAE,EAAE,KAAK,IAAI,CAAA;QACtE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE;YAC3B,MAAM,CAAC,EAAE;gBAAE,IAAI,EAAE,OAAO,CAAC;gBAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;aAAE,EAAE,CAAA;YAClD,MAAM,CAAC,EAAE;gBAAE,EAAE,EAAE,SAAS,CAAC;gBAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;aAAE,EAAE,CAAA;YACpD,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;SACrB,KAAK,IAAI,CAAA;QACV,UAAU,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;QAC3D,UAAU,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAA;QACnC,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAA;KACnC,CAAA;IACD,SAAS,CAAC,EAAE,CACV,QAAQ,EAAE,CACR,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;KAAE,EAC5C,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;KAAE,KAC5C,IAAI,KACN,MAAM,IAAI,CAAA;IACf,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM;YAAE,KAAK,EAAE,MAAM,IAAI,CAAC;YAAC,MAAM,EAAE,MAAM,IAAI,CAAA;SAAE,CAAA;KAC1D,CAAA;CACF,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,CAwI9D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pauseSceneHistory, resumeSceneHistory } from '../store/history-control';
|
|
1
|
+
import { activeSceneCommitNodeIds, pauseSceneHistory, resumeSceneHistory, } from '../store/history-control';
|
|
2
2
|
import { collectSubtree, cloneNodesInto as runCloneNodesInto, } from './subtree';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a {@link SceneApi} backed by a store.
|
|
@@ -37,6 +37,54 @@ export function createSceneApi(store) {
|
|
|
37
37
|
store.getState().createNode(node, parentId);
|
|
38
38
|
return node.id;
|
|
39
39
|
},
|
|
40
|
+
createMany(ops) {
|
|
41
|
+
for (const op of ops)
|
|
42
|
+
captureIfNeeded(op.node.id);
|
|
43
|
+
const batch = store.getState().createNodes;
|
|
44
|
+
if (batch)
|
|
45
|
+
batch(ops);
|
|
46
|
+
else
|
|
47
|
+
for (const op of ops)
|
|
48
|
+
this.upsert(op.node, op.parentId);
|
|
49
|
+
},
|
|
50
|
+
applyChanges(changes) {
|
|
51
|
+
for (const op of changes.create ?? [])
|
|
52
|
+
captureIfNeeded(op.node.id);
|
|
53
|
+
for (const op of changes.update ?? [])
|
|
54
|
+
captureIfNeeded(op.id);
|
|
55
|
+
for (const id of changes.delete ?? [])
|
|
56
|
+
captureIfNeeded(id);
|
|
57
|
+
const batch = store.getState().applyNodeChanges;
|
|
58
|
+
if (batch) {
|
|
59
|
+
batch(changes);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
for (const op of changes.create ?? [])
|
|
63
|
+
this.upsert(op.node, op.parentId);
|
|
64
|
+
for (const op of changes.update ?? [])
|
|
65
|
+
this.update(op.id, op.data);
|
|
66
|
+
for (const id of changes.delete ?? [])
|
|
67
|
+
this.delete(id);
|
|
68
|
+
},
|
|
69
|
+
subscribeNodes(listener) {
|
|
70
|
+
return (store.subscribe?.((state, previous) => {
|
|
71
|
+
if (state.nodes === previous.nodes)
|
|
72
|
+
return;
|
|
73
|
+
const scopedIds = activeSceneCommitNodeIds();
|
|
74
|
+
const changedIds = new Set(scopedIds);
|
|
75
|
+
if (!scopedIds) {
|
|
76
|
+
for (const id of Object.keys(state.nodes)) {
|
|
77
|
+
if (state.nodes[id] !== previous.nodes[id])
|
|
78
|
+
changedIds.add(id);
|
|
79
|
+
}
|
|
80
|
+
for (const id of Object.keys(previous.nodes)) {
|
|
81
|
+
if (!(id in state.nodes))
|
|
82
|
+
changedIds.add(id);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
listener(state.nodes, previous.nodes, changedIds);
|
|
86
|
+
}) ?? (() => { }));
|
|
87
|
+
},
|
|
40
88
|
delete(id) {
|
|
41
89
|
captureIfNeeded(id);
|
|
42
90
|
store.getState().deleteNode(id);
|