@pascal-app/viewer 1.0.6 → 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.
- package/dist/components/viewer/daylight-atmosphere.d.ts +9 -0
- package/dist/components/viewer/daylight-atmosphere.d.ts.map +1 -0
- package/dist/components/viewer/daylight-atmosphere.js +315 -0
- package/dist/components/viewer/drone-controller.d.ts +15 -0
- package/dist/components/viewer/drone-controller.d.ts.map +1 -0
- package/dist/components/viewer/drone-controller.js +194 -0
- package/dist/components/viewer/glb-interactive.d.ts +4 -18
- package/dist/components/viewer/glb-interactive.d.ts.map +1 -1
- package/dist/components/viewer/glb-interactive.js +32 -268
- package/dist/components/viewer/glb-scene-motion.d.ts +8 -0
- package/dist/components/viewer/glb-scene-motion.d.ts.map +1 -0
- package/dist/components/viewer/glb-scene-motion.js +57 -0
- package/dist/components/viewer/glb-scene.d.ts +3 -1
- package/dist/components/viewer/glb-scene.d.ts.map +1 -1
- package/dist/components/viewer/glb-scene.js +289 -49
- package/dist/components/viewer/glb-selection-callout.d.ts +17 -0
- package/dist/components/viewer/glb-selection-callout.d.ts.map +1 -0
- package/dist/components/viewer/glb-selection-callout.js +54 -0
- package/dist/components/viewer/glb-walkthrough-controller.d.ts.map +1 -1
- package/dist/components/viewer/glb-walkthrough-controller.js +6 -3
- package/dist/components/viewer/index.d.ts +5 -0
- package/dist/components/viewer/index.d.ts.map +1 -1
- package/dist/components/viewer/index.js +30 -6
- package/dist/components/viewer/lights.d.ts.map +1 -1
- package/dist/components/viewer/lights.js +192 -5
- package/dist/components/viewer/post-processing.d.ts.map +1 -1
- package/dist/components/viewer/post-processing.js +150 -94
- package/dist/components/viewer/scene-environment.js +4 -5
- package/dist/components/viewer/selection-callout.d.ts +51 -0
- package/dist/components/viewer/selection-callout.d.ts.map +1 -0
- package/dist/components/viewer/selection-callout.js +197 -0
- package/dist/components/viewer/use-daylight-rooms.d.ts +13 -0
- package/dist/components/viewer/use-daylight-rooms.d.ts.map +1 -0
- package/dist/components/viewer/use-daylight-rooms.js +236 -0
- package/dist/components/viewer/viewer-camera.d.ts.map +1 -1
- package/dist/components/viewer/viewer-camera.js +12 -1
- package/dist/index.d.ts +21 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -7
- package/dist/lib/daylight/ground.d.ts +21 -0
- package/dist/lib/daylight/ground.d.ts.map +1 -0
- package/dist/lib/daylight/ground.js +53 -0
- package/dist/lib/daylight/location.d.ts +32 -0
- package/dist/lib/daylight/location.d.ts.map +1 -0
- package/dist/lib/daylight/location.js +74 -0
- package/dist/lib/daylight/look.d.ts +33 -0
- package/dist/lib/daylight/look.d.ts.map +1 -0
- package/dist/lib/daylight/look.js +13 -0
- package/dist/lib/daylight/material-hooks.d.ts +2 -0
- package/dist/lib/daylight/material-hooks.d.ts.map +1 -0
- package/dist/lib/daylight/material-hooks.js +150 -0
- package/dist/lib/daylight/room-context.d.ts +12 -0
- package/dist/lib/daylight/room-context.d.ts.map +1 -0
- package/dist/lib/daylight/room-context.js +53 -0
- package/dist/lib/daylight/room-scene.d.ts +54 -0
- package/dist/lib/daylight/room-scene.d.ts.map +1 -0
- package/dist/lib/daylight/room-scene.js +356 -0
- package/dist/lib/daylight/rooms.d.ts +262 -0
- package/dist/lib/daylight/rooms.d.ts.map +1 -0
- package/dist/lib/daylight/rooms.js +1223 -0
- package/dist/lib/daylight/runtime.d.ts +33 -0
- package/dist/lib/daylight/runtime.d.ts.map +1 -0
- package/dist/lib/daylight/runtime.js +42 -0
- package/dist/lib/daylight/sky.d.ts +26 -0
- package/dist/lib/daylight/sky.d.ts.map +1 -0
- package/dist/lib/daylight/sky.js +217 -0
- package/dist/lib/daylight/solar.d.ts +46 -0
- package/dist/lib/daylight/solar.d.ts.map +1 -0
- package/dist/lib/daylight/solar.js +156 -0
- package/dist/lib/device-tier.d.ts +29 -0
- package/dist/lib/device-tier.d.ts.map +1 -0
- package/dist/lib/device-tier.js +71 -0
- package/dist/lib/dispose-object3d.d.ts.map +1 -1
- package/dist/lib/dispose-object3d.js +4 -2
- package/dist/lib/drone-flight.d.ts +44 -0
- package/dist/lib/drone-flight.d.ts.map +1 -0
- package/dist/lib/drone-flight.js +121 -0
- package/dist/lib/editor-highlight.d.ts +16 -0
- package/dist/lib/editor-highlight.d.ts.map +1 -0
- package/dist/lib/editor-highlight.js +33 -0
- package/dist/lib/foundation-materials.d.ts.map +1 -1
- package/dist/lib/foundation-materials.js +2 -4
- package/dist/lib/glb-merge.d.ts +23 -0
- package/dist/lib/glb-merge.d.ts.map +1 -0
- package/dist/lib/glb-merge.js +184 -0
- package/dist/lib/hardware-geometry.d.ts +21 -0
- package/dist/lib/hardware-geometry.d.ts.map +1 -0
- package/dist/lib/hardware-geometry.js +283 -0
- package/dist/lib/layer-pass.d.ts +2 -0
- package/dist/lib/layer-pass.d.ts.map +1 -1
- package/dist/lib/layer-pass.js +20 -0
- package/dist/lib/materials.d.ts.map +1 -1
- package/dist/lib/materials.js +50 -23
- package/dist/lib/merged-outline-node.d.ts.map +1 -1
- package/dist/lib/merged-outline-node.js +7 -1
- package/dist/lib/occlusion-culler.d.ts +34 -0
- package/dist/lib/occlusion-culler.d.ts.map +1 -0
- package/dist/lib/occlusion-culler.js +698 -0
- package/dist/lib/post-processing-resources.d.ts +4 -0
- package/dist/lib/post-processing-resources.d.ts.map +1 -1
- package/dist/lib/post-processing-resources.js +5 -0
- package/dist/lib/readback-rows.d.ts +14 -0
- package/dist/lib/readback-rows.d.ts.map +1 -0
- package/dist/lib/readback-rows.js +31 -0
- package/dist/lib/reveal-pose.d.ts.map +1 -1
- package/dist/lib/reveal-pose.js +3 -0
- package/dist/lib/scene-matrices.d.ts +12 -0
- package/dist/lib/scene-matrices.d.ts.map +1 -0
- package/dist/lib/scene-matrices.js +287 -0
- package/dist/lib/scene-pass-mrt.d.ts +5 -2
- package/dist/lib/scene-pass-mrt.d.ts.map +1 -1
- package/dist/lib/scene-pass-mrt.js +7 -2
- package/dist/lib/scene-themes.d.ts +0 -2
- package/dist/lib/scene-themes.d.ts.map +1 -1
- package/dist/lib/scene-themes.js +0 -2
- package/dist/lib/scene-visibility.d.ts +2 -0
- package/dist/lib/scene-visibility.d.ts.map +1 -1
- package/dist/lib/scene-visibility.js +12 -3
- package/dist/lib/site-surfaces.d.ts +1 -8
- package/dist/lib/site-surfaces.d.ts.map +1 -1
- package/dist/lib/site-surfaces.js +0 -19
- package/dist/lib/snapshot-pipeline.d.ts.map +1 -1
- package/dist/lib/snapshot-pipeline.js +24 -40
- package/dist/lib/texture-reference.d.ts.map +1 -1
- package/dist/lib/texture-reference.js +10 -8
- package/dist/lib/underground-ambiance.d.ts +0 -2
- package/dist/lib/underground-ambiance.d.ts.map +1 -1
- package/dist/lib/underground-ambiance.js +0 -2
- package/dist/store/use-item-light-pool.d.ts +3 -6
- package/dist/store/use-item-light-pool.d.ts.map +1 -1
- package/dist/store/use-item-light-pool.js +12 -0
- package/dist/store/use-viewer.d.ts +72 -15
- package/dist/store/use-viewer.d.ts.map +1 -1
- package/dist/store/use-viewer.js +103 -18
- package/dist/systems/ceiling/ceiling-system.d.ts +5 -0
- package/dist/systems/ceiling/ceiling-system.d.ts.map +1 -1
- package/dist/systems/ceiling/ceiling-system.js +11 -1
- package/dist/systems/door/door-system.d.ts.map +1 -1
- package/dist/systems/door/door-system.js +501 -145
- package/dist/systems/door/leaf-profile.d.ts +11 -0
- package/dist/systems/door/leaf-profile.d.ts.map +1 -0
- package/dist/systems/door/leaf-profile.js +140 -0
- package/dist/systems/interactive/callout-actions.d.ts +72 -0
- package/dist/systems/interactive/callout-actions.d.ts.map +1 -0
- package/dist/systems/interactive/callout-actions.js +212 -0
- package/dist/systems/interactive/interactive-system.d.ts +5 -1
- package/dist/systems/interactive/interactive-system.d.ts.map +1 -1
- package/dist/systems/interactive/interactive-system.js +44 -121
- package/dist/systems/interactive/opening-settled.d.ts +16 -0
- package/dist/systems/interactive/opening-settled.d.ts.map +1 -0
- package/dist/systems/interactive/opening-settled.js +53 -0
- package/dist/systems/item-light/item-light-system.d.ts.map +1 -1
- package/dist/systems/item-light/item-light-system.js +22 -214
- package/dist/systems/item-light/pooled-lights.d.ts +70 -0
- package/dist/systems/item-light/pooled-lights.d.ts.map +1 -0
- package/dist/systems/item-light/pooled-lights.js +449 -0
- package/dist/systems/level/level-system.d.ts.map +1 -1
- package/dist/systems/level/level-system.js +19 -1
- package/dist/systems/roof/roof-material-slots.d.ts +14 -0
- package/dist/systems/roof/roof-material-slots.d.ts.map +1 -0
- package/dist/systems/roof/roof-material-slots.js +13 -0
- package/dist/systems/roof/roof-materials.d.ts +25 -2
- package/dist/systems/roof/roof-materials.d.ts.map +1 -1
- package/dist/systems/roof/roof-materials.js +85 -26
- package/dist/systems/roof/roof-system.d.ts +34 -1
- package/dist/systems/roof/roof-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-system.js +477 -105
- package/dist/systems/wall/opening-casing-geometry.d.ts +14 -0
- package/dist/systems/wall/opening-casing-geometry.d.ts.map +1 -0
- package/dist/systems/wall/opening-casing-geometry.js +102 -0
- package/dist/systems/wall/opening-cutout-geometry.d.ts +9 -0
- package/dist/systems/wall/opening-cutout-geometry.d.ts.map +1 -1
- package/dist/systems/wall/opening-cutout-geometry.js +7 -3
- package/dist/systems/wall/wall-materials.d.ts.map +1 -1
- package/dist/systems/wall/wall-materials.js +28 -35
- package/dist/systems/wall/wall-system.d.ts.map +1 -1
- package/dist/systems/wall/wall-system.js +34 -19
- package/dist/systems/wall/wall-t-junctions.d.ts +15 -0
- package/dist/systems/wall/wall-t-junctions.d.ts.map +1 -0
- package/dist/systems/wall/wall-t-junctions.js +149 -0
- package/dist/systems/window/window-animation-system.d.ts +3 -12
- package/dist/systems/window/window-animation-system.d.ts.map +1 -1
- package/dist/systems/window/window-animation-system.js +37 -122
- package/dist/systems/window/window-pose.d.ts +31 -0
- package/dist/systems/window/window-pose.d.ts.map +1 -0
- package/dist/systems/window/window-pose.js +152 -0
- package/dist/systems/window/window-roller-shutter.d.ts +8 -0
- package/dist/systems/window/window-roller-shutter.d.ts.map +1 -0
- package/dist/systems/window/window-roller-shutter.js +64 -0
- package/dist/systems/window/window-system.d.ts +2 -11
- package/dist/systems/window/window-system.d.ts.map +1 -1
- package/dist/systems/window/window-system.js +470 -303
- package/package.json +6 -6
- package/dist/systems/interactive/control-widget.d.ts +0 -10
- package/dist/systems/interactive/control-widget.d.ts.map +0 -1
- package/dist/systems/interactive/control-widget.js +0 -35
- package/dist/systems/interactive/procedural-controls.d.ts +0 -13
- package/dist/systems/interactive/procedural-controls.d.ts.map +0 -1
- package/dist/systems/interactive/procedural-controls.js +0 -17
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Color, Matrix4, SRGBColorSpace, UnsignedByteType } from 'three';
|
|
1
|
+
import { Color, Matrix4, SRGBColorSpace, UnsignedByteType, Vector3, } from 'three';
|
|
2
2
|
import { ssgi } from 'three/addons/tsl/display/SSGINode.js';
|
|
3
3
|
import { denoise } from 'three/examples/jsm/tsl/display/DenoiseNode.js';
|
|
4
4
|
import { fxaa } from 'three/examples/jsm/tsl/display/FXAANode.js';
|
|
@@ -6,8 +6,11 @@ import { clamp, convertToTexture, diffuseColor, float, mix, normalView, output,
|
|
|
6
6
|
import { PassNode, RenderPipeline, RenderTarget, } from 'three/webgpu';
|
|
7
7
|
import { GRADE_PARAMS, SSGI_PARAMS } from '../components/viewer/post-processing';
|
|
8
8
|
import { backdropColors, backdropGradient, flatBackdropOutput } from './backdrop';
|
|
9
|
+
import { DAYLIGHT_INK_BACKDROP, daylightGradeRgb, isDaylightAtmosphere } from './daylight/look';
|
|
10
|
+
import { daylightRoomContext } from './daylight/room-context';
|
|
9
11
|
import { edgeColorFor, edgeOpacityScaleFor } from './edge-style';
|
|
10
12
|
import { createEdgeDepthSampler, inkedEdges } from './ink-edges';
|
|
13
|
+
import { readbackRows } from './readback-rows';
|
|
11
14
|
import { sceneLightingMask, scenePassMrt } from './scene-pass-mrt';
|
|
12
15
|
import { packNormalToRGB, unpackRGBToNormal } from './tsl-compat';
|
|
13
16
|
export const THUMBNAIL_WIDTH = 1920;
|
|
@@ -71,6 +74,8 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
71
74
|
const inkColorUniform = uniform(new Color('#1a1d24'));
|
|
72
75
|
const inkOpacityUniform = uniform(0.5);
|
|
73
76
|
const inkOpacityScaleUniform = uniform(1);
|
|
77
|
+
const daylight = isDaylightAtmosphere(atmosphere);
|
|
78
|
+
const whiteBalanceUniform = uniform(new Vector3(1, 1, 1));
|
|
74
79
|
// The scene pass owns MRT and its transparent clear, including when nested
|
|
75
80
|
// inside FXAA's intermediate render target.
|
|
76
81
|
const scenePass = new SnapshotScenePass('color', scene, camera);
|
|
@@ -80,6 +85,9 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
80
85
|
normal: packNormalToRGB(normalView),
|
|
81
86
|
lighting: sceneLightingMask(),
|
|
82
87
|
}));
|
|
88
|
+
// The daylight look's room light (windows, lamps, bounce, night spill), as in the viewport.
|
|
89
|
+
if (daylight)
|
|
90
|
+
scenePass.contextNode = daylightRoomContext();
|
|
83
91
|
const scenePassColor = scenePass.getTextureNode('output');
|
|
84
92
|
const scenePassDepth = scenePass.getTextureNode('depth');
|
|
85
93
|
const sampleEdgeDepth = createEdgeDepthSampler(scenePassDepth, camera);
|
|
@@ -128,7 +136,10 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
128
136
|
opacity: float(inkOpacityUniform).mul(inkOpacityScaleUniform),
|
|
129
137
|
});
|
|
130
138
|
const ungradedSceneRgb = mix(aoRgb, inkedRgb, inkMixUniform);
|
|
131
|
-
|
|
139
|
+
// The built-in daylight look grades with its own white balance, as the viewport does.
|
|
140
|
+
const gradeRgb = daylight
|
|
141
|
+
? (rgb) => daylightGradeRgb(rgb, whiteBalanceUniform)
|
|
142
|
+
: (rgb) => saturation(rgb.div(0.18).pow(vec3(GRADE_PARAMS.contrast)).mul(0.18), GRADE_PARAMS.saturation);
|
|
132
143
|
const sceneRgb = mix(ungradedSceneRgb, gradeRgb(ungradedSceneRgb), gradeMixUniform);
|
|
133
144
|
// Per-pixel world ray from the capture camera → sky gradient above the
|
|
134
145
|
// horizon (dir.y = 0), flat background below — mirrors the viewport
|
|
@@ -194,8 +205,9 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
194
205
|
const backdrop = backdropColors(sceneTheme);
|
|
195
206
|
inkMixUniform.value = edges === 'off' ? 0 : 1;
|
|
196
207
|
inkOpacityUniform.value = edges === 'strong' ? 1 : 0.5;
|
|
197
|
-
|
|
198
|
-
|
|
208
|
+
const inkBackdrop = daylight ? DAYLIGHT_INK_BACKDROP : sceneTheme.background;
|
|
209
|
+
inkColorUniform.value.set(edgeColorFor(inkBackdrop));
|
|
210
|
+
inkOpacityScaleUniform.value = edgeOpacityScaleFor(inkBackdrop);
|
|
199
211
|
bgColorUniform.value.set(sceneTheme.background);
|
|
200
212
|
bgSkyUniform.value.set(backdrop.sky);
|
|
201
213
|
bgSkyDeepUniform.value.set(backdrop.skyDeep);
|
|
@@ -203,7 +215,10 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
203
215
|
bgMixUniform.value = transparent ? 0 : 1;
|
|
204
216
|
flatBgMixUniform.value =
|
|
205
217
|
!transparent && !atmosphere && sceneTheme.backgroundSky === null ? 1 : 0;
|
|
206
|
-
gradeMixUniform.value =
|
|
218
|
+
gradeMixUniform.value =
|
|
219
|
+
(grade || daylight) && sceneTheme.postprocessing?.colorGrading !== false ? 1 : 0;
|
|
220
|
+
if (isDaylightAtmosphere(atmosphere))
|
|
221
|
+
whiteBalanceUniform.value.copy(atmosphere.whiteBalance);
|
|
207
222
|
aoMixUniform.value = sceneTheme.postprocessing?.ambientOcclusion === false ? 0 : 1;
|
|
208
223
|
// The capture camera never joins the scene graph, so its matrixWorld
|
|
209
224
|
// is only refreshed by the render itself — too late for the backdrop
|
|
@@ -253,25 +268,14 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
253
268
|
}
|
|
254
269
|
}
|
|
255
270
|
/**
|
|
256
|
-
* The frame in `renderTarget`, read back and encoded:
|
|
257
|
-
*
|
|
258
|
-
*
|
|
271
|
+
* The frame in `renderTarget`, read back and encoded: rows made tight and
|
|
272
|
+
* top-down (`readbackRows`), then cut to the capture mode — the viewport as
|
|
273
|
+
* is, an area, or the standard aspect.
|
|
259
274
|
* Shared by the post-processed pipeline and the plain one.
|
|
260
275
|
*/
|
|
261
276
|
async function encodeCapture(renderer, renderTarget, captureWidth, captureHeight, { captureMode, cropRegion, standardW, standardH, mime, }) {
|
|
262
277
|
const encoding = mime ? { type: mime } : { type: SNAPSHOT_MIME, quality: SNAPSHOT_QUALITY };
|
|
263
|
-
// Read pixels from the RT asynchronously.
|
|
264
|
-
// WebGPU copyTextureToBuffer aligns each row to 256 bytes, so we must
|
|
265
|
-
// depad the rows before constructing ImageData.
|
|
266
278
|
const pixels = (await renderer.readRenderTargetPixelsAsync(renderTarget, 0, 0, captureWidth, captureHeight));
|
|
267
|
-
const actualBytesPerRow = captureWidth * 4;
|
|
268
|
-
const tightTotal = actualBytesPerRow * captureHeight;
|
|
269
|
-
const paddedBytesPerRow = Math.ceil(actualBytesPerRow / 256) * 256;
|
|
270
|
-
// Two readback shapes to handle:
|
|
271
|
-
// - WebGPU (`copyTextureToBuffer`): top-down + 256-byte row padding
|
|
272
|
-
// when width*4 isn't already a multiple of 256.
|
|
273
|
-
// - WebGL2 fallback (iOS Chrome, etc.): tightly-packed but bottom-up
|
|
274
|
-
// (OpenGL framebuffer convention).
|
|
275
279
|
// `isWebGPURenderer` lies — it stays true even when the renderer
|
|
276
280
|
// falls back to the WebGL backend. Inspect the actual backend
|
|
277
281
|
// instead (presence of a GPU device, or backend constructor name).
|
|
@@ -279,27 +283,7 @@ async function encodeCapture(renderer, renderTarget, captureWidth, captureHeight
|
|
|
279
283
|
const isWebGPU = !!backend?.device ||
|
|
280
284
|
backend?.isWebGPUBackend === true ||
|
|
281
285
|
backend?.constructor?.name === 'WebGPUBackend';
|
|
282
|
-
|
|
283
|
-
if (isWebGPU) {
|
|
284
|
-
// WebGPU: depad rows if needed; orientation is already top-down.
|
|
285
|
-
if (paddedBytesPerRow === actualBytesPerRow) {
|
|
286
|
-
tightPixels = new Uint8ClampedArray(pixels.buffer, pixels.byteOffset, Math.min(pixels.byteLength, tightTotal));
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
tightPixels = new Uint8ClampedArray(tightTotal);
|
|
290
|
-
for (let row = 0; row < captureHeight; row++) {
|
|
291
|
-
tightPixels.set(pixels.subarray(row * paddedBytesPerRow, row * paddedBytesPerRow + actualBytesPerRow), row * actualBytesPerRow);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
// WebGL2: tight buffer in bottom-up order — flip rows.
|
|
297
|
-
tightPixels = new Uint8ClampedArray(tightTotal);
|
|
298
|
-
for (let row = 0; row < captureHeight; row++) {
|
|
299
|
-
const srcStart = (captureHeight - 1 - row) * actualBytesPerRow;
|
|
300
|
-
tightPixels.set(pixels.subarray(srcStart, srcStart + actualBytesPerRow), row * actualBytesPerRow);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
286
|
+
const tightPixels = readbackRows(pixels, captureWidth, captureHeight, isWebGPU);
|
|
303
287
|
const imageData = new ImageData(tightPixels, captureWidth, captureHeight);
|
|
304
288
|
const srcCanvas = new OffscreenCanvas(captureWidth, captureHeight);
|
|
305
289
|
srcCanvas.getContext('2d').putImageData(imageData, 0, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture-reference.d.ts","sourceRoot":"","sources":["../../src/lib/texture-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAGnC,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,WAAW,GACX,QAAQ,GACR,OAAO,CAAA;AAEX,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEvD,KAAK,oBAAoB,GAAG;IAC1B,CAAC,EAAE,CAAC,CAAA;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,gBAAgB,CAAA;IACrB,UAAU,EAAE,uBAAuB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,CAAA;CAC5D,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"texture-reference.d.ts","sourceRoot":"","sources":["../../src/lib/texture-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAGnC,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,WAAW,GACX,QAAQ,GACR,OAAO,CAAA;AAEX,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEvD,KAAK,oBAAoB,GAAG;IAC1B,CAAC,EAAE,CAAC,CAAA;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,gBAAgB,CAAA;IACrB,UAAU,EAAE,uBAAuB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,CAAA;CAC5D,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAuDN,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgBhE;AAMD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,KAAK,EACD;IACE;wEACoE;IACpE,IAAI,EAAE,UAAU,GAAG,eAAe,CAAA;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,GACJ,gBAAgB,GAAG,IAAI,CA6BzB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAmCnF"}
|
|
@@ -4,18 +4,20 @@ const STORAGE_BUCKET_BY_KIND = {
|
|
|
4
4
|
'item-glb': 'items',
|
|
5
5
|
'project-asset': 'project-assets',
|
|
6
6
|
};
|
|
7
|
+
// Keyed by the URL it was read from, so a texture stamped before the env is set never pins a
|
|
8
|
+
// null origin for the rest of the process.
|
|
7
9
|
let cachedStorageOrigin;
|
|
8
10
|
function pascalStorageOrigin() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
|
|
12
|
+
if (cachedStorageOrigin && cachedStorageOrigin.url === url)
|
|
13
|
+
return cachedStorageOrigin.origin;
|
|
14
|
+
let origin = null;
|
|
11
15
|
try {
|
|
12
|
-
|
|
13
|
-
cachedStorageOrigin = url ? new URL(url).origin : null;
|
|
16
|
+
origin = url ? new URL(url).origin : null;
|
|
14
17
|
}
|
|
15
|
-
catch {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return cachedStorageOrigin;
|
|
18
|
+
catch { }
|
|
19
|
+
cachedStorageOrigin = { url, origin };
|
|
20
|
+
return origin;
|
|
19
21
|
}
|
|
20
22
|
/** Static catalog materials ship in the app's public dir and resolve through
|
|
21
23
|
* the assets CDN (`/material/{category}/{slug}/{slug}_{map}_{size}.ktx2`) —
|
|
@@ -19,8 +19,6 @@ export declare const AMBIANCE_SECONDS = 0.7;
|
|
|
19
19
|
export declare const FADE_SECONDS = 0.4;
|
|
20
20
|
/** The thin rim along the cut of the hole in the ground, from above. */
|
|
21
21
|
export declare const UNDERGROUND_RIM: "#3c3c3c";
|
|
22
|
-
/** The grade ring, where the ground meets the level below grade: a light rim in the dark mode. */
|
|
23
|
-
export declare const UNDERGROUND_RING: "#b4b4b4";
|
|
24
22
|
/** The corners the vignette closes in to. */
|
|
25
23
|
export declare const UNDERGROUND_VIGNETTE: "#0c0c0c";
|
|
26
24
|
/** The sky's ambient and hemisphere light, as a share of what the theme gives. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"underground-ambiance.d.ts","sourceRoot":"","sources":["../../src/lib/underground-ambiance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAkB5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIrD;;;;;;;;;;;;GAYG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,+EAA+E;AAC/E,eAAO,MAAM,YAAY,MAAM,CAAA;AAa/B,wEAAwE;AACxE,eAAO,MAAM,eAAe,WAA0B,CAAA;AACtD,
|
|
1
|
+
{"version":3,"file":"underground-ambiance.d.ts","sourceRoot":"","sources":["../../src/lib/underground-ambiance.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,8 +32,6 @@ const BACKDROP = {
|
|
|
32
32
|
};
|
|
33
33
|
/** The thin rim along the cut of the hole in the ground, from above. */
|
|
34
34
|
export const UNDERGROUND_RIM = UNDERGROUND_PALETTE.rim;
|
|
35
|
-
/** The grade ring, where the ground meets the level below grade: a light rim in the dark mode. */
|
|
36
|
-
export const UNDERGROUND_RING = UNDERGROUND_PALETTE.ring;
|
|
37
35
|
/** The corners the vignette closes in to. */
|
|
38
36
|
export const UNDERGROUND_VIGNETTE = UNDERGROUND_PALETTE.vignette;
|
|
39
37
|
/** The sky's ambient and hemisphere light, as a share of what the theme gives. */
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { type AnyNodeId, type Interactive, type LightEffect } from '@pascal-app/core';
|
|
2
|
-
import type
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { type Object3D } from 'three';
|
|
3
|
+
import type { PooledLight } from '../systems/item-light/pooled-lights';
|
|
4
|
+
export type LightSource = PooledLight & {
|
|
5
5
|
nodeId: AnyNodeId;
|
|
6
|
-
color: string;
|
|
7
|
-
distance: number;
|
|
8
|
-
getWorldPosition: (out: Vector3) => boolean;
|
|
9
6
|
getIntensity: () => number;
|
|
10
7
|
isEligible: () => boolean;
|
|
11
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-item-light-pool.d.ts","sourceRoot":"","sources":["../../src/store/use-item-light-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAIjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-item-light-pool.d.ts","sourceRoot":"","sources":["../../src/store/use-item-light-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAIjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,OAAO,CAAA;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAEtE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,MAAM,EAAE,SAAS,CAAA;IACjB,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,OAAO,CAAA;CAC1B,CAAA;AAID,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,EACxB,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7C,WAAW,CAiDb;AAED,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACvC,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC5B,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1D,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,gBAAgB,iFAkB1B,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { sceneRegistry, useInteractive, } from '@pascal-app/core';
|
|
2
|
+
import { Quaternion } from 'three';
|
|
2
3
|
import { create } from 'zustand';
|
|
4
|
+
const _quaternion = new Quaternion();
|
|
3
5
|
export function catalogLightSource(key, nodeId, effect, interactive, localScale) {
|
|
4
6
|
const toggleIndex = interactive.controls.findIndex((control) => control.kind === 'toggle');
|
|
5
7
|
const sliderIndex = interactive.controls.findIndex((control) => control.kind === 'slider');
|
|
@@ -9,6 +11,16 @@ export function catalogLightSource(key, nodeId, effect, interactive, localScale)
|
|
|
9
11
|
nodeId,
|
|
10
12
|
color: effect.color,
|
|
11
13
|
distance: effect.distance ?? 0,
|
|
14
|
+
spot: effect.spot,
|
|
15
|
+
shadows: effect.shadows,
|
|
16
|
+
glow: effect.glow,
|
|
17
|
+
peak: effect.intensityRange[1],
|
|
18
|
+
getWorldDirection: (out) => {
|
|
19
|
+
const object = sceneRegistry.nodes.get(nodeId);
|
|
20
|
+
out.set(...(effect.spot?.direction ?? [0, -1, 0])).normalize();
|
|
21
|
+
if (object)
|
|
22
|
+
out.applyQuaternion(object.getWorldQuaternion(_quaternion));
|
|
23
|
+
},
|
|
12
24
|
getWorldPosition: (out) => {
|
|
13
25
|
const object = sceneRegistry.nodes.get(nodeId);
|
|
14
26
|
if (!object)
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import type { AnyNode, BaseNode, BuildingNode, GroundBox, LevelGradeStanding, LevelNode, SitePresentation, UnitNode, ZoneNode } from '@pascal-app/core';
|
|
2
2
|
import type { Object3D } from 'three';
|
|
3
|
+
import type { LatLng } from '../lib/daylight/location';
|
|
4
|
+
import type { Weather } from '../lib/daylight/sky';
|
|
5
|
+
import type { TimeOfDay } from '../lib/daylight/solar';
|
|
3
6
|
import type { EdgeMode } from '../lib/edge-style';
|
|
4
7
|
import type { ColorPreset, RenderShading } from '../lib/materials';
|
|
5
8
|
import { type SceneTheme } from '../lib/scene-themes';
|
|
6
9
|
export type RenderContext = 'editor' | 'viewer';
|
|
10
|
+
export type RenderQuality = 'low' | 'medium' | 'high';
|
|
11
|
+
/** A quality tier, or `auto`: the tier the device was detected for. */
|
|
12
|
+
export type RenderQualityChoice = RenderQuality | 'auto';
|
|
7
13
|
export type MetricNotation = 'meters' | 'millimeters';
|
|
8
14
|
export type WallMode = 'up' | 'cutaway' | 'down' | 'translucent';
|
|
15
|
+
export type WalkthroughMovement = 'walk' | 'drone';
|
|
9
16
|
type SelectionPath = {
|
|
10
17
|
buildingId: BuildingNode['id'] | null;
|
|
11
18
|
levelId: LevelNode['id'] | null;
|
|
@@ -160,13 +167,6 @@ type ViewerState = {
|
|
|
160
167
|
* viewer's underground ambiance from the camera; never persisted.
|
|
161
168
|
*/
|
|
162
169
|
eyeUnderGround: boolean;
|
|
163
|
-
/**
|
|
164
|
-
* Levels whose foundation a plugin is drawing under the ground right now (a framing plugin pours
|
|
165
|
-
* the real footing and stem from the building's record). The generic foundation derived from the
|
|
166
|
-
* walls is not drawn under these levels, so nothing is drawn twice. Written by that plugin while
|
|
167
|
-
* its meshes are mounted, empty otherwise; never persisted.
|
|
168
|
-
*/
|
|
169
|
-
pluginFoundationLevelIds: readonly string[];
|
|
170
170
|
/**
|
|
171
171
|
* The world is turned, or turning, to earth (the underground ambiance's factor is above 0).
|
|
172
172
|
* Its factor itself eases every frame and lives with the shaders, not here; this flips only at
|
|
@@ -192,8 +192,56 @@ type ViewerState = {
|
|
|
192
192
|
setShowMeasurements: (show: boolean) => void;
|
|
193
193
|
showZones: boolean;
|
|
194
194
|
setShowZones: (show: boolean) => void;
|
|
195
|
+
/**
|
|
196
|
+
* Ceilings also draw their upper face, so they read as solid from above: a roof seen over closed
|
|
197
|
+
* rooms. Off, a camera above looks into the rooms, the ceiling showing only from below. The
|
|
198
|
+
* editor drives it from its Ceilings display setting; not persisted.
|
|
199
|
+
*/
|
|
200
|
+
showCeilingTops: boolean;
|
|
201
|
+
setShowCeilingTops: (show: boolean) => void;
|
|
202
|
+
/**
|
|
203
|
+
* The house as its frame: a framing plugin draws the studs, plates, headers, joists and rafters of
|
|
204
|
+
* every storey and hides the shell over them; the foundation stays. Not persisted.
|
|
205
|
+
*/
|
|
206
|
+
framingOnly: boolean;
|
|
207
|
+
setFramingOnly: (on: boolean) => void;
|
|
208
|
+
/**
|
|
209
|
+
* The frame in the finished house: a framing plugin draws the studs, joists and rafters with the
|
|
210
|
+
* shell left as it is, and the roof decks draw open where their rafters are, so the frame shows
|
|
211
|
+
* where it is exposed (the attic) and stays hidden inside the walls and the finished ceilings.
|
|
212
|
+
* Framing only wins while both are on. Not persisted.
|
|
213
|
+
*/
|
|
214
|
+
framingShown: boolean;
|
|
215
|
+
setFramingShown: (on: boolean) => void;
|
|
195
216
|
transparentBackground: boolean;
|
|
196
217
|
setTransparentBackground: (transparent: boolean) => void;
|
|
218
|
+
/** Colored appearance: time-of-day preset driving the built-in daylight sun and sky. */
|
|
219
|
+
timeOfDay: TimeOfDay;
|
|
220
|
+
/** A preset: clears any exact time and the live clock. */
|
|
221
|
+
setTimeOfDay: (timeOfDay: TimeOfDay) => void;
|
|
222
|
+
/** An exact time (minutes after local mean midnight at the site); null follows `timeOfDay`. */
|
|
223
|
+
timeOfDayMinutes: number | null;
|
|
224
|
+
setTimeOfDayMinutes: (minutes: number | null) => void;
|
|
225
|
+
/** The sky follows the clock: now, live. */
|
|
226
|
+
skyLive: boolean;
|
|
227
|
+
setSkyLive: (live: boolean) => void;
|
|
228
|
+
/** Colored appearance: cloud cover preset. */
|
|
229
|
+
weather: Weather;
|
|
230
|
+
setWeather: (weather: Weather) => void;
|
|
231
|
+
/** A device position the user chose to share; used when the site has no geocoded point. */
|
|
232
|
+
deviceLocation: LatLng | null;
|
|
233
|
+
setDeviceLocation: (location: LatLng | null) => void;
|
|
234
|
+
/** Post-processing tier of the colored appearance (bloom/AO/AA/shadow resolution) in effect:
|
|
235
|
+
* the user's pick, or on `auto` the tier detected for the device. */
|
|
236
|
+
renderQuality: RenderQuality;
|
|
237
|
+
/** What the user picked (persisted); `auto` follows `detectedRenderQuality`. */
|
|
238
|
+
renderQualityChoice: RenderQualityChoice;
|
|
239
|
+
/** The tier the device's capabilities call for (GPU, memory, form factor); never persisted. */
|
|
240
|
+
detectedRenderQuality: RenderQuality | null;
|
|
241
|
+
/** The device renders on the CPU (software adapter or rasterizer); never persisted. */
|
|
242
|
+
softwareRenderer: boolean;
|
|
243
|
+
setRenderQuality: (quality: RenderQualityChoice) => void;
|
|
244
|
+
setDetectedRenderQuality: (quality: RenderQuality, softwareRenderer?: boolean) => void;
|
|
197
245
|
inkOpacity: number | null;
|
|
198
246
|
setInkOpacity: (opacity: number | null) => void;
|
|
199
247
|
projectId: string | null;
|
|
@@ -216,8 +264,13 @@ type ViewerState = {
|
|
|
216
264
|
setExportScene: (fn: ((format?: 'glb' | 'usdz' | 'stl' | 'obj') => Promise<void>) | null) => void;
|
|
217
265
|
debugColors: boolean;
|
|
218
266
|
setDebugColors: (enabled: boolean) => void;
|
|
267
|
+
/** A first-person camera is active (walk or drone): orbit controls and selection stand aside. */
|
|
219
268
|
walkthroughMode: boolean;
|
|
220
269
|
setWalkthroughMode: (mode: boolean) => void;
|
|
270
|
+
/** How the first-person camera moves: on foot (collision, doors) or as a free-flying drone.
|
|
271
|
+
* Back to `walk` whenever the walkthrough ends. */
|
|
272
|
+
walkthroughMovement: WalkthroughMovement;
|
|
273
|
+
setWalkthroughMovement: (movement: WalkthroughMovement) => void;
|
|
221
274
|
/** Pointer lock temporarily released mid-walkthrough (⌘/PrintScreen — OS
|
|
222
275
|
* screenshot needs a movable cursor); clicking the canvas re-locks. */
|
|
223
276
|
walkthroughSuspended: boolean;
|
|
@@ -264,6 +317,12 @@ declare const useViewer: import("zustand").UseBoundStore<Omit<import("zustand").
|
|
|
264
317
|
showMeasurements?: boolean;
|
|
265
318
|
};
|
|
266
319
|
};
|
|
320
|
+
timeOfDay: "blue" | "golden" | "midday" | "night";
|
|
321
|
+
timeOfDayMinutes: number | null;
|
|
322
|
+
skyLive: boolean;
|
|
323
|
+
weather: "clear" | "cloudy" | "fair" | "overcast";
|
|
324
|
+
deviceLocation: LatLng | null;
|
|
325
|
+
renderQuality: RenderQualityChoice;
|
|
267
326
|
}, unknown>>) => void;
|
|
268
327
|
clearStorage: () => void;
|
|
269
328
|
rehydrate: () => Promise<void> | void;
|
|
@@ -291,6 +350,12 @@ declare const useViewer: import("zustand").UseBoundStore<Omit<import("zustand").
|
|
|
291
350
|
showMeasurements?: boolean;
|
|
292
351
|
};
|
|
293
352
|
};
|
|
353
|
+
timeOfDay: "blue" | "golden" | "midday" | "night";
|
|
354
|
+
timeOfDayMinutes: number | null;
|
|
355
|
+
skyLive: boolean;
|
|
356
|
+
weather: "clear" | "cloudy" | "fair" | "overcast";
|
|
357
|
+
deviceLocation: LatLng | null;
|
|
358
|
+
renderQuality: RenderQualityChoice;
|
|
294
359
|
}, unknown>>;
|
|
295
360
|
};
|
|
296
361
|
}>;
|
|
@@ -325,14 +390,6 @@ export declare function groundVeiled(state: {
|
|
|
325
390
|
gradeStanding?: LevelGradeStanding;
|
|
326
391
|
walkthroughMode?: boolean;
|
|
327
392
|
}): boolean;
|
|
328
|
-
/** Whether any ground is veiled now, wholesale or through the eye's window. */
|
|
329
|
-
export declare function anyGroundVeiled(state: {
|
|
330
|
-
belowGrade: boolean;
|
|
331
|
-
groundMode: GroundMode;
|
|
332
|
-
gradeStanding?: LevelGradeStanding;
|
|
333
|
-
groundWindowVeiled: boolean;
|
|
334
|
-
walkthroughMode?: boolean;
|
|
335
|
-
}): boolean;
|
|
336
393
|
/**
|
|
337
394
|
* Whether the site draws its own ground. `showGround: false` says other geometry supplies the
|
|
338
395
|
* ground (an authored landscape), which stands on a level above a basement; while a level below
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-viewer.d.ts","sourceRoot":"","sources":["../../src/store/use-viewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAIrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAC/C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAA;AACrD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"use-viewer.d.ts","sourceRoot":"","sources":["../../src/store/use-viewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAIrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAC/C,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;AACrD,uEAAuE;AACvE,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,MAAM,CAAA;AACxD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAA;AACrD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAA;AAChE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAA;AAElD,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACrC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC/B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAA;CAC9B,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,eAAe,EAAE,QAAQ,EAAE,CAAA;IAC3B,cAAc,EAAE,QAAQ,EAAE,CAAA;CAC3B,CAAA;AAED,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AACxE,KAAK,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;CACjE,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,aAAa,CAAA;IACxB,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACpC,cAAc,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;IACnD,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAA;IACpC,qBAAqB,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAA;IACtD;+EAC2E;IAC3E,mBAAmB,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAA;IACrC,sBAAsB,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAA;IACvD;8FAC0F;IAC1F,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAA;IAC5B,wBAAwB;IACxB,aAAa,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,IAAI,CAAA;IACrD,kBAAkB,EAAE,MAAM,CAAA;IAC1B,qBAAqB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAChD,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;IAEjE,UAAU,EAAE,aAAa,GAAG,cAAc,CAAA;IAC1C,aAAa,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,KAAK,IAAI,CAAA;IAE7D,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,UAAU,CAAA;IAC3B,YAAY,EAAE,YAAY,CAAA;IAC1B,mBAAmB,CAAC,EAAE,gBAAgB,CAAA;IACtC,sBAAsB,EAAE,CAAC,YAAY,EAAE,gBAAgB,GAAG,SAAS,KAAK,IAAI,CAAA;IAC5E,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,qBAAqB,EAAE,aAAa,CAAA;IACpC,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC;oCACgC;IAChC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAE3C,aAAa,EAAE,aAAa,CAAA;IAC5B,gBAAgB,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;IAElF;;;;qBAIiB;IACjB,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAEtC;;;4EAGwE;IACxE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5D,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAE9C,uFAAuF;IACvF,YAAY,EAAE,OAAO,CAAA;IACrB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAEzC,OAAO,EAAE,aAAa,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;IAC/D,UAAU,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IAE5C,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAExC,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IAE7C,KAAK,EAAE,QAAQ,CAAA;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IAEnC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAEtC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,KAAK,IAAI,CAAA;IAC9C,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAA;IACrD;;sDAEkD;IAClD,YAAY,EAAE,OAAO,CAAA;IAErB,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAA;IACrD,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAA;IACxE;;;;OAIG;IACH,wBAAwB,EAAE,OAAO,CAAA;IACjC;;;;OAIG;IACH,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC;;;;;OAKG;IACH,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,aAAa,EAAE,kBAAkB,CAAA;IACjC;;;;OAIG;IACH,eAAe,EAAE,SAAS,GAAG,IAAI,CAAA;IACjC,yFAAyF;IACzF,kBAAkB,EAAE,OAAO,CAAA;IAC3B,kFAAkF;IAClF,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IACzC;;;;;OAKG;IACH,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;;;OAKG;IACH,aAAa,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAA;IACvB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAA;IACvB;;;;OAIG;IACH,eAAe,EAAE,eAAe,CAAA;IAChC,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IAE5D,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;IAErC,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAErC,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAEtC,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAEpC,gBAAgB,EAAE,OAAO,CAAA;IACzB,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAO5C,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAErC;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAA;IACxB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAA;IACrB,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;IAEtC,qBAAqB,EAAE,OAAO,CAAA;IAC9B,wBAAwB,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAA;IAExD,wFAAwF;IACxF,SAAS,EAAE,SAAS,CAAA;IACpB,0DAA0D;IAC1D,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;IAC5C,+FAA+F;IAC/F,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACrD,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACnC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,2FAA2F;IAC3F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACpD;yEACqE;IACrE,aAAa,EAAE,aAAa,CAAA;IAC5B,gFAAgF;IAChF,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,+FAA+F;IAC/F,qBAAqB,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3C,uFAAuF;IACvF,gBAAgB,EAAE,OAAO,CAAA;IACzB,gBAAgB,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAA;IACxD,wBAAwB,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAGtF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAE/C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACzC,kBAAkB,EAAE,MAAM,CACxB,MAAM,EACN;QACE,IAAI,CAAC,EAAE,SAAS,CAAA;QAChB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAC3B,CACF,CAAA;IAGD,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IACvD,cAAc,EAAE,MAAM,IAAI,CAAA;IAE1B,QAAQ,EAAE,QAAQ,CAAA;IAClB;6DACyD;IACzD,gBAAgB,EAAE,MAAM,CAAA;IACxB,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAGhC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IAChF,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;IAEjG,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAE1C,iGAAiG;IACjG,eAAe,EAAE,OAAO,CAAA;IACxB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C;wDACoD;IACpD,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAE/D;4EACwE;IACxE,oBAAoB,EAAE,OAAO,CAAA;IAC7B,uBAAuB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IAErD,cAAc,EAAE,OAAO,CAAA;IACvB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAE9C;;;;;;;;;OASG;IACH,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;CAC9C,CAAA;AAgOD,qGAAqG;AACrG,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAA;AA8CD,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;2BAvUF,SAAS;gCACJ,OAAO;iCACN,OAAO;+BACT,OAAO;uCACC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAJnB,SAAS;gCACJ,OAAO;iCACN,OAAO;+BACT,OAAO;uCACC,OAAO;;;;;;;;;;;EAmrB/B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAA;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,CAAA;AAE7E,oHAAoH;AACpH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,CAAA;AAEpD,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,qBAAqB,CAAA;CAAE,CAAA;AAE1F;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,CAAC,EAAE,kBAAkB,CAAA;IAClC,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,GAAG,OAAO,CAOV;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9B,KAAK,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAET;AAED;;;;cAIc;AACd,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,QAMzE;eAEc,SAAS"}
|