@pascal-app/viewer 1.0.7 → 1.1.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.
Files changed (67) hide show
  1. package/README.md +54 -21
  2. package/dist/components/viewer/glb-replace-instances.d.ts +6 -3
  3. package/dist/components/viewer/glb-replace-instances.d.ts.map +1 -1
  4. package/dist/components/viewer/glb-replace-instances.js +5 -4
  5. package/dist/components/viewer/glb-scene.d.ts +3 -1
  6. package/dist/components/viewer/glb-scene.d.ts.map +1 -1
  7. package/dist/components/viewer/glb-scene.js +2 -1
  8. package/dist/components/viewer/index.d.ts.map +1 -1
  9. package/dist/components/viewer/index.js +8 -4
  10. package/dist/components/viewer/registered-systems.d.ts.map +1 -1
  11. package/dist/components/viewer/registered-systems.js +2 -2
  12. package/dist/components/viewer/unsupported-gpu-fallback.d.ts.map +1 -1
  13. package/dist/components/viewer/unsupported-gpu-fallback.js +21 -1
  14. package/dist/components/viewer/use-daylight-rooms.d.ts.map +1 -1
  15. package/dist/components/viewer/use-daylight-rooms.js +75 -33
  16. package/dist/hooks/use-gltf-ktx2.d.ts.map +1 -1
  17. package/dist/hooks/use-gltf-ktx2.js +2 -1
  18. package/dist/index.d.ts +5 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +5 -1
  21. package/dist/lib/asset-url.d.ts +0 -1
  22. package/dist/lib/asset-url.d.ts.map +1 -1
  23. package/dist/lib/asset-url.js +3 -3
  24. package/dist/lib/daylight/room-context.d.ts.map +1 -1
  25. package/dist/lib/daylight/room-context.js +3 -2
  26. package/dist/lib/daylight/room-map.d.ts +124 -0
  27. package/dist/lib/daylight/room-map.d.ts.map +1 -0
  28. package/dist/lib/daylight/room-map.js +630 -0
  29. package/dist/lib/daylight/room-scene.d.ts +4 -2
  30. package/dist/lib/daylight/room-scene.d.ts.map +1 -1
  31. package/dist/lib/daylight/room-scene.js +72 -37
  32. package/dist/lib/daylight/rooms.d.ts +60 -30
  33. package/dist/lib/daylight/rooms.d.ts.map +1 -1
  34. package/dist/lib/daylight/rooms.js +331 -286
  35. package/dist/lib/ktx2-loader.d.ts.map +1 -1
  36. package/dist/lib/ktx2-loader.js +2 -1
  37. package/dist/lib/measurement-label.d.ts +4 -0
  38. package/dist/lib/measurement-label.d.ts.map +1 -0
  39. package/dist/lib/measurement-label.js +54 -0
  40. package/dist/lib/measurement-presentation.d.ts +5 -0
  41. package/dist/lib/measurement-presentation.d.ts.map +1 -0
  42. package/dist/lib/measurement-presentation.js +8 -0
  43. package/dist/lib/pointer-events.d.ts.map +1 -1
  44. package/dist/lib/pointer-events.js +3 -3
  45. package/dist/lib/texture-reference.d.ts.map +1 -1
  46. package/dist/lib/texture-reference.js +4 -3
  47. package/dist/lib/viewer-config.d.ts +21 -0
  48. package/dist/lib/viewer-config.d.ts.map +1 -0
  49. package/dist/lib/viewer-config.js +21 -0
  50. package/dist/lib/viewer-preference-storage.d.ts +7 -0
  51. package/dist/lib/viewer-preference-storage.d.ts.map +1 -0
  52. package/dist/lib/viewer-preference-storage.js +23 -0
  53. package/dist/store/use-viewer.d.ts +2 -56
  54. package/dist/store/use-viewer.d.ts.map +1 -1
  55. package/dist/store/use-viewer.js +3 -1
  56. package/dist/systems/elevator/elevator-interaction-system.d.ts +16 -2
  57. package/dist/systems/elevator/elevator-interaction-system.d.ts.map +1 -1
  58. package/dist/systems/elevator/elevator-interaction-system.js +41 -8
  59. package/dist/systems/geometry/geometry-status.d.ts +8 -0
  60. package/dist/systems/geometry/geometry-status.d.ts.map +1 -0
  61. package/dist/systems/geometry/geometry-status.js +24 -0
  62. package/dist/systems/roof/roof-system.d.ts.map +1 -1
  63. package/dist/systems/roof/roof-system.js +107 -65
  64. package/dist/systems/wall/wall-system.d.ts +11 -0
  65. package/dist/systems/wall/wall-system.d.ts.map +1 -1
  66. package/dist/systems/wall/wall-system.js +56 -10
  67. package/package.json +3 -3
