@threlte/xr 1.0.0-next.2 → 1.0.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/components/ARButton.svelte +8 -6
  2. package/dist/components/ARButton.svelte.d.ts +12 -2
  3. package/dist/components/Controller.svelte +55 -41
  4. package/dist/components/Controller.svelte.d.ts +26 -19
  5. package/dist/components/Hand.svelte +37 -15
  6. package/dist/components/Hand.svelte.d.ts +15 -19
  7. package/dist/components/VRButton.svelte +4 -3
  8. package/dist/components/VRButton.svelte.d.ts +12 -2
  9. package/dist/components/XR.svelte +17 -12
  10. package/dist/components/XR.svelte.d.ts +18 -25
  11. package/dist/components/XRButton.svelte +9 -7
  12. package/dist/components/XRButton.svelte.d.ts +12 -2
  13. package/dist/components/internal/Cursor.svelte.d.ts +3 -3
  14. package/dist/components/internal/PointerCursor.svelte +5 -3
  15. package/dist/components/internal/PointerCursor.svelte.d.ts +1 -4
  16. package/dist/components/internal/ShortRay.svelte +23 -21
  17. package/dist/components/internal/ShortRay.svelte.d.ts +1 -4
  18. package/dist/components/internal/TeleportCursor.svelte +5 -3
  19. package/dist/components/internal/TeleportCursor.svelte.d.ts +1 -4
  20. package/dist/components/internal/TeleportRay.svelte +5 -3
  21. package/dist/components/internal/TeleportRay.svelte.d.ts +1 -4
  22. package/dist/internal/defaultFeatures.d.ts +4 -0
  23. package/dist/internal/defaultFeatures.js +14 -0
  24. package/dist/internal/setupControllers.js +1 -1
  25. package/dist/internal/setupHands.js +1 -1
  26. package/dist/internal/setupHeadset.js +14 -5
  27. package/dist/internal/setupRaf.js +8 -12
  28. package/dist/internal/stores.d.ts +5 -4
  29. package/dist/plugins/pointerControls/plugin.js +6 -2
  30. package/dist/plugins/pointerControls/setup.js +28 -27
  31. package/dist/plugins/pointerControls/types.d.ts +10 -10
  32. package/dist/plugins/pointerControls/types.js +9 -9
  33. package/dist/plugins/teleportControls/context.d.ts +9 -3
  34. package/dist/plugins/teleportControls/context.js +45 -2
  35. package/dist/plugins/teleportControls/index.js +4 -13
  36. package/dist/plugins/teleportControls/plugin.js +2 -2
  37. package/dist/plugins/teleportControls/setup.js +1 -1
  38. package/dist/types.d.ts +20 -2
  39. package/package.json +3 -3
  40. package/dist/plugins/teleportControls/hook.d.ts +0 -7
  41. package/dist/plugins/teleportControls/hook.js +0 -38
@@ -1,25 +1,16 @@
1
- import { Raycaster } from 'three';
2
1
  import { currentWritable, watch } from '@threlte/core';
3
- import { setTeleportContext, getTeleportContext, getHandContext } from './context';
2
+ import { createTeleportContext, useTeleportControls, getHandContext } from './context';
4
3
  import { injectTeleportControlsPlugin } from './plugin';
5
- import { defaultComputeFunction } from './compute';
6
4
  import { setHandContext } from './context';
7
5
  import { setupTeleportControls } from './setup';
8
6
  import { teleportState } from '../../internal/stores';
9
7
  let controlsCounter = 0;
10
8
  export const teleportControls = (handedness, options) => {
11
- if (getTeleportContext() === undefined) {
9
+ if (useTeleportControls() === undefined) {
12
10
  injectTeleportControlsPlugin();
13
- setTeleportContext({
14
- interactiveObjects: [],
15
- surfaces: new Map(),
16
- blockers: new Map(),
17
- dispatchers: new WeakMap(),
18
- raycaster: new Raycaster(),
19
- compute: options?.compute ?? defaultComputeFunction
20
- });
11
+ createTeleportContext(options?.compute);
21
12
  }
22
- const context = getTeleportContext();
13
+ const context = useTeleportControls();
23
14
  if (getHandContext(handedness) === undefined) {
24
15
  const enabled = options?.enabled ?? true;
25
16
  controlsCounter += enabled ? 1 : -1;
@@ -1,7 +1,7 @@
1
1
  import { writable } from 'svelte/store';
2
2
  import { watch } from '@threlte/core';
3
3
  import { injectPlugin } from '@threlte/core';
4
- import { useTeleportControls } from './hook';
4
+ import { useTeleportControls } from './context';
5
5
  /**
6
6
  * Registers T components with "teleportSurface" or "teleportBlocker" attributes.
7
7
  */
@@ -24,7 +24,7 @@ export const injectTeleportControlsPlugin = () => {
24
24
  return noop;
25
25
  }
26
26
  else {
27
- addSurface($refStore, props.$$events ?? {});
27
+ addSurface($refStore, props);
28
28
  return () => removeSurface($refStore);
29
29
  }
30
30
  }
@@ -49,7 +49,7 @@ export const setupTeleportControls = (context, handContext, fixedStep = 1 / 40)
49
49
  handContext.hovered.set(intersect);
50
50
  }, {
51
51
  fixedStep,
52
- autostart: false
52
+ autoStart: false
53
53
  });
