unified-video-framework 1.4.444 → 1.4.445
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/package.json +1 -1
- package/packages/core/dist/version.d.ts +1 -1
- package/packages/core/dist/version.js +1 -1
- package/packages/core/src/version.ts +1 -1
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +52 -19
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/src/WebPlayer.ts +62 -19
- package/packages/web/dist/WebPlayer.d.ts +0 -350
- package/packages/web/dist/ads/GoogleAdsManager.d.ts +0 -57
- package/packages/web/dist/ads/LiveStreamAdsManager.d.ts +0 -29
- package/packages/web/dist/ads/LiveStreamAdsManager.d.ts.map +0 -1
- package/packages/web/dist/ads/LiveStreamAdsManager.js +0 -168
- package/packages/web/dist/ads/LiveStreamAdsManager.js.map +0 -1
- package/packages/web/dist/chapters/ChapterManager.d.ts +0 -42
- package/packages/web/dist/chapters/CreditsButtonController.d.ts +0 -46
- package/packages/web/dist/chapters/SkipButtonController.d.ts +0 -31
- package/packages/web/dist/chapters/UserPreferencesManager.d.ts +0 -25
- package/packages/web/dist/chapters/index.d.ts +0 -12
- package/packages/web/dist/chapters/types/ChapterTypes.d.ts +0 -136
- package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts +0 -13
- package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts.map +0 -1
- package/packages/web/dist/drm/BunnyCDNDRMProvider.js +0 -65
- package/packages/web/dist/drm/BunnyCDNDRMProvider.js.map +0 -1
- package/packages/web/dist/drm/DRMManager.d.ts +0 -20
- package/packages/web/dist/drm/DRMManager.d.ts.map +0 -1
- package/packages/web/dist/drm/DRMManager.js +0 -130
- package/packages/web/dist/drm/DRMManager.js.map +0 -1
- package/packages/web/dist/drm/FairPlayDRMHandler.d.ts +0 -24
- package/packages/web/dist/drm/FairPlayDRMHandler.d.ts.map +0 -1
- package/packages/web/dist/drm/FairPlayDRMHandler.js +0 -190
- package/packages/web/dist/drm/FairPlayDRMHandler.js.map +0 -1
- package/packages/web/dist/drm/WidevineDRMHandler.d.ts +0 -21
- package/packages/web/dist/drm/WidevineDRMHandler.d.ts.map +0 -1
- package/packages/web/dist/drm/WidevineDRMHandler.js +0 -143
- package/packages/web/dist/drm/WidevineDRMHandler.js.map +0 -1
- package/packages/web/dist/drm/index.d.ts +0 -15
- package/packages/web/dist/drm/index.d.ts.map +0 -1
- package/packages/web/dist/drm/index.js +0 -13
- package/packages/web/dist/drm/index.js.map +0 -1
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts +0 -19
- package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts.map +0 -1
- package/packages/web/dist/drm/providers/BunnyNetProvider.js +0 -112
- package/packages/web/dist/drm/providers/BunnyNetProvider.js.map +0 -1
- package/packages/web/dist/drm/providers/GenericProvider.d.ts +0 -30
- package/packages/web/dist/drm/providers/GenericProvider.d.ts.map +0 -1
- package/packages/web/dist/drm/providers/GenericProvider.js +0 -104
- package/packages/web/dist/drm/providers/GenericProvider.js.map +0 -1
- package/packages/web/dist/drm/systems/BaseDRM.d.ts +0 -18
- package/packages/web/dist/drm/systems/BaseDRM.d.ts.map +0 -1
- package/packages/web/dist/drm/systems/BaseDRM.js +0 -29
- package/packages/web/dist/drm/systems/BaseDRM.js.map +0 -1
- package/packages/web/dist/drm/systems/FairPlayDRM.d.ts +0 -32
- package/packages/web/dist/drm/systems/FairPlayDRM.d.ts.map +0 -1
- package/packages/web/dist/drm/systems/FairPlayDRM.js +0 -208
- package/packages/web/dist/drm/systems/FairPlayDRM.js.map +0 -1
- package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts +0 -9
- package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts.map +0 -1
- package/packages/web/dist/drm/systems/PlayReadyDRM.js +0 -114
- package/packages/web/dist/drm/systems/PlayReadyDRM.js.map +0 -1
- package/packages/web/dist/drm/systems/WidevineDRM.d.ts +0 -9
- package/packages/web/dist/drm/systems/WidevineDRM.d.ts.map +0 -1
- package/packages/web/dist/drm/systems/WidevineDRM.js +0 -159
- package/packages/web/dist/drm/systems/WidevineDRM.js.map +0 -1
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts +0 -20
- package/packages/web/dist/drm/types/BunnyNetTypes.d.ts.map +0 -1
- package/packages/web/dist/drm/types/BunnyNetTypes.js +0 -8
- package/packages/web/dist/drm/types/BunnyNetTypes.js.map +0 -1
- package/packages/web/dist/drm/types/DRMTypes.d.ts +0 -60
- package/packages/web/dist/drm/types/DRMTypes.d.ts.map +0 -1
- package/packages/web/dist/drm/types/DRMTypes.js +0 -22
- package/packages/web/dist/drm/types/DRMTypes.js.map +0 -1
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts +0 -20
- package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +0 -1
- package/packages/web/dist/drm/utils/BrowserDetector.js +0 -211
- package/packages/web/dist/drm/utils/BrowserDetector.js.map +0 -1
- package/packages/web/dist/drm/utils/CertificateManager.d.ts +0 -15
- package/packages/web/dist/drm/utils/CertificateManager.d.ts.map +0 -1
- package/packages/web/dist/drm/utils/CertificateManager.js +0 -46
- package/packages/web/dist/drm/utils/CertificateManager.js.map +0 -1
- package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts +0 -7
- package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts.map +0 -1
- package/packages/web/dist/drm/utils/DRMErrorHandler.js +0 -49
- package/packages/web/dist/drm/utils/DRMErrorHandler.js.map +0 -1
- package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts +0 -15
- package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts.map +0 -1
- package/packages/web/dist/drm/utils/LicenseRequestHandler.js +0 -110
- package/packages/web/dist/drm/utils/LicenseRequestHandler.js.map +0 -1
- package/packages/web/dist/drm.d.ts +0 -4
- package/packages/web/dist/drm.js +0 -5
- package/packages/web/dist/index.d.ts +0 -7
- package/packages/web/dist/paywall/EmailAuthController.d.ts +0 -60
- package/packages/web/dist/paywall/PaywallController.d.ts +0 -74
- package/packages/web/dist/react/EPG.d.ts +0 -8
- package/packages/web/dist/react/WebPlayerView.d.ts +0 -397
- package/packages/web/dist/react/WebPlayerViewWithEPG.d.ts +0 -97
- package/packages/web/dist/react/components/ChapterProgress.d.ts +0 -22
- package/packages/web/dist/react/components/EPGNavigationControls.d.ts +0 -15
- package/packages/web/dist/react/components/EPGOverlay-improved-positioning.d.ts +0 -5
- package/packages/web/dist/react/components/EPGOverlay.d.ts +0 -5
- package/packages/web/dist/react/components/EPGProgramDetails.d.ts +0 -13
- package/packages/web/dist/react/components/EPGProgramGrid.d.ts +0 -19
- package/packages/web/dist/react/components/EPGTimelineHeader.d.ts +0 -16
- package/packages/web/dist/react/components/SkipButton.d.ts +0 -18
- package/packages/web/dist/react/components/commerce/ProductBadge.d.ts +0 -10
- package/packages/web/dist/react/components/commerce/ProductPanel.d.ts +0 -13
- package/packages/web/dist/react/examples/google-ads-example.d.ts +0 -4
- package/packages/web/dist/react/examples/live-stream-ads-example.d.ts +0 -8
- package/packages/web/dist/react/examples/live-stream-ads-example.d.ts.map +0 -1
- package/packages/web/dist/react/examples/live-stream-ads-example.js +0 -177
- package/packages/web/dist/react/examples/live-stream-ads-example.js.map +0 -1
- package/packages/web/dist/react/hooks/useChapters.d.ts +0 -29
- package/packages/web/dist/react/hooks/useCommerceSync.d.ts +0 -8
- package/packages/web/dist/react/types/EPGTypes.d.ts +0 -101
- package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts +0 -146
- package/packages/web/dist/react/types/VideoCommerceTypes.d.ts +0 -109
- package/packages/web/dist/react/utils/EPGUtils.d.ts +0 -21
- package/packages/web/dist/test/epg-test.d.ts +0 -3
- package/packages/web/dist/utils/YouTubeExtractor.d.ts +0 -38
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { WebPlayerView } from "../WebPlayerView.js";
|
|
3
|
-
export const LiveStreamAdsExample = () => {
|
|
4
|
-
const [adEvents, setAdEvents] = useState([]);
|
|
5
|
-
const [mode, setMode] = useState('periodic');
|
|
6
|
-
const logAdEvent = (event) => {
|
|
7
|
-
console.log(`[Ad Event] ${event}`);
|
|
8
|
-
setAdEvents(prev => [...prev, `${new Date().toLocaleTimeString()}: ${event}`].slice(-10));
|
|
9
|
-
};
|
|
10
|
-
return (React.createElement("div", { style: { height: '100vh', display: 'flex', flexDirection: 'column' } },
|
|
11
|
-
React.createElement("div", { style: { padding: '20px', backgroundColor: '#f5f5f5', borderBottom: '1px solid #ddd' } },
|
|
12
|
-
React.createElement("h2", { style: { margin: '0 0 15px 0' } }, "Live Stream Ads - Example"),
|
|
13
|
-
React.createElement("div", { style: { display: 'flex', gap: '10px', marginBottom: '10px' } },
|
|
14
|
-
React.createElement("button", { onClick: () => setMode('metadata'), style: {
|
|
15
|
-
padding: '10px 20px',
|
|
16
|
-
backgroundColor: mode === 'metadata' ? '#007bff' : '#6c757d',
|
|
17
|
-
color: 'white',
|
|
18
|
-
border: 'none',
|
|
19
|
-
borderRadius: '4px',
|
|
20
|
-
cursor: 'pointer'
|
|
21
|
-
} }, "Metadata Mode"),
|
|
22
|
-
React.createElement("button", { onClick: () => setMode('periodic'), style: {
|
|
23
|
-
padding: '10px 20px',
|
|
24
|
-
backgroundColor: mode === 'periodic' ? '#007bff' : '#6c757d',
|
|
25
|
-
color: 'white',
|
|
26
|
-
border: 'none',
|
|
27
|
-
borderRadius: '4px',
|
|
28
|
-
cursor: 'pointer'
|
|
29
|
-
} }, "Periodic Mode (Every 2 min)"),
|
|
30
|
-
React.createElement("button", { onClick: () => setMode('hybrid'), style: {
|
|
31
|
-
padding: '10px 20px',
|
|
32
|
-
backgroundColor: mode === 'hybrid' ? '#007bff' : '#6c757d',
|
|
33
|
-
color: 'white',
|
|
34
|
-
border: 'none',
|
|
35
|
-
borderRadius: '4px',
|
|
36
|
-
cursor: 'pointer'
|
|
37
|
-
} }, "Hybrid Mode")),
|
|
38
|
-
React.createElement("div", { style: { fontSize: '14px', color: '#666' } },
|
|
39
|
-
React.createElement("strong", null, "Current Mode:"),
|
|
40
|
-
" ",
|
|
41
|
-
mode,
|
|
42
|
-
mode === 'metadata' && ' - Detects #EXT-X-DATERANGE tags in HLS stream',
|
|
43
|
-
mode === 'periodic' && ' - Shows ads every 2 minutes of playback',
|
|
44
|
-
mode === 'hybrid' && ' - Uses both metadata detection AND periodic fallback')),
|
|
45
|
-
React.createElement("div", { style: { flex: 1, position: 'relative', backgroundColor: '#000' } },
|
|
46
|
-
React.createElement(WebPlayerView, { url: "https://stream.example.com/live.m3u8", type: "hls", autoPlay: false, controls: true, muted: true, googleAds: {
|
|
47
|
-
adTagUrl: 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=',
|
|
48
|
-
liveAdBreakMode: mode,
|
|
49
|
-
periodicAdInterval: 120,
|
|
50
|
-
syncToLiveEdge: true,
|
|
51
|
-
liveEdgeOffset: 3,
|
|
52
|
-
metadataConfig: {
|
|
53
|
-
detectDateRange: true,
|
|
54
|
-
detectID3: true,
|
|
55
|
-
adClassNames: ['com.google.ads', 'ads', 'ad-break']
|
|
56
|
-
},
|
|
57
|
-
onAdStart: () => {
|
|
58
|
-
logAdEvent(`🎬 Ad Started (Mode: ${mode})`);
|
|
59
|
-
},
|
|
60
|
-
onAdEnd: () => {
|
|
61
|
-
logAdEvent('✅ Ad Ended - Resuming Live Stream');
|
|
62
|
-
},
|
|
63
|
-
onAdError: (error) => {
|
|
64
|
-
logAdEvent(`❌ Ad Error: ${error?.getMessage?.() || error}`);
|
|
65
|
-
},
|
|
66
|
-
onAllAdsComplete: () => {
|
|
67
|
-
logAdEvent('✅ All Ads in Pod Completed');
|
|
68
|
-
},
|
|
69
|
-
onLiveAdBreakDetected: (metadata) => {
|
|
70
|
-
logAdEvent(`📍 Live Ad Cue Detected: ${JSON.stringify(metadata).slice(0, 50)}...`);
|
|
71
|
-
},
|
|
72
|
-
onAdBreakScheduled: (scheduledTime) => {
|
|
73
|
-
logAdEvent(`⏰ Ad Break Scheduled at ${scheduledTime.toFixed(0)}s playback time`);
|
|
74
|
-
},
|
|
75
|
-
}, onReady: (player) => {
|
|
76
|
-
console.log('Player ready with live stream ads');
|
|
77
|
-
logAdEvent('🎥 Player Ready');
|
|
78
|
-
}, onError: (error) => {
|
|
79
|
-
console.error('Player error:', error);
|
|
80
|
-
logAdEvent(`❌ Player Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
81
|
-
}, onTimeUpdate: (time) => {
|
|
82
|
-
} })),
|
|
83
|
-
React.createElement("div", { style: {
|
|
84
|
-
padding: '20px',
|
|
85
|
-
backgroundColor: '#f9f9f9',
|
|
86
|
-
borderTop: '1px solid #ddd',
|
|
87
|
-
maxHeight: '200px',
|
|
88
|
-
overflowY: 'auto',
|
|
89
|
-
} },
|
|
90
|
-
React.createElement("h3", { style: { margin: '0 0 10px 0', fontSize: '16px' } }, "Live Ad Events Log:"),
|
|
91
|
-
adEvents.length === 0 ? (React.createElement("p", { style: { color: '#999', margin: 0 } }, "No ad events yet. Play the video to see ads.")) : (React.createElement("ul", { style: { margin: 0, padding: '0 0 0 20px' } }, adEvents.map((event, index) => (React.createElement("li", { key: index, style: { fontSize: '14px', marginBottom: '5px' } }, event)))))),
|
|
92
|
-
React.createElement("div", { style: {
|
|
93
|
-
padding: '20px',
|
|
94
|
-
backgroundColor: '#e7f3ff',
|
|
95
|
-
borderTop: '1px solid #b3d9ff'
|
|
96
|
-
} },
|
|
97
|
-
React.createElement("h3", { style: { margin: '0 0 10px 0', fontSize: '16px' } }, "\uD83D\uDCA1 Implementation Notes:"),
|
|
98
|
-
React.createElement("ul", { style: { margin: 0, paddingLeft: '20px', fontSize: '14px' } },
|
|
99
|
-
React.createElement("li", null,
|
|
100
|
-
React.createElement("strong", null, "Metadata Mode:"),
|
|
101
|
-
" Requires HLS stream with #EXT-X-DATERANGE tags or ID3 metadata. Your encoder must embed ad cues in the manifest."),
|
|
102
|
-
React.createElement("li", null,
|
|
103
|
-
React.createElement("strong", null, "Periodic Mode:"),
|
|
104
|
-
" Works with any live stream. Ads trigger every X seconds of actual playback. Simple but users see ads at different times (not synchronized)."),
|
|
105
|
-
React.createElement("li", null,
|
|
106
|
-
React.createElement("strong", null, "Hybrid Mode:"),
|
|
107
|
-
" Uses metadata when available, falls back to periodic timer. Best of both worlds!"),
|
|
108
|
-
React.createElement("li", null,
|
|
109
|
-
React.createElement("strong", null, "Live Edge Sync:"),
|
|
110
|
-
" After ads, player jumps to live edge (catches up to \"now\"). Disable if you want DVR-style behavior (continue from where paused).")))));
|
|
111
|
-
};
|
|
112
|
-
export const MetadataLiveAdsExample = () => {
|
|
113
|
-
return (React.createElement(WebPlayerView, { url: "https://stream.example.com/live.m3u8", type: "hls", googleAds: {
|
|
114
|
-
adTagUrl: 'https://pubads.g.doubleclick.net/...',
|
|
115
|
-
liveAdBreakMode: 'metadata',
|
|
116
|
-
metadataConfig: {
|
|
117
|
-
detectDateRange: true,
|
|
118
|
-
detectID3: true,
|
|
119
|
-
adClassNames: ['com.google.ads', 'ads']
|
|
120
|
-
},
|
|
121
|
-
syncToLiveEdge: true,
|
|
122
|
-
liveEdgeOffset: 3,
|
|
123
|
-
onLiveAdBreakDetected: (metadata) => {
|
|
124
|
-
console.log('Ad cue detected:', metadata);
|
|
125
|
-
}
|
|
126
|
-
} }));
|
|
127
|
-
};
|
|
128
|
-
export const PeriodicLiveAdsExample = () => {
|
|
129
|
-
return (React.createElement(WebPlayerView, { url: "https://stream.example.com/live.m3u8", type: "hls", googleAds: {
|
|
130
|
-
adTagUrl: 'https://pubads.g.doubleclick.net/...',
|
|
131
|
-
liveAdBreakMode: 'periodic',
|
|
132
|
-
periodicAdInterval: 300,
|
|
133
|
-
syncToLiveEdge: true,
|
|
134
|
-
onAdBreakScheduled: (scheduledTime) => {
|
|
135
|
-
console.log(`Next ad at ${scheduledTime}s playback time`);
|
|
136
|
-
}
|
|
137
|
-
} }));
|
|
138
|
-
};
|
|
139
|
-
export const HybridLiveAdsExample = () => {
|
|
140
|
-
return (React.createElement(WebPlayerView, { url: "https://stream.example.com/live.m3u8", type: "hls", googleAds: {
|
|
141
|
-
adTagUrl: 'https://pubads.g.doubleclick.net/...',
|
|
142
|
-
liveAdBreakMode: 'hybrid',
|
|
143
|
-
metadataConfig: {
|
|
144
|
-
detectDateRange: true,
|
|
145
|
-
detectID3: true
|
|
146
|
-
},
|
|
147
|
-
periodicAdInterval: 300,
|
|
148
|
-
syncToLiveEdge: true,
|
|
149
|
-
onLiveAdBreakDetected: (metadata) => {
|
|
150
|
-
console.log('✅ Metadata ad cue detected');
|
|
151
|
-
},
|
|
152
|
-
onAdBreakScheduled: (scheduledTime) => {
|
|
153
|
-
console.log('⏰ Fallback periodic ad scheduled');
|
|
154
|
-
}
|
|
155
|
-
} }));
|
|
156
|
-
};
|
|
157
|
-
export const BackendControlledLiveAdsExample = () => {
|
|
158
|
-
const [adConfig, setAdConfig] = useState(null);
|
|
159
|
-
React.useEffect(() => {
|
|
160
|
-
fetch('/api/live-stream/ad-config')
|
|
161
|
-
.then(res => res.json())
|
|
162
|
-
.then(config => {
|
|
163
|
-
setAdConfig(config);
|
|
164
|
-
});
|
|
165
|
-
}, []);
|
|
166
|
-
if (!adConfig)
|
|
167
|
-
return React.createElement("div", null, "Loading...");
|
|
168
|
-
return (React.createElement(WebPlayerView, { url: adConfig.streamUrl, type: "hls", googleAds: {
|
|
169
|
-
adTagUrl: adConfig.adTagUrl,
|
|
170
|
-
liveAdBreakMode: adConfig.mode,
|
|
171
|
-
periodicAdInterval: adConfig.periodicInterval,
|
|
172
|
-
metadataConfig: adConfig.metadataConfig,
|
|
173
|
-
syncToLiveEdge: true
|
|
174
|
-
} }));
|
|
175
|
-
};
|
|
176
|
-
export default LiveStreamAdsExample;
|
|
177
|
-
//# sourceMappingURL=live-stream-ads-example.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live-stream-ads-example.js","sourceRoot":"","sources":["../../../src/react/examples/live-stream-ads-example.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { VideoSegment, VideoChapters, ChapterConfig, SegmentType } from '../../chapters/types/ChapterTypes';
|
|
2
|
-
export interface UseChaptersOptions {
|
|
3
|
-
videoElement?: HTMLVideoElement | null;
|
|
4
|
-
chapters?: VideoChapters;
|
|
5
|
-
config?: ChapterConfig;
|
|
6
|
-
onSegmentEntered?: (segment: VideoSegment) => void;
|
|
7
|
-
onSegmentSkipped?: (fromSegment: VideoSegment, toSegment?: VideoSegment) => void;
|
|
8
|
-
onSkipButtonShown?: (segment: VideoSegment) => void;
|
|
9
|
-
onSkipButtonHidden?: (segment: VideoSegment) => void;
|
|
10
|
-
}
|
|
11
|
-
export interface UseChaptersResult {
|
|
12
|
-
currentSegment: VideoSegment | null;
|
|
13
|
-
chapters: VideoChapters | null;
|
|
14
|
-
isSkipButtonVisible: boolean;
|
|
15
|
-
loadChapters: (chapters: VideoChapters) => Promise<void>;
|
|
16
|
-
skipToSegment: (segmentId: string) => void;
|
|
17
|
-
skipCurrentSegment: () => void;
|
|
18
|
-
getSegmentsByType: (type: SegmentType) => VideoSegment[];
|
|
19
|
-
hasSegmentType: (type: SegmentType) => boolean;
|
|
20
|
-
getChapterMarkers: () => Array<{
|
|
21
|
-
position: number;
|
|
22
|
-
segment: VideoSegment;
|
|
23
|
-
color: string;
|
|
24
|
-
}>;
|
|
25
|
-
formatTime: (seconds: number) => string;
|
|
26
|
-
isInSegment: (segmentId: string) => boolean;
|
|
27
|
-
}
|
|
28
|
-
export declare function useChapters(options?: UseChaptersOptions): UseChaptersResult;
|
|
29
|
-
//# sourceMappingURL=useChapters.d.ts.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { VCManifest, VCCue } from "../types/VideoCommerceTypes";
|
|
2
|
-
export declare function resolveActiveCues(manifest: VCManifest | undefined, t: number, paused: boolean): VCCue[];
|
|
3
|
-
export declare function useCommerceSync(manifest: VCManifest | undefined, time: number, paused: boolean): {
|
|
4
|
-
activeCues: VCCue[];
|
|
5
|
-
activeOverlays: import("../types/VideoCommerceTypes").VCOverlayInstruction[];
|
|
6
|
-
activeProducts: import("../types/VideoCommerceTypes").VCProduct[];
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=useCommerceSync.d.ts.map
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
export interface EPGProgram {
|
|
3
|
-
id: number | string;
|
|
4
|
-
title: string;
|
|
5
|
-
description: string;
|
|
6
|
-
since: string;
|
|
7
|
-
till: string;
|
|
8
|
-
image?: string;
|
|
9
|
-
category?: string;
|
|
10
|
-
rating?: string;
|
|
11
|
-
isFavorite?: boolean;
|
|
12
|
-
isRecording?: boolean;
|
|
13
|
-
hasReminder?: boolean;
|
|
14
|
-
hasCatchup?: boolean;
|
|
15
|
-
metadata?: Record<string, any>;
|
|
16
|
-
}
|
|
17
|
-
export interface EPGProgramRow {
|
|
18
|
-
programTitle: string;
|
|
19
|
-
channelLogo?: string;
|
|
20
|
-
channelId?: string | number;
|
|
21
|
-
data: EPGProgram[];
|
|
22
|
-
}
|
|
23
|
-
export interface EPGData {
|
|
24
|
-
timeline: EPGProgramRow[];
|
|
25
|
-
}
|
|
26
|
-
export interface EPGTimeSlot {
|
|
27
|
-
hour: number;
|
|
28
|
-
label: string;
|
|
29
|
-
timestamp: number;
|
|
30
|
-
}
|
|
31
|
-
export interface EPGAction {
|
|
32
|
-
type: 'favorite' | 'record' | 'reminder' | 'catchup';
|
|
33
|
-
program: EPGProgram;
|
|
34
|
-
channel: EPGProgramRow;
|
|
35
|
-
}
|
|
36
|
-
export interface EPGNavigationState {
|
|
37
|
-
currentTimeOffset: number;
|
|
38
|
-
visibleTimeRange: {
|
|
39
|
-
start: number;
|
|
40
|
-
end: number;
|
|
41
|
-
};
|
|
42
|
-
scrollPosition: {
|
|
43
|
-
horizontal: number;
|
|
44
|
-
vertical: number;
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
export interface EPGConfig {
|
|
48
|
-
timeSlotDuration: number;
|
|
49
|
-
visibleHours: number;
|
|
50
|
-
enableInfiniteScroll: boolean;
|
|
51
|
-
lazyLoadThreshold: number;
|
|
52
|
-
showChannelLogos: boolean;
|
|
53
|
-
showProgramImages: boolean;
|
|
54
|
-
compactMode: boolean;
|
|
55
|
-
onFavorite?: (program: EPGProgram, channel: EPGProgramRow) => void | Promise<void>;
|
|
56
|
-
onRecord?: (program: EPGProgram, channel: EPGProgramRow) => void | Promise<void>;
|
|
57
|
-
onSetReminder?: (program: EPGProgram, channel: EPGProgramRow) => void | Promise<void>;
|
|
58
|
-
onCatchup?: (program: EPGProgram, channel: EPGProgramRow) => void | Promise<void>;
|
|
59
|
-
onProgramSelect?: (program: EPGProgram, channel: EPGProgramRow) => void;
|
|
60
|
-
onChannelSelect?: (channel: EPGProgramRow) => void;
|
|
61
|
-
}
|
|
62
|
-
export interface EPGProps {
|
|
63
|
-
data: EPGData;
|
|
64
|
-
config?: Partial<EPGConfig>;
|
|
65
|
-
visible?: boolean;
|
|
66
|
-
onToggle?: (visible: boolean) => void;
|
|
67
|
-
className?: string;
|
|
68
|
-
style?: React.CSSProperties;
|
|
69
|
-
}
|
|
70
|
-
export interface EPGContextType {
|
|
71
|
-
epgData: EPGData | null;
|
|
72
|
-
config: EPGConfig;
|
|
73
|
-
navigation: EPGNavigationState;
|
|
74
|
-
selectedProgram: EPGProgram | null;
|
|
75
|
-
currentTime: number;
|
|
76
|
-
selectProgram: (program: EPGProgram | null, channel?: EPGProgramRow) => void;
|
|
77
|
-
navigateTime: (direction: 'left' | 'right' | 'today') => void;
|
|
78
|
-
scrollTo: (time: number) => void;
|
|
79
|
-
executeAction: (action: EPGAction) => void | Promise<void>;
|
|
80
|
-
isLoading: boolean;
|
|
81
|
-
error: string | null;
|
|
82
|
-
}
|
|
83
|
-
export interface EPGComponentProps {
|
|
84
|
-
className?: string;
|
|
85
|
-
style?: React.CSSProperties;
|
|
86
|
-
}
|
|
87
|
-
export interface TimeRange {
|
|
88
|
-
start: number;
|
|
89
|
-
end: number;
|
|
90
|
-
duration: number;
|
|
91
|
-
}
|
|
92
|
-
export interface ProgramBlock extends TimeRange {
|
|
93
|
-
program: EPGProgram;
|
|
94
|
-
channel: EPGProgramRow;
|
|
95
|
-
width: number;
|
|
96
|
-
left: number;
|
|
97
|
-
}
|
|
98
|
-
export type EPGViewMode = 'grid' | 'list' | 'compact';
|
|
99
|
-
export type EPGSortBy = 'time' | 'channel' | 'category' | 'rating';
|
|
100
|
-
export type EPGFilterType = 'all' | 'favorites' | 'recordings' | 'reminders' | 'category';
|
|
101
|
-
//# sourceMappingURL=EPGTypes.d.ts.map
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
export type TickerStyleVariant = 'simple' | 'broadcast';
|
|
2
|
-
export type TickerLayoutStyle = 'simple' | 'broadcast' | 'two-line' | 'professional';
|
|
3
|
-
export type IntroAnimationType = 'none' | 'slide-in' | 'scale' | 'flash' | 'pulse' | 'shake';
|
|
4
|
-
export type ItemTransitionType = 'fade' | 'slide' | 'none';
|
|
5
|
-
export type BroadcastTheme = 'breaking-red' | 'breaking-blue' | 'alert-red' | 'news-blue' | 'custom';
|
|
6
|
-
export interface TopLineConfig {
|
|
7
|
-
mode?: 'static' | 'scroll';
|
|
8
|
-
multiLine?: boolean;
|
|
9
|
-
maxLines?: number;
|
|
10
|
-
forceMultiLine?: boolean;
|
|
11
|
-
breakAt?: number | string;
|
|
12
|
-
minHeight?: number;
|
|
13
|
-
fontSize?: number;
|
|
14
|
-
lineHeight?: number;
|
|
15
|
-
textColor?: string;
|
|
16
|
-
backgroundColor?: string;
|
|
17
|
-
padding?: number;
|
|
18
|
-
}
|
|
19
|
-
export interface BottomLineConfig {
|
|
20
|
-
speed?: number;
|
|
21
|
-
height?: number;
|
|
22
|
-
fontSize?: number;
|
|
23
|
-
textColor?: string;
|
|
24
|
-
backgroundColor?: string;
|
|
25
|
-
}
|
|
26
|
-
export interface TwoLineDisplayConfig {
|
|
27
|
-
enabled?: boolean;
|
|
28
|
-
topLine?: TopLineConfig;
|
|
29
|
-
bottomLine?: BottomLineConfig;
|
|
30
|
-
showSeparator?: boolean;
|
|
31
|
-
separatorColor?: string;
|
|
32
|
-
}
|
|
33
|
-
export type SeparatorType = 'line' | 'pulse-line' | 'chevron' | 'diamond' | 'dot';
|
|
34
|
-
export interface DecorativeShapesConfig {
|
|
35
|
-
headerSeparator?: {
|
|
36
|
-
type?: SeparatorType;
|
|
37
|
-
animated?: boolean;
|
|
38
|
-
color?: string;
|
|
39
|
-
width?: number;
|
|
40
|
-
height?: number;
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
export interface ItemCyclingConfig {
|
|
44
|
-
enabled?: boolean;
|
|
45
|
-
defaultDuration?: number;
|
|
46
|
-
transitionType?: ItemTransitionType;
|
|
47
|
-
transitionDuration?: number;
|
|
48
|
-
showProgress?: boolean;
|
|
49
|
-
progressColor?: string;
|
|
50
|
-
progressHeight?: number;
|
|
51
|
-
pauseOnHover?: boolean;
|
|
52
|
-
}
|
|
53
|
-
export interface BroadcastStyleConfig {
|
|
54
|
-
theme?: BroadcastTheme;
|
|
55
|
-
layoutStyle?: TickerLayoutStyle;
|
|
56
|
-
headerText?: string;
|
|
57
|
-
showGlobe?: boolean;
|
|
58
|
-
showLiveBadge?: boolean;
|
|
59
|
-
headerColor?: string;
|
|
60
|
-
headerTextColor?: string;
|
|
61
|
-
bodyColor?: string;
|
|
62
|
-
headerHeight?: number;
|
|
63
|
-
headerFontSize?: number;
|
|
64
|
-
subHeaderText?: string;
|
|
65
|
-
animateGlobe?: boolean;
|
|
66
|
-
pulseLiveBadge?: boolean;
|
|
67
|
-
twoLineDisplay?: TwoLineDisplayConfig;
|
|
68
|
-
decorativeShapes?: DecorativeShapesConfig;
|
|
69
|
-
defaultIntroAnimation?: IntroAnimationType;
|
|
70
|
-
defaultIntroDuration?: number;
|
|
71
|
-
}
|
|
72
|
-
export interface FlashNewsTickerItem {
|
|
73
|
-
id: string;
|
|
74
|
-
text: string;
|
|
75
|
-
html?: string;
|
|
76
|
-
headline?: string;
|
|
77
|
-
headlineHtml?: string;
|
|
78
|
-
priority?: number;
|
|
79
|
-
startTime?: number;
|
|
80
|
-
endTime?: number;
|
|
81
|
-
duration?: number;
|
|
82
|
-
showIntro?: boolean;
|
|
83
|
-
introText?: string;
|
|
84
|
-
introAnimation?: IntroAnimationType;
|
|
85
|
-
introDuration?: number;
|
|
86
|
-
metadata?: Record<string, any>;
|
|
87
|
-
}
|
|
88
|
-
export interface TickerDisplayConfig {
|
|
89
|
-
items: FlashNewsTickerItem[];
|
|
90
|
-
height?: number;
|
|
91
|
-
backgroundColor?: string;
|
|
92
|
-
textColor?: string;
|
|
93
|
-
fontSize?: number;
|
|
94
|
-
fontWeight?: number | string;
|
|
95
|
-
speed?: number;
|
|
96
|
-
gap?: number;
|
|
97
|
-
separator?: string;
|
|
98
|
-
offset?: number;
|
|
99
|
-
styleVariant?: TickerStyleVariant;
|
|
100
|
-
broadcastStyle?: BroadcastStyleConfig;
|
|
101
|
-
}
|
|
102
|
-
export interface FlashNewsTickerConfig {
|
|
103
|
-
enabled?: boolean;
|
|
104
|
-
items?: FlashNewsTickerItem[];
|
|
105
|
-
position?: 'top' | 'bottom' | 'both';
|
|
106
|
-
styleVariant?: TickerStyleVariant;
|
|
107
|
-
broadcastStyle?: BroadcastStyleConfig;
|
|
108
|
-
itemCycling?: ItemCyclingConfig;
|
|
109
|
-
topConfig?: TickerDisplayConfig;
|
|
110
|
-
bottomConfig?: TickerDisplayConfig;
|
|
111
|
-
height?: number;
|
|
112
|
-
backgroundColor?: string;
|
|
113
|
-
textColor?: string;
|
|
114
|
-
fontSize?: number;
|
|
115
|
-
fontWeight?: number | string;
|
|
116
|
-
speed?: number;
|
|
117
|
-
pauseOnHover?: boolean;
|
|
118
|
-
gap?: number;
|
|
119
|
-
loop?: boolean;
|
|
120
|
-
separator?: string;
|
|
121
|
-
variant?: 'standard' | 'breaking' | 'live' | 'broadcast1' | 'custom';
|
|
122
|
-
badgeText?: string;
|
|
123
|
-
badgeColor?: string;
|
|
124
|
-
badgeTextColor?: string;
|
|
125
|
-
accentColor?: string;
|
|
126
|
-
pulseBadge?: boolean;
|
|
127
|
-
iconUrl?: string;
|
|
128
|
-
headline?: string;
|
|
129
|
-
secondaryItems?: FlashNewsTickerItem[];
|
|
130
|
-
topOffset?: number;
|
|
131
|
-
bottomOffset?: number;
|
|
132
|
-
}
|
|
133
|
-
export interface FlashNewsTickerAPI {
|
|
134
|
-
show: () => void;
|
|
135
|
-
hide: () => void;
|
|
136
|
-
isVisible: () => boolean;
|
|
137
|
-
updateItems: (items: FlashNewsTickerItem[]) => void;
|
|
138
|
-
addItem: (item: FlashNewsTickerItem) => void;
|
|
139
|
-
removeItem: (itemId: string) => void;
|
|
140
|
-
clearItems: () => void;
|
|
141
|
-
updateConfig: (config: Partial<FlashNewsTickerConfig>) => void;
|
|
142
|
-
pause: () => void;
|
|
143
|
-
resume: () => void;
|
|
144
|
-
isPaused: () => boolean;
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=FlashNewsTickerTypes.d.ts.map
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
export type OverlayType = "badge" | "side-list" | "pause-layer" | "cta";
|
|
2
|
-
export type TriggerType = "time" | "userAction" | "cue";
|
|
3
|
-
export interface VCManifest {
|
|
4
|
-
version: "1.0";
|
|
5
|
-
videoId?: string;
|
|
6
|
-
products: VCProduct[];
|
|
7
|
-
cues: VCCue[];
|
|
8
|
-
ui?: {
|
|
9
|
-
panel?: {
|
|
10
|
-
position?: "right" | "left" | "bottom";
|
|
11
|
-
width?: number;
|
|
12
|
-
autoOpen?: "onProduct" | "onPause" | "never";
|
|
13
|
-
dedupeAcrossCues?: boolean;
|
|
14
|
-
showOnlyActive?: boolean;
|
|
15
|
-
sort?: "timeline" | "priceAsc" | "priceDesc";
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export interface VCProduct {
|
|
20
|
-
id: string;
|
|
21
|
-
title: string;
|
|
22
|
-
brand?: string;
|
|
23
|
-
thumbnails: {
|
|
24
|
-
square?: string;
|
|
25
|
-
portrait?: string;
|
|
26
|
-
landscape?: string;
|
|
27
|
-
};
|
|
28
|
-
pricing: {
|
|
29
|
-
currency: string;
|
|
30
|
-
amount: number;
|
|
31
|
-
compareAt?: number;
|
|
32
|
-
priceText?: string;
|
|
33
|
-
};
|
|
34
|
-
variants?: Array<{
|
|
35
|
-
id: string;
|
|
36
|
-
label: string;
|
|
37
|
-
}>;
|
|
38
|
-
deeplink: {
|
|
39
|
-
pdpUrl: string;
|
|
40
|
-
addToCartUrl?: string;
|
|
41
|
-
buyNowUrl?: string;
|
|
42
|
-
};
|
|
43
|
-
inventory?: {
|
|
44
|
-
inStock: boolean;
|
|
45
|
-
qty?: number;
|
|
46
|
-
backorder?: boolean;
|
|
47
|
-
};
|
|
48
|
-
rating?: {
|
|
49
|
-
value: number;
|
|
50
|
-
count: number;
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
export interface VCCue {
|
|
54
|
-
id: string;
|
|
55
|
-
trigger: {
|
|
56
|
-
type: TriggerType;
|
|
57
|
-
time?: {
|
|
58
|
-
start: number;
|
|
59
|
-
end?: number;
|
|
60
|
-
};
|
|
61
|
-
userAction?: "pause" | "resume";
|
|
62
|
-
cueName?: string;
|
|
63
|
-
};
|
|
64
|
-
overlays: VCOverlayInstruction[];
|
|
65
|
-
analytics?: {
|
|
66
|
-
label?: string;
|
|
67
|
-
campaignId?: string;
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
export type Placement = {
|
|
71
|
-
mode: "dock";
|
|
72
|
-
edge: "bottom" | "top" | "left" | "right";
|
|
73
|
-
} | {
|
|
74
|
-
mode: "anchor";
|
|
75
|
-
x: number;
|
|
76
|
-
y: number;
|
|
77
|
-
};
|
|
78
|
-
export interface VCOverlayInstruction {
|
|
79
|
-
id: string;
|
|
80
|
-
overlayType: OverlayType;
|
|
81
|
-
productRefs: Array<{
|
|
82
|
-
productId: string;
|
|
83
|
-
weight?: number;
|
|
84
|
-
}>;
|
|
85
|
-
placement?: Placement;
|
|
86
|
-
style?: {
|
|
87
|
-
theme?: "light" | "dark" | "auto";
|
|
88
|
-
badge?: {
|
|
89
|
-
showPrice?: boolean;
|
|
90
|
-
showThumb?: boolean;
|
|
91
|
-
label?: string;
|
|
92
|
-
};
|
|
93
|
-
list?: {
|
|
94
|
-
itemsPerPage?: number;
|
|
95
|
-
layout?: "grid" | "rail";
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
behavior?: {
|
|
99
|
-
autoShow?: boolean;
|
|
100
|
-
autoHideOn?: Array<"seek" | "pause" | "play" | "end">;
|
|
101
|
-
dismissible?: boolean;
|
|
102
|
-
zIndex?: number;
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
export interface VCEvent {
|
|
106
|
-
type: "vc_impression" | "vc_cue_enter" | "vc_cue_exit" | "vc_overlay_show" | "vc_overlay_hide" | "vc_product_impression" | "vc_product_click";
|
|
107
|
-
payload: Record<string, any>;
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=VideoCommerceTypes.d.ts.map
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { EPGProgram, EPGTimeSlot, ProgramBlock, EPGProgramRow } from '../types/EPGTypes';
|
|
2
|
-
export declare const parseTime: (isoString: string) => number;
|
|
3
|
-
export declare const formatTime: (timestamp: number, format?: '12h' | '24h') => string;
|
|
4
|
-
export declare const formatDateTime: (timestamp: number) => string;
|
|
5
|
-
export declare const getProgramDuration: (program: EPGProgram) => number;
|
|
6
|
-
export declare const generateTimeSlots: (startTime: number, visibleHours: number, slotDuration?: number) => EPGTimeSlot[];
|
|
7
|
-
export declare const calculateProgramBlock: (program: EPGProgram, channel: EPGProgramRow, timelineStart: number, timelineEnd: number, containerWidth: number, channelHeight?: number) => ProgramBlock | null;
|
|
8
|
-
export declare const isProgramLive: (program: EPGProgram, currentTime?: number) => boolean;
|
|
9
|
-
export declare const getProgramProgress: (program: EPGProgram, currentTime?: number) => number;
|
|
10
|
-
export declare const findProgramAtTime: (channel: EPGProgramRow, timestamp: number) => EPGProgram | null;
|
|
11
|
-
export declare const getCurrentTimePosition: (currentTime: number, timelineStart: number, timelineEnd: number, containerWidth: number) => number;
|
|
12
|
-
export declare const snapToTimeSlot: (timestamp: number, slotDuration?: number) => number;
|
|
13
|
-
export declare const calculateOptimalTimeRange: (currentTime?: number, visibleHours?: number) => {
|
|
14
|
-
start: number;
|
|
15
|
-
end: number;
|
|
16
|
-
};
|
|
17
|
-
export declare const getProgramsInRange: (channels: EPGProgramRow[], startTime: number, endTime: number, paddingHours?: number) => EPGProgramRow[];
|
|
18
|
-
export declare const calculateScrollPosition: (targetTime: number, timelineStart: number, timelineEnd: number, containerWidth: number, visibleWidth: number) => number;
|
|
19
|
-
export declare const debounce: <T extends (...args: any[]) => any>(func: T, wait: number) => (...args: Parameters<T>) => void;
|
|
20
|
-
export declare const throttle: <T extends (...args: any[]) => any>(func: T, limit: number) => (...args: Parameters<T>) => void;
|
|
21
|
-
//# sourceMappingURL=EPGUtils.d.ts.map
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
export interface YouTubeVideoInfo {
|
|
2
|
-
videoId: string;
|
|
3
|
-
title: string;
|
|
4
|
-
duration: number;
|
|
5
|
-
thumbnail: string;
|
|
6
|
-
streamUrl: string;
|
|
7
|
-
format: 'mp4' | 'webm';
|
|
8
|
-
}
|
|
9
|
-
export declare class YouTubeExtractor {
|
|
10
|
-
private static readonly YOUTUBE_REGEX;
|
|
11
|
-
private static readonly YOUTUBE_NOEMBED_API;
|
|
12
|
-
private static readonly YOUTUBE_API_ENDPOINT;
|
|
13
|
-
static isYouTubeUrl(url: string): boolean;
|
|
14
|
-
static extractVideoId(url: string): string | null;
|
|
15
|
-
static getVideoMetadata(url: string): Promise<{
|
|
16
|
-
title: string;
|
|
17
|
-
thumbnail: string;
|
|
18
|
-
duration?: number;
|
|
19
|
-
}>;
|
|
20
|
-
static getEmbedUrl(videoId: string, showControls?: boolean): string;
|
|
21
|
-
static getDirectStreamUrl(videoId: string, backendEndpoint?: string): Promise<string | null>;
|
|
22
|
-
private static getFallbackStreamUrl;
|
|
23
|
-
static prepareYouTubeSource(url: string, backendEndpoint?: string): Promise<{
|
|
24
|
-
url: string;
|
|
25
|
-
type: string;
|
|
26
|
-
title: string;
|
|
27
|
-
thumbnail: string;
|
|
28
|
-
duration: number | undefined;
|
|
29
|
-
videoId: string;
|
|
30
|
-
isYouTube: boolean;
|
|
31
|
-
metadata: {
|
|
32
|
-
source: string;
|
|
33
|
-
videoId: string;
|
|
34
|
-
};
|
|
35
|
-
}>;
|
|
36
|
-
}
|
|
37
|
-
export default YouTubeExtractor;
|
|
38
|
-
//# sourceMappingURL=YouTubeExtractor.d.ts.map
|