@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.
- package/LICENSE +21 -0
- package/README.md +36 -0
- package/dist/VzAnnotation.d.ts +34 -0
- package/dist/VzAnnotation.d.ts.map +1 -0
- package/dist/VzAnnotation.js +46 -0
- package/dist/VzAnnotation.js.map +1 -0
- package/dist/VzCaption.d.ts +20 -0
- package/dist/VzCaption.d.ts.map +1 -0
- package/dist/VzCaption.js +25 -0
- package/dist/VzCaption.js.map +1 -0
- package/dist/VzCinema.d.ts +17 -0
- package/dist/VzCinema.d.ts.map +1 -0
- package/dist/VzCinema.js +32 -0
- package/dist/VzCinema.js.map +1 -0
- package/dist/VzImg.d.ts +16 -0
- package/dist/VzImg.d.ts.map +1 -0
- package/dist/VzImg.js +29 -0
- package/dist/VzImg.js.map +1 -0
- package/dist/VzLive.d.ts +28 -0
- package/dist/VzLive.d.ts.map +1 -0
- package/dist/VzLive.js +24 -0
- package/dist/VzLive.js.map +1 -0
- package/dist/VzPlaylist.d.ts +16 -0
- package/dist/VzPlaylist.d.ts.map +1 -0
- package/dist/VzPlaylist.js +57 -0
- package/dist/VzPlaylist.js.map +1 -0
- package/dist/VzTour.d.ts +21 -0
- package/dist/VzTour.d.ts.map +1 -0
- package/dist/VzTour.js +29 -0
- package/dist/VzTour.js.map +1 -0
- package/dist/VzVideo.d.ts +17 -0
- package/dist/VzVideo.d.ts.map +1 -0
- package/dist/VzVideo.js +32 -0
- package/dist/VzVideo.js.map +1 -0
- package/dist/__tests__/build-attributes.test.d.ts +2 -0
- package/dist/__tests__/build-attributes.test.d.ts.map +1 -0
- package/dist/__tests__/build-attributes.test.js +76 -0
- package/dist/__tests__/build-attributes.test.js.map +1 -0
- package/dist/__tests__/vz-annotation.test.d.ts +2 -0
- package/dist/__tests__/vz-annotation.test.d.ts.map +1 -0
- package/dist/__tests__/vz-annotation.test.js +29 -0
- package/dist/__tests__/vz-annotation.test.js.map +1 -0
- package/dist/__tests__/vz-caption.test.d.ts +2 -0
- package/dist/__tests__/vz-caption.test.d.ts.map +1 -0
- package/dist/__tests__/vz-caption.test.js +20 -0
- package/dist/__tests__/vz-caption.test.js.map +1 -0
- package/dist/__tests__/vz-components.test.d.ts +2 -0
- package/dist/__tests__/vz-components.test.d.ts.map +1 -0
- package/dist/__tests__/vz-components.test.js +106 -0
- package/dist/__tests__/vz-components.test.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +127 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/use-vizor-element.d.ts +18 -0
- package/dist/use-vizor-element.d.ts.map +1 -0
- package/dist/use-vizor-element.js +124 -0
- package/dist/use-vizor-element.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
vi.mock('@vizor-vr/player', () => ({}));
|
|
3
|
+
import { buildAttributes } from '../use-vizor-element.js';
|
|
4
|
+
describe('buildAttributes', () => {
|
|
5
|
+
it('returns empty object for no props', () => {
|
|
6
|
+
expect(buildAttributes({})).toEqual({});
|
|
7
|
+
});
|
|
8
|
+
it('maps format to string', () => {
|
|
9
|
+
const attrs = buildAttributes({ format: 'MONO_360' });
|
|
10
|
+
expect(attrs.format).toBe('MONO_360');
|
|
11
|
+
});
|
|
12
|
+
it('maps boolean props to empty string', () => {
|
|
13
|
+
const attrs = buildAttributes({ loop: true, muted: true });
|
|
14
|
+
expect(attrs.loop).toBe('');
|
|
15
|
+
expect(attrs.muted).toBe('');
|
|
16
|
+
});
|
|
17
|
+
it('does not include false boolean props', () => {
|
|
18
|
+
const attrs = buildAttributes({ loop: false });
|
|
19
|
+
expect(attrs.loop).toBeUndefined();
|
|
20
|
+
});
|
|
21
|
+
it('maps apiKey to api-key attribute', () => {
|
|
22
|
+
const attrs = buildAttributes({ apiKey: 'test-key' });
|
|
23
|
+
expect(attrs['api-key']).toBe('test-key');
|
|
24
|
+
});
|
|
25
|
+
it('maps licenseKey to license-key attribute', () => {
|
|
26
|
+
const attrs = buildAttributes({ licenseKey: 'lic-123' });
|
|
27
|
+
expect(attrs['license-key']).toBe('lic-123');
|
|
28
|
+
});
|
|
29
|
+
it('maps contentId to content-id attribute', () => {
|
|
30
|
+
const attrs = buildAttributes({ contentId: 'content-456' });
|
|
31
|
+
expect(attrs['content-id']).toBe('content-456');
|
|
32
|
+
});
|
|
33
|
+
it('maps apiEndpoint to api-endpoint', () => {
|
|
34
|
+
const attrs = buildAttributes({ apiEndpoint: 'https://api.example.com' });
|
|
35
|
+
expect(attrs['api-endpoint']).toBe('https://api.example.com');
|
|
36
|
+
});
|
|
37
|
+
it('maps controlsBehavior to controls-behavior', () => {
|
|
38
|
+
const attrs = buildAttributes({ controlsBehavior: 'autohide' });
|
|
39
|
+
expect(attrs['controls-behavior']).toBe('autohide');
|
|
40
|
+
});
|
|
41
|
+
it('maps hideControls to hide-controls', () => {
|
|
42
|
+
const attrs = buildAttributes({ hideControls: true });
|
|
43
|
+
expect(attrs['hide-controls']).toBe('');
|
|
44
|
+
});
|
|
45
|
+
it('maps primaryColor to primary-color', () => {
|
|
46
|
+
const attrs = buildAttributes({ primaryColor: '#ff0000' });
|
|
47
|
+
expect(attrs['primary-color']).toBe('#ff0000');
|
|
48
|
+
});
|
|
49
|
+
it('maps multiple props correctly', () => {
|
|
50
|
+
const attrs = buildAttributes({
|
|
51
|
+
format: 'STEREO_360_SBS',
|
|
52
|
+
title: 'Test Video',
|
|
53
|
+
poster: 'thumb.jpg',
|
|
54
|
+
loop: true,
|
|
55
|
+
muted: true,
|
|
56
|
+
preload: 'auto',
|
|
57
|
+
apiKey: 'key-123',
|
|
58
|
+
});
|
|
59
|
+
expect(attrs.format).toBe('STEREO_360_SBS');
|
|
60
|
+
expect(attrs.title).toBe('Test Video');
|
|
61
|
+
expect(attrs.poster).toBe('thumb.jpg');
|
|
62
|
+
expect(attrs.loop).toBe('');
|
|
63
|
+
expect(attrs.muted).toBe('');
|
|
64
|
+
expect(attrs.preload).toBe('auto');
|
|
65
|
+
expect(attrs['api-key']).toBe('key-123');
|
|
66
|
+
});
|
|
67
|
+
it('does not include undefined string props', () => {
|
|
68
|
+
const attrs = buildAttributes({ title: undefined });
|
|
69
|
+
expect(attrs.title).toBeUndefined();
|
|
70
|
+
});
|
|
71
|
+
it('does not include hideControls when false', () => {
|
|
72
|
+
const attrs = buildAttributes({ hideControls: false });
|
|
73
|
+
expect(attrs['hide-controls']).toBeUndefined();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=build-attributes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-attributes.test.js","sourceRoot":"","sources":["../../src/__tests__/build-attributes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vz-annotation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/vz-annotation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
// Mock @vizor-vr/player since we don't need the actual Web Components in unit tests
|
|
3
|
+
vi.mock('@vizor-vr/player', () => ({}));
|
|
4
|
+
describe('VzAnnotation', () => {
|
|
5
|
+
it('exports VzAnnotation component', async () => {
|
|
6
|
+
const mod = await import('../index.js');
|
|
7
|
+
expect(mod.VzAnnotation).toBeDefined();
|
|
8
|
+
expect(typeof mod.VzAnnotation).toBe('object'); // forwardRef returns object
|
|
9
|
+
});
|
|
10
|
+
it('exports VzAnnotationProps type (compile-time check)', async () => {
|
|
11
|
+
// Type-only import verified at compile time
|
|
12
|
+
const mod = await import('../VzAnnotation.js');
|
|
13
|
+
expect(mod.VzAnnotation).toBeDefined();
|
|
14
|
+
});
|
|
15
|
+
it('VzAnnotation props interface has correct shape', async () => {
|
|
16
|
+
// Verify the component accepts the expected props by checking its existence
|
|
17
|
+
const { VzAnnotation } = await import('../VzAnnotation.js');
|
|
18
|
+
expect(VzAnnotation).toBeDefined();
|
|
19
|
+
// The component is a forwardRef, so it has $$typeof
|
|
20
|
+
expect(VzAnnotation).toHaveProperty('$$typeof');
|
|
21
|
+
});
|
|
22
|
+
it('VzAnnotation is a forwardRef component', async () => {
|
|
23
|
+
const { VzAnnotation } = await import('../VzAnnotation.js');
|
|
24
|
+
// forwardRef components have $$typeof symbol
|
|
25
|
+
expect(VzAnnotation.$$typeof).toBeDefined();
|
|
26
|
+
expect(VzAnnotation.$$typeof.toString()).toContain('react.forward_ref');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=vz-annotation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vz-annotation.test.js","sourceRoot":"","sources":["../../src/__tests__/vz-annotation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,oFAAoF;AACpF,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAExC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,4BAA4B;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,4CAA4C;QAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,4EAA4E;QAC5E,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,oDAAoD;QACpD,MAAM,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,6CAA6C;QAC7C,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vz-caption.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/vz-caption.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
// Mock @vizor-vr/player since we don't need the actual Web Components in unit tests
|
|
3
|
+
vi.mock('@vizor-vr/player', () => ({}));
|
|
4
|
+
describe('VzCaption', () => {
|
|
5
|
+
it('exports VzCaption component from package index', async () => {
|
|
6
|
+
const mod = await import('../index.js');
|
|
7
|
+
expect(mod.VzCaption).toBeDefined();
|
|
8
|
+
});
|
|
9
|
+
it('is a forwardRef component', async () => {
|
|
10
|
+
const { VzCaption } = await import('../VzCaption.js');
|
|
11
|
+
// forwardRef components have $$typeof symbol
|
|
12
|
+
expect(VzCaption.$$typeof).toBeDefined();
|
|
13
|
+
expect(VzCaption.$$typeof.toString()).toContain('react.forward_ref');
|
|
14
|
+
});
|
|
15
|
+
it('has displayName set to VzCaption', async () => {
|
|
16
|
+
const { VzCaption } = await import('../VzCaption.js');
|
|
17
|
+
expect(VzCaption.displayName).toBe('VzCaption');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=vz-caption.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vz-caption.test.js","sourceRoot":"","sources":["../../src/__tests__/vz-caption.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,oFAAoF;AACpF,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAExC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACtD,6CAA6C;QAC7C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vz-components.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/vz-components.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
// Mock @vizor-vr/player since we don't need the actual Web Components in unit tests
|
|
3
|
+
vi.mock('@vizor-vr/player', () => ({}));
|
|
4
|
+
import { buildAttributes } from '../use-vizor-element.js';
|
|
5
|
+
// ─── buildAttributes utility tests ───────────────────────────────
|
|
6
|
+
describe('buildAttributes', () => {
|
|
7
|
+
it('converts camelCase licenseKey to kebab-case license-key attribute', () => {
|
|
8
|
+
const attrs = buildAttributes({ licenseKey: 'LK-123-ABC' });
|
|
9
|
+
expect(attrs['license-key']).toBe('LK-123-ABC');
|
|
10
|
+
});
|
|
11
|
+
it('sets boolean true attributes as empty string', () => {
|
|
12
|
+
const attrs = buildAttributes({ loop: true, muted: true, hideControls: true });
|
|
13
|
+
expect(attrs.loop).toBe('');
|
|
14
|
+
expect(attrs.muted).toBe('');
|
|
15
|
+
expect(attrs['hide-controls']).toBe('');
|
|
16
|
+
});
|
|
17
|
+
it('omits boolean false attributes entirely', () => {
|
|
18
|
+
const attrs = buildAttributes({ loop: false, muted: false, hideControls: false });
|
|
19
|
+
expect(attrs.loop).toBeUndefined();
|
|
20
|
+
expect(attrs.muted).toBeUndefined();
|
|
21
|
+
expect(attrs['hide-controls']).toBeUndefined();
|
|
22
|
+
});
|
|
23
|
+
it('converts apiKey prop to api-key attribute', () => {
|
|
24
|
+
const attrs = buildAttributes({ apiKey: 'ak_test_xyz' });
|
|
25
|
+
expect(attrs['api-key']).toBe('ak_test_xyz');
|
|
26
|
+
});
|
|
27
|
+
it('passes format prop through unchanged', () => {
|
|
28
|
+
const attrs = buildAttributes({ format: 'MONO_360' });
|
|
29
|
+
expect(attrs.format).toBe('MONO_360');
|
|
30
|
+
});
|
|
31
|
+
it('passes src-like string props through unchanged (poster, title)', () => {
|
|
32
|
+
const attrs = buildAttributes({ poster: 'thumb.jpg', title: 'My Video' });
|
|
33
|
+
expect(attrs.poster).toBe('thumb.jpg');
|
|
34
|
+
expect(attrs.title).toBe('My Video');
|
|
35
|
+
});
|
|
36
|
+
it('excludes event handler props (onPlay, onPause, etc.) from attributes', () => {
|
|
37
|
+
const props = {
|
|
38
|
+
format: 'MONO_360',
|
|
39
|
+
onPlay: () => { },
|
|
40
|
+
onPause: () => { },
|
|
41
|
+
onReady: () => { },
|
|
42
|
+
onEnded: () => { },
|
|
43
|
+
};
|
|
44
|
+
const attrs = buildAttributes(props);
|
|
45
|
+
expect(attrs).not.toHaveProperty('onPlay');
|
|
46
|
+
expect(attrs).not.toHaveProperty('onPause');
|
|
47
|
+
expect(attrs).not.toHaveProperty('onReady');
|
|
48
|
+
expect(attrs).not.toHaveProperty('onEnded');
|
|
49
|
+
expect(attrs.format).toBe('MONO_360');
|
|
50
|
+
});
|
|
51
|
+
it('excludes className from DOM attributes', () => {
|
|
52
|
+
const props = { className: 'my-player' };
|
|
53
|
+
const attrs = buildAttributes(props);
|
|
54
|
+
expect(attrs).not.toHaveProperty('className');
|
|
55
|
+
expect(attrs).not.toHaveProperty('class');
|
|
56
|
+
});
|
|
57
|
+
it('excludes style from DOM attributes', () => {
|
|
58
|
+
const props = { style: { width: '100%' } };
|
|
59
|
+
const attrs = buildAttributes(props);
|
|
60
|
+
expect(attrs).not.toHaveProperty('style');
|
|
61
|
+
});
|
|
62
|
+
it('maps controlsBehavior to controls-behavior attribute', () => {
|
|
63
|
+
const attrs = buildAttributes({ controlsBehavior: 'autohide' });
|
|
64
|
+
expect(attrs['controls-behavior']).toBe('autohide');
|
|
65
|
+
});
|
|
66
|
+
it('maps apiEndpoint to api-endpoint attribute', () => {
|
|
67
|
+
const attrs = buildAttributes({ apiEndpoint: 'https://api.vizor.dev' });
|
|
68
|
+
expect(attrs['api-endpoint']).toBe('https://api.vizor.dev');
|
|
69
|
+
});
|
|
70
|
+
it('maps contentId to content-id attribute', () => {
|
|
71
|
+
const attrs = buildAttributes({ contentId: 'vid-001' });
|
|
72
|
+
expect(attrs['content-id']).toBe('vid-001');
|
|
73
|
+
});
|
|
74
|
+
it('does not include undefined string props', () => {
|
|
75
|
+
const attrs = buildAttributes({});
|
|
76
|
+
expect(Object.keys(attrs)).toHaveLength(0);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
// ─── EVENT_MAP tests ─────────────────────────────────────────────
|
|
80
|
+
describe('EVENT_MAP (via use-vizor-element)', () => {
|
|
81
|
+
// We test event mapping by importing the module and checking the
|
|
82
|
+
// exported event map structure indirectly through the hook behavior.
|
|
83
|
+
// Since EVENT_MAP is not exported, we verify the contract via integration:
|
|
84
|
+
// the module maps React prop names to DOM event names.
|
|
85
|
+
it('onReady maps to vz-ready event', async () => {
|
|
86
|
+
// Verify by checking that the module attaches the correct DOM event.
|
|
87
|
+
// We import the full module and inspect its internal EVENT_MAP via the
|
|
88
|
+
// module's source structure.
|
|
89
|
+
const mod = await import('../use-vizor-element.js');
|
|
90
|
+
// buildAttributes should NOT include event props, confirming they are
|
|
91
|
+
// handled separately via EVENT_MAP
|
|
92
|
+
const attrs = mod.buildAttributes({ onReady: () => { } });
|
|
93
|
+
expect(attrs).not.toHaveProperty('onReady');
|
|
94
|
+
});
|
|
95
|
+
it('all 7 component exports exist in package index', async () => {
|
|
96
|
+
const mod = await import('../index.js');
|
|
97
|
+
expect(mod.VzVideo).toBeDefined();
|
|
98
|
+
expect(mod.VzImg).toBeDefined();
|
|
99
|
+
expect(mod.VzTour).toBeDefined();
|
|
100
|
+
expect(mod.VzCinema).toBeDefined();
|
|
101
|
+
expect(mod.VzLive).toBeDefined();
|
|
102
|
+
expect(mod.VzPlaylist).toBeDefined();
|
|
103
|
+
expect(mod.VzAnnotation).toBeDefined();
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=vz-components.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vz-components.test.js","sourceRoot":"","sources":["../../src/__tests__/vz-components.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vizor-vr/react — React wrappers for the Vizor VR Player
|
|
3
|
+
*
|
|
4
|
+
* This is a client-only package — the components render browser custom elements.
|
|
5
|
+
* The directive above marks the client boundary for React Server Components
|
|
6
|
+
* (Next.js App Router), so apps can import these from Server Components safely.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```tsx
|
|
10
|
+
* import { VzVideo, VzImg, VzLive, VzPlaylist } from '@vizor-vr/react';
|
|
11
|
+
*
|
|
12
|
+
* function App() {
|
|
13
|
+
* return (
|
|
14
|
+
* <VzVideo
|
|
15
|
+
* src="video.mp4"
|
|
16
|
+
* format="MONO_360"
|
|
17
|
+
* style={{ width: '100%', aspectRatio: '16/9' }}
|
|
18
|
+
* onReady={() => console.log('Player ready')}
|
|
19
|
+
* />
|
|
20
|
+
* );
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export { VzVideo } from './VzVideo.js';
|
|
25
|
+
export { VzImg } from './VzImg.js';
|
|
26
|
+
export { VzTour } from './VzTour.js';
|
|
27
|
+
export type { VzTourProps } from './VzTour.js';
|
|
28
|
+
export { VzCinema } from './VzCinema.js';
|
|
29
|
+
export { VzLive } from './VzLive.js';
|
|
30
|
+
export type { VzLiveHandle } from './VzLive.js';
|
|
31
|
+
export { VzPlaylist } from './VzPlaylist.js';
|
|
32
|
+
export { VzAnnotation } from './VzAnnotation.js';
|
|
33
|
+
export type { VzAnnotationProps } from './VzAnnotation.js';
|
|
34
|
+
export { VzCaption } from './VzCaption.js';
|
|
35
|
+
export type { VzCaptionProps } from './VzCaption.js';
|
|
36
|
+
export type { VzSource, VzCommonProps, VzVideoProps, VzImgProps, VzLiveProps, VzPlaylistProps, } from './types.js';
|
|
37
|
+
export { useVizorEvents, buildAttributes, useVizorRef } from './use-vizor-element.js';
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,YAAY,EACV,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
/**
|
|
3
|
+
* @vizor-vr/react — React wrappers for the Vizor VR Player
|
|
4
|
+
*
|
|
5
|
+
* This is a client-only package — the components render browser custom elements.
|
|
6
|
+
* The directive above marks the client boundary for React Server Components
|
|
7
|
+
* (Next.js App Router), so apps can import these from Server Components safely.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { VzVideo, VzImg, VzLive, VzPlaylist } from '@vizor-vr/react';
|
|
12
|
+
*
|
|
13
|
+
* function App() {
|
|
14
|
+
* return (
|
|
15
|
+
* <VzVideo
|
|
16
|
+
* src="video.mp4"
|
|
17
|
+
* format="MONO_360"
|
|
18
|
+
* style={{ width: '100%', aspectRatio: '16/9' }}
|
|
19
|
+
* onReady={() => console.log('Player ready')}
|
|
20
|
+
* />
|
|
21
|
+
* );
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
// Components
|
|
26
|
+
export { VzVideo } from './VzVideo.js';
|
|
27
|
+
export { VzImg } from './VzImg.js';
|
|
28
|
+
export { VzTour } from './VzTour.js';
|
|
29
|
+
export { VzCinema } from './VzCinema.js';
|
|
30
|
+
export { VzLive } from './VzLive.js';
|
|
31
|
+
export { VzPlaylist } from './VzPlaylist.js';
|
|
32
|
+
export { VzAnnotation } from './VzAnnotation.js';
|
|
33
|
+
export { VzCaption } from './VzCaption.js';
|
|
34
|
+
// Hooks (advanced usage)
|
|
35
|
+
export { useVizorEvents, buildAttributes, useVizorRef } from './use-vizor-element.js';
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAa3C,yBAAyB;AACzB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { VzFormat } from '@vizor-vr/player';
|
|
2
|
+
/** Source definition for React components */
|
|
3
|
+
export interface VzSource {
|
|
4
|
+
src: string;
|
|
5
|
+
type?: string;
|
|
6
|
+
quality?: string;
|
|
7
|
+
}
|
|
8
|
+
/** Common props shared by all Vizor player React components */
|
|
9
|
+
export interface VzCommonProps {
|
|
10
|
+
/** Video/image format (MONO_360, STEREO_360_LR, etc.) */
|
|
11
|
+
format?: VzFormat | string;
|
|
12
|
+
/** Content title */
|
|
13
|
+
title?: string;
|
|
14
|
+
/** Poster image URL */
|
|
15
|
+
poster?: string;
|
|
16
|
+
/** Whether to loop playback */
|
|
17
|
+
loop?: boolean;
|
|
18
|
+
/** Whether to start muted */
|
|
19
|
+
muted?: boolean;
|
|
20
|
+
/** Preload strategy */
|
|
21
|
+
preload?: 'auto' | 'metadata' | 'none';
|
|
22
|
+
/** API key for license validation */
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
/** Standalone license key */
|
|
25
|
+
licenseKey?: string;
|
|
26
|
+
/** API endpoint for license/analytics */
|
|
27
|
+
apiEndpoint?: string;
|
|
28
|
+
/** Content ID for analytics */
|
|
29
|
+
contentId?: string;
|
|
30
|
+
/** Controls behavior */
|
|
31
|
+
controlsBehavior?: 'autohide' | 'always' | 'minimal';
|
|
32
|
+
/** Hide controls entirely */
|
|
33
|
+
hideControls?: boolean;
|
|
34
|
+
/** Primary accent color */
|
|
35
|
+
primaryColor?: string;
|
|
36
|
+
/** Collaborative viewing server URL */
|
|
37
|
+
collabServer?: string;
|
|
38
|
+
/** Collaborative viewing room name */
|
|
39
|
+
collabRoom?: string;
|
|
40
|
+
/** Collaborative viewing role */
|
|
41
|
+
collabRole?: 'host' | 'viewer';
|
|
42
|
+
/** Collaborative viewing user ID */
|
|
43
|
+
collabUserId?: string;
|
|
44
|
+
/** Collaborative viewing display name */
|
|
45
|
+
collabDisplayName?: string;
|
|
46
|
+
/** Collaborative viewing room password */
|
|
47
|
+
collabPassword?: string;
|
|
48
|
+
/** CSS class name */
|
|
49
|
+
className?: string;
|
|
50
|
+
/** Inline styles */
|
|
51
|
+
style?: React.CSSProperties;
|
|
52
|
+
/** Sources array (alternative to children) */
|
|
53
|
+
sources?: VzSource[];
|
|
54
|
+
onReady?: () => void;
|
|
55
|
+
onPlay?: () => void;
|
|
56
|
+
onPause?: () => void;
|
|
57
|
+
onEnded?: () => void;
|
|
58
|
+
onTimeUpdate?: (e: Event) => void;
|
|
59
|
+
onError?: (detail: {
|
|
60
|
+
code: string;
|
|
61
|
+
message: string;
|
|
62
|
+
}) => void;
|
|
63
|
+
onQualityChange?: (detail: {
|
|
64
|
+
quality: string;
|
|
65
|
+
auto: boolean;
|
|
66
|
+
}) => void;
|
|
67
|
+
onFullscreenEnter?: () => void;
|
|
68
|
+
onFullscreenExit?: () => void;
|
|
69
|
+
onXrSessionStart?: () => void;
|
|
70
|
+
onXrSessionEnd?: () => void;
|
|
71
|
+
onAnnotationClick?: (detail: {
|
|
72
|
+
id: string;
|
|
73
|
+
lat: number;
|
|
74
|
+
lon: number;
|
|
75
|
+
}) => void;
|
|
76
|
+
onOrientationChange?: (detail: {
|
|
77
|
+
lat: number;
|
|
78
|
+
lon: number;
|
|
79
|
+
}) => void;
|
|
80
|
+
onLicenseValidated?: (detail: {
|
|
81
|
+
tier: string;
|
|
82
|
+
valid: boolean;
|
|
83
|
+
}) => void;
|
|
84
|
+
onCaptionChange?: (detail: {
|
|
85
|
+
lang: string;
|
|
86
|
+
label: string;
|
|
87
|
+
}) => void;
|
|
88
|
+
}
|
|
89
|
+
/** Props specific to video elements */
|
|
90
|
+
export interface VzVideoProps extends VzCommonProps {
|
|
91
|
+
/** Direct source URL */
|
|
92
|
+
src?: string;
|
|
93
|
+
}
|
|
94
|
+
/** Props specific to image elements */
|
|
95
|
+
export interface VzImgProps extends Omit<VzCommonProps, 'loop' | 'muted' | 'preload'> {
|
|
96
|
+
/** Image source URL */
|
|
97
|
+
src?: string;
|
|
98
|
+
}
|
|
99
|
+
/** Props specific to live elements */
|
|
100
|
+
export interface VzLiveProps extends VzCommonProps {
|
|
101
|
+
/** Stream source URL */
|
|
102
|
+
src?: string;
|
|
103
|
+
}
|
|
104
|
+
/** Props for playlist elements */
|
|
105
|
+
export interface VzPlaylistProps {
|
|
106
|
+
/** Auto-advance to next item on end */
|
|
107
|
+
autoplay?: boolean;
|
|
108
|
+
/** Loop back to first item after last */
|
|
109
|
+
loopPlaylist?: boolean;
|
|
110
|
+
/** Panel mode */
|
|
111
|
+
panel?: 'none' | 'expandable';
|
|
112
|
+
/** CSS class name */
|
|
113
|
+
className?: string;
|
|
114
|
+
/** Inline styles */
|
|
115
|
+
style?: React.CSSProperties;
|
|
116
|
+
/** Child elements */
|
|
117
|
+
children?: React.ReactNode;
|
|
118
|
+
/** Playlist change handler */
|
|
119
|
+
onPlaylistChange?: (detail: {
|
|
120
|
+
index: number;
|
|
121
|
+
title: string;
|
|
122
|
+
total: number;
|
|
123
|
+
}) => void;
|
|
124
|
+
/** Playlist end handler */
|
|
125
|
+
onPlaylistEnd?: () => void;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
import type { VzCommonProps } from './types.js';
|
|
3
|
+
import '@vizor-vr/player/register';
|
|
4
|
+
/**
|
|
5
|
+
* Hook that attaches event listeners to a Vizor custom element ref.
|
|
6
|
+
* Handles cleanup on unmount and re-attaching when handlers change.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useVizorEvents(ref: RefObject<HTMLElement | null>, props: VzCommonProps): void;
|
|
9
|
+
/**
|
|
10
|
+
* Build HTML attributes object from common props.
|
|
11
|
+
* React passes unknown props to custom elements as attributes.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildAttributes(props: VzCommonProps): Record<string, string | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* Create a forwarded ref for the custom element.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useVizorRef(): RefObject<HTMLElement | null>;
|
|
18
|
+
//# sourceMappingURL=use-vizor-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-vizor-element.d.ts","sourceRoot":"","sources":["../src/use-vizor-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,OAAO,2BAA2B,CAAC;AAyBnC;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,KAAK,EAAE,aAAa,GACnB,IAAI,CA4CN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAwBpC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAE3D"}
|