@pascal-app/viewer 1.0.5 → 1.0.7

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 (199) hide show
  1. package/dist/components/viewer/daylight-atmosphere.d.ts +9 -0
  2. package/dist/components/viewer/daylight-atmosphere.d.ts.map +1 -0
  3. package/dist/components/viewer/daylight-atmosphere.js +315 -0
  4. package/dist/components/viewer/drone-controller.d.ts +15 -0
  5. package/dist/components/viewer/drone-controller.d.ts.map +1 -0
  6. package/dist/components/viewer/drone-controller.js +194 -0
  7. package/dist/components/viewer/glb-interactive.d.ts +4 -18
  8. package/dist/components/viewer/glb-interactive.d.ts.map +1 -1
  9. package/dist/components/viewer/glb-interactive.js +32 -268
  10. package/dist/components/viewer/glb-scene-motion.d.ts +8 -0
  11. package/dist/components/viewer/glb-scene-motion.d.ts.map +1 -0
  12. package/dist/components/viewer/glb-scene-motion.js +57 -0
  13. package/dist/components/viewer/glb-scene.d.ts +3 -1
  14. package/dist/components/viewer/glb-scene.d.ts.map +1 -1
  15. package/dist/components/viewer/glb-scene.js +289 -49
  16. package/dist/components/viewer/glb-selection-callout.d.ts +17 -0
  17. package/dist/components/viewer/glb-selection-callout.d.ts.map +1 -0
  18. package/dist/components/viewer/glb-selection-callout.js +54 -0
  19. package/dist/components/viewer/glb-walkthrough-controller.d.ts.map +1 -1
  20. package/dist/components/viewer/glb-walkthrough-controller.js +6 -3
  21. package/dist/components/viewer/index.d.ts +5 -0
  22. package/dist/components/viewer/index.d.ts.map +1 -1
  23. package/dist/components/viewer/index.js +30 -6
  24. package/dist/components/viewer/lights.d.ts.map +1 -1
  25. package/dist/components/viewer/lights.js +192 -5
  26. package/dist/components/viewer/post-processing.d.ts.map +1 -1
  27. package/dist/components/viewer/post-processing.js +150 -94
  28. package/dist/components/viewer/scene-environment.js +4 -5
  29. package/dist/components/viewer/selection-callout.d.ts +51 -0
  30. package/dist/components/viewer/selection-callout.d.ts.map +1 -0
  31. package/dist/components/viewer/selection-callout.js +197 -0
  32. package/dist/components/viewer/use-daylight-rooms.d.ts +13 -0
  33. package/dist/components/viewer/use-daylight-rooms.d.ts.map +1 -0
  34. package/dist/components/viewer/use-daylight-rooms.js +236 -0
  35. package/dist/components/viewer/viewer-camera.d.ts.map +1 -1
  36. package/dist/components/viewer/viewer-camera.js +12 -1
  37. package/dist/index.d.ts +21 -7
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +23 -7
  40. package/dist/lib/daylight/ground.d.ts +21 -0
  41. package/dist/lib/daylight/ground.d.ts.map +1 -0
  42. package/dist/lib/daylight/ground.js +53 -0
  43. package/dist/lib/daylight/location.d.ts +32 -0
  44. package/dist/lib/daylight/location.d.ts.map +1 -0
  45. package/dist/lib/daylight/location.js +74 -0
  46. package/dist/lib/daylight/look.d.ts +33 -0
  47. package/dist/lib/daylight/look.d.ts.map +1 -0
  48. package/dist/lib/daylight/look.js +13 -0
  49. package/dist/lib/daylight/material-hooks.d.ts +2 -0
  50. package/dist/lib/daylight/material-hooks.d.ts.map +1 -0
  51. package/dist/lib/daylight/material-hooks.js +150 -0
  52. package/dist/lib/daylight/room-context.d.ts +12 -0
  53. package/dist/lib/daylight/room-context.d.ts.map +1 -0
  54. package/dist/lib/daylight/room-context.js +53 -0
  55. package/dist/lib/daylight/room-scene.d.ts +54 -0
  56. package/dist/lib/daylight/room-scene.d.ts.map +1 -0
  57. package/dist/lib/daylight/room-scene.js +356 -0
  58. package/dist/lib/daylight/rooms.d.ts +262 -0
  59. package/dist/lib/daylight/rooms.d.ts.map +1 -0
  60. package/dist/lib/daylight/rooms.js +1223 -0
  61. package/dist/lib/daylight/runtime.d.ts +33 -0
  62. package/dist/lib/daylight/runtime.d.ts.map +1 -0
  63. package/dist/lib/daylight/runtime.js +42 -0
  64. package/dist/lib/daylight/sky.d.ts +26 -0
  65. package/dist/lib/daylight/sky.d.ts.map +1 -0
  66. package/dist/lib/daylight/sky.js +217 -0
  67. package/dist/lib/daylight/solar.d.ts +46 -0
  68. package/dist/lib/daylight/solar.d.ts.map +1 -0
  69. package/dist/lib/daylight/solar.js +156 -0
  70. package/dist/lib/device-tier.d.ts +29 -0
  71. package/dist/lib/device-tier.d.ts.map +1 -0
  72. package/dist/lib/device-tier.js +71 -0
  73. package/dist/lib/dispose-object3d.d.ts.map +1 -1
  74. package/dist/lib/dispose-object3d.js +4 -2
  75. package/dist/lib/drone-flight.d.ts +44 -0
  76. package/dist/lib/drone-flight.d.ts.map +1 -0
  77. package/dist/lib/drone-flight.js +121 -0
  78. package/dist/lib/editor-highlight.d.ts +16 -0
  79. package/dist/lib/editor-highlight.d.ts.map +1 -0
  80. package/dist/lib/editor-highlight.js +33 -0
  81. package/dist/lib/foundation-materials.d.ts.map +1 -1
  82. package/dist/lib/foundation-materials.js +2 -4
  83. package/dist/lib/glb-merge.d.ts +23 -0
  84. package/dist/lib/glb-merge.d.ts.map +1 -0
  85. package/dist/lib/glb-merge.js +184 -0
  86. package/dist/lib/hardware-geometry.d.ts +21 -0
  87. package/dist/lib/hardware-geometry.d.ts.map +1 -0
  88. package/dist/lib/hardware-geometry.js +283 -0
  89. package/dist/lib/layer-pass.d.ts +2 -0
  90. package/dist/lib/layer-pass.d.ts.map +1 -1
  91. package/dist/lib/layer-pass.js +20 -0
  92. package/dist/lib/materials.d.ts.map +1 -1
  93. package/dist/lib/materials.js +50 -23
  94. package/dist/lib/merged-outline-node.d.ts.map +1 -1
  95. package/dist/lib/merged-outline-node.js +7 -1
  96. package/dist/lib/occlusion-culler.d.ts +34 -0
  97. package/dist/lib/occlusion-culler.d.ts.map +1 -0
  98. package/dist/lib/occlusion-culler.js +698 -0
  99. package/dist/lib/post-processing-resources.d.ts +4 -0
  100. package/dist/lib/post-processing-resources.d.ts.map +1 -1
  101. package/dist/lib/post-processing-resources.js +5 -0
  102. package/dist/lib/readback-rows.d.ts +14 -0
  103. package/dist/lib/readback-rows.d.ts.map +1 -0
  104. package/dist/lib/readback-rows.js +31 -0
  105. package/dist/lib/reveal-pose.d.ts.map +1 -1
  106. package/dist/lib/reveal-pose.js +3 -0
  107. package/dist/lib/scene-matrices.d.ts +12 -0
  108. package/dist/lib/scene-matrices.d.ts.map +1 -0
  109. package/dist/lib/scene-matrices.js +287 -0
  110. package/dist/lib/scene-pass-mrt.d.ts +5 -2
  111. package/dist/lib/scene-pass-mrt.d.ts.map +1 -1
  112. package/dist/lib/scene-pass-mrt.js +7 -2
  113. package/dist/lib/scene-themes.d.ts +0 -2
  114. package/dist/lib/scene-themes.d.ts.map +1 -1
  115. package/dist/lib/scene-themes.js +0 -2
  116. package/dist/lib/scene-visibility.d.ts +2 -0
  117. package/dist/lib/scene-visibility.d.ts.map +1 -1
  118. package/dist/lib/scene-visibility.js +12 -3
  119. package/dist/lib/site-surfaces.d.ts +1 -8
  120. package/dist/lib/site-surfaces.d.ts.map +1 -1
  121. package/dist/lib/site-surfaces.js +0 -19
  122. package/dist/lib/snapshot-pipeline.d.ts.map +1 -1
  123. package/dist/lib/snapshot-pipeline.js +24 -40
  124. package/dist/lib/texture-reference.d.ts.map +1 -1
  125. package/dist/lib/texture-reference.js +10 -8
  126. package/dist/lib/underground-ambiance.d.ts +0 -2
  127. package/dist/lib/underground-ambiance.d.ts.map +1 -1
  128. package/dist/lib/underground-ambiance.js +0 -2
  129. package/dist/store/use-item-light-pool.d.ts +3 -6
  130. package/dist/store/use-item-light-pool.d.ts.map +1 -1
  131. package/dist/store/use-item-light-pool.js +12 -0
  132. package/dist/store/use-viewer.d.ts +72 -15
  133. package/dist/store/use-viewer.d.ts.map +1 -1
  134. package/dist/store/use-viewer.js +103 -18
  135. package/dist/systems/ceiling/ceiling-system.d.ts +5 -0
  136. package/dist/systems/ceiling/ceiling-system.d.ts.map +1 -1
  137. package/dist/systems/ceiling/ceiling-system.js +11 -1
  138. package/dist/systems/door/door-system.d.ts.map +1 -1
  139. package/dist/systems/door/door-system.js +501 -145
  140. package/dist/systems/door/leaf-profile.d.ts +11 -0
  141. package/dist/systems/door/leaf-profile.d.ts.map +1 -0
  142. package/dist/systems/door/leaf-profile.js +140 -0
  143. package/dist/systems/interactive/callout-actions.d.ts +72 -0
  144. package/dist/systems/interactive/callout-actions.d.ts.map +1 -0
  145. package/dist/systems/interactive/callout-actions.js +212 -0
  146. package/dist/systems/interactive/interactive-system.d.ts +5 -1
  147. package/dist/systems/interactive/interactive-system.d.ts.map +1 -1
  148. package/dist/systems/interactive/interactive-system.js +44 -121
  149. package/dist/systems/interactive/opening-settled.d.ts +16 -0
  150. package/dist/systems/interactive/opening-settled.d.ts.map +1 -0
  151. package/dist/systems/interactive/opening-settled.js +53 -0
  152. package/dist/systems/item-light/item-light-system.d.ts.map +1 -1
  153. package/dist/systems/item-light/item-light-system.js +22 -214
  154. package/dist/systems/item-light/pooled-lights.d.ts +70 -0
  155. package/dist/systems/item-light/pooled-lights.d.ts.map +1 -0
  156. package/dist/systems/item-light/pooled-lights.js +449 -0
  157. package/dist/systems/level/level-system.d.ts.map +1 -1
  158. package/dist/systems/level/level-system.js +19 -1
  159. package/dist/systems/roof/roof-material-slots.d.ts +14 -0
  160. package/dist/systems/roof/roof-material-slots.d.ts.map +1 -0
  161. package/dist/systems/roof/roof-material-slots.js +13 -0
  162. package/dist/systems/roof/roof-materials.d.ts +25 -2
  163. package/dist/systems/roof/roof-materials.d.ts.map +1 -1
  164. package/dist/systems/roof/roof-materials.js +85 -26
  165. package/dist/systems/roof/roof-system.d.ts +34 -1
  166. package/dist/systems/roof/roof-system.d.ts.map +1 -1
  167. package/dist/systems/roof/roof-system.js +477 -105
  168. package/dist/systems/wall/opening-casing-geometry.d.ts +14 -0
  169. package/dist/systems/wall/opening-casing-geometry.d.ts.map +1 -0
  170. package/dist/systems/wall/opening-casing-geometry.js +102 -0
  171. package/dist/systems/wall/opening-cutout-geometry.d.ts +9 -0
  172. package/dist/systems/wall/opening-cutout-geometry.d.ts.map +1 -1
  173. package/dist/systems/wall/opening-cutout-geometry.js +7 -3
  174. package/dist/systems/wall/wall-materials.d.ts.map +1 -1
  175. package/dist/systems/wall/wall-materials.js +28 -35
  176. package/dist/systems/wall/wall-system.d.ts.map +1 -1
  177. package/dist/systems/wall/wall-system.js +34 -19
  178. package/dist/systems/wall/wall-t-junctions.d.ts +15 -0
  179. package/dist/systems/wall/wall-t-junctions.d.ts.map +1 -0
  180. package/dist/systems/wall/wall-t-junctions.js +149 -0
  181. package/dist/systems/window/window-animation-system.d.ts +3 -12
  182. package/dist/systems/window/window-animation-system.d.ts.map +1 -1
  183. package/dist/systems/window/window-animation-system.js +37 -122
  184. package/dist/systems/window/window-pose.d.ts +31 -0
  185. package/dist/systems/window/window-pose.d.ts.map +1 -0
  186. package/dist/systems/window/window-pose.js +152 -0
  187. package/dist/systems/window/window-roller-shutter.d.ts +8 -0
  188. package/dist/systems/window/window-roller-shutter.d.ts.map +1 -0
  189. package/dist/systems/window/window-roller-shutter.js +64 -0
  190. package/dist/systems/window/window-system.d.ts +2 -11
  191. package/dist/systems/window/window-system.d.ts.map +1 -1
  192. package/dist/systems/window/window-system.js +470 -303
  193. package/package.json +6 -6
  194. package/dist/systems/interactive/control-widget.d.ts +0 -10
  195. package/dist/systems/interactive/control-widget.d.ts.map +0 -1
  196. package/dist/systems/interactive/control-widget.js +0 -35
  197. package/dist/systems/interactive/procedural-controls.d.ts +0 -13
  198. package/dist/systems/interactive/procedural-controls.d.ts.map +0 -1
  199. package/dist/systems/interactive/procedural-controls.js +0 -17
