@vizor-vr/react 0.2.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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/VzAnnotation.d.ts +34 -0
  4. package/dist/VzAnnotation.d.ts.map +1 -0
  5. package/dist/VzAnnotation.js +46 -0
  6. package/dist/VzAnnotation.js.map +1 -0
  7. package/dist/VzCaption.d.ts +20 -0
  8. package/dist/VzCaption.d.ts.map +1 -0
  9. package/dist/VzCaption.js +25 -0
  10. package/dist/VzCaption.js.map +1 -0
  11. package/dist/VzCinema.d.ts +17 -0
  12. package/dist/VzCinema.d.ts.map +1 -0
  13. package/dist/VzCinema.js +32 -0
  14. package/dist/VzCinema.js.map +1 -0
  15. package/dist/VzImg.d.ts +16 -0
  16. package/dist/VzImg.d.ts.map +1 -0
  17. package/dist/VzImg.js +29 -0
  18. package/dist/VzImg.js.map +1 -0
  19. package/dist/VzLive.d.ts +28 -0
  20. package/dist/VzLive.d.ts.map +1 -0
  21. package/dist/VzLive.js +24 -0
  22. package/dist/VzLive.js.map +1 -0
  23. package/dist/VzPlaylist.d.ts +16 -0
  24. package/dist/VzPlaylist.d.ts.map +1 -0
  25. package/dist/VzPlaylist.js +57 -0
  26. package/dist/VzPlaylist.js.map +1 -0
  27. package/dist/VzTour.d.ts +21 -0
  28. package/dist/VzTour.d.ts.map +1 -0
  29. package/dist/VzTour.js +29 -0
  30. package/dist/VzTour.js.map +1 -0
  31. package/dist/VzVideo.d.ts +17 -0
  32. package/dist/VzVideo.d.ts.map +1 -0
  33. package/dist/VzVideo.js +32 -0
  34. package/dist/VzVideo.js.map +1 -0
  35. package/dist/__tests__/build-attributes.test.d.ts +2 -0
  36. package/dist/__tests__/build-attributes.test.d.ts.map +1 -0
  37. package/dist/__tests__/build-attributes.test.js +76 -0
  38. package/dist/__tests__/build-attributes.test.js.map +1 -0
  39. package/dist/__tests__/vz-annotation.test.d.ts +2 -0
  40. package/dist/__tests__/vz-annotation.test.d.ts.map +1 -0
  41. package/dist/__tests__/vz-annotation.test.js +29 -0
  42. package/dist/__tests__/vz-annotation.test.js.map +1 -0
  43. package/dist/__tests__/vz-caption.test.d.ts +2 -0
  44. package/dist/__tests__/vz-caption.test.d.ts.map +1 -0
  45. package/dist/__tests__/vz-caption.test.js +20 -0
  46. package/dist/__tests__/vz-caption.test.js.map +1 -0
  47. package/dist/__tests__/vz-components.test.d.ts +2 -0
  48. package/dist/__tests__/vz-components.test.d.ts.map +1 -0
  49. package/dist/__tests__/vz-components.test.js +106 -0
  50. package/dist/__tests__/vz-components.test.js.map +1 -0
  51. package/dist/index.d.ts +38 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +36 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/types.d.ts +127 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/use-vizor-element.d.ts +18 -0
  60. package/dist/use-vizor-element.d.ts.map +1 -0
  61. package/dist/use-vizor-element.js +124 -0
  62. package/dist/use-vizor-element.js.map +1 -0
  63. package/package.json +55 -0
