@terraware/web-components 4.2.21 → 4.2.22-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,13 @@
1
1
  import React from 'react';
2
+ import { SplatFormat } from './splatFormat';
2
3
  export interface SplatModelProps {
3
4
  splatSrc: string;
5
+ /**
6
+ * Splat format of `splatSrc`. Inferred from the URL when omitted, which covers bundled `.sog`,
7
+ * unbundled sog (`meta.json`), streamed LOD sog (`lod-meta.json`) and `.ply` sources. Set this
8
+ * explicitly when the URL hides the filename.
9
+ */
10
+ splatFormat?: SplatFormat;
4
11
  rotation?: [number, number, number];
5
12
  cropAabbMin?: [number, number, number];
6
13
  cropAabbMax?: [number, number, number];
@@ -10,6 +17,6 @@ export interface SplatModelProps {
10
17
  revealRain?: boolean;
11
18
  onError?: (error: Error) => void;
12
19
  }
13
- declare const _default: React.MemoExoticComponent<({ splatSrc, rotation, cropAabbMin, cropAabbMax, cropEdgeScaleFactor, cropFade, cropFadeDistance, revealRain, onError, }: SplatModelProps) => import("react/jsx-runtime").JSX.Element | null>;
20
+ declare const _default: React.MemoExoticComponent<({ splatSrc, splatFormat, rotation, cropAabbMin, cropAabbMax, cropEdgeScaleFactor, cropFade, cropFadeDistance, revealRain, onError, }: SplatModelProps) => import("react/jsx-runtime").JSX.Element | null>;
14
21
  export default _default;
15
22
  //# sourceMappingURL=SplatModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SplatModel.d.ts","sourceRoot":"","sources":["../../../src/components/VirtualWalkthrough/SplatModel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAW/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;4KAYE,eAAe;AAgClB,wBAAgC"}
1
+ {"version":3,"file":"SplatModel.d.ts","sourceRoot":"","sources":["../../../src/components/VirtualWalkthrough/SplatModel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAU/C,OAAO,EAAE,WAAW,EAA0C,MAAM,eAAe,CAAC;AAEpF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;yLAaE,eAAe;AAkClB,wBAAgC"}
@@ -6,9 +6,11 @@ import BlockingSpinner from './BlockingSpinner';
6
6
  import SplatCrop from './SplatCrop';
7
7
  import SplatFadeCrop from './SplatFadeCrop';
8
8
  import SplatRevealRain from './SplatRevealRain';
9
+ import { detectSplatFormat, splatLoaderFilename } from './splatFormat';
9
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
11
  const SplatModel = ({
11
12
  splatSrc,
13
+ splatFormat,
12
14
  rotation,
13
15
  cropAabbMin,
14
16
  cropAabbMax,
@@ -18,14 +20,16 @@ const SplatModel = ({
18
20
  revealRain = false,
19
21
  onError
20
22
  }) => {
21
- // A filename is required for the file props to assist with the asset loading. Otherwise it assumes that the splatSrc is a ply file.
23
+ // The loader selects its parser from this filename rather than from splatSrc, so it has to name the
24
+ // format we are actually loading. See splatFormat.ts.
25
+ const filename = splatLoaderFilename(splatFormat ?? detectSplatFormat(splatSrc));
22
26
  const {
23
27
  asset,
24
28
  loading,
25
29
  error
26
30
  } = useSplat(splatSrc, {
27
31
  file: {
28
- filename: 'model.sog'
32
+ filename
29
33
  }
30
34
  });
31
35
  useEffect(() => {
@@ -1,7 +1,9 @@
1
1
  import { AnnotationProps } from './Annotation';
2
2
  import { SplatControlsStrings } from './SplatControls';
3
+ import { SplatFormat } from './splatFormat';
3
4
  export interface VirtualWalkthroughViewerProps {
4
5
  splatSrc: string;
6
+ splatFormat?: SplatFormat;
5
7
  origin?: [number, number, number];
6
8
  cameraPosition?: [number, number, number];
7
9
  sceneBounds?: {
@@ -24,6 +26,6 @@ export interface VirtualWalkthroughViewerProps {
24
26
  onToggleFullScreen?: () => void;
25
27
  maxImagesPerAnnotation?: number;
26
28
  }
27
- declare const VirtualWalkthroughViewer: ({ splatSrc, origin, cameraPosition, sceneBounds, groundPlane: groundPlaneProp, skyColor, groundColor, averageCameraHeight, scaleFactor, annotations, onSaveAnnotations, strings, editable, showFreeFly, isFullScreen, onToggleFullScreen, maxImagesPerAnnotation, }: VirtualWalkthroughViewerProps) => import("react/jsx-runtime").JSX.Element;
29
+ declare const VirtualWalkthroughViewer: ({ splatSrc, splatFormat, origin, cameraPosition, sceneBounds, groundPlane: groundPlaneProp, skyColor, groundColor, averageCameraHeight, scaleFactor, annotations, onSaveAnnotations, strings, editable, showFreeFly, isFullScreen, onToggleFullScreen, maxImagesPerAnnotation, }: VirtualWalkthroughViewerProps) => import("react/jsx-runtime").JSX.Element;
28
30
  export default VirtualWalkthroughViewer;
29
31
  //# sourceMappingURL=VirtualWalkthroughViewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualWalkthroughViewer.d.ts","sourceRoot":"","sources":["../../../src/components/VirtualWalkthrough/VirtualWalkthroughViewer.tsx"],"names":[],"mappings":"AAYA,OAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAK3D,OAAsB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAUtE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,iBAAiB,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,QAAA,MAAM,wBAAwB,GAAI,qQAkB/B,6BAA6B,4CA2T/B,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"VirtualWalkthroughViewer.d.ts","sourceRoot":"","sources":["../../../src/components/VirtualWalkthrough/VirtualWalkthroughViewer.tsx"],"names":[],"mappings":"AAYA,OAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAK3D,OAAsB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAKtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,iBAAiB,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,QAAA,MAAM,wBAAwB,GAAI,kRAmB/B,6BAA6B,4CAmU/B,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -24,6 +24,7 @@ const DEFAULT_FOCUS_POINT = [0, 0.1, 0];
24
24
  const DEFAULT_POSITION = [1, 0.1, 0];
25
25
  const VirtualWalkthroughViewer = ({
26
26
  splatSrc,
27
+ splatFormat,
27
28
  origin = DEFAULT_FOCUS_POINT,
28
29
  cameraPosition = DEFAULT_POSITION,
29
30
  sceneBounds,
@@ -195,9 +196,10 @@ const VirtualWalkthroughViewer = ({
195
196
  const canSave = useMemo(() => localAnnotations.every(annotation => annotation.title && annotation.title.trim() !== ''), [localAnnotations]);
196
197
  const splatModel = useMemo(() => /*#__PURE__*/_jsx(SplatModel, {
197
198
  splatSrc: splatSrc,
199
+ splatFormat: splatFormat,
198
200
  rotation: [-180, 0, 0],
199
201
  revealRain: isHighPerformance
200
- }, 'splat'), [isHighPerformance, splatSrc]);
202
+ }, 'splat'), [isHighPerformance, splatSrc, splatFormat]);
201
203
  return /*#__PURE__*/_jsxs(_Fragment, {
202
204
  children: [/*#__PURE__*/_jsx(GradientSky, {
203
205
  topColor: skyColor || '#FFFFFF',
@@ -0,0 +1,17 @@
1
+ declare const LOADER_FILENAMES: {
2
+ readonly sog: "model.sog";
3
+ readonly sogUnbundled: "meta.json";
4
+ readonly sogStreamed: "lod-meta.json";
5
+ readonly ply: "model.ply";
6
+ };
7
+ export type SplatFormat = keyof typeof LOADER_FILENAMES;
8
+ /**
9
+ * Format assumed when a URL is too opaque to tell us anything. Kept as the bundled `.sog` archive so
10
+ * that existing extensionless splat URLs keep loading the way they did before the other formats were
11
+ * supported.
12
+ */
13
+ export declare const DEFAULT_SPLAT_FORMAT: SplatFormat;
14
+ export declare const splatLoaderFilename: (format: SplatFormat) => string;
15
+ export declare const detectSplatFormat: (splatSrc: string) => SplatFormat;
16
+ export {};
17
+ //# sourceMappingURL=splatFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splatFormat.d.ts","sourceRoot":"","sources":["../../../src/components/VirtualWalkthrough/splatFormat.ts"],"names":[],"mappings":"AAoBA,QAAA,MAAM,gBAAgB;;;;;CAKZ,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAmB,CAAC;AAEvD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,WAAW,KAAG,MAAkC,CAAC;AAE7F,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,WAkBpD,CAAC"}
@@ -0,0 +1,50 @@
1
+ /*
2
+ * The playcanvas gsplat loader picks its parser from the asset's `filename`, not from the URL it
3
+ * actually downloads, because a splat is frequently served from a signed or extensionless URL. Each
4
+ * supported format therefore maps to a canonical filename whose extension/basename routes the asset
5
+ * to the matching engine parser:
6
+ *
7
+ * model.sog -> SogBundleParser sog packed into a single zip archive
8
+ * meta.json -> SogParser the same sog data left unpacked as separate files
9
+ * lod-meta.json -> GSplatOctreeParser sog with LOD levels, streamed in as the camera moves
10
+ * model.ply -> PlyParser
11
+ *
12
+ * `sog` and `sogUnbundled` are two packagings of one format, not two formats: both parsers build a
13
+ * GSplatSogData/GSplatSogResource and both await every texture before the resource exists. Only
14
+ * `sogStreamed` streams — playcanvas.d.ts on GSplatOctreeResource#numSplats: "Not all of these are
15
+ * resident at runtime: the LOD streaming system selects a subset per node based on view distance and
16
+ * the configured splat budget."
17
+ *
18
+ * Only the filename is faked; the textures an unbundled or streamed sog references are still
19
+ * resolved relative to the real URL, so no rewriting of splatSrc is needed.
20
+ */
21
+ const LOADER_FILENAMES = {
22
+ sog: 'model.sog',
23
+ sogUnbundled: 'meta.json',
24
+ sogStreamed: 'lod-meta.json',
25
+ ply: 'model.ply'
26
+ };
27
+ /**
28
+ * Format assumed when a URL is too opaque to tell us anything. Kept as the bundled `.sog` archive so
29
+ * that existing extensionless splat URLs keep loading the way they did before the other formats were
30
+ * supported.
31
+ */
32
+ export const DEFAULT_SPLAT_FORMAT = 'sog';
33
+ export const splatLoaderFilename = format => LOADER_FILENAMES[format];
34
+ export const detectSplatFormat = splatSrc => {
35
+ const path = splatSrc.split(/[?#]/)[0];
36
+ const basename = path.slice(path.lastIndexOf('/') + 1).toLowerCase();
37
+ if (basename === 'lod-meta.json') {
38
+ return 'sogStreamed';
39
+ }
40
+ if (basename === 'meta.json') {
41
+ return 'sogUnbundled';
42
+ }
43
+ if (basename.endsWith('.ply')) {
44
+ return 'ply';
45
+ }
46
+ if (basename.endsWith('.sog')) {
47
+ return 'sog';
48
+ }
49
+ return DEFAULT_SPLAT_FORMAT;
50
+ };
@@ -0,0 +1,51 @@
1
+ import { detectSplatFormat, splatLoaderFilename } from './splatFormat';
2
+ describe('detectSplatFormat', () => {
3
+ it('detects a bundled .sog archive', () => {
4
+ expect(detectSplatFormat('https://example.com/scenes/7154.sog')).toBe('sog');
5
+ });
6
+ it('detects an unbundled sog meta.json', () => {
7
+ expect(detectSplatFormat('https://example.com/scenes/7154/meta.json')).toBe('sogUnbundled');
8
+ });
9
+ it('detects a streamed LOD sog lod-meta.json', () => {
10
+ expect(detectSplatFormat('https://example.com/scenes/7154/lod-meta.json')).toBe('sogStreamed');
11
+ });
12
+ it('detects a .ply model', () => {
13
+ expect(detectSplatFormat('https://example.com/scenes/7154.ply')).toBe('ply');
14
+ });
15
+ it('ignores query strings on signed urls', () => {
16
+ expect(detectSplatFormat('https://example.com/7154/meta.json?rlkey=abc123&raw=1')).toBe('sogUnbundled');
17
+ });
18
+ it('ignores url fragments', () => {
19
+ expect(detectSplatFormat('https://example.com/7154/lod-meta.json#frag')).toBe('sogStreamed');
20
+ });
21
+ it('is case insensitive', () => {
22
+ expect(detectSplatFormat('https://example.com/7154/Meta.JSON')).toBe('sogUnbundled');
23
+ expect(detectSplatFormat('https://example.com/7154.SOG')).toBe('sog');
24
+ });
25
+ it('handles a bare filename with no directory', () => {
26
+ expect(detectSplatFormat('meta.json')).toBe('sogUnbundled');
27
+ });
28
+ it('does not mistake lod-meta.json for the unbundled format', () => {
29
+ expect(detectSplatFormat('https://example.com/lod-meta.json')).not.toBe('sogUnbundled');
30
+ });
31
+ it('does not treat an arbitrary .json file as a sog manifest', () => {
32
+ expect(detectSplatFormat('https://example.com/scene.json')).toBe('sog');
33
+ });
34
+ it('falls back to the bundled sog format for extensionless urls', () => {
35
+ expect(detectSplatFormat('https://example.com/assets/abc123?raw=1')).toBe('sog');
36
+ });
37
+ });
38
+ describe('splatLoaderFilename', () => {
39
+ it('maps the bundled format to a .sog filename so the loader picks the sog bundle parser', () => {
40
+ expect(splatLoaderFilename('sog')).toBe('model.sog');
41
+ });
42
+ it('maps the unbundled format to meta.json so the loader picks the plain sog parser', () => {
43
+ expect(splatLoaderFilename('sogUnbundled')).toBe('meta.json');
44
+ });
45
+ it('maps the streamed format to the exact basename the octree parser matches on', () => {
46
+ expect(splatLoaderFilename('sogStreamed')).toBe('lod-meta.json');
47
+ });
48
+ it('maps ply to a .ply filename', () => {
49
+ expect(splatLoaderFilename('ply')).toBe('model.ply');
50
+ });
51
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terraware/web-components",
3
- "version": "4.2.21",
3
+ "version": "4.2.22-rc.0",
4
4
  "author": "Terraformation Inc.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -18,6 +18,7 @@ import { TfXrNavigation } from './components/VirtualWalkthrough/TfXrNavigation';
18
18
  import VirtualWalkthroughViewer from './components/VirtualWalkthrough/VirtualWalkthroughViewer';
19
19
  import { BoundaryRingScript, boundaryRingMesh } from './components/VirtualWalkthrough/boundary-ring';
20
20
  import { computeGroundPlane, yOnPlane } from './components/VirtualWalkthrough/groundPlane';
21
+ import { detectSplatFormat, splatLoaderFilename } from './components/VirtualWalkthrough/splatFormat';
21
22
  import { WalkthroughCamera } from './components/VirtualWalkthrough/walkthrough-camera';
22
23
  import { useDevicePerformance } from './hooks/useDevicePerformance';
23
24
  export type { AnnotationProps, AnnotationIconType } from './components/VirtualWalkthrough/Annotation';
@@ -29,6 +30,7 @@ export type { BoundaryRingGeometry, BoundaryRingGeometryParams } from './compone
29
30
  export type { GroundPlane } from './components/VirtualWalkthrough/groundPlane';
30
31
  export type { BoundaryRingProps } from './components/VirtualWalkthrough/BoundaryRing';
31
32
  export type { SplatModelProps } from './components/VirtualWalkthrough/SplatModel';
33
+ export type { SplatFormat } from './components/VirtualWalkthrough/splatFormat';
32
34
  export type { VirtualWalkthroughViewerProps } from './components/VirtualWalkthrough/VirtualWalkthroughViewer';
33
- export { Annotation, AnnotationEditPane, AnnotationPanel, Application, AutoRotator, BlockingSpinner, BoundaryRing, boundaryRingMesh, BoundaryRingScript, CameraInfo, computeGroundPlane, ControlsInfoPane, GradientSky, SplatControls, SplatCrop, SplatFadeCrop, SplatModel, SplatRevealRain, TfAnnotationManager, TfXrNavigation, useDevicePerformance, VirtualWalkthroughViewer, WalkthroughCamera, yOnPlane, };
35
+ export { Annotation, AnnotationEditPane, AnnotationPanel, Application, AutoRotator, BlockingSpinner, BoundaryRing, boundaryRingMesh, BoundaryRingScript, CameraInfo, computeGroundPlane, ControlsInfoPane, detectSplatFormat, GradientSky, SplatControls, SplatCrop, SplatFadeCrop, splatLoaderFilename, SplatModel, SplatRevealRain, TfAnnotationManager, TfXrNavigation, useDevicePerformance, VirtualWalkthroughViewer, WalkthroughCamera, yOnPlane, };
34
36
  //# sourceMappingURL=virtualWalkthrough.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtualWalkthrough.d.ts","sourceRoot":"","sources":["../src/virtualWalkthrough.ts"],"names":[],"mappings":"AAOA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,kBAAkB,MAAM,oDAAoD,CAAC;AACpF,OAAO,eAAe,MAAM,iDAAiD,CAAC;AAC9E,OAAO,WAAW,MAAM,6CAA6C,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,eAAe,MAAM,iDAAiD,CAAC;AAC9E,OAAO,YAAY,MAAM,8CAA8C,CAAC;AACxE,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,gBAAgB,MAAM,kDAAkD,CAAC;AAChF,OAAO,WAAW,MAAM,6CAA6C,CAAC;AACtE,OAAO,aAAa,MAAM,+CAA+C,CAAC;AAC1E,OAAO,SAAS,MAAM,2CAA2C,CAAC;AAClE,OAAO,aAAa,MAAM,+CAA+C,CAAC;AAC1E,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,eAAe,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,wBAAwB,MAAM,0DAA0D,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AACtG,YAAY,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AACpG,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACjG,YAAY,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAChG,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAC9G,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AACtH,YAAY,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,YAAY,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAClF,YAAY,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AAE9G,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,QAAQ,GACT,CAAC"}
1
+ {"version":3,"file":"virtualWalkthrough.d.ts","sourceRoot":"","sources":["../src/virtualWalkthrough.ts"],"names":[],"mappings":"AAOA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,kBAAkB,MAAM,oDAAoD,CAAC;AACpF,OAAO,eAAe,MAAM,iDAAiD,CAAC;AAC9E,OAAO,WAAW,MAAM,6CAA6C,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,eAAe,MAAM,iDAAiD,CAAC;AAC9E,OAAO,YAAY,MAAM,8CAA8C,CAAC;AACxE,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,gBAAgB,MAAM,kDAAkD,CAAC;AAChF,OAAO,WAAW,MAAM,6CAA6C,CAAC;AACtE,OAAO,aAAa,MAAM,+CAA+C,CAAC;AAC1E,OAAO,SAAS,MAAM,2CAA2C,CAAC;AAClE,OAAO,aAAa,MAAM,+CAA+C,CAAC;AAC1E,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,eAAe,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,wBAAwB,MAAM,0DAA0D,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AACtG,YAAY,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AACpG,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACjG,YAAY,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAChG,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAC9G,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AACtH,YAAY,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,YAAY,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,YAAY,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AAE9G,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,QAAQ,GACT,CAAC"}
@@ -25,6 +25,7 @@ import { TfXrNavigation } from './components/VirtualWalkthrough/TfXrNavigation';
25
25
  import VirtualWalkthroughViewer from './components/VirtualWalkthrough/VirtualWalkthroughViewer';
26
26
  import { BoundaryRingScript, boundaryRingMesh } from './components/VirtualWalkthrough/boundary-ring';
27
27
  import { computeGroundPlane, yOnPlane } from './components/VirtualWalkthrough/groundPlane';
28
+ import { detectSplatFormat, splatLoaderFilename } from './components/VirtualWalkthrough/splatFormat';
28
29
  import { WalkthroughCamera } from './components/VirtualWalkthrough/walkthrough-camera';
29
30
  import { useDevicePerformance } from './hooks/useDevicePerformance';
30
- export { Annotation, AnnotationEditPane, AnnotationPanel, Application, AutoRotator, BlockingSpinner, BoundaryRing, boundaryRingMesh, BoundaryRingScript, CameraInfo, computeGroundPlane, ControlsInfoPane, GradientSky, SplatControls, SplatCrop, SplatFadeCrop, SplatModel, SplatRevealRain, TfAnnotationManager, TfXrNavigation, useDevicePerformance, VirtualWalkthroughViewer, WalkthroughCamera, yOnPlane };
31
+ export { Annotation, AnnotationEditPane, AnnotationPanel, Application, AutoRotator, BlockingSpinner, BoundaryRing, boundaryRingMesh, BoundaryRingScript, CameraInfo, computeGroundPlane, ControlsInfoPane, detectSplatFormat, GradientSky, SplatControls, SplatCrop, SplatFadeCrop, splatLoaderFilename, SplatModel, SplatRevealRain, TfAnnotationManager, TfXrNavigation, useDevicePerformance, VirtualWalkthroughViewer, WalkthroughCamera, yOnPlane };