@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.
@@ -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
- disabled?: boolean | null | undefined;
12
- formaction?: string | null | undefined;
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?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | null | undefined;
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?: "on" | "off" | null | undefined;
59
- inputmode?: "search" | "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | null | undefined;
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'?: DOMRectReadOnly | null | undefined;
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'?: "inline" | "list" | "none" | "both" | null | undefined;
69
+ 'aria-autocomplete'?: "none" | "inline" | "list" | "both" | null | undefined;
77
70
  'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
78
- 'aria-checked'?: boolean | "true" | "false" | "mixed" | null | undefined;
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 | "dialog" | "grid" | "listbox" | "menu" | "tree" | null | undefined;
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 | "true" | "false" | "mixed" | null | undefined;
100
+ 'aria-pressed'?: boolean | "false" | "true" | "mixed" | null | undefined;
108
101
  'aria-readonly'?: import("svelte/elements").Booleanish | null | undefined;
109
- 'aria-relevant'?: "text" | "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | null | undefined;
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'?: "none" | "ascending" | "descending" | "other" | null | undefined;
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, HTMLButtonElement> | null | undefined;
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, Element> | null | undefined;
140
- 'on:error'?: import("svelte/elements").EventHandler<Event, Element> | null | undefined;
141
- 'on:toggle'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
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, HTMLButtonElement> | null | undefined;
146
- 'on:canplay'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
147
- 'on:canplaythrough'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
148
- 'on:cuechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
149
- 'on:durationchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
150
- 'on:emptied'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
151
- 'on:encrypted'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
152
- 'on:ended'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
153
- 'on:loadeddata'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
154
- 'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
155
- 'on:loadstart'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
156
- 'on:pause'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
157
- 'on:play'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
158
- 'on:playing'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
159
- 'on:progress'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
160
- 'on:ratechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
161
- 'on:seeked'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
162
- 'on:seeking'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
163
- 'on:stalled'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
164
- 'on:suspend'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
165
- 'on:timeupdate'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
166
- 'on:volumechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
167
- 'on:waiting'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
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, HTMLButtonElement> | null | undefined;
188
- 'on:selectionchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
189
- 'on:selectstart'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
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, HTMLButtonElement> | null | undefined;
221
- 'on:cancel'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
222
- 'on:close'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
223
- 'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
224
- 'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
225
- sessionInit?: XRSessionInit & {
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 context='module'>import { Group } from "three";
2
- import { T, useThrelte, createRawEventDispatcher, useFrame } from "@threlte/core";
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 } = useFrame(() => {
26
- const frame = xr.getFrame();
27
- const joint = inputSource.get("wrist");
28
- if (joint === void 0 || space === null)
29
- return;
30
- const pose = frame.getJointPose?.(joint, space);
31
- if (pose === void 0 || pose === null)
32
- return;
33
- const { position, orientation } = pose.transform;
34
- children.position.set(position.x, position.y, position.z);
35
- children.quaternion.set(orientation.x, orientation.y, orientation.z, orientation.w);
36
- }, { autostart: false });
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='target-ray' />
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='wrist' />
73
+ <slot name="wrist" />
69
74
  <slot />
70
75
  </T.Group>
71
76
  </ScenePortal>
@@ -1,3 +1,4 @@
1
+ /// <reference types="bun-types" />
1
2
  import { SvelteComponent } from "svelte";