@@ -0,0 +1,124 @@
1
+ import { useEffect, useRef } from 'react';
2
+ // Ensure player elements are registered (side-effect import — the bare
3
+ // '@vizor-vr/player' entry does NOT register; the '/register' entry does).
4
+ // Safe under SSR: registration no-ops when there is no DOM.
5
+ import '@vizor-vr/player/register';
6
+ /** Map of React event prop names to DOM event names and detail accessors */
7
+ const EVENT_MAP = [
8
+ { prop: 'onReady', event: 'vz-ready' },
9
+ { prop: 'onPlay', event: 'play' },
10
+ { prop: 'onPause', event: 'pause' },
11
+ { prop: 'onEnded', event: 'ended' },
12
+ { prop: 'onTimeUpdate', event: 'timeupdate' },
13
+ { prop: 'onError', event: 'vz-error', hasDetail: true },
14
+ { prop: 'onQualityChange', event: 'vz-quality-change', hasDetail: true },
15
+ { prop: 'onFullscreenEnter', event: 'vz-fullscreen-enter' },
16
+ { prop: 'onFullscreenExit', event: 'vz-fullscreen-exit' },
17
+ { prop: 'onXrSessionStart', event: 'vz-xr-session-start' },
18
+ { prop: 'onXrSessionEnd', event: 'vz-xr-session-end' },
19
+ { prop: 'onAnnotationClick', event: 'vz-annotation-click', hasDetail: true },
20
+ { prop: 'onOrientationChange', event: 'vz-orientation-change', hasDetail: true },
21
+ { prop: 'onLicenseValidated', event: 'vz-license-validated', hasDetail: true },
22
+ { prop: 'onCaptionChange', event: 'vz-caption-change', hasDetail: true },
23
+ ];
24
+ /**
25
+ * Hook that attaches event listeners to a Vizor custom element ref.
26
+ * Handles cleanup on unmount and re-attaching when handlers change.
27
+ */
28
+ export function useVizorEvents(ref, props) {
29
+ useEffect(() => {
30
+ const el = ref.current;
31
+ if (!el)
32
+ return;
33
+ const cleanups = [];
34
+ for (const { prop, event, hasDetail } of EVENT_MAP) {
35
+ const handler = props[prop];
36
+ if (!handler)
37
+ continue;
38
+ const listener = (e) => {
39
+ if (hasDetail && e instanceof CustomEvent) {
40
+ handler(e.detail);
41
+ }
42
+ else {
43
+ handler(e);
44
+ }
45
+ };
46
+ el.addEventListener(event, listener);
47
+ cleanups.push(() => el.removeEventListener(event, listener));
48
+ }
49
+ return () => {
50
+ for (const cleanup of cleanups)
51
+ cleanup();
52
+ };
53
+ }, [
54
+ ref,
55
+ props.onReady,
56
+ props.onPlay,
57
+ props.onPause,
58
+ props.onEnded,
59
+ props.onTimeUpdate,
60
+ props.onError,
61
+ props.onQualityChange,
62
+ props.onFullscreenEnter,
63
+ props.onFullscreenExit,
64
+ props.onXrSessionStart,
65
+ props.onXrSessionEnd,
66
+ props.onAnnotationClick,
67
+ props.onOrientationChange,
68
+ props.onLicenseValidated,
69
+ props.onCaptionChange,
70
+ ]);
71
+ }
72
+ /**
73
+ * Build HTML attributes object from common props.
74
+ * React passes unknown props to custom elements as attributes.
75
+ */
76
+ export function buildAttributes(props) {
77
+ const attrs = {};
78
+ if (props.format)
79
+ attrs.format = String(props.format);
80
+ if (props.title)
81
+ attrs.title = props.title;
82
+ if (props.poster)
83
+ attrs.poster = props.poster;
84
+ if (props.loop)
85
+ attrs.loop = '';
86
+ if (props.muted)
87
+ attrs.muted = '';
88
+ if (props.preload)
89
+ attrs.preload = props.preload;
90
+ if (props.apiKey)
91
+ attrs['api-key'] = props.apiKey;
92
+ if (props.licenseKey)
93
+ attrs['license-key'] = props.licenseKey;
94
+ if (props.apiEndpoint)
95
+ attrs['api-endpoint'] = props.apiEndpoint;
96
+ if (props.contentId)
97
+ attrs['content-id'] = props.contentId;
98
+ if (props.controlsBehavior)
99
+ attrs['controls-behavior'] = props.controlsBehavior;
100
+ if (props.hideControls)
101
+ attrs['hide-controls'] = '';
102
+ if (props.primaryColor)
103
+ attrs['primary-color'] = props.primaryColor;
104
+ if (props.collabServer)
105
+ attrs['collab-server'] = props.collabServer;
106
+ if (props.collabRoom)
107
+ attrs['collab-room'] = props.collabRoom;
108
+ if (props.collabRole)
109
+ attrs['collab-role'] = props.collabRole;
110
+ if (props.collabUserId)
111
+ attrs['collab-user-id'] = props.collabUserId;
112
+ if (props.collabDisplayName)
113
+ attrs['collab-display-name'] = props.collabDisplayName;
114
+ if (props.collabPassword)
115
+ attrs['collab-password'] = props.collabPassword;
116
+ return attrs;
117
+ }
118
+ /**
119
+ * Create a forwarded ref for the custom element.
120
+ */
121
+ export function useVizorRef() {
122
+ return useRef(null);
123
+ }
124
+ //# sourceMappingURL=use-vizor-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-vizor-element.js","sourceRoot":"","sources":["../src/use-vizor-element.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@vizor-vr/react",
3
+ "version": "0.2.0",
4
+ "description": "React wrappers for Vizor VR Player",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/vizor-vr/vizor.git",
9
+ "directory": "packages/react"
10
+ },
11
+ "homepage": "https://vizor-vr.com",
12
+ "keywords": [
13
+ "react",
14
+ "vr",
15
+ "360-video",
16
+ "webxr",
17
+ "three.js",
18
+ "video-player"
19
+ ],
20
+ "type": "module",
21
+ "main": "dist/index.js",
22
+ "module": "dist/index.js",
23
+ "types": "dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "import": "./dist/index.js",
27
+ "types": "./dist/index.d.ts"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "peerDependencies": {
34
+ "react": ">=18.0.0",
35
+ "react-dom": ">=18.0.0"
36
+ },
37
+ "dependencies": {
38
+ "@vizor-vr/player": "0.2.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/react": "^19.0.0",
42
+ "@vitest/coverage-v8": "^3.0.0",
43
+ "react": "^19.0.0",
44
+ "typescript": "^5.7.0",
45
+ "vitest": "^3.0.0"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "scripts": {
51
+ "build": "tsc",
52
+ "dev": "tsc --watch",
53
+ "test": "vitest run"
54
+ }
55
+ }