54
54
  watch([useXR().isPresenting, handContext.enabled], ([isPresenting, enabled]) => {
55
55
  if (isPresenting && enabled) {
package/dist/types.d.ts CHANGED
@@ -4,16 +4,27 @@ import type { XRControllerModel } from 'three/examples/jsm/webxr/XRControllerMod
4
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
+ export type XRControllerEvents = {
8
+ onconnected?: XRControllerEventCallback<'connected'>;
9
+ ondisconnected?: XRControllerEventCallback<'disconnected'>;
10
+ onselect?: XRControllerEventCallback<'select'>;
11
+ onselectstart?: XRControllerEventCallback<'selectstart'>;
12
+ onselectend?: XRControllerEventCallback<'selectend'>;
13
+ onsqueeze?: XRControllerEventCallback<'squeeze'>;
14
+ onsqueezeend?: XRControllerEventCallback<'squeezeend'>;
15
+ onsqueezestart?: XRControllerEventCallback<'squeezestart'>;
16
+ };
7
17
  export type XRHandEventType = 'pinchstart' | 'pinchend' | 'connected' | 'disconnected';
8
- export type XRSessionEvent<Type = XRSessionEventType> = Event & {
18
+ export type XRSessionEvent<Type = XRSessionEventType> = (event: Event & {
9
19
  type: Type;
10
20
  target: XRSession;
11
- };
21
+ }) => void;
12
22
  export type XRControllerEvent<Type = XRControllerEventType> = Event & {
13
23
  type: Type;
14
24
  target: Group;
15
25
  data: XRInputSource;
16
26
  };
27
+ export type XRControllerEventCallback<Type = XRControllerEventType> = (event: XRControllerEvent<Type>) => void;
17
28
  export type XRController = {
18
29
  targetRay: XRTargetRaySpace;
19
30
  grip: XRGripSpace;
@@ -35,3 +46,10 @@ export type XRHandEvent<Type = XRHandEventType> = Type extends 'connected' | 'di
35
46
  handedness: 'left' | 'right';
36
47
  target: null;
37
48
  } : never;
49
+ export type XRHandEventCallback<Type> = (event: XRHandEvent<Type>) => void;
50
+ export type XRHandEvents = {
51
+ onconnected?: XRHandEventCallback<'connected'>;
52
+ ondisconnected?: XRHandEventCallback<'disconnected'>;
53
+ onpinchstart?: XRHandEventCallback<'pinchstart'>;
54
+ onpinchend?: XRHandEventCallback<'pinchend'>;
55
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threlte/xr",
3
- "version": "1.0.0-next.2",
3
+ "version": "1.0.0-next.4",
4
4
  "author": "Micheal Parks <michealparks1989@gmail.com> (https://parks.lol)",
5
5
  "license": "MIT",
6
6
  "devDependencies": {
@@ -23,11 +23,11 @@
23
23
  "tslib": "^2.6.2",
24
24
  "vite": "^5.2.8",
25
25
  "vite-plugin-mkcert": "^1.17.5",
26
- "@threlte/core": "8.0.0-next.3"
26
+ "@threlte/core": "8.0.0-next.6"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "svelte": ">=5",
30
- "three": ">=0.152"
30
+ "three": ">=0.155"
31
31
  },
32
32
  "type": "module",
33
33
  "exports": {
@@ -1,7 +0,0 @@
1
- import type { Mesh } from 'three';
2
- export declare const useTeleportControls: () => {
3
- addSurface: (mesh: Mesh, events: Record<string, (arg: unknown) => void>) => void;
4
- removeSurface: (mesh: Mesh) => void;
5
- addBlocker: (mesh: Mesh) => void;
6
- removeBlocker: (mesh: Mesh) => void;
7
- };
@@ -1,38 +0,0 @@
1
- import { getTeleportContext } from './context';
2
- export const useTeleportControls = () => {
3
- const context = getTeleportContext();
4
- const addSurface = (mesh, events) => {
5
- // check if the object is already in the list
6
- if (context.interactiveObjects.indexOf(mesh) > -1) {
7
- return;
8
- }
9
- context.interactiveObjects.push(mesh);
10
- context.surfaces.set(mesh.uuid, mesh);
11
- context.dispatchers.set(mesh, events);
12
- };
13
- const removeSurface = (mesh) => {
14
- const index = context.interactiveObjects.indexOf(mesh);
15
- context.interactiveObjects.splice(index, 1);
16
- context.surfaces.delete(mesh.uuid);
17
- context.dispatchers.delete(mesh);
18
- };
19
- const addBlocker = (mesh) => {
20
- // check if the object is already in the list
21
- if (context.interactiveObjects.indexOf(mesh) > -1) {
22
- return;
23
- }
24
- context.interactiveObjects.push(mesh);
25
- context.blockers.set(mesh.uuid, mesh);
26
- };
27
- const removeBlocker = (mesh) => {
28
- const index = context.interactiveObjects.indexOf(mesh);
29
- context.interactiveObjects.splice(index, 1);
30
- context.blockers.delete(mesh.uuid);
31
- };
32
- return {
33
- addSurface,
34
- removeSurface,
35
- addBlocker,
36
- removeBlocker
37
- };
38
- };