unified-video-framework 1.4.444 → 1.4.446
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 +53 -20
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/dist/drm.js +1 -1
- package/packages/web/src/WebPlayer.ts +62 -19
- package/scripts/fix-imports.js +61 -23
- 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.d.ts +0 -4
- 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
|