@@ -76,18 +76,35 @@ function meshesOf(root, skip) {
76
76
  visit(root, true);
77
77
  return out;
78
78
  }
79
+ /** Every live level, in one stable order: its building and assembled world floor height. */
80
+ function liveLevels() {
81
+ const { nodes } = useScene.getState();
82
+ const elevations = getLevelElevations(nodes);
83
+ const buildings = new Map();
84
+ const ids = [];
85
+ const levels = [];
86
+ for (const node of Object.values(nodes)) {
87
+ if (node?.type !== 'level')
88
+ continue;
89
+ const elevation = elevations.get(node.id);
90
+ const buildingId = elevation?.buildingId ?? null;
91
+ if (!buildings.has(buildingId))
92
+ buildings.set(buildingId, buildings.size);
93
+ const building = buildingId ? nodes[buildingId] : undefined;
94
+ const siteY = building?.type === 'building' ? building.position[1] : 0;
95
+ ids.push(node.id);
96
+ levels.push({ y: siteY + (elevation?.baseY ?? 0), building: buildings.get(buildingId) });
97
+ }
98
+ return { ids, levels };
99
+ }
79
100
  /** The live parametric scene (registry + node data), or null while it has no zones. */
80
101
  export function liveRoomScene(virtualLampsOn) {
81
102
  const zoneIds = sceneRegistry.byType.zone;
82
103
  if (!zoneIds || zoneIds.size === 0)
83
104
  return null;
84
105
  const { nodes } = useScene.getState();
85
- const elevations = getLevelElevations(nodes);
86
- const levels = Object.values(nodes)
87
- .filter((node) => node?.type === 'level')
88
- .map((node) => ({ id: node.id, y: elevations.get(node.id)?.baseY ?? 0 }))
89
- .sort((a, b) => a.y - b.y);
90
- const levelIndex = new Map(levels.map((level, index) => [level.id, index]));
106
+ const { ids, levels } = liveLevels();
107
+ const levelIndex = new Map(ids.map((id, index) => [id, index]));
91
108
  const zones = [];
92
109
  const point = new Vector3();
93
110
  for (const id of zoneIds) {
@@ -96,11 +113,16 @@ export function liveRoomScene(virtualLampsOn) {
96
113
  if (!node?.polygon || node.polygon.length < 3 || !object || node.visible === false)
97
114
  continue;
98
115
  object.updateWorldMatrix(true, false);
99
- const polygon = node.polygon.map(([x, z]) => {
116
+ const toWorld = (ring) => ring.map(([x, z]) => {
100
117
  object.localToWorld(point.set(x, 0, z));
101
118
  return [point.x, point.z];
102
119
  });
103
- zones.push({ id, polygon, levelIndex: levelIndex.get(node.parentId ?? '') ?? 0 });
120
+ zones.push({
121
+ id,
122
+ polygon: toWorld(node.polygon),
123
+ holes: (node.holes ?? []).filter((hole) => hole.length >= 3).map(toWorld),
124
+ levelIndex: levelIndex.get(node.parentId ?? '') ?? 0,
125
+ });
104
126
  }
105
127
  if (!zones.length)
106
128
  return null;
@@ -134,7 +156,7 @@ export function liveRoomScene(virtualLampsOn) {
134
156
  bounds.expandByPoint(point.set(x, 0, z));
135
157
  return {
136
158
  bounds,
137
- levelY: levels.map((level) => level.y),
159
+ levels,
138
160
  zones,
139
161
  covers,
140
162
  walls,
@@ -144,15 +166,33 @@ export function liveRoomScene(virtualLampsOn) {
144
166
  configureRaycaster: (raycaster) => setSurfaceRaycastLayers(raycaster.layers),
145
167
  };
146
168
  }
147
- /** Live level objects in the room system's level order (for explode offsets). */
169
+ /** Live level objects in the room system's level order (explode offsets, visibility, focus). */
148
170
  export function liveLevelObjects() {
149
- const { nodes } = useScene.getState();
150
- const elevations = getLevelElevations(nodes);
151
- return Object.values(nodes)
152
- .filter((node) => node?.type === 'level')
153
- .sort((a, b) => (elevations.get(a.id)?.baseY ?? 0) - (elevations.get(b.id)?.baseY ?? 0))
154
- .map((node) => sceneRegistry.nodes.get(node.id))
155
- .filter((object) => !!object);
171
+ return liveLevels().ids.map((id) => sceneRegistry.nodes.get(id));
172
+ }
173
+ /** A baked artifact's levels: their objects and, per level, its building and floor height. */
174
+ function bakedLevels(root) {
175
+ const objects = [];
176
+ root.traverse((object) => {
177
+ if (object.userData.kind === 'level')
178
+ objects.push(object);
179
+ });
180
+ root.updateWorldMatrix(true, true);
181
+ const buildings = new Map();
182
+ const point = new Vector3();
183
+ const levels = objects.map((object) => {
184
+ let building = object.parent;
185
+ while (building && building.userData.kind !== 'building')
186
+ building = building.parent;
187
+ if (!buildings.has(building))
188
+ buildings.set(building, buildings.size);
189
+ return { y: object.getWorldPosition(point).y, building: buildings.get(building) };
190
+ });
191
+ return { objects, levels };
192
+ }
193
+ /** A baked artifact's level objects in the room system's level order. */
194
+ export function bakedLevelObjects(root) {
195
+ return root ? bakedLevels(root).objects : [];
156
196
  }
157
197
  /** How open a live door is (0 closed … 1 fully open), the transient state first. */
158
198
  export function liveDoorOpenness(id) {
@@ -164,7 +204,6 @@ export function liveDoorOpenness(id) {
164
204
  }
165
205
  /** A baked artifact's identity tree (levels, zones, covers, walls, openings), or null. */
166
206
  export function bakedRoomScene(root, virtualLampsOn) {
167
- const levelObjects = [];
168
207
  const zoneObjects = [];
169
208
  const covers = [];
170
209
  const wallRoots = [];
@@ -172,9 +211,6 @@ export function bakedRoomScene(root, virtualLampsOn) {
172
211
  root.traverse((object) => {
173
212
  const extras = object.userData;
174
213
  switch (extras.kind) {
175
- case 'level':
176
- levelObjects.push(object);
177
- break;
178
214
  case 'zone':
179
215
  zoneObjects.push(object);
180
216
  break;
@@ -195,34 +231,33 @@ export function bakedRoomScene(root, virtualLampsOn) {
195
231
  });
196
232
  if (!zoneObjects.length)
197
233
  return null;
198
- root.updateWorldMatrix(true, true);
199
- const levels = levelObjects
200
- .map((object) => ({ object, y: object.getWorldPosition(new Vector3()).y }))
201
- .sort((a, b) => a.y - b.y);
234
+ const levels = bakedLevels(root);
202
235
  const levelOf = (object) => {
203
236
  for (let x = object; x; x = x.parent) {
204
- const index = levels.findIndex((level) => level.object === x);
237
+ const index = levels.objects.indexOf(x);
205
238
  if (index >= 0)
206
- return index;
239
+ return { index, frame: x };
207
240
  }
208
- return 0;
241
+ return { index: 0, frame: null };
209
242
  };
210
243
  const point = new Vector3();
211
244
  const zones = [];
212
245
  for (const object of zoneObjects) {
213
- const polygon = object.userData.polygon;
246
+ const { polygon, holes } = object.userData;
214
247
  if (!polygon || polygon.length < 3)
215
248
  continue;
216
- const levelIndex = levelOf(object);
249
+ const level = levelOf(object);
217
250
  // Polygons are level-local [x, z]: bring them to world XZ through the level's frame.
218
- const frame = levels[levelIndex]?.object ?? object.parent ?? object;
251
+ const frame = level.frame ?? object.parent ?? object;
252
+ const toWorld = (ring) => ring.map(([x, z]) => {
253
+ point.set(x, 0, z).applyMatrix4(frame.matrixWorld);
254
+ return [point.x, point.z];
255
+ });
219
256
  zones.push({
220
257
  id: object.userData.pascalId ?? object.uuid,
221
- polygon: polygon.map(([x, z]) => {
222
- point.set(x, 0, z).applyMatrix4(frame.matrixWorld);
223
- return [point.x, point.z];
224
- }),
225
- levelIndex,
258
+ polygon: toWorld(polygon),
259
+ holes: (holes ?? []).filter((hole) => hole.length >= 3).map(toWorld),
260
+ levelIndex: level.index,
226
261
  });
227
262
  }
228
263
  if (!zones.length)
@@ -238,7 +273,7 @@ export function bakedRoomScene(root, virtualLampsOn) {
238
273
  bounds.expandByPoint(point.set(x, 0, z));
239
274
  return {
240
275
  bounds,
241
- levelY: levels.map((level) => level.y),
276
+ levels: levels.levels,
242
277
  zones,
243
278
  covers,
244
279
  walls,
@@ -1,4 +1,25 @@
1
1
  import { Box3, type Camera, Color, type Object3D, Raycaster, Vector2, Vector3 } from 'three';
2
+ import { type MapLevel, RoomMap } from './room-map';
3
+ /**
4
+ * "Room-aware" interior light, the game-engine way (ported from the enhanced viewer):
5
+ *
6
+ * - Zone polygons are rasterized per level into a top-down room-id map (10 cm cells). A fragment
7
+ * finds its room by looking up `p + n·0.18` — a wall face looks *into* the room it faces, so
8
+ * light never leaks through walls and there are no shadow maps to pay for.
9
+ * - Each room owns its lamps and window "portals": glass rectangles that emit sky (+ ground
10
+ * bounce) radiance inwards with an analytic rectangle form factor, plus the internally
11
+ * reflected component (split-flux) and the sky patch on the floor. Enclosed rooms see only
12
+ * a tenth of the sky environment.
13
+ * - Openings between rooms (doorways, arches, open plan) carry light from the neighbour and
14
+ * crossfade room-wide terms at the threshold.
15
+ * - At night, lit rooms throw light out through their windows (a gobo of the main lamp + the
16
+ * pane glow), and lamps outside every room light exterior surfaces analytically.
17
+ *
18
+ * Everything feeds the material lighting through `getGI` / `getAO` contexts: real diffuse
19
+ * irradiance (× albedo, × AO), not a post overlay. Shader inputs are uniforms and data textures,
20
+ * so rebuilding after an edit never recompiles a material.
21
+ */
22
+ type N = any;
2
23
  export type RoomLamp = {
3
24
  position: Vector3;
4
25
  color: Color;
@@ -25,6 +46,7 @@ export type RoomZone = {
25
46
  id: string;
26
47
  /** World XZ. */
27
48
  polygon: [number, number][];
49
+ holes?: [number, number][][];
28
50
  levelIndex: number;
29
51
  };
30
52
  export type RoomOpeningRoot = {
@@ -35,8 +57,8 @@ export type RoomOpeningRoot = {
35
57
  /** What the room system needs from a scene (live parametric or baked artifact). */
36
58
  export type RoomSceneInput = {
37
59
  bounds: Box3;
38
- /** World Y of each level, assembled (not exploded), ascending. */
39
- levelY: number[];
60
+ /** Every level: assembled (not exploded) world Y of its floor and its building's index. */
61
+ levels: MapLevel[];
40
62
  zones: RoomZone[];
41
63
  /** Ceilings, roofs and slabs (enclosure rays) with their kind. */
42
64
  covers: {
@@ -100,13 +122,10 @@ export declare class RoomLighting {
100
122
  exteriorLamps: RoomLamp[];
101
123
  portals: Portal[];
102
124
  openings: Opening[];
103
- levelY: number[];
125
+ levels: MapLevel[];
126
+ /** Which room a point is in (tiled per level; see `room-map.ts`). */
127
+ readonly map: RoomMap;
104
128
  private data;
105
- private map;
106
- private origin;
107
- private gridW;
108
- private gridH;
109
- private levels;
110
129
  private lampTexel;
111
130
  private lastSky;
112
131
  readonly portalGain: import("three/webgpu").UniformNode<"float", number>;
@@ -127,18 +146,12 @@ export declare class RoomLighting {
127
146
  readonly skyPatch: import("three/webgpu").UniformNode<"float", number>;
128
147
  /** Light through interior openings + threshold crossfade (off on the Low tier). */
129
148
  readonly softRooms: import("three/webgpu").UniformNode<"float", number>;
149
+ /** Camera world Y (live). */
130
150
  readonly cameraY: import("three/webgpu").UniformNode<"float", number>;
131
- readonly focusedLevel: import("three/webgpu").UniformNode<"int", number>;
132
- /**
133
- * The level arrays live in one shared group, uploaded when a level moves: an array uniform in
134
- * the default (per-object) group is re-sent for every object in every pass, whether it changed
135
- * or not — some 760 uploads a frame in a furnished flat.
136
- */
137
- private readonly levelGroup;
138
151
  private readonly u;
139
152
  /** Rebuild from a scene: rooms, lamps, portals, openings, room-id map. */
140
153
  build(input: RoomSceneInput): void;
141
- /** CPU-side room lookup (same rule as the shader, without the normal offset). */
154
+ /** CPU-side room lookup in assembled space (same rule as the shader, without the normal offset). */
142
155
  roomAt(p: Vector3): number;
143
156
  /**
144
157
  * Whether each level is on screen. A camera over a level whose upper floors are hidden stands
@@ -146,6 +159,10 @@ export declare class RoomLighting {
146
159
  * such, not as a lamplit room it cannot see.
147
160
  */
148
161
  levelShown: boolean[];
162
+ /** Per level: focused (its rooms open from above when the camera is over their cover). */
163
+ levelFocused: boolean[];
164
+ /** Per level: the highest one shown in its building (its rooms seen from above). */
165
+ private levelTopShown;
149
166
  /**
150
167
  * What the lit rooms in view add to an outside camera's meter: a blend of the exterior reading
151
168
  * and the rooms' own irradiance (their indoor meter), weighted by the share of the frame each
@@ -164,8 +181,13 @@ export declare class RoomLighting {
164
181
  room: number;
165
182
  inside: boolean;
166
183
  };
167
- /** Explode / level motion: live world Y of each level (assembled + offset). */
168
- setLevelOffsets(offsets: number[]): void;
184
+ /**
185
+ * Live level presentation, per level: explode offset (live world Y − assembled), whether it is
186
+ * shown, and whether it is the selected level of a cutaway (solo / levels above hidden). A shown
187
+ * level is focused — its rooms open from above — when selected so, or when every level over it
188
+ * in its building is hidden.
189
+ */
190
+ setLevelPresentation(offsets: number[], shown: boolean[], selected: boolean[]): void;
169
191
  /** Re-run the light transfer (after a quality-tier change of the soft room map). */
170
192
  refresh(): void;
171
193
  /** Lamp switches changed: rewrite lamp texels (+ the light carried through openings). */
@@ -196,22 +218,27 @@ export declare class RoomLighting {
196
218
  * over the lit few at night, not over every window of the building.
197
219
  */
198
220
  private writeActiveLists;
199
- private uploadMap;
200
221
  private markData;
201
222
  private writeLamp;
202
223
  /** Interior portals emit the neighbour room's average radiance: L = E_avg·ρ/π (lamps + daylight). */
203
224
  private writeInteriorPortals;
204
225
  private set;
205
226
  /**
206
- * Walk every boundary between two room cells (or a room and outside) on the room map and cast
207
- * short horizontal rays against the walls at 0.35 m and 1.6 m: open at both heights = a walkable
208
- * opening (doorway, arch, open-plan edge). Windows don't count (sills are above 0.35 m).
227
+ * Walk every boundary between two room cells (or a room and outside) on each level's grid and
228
+ * cast short horizontal rays against the walls at 0.35 m and 1.6 m: open at both heights = a
229
+ * walkable opening (doorway, arch, open-plan edge). Windows don't count (sills are above 0.35 m).
230
+ * `walk` runs per level while its grid exists; `finish` clusters the samples into openings.
231
+ */
232
+ private openingSearch;
233
+ /** One opening from its boundary samples: measured along their own line, facing room b. */
234
+ private openingFromRun;
235
+ /** Room index (−1 outside) at a world-space position (live heights). */
236
+ roomAtNode: import("three/tsl").FnNode<[any], import("three/webgpu").VarNode<"int", import("three/webgpu").ConstNode<"int", number>>>;
237
+ /**
238
+ * The room a surface faces (probed 18 cm off it along its normal). One node per material: its
239
+ * lighting and its exterior mask share the lookup.
209
240
  */
210
- private detectOpenings;
211
- /** Level index for a world-space height (live, explode-offset level heights). */
212
- private levelOfNode;
213
- /** Room index (−1 outside) at a world-space position. */
214
- roomAtNode: import("three/tsl").FnNode<[any], import("three/webgpu").Node<"int">>;
241
+ probeRoomNode(): N;
215
242
  /** E' = Emax·(1 − e^(−E/Emax)), on luminance, hue kept — near-field hot spots compress, never blow out. */
216
243
  private softClampLamps;
217
244
  /**
@@ -219,7 +246,8 @@ export declare class RoomLighting {
219
246
  * topmost cover and that cover is hidden from there: a ceiling (hidden from above), or anything
220
247
  * once its level is focused (the levels over it hidden). From inside, under the cover, the room
221
248
  * stays enclosed whatever is focused: it must not take the full sky on top of its windows.
222
- * `h2` is the room's third header texel: [coverY, roof, level, 0].
249
+ * `h2` is the room's third header texel: [coverY, roof, level, 0]; `level` its level's
250
+ * [th, entryOffset, offset, flags] (flag 1: focused).
223
251
  */
224
252
  private openToSky;
225
253
  private texel;
@@ -228,7 +256,7 @@ export declare class RoomLighting {
228
256
  * irradiance — lamp + portal + bounce diffuse irradiance (linear)
229
257
  * enclosure — multiplier for the sky IBL (1 outdoors, `indoorEnv` in enclosed rooms)
230
258
  */
231
- lightingNode: import("three/tsl").FnNode<[], import("three/webgpu").JoinNode<"vec4">>;
259
+ lightingNode: import("three/tsl").FnNode<[any], import("three/webgpu").JoinNode<"vec4">>;
232
260
  /**
233
261
  * Light thrown *out* of lit rooms through their windows onto exterior surfaces (ground,
234
262
  * terraces, balconies, reveals). Two terms per exterior portal:
@@ -246,7 +274,7 @@ export declare class RoomLighting {
246
274
  */
247
275
  exteriorLampsNode: import("three/tsl").FnNode<[any, any], any>;
248
276
  /** 1 where exterior lights may shine (outside, or rooms open to the sky), 0 inside. */
249
- exteriorMaskNode: import("three/tsl").FnNode<[], import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>>;
277
+ exteriorMaskNode: import("three/tsl").FnNode<[any], import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>>;
250
278
  /** Linear lamp radiance of a room (its lit lamps) — the night tint of its window panes. */
251
279
  roomGlowNode: import("three/tsl").FnNode<[any], import("three/webgpu").Node<"vec3">>;
252
280
  }
@@ -255,6 +283,8 @@ export declare function polygonPerimeter(poly: [number, number][]): number;
255
283
  export declare function polygonArea(poly: [number, number][]): number;
256
284
  export declare function polygonCentroid(poly: [number, number][]): Vector2;
257
285
  /** Tanner Helland blackbody fit → linear RGB. */
286
+ /** A point inside the polygon and outside its holes: the centroid when it is, else a scan. */
287
+ export declare function interiorPoint(poly: [number, number][], holes?: [number, number][][]): Vector2;
258
288
  export declare function kelvin(k: number): Color;
259
289
  /** The daylight look's room system (one viewer canvas at a time). */
260
290
  export declare const daylightRooms: RoomLighting;
@@ -1 +1 @@
1
- {"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/rooms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/rooms.ts"],"names":[],"mappings":"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"}