@@ -0,0 +1,197 @@
1
+ 'use client';
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { emitter, usePascalI18n, } from '@pascal-app/core';
4
+ import { Html } from '@react-three/drei';
5
+ import { useFrame, useThree } from '@react-three/fiber';
6
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
7
+ import { Box3, Vector3 } from 'three';
8
+ function resolve(i18n, text) {
9
+ return typeof text === 'string' ? text : i18n._(text);
10
+ }
11
+ const opens = (icon) => icon === 'door' || icon === 'window' || icon === 'shutters';
12
+ const STEM_MIN = 64;
13
+ const STEM_MAX = 104;
14
+ const EDGE = 16;
15
+ const _box = new Box3();
16
+ const _world = new Vector3();
17
+ const _ndc = new Vector3();
18
+ /**
19
+ * The selected element's label: a dot on it, a hairline rising from the dot,
20
+ * then its name, a detail line, its controls and a close button. It follows
21
+ * the element's world point each frame rather than living inside its object:
22
+ * kinds that rebuild their children (a window opening) would drop it.
23
+ */
24
+ export function SelectionCallout({ object, anchor: anchorProp, title, subtitle, actions, onDismiss, }) {
25
+ const camera = useThree((state) => state.camera);
26
+ const size = useThree((state) => state.size);
27
+ const rootRef = useRef(null);
28
+ const copyRef = useRef(null);
29
+ const [visible, setVisible] = useState(false);
30
+ const i18n = usePascalI18n();
31
+ const deselect = i18n._({ id: 'viewer.callout.deselect', message: 'Deselect' });
32
+ // The dot sits at the centre of the element's bounds, in its own space.
33
+ const anchor = useMemo(() => {
34
+ if (anchorProp)
35
+ return anchorProp;
36
+ object.updateWorldMatrix(true, true);
37
+ _box.setFromObject(object);
38
+ if (_box.isEmpty())
39
+ return new Vector3();
40
+ return object.worldToLocal(_box.getCenter(new Vector3()));
41
+ }, [object, anchorProp]);
42
+ useEffect(() => {
43
+ const frame = requestAnimationFrame(() => setVisible(true));
44
+ return () => cancelAnimationFrame(frame);
45
+ }, []);
46
+ // Escape deselects, as the close button does.
47
+ useEffect(() => {
48
+ const onKey = (event) => {
49
+ if (event.key === 'Escape')
50
+ onDismiss();
51
+ };
52
+ window.addEventListener('keydown', onKey);
53
+ return () => window.removeEventListener('keydown', onKey);
54
+ }, [onDismiss]);
55
+ const copyHeight = useRef(0);
56
+ useLayoutEffect(() => {
57
+ const copy = copyRef.current;
58
+ if (!copy)
59
+ return;
60
+ const observer = new ResizeObserver(() => {
61
+ copyHeight.current = copy.offsetHeight;
62
+ });
63
+ observer.observe(copy);
64
+ copyHeight.current = copy.offsetHeight;
65
+ return () => observer.disconnect();
66
+ }, []);
67
+ // Stem height and side follow the canvas: the copy flips left near the right
68
+ // edge and hangs below the dot near the top.
69
+ useFrame(() => {
70
+ const root = rootRef.current;
71
+ if (!root)
72
+ return;
73
+ const stem = Math.max(copyHeight.current + 12, Math.min(STEM_MAX, Math.max(STEM_MIN, size.height * 0.12)));
74
+ _ndc.copy(object.localToWorld(_world.copy(anchor))).project(camera);
75
+ const x = ((_ndc.x + 1) / 2) * size.width;
76
+ const y = ((1 - _ndc.y) / 2) * size.height;
77
+ const width = copyRef.current?.offsetWidth ?? 0;
78
+ root.style.setProperty('--callout-stem', `${stem}px`);
79
+ root.dataset.left = String(x + 12 + width > size.width - EDGE);
80
+ root.dataset.below = String(y - stem < EDGE);
81
+ });
82
+ // Drei places the label from its own group: move that group onto the
83
+ // element's anchor first, so projection and the behind-camera test agree.
84
+ const calculatePosition = useCallback((el, view, viewport) => {
85
+ object.localToWorld(_world.copy(anchor));
86
+ el.position.copy(el.parent ? el.parent.worldToLocal(_world) : _world);
87
+ el.updateWorldMatrix(false, false);
88
+ _ndc.setFromMatrixPosition(el.matrixWorld).project(view);
89
+ return [((_ndc.x + 1) / 2) * viewport.width, ((1 - _ndc.y) / 2) * viewport.height];
90
+ }, [object, anchor]);
91
+ return (_jsxs(Html, { calculatePosition: calculatePosition, pointerEvents: "none", zIndexRange: [20, 0], children: [_jsx("style", { children: CALLOUT_CSS }), _jsxs("div", { className: "pascal-callout", "data-visible": visible, ref: rootRef, children: [_jsx("span", { "aria-hidden": "true", className: "pascal-callout-pin" }), _jsx("span", { "aria-hidden": "true", className: "pascal-callout-leader" }), _jsxs("div", { className: "pascal-callout-copy", onClick: (event) => event.stopPropagation(), onPointerDown: (event) => event.stopPropagation(), onPointerUp: (event) => event.stopPropagation(), ref: copyRef, children: [_jsx("strong", { children: title }), subtitle ? (_jsx("span", { className: "pascal-callout-detail", children: resolve(i18n, subtitle) })) : null, _jsxs("div", { className: "pascal-callout-actions", children: [actions.map((action) => action.kind === 'toggle' ? (_jsx(ToggleAction, { action: action }, action.key)) : (_jsx(RangeAction, { action: action }, action.key))), _jsx("button", { "aria-label": deselect, className: "pascal-callout-dismiss", onClick: onDismiss, title: deselect, type: "button", children: _jsx(CalloutGlyph, { icon: "close", on: false }) })] })] })] })] }));
92
+ }
93
+ function ToggleAction({ action }) {
94
+ const i18n = usePascalI18n();
95
+ const text = action.text
96
+ ? resolve(i18n, action.text)
97
+ : i18n._({
98
+ id: 'viewer.callout.state',
99
+ message: '{state, select, open {Open} closed {Closed} on {On} other {Off}}',
100
+ values: {
101
+ state: opens(action.icon) ? (action.on ? 'open' : 'closed') : action.on ? 'on' : 'off',
102
+ },
103
+ });
104
+ const label = action.icon === 'shutters'
105
+ ? i18n._({
106
+ id: 'viewer.callout.shuttersAction',
107
+ message: '{action, select, close {Close the shutters of {name}} other {Open the shutters of {name}}}',
108
+ values: { action: action.on ? 'close' : 'open', name: action.name },
109
+ })
110
+ : i18n._({
111
+ id: 'viewer.callout.action',
112
+ message: '{action, select, open {Open {name}} close {Close {name}} on {Turn on {name}} other {Turn off {name}}}',
113
+ values: {
114
+ action: opens(action.icon) ? (action.on ? 'close' : 'open') : action.on ? 'off' : 'on',
115
+ name: action.text ? resolve(i18n, action.text) : action.name,
116
+ },
117
+ });
118
+ return (_jsxs("button", { "aria-label": label, "aria-pressed": action.on, className: "pascal-callout-action", "data-control": action.text ? 'named' : opens(action.icon) ? 'opening' : 'toggle', onClick: () => {
119
+ if (!action.on)
120
+ emitter.emit('interaction:sound', action.sound.on);
121
+ const settled = action.toggle();
122
+ if (action.on)
123
+ playClosing(action, settled);
124
+ }, title: label, type: "button", children: [_jsx(CalloutGlyph, { icon: action.icon, on: action.on }), _jsx("span", { children: text })] }));
125
+ }
126
+ /**
127
+ * A door, window or cabinet door swings shut, then latches as it lands
128
+ * (shutters and drawers just land); anything without a known end sounds at once.
129
+ */
130
+ function playClosing(action, settled) {
131
+ // A garage door's motor runs the whole way, so it starts with the press.
132
+ if (!settled || action.sound.off === 'garage') {
133
+ emitter.emit('interaction:sound', action.sound.off);
134
+ return;
135
+ }
136
+ if (action.sound.swing)
137
+ emitter.emit('interaction:sound', action.sound.swing);
138
+ void settled.then(() => emitter.emit('interaction:sound', action.sound.off));
139
+ }
140
+ function RangeAction({ action }) {
141
+ return (_jsxs("label", { className: "pascal-callout-action pascal-callout-range", children: [_jsxs("span", { children: [action.label, " ", action.value, action.unit ?? ''] }), _jsx("input", { "aria-label": action.label, max: action.max, min: action.min, onChange: (event) => action.onChange(Number(event.target.value)), step: action.step, type: "range", value: action.value })] }));
142
+ }
143
+ function Svg({ children }) {
144
+ return (_jsx("svg", { "aria-hidden": "true", fill: "none", focusable: "false", stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, viewBox: "0 0 24 24", children: children }));
145
+ }
146
+ function CalloutGlyph({ icon, on }) {
147
+ switch (icon) {
148
+ case 'light':
149
+ return (_jsxs(Svg, { children: [_jsx("path", { d: "M9 18h6m-5 3h4M8 13a6 6 0 1 1 8 0c-1.2 1-1 2-1 2H9s.2-1-1-2Z" }), on ? (_jsx("path", { d: "M12 1v1M3 4l1 1m16-1-1 1M1 10h1m20 0h-1" })) : (_jsx("path", { d: "m3 3 18 18", opacity: ".6" }))] }));
150
+ case 'fan':
151
+ return (_jsxs(Svg, { children: [_jsx("circle", { cx: "12", cy: "12", r: "2" }), _jsx("path", { d: "M10.5 10.5C6 5 10 1 13 3c2 2 0 5-1 7M14 11c6-2 9 3 6 5-2 2-5-1-7-3M11.5 14c-1 6-7 6-8 3-1-3 4-4 7-4" }), on ? null : _jsx("path", { d: "m3 3 18 18", opacity: ".6" })] }));
152
+ case 'window':
153
+ return (_jsx(Svg, { children: _jsx("path", { d: on
154
+ ? 'M3 3h18v18H3ZM3 12h10M13 3v18m0-14 6-2v14l-6-2'
155
+ : 'M3 3h18v18H3ZM12 3v18M3 12h18' }) }));
156
+ case 'door':
157
+ return (_jsx(Svg, { children: _jsx("path", { d: on ? 'M3 21h18M5 21V3h14v18M5 3l9 3v15M11 12v2' : 'M3 21h18M5 21V3h14v18M15 12h1' }) }));
158
+ case 'shutters':
159
+ return (_jsx(Svg, { children: on ? (_jsxs(_Fragment, { children: [_jsx("rect", { height: "16", rx: "1", width: "8", x: "8", y: "4" }), _jsx("path", { d: "M8 4 3 6v12l5 2M16 4l5 2v12l-5 2" })] })) : (_jsxs(_Fragment, { children: [_jsx("rect", { height: "18", rx: "1", width: "16", x: "4", y: "3" }), _jsx("path", { d: "M12 3v18M7 8h2M7 12h2M7 16h2M15 8h2M15 12h2M15 16h2" })] })) }));
160
+ case 'close':
161
+ return (_jsx(Svg, { children: _jsx("path", { d: "m6 6 12 12M6 18 18 6" }) }));
162
+ default:
163
+ return (_jsx(Svg, { children: _jsx("path", { d: "M12 2v9m-5-7a9 9 0 1 0 10 0" }) }));
164
+ }
165
+ }
166
+ // The marketing house's callout at dusk: light ink on a dark halo reads over
167
+ // any scene; only the controls get a surface.
168
+ const CALLOUT_CSS = `
169
+ .pascal-callout { --callout-ink:#f1f2f4; --callout-secondary:#e0e3e8; --callout-halo:#000000e0; --callout-halo-soft:#00000080; --callout-control:#24272d70; --callout-active:#e7e9ee2b; position:absolute; width:0; height:0; pointer-events:none; user-select:none; color:var(--callout-ink); text-shadow:0 0 2px var(--callout-halo), 0 1px 6px var(--callout-halo-soft); opacity:0; transition:opacity 70ms ease; }
170
+ .pascal-callout[data-visible="true"] { opacity:1; transition-duration:0ms; }
171
+ .pascal-callout-pin { position:absolute; left:-2px; top:-2px; width:4px; height:4px; border-radius:50%; background:currentColor; box-shadow:0 0 2px var(--callout-halo); opacity:.8; }
172
+ .pascal-callout-leader { position:absolute; left:0; bottom:0; width:1px; height:var(--callout-stem, 100px); background:currentColor; box-shadow:0 0 2px var(--callout-halo); opacity:.48; transform:scaleY(0); transform-origin:bottom; transition:transform 100ms cubic-bezier(.22,1,.36,1); }
173
+ .pascal-callout[data-visible="true"] .pascal-callout-leader { transform:scaleY(1); }
174
+ .pascal-callout-copy { position:absolute; left:12px; bottom:var(--callout-stem, 100px); width:max-content; transform:translateY(100%); pointer-events:auto; }
175
+ .pascal-callout-copy strong { display:block; max-width:min(220px, calc(100vw - 32px)); font-size:15px; line-height:1.3; font-weight:550; letter-spacing:-.015em; }
176
+ .pascal-callout-detail { display:block; max-width:min(220px, calc(100vw - 32px)); margin-top:4px; font-size:11px; line-height:1.3; letter-spacing:.025em; font-variant-numeric:tabular-nums; color:var(--callout-secondary); }
177
+ .pascal-callout[data-left="true"] .pascal-callout-copy { left:auto; right:12px; text-align:right; }
178
+ .pascal-callout[data-left="true"] .pascal-callout-copy strong, .pascal-callout[data-left="true"] .pascal-callout-detail { margin-left:auto; }
179
+ .pascal-callout[data-left="true"] .pascal-callout-actions { justify-content:flex-end; }
180
+ .pascal-callout[data-below="true"] .pascal-callout-leader { bottom:auto; top:0; transform-origin:top; }
181
+ .pascal-callout[data-below="true"] .pascal-callout-copy { bottom:auto; top:var(--callout-stem, 100px); transform:translateY(-100%); }
182
+ .pascal-callout-actions { display:flex; flex-wrap:nowrap; gap:6px; margin-top:9px; align-items:center; }
183
+ .pascal-callout-actions button, .pascal-callout-range { min-width:44px; height:44px; padding:0 10px; display:inline-flex; align-items:center; justify-content:center; gap:6px; color:var(--callout-ink); font:inherit; font-size:10px; border:1px solid color-mix(in srgb, currentColor 20%, transparent); border-radius:22px; background:var(--callout-control); -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px); text-shadow:0 0 2px var(--callout-halo), 0 1px 6px var(--callout-halo-soft); cursor:pointer; touch-action:manipulation; white-space:nowrap; }
184
+ .pascal-callout-actions button[aria-pressed="true"] { background:var(--callout-active); }
185
+ .pascal-callout-actions button:active { transform:scale(.96); }
186
+ .pascal-callout-actions button:focus-visible { outline:2px solid var(--callout-ink); outline-offset:3px; }
187
+ .pascal-callout-actions svg { width:18px; height:18px; flex:none; filter:drop-shadow(0 0 2px var(--callout-halo)); }
188
+ .pascal-callout-action > span { display:inline-block; text-align:left; }
189
+ .pascal-callout-action[data-control="toggle"] > span { width:1.7em; }
190
+ .pascal-callout-action[data-control="opening"] > span { width:3.4em; }
191
+ .pascal-callout-actions .pascal-callout-dismiss { padding:0; background:transparent; border-color:transparent; -webkit-backdrop-filter:none; backdrop-filter:none; }
192
+ .pascal-callout-range { cursor:default; }
193
+ .pascal-callout-range > span { font-variant-numeric:tabular-nums; }
194
+ .pascal-callout-range input { width:96px; accent-color:var(--callout-ink); }
195
+ @media (max-width:760px) { .pascal-callout-copy strong, .pascal-callout-detail { max-width:160px; } .pascal-callout-copy strong { font-size:14px; } }
196
+ @media (prefers-reduced-motion: reduce) { .pascal-callout, .pascal-callout-leader { transition:none; } }
197
+ `;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Keeps the daylight room system in step with the scene: rebuilds rooms, portals and lamps
3
+ * after edits (debounced; uniforms and textures only, no recompiles), and every frame feeds it
4
+ * the live level heights, the camera, lamp switches and door openness.
5
+ */
6
+ export declare function useDaylightRooms(): void;
7
+ /** Whether a scene edit touched anything the rooms are built from (anything but furniture). Exported for tests. */
8
+ export declare function roomInputsChanged(next: Readonly<Record<string, {
9
+ type: string;
10
+ } | undefined>>, previous: Readonly<Record<string, {
11
+ type: string;
12
+ } | undefined>>): boolean;
13
+ //# sourceMappingURL=use-daylight-rooms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-daylight-rooms.d.ts","sourceRoot":"","sources":["../../../src/components/viewer/use-daylight-rooms.ts"],"names":[],"mappings":"AAoCA;;;;GAIG;AACH,wBAAgB,gBAAgB,SAuF/B;AAuCD,mHAAmH;AACnH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC,EAC5D,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC,GAC/D,OAAO,CAcT"}
@@ -0,0 +1,236 @@
1
+ 'use client';
2
+ import { sceneRegistry, useInteractive, useScene } from '@pascal-app/core';
3
+ import { useFrame, useThree } from '@react-three/fiber';
4
+ import { useEffect, useRef } from 'react';
5
+ import { Box3, Vector3 } from 'three';
6
+ import { bakedRoomScene, feedLamps, lampFeeds, liveDoorOpenness, liveLevelObjects, liveRoomScene, syncLampEmitters, } from '../../lib/daylight/room-scene';
7
+ import { daylightRooms } from '../../lib/daylight/rooms';
8
+ import useViewer from '../../store/use-viewer';
9
+ /** Seconds between scene-change checks, and the quiet time before a rebuild. */
10
+ const CHECK_INTERVAL = 0.5;
11
+ const REBUILD_DELAY = 0.4;
12
+ /**
13
+ * Furniture: what the rooms are built from (walls, slabs, ceilings, roofs, doors, windows,
14
+ * zones) never includes it, so moving or placing it doesn't rebuild them (a rebuild casts
15
+ * thousands of rays). A lamp among it is followed by its light's position instead.
16
+ */
17
+ const FURNITURE_TYPES = new Set([
18
+ 'item',
19
+ 'procedural-item',
20
+ 'imported-mesh',
21
+ 'cabinet',
22
+ 'cabinet-module',
23
+ 'shelf',
24
+ ]);
25
+ const LAMP_POSITION_STEP = 0.05;
26
+ /**
27
+ * Keeps the daylight room system in step with the scene: rebuilds rooms, portals and lamps
28
+ * after edits (debounced; uniforms and textures only, no recompiles), and every frame feeds it
29
+ * the live level heights, the camera, lamp switches and door openness.
30
+ */
31
+ export function useDaylightRooms() {
32
+ const scene = useThree((s) => s.scene);
33
+ const nodesVersion = useRef(0);
34
+ const state = useRef({
35
+ signature: '',
36
+ pendingSince: -1,
37
+ sinceCheck: CHECK_INTERVAL,
38
+ live: true,
39
+ bakedRoot: null,
40
+ levelObjects: [],
41
+ });
42
+ useEffect(() => useScene.subscribe((next, previous) => {
43
+ if (next.nodes !== previous.nodes && roomInputsChanged(next.nodes, previous.nodes))
44
+ nodesVersion.current++;
45
+ }), []);
46
+ useFrame(({ camera }, delta) => {
47
+ const s = state.current;
48
+ const lampDefault = useInteractive.getState().lampDefault;
49
+ s.sinceCheck += delta;
50
+ if (s.sinceCheck >= CHECK_INTERVAL) {
51
+ s.sinceCheck = 0;
52
+ // Items can swap their materials (edits, loads): keep the lamps' own emitters installed.
53
+ syncLampEmitters();
54
+ const live = (sceneRegistry.byType.zone?.size ?? 0) > 0;
55
+ const baked = live ? null : findBakedRoot(scene);
56
+ const feedKeys = feedSignature();
57
+ const signature = live
58
+ ? `live|${roomObjectsSignature()}|${nodesVersion.current}|${useViewer.getState().geometryRevision}|${feedKeys}`
59
+ : `baked|${baked?.uuid ?? ''}|${baked?.children.length ?? 0}|${feedKeys}`;
60
+ if (signature !== s.signature) {
61
+ s.signature = signature;
62
+ s.pendingSince = 0;
63
+ s.live = live;
64
+ s.bakedRoot = baked;
65
+ }
66
+ }
67
+ if (s.pendingSince >= 0) {
68
+ s.pendingSince += delta;
69
+ if (s.pendingSince >= REBUILD_DELAY) {
70
+ s.pendingSince = -1;
71
+ const input = s.live
72
+ ? liveRoomScene(lampDefault)
73
+ : s.bakedRoot
74
+ ? bakedRoomScene(s.bakedRoot, lampDefault)
75
+ : null;
76
+ daylightRooms.build(input ?? {
77
+ bounds: emptyBounds,
78
+ levelY: [0],
79
+ zones: [],
80
+ covers: [],
81
+ walls: [],
82
+ openings: [],
83
+ lamps: feedLamps(),
84
+ virtualLampsOn: lampDefault,
85
+ });
86
+ s.levelObjects = s.live ? liveLevelObjects() : bakedLevels(s.bakedRoot);
87
+ flagGlassMaterials(scene);
88
+ syncLampEmitters();
89
+ }
90
+ }
91
+ // Live level heights (stacked / exploded motion) and the camera, in assembled space.
92
+ const offsets = s.levelObjects.map((object, index) => object.getWorldPosition(scratch).y - (daylightRooms.levelY[index] ?? 0));
93
+ daylightRooms.setLevelOffsets(offsets);
94
+ const focused = focusedLevelIndex(s.levelObjects);
95
+ daylightRooms.levelShown = s.levelObjects.map((object, index) => (focused < 0 || index <= focused) && shownInScene(object));
96
+ daylightRooms.cameraY.value = camera.position.y - (offsets[0] ?? 0);
97
+ daylightRooms.focusedLevel.value = focused;
98
+ // Lamp switches (fed lamps by key; virtual lamps follow the time-of-day default) and doors.
99
+ const lit = litFeedKeys();
100
+ if (daylightRooms.setLampStates((lamp) => (lamp.itemId ? lit.has(lamp.itemId) : lampDefault)))
101
+ syncLampEmitters();
102
+ if (s.live)
103
+ daylightRooms.updateDoors(liveDoorOpenness);
104
+ });
105
+ }
106
+ const emptyBounds = new Box3();
107
+ const scratch = new Vector3();
108
+ /**
109
+ * Glass is a slot on the mesh, but shaders compile per material (shared by every pane): mark
110
+ * the material itself so the tuned glass applies whichever pane compiles it first.
111
+ */
112
+ function flagGlassMaterials(scene) {
113
+ scene.traverse((object) => {
114
+ const mesh = object;
115
+ if (!mesh.isMesh || mesh.userData.slotId !== 'glass')
116
+ return;
117
+ for (const material of Array.isArray(mesh.material) ? mesh.material : [mesh.material]) {
118
+ if (!material || material.userData.isGlass)
119
+ continue;
120
+ material.userData.isGlass = true;
121
+ material.needsUpdate = true;
122
+ }
123
+ });
124
+ }
125
+ const feedPosition = new Vector3();
126
+ /** The lamps fed to the rooms and where they stand (a moved lamp, or its host, rebuilds). */
127
+ function feedSignature() {
128
+ let keys = '';
129
+ for (const feed of lampFeeds) {
130
+ for (const light of feed.lights()) {
131
+ keys += `${light.key}`;
132
+ if (light.getWorldPosition(feedPosition)) {
133
+ const q = (v) => Math.round(v / LAMP_POSITION_STEP);
134
+ keys += `@${q(feedPosition.x)},${q(feedPosition.y)},${q(feedPosition.z)}`;
135
+ }
136
+ keys += ';';
137
+ }
138
+ }
139
+ return keys;
140
+ }
141
+ /** Whether a scene edit touched anything the rooms are built from (anything but furniture). Exported for tests. */
142
+ export function roomInputsChanged(next, previous) {
143
+ for (const id in next) {
144
+ const node = next[id];
145
+ const before = previous[id];
146
+ if (node === before || FURNITURE_TYPES.has((node ?? before)?.type ?? ''))
147
+ continue;
148
+ // A level (or any container) whose child list alone changed: what joined or left it shows up
149
+ // as its own change, so furniture re-parenting under it doesn't rebuild the rooms.
150
+ if (node && before && onlyChildrenDiffer(node, before))
151
+ continue;
152
+ return true;
153
+ }
154
+ for (const id in previous) {
155
+ if (!(id in next) && !FURNITURE_TYPES.has(previous[id]?.type ?? ''))
156
+ return true;
157
+ }
158
+ return false;
159
+ }
160
+ function onlyChildrenDiffer(a, b) {
161
+ const x = a;
162
+ const y = b;
163
+ for (const key in x)
164
+ if (key !== 'children' && x[key] !== y[key])
165
+ return false;
166
+ for (const key in y)
167
+ if (key !== 'children' && !(key in x))
168
+ return false;
169
+ return true;
170
+ }
171
+ /** The registered objects the rooms are built from: changes when one mounts, unmounts or is replaced. */
172
+ function roomObjectsSignature() {
173
+ let count = 0;
174
+ let ids = 0;
175
+ for (const [type, set] of Object.entries(sceneRegistry.byType)) {
176
+ if (FURNITURE_TYPES.has(type))
177
+ continue;
178
+ for (const id of set) {
179
+ const object = sceneRegistry.nodes.get(id);
180
+ count++;
181
+ if (object)
182
+ ids += object.id;
183
+ }
184
+ }
185
+ return `${count}:${ids}`;
186
+ }
187
+ function litFeedKeys() {
188
+ const lit = new Set();
189
+ for (const feed of lampFeeds)
190
+ for (const light of feed.lights())
191
+ if (feed.intensity(light) > 0)
192
+ lit.add(light.key);
193
+ return lit;
194
+ }
195
+ /** The baked artifact's root (the first object carrying export identities), if any. */
196
+ function findBakedRoot(scene) {
197
+ let found = null;
198
+ scene.traverse((object) => {
199
+ if (found)
200
+ return;
201
+ const kind = object.userData.kind;
202
+ if (kind === 'site' || kind === 'building' || kind === 'level')
203
+ found = object.parent ?? object;
204
+ });
205
+ return found;
206
+ }
207
+ /** Visible itself and through every ancestor (hidden levels are switched off on their group). */
208
+ function shownInScene(object) {
209
+ for (let x = object; x; x = x.parent)
210
+ if (!x.visible)
211
+ return false;
212
+ return true;
213
+ }
214
+ function bakedLevels(root) {
215
+ if (!root)
216
+ return [];
217
+ const levels = [];
218
+ root.traverse((object) => {
219
+ if (object.userData.kind === 'level')
220
+ levels.push(object);
221
+ });
222
+ return levels.sort((a, b) => a.position.y - b.position.y);
223
+ }
224
+ /**
225
+ * The level whose rooms open to the sky because the levels above it are hidden (solo level, or
226
+ * levels above the selection hidden) — the enhanced viewer's "focus level". −1 otherwise.
227
+ */
228
+ function focusedLevelIndex(levelObjects) {
229
+ const viewer = useViewer.getState();
230
+ const hidesAbove = viewer.levelMode === 'solo' || viewer.hideLevelsAboveSelection;
231
+ const levelId = viewer.selection.levelId;
232
+ if (!hidesAbove || !levelId)
233
+ return -1;
234
+ const object = sceneRegistry.nodes.get(levelId);
235
+ return object ? levelObjects.indexOf(object) : -1;
236
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-camera.d.ts","sourceRoot":"","sources":["../../../src/components/viewer/viewer-camera.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAOnC,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,cAWxF;AAcD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO;;;EAExD;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,sBAAsB,IAAI,IAAI,CAAA;CAAE,EACrE,WAAW,EAAE,OAAO,QAMrB;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB,IAAI,IAAI,CAAA;CAC/B,cASA;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,WAEnF;AAED,eAAO,MAAM,YAAY,oBAA6B;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,gCAqB9E,CAAA"}
1
+ {"version":3,"file":"viewer-camera.d.ts","sourceRoot":"","sources":["../../../src/components/viewer/viewer-camera.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAYnC,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,cAWxF;AAcD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO;;;EAExD;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,sBAAsB,IAAI,IAAI,CAAA;CAAE,EACrE,WAAW,EAAE,OAAO,QAMrB;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB,IAAI,IAAI,CAAA;CAC/B,cASA;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,WAEnF;AAED,eAAO,MAAM,YAAY,oBAA6B;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,gCA4B9E,CAAA"}
@@ -2,9 +2,13 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  import { OrthographicCamera, PerspectiveCamera } from '@react-three/drei';
3
3
  import { useThree } from '@react-three/fiber';
4
4
  import { useEffect } from 'react';
5
+ import { isDaylightAtmosphere } from '../../lib/daylight/look';
5
6
  import { GRID_LAYER, OVERLAY_LAYER, ZONE_LAYER } from '../../lib/layers';
6
7
  import useViewer from '../../store/use-viewer';
8
+ import { useSceneAtmosphere } from './scene-atmosphere';
7
9
  import { useSceneGroundReplacement } from './scene-ground-replacement';
10
+ /** Far plane of the daylight look (its ground fades into the sky by 2.6 km). */
11
+ const DAYLIGHT_FAR = 6000;
8
12
  const IMMERSIVE_XR_VISIBLE_LAYERS = [OVERLAY_LAYER, ZONE_LAYER, GRID_LAYER];
9
13
  export function enableImmersiveXRViewLayers(cameraLayers, raycasterLayers) {
10
14
  const cameraMask = cameraLayers.mask;
@@ -53,6 +57,13 @@ export function viewerUsesPerspectiveCamera(cameraMode, immersiveXR) {
53
57
  export const ViewerCamera = ({ immersiveXR = false }) => {
54
58
  const cameraMode = useViewer((state) => state.cameraMode);
55
59
  const clipping = viewerCameraClipping(immersiveXR);
56
- const far = useSceneGroundReplacement() ? 20_000 : clipping.far;
60
+ const groundReplaced = useSceneGroundReplacement();
61
+ // The daylight look's ground runs to the horizon: see it out to where it meets the sky.
62
+ const daylight = isDaylightAtmosphere(useSceneAtmosphere());
63
+ const far = groundReplaced
64
+ ? 20_000
65
+ : daylight
66
+ ? Math.max(clipping.far, DAYLIGHT_FAR)
67
+ : clipping.far;
57
68
  return (_jsxs(_Fragment, { children: [viewerUsesPerspectiveCamera(cameraMode, immersiveXR) ? (_jsx(PerspectiveCamera, { far: far, fov: 50, makeDefault: true, near: clipping.near, position: [10, 10, 10] })) : (_jsx(OrthographicCamera, { far: 1000, makeDefault: true, near: -1000, position: [10, 10, 10], zoom: 20 })), _jsx(ImmersiveXRViewLayers, { enabled: immersiveXR })] }));
58
69
  };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export type { SurfaceRole } from '@pascal-app/core';
2
2
  export { ErrorBoundary } from './components/error-boundary';
3
3
  export { NodeRenderer } from './components/renderers/node-renderer';
4
+ export { ParametricNodeRenderer } from './components/renderers/parametric-node-renderer';
4
5
  export { default as Viewer, pendingSceneBuildCount, type ViewerHandle, type ViewerImmersiveSession, } from './components/viewer';
5
6
  export { type BVHEcctrlApi, default as BVHEcctrl, type MovementInput, } from './components/viewer/bvh-ecctrl';
7
+ export { DroneController, type DroneControllerProps, } from './components/viewer/drone-controller';
6
8
  export { buildGlbInteractiveItems, GlbInteractive, type GlbInteractiveItem, } from './components/viewer/glb-interactive';
7
9
  export { buildGlbReferenceNodes, buildGlbReplaceNodes, } from './components/viewer/glb-reference-nodes';
8
10
  export { type GlbPickEvent, GlbScene, type GlbWalkthrough, resolveGlbPick, } from './components/viewer/glb-scene';
@@ -12,6 +14,7 @@ export { DEFAULT_HOVER_STYLES, SSGI_PARAMS, } from './components/viewer/post-pro
12
14
  export { SceneAtmosphere, type SceneAtmosphereSource, useSceneAtmosphere, } from './components/viewer/scene-atmosphere';
13
15
  export { SceneEnvironment } from './components/viewer/scene-environment';
14
16
  export { claimSceneGround, SceneGroundReplacement, useSceneGroundReplacement, } from './components/viewer/scene-ground-replacement';
17
+ export { type CalloutAction, type CalloutText, SelectionCallout, } from './components/viewer/selection-callout';
15
18
  export { applyWalkthroughCameraClipping } from './components/viewer/viewer-camera';
16
19
  export { isViewerPresentationTextureBorrowed, markViewerPresentationTextureBorrowed, registerViewerPresentation, type ViewerPresentationConfiguration, type ViewerPresentationContribution, type ViewerPresentationExportContext, type ViewerPresentationStaticExport, ViewerPresentations, viewerPresentationRegistry, } from './components/viewer/viewer-presentations';
17
20
  export { useAssetUrl } from './hooks/use-asset-url';
@@ -22,9 +25,16 @@ export { ASSETS_CDN_URL, resolveAssetUrl, resolveCdnUrl } from './lib/asset-url'
22
25
  export { backdropColors, backdropGradient, deepSkyColor, horizonHazeColor } from './lib/backdrop';
23
26
  export { applyWorldScaleBoxUVs } from './lib/box-uv';
24
27
  export { ADDITION, Brush, computeGeometryBoundsTree, csgEvaluator, csgGeometry, csgMaterials, Evaluator, ensureRenderableGeometryAttributes, INTERSECTION, prepareBrushForCSG, SUBTRACTION, } from './lib/csg-utils';
28
+ export { createDaylightGroundMaterial, DAYLIGHT_GROUND, DAYLIGHT_PARCEL, daylightGroundColor, } from './lib/daylight/ground';
29
+ export { type LatLng, type LocationSource, requestDeviceLocation, resolveLocation, } from './lib/daylight/location';
30
+ export { type DaylightAtmosphereSource, isDaylightAtmosphere } from './lib/daylight/look';
31
+ export { WEATHER_COVER, type Weather } from './lib/daylight/sky';
32
+ export { presetInstant, type SkyPhase, skyPhase, solarClockInstant, solarClockMinutes, solarPosition, sunEvents, type TimeOfDay, } from './lib/daylight/solar';
25
33
  export type { DisplayState } from './lib/display-state';
26
34
  export { disposeObject3DResources } from './lib/dispose-object3d';
35
+ export { createDroneInput, DRONE_SLOW_MULTIPLIER, type DroneInput, type DroneLook, seedDroneLook, stepDroneFlight, turnFirstPersonLook, } from './lib/drone-flight';
27
36
  export type { EdgeMode } from './lib/edge-style';
37
+ export { markHighlight, tintEmissive } from './lib/editor-highlight';
28
38
  export { BLOCK_MASONRY, concreteMaterial, type Masonry, masonryMaterial, STRUCTURE_COLORS, } from './lib/foundation-materials';
29
39
  export { preserveGltfUnlit } from './lib/gltf-unlit';
30
40
  export { PERF_OVERLAY_ENABLED } from './lib/gpu-perf';
@@ -52,17 +62,17 @@ export { createSceneSupportHeightSampler } from './lib/scene-support-height';
52
62
  export { getSceneTheme, SCENE_THEME_IDS, SCENE_THEMES, type SceneTheme, } from './lib/scene-themes';
53
63
  export { type HiddenReason, hideFromScene, showInScene, temporarilyShowPresentation, temporarilyShowShadowOnly, } from './lib/scene-visibility';
54
64
  export { SCRIPTED_MODEL_FLAG } from './lib/scripted-opening';
55
- export { SITE_FOUNDATION, SITE_GROUND, type SiteGroundRole, siteFoundation, siteGround, siteSurfaces, temporarilyVeilGround, } from './lib/site-surfaces';
65
+ export { SITE_GROUND, type SiteGroundRole, siteGround, siteSurfaces, temporarilyVeilGround, } from './lib/site-surfaces';
56
66
  export { createPlainSnapshotPipeline, createSnapshotPipeline, SNAPSHOT_MAX_EDGE, SNAPSHOT_MIME, SNAPSHOT_QUALITY, type SnapshotCaptureMode, type SnapshotCaptureResult, type SnapshotCropRegion, type SnapshotPipeline, type SnapshotSize, type StudioBackdrop, THUMBNAIL_HEIGHT, THUMBNAIL_WIDTH, } from './lib/snapshot-pipeline';
57
67
  export { buildTerrainPerimeterFillGeometry, type TerrainPerimeterPoint, } from './lib/terrain-perimeter-fill';
58
68
  export { getPascalTextureRef, type PascalTextureColorSpace, type PascalTextureMap, type PascalTextureRef, stampPascalTextureRef, textureMapForSlot, } from './lib/texture-reference';
59
69
  export { packNormalToRGB, unpackRGBToNormal } from './lib/tsl-compat';
60
- export { AMBIANCE_SECONDS, ambianceNow, ambianceTarget, easeAmbiance, eyeUnderTheGround, FADE_SECONDS, groundHoleOpenNode, groundHoleOpenNow, stepAmbianceProgress, temporarilyWithoutAmbiance, UNDERGROUND_RIM, UNDERGROUND_RING, undergroundAmbianceNode, } from './lib/underground-ambiance';
70
+ export { AMBIANCE_SECONDS, ambianceNow, ambianceTarget, easeAmbiance, eyeUnderTheGround, FADE_SECONDS, groundHoleOpenNode, groundHoleOpenNow, stepAmbianceProgress, temporarilyWithoutAmbiance, UNDERGROUND_RIM, undergroundAmbianceNode, } from './lib/underground-ambiance';
61
71
  export { createZoneShape, createZoneWallGeometry } from './lib/zone-geometry';
62
72
  export type { LightSource } from './store/use-item-light-pool';
63
73
  export { catalogLightSource, useItemLightPool } from './store/use-item-light-pool';
64
- export { anyGroundVeiled, applyCountryUnitDefault, DEFAULT_UNDERGROUND_LOOK, default as useViewer, type GroundMode, groundVeiled, type MetricNotation, siteGroundShown, type UndergroundEdge, type UndergroundLook, type UndergroundTransition, type WallMode, } from './store/use-viewer';
65
- export { CEILING_REGION_MESH, type CeilingRegionMaterial, CeilingSystem, } from './systems/ceiling/ceiling-system';
74
+ export { applyCountryUnitDefault, DEFAULT_UNDERGROUND_LOOK, default as useViewer, type GroundMode, groundVeiled, type MetricNotation, type RenderQuality, type RenderQualityChoice, siteGroundShown, type UndergroundEdge, type UndergroundLook, type UndergroundTransition, type WalkthroughMovement, type WallMode, } from './store/use-viewer';
75
+ export { CEILING_CAP_MESH, CEILING_REGION_MESH, type CeilingRegionMaterial, CeilingSystem, } from './systems/ceiling/ceiling-system';
66
76
  export { createColumnBoxGeometry, createColumnCylinderGeometry, createColumnSphereGeometry, createColumnTorusGeometry, } from './systems/column/column-geometry';
67
77
  export { ConstructionReveal, type ConstructionRevealDriver, type ConstructionRevealLevel, type ConstructionRevealOptions, emitRevealPuff, getRetractTurn, getRevealPlanSpeed, getRevealPlanState, getRevealTurn, isNodeRevealing, isRevealAssembling, type RetractResult, type RevealCompleteEvent, type RevealEvent, type RevealFinaleEvent, type RevealGroupEvent, type RevealNodeStartEvent, type RevealPhaseEvent, type RevealPlanState, type RevealPreroll, type RevealRetractEvent, retractNodes, revealChangedNodeIds, revealClockMs, revealMotionOff, seatLiftedNow, setRevealPreroll, startConstructionReveal, subscribeRevealAssembling, subscribeRevealEvents, subscribeRevealPhases, subscribeRevealTicks, useRevealPending, useRevealPlanActive, useRevealWaiting, } from './systems/construction-reveal/construction-reveal';
68
78
  export { DoorAnimationSystem } from './systems/door/door-animation-system';
@@ -71,13 +81,16 @@ export { ElevatorInteractionSystem } from './systems/elevator/elevator-interacti
71
81
  export { FloorElevationSystem } from './systems/floor-elevation/floor-elevation-system';
72
82
  export { GuideSystem } from './systems/guide/guide-system';
73
83
  export { InteractiveSystem } from './systems/interactive/interactive-system';
84
+ export { openingSettled, proceduralSettled } from './systems/interactive/opening-settled';
74
85
  export { type ScriptedClipActions, ScriptedClips, useClipActions, } from './systems/interactive/scripted-clips';
75
86
  export { ItemSystem } from './systems/item/item-system';
76
87
  export { ItemLightSystem } from './systems/item-light/item-light-system';
88
+ export { itemLightsForCapture } from './systems/item-light/pooled-lights';
77
89
  export { LevelSystem } from './systems/level/level-system';
78
90
  export { EXPLODED_GAP, getLevelPresentationY, presentLevelsForCapture, snapLevelsToTruePositions, } from './systems/level/level-utils';
79
- export { getRoofMaterialArray, levelWallCladdingRef } from './systems/roof/roof-materials';
80
- export { clipDirectRoofGeometryAgainstSiblings, clipGeometryBySegmentTrim, generateRoofSegmentGeometry, getPendingRoofMergeCount, getRoofOuterSurfaceFrameAtPoint, getRoofSegmentBrushes, mapRoofGroupMaterialIndex, ROOF_MATERIAL_SLOT_COUNT, type RoofGeometryAdapter, RoofSystem, remapRoofShellFaces, roofCsgDummyMats, type SurfaceFrame, } from './systems/roof/roof-system';
91
+ export { ROOF_GABLE_LEFT_MATERIAL_INDEX, ROOF_GABLE_RIGHT_MATERIAL_INDEX, ROOF_HEEL_MATERIAL_INDEX, ROOF_RENDER_MATERIAL_COUNT, } from './systems/roof/roof-material-slots';
92
+ export { getRoofMaterialArray, levelWallCladdingRef, levelWallFaceRef, } from './systems/roof/roof-materials';
93
+ export { clipDirectRoofGeometryAgainstSiblings, clipGeometryBySegmentTrim, generateRoofSegmentGeometry, getPendingRoofMergeCount, getRoofOuterSurfaceFrameAtPoint, getRoofSegmentBrushes, mapRoofGroupMaterialIndex, ROOF_MATERIAL_SLOT_COUNT, type RoofGeometryAdapter, RoofSystem, remapRoofShellFaces, roofCsgDummyMats, type SurfaceFrame, splitRoofWallBandFaces, } from './systems/roof/roof-system';
81
94
  export { ScanSystem } from './systems/scan/scan-system';
82
95
  export { generateSlabGeometry } from './systems/slab/slab-system';
83
96
  export { getStairBodyMaterials, getStairRailingMaterial, getStraightStairSegmentBodyMaterials, type StairBodyMaterials, } from './systems/stair/stair-materials';
@@ -88,7 +101,8 @@ export { WallCutoutCache, type WallCutoutViewerState, type WallCutoutViewerStore
88
101
  export { getWallFaceBaseAt, getWallFinishData, getWallFinishRefs, type WallFinishGeometryData, } from './systems/wall/wall-finish-data';
89
102
  export { getMaterialsForWall, getVisibleWallMaterials, type WallMaterialOverride, type WallMaterials, type WallMaterialsResolver, } from './systems/wall/wall-materials';
90
103
  export { drainRebuiltWalls, generateExtrudedWall, getPendingWallRebuildCount, isWallInitialBuildActive, runWallBuildFrame, type WallGeometryAdapter, type WallGeometryAdapterContext, WallSystem, } from './systems/wall/wall-system';
91
- export { poseWindowMovingParts, WindowAnimationSystem, } from './systems/window/window-animation-system';
104
+ export { advanceWindowAnimations, poseWindowMovingParts, WindowAnimationSystem, } from './systems/window/window-animation-system';
105
+ export { restoreWindowRollerShutter } from './systems/window/window-roller-shutter';
92
106
  export { buildWindowPreviewMesh, WindowSystem } from './systems/window/window-system';
93
107
  export { ZoneSystem } from './systems/zone/zone-system';
94
108
  export { useImmersiveXRPresentation } from './xr/presentation-context';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}