2
3
  declare const __propDef: {
3
4
  props: Record<string, never>;
@@ -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
- 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;
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?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | null | undefined;
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?: "on" | "off" | null | undefined;
58
- inputmode?: "search" | "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | null | undefined;
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'?: DOMRectReadOnly | null | undefined;
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'?: "inline" | "list" | "none" | "both" | null | undefined;
68
+ 'aria-autocomplete'?: "none" | "inline" | "list" | "both" | null | undefined;
76
69
  'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
77
- 'aria-checked'?: boolean | "true" | "false" | "mixed" | null | undefined;
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 | "dialog" | "grid" | "listbox" | "menu" | "tree" | null | undefined;
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 | "true" | "false" | "mixed" | null | undefined;
99
+ 'aria-pressed'?: boolean | "false" | "true" | "mixed" | null | undefined;
107
100
  '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;
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'?: "none" | "ascending" | "descending" | "other" | null | undefined;
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, HTMLButtonElement> | null | undefined;
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, 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;
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, 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;
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, 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;
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, 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;
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, frameloop } = useThrelte();
37
+ const { renderer, renderMode } = useThrelte();
38
38
  const { xr } = renderer;
39
- let originalFrameloop = $frameloop;
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
- originalFrameloop = frameloop.current;
88
- frameloop.set("always");
87
+ originalRenderMode = renderMode.current;
88
+ renderMode.set("always");
89
89
  } else {
90
- frameloop.set(originalFrameloop);
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?: "submit" | "reset" | "button" | null | undefined;
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?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | null | undefined;
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?: "on" | "off" | null | undefined;
57
- inputmode?: "search" | "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | null | undefined;
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'?: DOMRectReadOnly | null | undefined;
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'?: "inline" | "list" | "none" | "both" | null | undefined;
75
+ 'aria-autocomplete'?: "none" | "inline" | "list" | "both" | null | undefined;
75
76
  'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
76
- 'aria-checked'?: boolean | "true" | "false" | "mixed" | null | undefined;
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 | "dialog" | "grid" | "listbox" | "menu" | "tree" | null | undefined;
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 | "true" | "false" | "mixed" | null | undefined;
106
+ 'aria-pressed'?: boolean | "false" | "true" | "mixed" | null | undefined;
106
107
  'aria-readonly'?: import("svelte/elements").Booleanish | null | undefined;
107
- 'aria-relevant'?: "text" | "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | null | undefined;
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'?: "none" | "ascending" | "descending" | "other" | null | undefined;
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, HTMLButtonElement> | null | undefined;
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, Element> | null | undefined;
138
- 'on:error'?: import("svelte/elements").EventHandler<Event, Element> | null | undefined;
139
- 'on:toggle'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
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, HTMLButtonElement> | null | undefined;
144
- 'on:canplay'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
145
- 'on:canplaythrough'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
146
- 'on:cuechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
147
- 'on:durationchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
148
- 'on:emptied'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
149
- 'on:encrypted'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
150
- 'on:ended'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
151
- 'on:loadeddata'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
152
- 'on:loadedmetadata'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
153
- 'on:loadstart'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
154
- 'on:pause'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
155
- 'on:play'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
156
- 'on:playing'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
157
- 'on:progress'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
158
- 'on:ratechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
159
- 'on:seeked'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
160
- 'on:seeking'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
161
- 'on:stalled'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
162
- 'on:suspend'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
163
- 'on:timeupdate'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
164
- 'on:volumechange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
165
- 'on:waiting'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
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, HTMLButtonElement> | null | undefined;
186
- 'on:selectionchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
187
- 'on:selectstart'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
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, HTMLButtonElement> | null | undefined;
219
- 'on:cancel'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
220
- 'on:close'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
221
- 'on:fullscreenchange'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
222
- 'on:fullscreenerror'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
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?: 'enter' | 'exit';
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, useFrame } from "@threlte/core";
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 } = useFrame(
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
- autostart: false
27
+ autoStart: false
28
28
  }
29
29
  );
30
30
  $:
@@ -1,3 +1,4 @@
1
+ /// <reference types="bun-types" />
1
2
  import { SvelteComponent } from "svelte";
