@threlte/xr 0.0.2

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 (57) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +13 -0
  3. package/dist/components/ARButton.svelte +25 -0
  4. package/dist/components/ARButton.svelte.d.ts +250 -0
  5. package/dist/components/Controller.svelte +124 -0
  6. package/dist/components/Controller.svelte.d.ts +30 -0
  7. package/dist/components/Hand.svelte +119 -0
  8. package/dist/components/Hand.svelte.d.ts +24 -0
  9. package/dist/components/Hands.svelte +35 -0
  10. package/dist/components/Hands.svelte.d.ts +24 -0
  11. package/dist/components/Ray.svelte +23 -0
  12. package/dist/components/Ray.svelte.d.ts +18 -0
  13. package/dist/components/ShortRay.svelte +28 -0
  14. package/dist/components/ShortRay.svelte.d.ts +16 -0
  15. package/dist/components/TeleportControls.svelte +136 -0
  16. package/dist/components/TeleportControls.svelte.d.ts +54 -0
  17. package/dist/components/VRButton.svelte +24 -0
  18. package/dist/components/VRButton.svelte.d.ts +250 -0
  19. package/dist/components/XR.svelte +114 -0
  20. package/dist/components/XR.svelte.d.ts +59 -0
  21. package/dist/components/XRButton.svelte +79 -0
  22. package/dist/components/XRButton.svelte.d.ts +265 -0
  23. package/dist/hooks/index.d.ts +7 -0
  24. package/dist/hooks/index.js +7 -0
  25. package/dist/hooks/useController.d.ts +14 -0
  26. package/dist/hooks/useController.js +32 -0
  27. package/dist/hooks/useEvent.d.ts +14 -0
  28. package/dist/hooks/useEvent.js +34 -0
  29. package/dist/hooks/useHand.d.ts +8 -0
  30. package/dist/hooks/useHand.js +14 -0
  31. package/dist/hooks/useHandJoint.d.ts +6 -0
  32. package/dist/hooks/useHandJoint.js +19 -0
  33. package/dist/hooks/useHitTest.d.ts +5 -0
  34. package/dist/hooks/useHitTest.js +44 -0
  35. package/dist/hooks/useTeleport.d.ts +13 -0
  36. package/dist/hooks/useTeleport.js +54 -0
  37. package/dist/hooks/useXR.d.ts +14 -0
  38. package/dist/hooks/useXR.js +15 -0
  39. package/dist/index.d.ts +12 -0
  40. package/dist/index.js +11 -0
  41. package/dist/internal/events.d.ts +5 -0
  42. package/dist/internal/events.js +26 -0
  43. package/dist/internal/stores.d.ts +10 -0
  44. package/dist/internal/stores.js +10 -0
  45. package/dist/lib/getXRSessionOptions.d.ts +2 -0
  46. package/dist/lib/getXRSessionOptions.js +15 -0
  47. package/dist/lib/getXRSupportState.d.ts +7 -0
  48. package/dist/lib/getXRSupportState.js +20 -0
  49. package/dist/lib/handJoints.d.ts +2 -0
  50. package/dist/lib/handJoints.js +27 -0
  51. package/dist/lib/toggleXRSession.d.ts +14 -0
  52. package/dist/lib/toggleXRSession.js +33 -0
  53. package/dist/plugins/teleportPlugin.d.ts +1 -0
  54. package/dist/plugins/teleportPlugin.js +41 -0
  55. package/dist/types.d.ts +31 -0
  56. package/dist/types.js +1 -0
  57. package/package.json +50 -0
