@pascal-app/core 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +42 -8
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/lib/node-visibility.d.ts +12 -0
- package/dist/lib/node-visibility.d.ts.map +1 -0
- package/dist/lib/node-visibility.js +12 -0
- package/dist/procedural-items/query.d.ts +1 -0
- package/dist/procedural-items/query.d.ts.map +1 -1
- package/dist/procedural-items/query.js +67 -23
- package/dist/registry/handles.d.ts +28 -1
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +6 -0
- package/dist/registry/types.d.ts +12 -2
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -0
- package/dist/schema/nodes/block.d.ts +2 -2
- package/dist/schema/nodes/block.d.ts.map +1 -1
- package/dist/schema/nodes/block.js +21 -8
- package/dist/schema/nodes/cabinet.d.ts +2 -2
- package/dist/schema/nodes/curtain-wall.d.ts +129 -0
- package/dist/schema/nodes/curtain-wall.d.ts.map +1 -0
- package/dist/schema/nodes/curtain-wall.js +49 -0
- package/dist/schema/nodes/door.d.ts +2 -2
- package/dist/schema/nodes/wall.d.ts +73 -0
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +3 -0
- package/dist/schema/types.d.ts +76 -3
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/services/__fixtures__/hosting.d.ts +3 -0
- package/dist/services/__fixtures__/hosting.d.ts.map +1 -0
- package/dist/services/__fixtures__/hosting.js +9 -0
- package/dist/services/__fixtures__/shelf-surface-rows.d.ts +4 -0
- package/dist/services/__fixtures__/shelf-surface-rows.d.ts.map +1 -0
- package/dist/services/__fixtures__/shelf-surface-rows.js +18 -0
- package/dist/services/hosting.d.ts +3 -0
- package/dist/services/hosting.d.ts.map +1 -1
- package/dist/services/hosting.js +24 -7
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -3
- package/dist/services/snap.d.ts +3 -0
- package/dist/services/snap.d.ts.map +1 -1
- package/dist/services/snap.js +11 -0
- package/dist/services/surface-hosting.d.ts +6 -2
- package/dist/services/surface-hosting.d.ts.map +1 -1
- package/dist/services/surface-hosting.js +47 -10
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +3 -96
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +13 -1
- package/dist/systems/stair/stair-opening-preview.d.ts +42 -8
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.d.ts +38 -0
- package/dist/systems/wall/wall-merge.d.ts.map +1 -0
- package/dist/systems/wall/wall-merge.js +240 -0
- package/dist/systems/wall/wall-operations.d.ts +28 -0
- package/dist/systems/wall/wall-operations.d.ts.map +1 -0
- package/dist/systems/wall/wall-operations.js +145 -0
- package/dist/systems/wall/wall-topology.d.ts +7 -0
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +53 -5
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +12 -0
- package/package.json +2 -2
|
@@ -141,6 +141,79 @@ export declare const WallNode: z.ZodObject<{
|
|
|
141
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
|
+
wallType: z.ZodOptional<z.ZodEnum<{
|
|
145
|
+
standard: "standard";
|
|
146
|
+
curtain: "curtain";
|
|
147
|
+
}>>;
|
|
148
|
+
curtainWall: z.ZodOptional<z.ZodObject<{
|
|
149
|
+
construction: z.ZodDefault<z.ZodEnum<{
|
|
150
|
+
stick: "stick";
|
|
151
|
+
unitized: "unitized";
|
|
152
|
+
}>>;
|
|
153
|
+
framing: z.ZodDefault<z.ZodEnum<{
|
|
154
|
+
capped: "capped";
|
|
155
|
+
"vertical-caps": "vertical-caps";
|
|
156
|
+
"horizontal-caps": "horizontal-caps";
|
|
157
|
+
"structural-glazing": "structural-glazing";
|
|
158
|
+
}>>;
|
|
159
|
+
columns: z.ZodPrefault<z.ZodObject<{
|
|
160
|
+
layout: z.ZodDefault<z.ZodEnum<{
|
|
161
|
+
count: "count";
|
|
162
|
+
"maximum-spacing": "maximum-spacing";
|
|
163
|
+
"fixed-spacing": "fixed-spacing";
|
|
164
|
+
}>>;
|
|
165
|
+
count: z.ZodDefault<z.ZodNumber>;
|
|
166
|
+
spacing: z.ZodDefault<z.ZodNumber>;
|
|
167
|
+
alignment: z.ZodDefault<z.ZodEnum<{
|
|
168
|
+
start: "start";
|
|
169
|
+
center: "center";
|
|
170
|
+
end: "end";
|
|
171
|
+
}>>;
|
|
172
|
+
}, z.core.$strip>>;
|
|
173
|
+
rows: z.ZodPrefault<z.ZodObject<{
|
|
174
|
+
layout: z.ZodDefault<z.ZodEnum<{
|
|
175
|
+
count: "count";
|
|
176
|
+
"maximum-spacing": "maximum-spacing";
|
|
177
|
+
"fixed-spacing": "fixed-spacing";
|
|
178
|
+
}>>;
|
|
179
|
+
count: z.ZodDefault<z.ZodNumber>;
|
|
180
|
+
spacing: z.ZodDefault<z.ZodNumber>;
|
|
181
|
+
alignment: z.ZodDefault<z.ZodEnum<{
|
|
182
|
+
start: "start";
|
|
183
|
+
center: "center";
|
|
184
|
+
end: "end";
|
|
185
|
+
}>>;
|
|
186
|
+
}, z.core.$strip>>;
|
|
187
|
+
mullionWidth: z.ZodDefault<z.ZodNumber>;
|
|
188
|
+
transomWidth: z.ZodDefault<z.ZodNumber>;
|
|
189
|
+
perimeterWidth: z.ZodDefault<z.ZodNumber>;
|
|
190
|
+
jointWidth: z.ZodDefault<z.ZodNumber>;
|
|
191
|
+
glassThickness: z.ZodDefault<z.ZodNumber>;
|
|
192
|
+
panelType: z.ZodDefault<z.ZodEnum<{
|
|
193
|
+
glass: "glass";
|
|
194
|
+
solid: "solid";
|
|
195
|
+
empty: "empty";
|
|
196
|
+
}>>;
|
|
197
|
+
spandrel: z.ZodDefault<z.ZodEnum<{
|
|
198
|
+
top: "top";
|
|
199
|
+
none: "none";
|
|
200
|
+
bottom: "bottom";
|
|
201
|
+
}>>;
|
|
202
|
+
frameColor: z.ZodDefault<z.ZodString>;
|
|
203
|
+
glassColor: z.ZodDefault<z.ZodString>;
|
|
204
|
+
solidColor: z.ZodDefault<z.ZodString>;
|
|
205
|
+
glassOpacity: z.ZodDefault<z.ZodNumber>;
|
|
206
|
+
glassRoughness: z.ZodDefault<z.ZodNumber>;
|
|
207
|
+
panels: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
208
|
+
column: z.ZodNumber;
|
|
209
|
+
row: z.ZodNumber;
|
|
210
|
+
type: z.ZodEnum<{
|
|
211
|
+
glass: "glass";
|
|
212
|
+
solid: "solid";
|
|
213
|
+
empty: "empty";
|
|
214
|
+
}>;
|
|
215
|
+
}, z.core.$strip>>>;
|
|
216
|
+
}, z.core.$strip>>;
|
|
144
217
|
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`procedural-item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`door_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`window_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`leanto_${string}`>>]>>>;
|
|
145
218
|
material: z.ZodOptional<z.ZodObject<{
|
|
146
219
|
id: z.ZodOptional<z.ZodString>;
|
|
@@ -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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"}
|
|
@@ -2,6 +2,7 @@ import dedent from 'dedent';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base.js';
|
|
4
4
|
import { MaterialSchema } from '../material.js';
|
|
5
|
+
import { CurtainWallConfig } from './curtain-wall.js';
|
|
5
6
|
import { DoorNode } from './door.js';
|
|
6
7
|
import { ItemNode } from './item.js';
|
|
7
8
|
import { LeanToExtensionNode } from './lean-to-extension.js';
|
|
@@ -112,6 +113,8 @@ export const WALL_SURFACE_SLOT_DEFAULTS = {
|
|
|
112
113
|
export const WallNode = BaseNode.extend({
|
|
113
114
|
id: objectId('wall'),
|
|
114
115
|
type: nodeType('wall'),
|
|
116
|
+
wallType: z.enum(['standard', 'curtain']).optional(),
|
|
117
|
+
curtainWall: CurtainWallConfig.optional(),
|
|
115
118
|
children: z
|
|
116
119
|
.array(z.union([
|
|
117
120
|
ItemNode.shape.id,
|
package/dist/schema/types.d.ts
CHANGED
|
@@ -747,6 +747,79 @@ export declare const AnyNode: z.ZodDiscriminatedUnion<readonly [BareDiscriminato
|
|
|
747
747
|
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
748
748
|
id: z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>;
|
|
749
749
|
type: z.ZodDefault<z.ZodLiteral<"wall">>;
|
|
750
|
+
wallType: z.ZodOptional<z.ZodEnum<{
|
|
751
|
+
standard: "standard";
|
|
752
|
+
curtain: "curtain";
|
|
753
|
+
}>>;
|
|
754
|
+
curtainWall: z.ZodOptional<z.ZodObject<{
|
|
755
|
+
construction: z.ZodDefault<z.ZodEnum<{
|
|
756
|
+
stick: "stick";
|
|
757
|
+
unitized: "unitized";
|
|
758
|
+
}>>;
|
|
759
|
+
framing: z.ZodDefault<z.ZodEnum<{
|
|
760
|
+
capped: "capped";
|
|
761
|
+
"vertical-caps": "vertical-caps";
|
|
762
|
+
"horizontal-caps": "horizontal-caps";
|
|
763
|
+
"structural-glazing": "structural-glazing";
|
|
764
|
+
}>>;
|
|
765
|
+
columns: z.ZodPrefault<z.ZodObject<{
|
|
766
|
+
layout: z.ZodDefault<z.ZodEnum<{
|
|
767
|
+
count: "count";
|
|
768
|
+
"maximum-spacing": "maximum-spacing";
|
|
769
|
+
"fixed-spacing": "fixed-spacing";
|
|
770
|
+
}>>;
|
|
771
|
+
count: z.ZodDefault<z.ZodNumber>;
|
|
772
|
+
spacing: z.ZodDefault<z.ZodNumber>;
|
|
773
|
+
alignment: z.ZodDefault<z.ZodEnum<{
|
|
774
|
+
start: "start";
|
|
775
|
+
center: "center";
|
|
776
|
+
end: "end";
|
|
777
|
+
}>>;
|
|
778
|
+
}, z.core.$strip>>;
|
|
779
|
+
rows: z.ZodPrefault<z.ZodObject<{
|
|
780
|
+
layout: z.ZodDefault<z.ZodEnum<{
|
|
781
|
+
count: "count";
|
|
782
|
+
"maximum-spacing": "maximum-spacing";
|
|
783
|
+
"fixed-spacing": "fixed-spacing";
|
|
784
|
+
}>>;
|
|
785
|
+
count: z.ZodDefault<z.ZodNumber>;
|
|
786
|
+
spacing: z.ZodDefault<z.ZodNumber>;
|
|
787
|
+
alignment: z.ZodDefault<z.ZodEnum<{
|
|
788
|
+
start: "start";
|
|
789
|
+
center: "center";
|
|
790
|
+
end: "end";
|
|
791
|
+
}>>;
|
|
792
|
+
}, z.core.$strip>>;
|
|
793
|
+
mullionWidth: z.ZodDefault<z.ZodNumber>;
|
|
794
|
+
transomWidth: z.ZodDefault<z.ZodNumber>;
|
|
795
|
+
perimeterWidth: z.ZodDefault<z.ZodNumber>;
|
|
796
|
+
jointWidth: z.ZodDefault<z.ZodNumber>;
|
|
797
|
+
glassThickness: z.ZodDefault<z.ZodNumber>;
|
|
798
|
+
panelType: z.ZodDefault<z.ZodEnum<{
|
|
799
|
+
glass: "glass";
|
|
800
|
+
solid: "solid";
|
|
801
|
+
empty: "empty";
|
|
802
|
+
}>>;
|
|
803
|
+
spandrel: z.ZodDefault<z.ZodEnum<{
|
|
804
|
+
top: "top";
|
|
805
|
+
none: "none";
|
|
806
|
+
bottom: "bottom";
|
|
807
|
+
}>>;
|
|
808
|
+
frameColor: z.ZodDefault<z.ZodString>;
|
|
809
|
+
glassColor: z.ZodDefault<z.ZodString>;
|
|
810
|
+
solidColor: z.ZodDefault<z.ZodString>;
|
|
811
|
+
glassOpacity: z.ZodDefault<z.ZodNumber>;
|
|
812
|
+
glassRoughness: z.ZodDefault<z.ZodNumber>;
|
|
813
|
+
panels: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
814
|
+
column: z.ZodNumber;
|
|
815
|
+
row: z.ZodNumber;
|
|
816
|
+
type: z.ZodEnum<{
|
|
817
|
+
glass: "glass";
|
|
818
|
+
solid: "solid";
|
|
819
|
+
empty: "empty";
|
|
820
|
+
}>;
|
|
821
|
+
}, z.core.$strip>>>;
|
|
822
|
+
}, z.core.$strip>>;
|
|
750
823
|
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`procedural-item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`door_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`window_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`leanto_${string}`>>]>>>;
|
|
751
824
|
material: z.ZodOptional<z.ZodObject<{
|
|
752
825
|
id: z.ZodOptional<z.ZodString>;
|
|
@@ -1095,8 +1168,8 @@ export declare const AnyNode: z.ZodDiscriminatedUnion<readonly [BareDiscriminato
|
|
|
1095
1168
|
}>>;
|
|
1096
1169
|
handlePosition: z.ZodDefault<z.ZodEnum<{
|
|
1097
1170
|
top: "top";
|
|
1098
|
-
auto: "auto";
|
|
1099
1171
|
center: "center";
|
|
1172
|
+
auto: "auto";
|
|
1100
1173
|
}>>;
|
|
1101
1174
|
frontOverlay: z.ZodDefault<z.ZodEnum<{
|
|
1102
1175
|
full: "full";
|
|
@@ -1308,8 +1381,8 @@ export declare const AnyNode: z.ZodDiscriminatedUnion<readonly [BareDiscriminato
|
|
|
1308
1381
|
}>>;
|
|
1309
1382
|
handlePosition: z.ZodDefault<z.ZodEnum<{
|
|
1310
1383
|
top: "top";
|
|
1311
|
-
auto: "auto";
|
|
1312
1384
|
center: "center";
|
|
1385
|
+
auto: "auto";
|
|
1313
1386
|
}>>;
|
|
1314
1387
|
frontOverlay: z.ZodDefault<z.ZodEnum<{
|
|
1315
1388
|
full: "full";
|
|
@@ -3254,8 +3327,8 @@ export declare const AnyNode: z.ZodDiscriminatedUnion<readonly [BareDiscriminato
|
|
|
3254
3327
|
segments: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
3255
3328
|
type: z.ZodEnum<{
|
|
3256
3329
|
glass: "glass";
|
|
3257
|
-
panel: "panel";
|
|
3258
3330
|
empty: "empty";
|
|
3331
|
+
panel: "panel";
|
|
3259
3332
|
}>;
|
|
3260
3333
|
heightRatio: z.ZodNumber;
|
|
3261
3334
|
columnRatios: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAoDnB,6FAA6F;AAC7F,KAAK,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;AAEnG,gFAAgF;AAChF,KAAK,iBAAiB,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,SAAS,CACxD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;CAAE,CAC9E,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC,EAAE,SAAS,CAAC,gCAO/E,CAAC,iDACX,CAAA;AAEH,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAoDnB,6FAA6F;AAC7F,KAAK,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;AAEnG,gFAAgF;AAChF,KAAK,iBAAiB,CAAC,CAAC,SAAS,UAAU,IAAI,CAAC,CAAC,SAAS,CACxD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;CAAE,CAC9E,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC,EAAE,SAAS,CAAC,gCAO/E,CAAC,iDACX,CAAA;AAEH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAoDlB,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAA;AAC7C,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AACzC,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAErC,yFAAyF;AACzF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,qFAAqF;AACrF,eAAO,MAAM,UAAU,GAAI,QAAQ,aAAa,KAAG,WAAsC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../../src/services/__fixtures__/hosting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,iBAAiB,QAOpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shelf-surface-rows.d.ts","sourceRoot":"","sources":["../../../src/services/__fixtures__/shelf-surface-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAGzD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CASrD,CAAA;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAK3D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Captured from production shelf geometry; checked against it in the nodes suite.
|
|
2
|
+
export const shelfSurfaceRows = {
|
|
3
|
+
'wall-shelf,false,1.8,3,0.04': [0.64, 1.24, 1.8399999999999999],
|
|
4
|
+
'wall-shelf,true,1.8,3,0.04': [0.64, 1.24, 1.8399999999999999],
|
|
5
|
+
'bookshelf,false,1.8,3,0.04': [0.64, 1.24, 1.8399999999999999],
|
|
6
|
+
'bookshelf,true,1.8,3,0.04': [0.04, 0.64, 1.24, 1.8399999999999999],
|
|
7
|
+
'open-rack,false,1.8,3,0.04': [0.64, 1.24, 1.8399999999999999],
|
|
8
|
+
'open-rack,true,1.8,3,0.04': [0.64, 1.24, 1.8399999999999999],
|
|
9
|
+
'cubby,false,1.8,3,0.04': [0.64, 1.24, 1.8399999999999999],
|
|
10
|
+
'cubby,true,1.8,3,0.04': [0.04, 0.64, 1.24, 1.8399999999999999],
|
|
11
|
+
};
|
|
12
|
+
export function shelfRowSurfaceYs(node) {
|
|
13
|
+
const key = [node.style, node.withBottom, node.height, node.rows, node.thickness].join(',');
|
|
14
|
+
const rows = shelfSurfaceRows[key];
|
|
15
|
+
if (!rows)
|
|
16
|
+
throw new Error(`Missing shelf row fixture: ${key}`);
|
|
17
|
+
return rows;
|
|
18
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { SceneApi, SurfacesConfig } from '../registry/types.js';
|
|
2
|
+
import type { ItemNode } from '../schema/nodes/item.js';
|
|
2
3
|
import type { AnyNode, AnyNodeId } from '../schema/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Maximum depth a node tree can host. Guards items-on-items-on-items chains
|
|
@@ -41,6 +42,7 @@ export type AttachResult = {
|
|
|
41
42
|
* - The resulting chain must not exceed {@link MAX_HOST_DEPTH}.
|
|
42
43
|
*/
|
|
43
44
|
export declare function canAttach(childId: AnyNodeId, hostId: AnyNodeId, scene: SceneApi): AttachResult;
|
|
45
|
+
export declare function wouldCreateHostingCycle(childId: string, host: Pick<AnyNode, 'id' | 'parentId'>, scene: Pick<SceneApi, 'get'>): boolean;
|
|
44
46
|
/**
|
|
45
47
|
* Returns the surfaces declared by a host's NodeDefinition. Surfaces describe
|
|
46
48
|
* where other nodes can stack/mount — the `top` of a slab, the `sides` of a
|
|
@@ -79,4 +81,5 @@ export declare function pickHost(args: {
|
|
|
79
81
|
* is declared. Returns the original Y if the host has no top surface.
|
|
80
82
|
*/
|
|
81
83
|
export declare function clampYToHostTop(host: AnyNode, originalY: number, nodes?: Record<string, AnyNode>): number;
|
|
84
|
+
export declare function clearFaceHostItemFields(host: AnyNode | undefined): Partial<ItemNode>;
|
|
82
85
|
//# sourceMappingURL=hosting.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/services/hosting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA;AAE/C,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAA;AAE3E;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/services/hosting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAA;AAE/C,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAA;AAE3E;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,YAAY,CAsB9F;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,UAAU,CAAC,EACtC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAC3B,OAAO,CAUT;AAoBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAG/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAuB,GACnD,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAGnD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE;IAC7B,KAAK,EAAE,IAAI,CAAA;IACX,UAAU,EAAE,SAAS,OAAO,EAAE,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,OAAO,CAAA;CAClD,GAAG,OAAO,GAAG,IAAI,CAUjB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAGR;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQpF"}
|
package/dist/services/hosting.js
CHANGED
|
@@ -31,16 +31,23 @@ export function canAttach(childId, hostId, scene) {
|
|
|
31
31
|
// the caller is responsible for ensuring child exists before commit.
|
|
32
32
|
return checkDepth(hostId, scene);
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
while (cursor) {
|
|
37
|
-
if (cursor.id === childId) {
|
|
38
|
-
return { ok: false, error: { kind: 'cycle', nodeId: childId, hostId } };
|
|
39
|
-
}
|
|
40
|
-
cursor = cursor.parentId ? scene.get(cursor.parentId) : undefined;
|
|
34
|
+
if (wouldCreateHostingCycle(childId, host, scene)) {
|
|
35
|
+
return { ok: false, error: { kind: 'cycle', nodeId: childId, hostId } };
|
|
41
36
|
}
|
|
42
37
|
return checkDepth(hostId, scene);
|
|
43
38
|
}
|
|
39
|
+
export function wouldCreateHostingCycle(childId, host, scene) {
|
|
40
|
+
const visited = new Set();
|
|
41
|
+
let cursor = host.id;
|
|
42
|
+
while (cursor) {
|
|
43
|
+
if (cursor === childId || visited.has(cursor))
|
|
44
|
+
return true;
|
|
45
|
+
visited.add(cursor);
|
|
46
|
+
cursor =
|
|
47
|
+
(scene.get(cursor) ?? (cursor === host.id ? host : undefined))?.parentId ?? null;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
44
51
|
function checkDepth(hostId, scene) {
|
|
45
52
|
// Count host's own depth (root = 0); attaching adds 1 to the child's depth.
|
|
46
53
|
let depth = 0;
|
|
@@ -119,3 +126,13 @@ export function clampYToHostTop(host, originalY, nodes) {
|
|
|
119
126
|
const top = getTopSurfaceHeight(host, nodes);
|
|
120
127
|
return top == null ? originalY : top;
|
|
121
128
|
}
|
|
129
|
+
export function clearFaceHostItemFields(host) {
|
|
130
|
+
const patch = {};
|
|
131
|
+
for (const field of (host &&
|
|
132
|
+
nodeRegistry.get(host.type)?.capabilities.faceHost?.clearItemFields) ??
|
|
133
|
+
[]) {
|
|
134
|
+
;
|
|
135
|
+
patch[field] = undefined;
|
|
136
|
+
}
|
|
137
|
+
return patch;
|
|
138
|
+
}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export { type AlignmentAnchor, type AlignmentGuide, type AlignmentGuideAxis, type AnchorKind, type BuildingPose, bboxAnchors, bboxCornerAnchors, type ResolveAlignmentInBuildingResult, type ResolveAlignmentInput, type ResolveAlignmentResult, resolveAlignment, resolveAlignmentInBuildingWorld, } from './alignment.js';
|
|
2
2
|
export { collectAlignmentAnchors, type FootprintAABB, footprintAABB, footprintAABBAt, footprintAABBFrom, movingAlignmentAnchors, movingFootprintAnchors, nodeAlignmentAnchors, polygonAnchors, wallSegmentAnchors, } from './alignment-anchors.js';
|
|
3
3
|
export { createDragSession, type DragSession, type DragSessionInput, type DragSessionOptions, } from './drag-session.js';
|
|
4
|
-
export { type AttachError, type AttachResult, canAttach, canHostOnTop, clampYToHostTop, getSurface, getTopSurfaceHeight, MAX_HOST_DEPTH, pickHost, type Vec3, } from './hosting.js';
|
|
4
|
+
export { type AttachError, type AttachResult, canAttach, canHostOnTop, clampYToHostTop, clearFaceHostItemFields, getSurface, getTopSurfaceHeight, MAX_HOST_DEPTH, pickHost, type Vec3, wouldCreateHostingCycle, } from './hosting.js';
|
|
5
5
|
export { DEFAULT_LEVEL_HEIGHT, getCeilingAt, getCeilingHeightAt, resolveCeilingHeight, } from './level-height.js';
|
|
6
6
|
export { type AxisLock, applyAxisLock, isMovable, movePlanToward, moveToward, resolveMovable, } from './movement.js';
|
|
7
7
|
export { type AlongWallAlignment, type AlongWallFeature, computeEdgeGaps, computeOpeningGuides, DEFAULT_OPENING_GUIDE_TOLERANCES, detectAlongWallAlignment, detectEqualSpacing, detectVerticalAlignment, type EdgeGap, type EqualSpacingRun, type OpeningGuideInput, type OpeningGuides, type OpeningGuideTolerances, type OpeningSpan, type SillHeadGuide, type VerticalAlignment, type VerticalFeature, type WallExtent, } from './opening-guides.js';
|
|
8
8
|
export { analyzePortConnectivity, type PortConnection, type PortConnectivity, resolveConnectivityUpdates, } from './port-connectivity.js';
|
|
9
9
|
export { buildRiserDiagram, projectIso, type RiserDiagram, type RiserLine, type RiserMarker, } from './riser-diagram.js';
|
|
10
10
|
export { SHELF_BOARD_INSET, shelfBoardDimensions, shelfRowBoardDimensions } from './shelf-board.js';
|
|
11
|
-
export { DEFAULT_ANGLE_STEP, DEFAULT_GRID_STEP, type SnapServices, snapAngleToList, snapPointAlongAngleRay, snapPointToAngle, snapPointToGrid, snapScalar, snapServices, snapVec3ToGrid, snapWorldXZToBuildingLocal, } from './snap.js';
|
|
11
|
+
export { DEFAULT_ANGLE_STEP, DEFAULT_GRID_STEP, type SnapServices, snapAngleToList, snapLocalXZInWorld, snapPointAlongAngleRay, snapPointToAngle, snapPointToGrid, snapScalar, snapServices, snapVec3ToGrid, snapWorldXZToBuildingLocal, } from './snap.js';
|
|
12
12
|
export { CEILING_CLAMP_MARGIN, findLevelAboveId, findLevelBelowId, getCeilingClampBound, getCoveringSlabUndersideAt, getLevelAbove, getLevelBelow, getLevelElevations, getLevelFloorToFloorHeight, getStoredLevelHeight, getWallPlaneTop, type LevelElevation, } from './storey.js';
|
|
13
|
-
export { type DeclaredHostSurface, getSurfaceProvider, type HostSurface, hitDerivedSurfaceProvider, itemSurfaceProvider, NON_PHYSICAL_HOST_KINDS, proceduralItemSurfaceProvider, resolveSurfacePlacement, type SurfaceContext, type SurfaceHit, type SurfaceId, type SurfacePlacement, type SurfaceProvider, type SurfaceRegion, type SurfaceRejectReason, shelfSurfaceProvider, } from './surface-hosting.js';
|
|
13
|
+
export { canHostSurfaceChild, type DeclaredHostSurface, getSurfaceProvider, type HostSurface, hitDerivedSurfaceProvider, itemSurfaceProvider, NON_PHYSICAL_HOST_KINDS, proceduralItemSurfaceProvider, rendersHostedChildren, resolveSurfacePlacement, type SurfaceContext, type SurfaceHit, type SurfaceId, type SurfacePlacement, type SurfaceProvider, type SurfaceRegion, type SurfaceRejectReason, shelfSurfaceProvider, } from './surface-hosting.js';
|
|
14
14
|
export { surfaceRegionContainsFootprint, surfaceRegionContainsPoint } from './surface-region.js';
|
|
15
15
|
export { buildPortComponents, collectSystemPorts, distributionPointToWorld, type SystemSummary, summarizeSystemFor, } from './system-graph.js';
|
|
16
16
|
export { type DwvFinding, type DwvSeverity, validateDwv, } from './validate-dwv.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,WAAW,EACX,iBAAiB,EACjB,KAAK,gCAAgC,EACrC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,uBAAuB,EACvB,KAAK,aAAa,EAClB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,SAAS,EACT,YAAY,EACZ,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export { bboxAnchors, bboxCornerAnchors, resolveAlignment, resolveAlignmentInBuildingWorld, } from './alignment.js';
|
|
2
2
|
export { collectAlignmentAnchors, footprintAABB, footprintAABBAt, footprintAABBFrom, movingAlignmentAnchors, movingFootprintAnchors, nodeAlignmentAnchors, polygonAnchors, wallSegmentAnchors, } from './alignment-anchors.js';
|
|
3
3
|
export { createDragSession, } from './drag-session.js';
|
|
4
|
-
export { canAttach, canHostOnTop, clampYToHostTop, getSurface, getTopSurfaceHeight, MAX_HOST_DEPTH, pickHost, } from './hosting.js';
|
|
4
|
+
export { canAttach, canHostOnTop, clampYToHostTop, clearFaceHostItemFields, getSurface, getTopSurfaceHeight, MAX_HOST_DEPTH, pickHost, wouldCreateHostingCycle, } from './hosting.js';
|
|
5
5
|
export { DEFAULT_LEVEL_HEIGHT, getCeilingAt, getCeilingHeightAt, resolveCeilingHeight, } from './level-height.js';
|
|
6
6
|
export { applyAxisLock, isMovable, movePlanToward, moveToward, resolveMovable, } from './movement.js';
|
|
7
7
|
export { computeEdgeGaps, computeOpeningGuides, DEFAULT_OPENING_GUIDE_TOLERANCES, detectAlongWallAlignment, detectEqualSpacing, detectVerticalAlignment, } from './opening-guides.js';
|
|
8
8
|
export { analyzePortConnectivity, resolveConnectivityUpdates, } from './port-connectivity.js';
|
|
9
9
|
export { buildRiserDiagram, projectIso, } from './riser-diagram.js';
|
|
10
10
|
export { SHELF_BOARD_INSET, shelfBoardDimensions, shelfRowBoardDimensions } from './shelf-board.js';
|
|
11
|
-
export { DEFAULT_ANGLE_STEP, DEFAULT_GRID_STEP, snapAngleToList, snapPointAlongAngleRay, snapPointToAngle, snapPointToGrid, snapScalar, snapServices, snapVec3ToGrid, snapWorldXZToBuildingLocal, } from './snap.js';
|
|
11
|
+
export { DEFAULT_ANGLE_STEP, DEFAULT_GRID_STEP, snapAngleToList, snapLocalXZInWorld, snapPointAlongAngleRay, snapPointToAngle, snapPointToGrid, snapScalar, snapServices, snapVec3ToGrid, snapWorldXZToBuildingLocal, } from './snap.js';
|
|
12
12
|
export { CEILING_CLAMP_MARGIN, findLevelAboveId, findLevelBelowId, getCeilingClampBound, getCoveringSlabUndersideAt, getLevelAbove, getLevelBelow, getLevelElevations, getLevelFloorToFloorHeight, getStoredLevelHeight, getWallPlaneTop, } from './storey.js';
|
|
13
|
-
export { getSurfaceProvider, hitDerivedSurfaceProvider, itemSurfaceProvider, NON_PHYSICAL_HOST_KINDS, proceduralItemSurfaceProvider, resolveSurfacePlacement, shelfSurfaceProvider, } from './surface-hosting.js';
|
|
13
|
+
export { canHostSurfaceChild, getSurfaceProvider, hitDerivedSurfaceProvider, itemSurfaceProvider, NON_PHYSICAL_HOST_KINDS, proceduralItemSurfaceProvider, rendersHostedChildren, resolveSurfacePlacement, shelfSurfaceProvider, } from './surface-hosting.js';
|
|
14
14
|
export { surfaceRegionContainsFootprint, surfaceRegionContainsPoint } from './surface-region.js';
|
|
15
15
|
export { buildPortComponents, collectSystemPorts, distributionPointToWorld, summarizeSystemFor, } from './system-graph.js';
|
|
16
16
|
export { validateDwv, } from './validate-dwv.js';
|
package/dist/services/snap.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* The functions here are stable contract — Phase 3 only adds, never removes.
|
|
10
10
|
*/
|
|
11
|
+
import type { BuildingPose } from './alignment.js';
|
|
11
12
|
export type Vec2 = readonly [number, number];
|
|
12
13
|
export type Vec3 = readonly [number, number, number];
|
|
13
14
|
/** Default planar grid spacing in meters. Matches the editor's wall tool. */
|
|
@@ -36,6 +37,8 @@ export declare function snapWorldXZToBuildingLocal(worldX: number, worldZ: numbe
|
|
|
36
37
|
world: [number, number];
|
|
37
38
|
local: [number, number];
|
|
38
39
|
};
|
|
40
|
+
/** Snap in model-world axes, without presentation transforms affecting the grid. */
|
|
41
|
+
export declare function snapLocalXZInWorld(local: Vec2, pose: BuildingPose | null, snap: (value: number, axis: 0 | 1) => number): [number, number];
|
|
39
42
|
/**
|
|
40
43
|
* Snaps a cursor point to the nearest angle multiple of `angleStep` (radians)
|
|
41
44
|
* measured from `from`, preserving distance. Useful for axis/diagonal-locked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snap.d.ts","sourceRoot":"","sources":["../../src/services/snap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC5C,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpD,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,QAAe,CAAA;AAI9C,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAA0B,GAAG,MAAM,CAGlF;AAED,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAE,MAA0B,GAAG,IAAI,CAEnF;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAE,MAA0B,GAAG,IAAI,CAElF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,IAAI,EACtB,iBAAiB,EAAE,MAAM,EACzB,IAAI,GAAE,MAA0B,GAC/B;IAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CA2BtD;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,EACZ,SAAS,GAAE,MAA2B,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,EACZ,SAAS,GAAE,MAA2B,EACtC,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAYN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,YAAY,GAAE,MAAqB,GAClC,MAAM,CAcR;AAID;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QAC9C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;KACrD,CAAA;IACD,KAAK,EAAE;QACL,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QACjF,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;KACtF,CAAA;CACF,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,YAU1B,CAAA"}
|
|
1
|
+
{"version":3,"file":"snap.d.ts","sourceRoot":"","sources":["../../src/services/snap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC5C,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpD,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,QAAe,CAAA;AAI9C,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAA0B,GAAG,MAAM,CAGlF;AAED,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAE,MAA0B,GAAG,IAAI,CAEnF;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAE,MAA0B,GAAG,IAAI,CAElF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,IAAI,EACtB,iBAAiB,EAAE,MAAM,EACzB,IAAI,GAAE,MAA0B,GAC/B;IAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CA2BtD;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EACX,IAAI,EAAE,YAAY,GAAG,IAAI,EACzB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,MAAM,GAC3C,CAAC,MAAM,EAAE,MAAM,CAAC,CASlB;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,EACZ,SAAS,GAAE,MAA2B,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,EACZ,SAAS,GAAE,MAA2B,EACtC,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAYN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,YAAY,GAAE,MAAqB,GAClC,MAAM,CAcR;AAID;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QAC9C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;KACrD,CAAA;IACD,KAAK,EAAE;QACL,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QACjF,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;KACtF,CAAA;CACF,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,YAU1B,CAAA"}
|
package/dist/services/snap.js
CHANGED
|
@@ -67,6 +67,17 @@ export function snapWorldXZToBuildingLocal(worldX, worldZ, buildingPosition, bui
|
|
|
67
67
|
local: [dx * cos - dz * sin, dx * sin + dz * cos],
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
+
/** Snap in model-world axes, without presentation transforms affecting the grid. */
|
|
71
|
+
export function snapLocalXZInWorld(local, pose, snap) {
|
|
72
|
+
const yaw = pose?.rotationY ?? 0;
|
|
73
|
+
const cos = Math.cos(yaw);
|
|
74
|
+
const sin = Math.sin(yaw);
|
|
75
|
+
const px = pose?.position[0] ?? 0;
|
|
76
|
+
const pz = pose?.position[2] ?? 0;
|
|
77
|
+
const x = snap(px + local[0] * cos + local[1] * sin, 0) - px;
|
|
78
|
+
const z = snap(pz - local[0] * sin + local[1] * cos, 1) - pz;
|
|
79
|
+
return [x * cos - z * sin, x * sin + z * cos];
|
|
80
|
+
}
|
|
70
81
|
// ─── Angle snap ───────────────────────────────────────────────────────
|
|
71
82
|
/**
|
|
72
83
|
* Snaps a cursor point to the nearest angle multiple of `angleStep` (radians)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SceneApi } from '../registry/types.js';
|
|
1
|
+
import type { AnyNodeDefinition, SceneApi } from '../registry/types.js';
|
|
2
2
|
import type { AnyNode } from '../schema/types.js';
|
|
3
3
|
export type SurfaceId = string;
|
|
4
4
|
export interface SurfaceRegion {
|
|
@@ -40,7 +40,7 @@ export interface SurfaceProvider {
|
|
|
40
40
|
resolveHit(host: AnyNode, hit: SurfaceHit, ctx: SurfaceContext): HostSurface | null;
|
|
41
41
|
accepts?(host: AnyNode, childKind: string, surface: HostSurface, ctx: SurfaceContext): boolean;
|
|
42
42
|
}
|
|
43
|
-
export type SurfaceRejectReason = 'host-not-eligible' | 'invalid-hit' | 'no-surface' | 'child-not-accepted' | 'footprint-outside-surface' | 'footprint-exceeds-host' | 'surface-cutout';
|
|
43
|
+
export type SurfaceRejectReason = 'host-not-eligible' | 'invalid-hit' | 'no-surface' | 'child-not-accepted' | 'footprint-outside-surface' | 'footprint-exceeds-host' | 'surface-cutout' | 'surface-occupied';
|
|
44
44
|
export type SurfacePlacement = {
|
|
45
45
|
position: readonly [number, number, number];
|
|
46
46
|
rotationY: number;
|
|
@@ -60,10 +60,14 @@ export declare const itemSurfaceProvider: SurfaceProvider;
|
|
|
60
60
|
export declare const shelfSurfaceProvider: SurfaceProvider;
|
|
61
61
|
export declare const proceduralItemSurfaceProvider: SurfaceProvider;
|
|
62
62
|
export declare function getSurfaceProvider(host: AnyNode): SurfaceProvider;
|
|
63
|
+
export declare function rendersHostedChildren(def: AnyNodeDefinition): boolean;
|
|
64
|
+
export declare function canHostSurfaceChild(host: AnyNode, childKind: string, childId?: string): boolean;
|
|
63
65
|
/** Hit and child rotation are host-local; bounds and dimensions are scaled child-local values. */
|
|
64
66
|
export declare function resolveSurfacePlacement(args: {
|
|
65
67
|
host: AnyNode;
|
|
68
|
+
surface?: HostSurface;
|
|
66
69
|
childKind: string;
|
|
70
|
+
childId?: string;
|
|
67
71
|
childFootprint: {
|
|
68
72
|
size: readonly [number, number, number];
|
|
69
73
|
rotationY: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-hosting.d.ts","sourceRoot":"","sources":["../../src/services/surface-hosting.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"surface-hosting.d.ts","sourceRoot":"","sources":["../../src/services/surface-hosting.ts"],"names":[],"mappings":"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"}
|