2
3
  declare const __propDef: {
3
4
  props: {
@@ -1,3 +1,4 @@
1
+ /// <reference types="bun-types" />
1
2
  import { SvelteComponent } from "svelte";
2
3
  declare const __propDef: {
3
4
  props: Record<string, never>;
@@ -1,3 +1,4 @@
1
+ /// <reference types="bun-types" />
1
2
  import { SvelteComponent } from "svelte";
2
3
  declare const __propDef: {
3
4
  props: {
@@ -1,6 +1,6 @@
1
1
  <script>import { spring } from "svelte/motion";
2
2
  import { Group, Matrix3, Vector3 } from "three";
3
- import { T, useFrame } from "@threlte/core";
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 } = useFrame(
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
- autostart: false
26
+ autoStart: false
27
27
  }
28
28
  );
29
29
  const size = spring(0.1, { stiffness: 0.2 });
@@ -1,3 +1,4 @@
1
+ /// <reference types="bun-types" />
1
2
  import { SvelteComponent } from "svelte";
2
3
  declare const __propDef: {
3
4
  props: {
@@ -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, useFrame } from "@threlte/core";
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 } = useFrame(
44
+ const { start, stop } = useTask(
45
45
  () => {
46
46
  setCurvePoints();
47
47
  },
48
- { autostart: false }
48
+ { autoStart: false }
49
49
  );
50
50
  $:
51
51
  if ($intersection === void 0) {
@@ -1,3 +1,4 @@
1
+ /// <reference types="bun-types" />
1
2
  import { SvelteComponent } from "svelte";
2
3
  import { type XRTargetRaySpace } from 'three';
3
4
  declare const __propDef: {
@@ -1,12 +1,13 @@
1
- import { currentWritable, useFrame } from '@threlte/core';
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 } = useFrame(({ invalidate }) => {
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
- }, { invalidate: false });
18
+ }, { autoInvalidate: false });
18
19
  return jointSpaceStore;
19
20
  };
@@ -1,5 +1,5 @@
1
1
  import { Matrix4 } from 'three';
2
- import { useThrelte, useFrame, watch, currentWritable } from '@threlte/core';
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
- let hitTestSource = currentWritable(undefined);
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 } = useFrame(() => {
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
- }, { autostart: false });
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, } from './types';
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 = ('handedness' in handEvent) ? handEvent.handedness : handEvent.data.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, useFrame, watch } from '@threlte/core';
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 = useFrame(() => {
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
- }, { autostart: false, invalidate: false });
21
- const nonImmersiveFrame = useFrame(() => {
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
- }, { autostart: false, invalidate: false });
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 ThrelteUseFrameOptions, type ThrelteContext } from '@threlte/core';
2
- type UseFixedOptions = ThrelteUseFrameOptions & {
1
+ import { type ThrelteUseTaskOptions } from '@threlte/core';
2
+ type UseFixedOptions = ThrelteUseTaskOptions & {
3
3
  fixedStep?: number;
4
4
  };
5
5
  /**
6
- * A fixed useFrame, based on https://github.com/threlte/threlte/pull/654
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: (ctx: ThrelteContext, delta: number) => void, options: UseFixedOptions) => import("@threlte/core/dist/hooks/useFrame").ThrelteUseFrame;
10
+ export declare const useFixed: (fn: (delta: number) => void, options: UseFixedOptions) => import("@threlte/core").ThrelteUseTask;
11
11
  export {};
@@ -1,17 +1,17 @@
1
- import { useFrame } from '@threlte/core';
1
+ import { useTask } from '@threlte/core';
2
2
  /**
3
- * A fixed useFrame, based on https://github.com/threlte/threlte/pull/654
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 useFrame((ctx, delta) => {
10
+ return useTask((delta) => {
11
11
  fixedStepTimeAccumulator += delta;
12
12
  while (fixedStepTimeAccumulator >= fixedStep) {
13
13
  fixedStepTimeAccumulator -= fixedStep;
14
- fn(ctx, fixedStep);
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 += (enabled ? 1 : -1);
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.0.13",
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.22.3",
9
- "@sveltejs/package": "^2.2.0",
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": "6.1.1"
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)[];