@threlte/xr 0.1.2 → 1.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,241 +1,25 @@
1
1
  /// <reference types="webxr" />
2
2
  import { SvelteComponent } from "svelte";
3
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
4
  declare const __propDef: {
4
- props: {
5
- disabled?: boolean | null | undefined;
6
- form?: string | null | undefined;
7
- formaction?: string | null | undefined;
8
- formenctype?: string | null | undefined;
9
- formmethod?: string | null | undefined;
10
- formnovalidate?: boolean | null | undefined;
11
- formtarget?: string | null | undefined;
12
- name?: string | null | undefined;
13
- type?: "button" | "reset" | "submit" | null | undefined;
14
- value?: string | number | string[] | null | undefined;
15
- accesskey?: string | null | undefined;
16
- autofocus?: boolean | null | undefined;
17
- class?: string | null | undefined;
18
- contenteditable?: "inherit" | import("svelte/elements").Booleanish | null | undefined;
19
- contextmenu?: string | null | undefined;
20
- dir?: string | null | undefined;
21
- draggable?: import("svelte/elements").Booleanish | null | undefined;
22
- enterkeyhint?: "search" | "next" | "done" | "enter" | "go" | "previous" | "send" | null | undefined;
23
- hidden?: boolean | null | undefined;
24
- id?: string | null | undefined;
25
- lang?: string | null | undefined;
26
- part?: string | null | undefined;
27
- placeholder?: string | null | undefined;
28
- slot?: string | null | undefined;
29
- spellcheck?: import("svelte/elements").Booleanish | null | undefined;
30
- style?: string | null | undefined;
31
- tabindex?: number | null | undefined;
32
- title?: string | null | undefined;
33
- translate?: "" | "yes" | "no" | null | undefined;
34
- inert?: boolean | null | undefined;
35
- radiogroup?: string | null | undefined;
36
- role?: import("svelte/elements").AriaRole | null | undefined;
37
- about?: string | null | undefined;
38
- datatype?: string | null | undefined;
39
- inlist?: any;
40
- prefix?: string | null | undefined;
41
- property?: string | null | undefined;
42
- resource?: string | null | undefined;
43
- typeof?: string | null | undefined;
44
- vocab?: string | null | undefined;
45
- autocapitalize?: string | null | undefined;
46
- autocorrect?: string | null | undefined;
47
- autosave?: string | null | undefined;
48
- color?: string | null | undefined;
49
- itemprop?: string | null | undefined;
50
- itemscope?: boolean | null | undefined;
51
- itemtype?: string | null | undefined;
52
- itemid?: string | null | undefined;
53
- itemref?: string | null | undefined;
54
- results?: number | null | undefined;
55
- security?: string | null | undefined;
56
- unselectable?: "off" | "on" | null | undefined;
57
- inputmode?: "search" | "numeric" | "none" | "url" | "text" | "email" | "tel" | "decimal" | null | undefined;
58
- is?: string | null | undefined;
59
- 'bind:innerHTML'?: string | null | undefined;
60
- 'bind:textContent'?: string | null | undefined;
61
- 'bind:innerText'?: string | null | undefined;
62
- 'bind:contentRect'?: DOMRectReadOnly | null | undefined;
63
- 'bind:contentBoxSize'?: ResizeObserverSize[] | null | undefined;
64
- 'bind:borderBoxSize'?: ResizeObserverSize[] | null | undefined;
65
- 'bind:devicePixelContentBoxSize'?: ResizeObserverSize[] | null | undefined;
66
- 'data-sveltekit-keepfocus'?: true | "" | "off" | null | undefined;
67
- 'data-sveltekit-noscroll'?: true | "" | "off" | null | undefined;
68
- 'data-sveltekit-preload-code'?: true | "" | "off" | "eager" | "viewport" | "hover" | "tap" | null | undefined;
69
- 'data-sveltekit-preload-data'?: true | "" | "off" | "hover" | "tap" | null | undefined;
70
- 'data-sveltekit-reload'?: true | "" | "off" | null | undefined;
71
- 'data-sveltekit-replacestate'?: true | "" | "off" | null | undefined;
72
- 'aria-activedescendant'?: string | null | undefined;
73
- 'aria-atomic'?: import("svelte/elements").Booleanish | null | undefined;
74
- 'aria-autocomplete'?: "inline" | "both" | "none" | "list" | null | undefined;
75
- 'aria-busy'?: import("svelte/elements").Booleanish | null | undefined;
76
- 'aria-checked'?: boolean | "false" | "true" | "mixed" | null | undefined;
77
- 'aria-colcount'?: number | null | undefined;
78
- 'aria-colindex'?: number | null | undefined;
79
- 'aria-colspan'?: number | null | undefined;
80
- 'aria-controls'?: string | null | undefined;
81
- 'aria-current'?: "time" | "location" | "page" | import("svelte/elements").Booleanish | "step" | "date" | null | undefined;
82
- 'aria-describedby'?: string | null | undefined;
83
- 'aria-details'?: string | null | undefined;
84
- 'aria-disabled'?: import("svelte/elements").Booleanish | null | undefined;
85
- 'aria-dropeffect'?: "link" | "none" | "copy" | "move" | "execute" | "popup" | null | undefined;
86
- 'aria-errormessage'?: string | null | undefined;
87
- 'aria-expanded'?: import("svelte/elements").Booleanish | null | undefined;
88
- 'aria-flowto'?: string | null | undefined;
89
- 'aria-grabbed'?: import("svelte/elements").Booleanish | null | undefined;
90
- 'aria-haspopup'?: "grid" | "dialog" | "menu" | import("svelte/elements").Booleanish | "listbox" | "tree" | null | undefined;
91
- 'aria-hidden'?: import("svelte/elements").Booleanish | null | undefined;
92
- 'aria-invalid'?: import("svelte/elements").Booleanish | "grammar" | "spelling" | null | undefined;
93
- 'aria-keyshortcuts'?: string | null | undefined;
94
- 'aria-label'?: string | null | undefined;
95
- 'aria-labelledby'?: string | null | undefined;
96
- 'aria-level'?: number | null | undefined;
97
- 'aria-live'?: "off" | "assertive" | "polite" | null | undefined;
98
- 'aria-modal'?: import("svelte/elements").Booleanish | null | undefined;
99
- 'aria-multiline'?: import("svelte/elements").Booleanish | null | undefined;
100
- 'aria-multiselectable'?: import("svelte/elements").Booleanish | null | undefined;
101
- 'aria-orientation'?: "horizontal" | "vertical" | null | undefined;
102
- 'aria-owns'?: string | null | undefined;
103
- 'aria-placeholder'?: string | null | undefined;
104
- 'aria-posinset'?: number | null | undefined;
105
- 'aria-pressed'?: boolean | "false" | "true" | "mixed" | null | undefined;
106
- 'aria-readonly'?: import("svelte/elements").Booleanish | null | undefined;
107
- 'aria-relevant'?: "all" | "text" | "additions" | "additions removals" | "additions text" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | null | undefined;
108
- 'aria-required'?: import("svelte/elements").Booleanish | null | undefined;
109
- 'aria-roledescription'?: string | null | undefined;
110
- 'aria-rowcount'?: number | null | undefined;
111
- 'aria-rowindex'?: number | null | undefined;
112
- 'aria-rowspan'?: number | null | undefined;
113
- 'aria-selected'?: import("svelte/elements").Booleanish | null | undefined;
114
- 'aria-setsize'?: number | null | undefined;
115
- 'aria-sort'?: "none" | "other" | "ascending" | "descending" | null | undefined;
116
- 'aria-valuemax'?: number | null | undefined;
117
- 'aria-valuemin'?: number | null | undefined;
118
- 'aria-valuenow'?: number | null | undefined;
119
- 'aria-valuetext'?: string | null | undefined;
120
- 'on:copy'?: import("svelte/elements").ClipboardEventHandler<HTMLButtonElement> | null | undefined;
121
- 'on:cut'?: import("svelte/elements").ClipboardEventHandler<HTMLButtonElement> | null | undefined;
122
- 'on:paste'?: import("svelte/elements").ClipboardEventHandler<HTMLButtonElement> | null | undefined;
123
- 'on:compositionend'?: import("svelte/elements").CompositionEventHandler<HTMLButtonElement> | null | undefined;
124
- 'on:compositionstart'?: import("svelte/elements").CompositionEventHandler<HTMLButtonElement> | null | undefined;
125
- 'on:compositionupdate'?: import("svelte/elements").CompositionEventHandler<HTMLButtonElement> | null | undefined;
126
- 'on:focus'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
127
- 'on:focusin'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
128
- 'on:focusout'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
129
- 'on:blur'?: import("svelte/elements").FocusEventHandler<HTMLButtonElement> | null | undefined;
130
- 'on:change'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
131
- 'on:beforeinput'?: import("svelte/elements").EventHandler<InputEvent, HTMLButtonElement> | null | undefined;
132
- 'on:input'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
133
- 'on:reset'?: import("svelte/elements").FormEventHandler<HTMLButtonElement> | null | undefined;
134
- 'on:submit'?: import("svelte/elements").EventHandler<SubmitEvent, HTMLButtonElement> | null | undefined;
135
- 'on:invalid'?: import("svelte/elements").EventHandler<Event, HTMLButtonElement> | null | undefined;
136
- '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;
140
- 'on:keydown'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
141
- 'on:keypress'?: import("svelte/elements").KeyboardEventHandler<HTMLButtonElement> | null | undefined;
142
- '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;
166
- 'on:auxclick'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
167
- 'on:click'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
168
- 'on:contextmenu'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
169
- 'on:dblclick'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
170
- 'on:drag'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
171
- 'on:dragend'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
172
- 'on:dragenter'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
173
- 'on:dragexit'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
174
- 'on:dragleave'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
175
- 'on:dragover'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
176
- 'on:dragstart'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
177
- 'on:drop'?: import("svelte/elements").DragEventHandler<HTMLButtonElement> | null | undefined;
178
- 'on:mousedown'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
179
- 'on:mouseenter'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
180
- 'on:mouseleave'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
181
- 'on:mousemove'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
182
- 'on:mouseout'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
183
- 'on:mouseover'?: import("svelte/elements").MouseEventHandler<HTMLButtonElement> | null | undefined;
184
- '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;
188
- 'on:touchcancel'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
189
- 'on:touchend'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
190
- 'on:touchmove'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
191
- 'on:touchstart'?: import("svelte/elements").TouchEventHandler<HTMLButtonElement> | null | undefined;
192
- 'on:gotpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
193
- 'on:pointercancel'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
194
- 'on:pointerdown'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
195
- 'on:pointerenter'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
196
- 'on:pointerleave'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
197
- 'on:pointermove'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
198
- 'on:pointerout'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
199
- 'on:pointerover'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
200
- 'on:pointerup'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
201
- 'on:lostpointercapture'?: import("svelte/elements").PointerEventHandler<HTMLButtonElement> | null | undefined;
202
- 'on:scroll'?: import("svelte/elements").UIEventHandler<HTMLButtonElement> | null | undefined;
203
- 'on:resize'?: import("svelte/elements").UIEventHandler<HTMLButtonElement> | null | undefined;
204
- 'on:wheel'?: import("svelte/elements").WheelEventHandler<HTMLButtonElement> | null | undefined;
205
- 'on:animationstart'?: import("svelte/elements").AnimationEventHandler<HTMLButtonElement> | null | undefined;
206
- 'on:animationend'?: import("svelte/elements").AnimationEventHandler<HTMLButtonElement> | null | undefined;
207
- 'on:animationiteration'?: import("svelte/elements").AnimationEventHandler<HTMLButtonElement> | null | undefined;
208
- 'on:transitionstart'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
209
- 'on:transitionrun'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
210
- 'on:transitionend'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
211
- 'on:transitioncancel'?: import("svelte/elements").TransitionEventHandler<HTMLButtonElement> | null | undefined;
212
- 'on:outrostart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
213
- 'on:outroend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
214
- 'on:introstart'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
215
- 'on:introend'?: import("svelte/elements").EventHandler<CustomEvent<null>, HTMLButtonElement> | null | undefined;
216
- 'on:message'?: import("svelte/elements").MessageEventHandler<HTMLButtonElement> | null | undefined;
217
- '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;
5
+ props: HTMLButtonAttributes & {
6
+ /** The type of `XRSession` to create */
223
7
  mode: XRSessionMode;
8
+ /**
9
+ * `XRSession` configuration options
10
+ * @see https://immersive-web.github.io/webxr/#feature-dependencies
11
+ */
224
12
  sessionInit?: (XRSessionInit & {
225
13
  domOverlay?: {
226
14
  root: HTMLElement;
227
15
  } | undefined;
228
16
  }) | undefined;
17
+ /** Whether this button should only enter / exit an `XRSession`. Default is to toggle both ways */
229
18
  force?: "enter" | "exit" | undefined;
19
+ /** Whether to apply automatic styling to the button. Set false to apply custom styles. Default is true. */
230
20
  styled?: boolean | undefined;
231
21
  };
232
22
  events: {
233
- click: CustomEvent<{
234
- state: 'unsupported' | 'insecure' | 'blocked' | 'supported';
235
- nativeEvent: MouseEvent;
236
- }>;
237
- error: CustomEvent<Error>;
238
- } & {
239
23
  [evt: string]: CustomEvent<any>;
240
24
  };
241
25
  slots: {};
@@ -43,9 +43,7 @@ $:
43
43
  shaderMaterial.uniforms.color.value = color;
44
44
  </script>
45
45
 
46
- <T.Mesh
47
- scale={size}
48
- >
46
+ <T.Mesh scale={size}>
49
47
  <T.PlaneGeometry />
50
48
  <T is={shaderMaterial} />
51
49
  </T.Mesh>
@@ -15,9 +15,7 @@ $:
15
15
  rotation.x={-Math.PI / 2}
16
16
  position.z={-0.1}
17
17
  >
18
- <T.CylinderGeometry
19
- args={[0.002, 0.002, 0.2, 16, 1, false]}
20
- />
18
+ <T.CylinderGeometry args={[0.002, 0.002, 0.2, 16, 1, false]} />
21
19
  <T.RawShaderMaterial
22
20
  transparent
23
21
  vertexShader={`
@@ -42,4 +40,3 @@ $:
42
40
  </T.Mesh>
43
41
  </slot>
44
42
  </T.Group>
45
-
@@ -1,7 +1,7 @@
1
1
  <script>import { Vector3, QuadraticBezierCurve3, Vector2 } from "three";
2
- import { Line2 } from "three/examples/jsm/lines/Line2";
3
- import { LineGeometry } from "three/examples/jsm/lines/LineGeometry";
4
- import { LineMaterial } from "three/examples/jsm/lines/LineMaterial";
2
+ import { Line2 } from "three/examples/jsm/lines/Line2.js";
3
+ import { LineGeometry } from "three/examples/jsm/lines/LineGeometry.js";
4
+ import { LineMaterial } from "three/examples/jsm/lines/LineMaterial.js";
5
5
  import { T, useTask } from "@threlte/core";
6
6
  import { teleportIntersection } from "../../internal/stores";
7
7
  export let handedness;
@@ -1,6 +1,5 @@
1
1
  /// <reference types="webxr" />
2
2
  import type { CurrentWritable } from '@threlte/core';
3
- import { isPresenting, isHandTracking, session } from '../internal/stores';
4
3
  /**
5
4
  * Provides access to context related to `<XR />`.
6
5
  */
@@ -1,9 +1,9 @@
1
- import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory';
1
+ import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory.js';
2
2
  import { useThrelte } from '@threlte/core';
3
3
  import { onMount } from 'svelte';
4
4
  import { useHandTrackingState } from './useHandTrackingState';
5
5
  import { gaze, left, right } from '../hooks/useController';
6
- import { controllerDispatchers } from './stores';
6
+ import { controllerEvents } from './stores';
7
7
  export const setupControllers = () => {
8
8
  const factory = new XRControllerModelFactory();
9
9
  const stores = { left, right, none: gaze };
@@ -23,7 +23,7 @@ export const setupControllers = () => {
23
23
  if (hasHands())
24
24
  return;
25
25
  const { data } = event;
26
- controllerDispatchers[data.handedness]?.current?.(event.type, event);
26
+ controllerEvents[data.handedness]?.[event.type]?.(event);
27
27
  };
28
28
  function handleConnected(event) {
29
29
  const { model, targetRay, grip } = indexMap.get(this);
@@ -1,9 +1,9 @@
1
- import { XRHandModelFactory } from 'three/examples/jsm/webxr/XRHandModelFactory';
1
+ import { XRHandModelFactory } from 'three/examples/jsm/webxr/XRHandModelFactory.js';
2
2
  import { useThrelte } from '@threlte/core';
3
3
  import { onMount } from 'svelte';
4
4
  import { left, right } from '../hooks/useHand';
5
5
  import { useHandTrackingState } from './useHandTrackingState';
6
- import { handDispatchers } from './stores';
6
+ import { handEvents } from './stores';
7
7
  export const setupHands = () => {
8
8
  const factory = new XRHandModelFactory();
9
9
  const stores = { left, right };
@@ -24,7 +24,7 @@ export const setupHands = () => {
24
24
  return;
25
25
  const handEvent = event;
26
26
  const handedness = 'handedness' in handEvent ? handEvent.handedness : handEvent.data.handedness;
27
- handDispatchers[handedness]?.current?.(event.type, event);
27
+ handEvents[handedness]?.[event.type]?.(event);
28
28
  };
29
29
  function handleConnected(event) {
30
30
  const hand = this;
@@ -1,5 +1,5 @@
1
1
  // @ts-expect-error svelte/internal is untyped.
2
- import { set_raf } from 'svelte/internal';
2
+ // import { set_raf } from 'svelte/internal'
3
3
  import { onDestroy } from 'svelte';
4
4
  import { watch } from '@threlte/core';
5
5
  import { session } from './stores';
@@ -8,7 +8,7 @@ export const setupRaf = () => {
8
8
  return;
9
9
  const browserRaf = (fn) => requestAnimationFrame(fn);
10
10
  const currentRaf = { fn: browserRaf };
11
- set_raf((fn) => currentRaf.fn(fn));
11
+ // set_raf((fn: FrameRequestCallback) => currentRaf.fn(fn))
12
12
  watch(session, (session) => {
13
13
  if (session) {
14
14
  currentRaf.fn = (fn) => session.requestAnimationFrame(fn);
@@ -5,21 +5,13 @@ export declare const isHandTracking: import("@threlte/core").CurrentWritable<boo
5
5
  export declare const session: import("@threlte/core").CurrentWritable<XRSession | undefined>;
6
6
  export declare const referenceSpaceType: import("@threlte/core").CurrentWritable<XRReferenceSpaceType | undefined>;
7
7
  export declare const xr: import("@threlte/core").CurrentWritable<WebXRManager | undefined>;
8
- export declare const controllerDispatchers: {
9
- left: import("@threlte/core").CurrentWritable<((<Type extends string>(type: Type, payload?: unknown) => void) & {
10
- hasEventListener: <Type_1 extends string>(type: Type_1) => boolean;
11
- }) | undefined>;
12
- right: import("@threlte/core").CurrentWritable<((<Type extends string>(type: Type, payload?: unknown) => void) & {
13
- hasEventListener: <Type_1 extends string>(type: Type_1) => boolean;
14
- }) | undefined>;
8
+ export declare const controllerEvents: {
9
+ left: import("@threlte/core").CurrentWritable<Record<string, (arg: unknown) => void> | undefined>;
10
+ right: import("@threlte/core").CurrentWritable<Record<string, (arg: unknown) => void> | undefined>;
15
11
  };
16
- export declare const handDispatchers: {
17
- left: import("@threlte/core").CurrentWritable<((<Type extends string>(type: Type, payload?: unknown) => void) & {
18
- hasEventListener: <Type_1 extends string>(type: Type_1) => boolean;
19
- }) | undefined>;
20
- right: import("@threlte/core").CurrentWritable<((<Type extends string>(type: Type, payload?: unknown) => void) & {
21
- hasEventListener: <Type_1 extends string>(type: Type_1) => boolean;
22
- }) | undefined>;
12
+ export declare const handEvents: {
13
+ left: import("@threlte/core").CurrentWritable<Record<string, (arg: unknown) => void> | undefined>;
14
+ right: import("@threlte/core").CurrentWritable<Record<string, (arg: unknown) => void> | undefined>;
23
15
  };
24
16
  export declare const teleportState: import("@threlte/core").CurrentWritable<{
25
17
  left: {
@@ -4,11 +4,11 @@ export const isHandTracking = currentWritable(false);
4
4
  export const session = currentWritable(undefined);
5
5
  export const referenceSpaceType = currentWritable(undefined);
6
6
  export const xr = currentWritable(undefined);
7
- export const controllerDispatchers = {
7
+ export const controllerEvents = {
8
8
  left: currentWritable(undefined),
9
9
  right: currentWritable(undefined)
10
10
  };
11
- export const handDispatchers = {
11
+ export const handEvents = {
12
12
  left: currentWritable(undefined),
13
13
  right: currentWritable(undefined)
14
14
  };
@@ -1,13 +1,11 @@
1
1
  import { onMount } from 'svelte';
2
- import { get_current_component } from 'svelte/internal';
3
2
  import { writable } from 'svelte/store';
4
- import { events } from './types';
3
+ // import { events } from './types'
5
4
  export const useComponentHasEventHandlers = () => {
6
- const component = get_current_component();
7
5
  const hasEventHandlers = writable(false);
8
6
  onMount(() => {
9
- const match = Object.keys(component.$$.callbacks).some((callback) => events.includes(callback));
10
- hasEventHandlers.set(match);
7
+ // const match = Object.keys(component.$$.callbacks).some((callback) => events.includes(callback))
8
+ hasEventHandlers.set(true);
11
9
  });
12
10
  return {
13
11
  hasEventHandlers
package/dist/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /// <reference types="webxr" />
2
2
  import type { Event, Group, XRTargetRaySpace, XRGripSpace, XRHandSpace } from 'three';
3
- import type { XRControllerModel } from 'three/examples/jsm/webxr/XRControllerModelFactory';
4
- import type { XRHandModel } from 'three/examples/jsm/webxr/XRHandModelFactory';
3
+ import type { XRControllerModel } from 'three/examples/jsm/webxr/XRControllerModelFactory.js';
4
+ import type { XRHandModel } from 'three/examples/jsm/webxr/XRHandModelFactory.js';
5
5
  export type XRSessionEventType = 'sessionstart' | 'sessionend' | 'visibilitychange' | 'frameratechange';
6
6
  export type XRControllerEventType = 'select' | 'selectstart' | 'selectend' | 'squeeze' | 'squeezeend' | 'squeezestart' | 'disconnected' | 'connected';
7
7
  export type XRHandEventType = 'pinchstart' | 'pinchend' | 'connected' | 'disconnected';
package/package.json CHANGED
@@ -1,32 +1,33 @@
1
1
  {
2
2
  "name": "@threlte/xr",
3
- "version": "0.1.2",
3
+ "version": "1.0.0-next.0",
4
4
  "author": "Micheal Parks <michealparks1989@gmail.com> (https://parks.lol)",
5
5
  "license": "MIT",
6
6
  "devDependencies": {
7
- "@sveltejs/adapter-auto": "^2.1.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",
16
- "@types/three": "^0.158.3",
17
- "autoprefixer": "^10.4.14",
18
- "postcss": "^8.4.27",
19
- "publint": "^0.1.16",
20
- "svelte": "^4.1.1",
21
- "three": "^0.158.0",
22
- "tslib": "^2.6.0",
23
- "vite": "^4.4.6",
24
- "vite-plugin-mkcert": "^1.16.0",
25
- "@threlte/core": "7.0.4"
7
+ "@sveltejs/adapter-auto": "^3.2.0",
8
+ "@sveltejs/kit": "^2.5.5",
9
+ "@sveltejs/package": "^2.3.1",
10
+ "@sveltejs/vite-plugin-svelte": "^3.0.2",
11
+ "@typescript-eslint/eslint-plugin": "^7.5.0",
12
+ "@typescript-eslint/parser": "^7.5.0",
13
+ "eslint": "^9.0.0",
14
+ "eslint-plugin-svelte": "^2.36.0",
15
+ "svelte-check": "^3.6.9",
16
+ "typescript": "^5.4.4",
17
+ "@types/three": "^0.163.0",
18
+ "autoprefixer": "^10.4.19",
19
+ "postcss": "^8.4.38",
20
+ "publint": "^0.2.7",
21
+ "svelte": "^4.2.12",
22
+ "three": "^0.163.0",
23
+ "tslib": "^2.6.2",
24
+ "vite": "^5.2.8",
25
+ "vite-plugin-mkcert": "^1.17.5",
26
+ "@threlte/core": "8.0.0-next.0"
26
27
  },
27
28
  "peerDependencies": {
28
29
  "svelte": ">=4",
29
- "three": ">=0.133"
30
+ "three": ">=0.152"
30
31
  },
31
32
  "type": "module",
32
33
  "exports": {
@@ -1,12 +0,0 @@
1
- import type { createRawEventDispatcher } from '@threlte/core';
2
- import type { ControlsContext, HandContext, ThrelteXREvents } from './types';
3
- export declare const getHandContext: (hand: 'left' | 'right') => HandContext;
4
- export declare const setHandContext: (hand: 'left' | 'right', context: HandContext) => void;
5
- export declare const getControlsContext: () => ControlsContext;
6
- export declare const setControlsContext: (context: ControlsContext) => void;
7
- interface InternalContext {
8
- dispatchers: WeakMap<THREE.Object3D, ReturnType<typeof createRawEventDispatcher<ThrelteXREvents>>>;
9
- }
10
- export declare const getInternalContext: () => InternalContext;
11
- export declare const setInternalContext: () => void;
12
- export {};