@@ -0,0 +1,24 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { XRHandEvent } from '../types';
3
+ declare const __propDef: {
4
+ props: {
5
+ profile?: 'mesh' | 'spheres' | 'boxes' | 'none';
6
+ };
7
+ slots: {
8
+ left: {};
9
+ right: {};
10
+ };
11
+ events: {
12
+ connected: XRHandEvent<'connected', null>;
13
+ disconnected: XRHandEvent<'disconnected', null>;
14
+ pinchstart: XRHandEvent<'pinchstart', THREE.XRHandSpace>;
15
+ pinchend: XRHandEvent<'pinchend', THREE.XRHandSpace>;
16
+ };
17
+ };
18
+ export type HandsProps = typeof __propDef.props;
19
+ export type HandsEvents = typeof __propDef.events;
20
+ export type HandsSlots = typeof __propDef.slots;
21
+ /** Creates XRHand inputs for devices that allow hand tracking. */
22
+ export default class Hands extends SvelteComponent<HandsProps, HandsEvents, HandsSlots> {
23
+ }
24
+ export {};
@@ -0,0 +1,23 @@
1
+ <script>import { T } from "@threlte/core";
2
+ import { Line2 } from "three/examples/jsm/lines/Line2";
3
+ import { LineGeometry } from "three/examples/jsm/lines/LineGeometry";
4
+ import { LineMaterial } from "three/examples/jsm/lines/LineMaterial";
5
+ export let positions;
6
+ export let color = "white";
7
+ let lineGeometry = new LineGeometry();
8
+ $:
9
+ if (positions) {
10
+ lineGeometry.setPositions(positions);
11
+ }
12
+ </script>
13
+
14
+ <T is={Line2}
15
+ {...$$restProps}
16
+ position.z={-0.01}
17
+ >
18
+ <T is={lineGeometry} />
19
+ <T is={LineMaterial}
20
+ {color}
21
+ linewidth={0.004}
22
+ />
23
+ </T>
@@ -0,0 +1,18 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ positions: Float32Array | undefined;
6
+ color?: string;
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export type RayProps = typeof __propDef.props;
14
+ export type RayEvents = typeof __propDef.events;
15
+ export type RaySlots = typeof __propDef.slots;
16
+ export default class Ray extends SvelteComponent<RayProps, RayEvents, RaySlots> {
17
+ }
18
+ export {};
@@ -0,0 +1,28 @@
1
+ <script>import { T } from "@threlte/core";
2
+ const vertexShader = `
3
+ uniform mat4 modelViewMatrix;
4
+ uniform mat4 projectionMatrix;
5
+ attribute vec2 uv;
6
+ attribute vec3 position;
7
+ varying vec2 vUv;
8
+ void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.); }
9
+ `;
10
+ const fragmentShader = `
11
+ varying mediump vec2 vUv;
12
+ void main() { gl_FragColor = vec4(1., 1., 1., pow(vUv.y - 1., 2.)); }
13
+ `;
14
+ </script>
15
+
16
+ <T.Mesh
17
+ {...$$restProps}
18
+ rotation.x={-Math.PI / 2}
19
+ position.z={-0.1}
20
+ >
21
+ {@const radius = 0.002}
22
+ {@const height = 0.2}
23
+ {@const radialSegments = 16}
24
+ {@const heightSegments = 1}
25
+ {@const openEnded = false}
26
+ <T.CylinderGeometry args={[radius, radius, height, radialSegments, heightSegments, openEnded]} />
27
+ <T.RawShaderMaterial transparent {vertexShader} {fragmentShader} />
28
+ </T.Mesh>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type ShortRayProps = typeof __propDef.props;
12
+ export type ShortRayEvents = typeof __propDef.events;
13
+ export type ShortRaySlots = typeof __propDef.slots;
14
+ export default class ShortRay extends SvelteComponent<ShortRayProps, ShortRayEvents, ShortRaySlots> {
15
+ }
16
+ export {};
@@ -0,0 +1,136 @@
1
+ <!--
2
+ @component
3
+
4
+ `<TeleportControls />` creates a teleportation experience similar to that on the Quest home environment.
5
+
6
+ @param handedness - Which hands to allow teleportation from.
7
+
8
+ @param maxDistance - The maximum radial teleporting distance from the user's current origin, in meters.
9
+
10
+ @event teleport - Fires after a teleport event.
11
+
12
+ ```svelte
13
+ <TeleportControls
14
+ handedness={'left' | 'right'}
15
+ maxDistance={10}
16
+ on:teleport={(event) => {}}
17
+ >
18
+ <T.Mesh teleportSurface>
19
+ ...
20
+ </T.Mesh>
21
+ </TeleportControls>
22
+ ```
23
+ -->
24
+
25
+ <script>import * as THREE from "three";
26
+ import { T, useFrame, createRawEventDispatcher } from "@threlte/core";
27
+ import { activeTeleportController, pendingTeleportDestination } from "../internal/stores";
28
+ import { useTeleport, useController, useGamepad } from "../hooks";
29
+ import Ray from "../components/Ray.svelte";
30
+ import { teleportPlugin } from "../plugins/teleportPlugin";
31
+ export let raycaster = new THREE.Raycaster();
32
+ export let handedness = "right";
33
+ export let maxDistance = 20;
34
+ const dispatch = createRawEventDispatcher();
35
+ let destination;
36
+ let activeController;
37
+ const teleport = useTeleport();
38
+ const navMeshes = [];
39
+ const controllerPosition = new THREE.Vector3();
40
+ const matrix4 = new THREE.Matrix4();
41
+ const rayMidpoint = new THREE.Vector3();
42
+ const rayDivisions = 40;
43
+ const positions = new Float32Array(rayDivisions * 3);
44
+ const curve = new THREE.QuadraticBezierCurve3();
45
+ const curvePoint = new THREE.Vector3();
46
+ $:
47
+ raycaster.far = maxDistance;
48
+ $:
49
+ teleportController = useController(handedness);
50
+ $:
51
+ teleportGamepad = useGamepad(handedness);
52
+ const calculateRayMidpoint = (vector1, vector2) => {
53
+ rayMidpoint.x = (vector1.x + vector2.x) / 2;
54
+ rayMidpoint.y = (vector1.y + vector2.y) / 2;
55
+ rayMidpoint.z = (vector1.z + vector2.z) / 2;
56
+ };
57
+ const { start, stop } = useFrame(() => {
58
+ matrix4.identity().extractRotation(activeController.matrixWorld);
59
+ raycaster.ray.origin.setFromMatrixPosition(activeController.matrixWorld);
60
+ raycaster.ray.direction.set(0, 0, -1).applyMatrix4(matrix4);
61
+ const [intersect] = raycaster.intersectObjects(navMeshes, true);
62
+ if (intersect === void 0) {
63
+ destination = void 0;
64
+ $pendingTeleportDestination = void 0;
65
+ return;
66
+ }
67
+ destination = intersect.point;
68
+ $pendingTeleportDestination = destination;
69
+ activeController.getWorldPosition(controllerPosition);
70
+ calculateRayMidpoint(controllerPosition, destination);
71
+ rayMidpoint.y += 0.8;
72
+ curve.v0.copy(controllerPosition);
73
+ curve.v1.copy(rayMidpoint);
74
+ curve.v2.copy(intersect.point);
75
+ for (let i = 0, j = 0; i < rayDivisions; i += 1, j += 3) {
76
+ const t = i / rayDivisions;
77
+ curve.getPoint(t, curvePoint);
78
+ positions[j + 0] = curvePoint.x;
79
+ positions[j + 1] = curvePoint.y;
80
+ positions[j + 2] = curvePoint.z;
81
+ }
82
+ }, { autostart: false });
83
+ const handleSelectStart = (controller) => {
84
+ activeController = controller;
85
+ $activeTeleportController = controller;
86
+ start();
87
+ };
88
+ const handleSelectEnd = () => {
89
+ stop();
90
+ activeController = void 0;
91
+ $activeTeleportController = void 0;
92
+ if (destination !== void 0) {
93
+ teleport(destination);
94
+ dispatch("teleport", destination);
95
+ }
96
+ };
97
+ useFrame(() => {
98
+ const selecting = (teleportGamepad.current?.axes[3] ?? 0) < -0.9;
99
+ if (selecting && activeController === void 0) {
100
+ handleSelectStart(teleportController.current.controller);
101
+ } else if (!selecting && activeController !== void 0) {
102
+ handleSelectEnd();
103
+ }
104
+ });
105
+ teleportPlugin(navMeshes);
106
+ </script>
107
+
108
+ <slot />
109
+
110
+ <slot name='ray'>
111
+ <Ray
112
+ visible={activeController !== undefined && destination !== undefined}
113
+ positions={activeController !== undefined && destination !== undefined ? positions : undefined}
114
+ />
115
+ </slot>
116
+
117
+ <slot name='cursor'>
118
+ <T.Mesh
119
+ visible={activeController !== undefined && destination !== undefined}
120
+ position.x={destination?.x}
121
+ position.y={destination?.y}
122
+ position.z={destination?.z}
123
+ >
124
+ {@const innerRadius = 0.175}
125
+ {@const outerRadius = 0.2}
126
+ {@const thetaSegments = 32}
127
+ <T.RingGeometry
128
+ args={[innerRadius, outerRadius, thetaSegments]}
129
+ on:create={({ ref }) => ref.rotateX(-Math.PI / 2)}
130
+ />
131
+ <T.MeshBasicMaterial
132
+ polygonOffset
133
+ polygonOffsetFactor={-1}
134
+ />
135
+ </T.Mesh>
136
+ </slot>
@@ -0,0 +1,54 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import * as THREE from 'three';
3
+ declare const __propDef: {
4
+ props: {
5
+ /**
6
+ * The raycaster used for teleportation.
7
+ * @default new THREE.Raycaster()
8
+ */ raycaster?: THREE.Raycaster;
9
+ /**
10
+ * The controller handedness that the teleport controls is linked to.
11
+ * @default 'right'
12
+ */ handedness?: 'left' | 'right';
13
+ /**
14
+ * The maximum radial teleporting distance from the user's current origin, in meters.
15
+ * @default 20
16
+ */ maxDistance?: number;
17
+ };
18
+ slots: {
19
+ default: {};
20
+ ray: {};
21
+ cursor: {};
22
+ };
23
+ events: {
24
+ /** Fired after a teleportation occurs with the new location as the payload. */
25
+ teleport: THREE.Vector3;
26
+ };
27
+ };
28
+ export type TeleportControlsProps = typeof __propDef.props;
29
+ export type TeleportControlsEvents = typeof __propDef.events;
30
+ export type TeleportControlsSlots = typeof __propDef.slots;
31
+ /**
32
+ * `<TeleportControls />` creates a teleportation experience similar to that on the Quest home environment.
33
+ *
34
+ * @param handedness - Which hands to allow teleportation from.
35
+ *
36
+ * @param maxDistance - The maximum radial teleporting distance from the user's current origin, in meters.
37
+ *
38
+ * @event teleport - Fires after a teleport event.
39
+ *
40
+ * ```svelte
41
+ * <TeleportControls
42
+ * handedness={'left' | 'right'}
43
+ * maxDistance={10}
44
+ * on:teleport={(event) => {}}
45
+ * >
46
+ * <T.Mesh teleportSurface>
47
+ * ...
48
+ * </T.Mesh>
49
+ * </TeleportControls>
50
+ * ```
51
+ */
52
+ export default class TeleportControls extends SvelteComponent<TeleportControlsProps, TeleportControlsEvents, TeleportControlsSlots> {
53
+ }
54
+ export {};
@@ -0,0 +1,24 @@
1
+ <!--
2
+ @component
3
+ `<VRButton />` is an HTML `<button />` that can be used to init and display info about your immersive VR session.
4
+
5
+ ```svelte
6
+ <VRButton
7
+ on:error={(event) => {}}
8
+ on:click={(event) => {}}
9
+ />
10
+ ```
11
+ -->
12
+
13
+ <script>import XRButton from "./XRButton.svelte";
14
+ </script>
15
+
16
+ <XRButton
17
+ {...$$restProps}
18
+ mode='immersive-vr'
19
+ sessionInit={{
20
+ optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking', 'layers']
21
+ }}
22
+ on:click
23
+ on:error
24
+ />
@@ -0,0 +1,250 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ force?: "enter" | "exit";
5
+ styled?: boolean;
6
+ form?: string | null | undefined;
7
+ radiogroup?: string | null | undefined;
8
+ name?: string | null | undefined;
9
+ style?: string | null | undefined;
10
+ disabled?: boolean | null | undefined;
11
+ formaction?: string | null | undefined;
12
+ formenctype?: string | null | undefined;
13
+ formmethod?: string | null | undefined;
14
+ formnovalidate?: boolean | null | undefined;
15
+ formtarget?: string | null | undefined;
16
+ type?: "submit" | "reset" | "button" | null | undefined;
17
+ value?: string | number | string[] | null | undefined;
18
+ accesskey?: string | null | undefined;
19
+ autofocus?: boolean | null | undefined;
20
+ class?: string | null | undefined;
21
+ contenteditable?: import("svelte/elements").Booleanish | "inherit" | null | undefined;
22
+ contextmenu?: string | null | undefined;
23
+ dir?: string | null | undefined;
24
+ draggable?: import("svelte/elements").Booleanish | null | undefined;
25
+ enterkeyhint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | null | undefined;
26
+ hidden?: boolean | null | undefined;
27
+ id?: string | null | undefined;
28
+ lang?: string | null | undefined;
29
+ part?: string | null | undefined;
30
+ placeholder?: string | null | undefined;
31
+ slot?: string | null | undefined;
32
+ spellcheck?: import("svelte/elements").Booleanish | null | undefined;
33
+ tabindex?: number | null | undefined;
34
+ title?: string | null | undefined;
35
+ translate?: "" | "yes" | "no" | null | undefined;
36
+ inert?: boolean | null | undefined;
37
+ role?: import("svelte/elements").AriaRole | null | undefined;
38
+ about?: string | null | undefined;
39
+ datatype?: string | null | undefined;
40
+ inlist?: any;
41
+ prefix?: string | null | undefined;
42
+ property?: string | null | undefined;
43
+ resource?: string | null | undefined;
44
+ typeof?: string | null | undefined;
45
+ vocab?: string | null | undefined;
46
+ autocapitalize?: string | null | undefined;
47
+ autocorrect?: string | null | undefined;
48
+ autosave?: string | null | undefined;
49
+ color?: string | null | undefined;
50
+ itemprop?: string | null | undefined;
51
+ itemscope?: boolean | null | undefined;
52
+ itemtype?: string | null | undefined;
53
+ itemid?: string | null | undefined;
54
+ itemref?: string | null | undefined;
55
+ results?: number | null | undefined;
56
+ security?: string | null | undefined;
57
+ unselectable?: "on" | "off" | null | undefined;
58
+ inputmode?: "search" | "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | null | undefined;
59
+ is?: string | null | undefined;
60
+ 'bind:innerHTML'?: string | null | undefined;
61
+ 'bind:textContent'?: string | null | undefined;
62
+ 'bind:innerText'?: string | null | undefined;
63
+ 'bind:contentRect'?: DOMRectReadOnly | null | undefined;
64
+ 'bind:contentBoxSize'?: ResizeObserverSize[] | null | undefined;
65
+ 'bind:borderBoxSize'?: ResizeObserverSize[] | null | undefined;
66
+ 'bind:devicePixelContentBoxSize'?: ResizeObserverSize[] | null | undefined;
67
+ 'data-sveltekit-keepfocus'?: true | "" | "off" | null | undefined;
68
+ 'data-sveltekit-noscroll'?: true | "" | "off" | null | undefined;
69
+ 'data-sveltekit-preload-code'?: true | "" | "off" | "eager" | "viewport" | "hover" | "tap" | null | undefined;
70
+ 'data-sveltekit-preload-data'?: true | "" | "off" | "hover" | "tap" | null | undefined;
71
+ 'data-sveltekit-reload'?: true | "" | "off" | null | undefined;
72
+ 'data-sveltekit-replacestate'?: true | "" | "off" | null | undefined;
73
+ 'aria-activedescendant'?: string | null | undefined;
74
+ 'aria-atomic'?: import("svelte/elements").Booleanish | null | undefined;
75
+ 'aria-autocomplete'?: "inline" | "list" | "none" | "both" | null | undefined;
76
+ 'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
77
+ 'aria-checked'?: boolean | "true" | "false" | "mixed" | null | undefined;
78
+ 'aria-colcount'?: number | null | undefined;
79
+ 'aria-colindex'?: number | null | undefined;
80
+ 'aria-colspan'?: number | null | undefined;
81
+ 'aria-controls'?: string | null | undefined;
82
+ 'aria-current'?: import("svelte/elements").Booleanish | "page" | "step" | "location" | "date" | "time" | null | undefined;
83
+ 'aria-describedby'?: string | null | undefined;
84
+ 'aria-details'?: string | null | undefined;
85
+ 'aria-disabled'?: import("svelte/elements").Booleanish | null | undefined;
86
+ 'aria-dropeffect'?: "link" | "none" | "copy" | "execute" | "move" | "popup" | null | undefined;
87
+ 'aria-errormessage'?: string | null | undefined;
88
+ 'aria-expanded'?: import("svelte/elements").Booleanish | null | undefined;
89
+ 'aria-flowto'?: string | null | undefined;
90
+ 'aria-grabbed'?: import("svelte/elements").Booleanish | null | undefined;
91
+ 'aria-haspopup'?: import("svelte/elements").Booleanish | "dialog" | "grid" | "listbox" | "menu" | "tree" | null | undefined;
92
+ 'aria-hidden'?: import("svelte/elements").Booleanish | null | undefined;
93
+ 'aria-invalid'?: import("svelte/elements").Booleanish | "grammar" | "spelling" | null | undefined;
94
+ 'aria-keyshortcuts'?: string | null | undefined;
95
+ 'aria-label'?: string | null | undefined;
96
+ 'aria-labelledby'?: string | null | undefined;
97
+ 'aria-level'?: number | null | undefined;
98
+ 'aria-live'?: "off" | "assertive" | "polite" | null | undefined;
99
+ 'aria-modal'?: import("svelte/elements").Booleanish | null | undefined;
100
+ 'aria-multiline'?: import("svelte/elements").Booleanish | null | undefined;
101
+ 'aria-multiselectable'?: import("svelte/elements").Booleanish | null | undefined;
102
+ 'aria-orientation'?: "horizontal" | "vertical" | null | undefined;
103
+ 'aria-owns'?: string | null | undefined;
104
+ 'aria-placeholder'?: string | null | undefined;
105
+ 'aria-posinset'?: number | null | undefined;
106
+ 'aria-pressed'?: boolean | "true" | "false" | "mixed" | null | undefined;
107
+ 'aria-readonly'?: import("svelte/elements").Booleanish | null | undefined;
108
+ 'aria-relevant'?: "text" | "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | null | undefined;
109
+ 'aria-required'?: import("svelte/elements").Booleanish | null | undefined;
110
+ 'aria-roledescription'?: string | null | undefined;
111
+ 'aria-rowcount'?: number | null | undefined;
112
+ 'aria-rowindex'?: number | null | undefined;
113
+ 'aria-rowspan'?: number | null | undefined;
114
+ 'aria-selected'?: import("svelte/elements").Booleanish | null | undefined;
115
+ 'aria-setsize'?: number | null | undefined;
116
+ 'aria-sort'?: "none" | "ascending" | "descending" | "other" | null | undefined;
117
+ 'aria-valuemax'?: number | null | undefined;
118
+ 'aria-valuemin'?: number | null | undefined;
119
+ 'aria-valuenow'?: number | null | undefined;
120
+ 'aria-valuetext'?: string | null | undefined;
121
+ 'on:copy'?: import("svelte/elements").ClipboardEventHandler<HTMLButtonElement> | null | undefined;
122
+ 'on:cut'?: import("svelte/elements").ClipboardEventHandler<HTMLButtonElement> | null | undefined;
123
+ 'on:paste'?: import("svelte/elements").ClipboardEventHandler<HTMLButtonElement> | null | undefined;
124
+ 'on:compositionend'?: import("svelte/elements").CompositionEventHandler<HTMLButtonElement> | null | undefined;
125
+ 'on:compositionstart'?: import("svelte/elements").CompositionEventHandler<HTMLButtonElement> | null | undefined;
126
+ 'on:compositionupdate'?: import("svelte/elements").CompositionEventHandler<HTMLButtonElement> | null | undefined;
127
+ 'on:focus'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
128
+ 'on:focusin'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
129
+ 'on:focusout'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
130
+ 'on:blur'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
131
+ 'on:change'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
132
+ 'on:beforeinput'?: import("svelte/elements").EventHandler<InputEvent, HTMLButtonElement> | null | undefined;
133
+ 'on:input'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
134
+ 'on:reset'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
135
+ 'on:submit'?: import("svelte/elements").EventHandler<SubmitEvent, HTMLButtonElement> | null | undefined;
136
+ 'on:invalid'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
137
+ 'on:formdata'?: import("svelte/elements").EventHandler<FormDataEvent, HTMLButtonElement> | null | undefined;
138
+ 'on:load'?: import("svelte/elements").EventHandler<Event, Element> | null | undefined;
139
+ 'on:error'?: import("svelte/elements").EventHandler<Event, Element> | null | undefined;
140
+ 'on:toggle'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
141
+ 'on:keydown'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
142
+ 'on:keypress'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
143
+ 'on:keyup'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
144
+ 'on:abort'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
145
+ 'on:canplay'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
146
+ 'on:canplaythrough'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
147
+ 'on:cuechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
148
+ 'on:durationchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
149
+ 'on:emptied'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
150
+ 'on:encrypted'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
151
+ 'on:ended'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
152
+ 'on:loadeddata'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
153
+ 'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
154
+ 'on:loadstart'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
155
+ 'on:pause'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
156
+ 'on:play'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
157
+ 'on:playing'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
158
+ 'on:progress'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
159
+ 'on:ratechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
160
+ 'on:seeked'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
161
+ 'on:seeking'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
162
+ 'on:stalled'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
163
+ 'on:suspend'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
164
+ 'on:timeupdate'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
165
+ 'on:volumechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
166
+ 'on:waiting'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
167
+ 'on:auxclick'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
168
+ 'on:click'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
169
+ 'on:contextmenu'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
170
+ 'on:dblclick'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
171
+ 'on:drag'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
172
+ 'on:dragend'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
173
+ 'on:dragenter'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
174
+ 'on:dragexit'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
175
+ 'on:dragleave'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
176
+ 'on:dragover'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
177
+ 'on:dragstart'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
178
+ 'on:drop'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
179
+ 'on:mousedown'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
180
+ 'on:mouseenter'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
181
+ 'on:mouseleave'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
182
+ 'on:mousemove'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
183
+ 'on:mouseout'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
184
+ 'on:mouseover'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
185
+ 'on:mouseup'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
186
+ 'on:select'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
187
+ 'on:selectionchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
188
+ 'on:selectstart'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
189
+ 'on:touchcancel'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
190
+ 'on:touchend'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
191
+ 'on:touchmove'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
192
+ 'on:touchstart'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
193
+ 'on:gotpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
194
+ 'on:pointercancel'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
195
+ 'on:pointerdown'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
196
+ 'on:pointerenter'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
197
+ 'on:pointerleave'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
198
+ 'on:pointermove'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
199
+ 'on:pointerout'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
200
+ 'on:pointerover'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
201
+ 'on:pointerup'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
202
+ 'on:lostpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
203
+ 'on:scroll'?: import("svelte/elements").UIEventHandler<HTMLButtonElement> | null | undefined;
204
+ 'on:resize'?: import("svelte/elements").UIEventHandler<HTMLButtonElement> | null | undefined;
205
+ 'on:wheel'?: import("svelte/elements").WheelEventHandler<HTMLButtonElement> | null | undefined;
206
+ 'on:animationstart'?: import("svelte/elements").AnimationEventHandler<HTMLButtonElement> | null | undefined;
207
+ 'on:animationend'?: import("svelte/elements").AnimationEventHandler<HTMLButtonElement> | null | undefined;
208
+ 'on:animationiteration'?: import("svelte/elements").AnimationEventHandler<HTMLButtonElement> | null | undefined;
209
+ 'on:transitionstart'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
210
+ 'on:transitionrun'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
211
+ 'on:transitionend'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
212
+ 'on:transitioncancel'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
213
+ 'on:outrostart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
214
+ 'on:outroend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
215
+ 'on:introstart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
216
+ 'on:introend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
217
+ 'on:message'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
218
+ 'on:messageerror'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
219
+ 'on:visibilitychange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
220
+ 'on:cancel'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
221
+ 'on:close'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
222
+ 'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
223
+ 'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
224
+ };
225
+ events: {
226
+ click: CustomEvent<{
227
+ state: "unsupported" | "insecure" | "blocked" | "supported";
228
+ }>;
229
+ error: CustomEvent<Error>;
230
+ } & {
231
+ [evt: string]: CustomEvent<any>;
232
+ };
233
+ slots: {};
234
+ };
235
+ export type VrButtonProps = typeof __propDef.props;
236
+ export type VrButtonEvents = typeof __propDef.events;
237
+ export type VrButtonSlots = typeof __propDef.slots;
238
+ /**
239
+ * `<VRButton />` is an HTML `<button />` that can be used to init and display info about your immersive VR session.
240
+ *
241
+ * ```svelte
242
+ * <VRButton
243
+ * on:error={(event) => {}}
244
+ * on:click={(event) => {}}
245
+ * />
246
+ * ```
247
+ */
248
+ export default class VrButton extends SvelteComponent<VrButtonProps, VrButtonEvents, VrButtonSlots> {
249
+ }
250
+ export {};