@vizor-vr/player 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 +58 -0
- package/dist/__tests__/adapter-factory.test.d.ts +2 -0
- package/dist/__tests__/adapter-factory.test.d.ts.map +1 -0
- package/dist/__tests__/analytics-collector.test.d.ts +2 -0
- package/dist/__tests__/analytics-collector.test.d.ts.map +1 -0
- package/dist/__tests__/annotation-manager.test.d.ts +2 -0
- package/dist/__tests__/annotation-manager.test.d.ts.map +1 -0
- package/dist/__tests__/annotation-popup.test.d.ts +2 -0
- package/dist/__tests__/annotation-popup.test.d.ts.map +1 -0
- package/dist/__tests__/annotation-sprite.test.d.ts +2 -0
- package/dist/__tests__/annotation-sprite.test.d.ts.map +1 -0
- package/dist/__tests__/audio-manager.test.d.ts +2 -0
- package/dist/__tests__/audio-manager.test.d.ts.map +1 -0
- package/dist/__tests__/base-element-attrs.test.d.ts +2 -0
- package/dist/__tests__/base-element-attrs.test.d.ts.map +1 -0
- package/dist/__tests__/camera-controller.test.d.ts +2 -0
- package/dist/__tests__/camera-controller.test.d.ts.map +1 -0
- package/dist/__tests__/caption-renderer.test.d.ts +2 -0
- package/dist/__tests__/caption-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/cc-button.test.d.ts +2 -0
- package/dist/__tests__/cc-button.test.d.ts.map +1 -0
- package/dist/__tests__/chat-button.test.d.ts +2 -0
- package/dist/__tests__/chat-button.test.d.ts.map +1 -0
- package/dist/__tests__/chat-panel.test.d.ts +2 -0
- package/dist/__tests__/chat-panel.test.d.ts.map +1 -0
- package/dist/__tests__/cinema-projection.test.d.ts +2 -0
- package/dist/__tests__/cinema-projection.test.d.ts.map +1 -0
- package/dist/__tests__/collab-client.test.d.ts +2 -0
- package/dist/__tests__/collab-client.test.d.ts.map +1 -0
- package/dist/__tests__/compass.test.d.ts +2 -0
- package/dist/__tests__/compass.test.d.ts.map +1 -0
- package/dist/__tests__/controls-overlay.test.d.ts +2 -0
- package/dist/__tests__/controls-overlay.test.d.ts.map +1 -0
- package/dist/__tests__/cubemap-projection.test.d.ts +2 -0
- package/dist/__tests__/cubemap-projection.test.d.ts.map +1 -0
- package/dist/__tests__/dash-adapter.test.d.ts +2 -0
- package/dist/__tests__/dash-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/eac-projection.test.d.ts +2 -0
- package/dist/__tests__/eac-projection.test.d.ts.map +1 -0
- package/dist/__tests__/equirect-projection.test.d.ts +2 -0
- package/dist/__tests__/equirect-projection.test.d.ts.map +1 -0
- package/dist/__tests__/event-emitter.test.d.ts +2 -0
- package/dist/__tests__/event-emitter.test.d.ts.map +1 -0
- package/dist/__tests__/feature-gates-branding.test.d.ts +2 -0
- package/dist/__tests__/feature-gates-branding.test.d.ts.map +1 -0
- package/dist/__tests__/feature-gates.test.d.ts +2 -0
- package/dist/__tests__/feature-gates.test.d.ts.map +1 -0
- package/dist/__tests__/fisheye-projection.test.d.ts +2 -0
- package/dist/__tests__/fisheye-projection.test.d.ts.map +1 -0
- package/dist/__tests__/flat-projection.test.d.ts +2 -0
- package/dist/__tests__/flat-projection.test.d.ts.map +1 -0
- package/dist/__tests__/flat-video-integration.test.d.ts +2 -0
- package/dist/__tests__/flat-video-integration.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-button.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-button.test.d.ts.map +1 -0
- package/dist/__tests__/gaze-cursor-manager.test.d.ts +2 -0
- package/dist/__tests__/gaze-cursor-manager.test.d.ts.map +1 -0
- package/dist/__tests__/gaze-sender.test.d.ts +2 -0
- package/dist/__tests__/gaze-sender.test.d.ts.map +1 -0
- package/dist/__tests__/gaze-tracker.test.d.ts +2 -0
- package/dist/__tests__/gaze-tracker.test.d.ts.map +1 -0
- package/dist/__tests__/hls-adapter.test.d.ts +2 -0
- package/dist/__tests__/hls-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/hotspot-interaction.test.d.ts +2 -0
- package/dist/__tests__/hotspot-interaction.test.d.ts.map +1 -0
- package/dist/__tests__/hotspot-manager.test.d.ts +2 -0
- package/dist/__tests__/hotspot-manager.test.d.ts.map +1 -0
- package/dist/__tests__/hotspot-renderer.test.d.ts +2 -0
- package/dist/__tests__/hotspot-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/integrity.test.d.ts +2 -0
- package/dist/__tests__/integrity.test.d.ts.map +1 -0
- package/dist/__tests__/keyboard-shortcuts.test.d.ts +2 -0
- package/dist/__tests__/keyboard-shortcuts.test.d.ts.map +1 -0
- package/dist/__tests__/license-checker.test.d.ts +2 -0
- package/dist/__tests__/license-checker.test.d.ts.map +1 -0
- package/dist/__tests__/live-indicator.test.d.ts +2 -0
- package/dist/__tests__/live-indicator.test.d.ts.map +1 -0
- package/dist/__tests__/live.test.d.ts +2 -0
- package/dist/__tests__/live.test.d.ts.map +1 -0
- package/dist/__tests__/master-key.test.d.ts +2 -0
- package/dist/__tests__/master-key.test.d.ts.map +1 -0
- package/dist/__tests__/media-element.test.d.ts +2 -0
- package/dist/__tests__/media-element.test.d.ts.map +1 -0
- package/dist/__tests__/meta-config.test.d.ts +2 -0
- package/dist/__tests__/meta-config.test.d.ts.map +1 -0
- package/dist/__tests__/play-button.test.d.ts +2 -0
- package/dist/__tests__/play-button.test.d.ts.map +1 -0
- package/dist/__tests__/player-exports.test.d.ts +2 -0
- package/dist/__tests__/player-exports.test.d.ts.map +1 -0
- package/dist/__tests__/player-state.test.d.ts +2 -0
- package/dist/__tests__/player-state.test.d.ts.map +1 -0
- package/dist/__tests__/playlist-controls.test.d.ts +2 -0
- package/dist/__tests__/playlist-controls.test.d.ts.map +1 -0
- package/dist/__tests__/playlist-panel.test.d.ts +2 -0
- package/dist/__tests__/playlist-panel.test.d.ts.map +1 -0
- package/dist/__tests__/playlist.test.d.ts +2 -0
- package/dist/__tests__/playlist.test.d.ts.map +1 -0
- package/dist/__tests__/progressive-adapter.test.d.ts +2 -0
- package/dist/__tests__/progressive-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/quality-selector.test.d.ts +2 -0
- package/dist/__tests__/quality-selector.test.d.ts.map +1 -0
- package/dist/__tests__/renderer.test.d.ts +2 -0
- package/dist/__tests__/renderer.test.d.ts.map +1 -0
- package/dist/__tests__/security/license-key-exposure.test.d.ts +2 -0
- package/dist/__tests__/security/license-key-exposure.test.d.ts.map +1 -0
- package/dist/__tests__/security/sanitize-xss.test.d.ts +2 -0
- package/dist/__tests__/security/sanitize-xss.test.d.ts.map +1 -0
- package/dist/__tests__/security/sri-generation.test.d.ts +2 -0
- package/dist/__tests__/security/sri-generation.test.d.ts.map +1 -0
- package/dist/__tests__/security/xss-annotations.test.d.ts +2 -0
- package/dist/__tests__/security/xss-annotations.test.d.ts.map +1 -0
- package/dist/__tests__/security/xss-captions.test.d.ts +2 -0
- package/dist/__tests__/security/xss-captions.test.d.ts.map +1 -0
- package/dist/__tests__/seek-bar.test.d.ts +2 -0
- package/dist/__tests__/seek-bar.test.d.ts.map +1 -0
- package/dist/__tests__/source-manager.test.d.ts +2 -0
- package/dist/__tests__/source-manager.test.d.ts.map +1 -0
- package/dist/__tests__/sprint1-memory-disposal.test.d.ts +10 -0
- package/dist/__tests__/sprint1-memory-disposal.test.d.ts.map +1 -0
- package/dist/__tests__/sprint3-frustum-adaptive.test.d.ts +9 -0
- package/dist/__tests__/sprint3-frustum-adaptive.test.d.ts.map +1 -0
- package/dist/__tests__/sprint5-bundle-memory.test.d.ts +18 -0
- package/dist/__tests__/sprint5-bundle-memory.test.d.ts.map +1 -0
- package/dist/__tests__/voice-button.test.d.ts +2 -0
- package/dist/__tests__/voice-button.test.d.ts.map +1 -0
- package/dist/__tests__/voice-manager.test.d.ts +2 -0
- package/dist/__tests__/voice-manager.test.d.ts.map +1 -0
- package/dist/__tests__/volume-control.test.d.ts +2 -0
- package/dist/__tests__/volume-control.test.d.ts.map +1 -0
- package/dist/__tests__/vr-button.test.d.ts +2 -0
- package/dist/__tests__/vr-button.test.d.ts.map +1 -0
- package/dist/__tests__/vz-cinema-element.test.d.ts +2 -0
- package/dist/__tests__/vz-cinema-element.test.d.ts.map +1 -0
- package/dist/__tests__/vz-img-element.test.d.ts +2 -0
- package/dist/__tests__/vz-img-element.test.d.ts.map +1 -0
- package/dist/__tests__/vz-playlist-element.test.d.ts +2 -0
- package/dist/__tests__/vz-playlist-element.test.d.ts.map +1 -0
- package/dist/__tests__/vz-tour-element.test.d.ts +2 -0
- package/dist/__tests__/vz-tour-element.test.d.ts.map +1 -0
- package/dist/__tests__/vz-tour-img.test.d.ts +2 -0
- package/dist/__tests__/vz-tour-img.test.d.ts.map +1 -0
- package/dist/__tests__/vz-tour-portal.test.d.ts +2 -0
- package/dist/__tests__/vz-tour-portal.test.d.ts.map +1 -0
- package/dist/__tests__/vz-video-element.test.d.ts +2 -0
- package/dist/__tests__/vz-video-element.test.d.ts.map +1 -0
- package/dist/__tests__/watermark-guard.test.d.ts +2 -0
- package/dist/__tests__/watermark-guard.test.d.ts.map +1 -0
- package/dist/__tests__/watermark.test.d.ts +2 -0
- package/dist/__tests__/watermark.test.d.ts.map +1 -0
- package/dist/__tests__/webvtt-parser.test.d.ts +2 -0
- package/dist/__tests__/webvtt-parser.test.d.ts.map +1 -0
- package/dist/__tests__/xr-controller.test.d.ts +2 -0
- package/dist/__tests__/xr-controller.test.d.ts.map +1 -0
- package/dist/__tests__/xr-manager.test.d.ts +2 -0
- package/dist/__tests__/xr-manager.test.d.ts.map +1 -0
- package/dist/analytics/analytics-collector.d.ts +29 -0
- package/dist/analytics/analytics-collector.d.ts.map +1 -0
- package/dist/analytics/gaze-tracker.d.ts +44 -0
- package/dist/analytics/gaze-tracker.d.ts.map +1 -0
- package/dist/analytics/index.d.ts +32 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/annotations/annotation-manager.d.ts +31 -0
- package/dist/annotations/annotation-manager.d.ts.map +1 -0
- package/dist/annotations/annotation-popup.d.ts +21 -0
- package/dist/annotations/annotation-popup.d.ts.map +1 -0
- package/dist/annotations/annotation-sprite.d.ts +10 -0
- package/dist/annotations/annotation-sprite.d.ts.map +1 -0
- package/dist/annotations/index.d.ts +4 -0
- package/dist/annotations/index.d.ts.map +1 -0
- package/dist/annotations-C0ugfCn4.js +2158 -0
- package/dist/annotations-C0ugfCn4.js.map +1 -0
- package/dist/audio/ambisonic-renderer.d.ts +36 -0
- package/dist/audio/ambisonic-renderer.d.ts.map +1 -0
- package/dist/audio/audio-manager.d.ts +44 -0
- package/dist/audio/audio-manager.d.ts.map +1 -0
- package/dist/captions/caption-renderer.d.ts +57 -0
- package/dist/captions/caption-renderer.d.ts.map +1 -0
- package/dist/captions/index.d.ts +3 -0
- package/dist/captions/index.d.ts.map +1 -0
- package/dist/captions/webvtt-parser.d.ts +31 -0
- package/dist/captions/webvtt-parser.d.ts.map +1 -0
- package/dist/captions-BP0H2E03.js +274 -0
- package/dist/captions-BP0H2E03.js.map +1 -0
- package/dist/collab-BXPomrS0.js +978 -0
- package/dist/collab-BXPomrS0.js.map +1 -0
- package/dist/collaborative/chat-button.d.ts +22 -0
- package/dist/collaborative/chat-button.d.ts.map +1 -0
- package/dist/collaborative/chat-panel.d.ts +46 -0
- package/dist/collaborative/chat-panel.d.ts.map +1 -0
- package/dist/collaborative/collab-client.d.ts +73 -0
- package/dist/collaborative/collab-client.d.ts.map +1 -0
- package/dist/collaborative/gaze-cursor-manager.d.ts +29 -0
- package/dist/collaborative/gaze-cursor-manager.d.ts.map +1 -0
- package/dist/collaborative/gaze-sender.d.ts +29 -0
- package/dist/collaborative/gaze-sender.d.ts.map +1 -0
- package/dist/collaborative/voice-button.d.ts +25 -0
- package/dist/collaborative/voice-button.d.ts.map +1 -0
- package/dist/collaborative/voice-manager.d.ts +45 -0
- package/dist/collaborative/voice-manager.d.ts.map +1 -0
- package/dist/config/format-registry.d.ts +2 -0
- package/dist/config/format-registry.d.ts.map +1 -0
- package/dist/config/meta-config.d.ts +14 -0
- package/dist/config/meta-config.d.ts.map +1 -0
- package/dist/controls/cc-button.d.ts +24 -0
- package/dist/controls/cc-button.d.ts.map +1 -0
- package/dist/controls/compass.d.ts +15 -0
- package/dist/controls/compass.d.ts.map +1 -0
- package/dist/controls/controls-overlay.d.ts +46 -0
- package/dist/controls/controls-overlay.d.ts.map +1 -0
- package/dist/controls/fullscreen-button.d.ts +16 -0
- package/dist/controls/fullscreen-button.d.ts.map +1 -0
- package/dist/controls/icons.d.ts +23 -0
- package/dist/controls/icons.d.ts.map +1 -0
- package/dist/controls/keyboard-shortcuts.d.ts +21 -0
- package/dist/controls/keyboard-shortcuts.d.ts.map +1 -0
- package/dist/controls/live-indicator.d.ts +17 -0
- package/dist/controls/live-indicator.d.ts.map +1 -0
- package/dist/controls/play-button.d.ts +14 -0
- package/dist/controls/play-button.d.ts.map +1 -0
- package/dist/controls/playlist-controls.d.ts +18 -0
- package/dist/controls/playlist-controls.d.ts.map +1 -0
- package/dist/controls/playlist-panel.d.ts +27 -0
- package/dist/controls/playlist-panel.d.ts.map +1 -0
- package/dist/controls/quality-menu.d.ts +17 -0
- package/dist/controls/quality-menu.d.ts.map +1 -0
- package/dist/controls/seek-bar.d.ts +23 -0
- package/dist/controls/seek-bar.d.ts.map +1 -0
- package/dist/controls/volume-control.d.ts +14 -0
- package/dist/controls/volume-control.d.ts.map +1 -0
- package/dist/controls/vr-button.d.ts +14 -0
- package/dist/controls/vr-button.d.ts.map +1 -0
- package/dist/core/base-element.d.ts +53 -0
- package/dist/core/base-element.d.ts.map +1 -0
- package/dist/core/event-emitter.d.ts +23 -0
- package/dist/core/event-emitter.d.ts.map +1 -0
- package/dist/core/html-element.d.ts +13 -0
- package/dist/core/html-element.d.ts.map +1 -0
- package/dist/core/media-element.d.ts +86 -0
- package/dist/core/media-element.d.ts.map +1 -0
- package/dist/core/player-state.d.ts +63 -0
- package/dist/core/player-state.d.ts.map +1 -0
- package/dist/dash-adapter-tid9ZyhO.js +75 -0
- package/dist/dash-adapter-tid9ZyhO.js.map +1 -0
- package/dist/elements/vz-annotation.d.ts +26 -0
- package/dist/elements/vz-annotation.d.ts.map +1 -0
- package/dist/elements/vz-cinema.d.ts +28 -0
- package/dist/elements/vz-cinema.d.ts.map +1 -0
- package/dist/elements/vz-img.d.ts +27 -0
- package/dist/elements/vz-img.d.ts.map +1 -0
- package/dist/elements/vz-live.d.ts +36 -0
- package/dist/elements/vz-live.d.ts.map +1 -0
- package/dist/elements/vz-playlist.d.ts +74 -0
- package/dist/elements/vz-playlist.d.ts.map +1 -0
- package/dist/elements/vz-tour-img.d.ts +21 -0
- package/dist/elements/vz-tour-img.d.ts.map +1 -0
- package/dist/elements/vz-tour-portal.d.ts +19 -0
- package/dist/elements/vz-tour-portal.d.ts.map +1 -0
- package/dist/elements/vz-tour.d.ts +49 -0
- package/dist/elements/vz-tour.d.ts.map +1 -0
- package/dist/elements/vz-video.d.ts +21 -0
- package/dist/elements/vz-video.d.ts.map +1 -0
- package/dist/hls-adapter-BivH46L_.js +97 -0
- package/dist/hls-adapter-BivH46L_.js.map +1 -0
- package/dist/hotspots/hotspot-interaction.d.ts +23 -0
- package/dist/hotspots/hotspot-interaction.d.ts.map +1 -0
- package/dist/hotspots/hotspot-manager.d.ts +18 -0
- package/dist/hotspots/hotspot-manager.d.ts.map +1 -0
- package/dist/hotspots/hotspot-renderer.d.ts +26 -0
- package/dist/hotspots/hotspot-renderer.d.ts.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/license/feature-gates.d.ts +6 -0
- package/dist/license/feature-gates.d.ts.map +1 -0
- package/dist/license/integrity.d.ts +33 -0
- package/dist/license/integrity.d.ts.map +1 -0
- package/dist/license/license-checker.d.ts +18 -0
- package/dist/license/license-checker.d.ts.map +1 -0
- package/dist/license/master-key.d.ts +14 -0
- package/dist/license/master-key.d.ts.map +1 -0
- package/dist/license/watermark-guard.d.ts +24 -0
- package/dist/license/watermark-guard.d.ts.map +1 -0
- package/dist/license/watermark.d.ts +19 -0
- package/dist/license/watermark.d.ts.map +1 -0
- package/dist/register-CwnmiGEs.js +5740 -0
- package/dist/register-CwnmiGEs.js.map +1 -0
- package/dist/register.d.ts +6 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +5 -0
- package/dist/register.js.map +1 -0
- package/dist/renderer/camera-controller.d.ts +75 -0
- package/dist/renderer/camera-controller.d.ts.map +1 -0
- package/dist/renderer/projections/cinema-projection.d.ts +32 -0
- package/dist/renderer/projections/cinema-projection.d.ts.map +1 -0
- package/dist/renderer/projections/cubemap-projection.d.ts +34 -0
- package/dist/renderer/projections/cubemap-projection.d.ts.map +1 -0
- package/dist/renderer/projections/eac-projection.d.ts +35 -0
- package/dist/renderer/projections/eac-projection.d.ts.map +1 -0
- package/dist/renderer/projections/equirect-projection.d.ts +27 -0
- package/dist/renderer/projections/equirect-projection.d.ts.map +1 -0
- package/dist/renderer/projections/fisheye-projection.d.ts +28 -0
- package/dist/renderer/projections/fisheye-projection.d.ts.map +1 -0
- package/dist/renderer/projections/flat-projection.d.ts +32 -0
- package/dist/renderer/projections/flat-projection.d.ts.map +1 -0
- package/dist/renderer/projections/projection.d.ts +18 -0
- package/dist/renderer/projections/projection.d.ts.map +1 -0
- package/dist/renderer/renderer.d.ts +72 -0
- package/dist/renderer/renderer.d.ts.map +1 -0
- package/dist/renderer/shaders/eac.glsl.d.ts +12 -0
- package/dist/renderer/shaders/eac.glsl.d.ts.map +1 -0
- package/dist/renderer/shaders/fisheye.glsl.d.ts +22 -0
- package/dist/renderer/shaders/fisheye.glsl.d.ts.map +1 -0
- package/dist/spatial-BeadwNJA.js +146 -0
- package/dist/spatial-BeadwNJA.js.map +1 -0
- package/dist/sri.json +12 -0
- package/dist/streaming/adapter-factory.d.ts +8 -0
- package/dist/streaming/adapter-factory.d.ts.map +1 -0
- package/dist/streaming/dash-adapter.d.ts +21 -0
- package/dist/streaming/dash-adapter.d.ts.map +1 -0
- package/dist/streaming/hls-adapter.d.ts +26 -0
- package/dist/streaming/hls-adapter.d.ts.map +1 -0
- package/dist/streaming/progressive-adapter.d.ts +18 -0
- package/dist/streaming/progressive-adapter.d.ts.map +1 -0
- package/dist/streaming/quality-selector.d.ts +25 -0
- package/dist/streaming/quality-selector.d.ts.map +1 -0
- package/dist/streaming/source-manager.d.ts +46 -0
- package/dist/streaming/source-manager.d.ts.map +1 -0
- package/dist/streaming/types.d.ts +25 -0
- package/dist/streaming/types.d.ts.map +1 -0
- package/dist/styles/controls.d.ts +15 -0
- package/dist/styles/controls.d.ts.map +1 -0
- package/dist/three-Bci7aSeI.js +20078 -0
- package/dist/three-Bci7aSeI.js.map +1 -0
- package/dist/utils/fullscreen.d.ts +6 -0
- package/dist/utils/fullscreen.d.ts.map +1 -0
- package/dist/utils/sanitize.d.ts +19 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/vizor.js +113 -0
- package/dist/vizor.js.map +1 -0
- package/dist/xr/xr-controller.d.ts +27 -0
- package/dist/xr/xr-controller.d.ts.map +1 -0
- package/dist/xr/xr-manager.d.ts +43 -0
- package/dist/xr/xr-manager.d.ts.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG icon strings for controls.
|
|
3
|
+
* Uses stroke-based icons with 1.5px weight for a refined, Vimeo-inspired look.
|
|
4
|
+
* Play/pause remain filled for quick recognition.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ICON_PLAY = "<svg viewBox=\"0 0 24 24\"><path d=\"M8 5v14l11-7z\"/></svg>";
|
|
7
|
+
export declare const ICON_PAUSE = "<svg viewBox=\"0 0 24 24\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"/></svg>";
|
|
8
|
+
export declare const ICON_VOLUME_HIGH = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\"/><path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>";
|
|
9
|
+
export declare const ICON_VOLUME_LOW = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>";
|
|
10
|
+
export declare const ICON_VOLUME_MUTED = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" fill=\"currentColor\" stroke=\"none\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>";
|
|
11
|
+
export declare const ICON_FULLSCREEN = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 3 21 3 21 9\"/><polyline points=\"9 21 3 21 3 15\"/><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"/><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"/></svg>";
|
|
12
|
+
export declare const ICON_FULLSCREEN_EXIT = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 14 10 14 10 20\"/><polyline points=\"20 10 14 10 14 4\"/><line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\"/><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"/></svg>";
|
|
13
|
+
export declare const ICON_VR = "<svg viewBox=\"0 0 24 24\"><path d=\"M20.74 6H3.21C2.55 6 2 6.57 2 7.28v10.44c0 .7.55 1.28 1.23 1.28h4.79c.52 0 .96-.3 1.19-.77l1.58-3.15c.28-.58.84-.94 1.43-.94h1.56c.59 0 1.15.36 1.43.94l1.58 3.15c.23.47.67.77 1.19.77h4.79c.68 0 1.23-.57 1.23-1.28V7.28C22 6.57 21.43 6 20.74 6zM7.5 14.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5zm9 0c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\"/></svg>";
|
|
14
|
+
export declare const ICON_COMPASS = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\" fill=\"currentColor\"/></svg>";
|
|
15
|
+
export declare const ICON_SETTINGS = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"/></svg>";
|
|
16
|
+
export declare const ICON_PLAYLIST_NEXT = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"5 4 15 12 5 20 5 4\" fill=\"currentColor\"/><line x1=\"19\" y1=\"5\" x2=\"19\" y2=\"19\"/></svg>";
|
|
17
|
+
export declare const ICON_PLAYLIST_PREV = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"19 20 9 12 19 4 19 20\" fill=\"currentColor\"/><line x1=\"5\" y1=\"19\" x2=\"5\" y2=\"5\"/></svg>";
|
|
18
|
+
export declare const ICON_LIVE_DOT = "<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"6\" fill=\"currentColor\"/></svg>";
|
|
19
|
+
export declare const ICON_CC = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" ry=\"2\"/><path d=\"M7 10.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5\"/><path d=\"M7 13.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5\"/><path d=\"M14 10.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5\"/><path d=\"M14 13.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5\"/></svg>";
|
|
20
|
+
export declare const ICON_CHAT = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/></svg>";
|
|
21
|
+
export declare const ICON_MIC = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"/><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"/><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"/><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"/></svg>";
|
|
22
|
+
export declare const ICON_MIC_MUTED = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/><path d=\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\"/><path d=\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2c0 .64-.09 1.26-.26 1.85\"/><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"/><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"/></svg>";
|
|
23
|
+
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/controls/icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,SAAS,iEAA6D,CAAC;AAEpF,eAAO,MAAM,UAAU,mFAA+E,CAAC;AAEvG,eAAO,MAAM,gBAAgB,wUAAkT,CAAC;AAEhV,eAAO,MAAM,eAAe,2RAAuQ,CAAC;AAEpS,eAAO,MAAM,iBAAiB,6UAA2S,CAAC;AAE1U,eAAO,MAAM,eAAe,0TAA0R,CAAC;AAEvT,eAAO,MAAM,oBAAoB,8TAA8R,CAAC;AAEhU,eAAO,MAAM,OAAO,6cAAyc,CAAC;AAE9d,eAAO,MAAM,YAAY,4RAAsQ,CAAC;AAEhS,eAAO,MAAM,aAAa,65BAAy4B,CAAC;AAGp6B,eAAO,MAAM,kBAAkB,gQAAwO,CAAC;AAExQ,eAAO,MAAM,kBAAkB,iQAAyO,CAAC;AAEzQ,eAAO,MAAM,aAAa,iGAAuF,CAAC;AAElH,eAAO,MAAM,OAAO,gcAAga,CAAC;AAErb,eAAO,MAAM,SAAS,+NAAiN,CAAC;AAExO,eAAO,MAAM,QAAQ,2VAA2T,CAAC;AAEjV,eAAO,MAAM,cAAc,0aAAkY,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PlayerState } from '../core/player-state.js';
|
|
2
|
+
import type { VzMediaElement } from '../core/media-element.js';
|
|
3
|
+
import type { CaptionRenderer } from '../captions/caption-renderer.js';
|
|
4
|
+
import type { ChatPanel } from '../collaborative/chat-panel.js';
|
|
5
|
+
import type { VoiceButton } from '../collaborative/voice-button.js';
|
|
6
|
+
/**
|
|
7
|
+
* Keyboard shortcut handler for the player.
|
|
8
|
+
* Listens on the host element to avoid conflicts with
|
|
9
|
+
* CameraController's arrow key handling in the container.
|
|
10
|
+
*/
|
|
11
|
+
export declare class KeyboardShortcuts {
|
|
12
|
+
private hostElement;
|
|
13
|
+
private handler;
|
|
14
|
+
private captionRenderer;
|
|
15
|
+
private chatPanel;
|
|
16
|
+
private voiceButton;
|
|
17
|
+
constructor(hostElement: HTMLElement, state: PlayerState, mediaElement: VzMediaElement, captionRenderer?: CaptionRenderer | null, chatPanel?: ChatPanel | null, voiceButton?: VoiceButton | null);
|
|
18
|
+
dispose(): void;
|
|
19
|
+
private isPanoramic;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=keyboard-shortcuts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard-shortcuts.d.ts","sourceRoot":"","sources":["../../src/controls/keyboard-shortcuts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAA6B;IAE5C,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,WAAW,CAAqB;gBAGtC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,WAAW,EAClB,YAAY,EAAE,cAAc,EAC5B,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,EACxC,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,EAC5B,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAoHlC,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PlayerState } from '../core/player-state.js';
|
|
2
|
+
/**
|
|
3
|
+
* Live indicator control.
|
|
4
|
+
* Shows a red pulsing dot + "LIVE" text when at the live edge.
|
|
5
|
+
* Grey dot when behind the live edge. Clicking seeks back to live.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LiveIndicator {
|
|
8
|
+
private onSeekToLive;
|
|
9
|
+
private container;
|
|
10
|
+
private dotEl;
|
|
11
|
+
private labelEl;
|
|
12
|
+
private unsubscribes;
|
|
13
|
+
constructor(state: PlayerState, onSeekToLive: () => void);
|
|
14
|
+
getElement(): HTMLDivElement;
|
|
15
|
+
dispose(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=live-indicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-indicator.d.ts","sourceRoot":"","sources":["../../src/controls/live-indicator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;;GAIG;AACH,qBAAa,aAAa;IAMQ,OAAO,CAAC,YAAY;IALpD,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,EAAE,WAAW,EAAU,YAAY,EAAE,MAAM,IAAI;IA6ChE,UAAU,IAAI,cAAc;IAI5B,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PlayerState } from '../core/player-state.js';
|
|
2
|
+
import type { VzMediaElement } from '../core/media-element.js';
|
|
3
|
+
/**
|
|
4
|
+
* Play/pause toggle button.
|
|
5
|
+
*/
|
|
6
|
+
export declare class PlayButton {
|
|
7
|
+
private button;
|
|
8
|
+
private bigPlay;
|
|
9
|
+
private unsubscribes;
|
|
10
|
+
constructor(state: PlayerState, mediaElement: VzMediaElement, containerEl: HTMLElement);
|
|
11
|
+
getElement(): HTMLButtonElement;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=play-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"play-button.d.ts","sourceRoot":"","sources":["../../src/controls/play-button.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;IA8CtF,UAAU,IAAI,iBAAiB;IAI/B,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playlist prev/next controls injected into the active player's control bar.
|
|
3
|
+
* Also shows an item counter "2 / 5".
|
|
4
|
+
*/
|
|
5
|
+
export declare class PlaylistControls {
|
|
6
|
+
private prevBtn;
|
|
7
|
+
private nextBtn;
|
|
8
|
+
private counterEl;
|
|
9
|
+
private panelBtn;
|
|
10
|
+
private injectedInto;
|
|
11
|
+
private injectedRight;
|
|
12
|
+
constructor(controlsLeft: HTMLElement, controlsRight: HTMLElement | null, currentIndex: number, totalItems: number, onPrev: () => void, onNext: () => void, onTogglePanel: (() => void) | null);
|
|
13
|
+
/** Update the counter display */
|
|
14
|
+
update(currentIndex: number, totalItems: number): void;
|
|
15
|
+
/** Remove injected controls */
|
|
16
|
+
dispose(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=playlist-controls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playlist-controls.d.ts","sourceRoot":"","sources":["../../src/controls/playlist-controls.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,aAAa,CAAqB;gBAGxC,YAAY,EAAE,WAAW,EACzB,aAAa,EAAE,WAAW,GAAG,IAAI,EACjC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,IAAI,EAClB,MAAM,EAAE,MAAM,IAAI,EAClB,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;IA8DpC,iCAAiC;IACjC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAItD,+BAA+B;IAC/B,OAAO,IAAI,IAAI;CAMhB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expandable sidebar panel showing all playlist items.
|
|
3
|
+
* Slides in from the right, overlaid on top of the player.
|
|
4
|
+
*/
|
|
5
|
+
import type { PlaylistItem } from '../elements/vz-playlist.js';
|
|
6
|
+
export declare class PlaylistPanel {
|
|
7
|
+
private panel;
|
|
8
|
+
private listEl;
|
|
9
|
+
private isOpen;
|
|
10
|
+
private onSelect;
|
|
11
|
+
private shadowRoot;
|
|
12
|
+
constructor(shadowRoot: ShadowRoot, items: PlaylistItem[], activeIndex: number, onSelect: (index: number) => void);
|
|
13
|
+
/** Update items and active index */
|
|
14
|
+
update(items: PlaylistItem[], activeIndex: number): void;
|
|
15
|
+
/** Set the active item highlight */
|
|
16
|
+
setActive(index: number): void;
|
|
17
|
+
/** Toggle panel open/closed */
|
|
18
|
+
toggle(): void;
|
|
19
|
+
/** Open the panel */
|
|
20
|
+
open(): void;
|
|
21
|
+
/** Close the panel */
|
|
22
|
+
close(): void;
|
|
23
|
+
/** Clean up */
|
|
24
|
+
dispose(): void;
|
|
25
|
+
private renderItems;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=playlist-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playlist-panel.d.ts","sourceRoot":"","sources":["../../src/controls/playlist-panel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,UAAU,CAAa;gBAG7B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,YAAY,EAAE,EACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAmDnC,oCAAoC;IACpC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxD,oCAAoC;IACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO9B,+BAA+B;IAC/B,MAAM,IAAI,IAAI;IAQd,qBAAqB;IACrB,IAAI,IAAI,IAAI;IAKZ,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAKb,eAAe;IACf,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,WAAW;CAyCpB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PlayerState } from '../core/player-state.js';
|
|
2
|
+
import type { SourceManager } from '../streaming/source-manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Quality level selector dropdown.
|
|
5
|
+
* Hidden when only one quality level is available (progressive MP4).
|
|
6
|
+
*/
|
|
7
|
+
export declare class QualityMenu {
|
|
8
|
+
private container;
|
|
9
|
+
private dropdown;
|
|
10
|
+
private unsubscribes;
|
|
11
|
+
private isOpen;
|
|
12
|
+
constructor(state: PlayerState, sourceManager: SourceManager);
|
|
13
|
+
getElement(): HTMLDivElement;
|
|
14
|
+
dispose(): void;
|
|
15
|
+
private renderOptions;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=quality-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-menu.d.ts","sourceRoot":"","sources":["../../src/controls/quality-menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAGpE;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAEX,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa;IA4C5D,UAAU,IAAI,cAAc;IAI5B,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,aAAa;CA8BtB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PlayerState } from '../core/player-state.js';
|
|
2
|
+
import type { VzMediaElement } from '../core/media-element.js';
|
|
3
|
+
/**
|
|
4
|
+
* Seek bar with played/buffered progress, time display, and hover tooltip.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SeekBar {
|
|
7
|
+
private container;
|
|
8
|
+
private timeDisplay;
|
|
9
|
+
private playedBar;
|
|
10
|
+
private bufferedBar;
|
|
11
|
+
private thumb;
|
|
12
|
+
private tooltip;
|
|
13
|
+
private input;
|
|
14
|
+
private track;
|
|
15
|
+
private unsubscribes;
|
|
16
|
+
constructor(state: PlayerState, mediaElement: VzMediaElement);
|
|
17
|
+
getElement(): HTMLDivElement;
|
|
18
|
+
getTimeDisplay(): HTMLSpanElement;
|
|
19
|
+
dispose(): void;
|
|
20
|
+
private updateProgress;
|
|
21
|
+
private formatTime;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=seek-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seek-bar.d.ts","sourceRoot":"","sources":["../../src/controls/seek-bar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc;IA6F5D,UAAU,IAAI,cAAc;IAI5B,cAAc,IAAI,eAAe;IAIjC,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,UAAU;CAWnB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PlayerState } from '../core/player-state.js';
|
|
2
|
+
import type { VzMediaElement } from '../core/media-element.js';
|
|
3
|
+
/**
|
|
4
|
+
* Volume slider and mute toggle button.
|
|
5
|
+
* Slider slides out horizontally on hover.
|
|
6
|
+
*/
|
|
7
|
+
export declare class VolumeControl {
|
|
8
|
+
private container;
|
|
9
|
+
private unsubscribes;
|
|
10
|
+
constructor(state: PlayerState, mediaElement: VzMediaElement);
|
|
11
|
+
getElement(): HTMLDivElement;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=volume-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-control.d.ts","sourceRoot":"","sources":["../../src/controls/volume-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc;IAgE5D,UAAU,IAAI,cAAc;IAI5B,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PlayerState } from '../core/player-state.js';
|
|
2
|
+
/**
|
|
3
|
+
* Enter VR button.
|
|
4
|
+
* Checks WebXR support and hides itself if unavailable.
|
|
5
|
+
* WebXR session management is Phase 2 — currently a placeholder.
|
|
6
|
+
*/
|
|
7
|
+
export declare class VrButton {
|
|
8
|
+
private button;
|
|
9
|
+
private unsubscribes;
|
|
10
|
+
constructor(state: PlayerState, onToggleXR?: () => void);
|
|
11
|
+
getElement(): HTMLButtonElement;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=vr-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vr-button.d.ts","sourceRoot":"","sources":["../../src/controls/vr-button.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI;IA6BvD,UAAU,IAAI,iBAAiB;IAI/B,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { PlayerConfig, FeatureFlags, LicenseResult } from '@vizor-vr/shared';
|
|
2
|
+
import { HTMLElementBase } from './html-element.js';
|
|
3
|
+
import { PlayerState } from './player-state.js';
|
|
4
|
+
import { VzEventEmitter } from './event-emitter.js';
|
|
5
|
+
/**
|
|
6
|
+
* Abstract base class for all Vizor custom elements.
|
|
7
|
+
*
|
|
8
|
+
* Responsibilities:
|
|
9
|
+
* - Shadow DOM creation
|
|
10
|
+
* - Attribute observation and reflection to config
|
|
11
|
+
* - Meta tag configuration reading
|
|
12
|
+
* - Responsive sizing via ResizeObserver
|
|
13
|
+
* - Poster image display
|
|
14
|
+
* - Event emission
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class VzBaseElement extends HTMLElementBase {
|
|
17
|
+
static get observedAttributes(): string[];
|
|
18
|
+
protected shadow: ShadowRoot;
|
|
19
|
+
protected state: PlayerState;
|
|
20
|
+
protected events: VzEventEmitter;
|
|
21
|
+
protected config: PlayerConfig;
|
|
22
|
+
protected license: LicenseResult | null;
|
|
23
|
+
private resizeObserver;
|
|
24
|
+
private metaConfig;
|
|
25
|
+
private watermarkEl;
|
|
26
|
+
constructor();
|
|
27
|
+
connectedCallback(): void;
|
|
28
|
+
disconnectedCallback(): void;
|
|
29
|
+
attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void;
|
|
30
|
+
/** Get the resolved player configuration */
|
|
31
|
+
getConfig(): Readonly<PlayerConfig>;
|
|
32
|
+
/** Get the reactive state store */
|
|
33
|
+
getState(): PlayerState;
|
|
34
|
+
/** Get the current license result (null until validated) */
|
|
35
|
+
getLicense(): Readonly<LicenseResult> | null;
|
|
36
|
+
/** Check if a feature is enabled by the current license */
|
|
37
|
+
protected hasFeature(feature: keyof FeatureFlags): boolean;
|
|
38
|
+
protected abstract onConnected(): void;
|
|
39
|
+
protected abstract onDisconnected(): void;
|
|
40
|
+
protected abstract onAttributeChanged(name: string, oldVal: string | null, newVal: string | null): void;
|
|
41
|
+
protected abstract onResize(): void;
|
|
42
|
+
/** Called after license validation completes (override for post-license setup) */
|
|
43
|
+
protected onLicenseResolved(): void;
|
|
44
|
+
/** Async license validation (non-blocking) */
|
|
45
|
+
private checkLicenseAsync;
|
|
46
|
+
/** Build config from defaults + meta tags + element attributes */
|
|
47
|
+
private buildConfig;
|
|
48
|
+
/** Apply width/height/aspect styling to the host element */
|
|
49
|
+
private applySizing;
|
|
50
|
+
/** Inject minimal base styles into shadow DOM */
|
|
51
|
+
private injectBaseStyles;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=base-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-element.d.ts","sourceRoot":"","sources":["../../src/core/base-element.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAY,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA0EpD;;;;;;;;;;GAUG;AACH,8BAAsB,aAAc,SAAQ,eAAe;IACzD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,MAAM,EAAG,YAAY,CAAC;IAChC,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC/C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,WAAW,CAA4B;;IAS/C,iBAAiB,IAAI,IAAI;IA0BzB,oBAAoB,IAAI,IAAI;IAS5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQ1F,4CAA4C;IAC5C,SAAS,IAAI,QAAQ,CAAC,YAAY,CAAC;IAInC,mCAAmC;IACnC,QAAQ,IAAI,WAAW;IAIvB,4DAA4D;IAC5D,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI;IAI5C,2DAA2D;IAC3D,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,YAAY,GAAG,OAAO;IAO1D,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI;IACtC,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI;IACzC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,IAAI;IACP,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI;IAEnC,kFAAkF;IAClF,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAMnC,8CAA8C;YAChC,iBAAiB;IA0D/B,kEAAkE;IAClE,OAAO,CAAC,WAAW;IAmCnB,4DAA4D;IAC5D,OAAO,CAAC,WAAW;IA4BnB,iDAAiD;IACjD,OAAO,CAAC,gBAAgB;CAyCzB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { VzEvent, VzEventDetailMap } from '@vizor-vr/shared';
|
|
2
|
+
type EventCallback = (event: CustomEvent) => void;
|
|
3
|
+
/**
|
|
4
|
+
* Typed event emitter that dispatches CustomEvents on the host element.
|
|
5
|
+
* Supports both HTML5 media events and Vizor custom events.
|
|
6
|
+
*/
|
|
7
|
+
export declare class VzEventEmitter {
|
|
8
|
+
private element;
|
|
9
|
+
private handlers;
|
|
10
|
+
constructor(element: HTMLElement);
|
|
11
|
+
/** Emit a standard media event (no detail) */
|
|
12
|
+
emitMedia(type: string): void;
|
|
13
|
+
/** Emit a Vizor custom event with typed detail */
|
|
14
|
+
emit<E extends keyof VzEventDetailMap>(type: E, detail?: VzEventDetailMap[E]): void;
|
|
15
|
+
/** Add an event listener */
|
|
16
|
+
on(type: VzEvent | string, callback: EventCallback): () => void;
|
|
17
|
+
/** Remove an event listener */
|
|
18
|
+
off(type: VzEvent | string, callback: EventCallback): void;
|
|
19
|
+
/** Remove all event listeners */
|
|
20
|
+
removeAll(): void;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/core/event-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAElE,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAElD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAyC;gBAE7C,OAAO,EAAE,WAAW;IAIhC,8CAA8C;IAC9C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B,kDAAkD;IAClD,IAAI,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACnC,IAAI,EAAE,CAAC,EACP,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC3B,IAAI;IASP,4BAA4B;IAC5B,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAS/D,+BAA+B;IAC/B,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK1D,iCAAiC;IACjC,SAAS,IAAI,IAAI;CAQlB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSR-safe HTMLElement base.
|
|
3
|
+
*
|
|
4
|
+
* On a server (no DOM) `HTMLElement` is undefined, so `class X extends
|
|
5
|
+
* HTMLElement` throws a ReferenceError at module-evaluation time — which crashes
|
|
6
|
+
* any framework that imports the player during SSR (Next.js RSC, Nuxt,
|
|
7
|
+
* SvelteKit). Fall back to a no-op stand-in there so the package can be imported
|
|
8
|
+
* without throwing. The classes are never instantiated on the server because
|
|
9
|
+
* custom-element registration is separately guarded to a no-op when
|
|
10
|
+
* `customElements` is unavailable.
|
|
11
|
+
*/
|
|
12
|
+
export declare const HTMLElementBase: typeof HTMLElement;
|
|
13
|
+
//# sourceMappingURL=html-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-element.d.ts","sourceRoot":"","sources":["../../src/core/html-element.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,WAGY,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { VzBaseElement } from './base-element.js';
|
|
2
|
+
import { VzRenderer } from '../renderer/renderer.js';
|
|
3
|
+
import { SourceManager } from '../streaming/source-manager.js';
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base class for all media-playing elements (video, live-video, cinema).
|
|
6
|
+
*
|
|
7
|
+
* Extends VzBaseElement with:
|
|
8
|
+
* - Three.js renderer initialization
|
|
9
|
+
* - Hidden <video> element creation and management
|
|
10
|
+
* - Source parsing from <source> children
|
|
11
|
+
* - HTML5 Media API mirroring
|
|
12
|
+
* - Controls overlay rendering
|
|
13
|
+
*/
|
|
14
|
+
export declare abstract class VzMediaElement extends VzBaseElement {
|
|
15
|
+
protected renderer: VzRenderer;
|
|
16
|
+
protected videoElement: HTMLVideoElement;
|
|
17
|
+
protected containerEl: HTMLDivElement;
|
|
18
|
+
protected sourceManager: SourceManager;
|
|
19
|
+
/** When true, base class skips auto-setupVideo in loadeddata (used by cinema) */
|
|
20
|
+
protected suppressAutoSetup: boolean;
|
|
21
|
+
private cleanupFullscreen;
|
|
22
|
+
private timeUpdateTimer;
|
|
23
|
+
private controlsOverlay;
|
|
24
|
+
private playButton;
|
|
25
|
+
private seekBar;
|
|
26
|
+
private volumeControl;
|
|
27
|
+
private fullscreenButton;
|
|
28
|
+
private vrButton;
|
|
29
|
+
private compass;
|
|
30
|
+
private qualityMenu;
|
|
31
|
+
private keyboardShortcuts;
|
|
32
|
+
private xrManager;
|
|
33
|
+
private audioManager;
|
|
34
|
+
private liveIndicator;
|
|
35
|
+
private analyticsHandle;
|
|
36
|
+
private annotationManager;
|
|
37
|
+
private captionRenderer;
|
|
38
|
+
private ccButton;
|
|
39
|
+
private collabClient;
|
|
40
|
+
private gazeCursorManager;
|
|
41
|
+
private gazeSender;
|
|
42
|
+
private chatPanel;
|
|
43
|
+
private chatButton;
|
|
44
|
+
private voiceManager;
|
|
45
|
+
private voiceButton;
|
|
46
|
+
protected onConnected(): void;
|
|
47
|
+
protected onDisconnected(): void;
|
|
48
|
+
protected onResize(): void;
|
|
49
|
+
/** After license resolves, enforce theme color gating */
|
|
50
|
+
protected onLicenseResolved(): void;
|
|
51
|
+
protected onAttributeChanged(name: string, _oldVal: string | null, _newVal: string | null): void;
|
|
52
|
+
play(): Promise<void>;
|
|
53
|
+
pause(): void;
|
|
54
|
+
seek(time: number): void;
|
|
55
|
+
get duration(): number;
|
|
56
|
+
get currentTime(): number;
|
|
57
|
+
set currentTime(t: number);
|
|
58
|
+
get paused(): boolean;
|
|
59
|
+
get volume(): number;
|
|
60
|
+
set volume(v: number);
|
|
61
|
+
get muted(): boolean;
|
|
62
|
+
set muted(m: boolean);
|
|
63
|
+
get playbackRate(): number;
|
|
64
|
+
set playbackRate(r: number);
|
|
65
|
+
toggleFullscreen(): void;
|
|
66
|
+
/** Get the Three.js renderer (for advanced use / WebXR) */
|
|
67
|
+
getRenderer(): VzRenderer;
|
|
68
|
+
protected abstract onMediaConnected(): void;
|
|
69
|
+
protected abstract onMediaDisconnected(): void;
|
|
70
|
+
/** Parse <vz-annotation> children and create annotation manager if any exist */
|
|
71
|
+
private initAnnotations;
|
|
72
|
+
/** Initialize collaborative viewing if collab attributes are set */
|
|
73
|
+
private initCollab;
|
|
74
|
+
/** Initialize caption system from <track> children */
|
|
75
|
+
private initCaptions;
|
|
76
|
+
private createVideoElement;
|
|
77
|
+
/** Get the source manager (for quality switching) */
|
|
78
|
+
getSourceManager(): SourceManager;
|
|
79
|
+
/** Parse <source> children and set up video sources */
|
|
80
|
+
private loadSources;
|
|
81
|
+
/** Mirror HTML5 media events from the hidden video to the custom element */
|
|
82
|
+
private mirrorMediaEvents;
|
|
83
|
+
/** Sync the reactive state from the current video element state */
|
|
84
|
+
private syncStateFromVideo;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=media-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-element.d.ts","sourceRoot":"","sources":["../../src/core/media-element.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AA4B/D;;;;;;;;;GASG;AACH,8BAAsB,cAAe,SAAQ,aAAa;IACxD,SAAS,CAAC,QAAQ,EAAG,UAAU,CAAC;IAChC,SAAS,CAAC,YAAY,EAAG,gBAAgB,CAAC;IAC1C,SAAS,CAAC,WAAW,EAAG,cAAc,CAAC;IACvC,SAAS,CAAC,aAAa,EAAG,aAAa,CAAC;IACxC,iFAAiF;IACjF,SAAS,CAAC,iBAAiB,UAAS;IACpC,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAA4B;IAE/C,SAAS,CAAC,WAAW,IAAI,IAAI;IAsK7B,SAAS,CAAC,cAAc,IAAI,IAAI;IAgDhC,SAAS,CAAC,QAAQ,IAAI,IAAI;IAI1B,yDAAyD;cACtC,iBAAiB,IAAI,IAAI;IAM5C,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQhG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,KAAK,IAAI,IAAI;IAIb,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxB,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAExB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAEnB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAEnB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,CAAC,CAAC,EAAE,MAAM,EAEzB;IAED,gBAAgB,IAAI,IAAI;IAQxB,2DAA2D;IAC3D,WAAW,IAAI,UAAU;IAMzB,SAAS,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI;IAC3C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,IAAI,IAAI;IAI9C,gFAAgF;IAChF,OAAO,CAAC,eAAe;IA4BvB,oEAAoE;IACpE,OAAO,CAAC,UAAU;IAuHlB,sDAAsD;IACtD,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,kBAAkB;IA2B1B,qDAAqD;IACrD,gBAAgB,IAAI,aAAa;IAIjC,uDAAuD;IACvD,OAAO,CAAC,WAAW;IAoCnB,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB;IAmBzB,mEAAmE;IACnE,OAAO,CAAC,kBAAkB;CAgB3B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { VzFormat, StereoMode, VzError, QualityLevel, LicenseResult } from '@vizor-vr/shared';
|
|
2
|
+
/** Shape of all player state */
|
|
3
|
+
export interface PlayerStateShape {
|
|
4
|
+
playing: boolean;
|
|
5
|
+
paused: boolean;
|
|
6
|
+
currentTime: number;
|
|
7
|
+
duration: number;
|
|
8
|
+
buffered: number;
|
|
9
|
+
seeking: boolean;
|
|
10
|
+
ended: boolean;
|
|
11
|
+
volume: number;
|
|
12
|
+
muted: boolean;
|
|
13
|
+
playbackRate: number;
|
|
14
|
+
loading: boolean;
|
|
15
|
+
loadProgress: number;
|
|
16
|
+
format: VzFormat | null;
|
|
17
|
+
stereoMode: StereoMode;
|
|
18
|
+
currentQuality: string;
|
|
19
|
+
availableQualities: QualityLevel[];
|
|
20
|
+
autoQuality: boolean;
|
|
21
|
+
lat: number;
|
|
22
|
+
lon: number;
|
|
23
|
+
fov: number;
|
|
24
|
+
xrSupported: boolean;
|
|
25
|
+
xrActive: boolean;
|
|
26
|
+
controlsVisible: boolean;
|
|
27
|
+
fullscreen: boolean;
|
|
28
|
+
isLive: boolean;
|
|
29
|
+
isAtLiveEdge: boolean;
|
|
30
|
+
license: LicenseResult | null;
|
|
31
|
+
currentProbeId: string | null;
|
|
32
|
+
tourProbeCount: number;
|
|
33
|
+
error: VzError | null;
|
|
34
|
+
}
|
|
35
|
+
type Listener<T> = (value: T, prev: T) => void;
|
|
36
|
+
type AnyListener = (key: string, value: unknown, prev: unknown) => void;
|
|
37
|
+
/**
|
|
38
|
+
* Lightweight reactive state store for the player.
|
|
39
|
+
* Supports per-key subscriptions and batch updates.
|
|
40
|
+
*/
|
|
41
|
+
export declare class PlayerState {
|
|
42
|
+
private state;
|
|
43
|
+
private listeners;
|
|
44
|
+
private globalListeners;
|
|
45
|
+
constructor(initial?: Partial<PlayerStateShape>);
|
|
46
|
+
/** Get the current value of a state key */
|
|
47
|
+
get<K extends keyof PlayerStateShape>(key: K): PlayerStateShape[K];
|
|
48
|
+
/** Get the entire state snapshot (read-only) */
|
|
49
|
+
getSnapshot(): Readonly<PlayerStateShape>;
|
|
50
|
+
/** Set a single state value. No-op if value is unchanged. */
|
|
51
|
+
set<K extends keyof PlayerStateShape>(key: K, value: PlayerStateShape[K]): void;
|
|
52
|
+
/** Batch multiple state updates. Notifications fire after all values are set. */
|
|
53
|
+
batch(updates: Partial<PlayerStateShape>): void;
|
|
54
|
+
/** Subscribe to changes on a specific state key. Returns unsubscribe function. */
|
|
55
|
+
subscribe<K extends keyof PlayerStateShape>(key: K, listener: Listener<PlayerStateShape[K]>): () => void;
|
|
56
|
+
/** Subscribe to all state changes. Returns unsubscribe function. */
|
|
57
|
+
subscribeAll(listener: AnyListener): () => void;
|
|
58
|
+
/** Reset state to initial values */
|
|
59
|
+
reset(): void;
|
|
60
|
+
private notify;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=player-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-state.d.ts","sourceRoot":"","sources":["../../src/core/player-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEnG,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAE/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IAGrB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAGrB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IAGvB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,YAAY,EAAE,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IAGrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IAGZ,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAGlB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IAGpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IAGtB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAG9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IAGvB,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACvB;AAED,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAC/C,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAmCxE;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,SAAS,CAA6D;IAC9E,OAAO,CAAC,eAAe,CAA0B;gBAErC,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI/C,2CAA2C;IAC3C,GAAG,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAIlE,gDAAgD;IAChD,WAAW,IAAI,QAAQ,CAAC,gBAAgB,CAAC;IAIzC,6DAA6D;IAC7D,GAAG,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAO/E,iFAAiF;IACjF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAe/C,kFAAkF;IAClF,SAAS,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACxC,GAAG,EAAE,CAAC,EACN,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GACtC,MAAM,IAAI;IAWb,oEAAoE;IACpE,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,IAAI;IAO/C,oCAAoC;IACpC,KAAK,IAAI,IAAI;IAUb,OAAO,CAAC,MAAM;CAIf"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
class DashAdapter {
|
|
2
|
+
videoElement = null;
|
|
3
|
+
player = null;
|
|
4
|
+
_isAttached = false;
|
|
5
|
+
levels = [];
|
|
6
|
+
get supportsABR() {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
get isAttached() {
|
|
10
|
+
return this._isAttached;
|
|
11
|
+
}
|
|
12
|
+
attach(videoElement) {
|
|
13
|
+
this.videoElement = videoElement;
|
|
14
|
+
this._isAttached = true;
|
|
15
|
+
}
|
|
16
|
+
async load(url) {
|
|
17
|
+
if (!this.videoElement) return;
|
|
18
|
+
try {
|
|
19
|
+
const dashjs = await import("dashjs");
|
|
20
|
+
if (this.player) {
|
|
21
|
+
this.player.destroy();
|
|
22
|
+
}
|
|
23
|
+
const player = dashjs.MediaPlayer().create();
|
|
24
|
+
player.initialize(this.videoElement, url, false);
|
|
25
|
+
player.on("streamInitialized", () => {
|
|
26
|
+
try {
|
|
27
|
+
const bitrateList = player.getBitrateInfoListFor("video");
|
|
28
|
+
this.levels = bitrateList.map(
|
|
29
|
+
(info, i) => ({
|
|
30
|
+
label: info.height ? `${info.height}p` : `Level ${i}`,
|
|
31
|
+
width: info.width,
|
|
32
|
+
height: info.height,
|
|
33
|
+
bitrate: info.bitrate,
|
|
34
|
+
active: false
|
|
35
|
+
})
|
|
36
|
+
);
|
|
37
|
+
} catch {
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
this.player = player;
|
|
41
|
+
} catch (e) {
|
|
42
|
+
console.error("[Vizor] Failed to load dashjs:", e);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
getQualityLevels() {
|
|
46
|
+
return this.levels;
|
|
47
|
+
}
|
|
48
|
+
setQualityLevel(index) {
|
|
49
|
+
if (!this.player) return;
|
|
50
|
+
const player = this.player;
|
|
51
|
+
if (index === -1) {
|
|
52
|
+
player.updateSettings({
|
|
53
|
+
streaming: { abr: { autoSwitchBitrate: { video: true } } }
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
player.updateSettings({
|
|
57
|
+
streaming: { abr: { autoSwitchBitrate: { video: false } } }
|
|
58
|
+
});
|
|
59
|
+
player.setQualityFor("video", index);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
destroy() {
|
|
63
|
+
if (this.player) {
|
|
64
|
+
this.player.destroy();
|
|
65
|
+
}
|
|
66
|
+
this.player = null;
|
|
67
|
+
this.videoElement = null;
|
|
68
|
+
this._isAttached = false;
|
|
69
|
+
this.levels = [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
DashAdapter
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=dash-adapter-tid9ZyhO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dash-adapter-tid9ZyhO.js","sources":["../src/streaming/dash-adapter.ts"],"sourcesContent":["import type { QualityLevel } from '@vizor-vr/shared';\nimport type { IStreamingAdapter } from './types.js';\n\n/**\n * DASH streaming adapter wrapping dashjs.\n * Lazy-loaded via dynamic import — only included in the bundle\n * when a DASH source is detected.\n */\nexport class DashAdapter implements IStreamingAdapter {\n private videoElement: HTMLVideoElement | null = null;\n private player: unknown | null = null;\n private _isAttached = false;\n private levels: QualityLevel[] = [];\n\n get supportsABR(): boolean {\n return true;\n }\n\n get isAttached(): boolean {\n return this._isAttached;\n }\n\n attach(videoElement: HTMLVideoElement): void {\n this.videoElement = videoElement;\n this._isAttached = true;\n }\n\n async load(url: string): Promise<void> {\n if (!this.videoElement) return;\n\n try {\n const dashjs = await import('dashjs');\n\n // Destroy previous instance\n if (this.player) {\n (this.player as { destroy(): void }).destroy();\n }\n\n const player = dashjs.MediaPlayer().create();\n player.initialize(this.videoElement, url, false);\n\n // Extract quality levels once the stream info is available\n player.on('streamInitialized' as string, () => {\n try {\n const bitrateList = player.getBitrateInfoListFor('video');\n this.levels = bitrateList.map(\n (info: { height: number; width: number; bitrate: number }, i: number) => ({\n label: info.height ? `${info.height}p` : `Level ${i}`,\n width: info.width,\n height: info.height,\n bitrate: info.bitrate,\n active: false,\n }),\n );\n } catch {\n // Stream may not have video quality info\n }\n });\n\n this.player = player;\n } catch (e) {\n console.error('[Vizor] Failed to load dashjs:', e);\n }\n }\n\n getQualityLevels(): QualityLevel[] {\n return this.levels;\n }\n\n setQualityLevel(index: number): void {\n if (!this.player) return;\n const player = this.player as {\n setQualityFor(type: string, index: number): void;\n updateSettings(settings: unknown): void;\n };\n\n if (index === -1) {\n // Auto ABR\n player.updateSettings({\n streaming: { abr: { autoSwitchBitrate: { video: true } } },\n });\n } else {\n player.updateSettings({\n streaming: { abr: { autoSwitchBitrate: { video: false } } },\n });\n player.setQualityFor('video', index);\n }\n }\n\n destroy(): void {\n if (this.player) {\n (this.player as { destroy(): void }).destroy();\n }\n this.player = null;\n this.videoElement = null;\n this._isAttached = false;\n this.levels = [];\n }\n}\n"],"names":[],"mappings":"AAQO,MAAM,YAAyC;AAAA,EAC5C,eAAwC;AAAA,EACxC,SAAyB;AAAA,EACzB,cAAc;AAAA,EACd,SAAyB,CAAA;AAAA,EAEjC,IAAI,cAAuB;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,aAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,cAAsC;AAC3C,SAAK,eAAe;AACpB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,MAAM,KAAK,KAA4B;AACrC,QAAI,CAAC,KAAK,aAAc;AAExB,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,QAAQ;AAGpC,UAAI,KAAK,QAAQ;AACd,aAAK,OAA+B,QAAA;AAAA,MACvC;AAEA,YAAM,SAAS,OAAO,YAAA,EAAc,OAAA;AACpC,aAAO,WAAW,KAAK,cAAc,KAAK,KAAK;AAG/C,aAAO,GAAG,qBAA+B,MAAM;AAC7C,YAAI;AACF,gBAAM,cAAc,OAAO,sBAAsB,OAAO;AACxD,eAAK,SAAS,YAAY;AAAA,YACxB,CAAC,MAA0D,OAAe;AAAA,cACxE,OAAO,KAAK,SAAS,GAAG,KAAK,MAAM,MAAM,SAAS,CAAC;AAAA,cACnD,OAAO,KAAK;AAAA,cACZ,QAAQ,KAAK;AAAA,cACb,SAAS,KAAK;AAAA,cACd,QAAQ;AAAA,YAAA;AAAA,UACV;AAAA,QAEJ,QAAQ;AAAA,QAER;AAAA,MACF,CAAC;AAED,WAAK,SAAS;AAAA,IAChB,SAAS,GAAG;AACV,cAAQ,MAAM,kCAAkC,CAAC;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,mBAAmC;AACjC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB,OAAqB;AACnC,QAAI,CAAC,KAAK,OAAQ;AAClB,UAAM,SAAS,KAAK;AAKpB,QAAI,UAAU,IAAI;AAEhB,aAAO,eAAe;AAAA,QACpB,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,OAAK,EAAE;AAAA,MAAE,CAC1D;AAAA,IACH,OAAO;AACL,aAAO,eAAe;AAAA,QACpB,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,QAAM,EAAE;AAAA,MAAE,CAC3D;AACD,aAAO,cAAc,SAAS,KAAK;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,QAAQ;AACd,WAAK,OAA+B,QAAA;AAAA,IACvC;AACA,SAAK,SAAS;AACd,SAAK,eAAe;AACpB,SAAK,cAAc;AACnB,SAAK,SAAS,CAAA;AAAA,EAChB;AACF;"}
|