@threlte/xr 0.0.13 → 0.1.1
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/ARButton.svelte.d.ts +61 -60
- package/dist/components/Hand.svelte +21 -16
- package/dist/components/Headset.svelte.d.ts +1 -0
- package/dist/components/VRButton.svelte.d.ts +59 -58
- package/dist/components/XR.svelte +5 -5
- package/dist/components/XR.svelte.d.ts +2 -2
- package/dist/components/XRButton.svelte.d.ts +51 -50
- package/dist/components/internal/Cursor.svelte.d.ts +4 -3
- package/dist/components/internal/PointerCursor.svelte +3 -3
- package/dist/components/internal/PointerCursor.svelte.d.ts +1 -0
- package/dist/components/internal/ScenePortal.svelte.d.ts +1 -0
- package/dist/components/internal/ShortRay.svelte.d.ts +1 -0
- package/dist/components/internal/TeleportCursor.svelte +3 -3
- package/dist/components/internal/TeleportCursor.svelte.d.ts +1 -0
- package/dist/components/internal/TeleportRay.svelte +3 -3
- package/dist/components/internal/TeleportRay.svelte.d.ts +1 -0
- package/dist/hooks/useHandJoint.js +4 -3
- package/dist/hooks/useHitTest.js +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/internal/setupHands.js +1 -1
- package/dist/internal/setupHeadset.js +5 -5
- package/dist/internal/useFixed.d.ts +4 -4
- package/dist/internal/useFixed.js +4 -4
- package/dist/plugins/pointerControls/index.js +4 -4
- package/package.json +10 -6
- package/dist/plugins/pointerControls/types.d.ts +0 -62
|
@@ -1,29 +1,23 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
1
2
|
/// <reference types="webxr" />
|
|
2
3
|
import { SvelteComponent } from "svelte";
|
|
3
4
|
declare const __propDef: {
|
|
4
5
|
props: {
|
|
5
|
-
force?: "enter" | "exit";
|
|
6
|
-
styled?: boolean;
|
|
7
|
-
form?: string | null | undefined;
|
|
8
|
-
radiogroup?: string | null | undefined;
|
|
9
6
|
name?: string | null | undefined;
|
|
7
|
+
type?: "button" | "submit" | "reset" | null | undefined;
|
|
10
8
|
style?: string | null | undefined;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
formenctype?: string | null | undefined;
|
|
14
|
-
formmethod?: string | null | undefined;
|
|
15
|
-
formnovalidate?: boolean | null | undefined;
|
|
16
|
-
formtarget?: string | null | undefined;
|
|
17
|
-
type?: "submit" | "reset" | "button" | null | undefined;
|
|
9
|
+
class?: string | null | undefined;
|
|
10
|
+
typeof?: string | null | undefined;
|
|
18
11
|
value?: string | number | string[] | null | undefined;
|
|
12
|
+
form?: string | null | undefined;
|
|
13
|
+
radiogroup?: string | null | undefined;
|
|
19
14
|
accesskey?: string | null | undefined;
|
|
20
15
|
autofocus?: boolean | null | undefined;
|
|
21
|
-
class?: string | null | undefined;
|
|
22
16
|
contenteditable?: import("svelte/elements").Booleanish | "inherit" | null | undefined;
|
|
23
17
|
contextmenu?: string | null | undefined;
|
|
24
18
|
dir?: string | null | undefined;
|
|
25
19
|
draggable?: import("svelte/elements").Booleanish | null | undefined;
|
|
26
|
-
enterkeyhint?: "
|
|
20
|
+
enterkeyhint?: "search" | "done" | "enter" | "go" | "next" | "previous" | "send" | null | undefined;
|
|
27
21
|
hidden?: boolean | null | undefined;
|
|
28
22
|
id?: string | null | undefined;
|
|
29
23
|
lang?: string | null | undefined;
|
|
@@ -42,7 +36,6 @@ declare const __propDef: {
|
|
|
42
36
|
prefix?: string | null | undefined;
|
|
43
37
|
property?: string | null | undefined;
|
|
44
38
|
resource?: string | null | undefined;
|
|
45
|
-
typeof?: string | null | undefined;
|
|
46
39
|
vocab?: string | null | undefined;
|
|
47
40
|
autocapitalize?: string | null | undefined;
|
|
48
41
|
autocorrect?: string | null | undefined;
|
|
@@ -55,13 +48,13 @@ declare const __propDef: {
|
|
|
55
48
|
itemref?: string | null | undefined;
|
|
56
49
|
results?: number | null | undefined;
|
|
57
50
|
security?: string | null | undefined;
|
|
58
|
-
unselectable?: "
|
|
59
|
-
inputmode?: "search" | "
|
|
51
|
+
unselectable?: "off" | "on" | null | undefined;
|
|
52
|
+
inputmode?: "search" | "numeric" | "decimal" | "none" | "text" | "tel" | "url" | "email" | null | undefined;
|
|
60
53
|
is?: string | null | undefined;
|
|
61
54
|
'bind:innerHTML'?: string | null | undefined;
|
|
62
55
|
'bind:textContent'?: string | null | undefined;
|
|
63
56
|
'bind:innerText'?: string | null | undefined;
|
|
64
|
-
'bind:contentRect'?:
|
|
57
|
+
'bind:contentRect'?: any;
|
|
65
58
|
'bind:contentBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
66
59
|
'bind:borderBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
67
60
|
'bind:devicePixelContentBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
@@ -73,9 +66,9 @@ declare const __propDef: {
|
|
|
73
66
|
'data-sveltekit-replacestate'?: true | "" | "off" | null | undefined;
|
|
74
67
|
'aria-activedescendant'?: string | null | undefined;
|
|
75
68
|
'aria-atomic'?: import("svelte/elements").Booleanish | null | undefined;
|
|
76
|
-
'aria-autocomplete'?: "
|
|
69
|
+
'aria-autocomplete'?: "none" | "inline" | "list" | "both" | null | undefined;
|
|
77
70
|
'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
|
|
78
|
-
'aria-checked'?: boolean | "
|
|
71
|
+
'aria-checked'?: boolean | "false" | "true" | "mixed" | null | undefined;
|
|
79
72
|
'aria-colcount'?: number | null | undefined;
|
|
80
73
|
'aria-colindex'?: number | null | undefined;
|
|
81
74
|
'aria-colspan'?: number | null | undefined;
|
|
@@ -89,7 +82,7 @@ declare const __propDef: {
|
|
|
89
82
|
'aria-expanded'?: import("svelte/elements").Booleanish | null | undefined;
|
|
90
83
|
'aria-flowto'?: string | null | undefined;
|
|
91
84
|
'aria-grabbed'?: import("svelte/elements").Booleanish | null | undefined;
|
|
92
|
-
'aria-haspopup'?: import("svelte/elements").Booleanish | "
|
|
85
|
+
'aria-haspopup'?: import("svelte/elements").Booleanish | "menu" | "listbox" | "tree" | "grid" | "dialog" | null | undefined;
|
|
93
86
|
'aria-hidden'?: import("svelte/elements").Booleanish | null | undefined;
|
|
94
87
|
'aria-invalid'?: import("svelte/elements").Booleanish | "grammar" | "spelling" | null | undefined;
|
|
95
88
|
'aria-keyshortcuts'?: string | null | undefined;
|
|
@@ -104,9 +97,9 @@ declare const __propDef: {
|
|
|
104
97
|
'aria-owns'?: string | null | undefined;
|
|
105
98
|
'aria-placeholder'?: string | null | undefined;
|
|
106
99
|
'aria-posinset'?: number | null | undefined;
|
|
107
|
-
'aria-pressed'?: boolean | "
|
|
100
|
+
'aria-pressed'?: boolean | "false" | "true" | "mixed" | null | undefined;
|
|
108
101
|
'aria-readonly'?: import("svelte/elements").Booleanish | null | undefined;
|
|
109
|
-
'aria-relevant'?: "
|
|
102
|
+
'aria-relevant'?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | null | undefined;
|
|
110
103
|
'aria-required'?: import("svelte/elements").Booleanish | null | undefined;
|
|
111
104
|
'aria-roledescription'?: string | null | undefined;
|
|
112
105
|
'aria-rowcount'?: number | null | undefined;
|
|
@@ -114,7 +107,7 @@ declare const __propDef: {
|
|
|
114
107
|
'aria-rowspan'?: number | null | undefined;
|
|
115
108
|
'aria-selected'?: import("svelte/elements").Booleanish | null | undefined;
|
|
116
109
|
'aria-setsize'?: number | null | undefined;
|
|
117
|
-
'aria-sort'?: "
|
|
110
|
+
'aria-sort'?: "other" | "none" | "ascending" | "descending" | null | undefined;
|
|
118
111
|
'aria-valuemax'?: number | null | undefined;
|
|
119
112
|
'aria-valuemin'?: number | null | undefined;
|
|
120
113
|
'aria-valuenow'?: number | null | undefined;
|
|
@@ -134,37 +127,37 @@ declare const __propDef: {
|
|
|
134
127
|
'on:input'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
|
|
135
128
|
'on:reset'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
|
|
136
129
|
'on:submit'?: import("svelte/elements").EventHandler<SubmitEvent, HTMLButtonElement> | null | undefined;
|
|
137
|
-
'on:invalid'?: import("svelte/elements").EventHandler<Event
|
|
130
|
+
'on:invalid'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
138
131
|
'on:formdata'?: import("svelte/elements").EventHandler<FormDataEvent, HTMLButtonElement> | null | undefined;
|
|
139
|
-
'on:load'?: import("svelte/elements").EventHandler<Event
|
|
140
|
-
'on:error'?: import("svelte/elements").EventHandler<Event
|
|
141
|
-
'on:toggle'?: import("svelte/elements").EventHandler<Event
|
|
132
|
+
'on:load'?: import("svelte/elements").EventHandler<Event<EventTarget>, Element> | null | undefined;
|
|
133
|
+
'on:error'?: import("svelte/elements").EventHandler<Event<EventTarget>, Element> | null | undefined;
|
|
134
|
+
'on:toggle'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
142
135
|
'on:keydown'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
143
136
|
'on:keypress'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
144
137
|
'on:keyup'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
145
|
-
'on:abort'?: import("svelte/elements").EventHandler<Event
|
|
146
|
-
'on:canplay'?: import("svelte/elements").EventHandler<Event
|
|
147
|
-
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event
|
|
148
|
-
'on:cuechange'?: import("svelte/elements").EventHandler<Event
|
|
149
|
-
'on:durationchange'?: import("svelte/elements").EventHandler<Event
|
|
150
|
-
'on:emptied'?: import("svelte/elements").EventHandler<Event
|
|
151
|
-
'on:encrypted'?: import("svelte/elements").EventHandler<Event
|
|
152
|
-
'on:ended'?: import("svelte/elements").EventHandler<Event
|
|
153
|
-
'on:loadeddata'?: import("svelte/elements").EventHandler<Event
|
|
154
|
-
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event
|
|
155
|
-
'on:loadstart'?: import("svelte/elements").EventHandler<Event
|
|
156
|
-
'on:pause'?: import("svelte/elements").EventHandler<Event
|
|
157
|
-
'on:play'?: import("svelte/elements").EventHandler<Event
|
|
158
|
-
'on:playing'?: import("svelte/elements").EventHandler<Event
|
|
159
|
-
'on:progress'?: import("svelte/elements").EventHandler<Event
|
|
160
|
-
'on:ratechange'?: import("svelte/elements").EventHandler<Event
|
|
161
|
-
'on:seeked'?: import("svelte/elements").EventHandler<Event
|
|
162
|
-
'on:seeking'?: import("svelte/elements").EventHandler<Event
|
|
163
|
-
'on:stalled'?: import("svelte/elements").EventHandler<Event
|
|
164
|
-
'on:suspend'?: import("svelte/elements").EventHandler<Event
|
|
165
|
-
'on:timeupdate'?: import("svelte/elements").EventHandler<Event
|
|
166
|
-
'on:volumechange'?: import("svelte/elements").EventHandler<Event
|
|
167
|
-
'on:waiting'?: import("svelte/elements").EventHandler<Event
|
|
138
|
+
'on:abort'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
139
|
+
'on:canplay'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
140
|
+
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
141
|
+
'on:cuechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
142
|
+
'on:durationchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
143
|
+
'on:emptied'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
144
|
+
'on:encrypted'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
145
|
+
'on:ended'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
146
|
+
'on:loadeddata'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
147
|
+
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
148
|
+
'on:loadstart'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
149
|
+
'on:pause'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
150
|
+
'on:play'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
151
|
+
'on:playing'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
152
|
+
'on:progress'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
153
|
+
'on:ratechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
154
|
+
'on:seeked'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
155
|
+
'on:seeking'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
156
|
+
'on:stalled'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
157
|
+
'on:suspend'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
158
|
+
'on:timeupdate'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
159
|
+
'on:volumechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
160
|
+
'on:waiting'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
168
161
|
'on:auxclick'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
169
162
|
'on:click'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
170
163
|
'on:contextmenu'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
@@ -184,9 +177,9 @@ declare const __propDef: {
|
|
|
184
177
|
'on:mouseout'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
185
178
|
'on:mouseover'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
186
179
|
'on:mouseup'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
187
|
-
'on:select'?: import("svelte/elements").EventHandler<Event
|
|
188
|
-
'on:selectionchange'?: import("svelte/elements").EventHandler<Event
|
|
189
|
-
'on:selectstart'?: import("svelte/elements").EventHandler<Event
|
|
180
|
+
'on:select'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
181
|
+
'on:selectionchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
182
|
+
'on:selectstart'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
190
183
|
'on:touchcancel'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
191
184
|
'on:touchend'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
192
185
|
'on:touchmove'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
@@ -217,16 +210,24 @@ declare const __propDef: {
|
|
|
217
210
|
'on:introend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
|
|
218
211
|
'on:message'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
|
|
219
212
|
'on:messageerror'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
|
|
220
|
-
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event
|
|
221
|
-
'on:cancel'?: import("svelte/elements").EventHandler<Event
|
|
222
|
-
'on:close'?: import("svelte/elements").EventHandler<Event
|
|
223
|
-
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event
|
|
224
|
-
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event
|
|
225
|
-
|
|
213
|
+
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
214
|
+
'on:cancel'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
215
|
+
'on:close'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
216
|
+
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
217
|
+
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
218
|
+
disabled?: boolean | null | undefined;
|
|
219
|
+
formaction?: string | null | undefined;
|
|
220
|
+
formenctype?: string | null | undefined;
|
|
221
|
+
formmethod?: string | null | undefined;
|
|
222
|
+
formnovalidate?: boolean | null | undefined;
|
|
223
|
+
formtarget?: string | null | undefined;
|
|
224
|
+
force?: "enter" | "exit" | undefined;
|
|
225
|
+
styled?: boolean | undefined;
|
|
226
|
+
sessionInit?: (XRSessionInit & {
|
|
226
227
|
domOverlay?: {
|
|
227
228
|
root: HTMLElement;
|
|
228
229
|
} | undefined;
|
|
229
|
-
};
|
|
230
|
+
}) | undefined;
|
|
230
231
|
};
|
|
231
232
|
events: {
|
|
232
233
|
click: CustomEvent<{
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
1
|
+
<script
|
|
2
|
+
|
|
3
|
+
context="module"
|
|
4
|
+
>import { T, useThrelte, createRawEventDispatcher, useTask } from "@threlte/core";
|
|
3
5
|
import { isHandTracking, handDispatchers } from "../internal/stores";
|
|
4
6
|
import { left as leftStore, right as rightStore } from "../hooks/useHand";
|
|
5
7
|
import ScenePortal from "./internal/ScenePortal.svelte";
|
|
@@ -22,18 +24,21 @@ $:
|
|
|
22
24
|
$:
|
|
23
25
|
handDispatchers[$handedness].set(dispatch);
|
|
24
26
|
let children;
|
|
25
|
-
const { start, stop } =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
const { start, stop } = useTask(
|
|
28
|
+
() => {
|
|
29
|
+
const frame = xr.getFrame();
|
|
30
|
+
const joint = inputSource.get("wrist");
|
|
31
|
+
if (joint === void 0 || space === null)
|
|
32
|
+
return;
|
|
33
|
+
const pose = frame.getJointPose?.(joint, space);
|
|
34
|
+
if (pose === void 0 || pose === null)
|
|
35
|
+
return;
|
|
36
|
+
const { position, orientation } = pose.transform;
|
|
37
|
+
children.position.set(position.x, position.y, position.z);
|
|
38
|
+
children.quaternion.set(orientation.x, orientation.y, orientation.z, orientation.w);
|
|
39
|
+
},
|
|
40
|
+
{ autoStart: false }
|
|
41
|
+
);
|
|
37
42
|
$:
|
|
38
43
|
if ($isHandTracking && ($$slots.wrist || $$slots.default) && inputSource) {
|
|
39
44
|
start();
|
|
@@ -57,7 +62,7 @@ $:
|
|
|
57
62
|
|
|
58
63
|
{#if $$slots['target-ray'] !== undefined}
|
|
59
64
|
<T is={$store.targetRay}>
|
|
60
|
-
<slot name=
|
|
65
|
+
<slot name="target-ray" />
|
|
61
66
|
</T>
|
|
62
67
|
{/if}
|
|
63
68
|
{/if}
|
|
@@ -65,7 +70,7 @@ $:
|
|
|
65
70
|
{#if $isHandTracking}
|
|
66
71
|
<ScenePortal>
|
|
67
72
|
<T.Group bind:ref={children}>
|
|
68
|
-
<slot name=
|
|
73
|
+
<slot name="wrist" />
|
|
69
74
|
<slot />
|
|
70
75
|
</T.Group>
|
|
71
76
|
</ScenePortal>
|
|
@@ -1,28 +1,22 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
1
2
|
import { SvelteComponent } from "svelte";
|
|
2
3
|
declare const __propDef: {
|
|
3
4
|
props: {
|
|
4
|
-
force?: "enter" | "exit";
|
|
5
|
-
styled?: boolean;
|
|
6
|
-
form?: string | null | undefined;
|
|
7
|
-
radiogroup?: string | null | undefined;
|
|
8
5
|
name?: string | null | undefined;
|
|
6
|
+
type?: "button" | "submit" | "reset" | null | undefined;
|
|
9
7
|
style?: string | null | undefined;
|
|
10
|
-
|
|
11
|
-
|
|
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;
|
|
8
|
+
class?: string | null | undefined;
|
|
9
|
+
typeof?: string | null | undefined;
|
|
17
10
|
value?: string | number | string[] | null | undefined;
|
|
11
|
+
form?: string | null | undefined;
|
|
12
|
+
radiogroup?: string | null | undefined;
|
|
18
13
|
accesskey?: string | null | undefined;
|
|
19
14
|
autofocus?: boolean | null | undefined;
|
|
20
|
-
class?: string | null | undefined;
|
|
21
15
|
contenteditable?: import("svelte/elements").Booleanish | "inherit" | null | undefined;
|
|
22
16
|
contextmenu?: string | null | undefined;
|
|
23
17
|
dir?: string | null | undefined;
|
|
24
18
|
draggable?: import("svelte/elements").Booleanish | null | undefined;
|
|
25
|
-
enterkeyhint?: "
|
|
19
|
+
enterkeyhint?: "search" | "done" | "enter" | "go" | "next" | "previous" | "send" | null | undefined;
|
|
26
20
|
hidden?: boolean | null | undefined;
|
|
27
21
|
id?: string | null | undefined;
|
|
28
22
|
lang?: string | null | undefined;
|
|
@@ -41,7 +35,6 @@ declare const __propDef: {
|
|
|
41
35
|
prefix?: string | null | undefined;
|
|
42
36
|
property?: string | null | undefined;
|
|
43
37
|
resource?: string | null | undefined;
|
|
44
|
-
typeof?: string | null | undefined;
|
|
45
38
|
vocab?: string | null | undefined;
|
|
46
39
|
autocapitalize?: string | null | undefined;
|
|
47
40
|
autocorrect?: string | null | undefined;
|
|
@@ -54,13 +47,13 @@ declare const __propDef: {
|
|
|
54
47
|
itemref?: string | null | undefined;
|
|
55
48
|
results?: number | null | undefined;
|
|
56
49
|
security?: string | null | undefined;
|
|
57
|
-
unselectable?: "
|
|
58
|
-
inputmode?: "search" | "
|
|
50
|
+
unselectable?: "off" | "on" | null | undefined;
|
|
51
|
+
inputmode?: "search" | "numeric" | "decimal" | "none" | "text" | "tel" | "url" | "email" | null | undefined;
|
|
59
52
|
is?: string | null | undefined;
|
|
60
53
|
'bind:innerHTML'?: string | null | undefined;
|
|
61
54
|
'bind:textContent'?: string | null | undefined;
|
|
62
55
|
'bind:innerText'?: string | null | undefined;
|
|
63
|
-
'bind:contentRect'?:
|
|
56
|
+
'bind:contentRect'?: any;
|
|
64
57
|
'bind:contentBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
65
58
|
'bind:borderBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
66
59
|
'bind:devicePixelContentBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
@@ -72,9 +65,9 @@ declare const __propDef: {
|
|
|
72
65
|
'data-sveltekit-replacestate'?: true | "" | "off" | null | undefined;
|
|
73
66
|
'aria-activedescendant'?: string | null | undefined;
|
|
74
67
|
'aria-atomic'?: import("svelte/elements").Booleanish | null | undefined;
|
|
75
|
-
'aria-autocomplete'?: "
|
|
68
|
+
'aria-autocomplete'?: "none" | "inline" | "list" | "both" | null | undefined;
|
|
76
69
|
'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
|
|
77
|
-
'aria-checked'?: boolean | "
|
|
70
|
+
'aria-checked'?: boolean | "false" | "true" | "mixed" | null | undefined;
|
|
78
71
|
'aria-colcount'?: number | null | undefined;
|
|
79
72
|
'aria-colindex'?: number | null | undefined;
|
|
80
73
|
'aria-colspan'?: number | null | undefined;
|
|
@@ -88,7 +81,7 @@ declare const __propDef: {
|
|
|
88
81
|
'aria-expanded'?: import("svelte/elements").Booleanish | null | undefined;
|
|
89
82
|
'aria-flowto'?: string | null | undefined;
|
|
90
83
|
'aria-grabbed'?: import("svelte/elements").Booleanish | null | undefined;
|
|
91
|
-
'aria-haspopup'?: import("svelte/elements").Booleanish | "
|
|
84
|
+
'aria-haspopup'?: import("svelte/elements").Booleanish | "menu" | "listbox" | "tree" | "grid" | "dialog" | null | undefined;
|
|
92
85
|
'aria-hidden'?: import("svelte/elements").Booleanish | null | undefined;
|
|
93
86
|
'aria-invalid'?: import("svelte/elements").Booleanish | "grammar" | "spelling" | null | undefined;
|
|
94
87
|
'aria-keyshortcuts'?: string | null | undefined;
|
|
@@ -103,9 +96,9 @@ declare const __propDef: {
|
|
|
103
96
|
'aria-owns'?: string | null | undefined;
|
|
104
97
|
'aria-placeholder'?: string | null | undefined;
|
|
105
98
|
'aria-posinset'?: number | null | undefined;
|
|
106
|
-
'aria-pressed'?: boolean | "
|
|
99
|
+
'aria-pressed'?: boolean | "false" | "true" | "mixed" | null | undefined;
|
|
107
100
|
'aria-readonly'?: import("svelte/elements").Booleanish | null | undefined;
|
|
108
|
-
'aria-relevant'?: "
|
|
101
|
+
'aria-relevant'?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | null | undefined;
|
|
109
102
|
'aria-required'?: import("svelte/elements").Booleanish | null | undefined;
|
|
110
103
|
'aria-roledescription'?: string | null | undefined;
|
|
111
104
|
'aria-rowcount'?: number | null | undefined;
|
|
@@ -113,7 +106,7 @@ declare const __propDef: {
|
|
|
113
106
|
'aria-rowspan'?: number | null | undefined;
|
|
114
107
|
'aria-selected'?: import("svelte/elements").Booleanish | null | undefined;
|
|
115
108
|
'aria-setsize'?: number | null | undefined;
|
|
116
|
-
'aria-sort'?: "
|
|
109
|
+
'aria-sort'?: "other" | "none" | "ascending" | "descending" | null | undefined;
|
|
117
110
|
'aria-valuemax'?: number | null | undefined;
|
|
118
111
|
'aria-valuemin'?: number | null | undefined;
|
|
119
112
|
'aria-valuenow'?: number | null | undefined;
|
|
@@ -133,37 +126,37 @@ declare const __propDef: {
|
|
|
133
126
|
'on:input'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
|
|
134
127
|
'on:reset'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
|
|
135
128
|
'on:submit'?: import("svelte/elements").EventHandler<SubmitEvent, HTMLButtonElement> | null | undefined;
|
|
136
|
-
'on:invalid'?: import("svelte/elements").EventHandler<Event
|
|
129
|
+
'on:invalid'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
137
130
|
'on:formdata'?: import("svelte/elements").EventHandler<FormDataEvent, HTMLButtonElement> | null | undefined;
|
|
138
|
-
'on:load'?: import("svelte/elements").EventHandler<Event
|
|
139
|
-
'on:error'?: import("svelte/elements").EventHandler<Event
|
|
140
|
-
'on:toggle'?: import("svelte/elements").EventHandler<Event
|
|
131
|
+
'on:load'?: import("svelte/elements").EventHandler<Event<EventTarget>, Element> | null | undefined;
|
|
132
|
+
'on:error'?: import("svelte/elements").EventHandler<Event<EventTarget>, Element> | null | undefined;
|
|
133
|
+
'on:toggle'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
141
134
|
'on:keydown'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
142
135
|
'on:keypress'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
143
136
|
'on:keyup'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
144
|
-
'on:abort'?: import("svelte/elements").EventHandler<Event
|
|
145
|
-
'on:canplay'?: import("svelte/elements").EventHandler<Event
|
|
146
|
-
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event
|
|
147
|
-
'on:cuechange'?: import("svelte/elements").EventHandler<Event
|
|
148
|
-
'on:durationchange'?: import("svelte/elements").EventHandler<Event
|
|
149
|
-
'on:emptied'?: import("svelte/elements").EventHandler<Event
|
|
150
|
-
'on:encrypted'?: import("svelte/elements").EventHandler<Event
|
|
151
|
-
'on:ended'?: import("svelte/elements").EventHandler<Event
|
|
152
|
-
'on:loadeddata'?: import("svelte/elements").EventHandler<Event
|
|
153
|
-
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event
|
|
154
|
-
'on:loadstart'?: import("svelte/elements").EventHandler<Event
|
|
155
|
-
'on:pause'?: import("svelte/elements").EventHandler<Event
|
|
156
|
-
'on:play'?: import("svelte/elements").EventHandler<Event
|
|
157
|
-
'on:playing'?: import("svelte/elements").EventHandler<Event
|
|
158
|
-
'on:progress'?: import("svelte/elements").EventHandler<Event
|
|
159
|
-
'on:ratechange'?: import("svelte/elements").EventHandler<Event
|
|
160
|
-
'on:seeked'?: import("svelte/elements").EventHandler<Event
|
|
161
|
-
'on:seeking'?: import("svelte/elements").EventHandler<Event
|
|
162
|
-
'on:stalled'?: import("svelte/elements").EventHandler<Event
|
|
163
|
-
'on:suspend'?: import("svelte/elements").EventHandler<Event
|
|
164
|
-
'on:timeupdate'?: import("svelte/elements").EventHandler<Event
|
|
165
|
-
'on:volumechange'?: import("svelte/elements").EventHandler<Event
|
|
166
|
-
'on:waiting'?: import("svelte/elements").EventHandler<Event
|
|
137
|
+
'on:abort'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
138
|
+
'on:canplay'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
139
|
+
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
140
|
+
'on:cuechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
141
|
+
'on:durationchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
142
|
+
'on:emptied'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
143
|
+
'on:encrypted'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
144
|
+
'on:ended'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
145
|
+
'on:loadeddata'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
146
|
+
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
147
|
+
'on:loadstart'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
148
|
+
'on:pause'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
149
|
+
'on:play'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
150
|
+
'on:playing'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
151
|
+
'on:progress'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
152
|
+
'on:ratechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
153
|
+
'on:seeked'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
154
|
+
'on:seeking'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
155
|
+
'on:stalled'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
156
|
+
'on:suspend'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
157
|
+
'on:timeupdate'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
158
|
+
'on:volumechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
159
|
+
'on:waiting'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
167
160
|
'on:auxclick'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
168
161
|
'on:click'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
169
162
|
'on:contextmenu'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
@@ -183,9 +176,9 @@ declare const __propDef: {
|
|
|
183
176
|
'on:mouseout'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
184
177
|
'on:mouseover'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
185
178
|
'on:mouseup'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
186
|
-
'on:select'?: import("svelte/elements").EventHandler<Event
|
|
187
|
-
'on:selectionchange'?: import("svelte/elements").EventHandler<Event
|
|
188
|
-
'on:selectstart'?: import("svelte/elements").EventHandler<Event
|
|
179
|
+
'on:select'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
180
|
+
'on:selectionchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
181
|
+
'on:selectstart'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
189
182
|
'on:touchcancel'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
190
183
|
'on:touchend'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
191
184
|
'on:touchmove'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
@@ -216,11 +209,19 @@ declare const __propDef: {
|
|
|
216
209
|
'on:introend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
|
|
217
210
|
'on:message'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
|
|
218
211
|
'on:messageerror'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
|
|
219
|
-
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event
|
|
220
|
-
'on:cancel'?: import("svelte/elements").EventHandler<Event
|
|
221
|
-
'on:close'?: import("svelte/elements").EventHandler<Event
|
|
222
|
-
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event
|
|
223
|
-
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event
|
|
212
|
+
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
213
|
+
'on:cancel'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
214
|
+
'on:close'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
215
|
+
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
216
|
+
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
217
|
+
disabled?: boolean | null | undefined;
|
|
218
|
+
formaction?: string | null | undefined;
|
|
219
|
+
formenctype?: string | null | undefined;
|
|
220
|
+
formmethod?: string | null | undefined;
|
|
221
|
+
formnovalidate?: boolean | null | undefined;
|
|
222
|
+
formtarget?: string | null | undefined;
|
|
223
|
+
force?: "enter" | "exit" | undefined;
|
|
224
|
+
styled?: boolean | undefined;
|
|
224
225
|
};
|
|
225
226
|
events: {
|
|
226
227
|
click: CustomEvent<{
|
|
@@ -34,9 +34,9 @@ export let foveation = 1;
|
|
|
34
34
|
export let frameRate = void 0;
|
|
35
35
|
export let referenceSpace = "local-floor";
|
|
36
36
|
const dispatch = createRawEventDispatcher();
|
|
37
|
-
const { renderer,
|
|
37
|
+
const { renderer, renderMode } = useThrelte();
|
|
38
38
|
const { xr } = renderer;
|
|
39
|
-
let
|
|
39
|
+
let originalRenderMode = $renderMode;
|
|
40
40
|
setupRaf();
|
|
41
41
|
setupHeadset();
|
|
42
42
|
setupControllers();
|
|
@@ -84,10 +84,10 @@ watch(session, (currentSession) => {
|
|
|
84
84
|
});
|
|
85
85
|
watch(isPresenting, (presenting) => {
|
|
86
86
|
if (presenting) {
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
originalRenderMode = renderMode.current;
|
|
88
|
+
renderMode.set("always");
|
|
89
89
|
} else {
|
|
90
|
-
|
|
90
|
+
renderMode.set(originalRenderMode);
|
|
91
91
|
}
|
|
92
92
|
});
|
|
93
93
|
onMount(() => {
|
|
@@ -9,7 +9,7 @@ declare const __propDef: {
|
|
|
9
9
|
* 0 = no foveation, full resolution
|
|
10
10
|
*
|
|
11
11
|
* 1 = maximum foveation, the edges render at lower resolution
|
|
12
|
-
*/ foveation?: number;
|
|
12
|
+
*/ foveation?: number | undefined;
|
|
13
13
|
/**
|
|
14
14
|
* The target framerate for the XRSystem. Smaller rates give more CPU headroom at the cost of responsiveness.
|
|
15
15
|
* Recommended range is `72`-`120`. Default is unset and left to the device.
|
|
@@ -18,7 +18,7 @@ declare const __propDef: {
|
|
|
18
18
|
* headroom based on your experience.
|
|
19
19
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API/Rendering#refresh_rate_and_frame_rate
|
|
20
20
|
*/ frameRate?: number | undefined;
|
|
21
|
-
/** Type of WebXR reference space to use. Default is `local-floor` */ referenceSpace?: XRReferenceSpaceType;
|
|
21
|
+
/** Type of WebXR reference space to use. Default is `local-floor` */ referenceSpace?: XRReferenceSpaceType | undefined;
|
|
22
22
|
};
|
|
23
23
|
slots: {
|
|
24
24
|
default: {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
1
2
|
/// <reference types="webxr" />
|
|
2
3
|
import { SvelteComponent } from "svelte";
|
|
3
4
|
declare const __propDef: {
|
|
@@ -10,7 +11,7 @@ declare const __propDef: {
|
|
|
10
11
|
formnovalidate?: boolean | null | undefined;
|
|
11
12
|
formtarget?: string | null | undefined;
|
|
12
13
|
name?: string | null | undefined;
|
|
13
|
-
type?: "
|
|
14
|
+
type?: "button" | "submit" | "reset" | null | undefined;
|
|
14
15
|
value?: string | number | string[] | null | undefined;
|
|
15
16
|
accesskey?: string | null | undefined;
|
|
16
17
|
autofocus?: boolean | null | undefined;
|
|
@@ -19,7 +20,7 @@ declare const __propDef: {
|
|
|
19
20
|
contextmenu?: string | null | undefined;
|
|
20
21
|
dir?: string | null | undefined;
|
|
21
22
|
draggable?: import("svelte/elements").Booleanish | null | undefined;
|
|
22
|
-
enterkeyhint?: "
|
|
23
|
+
enterkeyhint?: "search" | "done" | "enter" | "go" | "next" | "previous" | "send" | null | undefined;
|
|
23
24
|
hidden?: boolean | null | undefined;
|
|
24
25
|
id?: string | null | undefined;
|
|
25
26
|
lang?: string | null | undefined;
|
|
@@ -53,13 +54,13 @@ declare const __propDef: {
|
|
|
53
54
|
itemref?: string | null | undefined;
|
|
54
55
|
results?: number | null | undefined;
|
|
55
56
|
security?: string | null | undefined;
|
|
56
|
-
unselectable?: "
|
|
57
|
-
inputmode?: "search" | "
|
|
57
|
+
unselectable?: "off" | "on" | null | undefined;
|
|
58
|
+
inputmode?: "search" | "numeric" | "decimal" | "none" | "text" | "tel" | "url" | "email" | null | undefined;
|
|
58
59
|
is?: string | null | undefined;
|
|
59
60
|
'bind:innerHTML'?: string | null | undefined;
|
|
60
61
|
'bind:textContent'?: string | null | undefined;
|
|
61
62
|
'bind:innerText'?: string | null | undefined;
|
|
62
|
-
'bind:contentRect'?:
|
|
63
|
+
'bind:contentRect'?: any;
|
|
63
64
|
'bind:contentBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
64
65
|
'bind:borderBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
65
66
|
'bind:devicePixelContentBoxSize'?: ResizeObserverSize[] | null | undefined;
|
|
@@ -71,9 +72,9 @@ declare const __propDef: {
|
|
|
71
72
|
'data-sveltekit-replacestate'?: true | "" | "off" | null | undefined;
|
|
72
73
|
'aria-activedescendant'?: string | null | undefined;
|
|
73
74
|
'aria-atomic'?: import("svelte/elements").Booleanish | null | undefined;
|
|
74
|
-
'aria-autocomplete'?: "
|
|
75
|
+
'aria-autocomplete'?: "none" | "inline" | "list" | "both" | null | undefined;
|
|
75
76
|
'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
|
|
76
|
-
'aria-checked'?: boolean | "
|
|
77
|
+
'aria-checked'?: boolean | "false" | "true" | "mixed" | null | undefined;
|
|
77
78
|
'aria-colcount'?: number | null | undefined;
|
|
78
79
|
'aria-colindex'?: number | null | undefined;
|
|
79
80
|
'aria-colspan'?: number | null | undefined;
|
|
@@ -87,7 +88,7 @@ declare const __propDef: {
|
|
|
87
88
|
'aria-expanded'?: import("svelte/elements").Booleanish | null | undefined;
|
|
88
89
|
'aria-flowto'?: string | null | undefined;
|
|
89
90
|
'aria-grabbed'?: import("svelte/elements").Booleanish | null | undefined;
|
|
90
|
-
'aria-haspopup'?: import("svelte/elements").Booleanish | "
|
|
91
|
+
'aria-haspopup'?: import("svelte/elements").Booleanish | "menu" | "listbox" | "tree" | "grid" | "dialog" | null | undefined;
|
|
91
92
|
'aria-hidden'?: import("svelte/elements").Booleanish | null | undefined;
|
|
92
93
|
'aria-invalid'?: import("svelte/elements").Booleanish | "grammar" | "spelling" | null | undefined;
|
|
93
94
|
'aria-keyshortcuts'?: string | null | undefined;
|
|
@@ -102,9 +103,9 @@ declare const __propDef: {
|
|
|
102
103
|
'aria-owns'?: string | null | undefined;
|
|
103
104
|
'aria-placeholder'?: string | null | undefined;
|
|
104
105
|
'aria-posinset'?: number | null | undefined;
|
|
105
|
-
'aria-pressed'?: boolean | "
|
|
106
|
+
'aria-pressed'?: boolean | "false" | "true" | "mixed" | null | undefined;
|
|
106
107
|
'aria-readonly'?: import("svelte/elements").Booleanish | null | undefined;
|
|
107
|
-
'aria-relevant'?: "
|
|
108
|
+
'aria-relevant'?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | null | undefined;
|
|
108
109
|
'aria-required'?: import("svelte/elements").Booleanish | null | undefined;
|
|
109
110
|
'aria-roledescription'?: string | null | undefined;
|
|
110
111
|
'aria-rowcount'?: number | null | undefined;
|
|
@@ -112,7 +113,7 @@ declare const __propDef: {
|
|
|
112
113
|
'aria-rowspan'?: number | null | undefined;
|
|
113
114
|
'aria-selected'?: import("svelte/elements").Booleanish | null | undefined;
|
|
114
115
|
'aria-setsize'?: number | null | undefined;
|
|
115
|
-
'aria-sort'?: "
|
|
116
|
+
'aria-sort'?: "other" | "none" | "ascending" | "descending" | null | undefined;
|
|
116
117
|
'aria-valuemax'?: number | null | undefined;
|
|
117
118
|
'aria-valuemin'?: number | null | undefined;
|
|
118
119
|
'aria-valuenow'?: number | null | undefined;
|
|
@@ -132,37 +133,37 @@ declare const __propDef: {
|
|
|
132
133
|
'on:input'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
|
|
133
134
|
'on:reset'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
|
|
134
135
|
'on:submit'?: import("svelte/elements").EventHandler<SubmitEvent, HTMLButtonElement> | null | undefined;
|
|
135
|
-
'on:invalid'?: import("svelte/elements").EventHandler<Event
|
|
136
|
+
'on:invalid'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
136
137
|
'on:formdata'?: import("svelte/elements").EventHandler<FormDataEvent, HTMLButtonElement> | null | undefined;
|
|
137
|
-
'on:load'?: import("svelte/elements").EventHandler<Event
|
|
138
|
-
'on:error'?: import("svelte/elements").EventHandler<Event
|
|
139
|
-
'on:toggle'?: import("svelte/elements").EventHandler<Event
|
|
138
|
+
'on:load'?: import("svelte/elements").EventHandler<Event<EventTarget>, Element> | null | undefined;
|
|
139
|
+
'on:error'?: import("svelte/elements").EventHandler<Event<EventTarget>, Element> | null | undefined;
|
|
140
|
+
'on:toggle'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
140
141
|
'on:keydown'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
141
142
|
'on:keypress'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
142
143
|
'on:keyup'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
|
|
143
|
-
'on:abort'?: import("svelte/elements").EventHandler<Event
|
|
144
|
-
'on:canplay'?: import("svelte/elements").EventHandler<Event
|
|
145
|
-
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event
|
|
146
|
-
'on:cuechange'?: import("svelte/elements").EventHandler<Event
|
|
147
|
-
'on:durationchange'?: import("svelte/elements").EventHandler<Event
|
|
148
|
-
'on:emptied'?: import("svelte/elements").EventHandler<Event
|
|
149
|
-
'on:encrypted'?: import("svelte/elements").EventHandler<Event
|
|
150
|
-
'on:ended'?: import("svelte/elements").EventHandler<Event
|
|
151
|
-
'on:loadeddata'?: import("svelte/elements").EventHandler<Event
|
|
152
|
-
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event
|
|
153
|
-
'on:loadstart'?: import("svelte/elements").EventHandler<Event
|
|
154
|
-
'on:pause'?: import("svelte/elements").EventHandler<Event
|
|
155
|
-
'on:play'?: import("svelte/elements").EventHandler<Event
|
|
156
|
-
'on:playing'?: import("svelte/elements").EventHandler<Event
|
|
157
|
-
'on:progress'?: import("svelte/elements").EventHandler<Event
|
|
158
|
-
'on:ratechange'?: import("svelte/elements").EventHandler<Event
|
|
159
|
-
'on:seeked'?: import("svelte/elements").EventHandler<Event
|
|
160
|
-
'on:seeking'?: import("svelte/elements").EventHandler<Event
|
|
161
|
-
'on:stalled'?: import("svelte/elements").EventHandler<Event
|
|
162
|
-
'on:suspend'?: import("svelte/elements").EventHandler<Event
|
|
163
|
-
'on:timeupdate'?: import("svelte/elements").EventHandler<Event
|
|
164
|
-
'on:volumechange'?: import("svelte/elements").EventHandler<Event
|
|
165
|
-
'on:waiting'?: import("svelte/elements").EventHandler<Event
|
|
144
|
+
'on:abort'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
145
|
+
'on:canplay'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
146
|
+
'on:canplaythrough'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
147
|
+
'on:cuechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
148
|
+
'on:durationchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
149
|
+
'on:emptied'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
150
|
+
'on:encrypted'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
151
|
+
'on:ended'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
152
|
+
'on:loadeddata'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
153
|
+
'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
154
|
+
'on:loadstart'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
155
|
+
'on:pause'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
156
|
+
'on:play'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
157
|
+
'on:playing'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
158
|
+
'on:progress'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
159
|
+
'on:ratechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
160
|
+
'on:seeked'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
161
|
+
'on:seeking'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
162
|
+
'on:stalled'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
163
|
+
'on:suspend'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
164
|
+
'on:timeupdate'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
165
|
+
'on:volumechange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
166
|
+
'on:waiting'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
166
167
|
'on:auxclick'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
167
168
|
'on:click'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
168
169
|
'on:contextmenu'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
@@ -182,9 +183,9 @@ declare const __propDef: {
|
|
|
182
183
|
'on:mouseout'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
183
184
|
'on:mouseover'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
184
185
|
'on:mouseup'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
|
|
185
|
-
'on:select'?: import("svelte/elements").EventHandler<Event
|
|
186
|
-
'on:selectionchange'?: import("svelte/elements").EventHandler<Event
|
|
187
|
-
'on:selectstart'?: import("svelte/elements").EventHandler<Event
|
|
186
|
+
'on:select'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
187
|
+
'on:selectionchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
188
|
+
'on:selectstart'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
188
189
|
'on:touchcancel'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
189
190
|
'on:touchend'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
190
191
|
'on:touchmove'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
|
|
@@ -215,19 +216,19 @@ declare const __propDef: {
|
|
|
215
216
|
'on:introend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
|
|
216
217
|
'on:message'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
|
|
217
218
|
'on:messageerror'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
|
|
218
|
-
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event
|
|
219
|
-
'on:cancel'?: import("svelte/elements").EventHandler<Event
|
|
220
|
-
'on:close'?: import("svelte/elements").EventHandler<Event
|
|
221
|
-
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event
|
|
222
|
-
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event
|
|
219
|
+
'on:visibilitychange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
220
|
+
'on:cancel'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
221
|
+
'on:close'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
222
|
+
'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
223
|
+
'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event<EventTarget>, HTMLButtonElement> | null | undefined;
|
|
223
224
|
mode: XRSessionMode;
|
|
224
|
-
sessionInit?: XRSessionInit & {
|
|
225
|
+
sessionInit?: (XRSessionInit & {
|
|
225
226
|
domOverlay?: {
|
|
226
227
|
root: HTMLElement;
|
|
227
228
|
} | undefined;
|
|
228
|
-
};
|
|
229
|
-
force?:
|
|
230
|
-
styled?: boolean;
|
|
229
|
+
}) | undefined;
|
|
230
|
+
force?: "enter" | "exit" | undefined;
|
|
231
|
+
styled?: boolean | undefined;
|
|
231
232
|
};
|
|
232
233
|
events: {
|
|
233
234
|
click: CustomEvent<{
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
1
2
|
import { SvelteComponent } from "svelte";
|
|
2
3
|
import { type ColorRepresentation } from 'three';
|
|
3
4
|
declare const __propDef: {
|
|
4
5
|
props: {
|
|
5
|
-
color?: ColorRepresentation;
|
|
6
|
-
size?: number;
|
|
7
|
-
thickness?: number;
|
|
6
|
+
color?: ColorRepresentation | undefined;
|
|
7
|
+
size?: number | undefined;
|
|
8
|
+
thickness?: number | undefined;
|
|
8
9
|
};
|
|
9
10
|
events: {
|
|
10
11
|
[evt: string]: CustomEvent<any>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script>import { Group, Vector3, Matrix3 } from "three";
|
|
2
|
-
import { T,
|
|
2
|
+
import { T, useTask } from "@threlte/core";
|
|
3
3
|
import { pointerIntersection, pointerState } from "../../internal/stores";
|
|
4
4
|
import Cursor from "./Cursor.svelte";
|
|
5
5
|
export let handedness;
|
|
@@ -11,7 +11,7 @@ $:
|
|
|
11
11
|
hovering = $pointerState[handedness].hovering;
|
|
12
12
|
$:
|
|
13
13
|
intersection = pointerIntersection[handedness];
|
|
14
|
-
const { start, stop } =
|
|
14
|
+
const { start, stop } = useTask(
|
|
15
15
|
() => {
|
|
16
16
|
if (intersection.current === void 0)
|
|
17
17
|
return;
|
|
@@ -24,7 +24,7 @@ const { start, stop } = useFrame(
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
|
|
27
|
+
autoStart: false
|
|
28
28
|
}
|
|
29
29
|
);
|
|
30
30
|
$:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script>import { spring } from "svelte/motion";
|
|
2
2
|
import { Group, Matrix3, Vector3 } from "three";
|
|
3
|
-
import { T,
|
|
3
|
+
import { T, useTask } from "@threlte/core";
|
|
4
4
|
import { teleportIntersection } from "../../internal/stores";
|
|
5
5
|
import Cursor from "./Cursor.svelte";
|
|
6
6
|
export let handedness;
|
|
@@ -10,7 +10,7 @@ const normalMatrix = new Matrix3();
|
|
|
10
10
|
const worldNormal = new Vector3();
|
|
11
11
|
$:
|
|
12
12
|
intersection = teleportIntersection[handedness];
|
|
13
|
-
const { start, stop } =
|
|
13
|
+
const { start, stop } = useTask(
|
|
14
14
|
() => {
|
|
15
15
|
if (intersection.current === void 0)
|
|
16
16
|
return;
|
|
@@ -23,7 +23,7 @@ const { start, stop } = useFrame(
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
|
|
26
|
+
autoStart: false
|
|
27
27
|
}
|
|
28
28
|
);
|
|
29
29
|
const size = spring(0.1, { stiffness: 0.2 });
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Line2 } from "three/examples/jsm/lines/Line2";
|
|
3
3
|
import { LineGeometry } from "three/examples/jsm/lines/LineGeometry";
|
|
4
4
|
import { LineMaterial } from "three/examples/jsm/lines/LineMaterial";
|
|
5
|
-
import { T,
|
|
5
|
+
import { T, useTask } from "@threlte/core";
|
|
6
6
|
import { teleportIntersection } from "../../internal/stores";
|
|
7
7
|
export let handedness;
|
|
8
8
|
export let targetRay;
|
|
@@ -41,11 +41,11 @@ const setCurvePoints = (alpha = 0.3) => {
|
|
|
41
41
|
}
|
|
42
42
|
lineGeometry.setPositions(positions);
|
|
43
43
|
};
|
|
44
|
-
const { start, stop } =
|
|
44
|
+
const { start, stop } = useTask(
|
|
45
45
|
() => {
|
|
46
46
|
setCurvePoints();
|
|
47
47
|
},
|
|
48
|
-
{
|
|
48
|
+
{ autoStart: false }
|
|
49
49
|
);
|
|
50
50
|
$:
|
|
51
51
|
if ($intersection === void 0) {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { currentWritable,
|
|
1
|
+
import { currentWritable, useTask, useThrelte } from '@threlte/core';
|
|
2
2
|
import { useHand } from './useHand';
|
|
3
3
|
/**
|
|
4
4
|
* Provides a reference to a requested hand joint, once available.
|
|
5
5
|
*/
|
|
6
6
|
export const useHandJoint = (handedness, joint) => {
|
|
7
|
+
const { invalidate } = useThrelte();
|
|
7
8
|
const jointSpaceStore = currentWritable(undefined);
|
|
8
9
|
const xrhand = useHand(handedness);
|
|
9
|
-
const { stop } =
|
|
10
|
+
const { stop } = useTask(() => {
|
|
10
11
|
const jointSpace = xrhand.current?.hand.joints[joint];
|
|
11
12
|
// The joint radius is a good indicator that the joint is ready
|
|
12
13
|
if (jointSpace?.jointRadius !== undefined) {
|
|
@@ -14,6 +15,6 @@ export const useHandJoint = (handedness, joint) => {
|
|
|
14
15
|
invalidate();
|
|
15
16
|
stop();
|
|
16
17
|
}
|
|
17
|
-
}, {
|
|
18
|
+
}, { autoInvalidate: false });
|
|
18
19
|
return jointSpaceStore;
|
|
19
20
|
};
|
package/dist/hooks/useHitTest.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Matrix4 } from 'three';
|
|
2
|
-
import { useThrelte,
|
|
2
|
+
import { useThrelte, useTask, watch, currentWritable } from '@threlte/core';
|
|
3
3
|
import { useXR } from './useXR';
|
|
4
4
|
import { useController } from './useController';
|
|
5
5
|
/**
|
|
@@ -18,7 +18,7 @@ export const useHitTest = (hitTestCallback, options = {}) => {
|
|
|
18
18
|
const { xr } = useThrelte().renderer;
|
|
19
19
|
const xrState = useXR();
|
|
20
20
|
const hitMatrix = new Matrix4();
|
|
21
|
-
|
|
21
|
+
const hitTestSource = currentWritable(undefined);
|
|
22
22
|
if (source === 'viewer') {
|
|
23
23
|
watch(xrState.session, async (session) => {
|
|
24
24
|
if (session === undefined) {
|
|
@@ -49,7 +49,7 @@ export const useHitTest = (hitTestCallback, options = {}) => {
|
|
|
49
49
|
hitTestSource.set(await session.requestHitTestSource?.({ space }));
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
|
-
const { start, stop } =
|
|
52
|
+
const { start, stop } = useTask(() => {
|
|
53
53
|
const referenceSpace = xr.getReferenceSpace();
|
|
54
54
|
if (referenceSpace === null || hitTestSource.current === undefined) {
|
|
55
55
|
return hitTestCallback(hitMatrix, undefined);
|
|
@@ -61,7 +61,7 @@ export const useHitTest = (hitTestCallback, options = {}) => {
|
|
|
61
61
|
}
|
|
62
62
|
hitMatrix.fromArray(pose.transform.matrix);
|
|
63
63
|
hitTestCallback(hitMatrix, hit);
|
|
64
|
-
}, {
|
|
64
|
+
}, { autoStart: false });
|
|
65
65
|
watch([xrState.isPresenting, hitTestSource], ([isPresenting, testSource]) => {
|
|
66
66
|
if (!isPresenting) {
|
|
67
67
|
stop();
|
package/dist/index.d.ts
CHANGED
|
@@ -17,4 +17,4 @@ export { useHeadset } from './hooks/useHeadset';
|
|
|
17
17
|
export { useHitTest } from './hooks/useHitTest';
|
|
18
18
|
export { useTeleport } from './hooks/useTeleport';
|
|
19
19
|
export { useXR } from './hooks/useXR';
|
|
20
|
-
export type { XRSessionEventType, XRControllerEventType, XRHandEventType, XRSessionEvent, XRControllerEvent, XRController, XRHand, XRHandEvent
|
|
20
|
+
export type { XRSessionEventType, XRControllerEventType, XRHandEventType, XRSessionEvent, XRControllerEvent, XRController, XRHand, XRHandEvent } from './types';
|
|
@@ -23,7 +23,7 @@ export const setupHands = () => {
|
|
|
23
23
|
if (!hasHands())
|
|
24
24
|
return;
|
|
25
25
|
const handEvent = event;
|
|
26
|
-
const handedness =
|
|
26
|
+
const handedness = 'handedness' in handEvent ? handEvent.handedness : handEvent.data.handedness;
|
|
27
27
|
handDispatchers[handedness]?.current?.(event.type, event);
|
|
28
28
|
};
|
|
29
29
|
function handleConnected(event) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Group } from 'three';
|
|
2
|
-
import { useThrelte,
|
|
2
|
+
import { useThrelte, useTask, watch } from '@threlte/core';
|
|
3
3
|
import { useXR } from '../hooks/useXR';
|
|
4
4
|
export const headset = new Group();
|
|
5
5
|
export const setupHeadset = () => {
|
|
6
6
|
const { renderer, camera } = useThrelte();
|
|
7
7
|
const { xr } = renderer;
|
|
8
|
-
const immersiveFrame =
|
|
8
|
+
const immersiveFrame = useTask(() => {
|
|
9
9
|
const space = xr.getReferenceSpace();
|
|
10
10
|
if (space === null)
|
|
11
11
|
return;
|
|
@@ -17,11 +17,11 @@ export const setupHeadset = () => {
|
|
|
17
17
|
const { position, orientation } = pose.transform;
|
|
18
18
|
headset.position.set(position.x, position.y, position.z);
|
|
19
19
|
headset.quaternion.set(orientation.x, orientation.y, orientation.z, orientation.w);
|
|
20
|
-
}, {
|
|
21
|
-
const nonImmersiveFrame =
|
|
20
|
+
}, { autoStart: false, autoInvalidate: false });
|
|
21
|
+
const nonImmersiveFrame = useTask(() => {
|
|
22
22
|
headset.position.copy(camera.current.position);
|
|
23
23
|
headset.quaternion.copy(camera.current.quaternion);
|
|
24
|
-
}, {
|
|
24
|
+
}, { autoStart: false, autoInvalidate: false });
|
|
25
25
|
watch(useXR().isPresenting, (isPresenting) => {
|
|
26
26
|
if (isPresenting) {
|
|
27
27
|
immersiveFrame.start();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
type UseFixedOptions =
|
|
1
|
+
import { type ThrelteUseTaskOptions } from '@threlte/core';
|
|
2
|
+
type UseFixedOptions = ThrelteUseTaskOptions & {
|
|
3
3
|
fixedStep?: number;
|
|
4
4
|
};
|
|
5
5
|
/**
|
|
6
|
-
* A fixed
|
|
6
|
+
* A fixed useTask, based on https://github.com/threlte/threlte/pull/654
|
|
7
7
|
*
|
|
8
8
|
* @Todo Can be removed if this or a similar feature is merged.
|
|
9
9
|
*/
|
|
10
|
-
export declare const useFixed: (fn: (
|
|
10
|
+
export declare const useFixed: (fn: (delta: number) => void, options: UseFixedOptions) => import("@threlte/core").ThrelteUseTask;
|
|
11
11
|
export {};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useTask } from '@threlte/core';
|
|
2
2
|
/**
|
|
3
|
-
* A fixed
|
|
3
|
+
* A fixed useTask, based on https://github.com/threlte/threlte/pull/654
|
|
4
4
|
*
|
|
5
5
|
* @Todo Can be removed if this or a similar feature is merged.
|
|
6
6
|
*/
|
|
7
7
|
export const useFixed = (fn, options) => {
|
|
8
8
|
let fixedStepTimeAccumulator = 0;
|
|
9
9
|
let fixedStep = options.fixedStep ?? 1 / 60;
|
|
10
|
-
return
|
|
10
|
+
return useTask((delta) => {
|
|
11
11
|
fixedStepTimeAccumulator += delta;
|
|
12
12
|
while (fixedStepTimeAccumulator >= fixedStep) {
|
|
13
13
|
fixedStepTimeAccumulator -= fixedStep;
|
|
14
|
-
fn(
|
|
14
|
+
fn(fixedStep);
|
|
15
15
|
}
|
|
16
16
|
}, options);
|
|
17
17
|
};
|
|
@@ -14,7 +14,7 @@ export const pointerControls = (handedness, options) => {
|
|
|
14
14
|
interactiveObjects: [],
|
|
15
15
|
raycaster: new Raycaster(),
|
|
16
16
|
compute: options?.compute ?? defaultComputeFunction,
|
|
17
|
-
filter: options?.filter
|
|
17
|
+
filter: options?.filter
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
const context = getControlsContext();
|
|
@@ -28,14 +28,14 @@ export const pointerControls = (handedness, options) => {
|
|
|
28
28
|
lastEvent: undefined,
|
|
29
29
|
initialClick: [0, 0, 0],
|
|
30
30
|
initialHits: [],
|
|
31
|
-
hovered: new Map()
|
|
31
|
+
hovered: new Map()
|
|
32
32
|
};
|
|
33
33
|
setHandContext(handedness, ctx);
|
|
34
34
|
setupPointerControls(context, ctx, options?.fixedStep);
|
|
35
35
|
}
|
|
36
36
|
const handContext = getHandContext(handedness);
|
|
37
37
|
watch(handContext.enabled, (enabled) => {
|
|
38
|
-
controlsCounter +=
|
|
38
|
+
controlsCounter += enabled ? 1 : -1;
|
|
39
39
|
pointerState.update((value) => {
|
|
40
40
|
value[handedness].enabled = controlsCounter > 0;
|
|
41
41
|
return value;
|
|
@@ -49,6 +49,6 @@ export const pointerControls = (handedness, options) => {
|
|
|
49
49
|
});
|
|
50
50
|
return {
|
|
51
51
|
enabled: handContext.enabled,
|
|
52
|
-
hovered: handContext.hovered
|
|
52
|
+
hovered: handContext.hovered
|
|
53
53
|
};
|
|
54
54
|
};
|
package/package.json
CHANGED
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@threlte/xr",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"author": "Micheal Parks <michealparks1989@gmail.com> (https://parks.lol)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@sveltejs/adapter-auto": "^2.1.0",
|
|
8
|
-
"@sveltejs/kit": "^1.
|
|
9
|
-
"@sveltejs/package": "^2.2.
|
|
8
|
+
"@sveltejs/kit": "^1.26.0",
|
|
9
|
+
"@sveltejs/package": "^2.2.2",
|
|
10
|
+
"@typescript-eslint/eslint-plugin": "^6.8.0",
|
|
11
|
+
"@typescript-eslint/parser": "^6.8.0",
|
|
12
|
+
"eslint": "^8.51.0",
|
|
13
|
+
"eslint-plugin-svelte": "^2.34.0",
|
|
14
|
+
"svelte-check": "^3.5.2",
|
|
15
|
+
"typescript": "^5.2.2",
|
|
10
16
|
"@types/three": "^0.158.3",
|
|
11
17
|
"autoprefixer": "^10.4.14",
|
|
12
18
|
"postcss": "^8.4.27",
|
|
13
19
|
"publint": "^0.1.16",
|
|
14
20
|
"svelte": "^4.1.1",
|
|
15
|
-
"svelte-check": "^3.4.6",
|
|
16
21
|
"three": "^0.158.0",
|
|
17
22
|
"tslib": "^2.6.0",
|
|
18
|
-
"typescript": "^5.1.6",
|
|
19
23
|
"vite": "^4.4.6",
|
|
20
24
|
"vite-plugin-mkcert": "^1.16.0",
|
|
21
|
-
"@threlte/core": "
|
|
25
|
+
"@threlte/core": "7.0.2"
|
|
22
26
|
},
|
|
23
27
|
"peerDependencies": {
|
|
24
28
|
"svelte": ">=4",
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { Intersection as ThreeIntersection, Object3D, Vector3, Ray, Raycaster, Event } from 'three';
|
|
2
|
-
import type { CurrentWritable } from '@threlte/core';
|
|
3
|
-
import type { ComputeFunction } from './compute';
|
|
4
|
-
export type Properties<T> = Pick<T, {
|
|
5
|
-
[K in keyof T]: T[K] extends (_: any) => any ? never : K;
|
|
6
|
-
}[keyof T]>;
|
|
7
|
-
export interface Intersection extends ThreeIntersection {
|
|
8
|
-
/** The event source (the object which registered the handler) */
|
|
9
|
-
eventObject: Object3D;
|
|
10
|
-
}
|
|
11
|
-
export interface IntersectionEvent extends Intersection {
|
|
12
|
-
/** The event source (the object which registered the handler) */
|
|
13
|
-
eventObject: Object3D;
|
|
14
|
-
/** An array of intersections */
|
|
15
|
-
intersections: Intersection[];
|
|
16
|
-
/** Normalized event coordinates */
|
|
17
|
-
pointer: Vector3;
|
|
18
|
-
/** Delta between first click and this event */
|
|
19
|
-
delta: number;
|
|
20
|
-
/** The ray that pierced it */
|
|
21
|
-
ray: Ray;
|
|
22
|
-
/** stopPropagation will stop underlying handlers from firing */
|
|
23
|
-
stopPropagation: () => void;
|
|
24
|
-
/** The original host event */
|
|
25
|
-
nativeEvent: Event | undefined;
|
|
26
|
-
/** If the event was stopped by calling stopPropagation */
|
|
27
|
-
stopped: boolean;
|
|
28
|
-
}
|
|
29
|
-
export type FilterFunction = (items: Intersection[], state: ControlsContext, handState: HandContext) => Intersection[];
|
|
30
|
-
export type ControlsContext = {
|
|
31
|
-
interactiveObjects: Object3D[];
|
|
32
|
-
raycaster: Raycaster;
|
|
33
|
-
compute: ComputeFunction;
|
|
34
|
-
filter?: FilterFunction | undefined;
|
|
35
|
-
};
|
|
36
|
-
export type HandContext = {
|
|
37
|
-
hand: 'left' | 'right';
|
|
38
|
-
enabled: CurrentWritable<boolean>;
|
|
39
|
-
pointer: CurrentWritable<Vector3>;
|
|
40
|
-
pointerOverTarget: CurrentWritable<boolean>;
|
|
41
|
-
lastEvent: Event | undefined;
|
|
42
|
-
initialClick: [x: number, y: number, z: number];
|
|
43
|
-
initialHits: Object3D[];
|
|
44
|
-
hovered: Map<string, IntersectionEvent>;
|
|
45
|
-
};
|
|
46
|
-
export interface PointerCaptureTarget {
|
|
47
|
-
intersection: Intersection;
|
|
48
|
-
target: Element;
|
|
49
|
-
}
|
|
50
|
-
export type ThrelteXREvents = {
|
|
51
|
-
click: IntersectionEvent;
|
|
52
|
-
contextmenu: IntersectionEvent;
|
|
53
|
-
pointerup: IntersectionEvent;
|
|
54
|
-
pointerdown: IntersectionEvent;
|
|
55
|
-
pointerover: IntersectionEvent;
|
|
56
|
-
pointerout: IntersectionEvent;
|
|
57
|
-
pointerenter: IntersectionEvent;
|
|
58
|
-
pointerleave: IntersectionEvent;
|
|
59
|
-
pointermove: IntersectionEvent;
|
|
60
|
-
pointermissed: IntersectionEvent;
|
|
61
|
-
};
|
|
62
|
-
export declare const events: (keyof ThrelteXREvents)[];
|