eb-player 1.54.57 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/README.md +2 -6
  2. package/dist/build/default.js +1 -1
  3. package/dist/build/eb-player.css +2066 -0
  4. package/dist/build/ebplayer-engines.bundle.js +2393 -0
  5. package/dist/build/ebplayer-engines.bundle.js.map +1 -0
  6. package/dist/build/ebplayer.bundle.js +6603 -0
  7. package/dist/build/ebplayer.bundle.js.map +1 -0
  8. package/dist/build/theme-forja.css +10 -0
  9. package/dist/build/theme-forja.js +1 -0
  10. package/dist/build/theme-modern.css +520 -0
  11. package/dist/build/theme-radio.css +11 -0
  12. package/dist/build/theme-radio.js +1 -0
  13. package/dist/build/theme-snrt.css +11 -0
  14. package/dist/build/theme-snrt.js +1 -0
  15. package/dist/build/theme-v2.css +661 -0
  16. package/dist/build/types/config.d.ts +139 -0
  17. package/dist/build/types/config.d.ts.map +1 -0
  18. package/dist/build/types/core/command-handler.d.ts +49 -0
  19. package/dist/build/types/core/command-handler.d.ts.map +1 -0
  20. package/dist/build/types/core/config.d.ts +174 -0
  21. package/dist/build/types/core/config.d.ts.map +1 -0
  22. package/dist/build/types/core/css/theme-forja.entry.d.ts +2 -0
  23. package/dist/build/types/core/css/theme-forja.entry.d.ts.map +1 -0
  24. package/dist/build/types/core/css/theme-radio.entry.d.ts +2 -0
  25. package/dist/build/types/core/css/theme-radio.entry.d.ts.map +1 -0
  26. package/dist/build/types/core/css/theme-snrt.entry.d.ts +2 -0
  27. package/dist/build/types/core/css/theme-snrt.entry.d.ts.map +1 -0
  28. package/dist/build/types/core/engine-state-sync.d.ts +38 -0
  29. package/dist/build/types/core/engine-state-sync.d.ts.map +1 -0
  30. package/dist/build/types/core/event-bus.d.ts +87 -0
  31. package/dist/build/types/core/event-bus.d.ts.map +1 -0
  32. package/dist/build/types/core/fsm.d.ts +27 -0
  33. package/dist/build/types/core/fsm.d.ts.map +1 -0
  34. package/dist/build/types/core/i18n.d.ts +51 -0
  35. package/dist/build/types/core/i18n.d.ts.map +1 -0
  36. package/dist/build/types/core/index.d.ts +23 -0
  37. package/dist/build/types/core/index.d.ts.map +1 -0
  38. package/dist/build/types/core/lifecycle.d.ts +96 -0
  39. package/dist/build/types/core/lifecycle.d.ts.map +1 -0
  40. package/dist/build/types/core/player-state.d.ts +15 -0
  41. package/dist/build/types/core/player-state.d.ts.map +1 -0
  42. package/dist/build/types/core/types.d.ts +84 -0
  43. package/dist/build/types/core/types.d.ts.map +1 -0
  44. package/dist/build/types/eb-player-standalone.d.ts +12 -0
  45. package/dist/build/types/eb-player-standalone.d.ts.map +1 -0
  46. package/dist/build/types/eb-player.d.ts +43 -0
  47. package/dist/build/types/eb-player.d.ts.map +1 -0
  48. package/dist/build/types/engine-state-sync.d.ts +38 -0
  49. package/dist/build/types/engine-state-sync.d.ts.map +1 -0
  50. package/dist/build/types/engines/abr/dash.d.ts +56 -0
  51. package/dist/build/types/engines/abr/dash.d.ts.map +1 -0
  52. package/dist/build/types/engines/abr/hls.d.ts +105 -0
  53. package/dist/build/types/engines/abr/hls.d.ts.map +1 -0
  54. package/dist/build/types/engines/base-engine.d.ts +56 -0
  55. package/dist/build/types/engines/base-engine.d.ts.map +1 -0
  56. package/dist/build/types/engines/cdn-loader.d.ts +20 -0
  57. package/dist/build/types/engines/cdn-loader.d.ts.map +1 -0
  58. package/dist/build/types/engines/cdn-token-manager.d.ts +136 -0
  59. package/dist/build/types/engines/cdn-token-manager.d.ts.map +1 -0
  60. package/dist/build/types/engines/dash.d.ts +79 -0
  61. package/dist/build/types/engines/dash.d.ts.map +1 -0
  62. package/dist/build/types/engines/drm.d.ts +54 -0
  63. package/dist/build/types/engines/drm.d.ts.map +1 -0
  64. package/dist/build/types/engines/hls-discontinuity-patch.d.ts +43 -0
  65. package/dist/build/types/engines/hls-discontinuity-patch.d.ts.map +1 -0
  66. package/dist/build/types/engines/hls.d.ts +45 -0
  67. package/dist/build/types/engines/hls.d.ts.map +1 -0
  68. package/dist/build/types/engines/index.d.ts +26 -0
  69. package/dist/build/types/engines/index.d.ts.map +1 -0
  70. package/dist/build/types/engines/ios/hls.d.ts +20 -0
  71. package/dist/build/types/engines/ios/hls.d.ts.map +1 -0
  72. package/dist/build/types/engines/poster/hls.d.ts +35 -0
  73. package/dist/build/types/engines/poster/hls.d.ts.map +1 -0
  74. package/dist/build/types/engines/retry/dash.d.ts +39 -0
  75. package/dist/build/types/engines/retry/dash.d.ts.map +1 -0
  76. package/dist/build/types/engines/retry/hls.d.ts +35 -0
  77. package/dist/build/types/engines/retry/hls.d.ts.map +1 -0
  78. package/dist/build/types/engines/snapshot/dash.d.ts +55 -0
  79. package/dist/build/types/engines/snapshot/dash.d.ts.map +1 -0
  80. package/dist/build/types/engines/snapshot/hls.d.ts +108 -0
  81. package/dist/build/types/engines/snapshot/hls.d.ts.map +1 -0
  82. package/dist/build/types/engines/stall-watchdog.d.ts +41 -0
  83. package/dist/build/types/engines/stall-watchdog.d.ts.map +1 -0
  84. package/dist/build/types/event-bus.d.ts +54 -0
  85. package/dist/build/types/event-bus.d.ts.map +1 -0
  86. package/dist/build/types/fsm.d.ts +27 -0
  87. package/dist/build/types/fsm.d.ts.map +1 -0
  88. package/dist/build/types/i18n.d.ts +51 -0
  89. package/dist/build/types/i18n.d.ts.map +1 -0
  90. package/dist/build/types/index.d.ts +21 -0
  91. package/dist/build/types/index.d.ts.map +1 -0
  92. package/dist/build/types/integrations/ads-manager.d.ts +32 -0
  93. package/dist/build/types/integrations/ads-manager.d.ts.map +1 -0
  94. package/dist/build/types/integrations/chromecast-manager.d.ts +50 -0
  95. package/dist/build/types/integrations/chromecast-manager.d.ts.map +1 -0
  96. package/dist/build/types/integrations/epg-manager.d.ts +22 -0
  97. package/dist/build/types/integrations/epg-manager.d.ts.map +1 -0
  98. package/dist/build/types/integrations/index.d.ts +6 -0
  99. package/dist/build/types/integrations/index.d.ts.map +1 -0
  100. package/dist/build/types/integrations/p2p-manager.d.ts +33 -0
  101. package/dist/build/types/integrations/p2p-manager.d.ts.map +1 -0
  102. package/dist/build/types/integrations/playlist-manager.d.ts +21 -0
  103. package/dist/build/types/integrations/playlist-manager.d.ts.map +1 -0
  104. package/dist/build/types/lifecycle.d.ts +64 -0
  105. package/dist/build/types/lifecycle.d.ts.map +1 -0
  106. package/dist/build/types/player-state.d.ts +15 -0
  107. package/dist/build/types/player-state.d.ts.map +1 -0
  108. package/dist/build/types/skin/bars/bottom-bar.d.ts +16 -0
  109. package/dist/build/types/skin/bars/bottom-bar.d.ts.map +1 -0
  110. package/dist/build/types/skin/bars/middle-bar.d.ts +16 -0
  111. package/dist/build/types/skin/bars/middle-bar.d.ts.map +1 -0
  112. package/dist/build/types/skin/bars/top-bar.d.ts +15 -0
  113. package/dist/build/types/skin/bars/top-bar.d.ts.map +1 -0
  114. package/dist/build/types/skin/base-component.d.ts +69 -0
  115. package/dist/build/types/skin/base-component.d.ts.map +1 -0
  116. package/dist/build/types/skin/brand/forja-playlist-bar.d.ts +15 -0
  117. package/dist/build/types/skin/brand/forja-playlist-bar.d.ts.map +1 -0
  118. package/dist/build/types/skin/brand/snrt-radio-carousel.d.ts +16 -0
  119. package/dist/build/types/skin/brand/snrt-radio-carousel.d.ts.map +1 -0
  120. package/dist/build/types/skin/component-registry.d.ts +16 -0
  121. package/dist/build/types/skin/component-registry.d.ts.map +1 -0
  122. package/dist/build/types/skin/controllers/auto-hide.d.ts +27 -0
  123. package/dist/build/types/skin/controllers/auto-hide.d.ts.map +1 -0
  124. package/dist/build/types/skin/controllers/keyboard.d.ts +29 -0
  125. package/dist/build/types/skin/controllers/keyboard.d.ts.map +1 -0
  126. package/dist/build/types/skin/controls/cast-button.d.ts +15 -0
  127. package/dist/build/types/skin/controls/cast-button.d.ts.map +1 -0
  128. package/dist/build/types/skin/controls/forward-button.d.ts +15 -0
  129. package/dist/build/types/skin/controls/forward-button.d.ts.map +1 -0
  130. package/dist/build/types/skin/controls/fullscreen-button.d.ts +17 -0
  131. package/dist/build/types/skin/controls/fullscreen-button.d.ts.map +1 -0
  132. package/dist/build/types/skin/controls/info-button.d.ts +10 -0
  133. package/dist/build/types/skin/controls/info-button.d.ts.map +1 -0
  134. package/dist/build/types/skin/controls/live-sync-button.d.ts +20 -0
  135. package/dist/build/types/skin/controls/live-sync-button.d.ts.map +1 -0
  136. package/dist/build/types/skin/controls/pip-button.d.ts +21 -0
  137. package/dist/build/types/skin/controls/pip-button.d.ts.map +1 -0
  138. package/dist/build/types/skin/controls/play-pause-button.d.ts +14 -0
  139. package/dist/build/types/skin/controls/play-pause-button.d.ts.map +1 -0
  140. package/dist/build/types/skin/controls/rewind-button.d.ts +15 -0
  141. package/dist/build/types/skin/controls/rewind-button.d.ts.map +1 -0
  142. package/dist/build/types/skin/controls/seekbar.d.ts +43 -0
  143. package/dist/build/types/skin/controls/seekbar.d.ts.map +1 -0
  144. package/dist/build/types/skin/controls/settings-panel.d.ts +45 -0
  145. package/dist/build/types/skin/controls/settings-panel.d.ts.map +1 -0
  146. package/dist/build/types/skin/controls/share-button.d.ts +11 -0
  147. package/dist/build/types/skin/controls/share-button.d.ts.map +1 -0
  148. package/dist/build/types/skin/controls/time-display.d.ts +19 -0
  149. package/dist/build/types/skin/controls/time-display.d.ts.map +1 -0
  150. package/dist/build/types/skin/controls/volume-control.d.ts +21 -0
  151. package/dist/build/types/skin/controls/volume-control.d.ts.map +1 -0
  152. package/dist/build/types/skin/icons/icons-modern.d.ts +10 -0
  153. package/dist/build/types/skin/icons/icons-modern.d.ts.map +1 -0
  154. package/dist/build/types/skin/icons/icons.d.ts +10 -0
  155. package/dist/build/types/skin/icons/icons.d.ts.map +1 -0
  156. package/dist/build/types/skin/icons/sprite.d.ts +39 -0
  157. package/dist/build/types/skin/icons/sprite.d.ts.map +1 -0
  158. package/dist/build/types/skin/index.d.ts +24 -0
  159. package/dist/build/types/skin/index.d.ts.map +1 -0
  160. package/dist/build/types/skin/overlays/error-message.d.ts +14 -0
  161. package/dist/build/types/skin/overlays/error-message.d.ts.map +1 -0
  162. package/dist/build/types/skin/overlays/info-overlay.d.ts +15 -0
  163. package/dist/build/types/skin/overlays/info-overlay.d.ts.map +1 -0
  164. package/dist/build/types/skin/overlays/loading-spinner.d.ts +17 -0
  165. package/dist/build/types/skin/overlays/loading-spinner.d.ts.map +1 -0
  166. package/dist/build/types/skin/overlays/socials-overlay.d.ts +17 -0
  167. package/dist/build/types/skin/overlays/socials-overlay.d.ts.map +1 -0
  168. package/dist/build/types/skin/overlays/toast-notification.d.ts +18 -0
  169. package/dist/build/types/skin/overlays/toast-notification.d.ts.map +1 -0
  170. package/dist/build/types/skin/skin-root.d.ts +80 -0
  171. package/dist/build/types/skin/skin-root.d.ts.map +1 -0
  172. package/dist/build/types/types.d.ts +41 -0
  173. package/dist/build/types/types.d.ts.map +1 -0
  174. package/dist/build/types/utils/chapters.d.ts +16 -0
  175. package/dist/build/types/utils/chapters.d.ts.map +1 -0
  176. package/dist/build/types/utils/format-duration.d.ts +9 -0
  177. package/dist/build/types/utils/format-duration.d.ts.map +1 -0
  178. package/dist/build/types/utils/format-wall-clock.d.ts +6 -0
  179. package/dist/build/types/utils/format-wall-clock.d.ts.map +1 -0
  180. package/dist/build/types/utils/settings-helpers.d.ts +41 -0
  181. package/dist/build/types/utils/settings-helpers.d.ts.map +1 -0
  182. package/dist/dev/default.js +6451 -0
  183. package/dist/dev/default.js.map +1 -0
  184. package/dist/dev/easybroadcast.js +6677 -0
  185. package/dist/dev/easybroadcast.js.map +1 -0
  186. package/dist/dev/index.html +24 -0
  187. package/dist/eb-player.css +2066 -0
  188. package/dist/players/default/default.js +400 -1
  189. package/dist/players/default/index.html +1 -5
  190. package/dist/players/forja/forja.js +310 -0
  191. package/dist/players/forja/index.html +1 -0
  192. package/dist/players/videos/equipe/EB_lequipe-preprod.js +1 -0
  193. package/dist/players/videos/equipe/EB_lequipe.js +1 -1
  194. package/dist/players/videos/equipe/equipe.js +1 -1
  195. package/dist/theme-forja.css +10 -0
  196. package/dist/theme-modern.css +520 -0
  197. package/dist/theme-radio.css +11 -0
  198. package/dist/theme-snrt.css +11 -0
  199. package/dist/theme-v2.css +661 -0
  200. package/package.json +34 -3
  201. package/dist/build/forja.js +0 -1
  202. package/dist/players/videos/equipe/EB_lequipe-preprod copy.js +0 -1
@@ -0,0 +1,139 @@
1
+ /**
2
+ * PlayerConfig interface and mergeConfig function.
3
+ *
4
+ * This module:
5
+ * 1. Defines all 100+ player configuration options as a typed interface
6
+ * 2. Provides DEFAULT_CONFIG with all default values matching configs/default.js
7
+ * 3. Fixes the JSON.parse/stringify bug in generator/mergeConfig.js by
8
+ * passing function values by reference instead of serializing them
9
+ */
10
+ export interface SkinColors {
11
+ general: string;
12
+ progressBar: string;
13
+ volumeBar: string;
14
+ }
15
+ export interface EngineSettings {
16
+ liveSyncDurationCount?: number;
17
+ emeEnabled?: boolean;
18
+ drmSystems?: Record<string, {
19
+ serverURL: string;
20
+ [key: string]: unknown;
21
+ }>;
22
+ [key: string]: unknown;
23
+ }
24
+ export interface ChromecastMetadata {
25
+ title?: string;
26
+ description?: string;
27
+ poster?: string;
28
+ }
29
+ export interface LibSettingsResourceManager {
30
+ timeoutV2V?: number;
31
+ storageSize?: number;
32
+ randomWaitForPeers?: number[];
33
+ partialRequest?: boolean;
34
+ setEnableV2V?: boolean;
35
+ }
36
+ export interface LibSettings {
37
+ resourceManager?: LibSettingsResourceManager;
38
+ [key: string]: unknown;
39
+ }
40
+ export interface SkippableChapter {
41
+ message: string;
42
+ chapter: string;
43
+ }
44
+ /**
45
+ * PlayerConfig interface mirrors all options from configs/default.js.
46
+ * Consumer configs remain as JS objects (accepted via Partial<PlayerConfig>).
47
+ */
48
+ export interface PlayerConfig {
49
+ template: string;
50
+ el: string;
51
+ skin: string;
52
+ start: boolean;
53
+ forceAutoplayAudio: boolean;
54
+ style: string | string[] | undefined;
55
+ css: string;
56
+ dashjs: string | false;
57
+ hlsjs: string | false;
58
+ engineSettings: EngineSettings;
59
+ chromecast: string | false;
60
+ chromecastApp: string | undefined;
61
+ chromecastMetadata: ChromecastMetadata | undefined;
62
+ src: string | undefined;
63
+ autoplay: boolean;
64
+ muted: boolean;
65
+ image: string | false;
66
+ loop: boolean;
67
+ startAt: number | undefined;
68
+ loading: boolean;
69
+ logo: string | undefined;
70
+ logoLink: string | undefined;
71
+ logoPositions: Array<'top-left' | 'bottom-right' | 'center'>;
72
+ about: string;
73
+ primaryColor: string;
74
+ skinColor: string;
75
+ skinColors: SkinColors;
76
+ socials: Record<string, string> | false;
77
+ customSocialsShare: boolean;
78
+ seekbar: boolean;
79
+ middlebar: boolean;
80
+ pip: boolean;
81
+ retry: boolean;
82
+ lowLatency: boolean;
83
+ ad: string | undefined;
84
+ radio: boolean;
85
+ token: string | undefined;
86
+ tokenType: string | undefined;
87
+ srcInTokenRequest: boolean;
88
+ defaultAudio: string | string[] | undefined;
89
+ defaultSubtitle: string | string[] | undefined;
90
+ forceAutoplay: boolean;
91
+ forceQuality: false | 'lowest' | 'highest' | number;
92
+ liveButton: boolean;
93
+ syncLiveMargin: number;
94
+ isLive: boolean | undefined;
95
+ noUi: boolean;
96
+ preroll: string | false;
97
+ prerollSkip: number;
98
+ prerollLink: string | false;
99
+ posterStream: string | false;
100
+ speed: boolean;
101
+ chapters: string | null;
102
+ skippableChapters: SkippableChapter[];
103
+ supportHotKeys: boolean;
104
+ useGeoblockingErrorHandle: boolean;
105
+ extraParamsCallback: ((src: string) => Record<string, unknown>) | undefined;
106
+ licenseXhrSetup: ((xhr: XMLHttpRequest, url: string) => void) | undefined;
107
+ volume: number;
108
+ lib: string | undefined;
109
+ manager: string | false;
110
+ stats: string;
111
+ origin: string;
112
+ content: string | undefined;
113
+ libSettings: LibSettings;
114
+ hasPlaylistPicker: boolean;
115
+ disableCustomAbr: boolean;
116
+ lang: string | undefined;
117
+ epgContentId: string | undefined;
118
+ epgPolling: number | null;
119
+ epgDefaultLang: string;
120
+ showEpgTitlePreview: boolean;
121
+ showProgressThumb: boolean;
122
+ [key: string]: unknown;
123
+ }
124
+ /**
125
+ * DEFAULT_CONFIG contains all default values matching configs/default.js.
126
+ */
127
+ export declare const DEFAULT_CONFIG: PlayerConfig;
128
+ /**
129
+ * Merges multiple configs in order (later configs win).
130
+ * Fixes the function-stripping bug from generator/mergeConfig.js.
131
+ *
132
+ * Rules:
133
+ * - Functions: passed by reference (not cloned)
134
+ * - Arrays: replaced entirely (not concatenated)
135
+ * - Plain objects: deep-merged recursively
136
+ * - null/undefined entries: silently ignored
137
+ */
138
+ export declare function mergeConfig(...configs: Array<Partial<PlayerConfig> | null | undefined>): PlayerConfig;
139
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { TypedEventBus } from './event-bus';
2
+ import type { PlayerState } from './types';
3
+ import type { I18n } from './i18n';
4
+ import type { BaseEngine } from '../engines/base-engine';
5
+ import type { ChromecastManager } from '../integrations/chromecast-manager';
6
+ /**
7
+ * Saved stream selection state before a reload.
8
+ * PlayerController reads these after re-creating the engine to restore user selections.
9
+ */
10
+ export interface SavedSelections {
11
+ quality: number;
12
+ audioTrack: number;
13
+ subtitleTrack: number;
14
+ }
15
+ /**
16
+ * CommandHandler — central event router from skin commands to video/engine/integration.
17
+ *
18
+ * Subscribes to all command events on the TypedEventBus and routes each to:
19
+ * - HTMLVideoElement for basic playback (play, pause, seek, mute-toggle)
20
+ * - BaseEngine for stream settings (quality, audio, subtitle, speed, sync-live)
21
+ * - ChromecastManager for cast handoff (cast-start, cast-stop, cast-failed)
22
+ *
23
+ * During an active cast session (state.isCasting === true), play/pause/seek/volume
24
+ * commands are routed to the Chromecast driver instead of the local video element.
25
+ *
26
+ * All commands are silent no-ops when engine/video/chromecastManager is null/unavailable.
27
+ */
28
+ export declare class CommandHandler {
29
+ private reloadCount;
30
+ private successTimer;
31
+ private toastTimer;
32
+ private savedQuality;
33
+ private savedAudioTrack;
34
+ private savedSubtitleTrack;
35
+ constructor(bus: TypedEventBus, video: HTMLVideoElement, state: PlayerState, getEngine: () => BaseEngine | null, chromecastManager: ChromecastManager | null, i18n: I18n, onReload: () => void, signal: AbortSignal);
36
+ /**
37
+ * Returns the saved stream selections from before the last reload.
38
+ * PlayerController calls this after re-attaching the engine to restore user selections.
39
+ */
40
+ getSavedSelections(): SavedSelections;
41
+ private wireVideoCommands;
42
+ private wireEngineCommands;
43
+ private wireReloadOrchestration;
44
+ private wireCastHandoff;
45
+ private wireVolumeRouting;
46
+ private showToast;
47
+ private wireAbortCleanup;
48
+ }
49
+ //# sourceMappingURL=command-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../../../src/core/command-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAE3E;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,YAAY,CAAoE;IACxF,OAAO,CAAC,UAAU,CAAoE;IACtF,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,kBAAkB,CAAK;gBAG7B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,UAAU,GAAG,IAAI,EAClC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,EAC3C,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,IAAI,EACpB,MAAM,EAAE,WAAW;IAcrB;;;OAGG;IACH,kBAAkB,IAAI,eAAe;IAYrC,OAAO,CAAC,iBAAiB;IAiDzB,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,uBAAuB;IAwC/B,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,gBAAgB;CAMzB"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * PlayerConfig interface and mergeConfig function.
3
+ *
4
+ * This module:
5
+ * 1. Defines all 100+ player configuration options as a typed interface
6
+ * 2. Provides DEFAULT_CONFIG with all default values matching configs/default.js
7
+ * 3. Fixes the JSON.parse/stringify bug in generator/mergeConfig.js by
8
+ * passing function values by reference instead of serializing them
9
+ */
10
+ export interface SkinColors {
11
+ general: string;
12
+ progressBar: string;
13
+ volumeBar: string;
14
+ }
15
+ export interface EngineSettings {
16
+ liveSyncDurationCount?: number;
17
+ emeEnabled?: boolean;
18
+ drmSystems?: Record<string, {
19
+ serverURL?: string;
20
+ licenseUrl?: string;
21
+ [key: string]: unknown;
22
+ }>;
23
+ [key: string]: unknown;
24
+ }
25
+ export interface ChromecastMetadata {
26
+ title?: string;
27
+ description?: string;
28
+ poster?: string;
29
+ }
30
+ export interface LibSettingsResourceManager {
31
+ timeoutV2V?: number;
32
+ storageSize?: number;
33
+ randomWaitForPeers?: number[];
34
+ partialRequest?: boolean;
35
+ setEnableV2V?: boolean;
36
+ }
37
+ export interface LibSettings {
38
+ resourceManager?: LibSettingsResourceManager;
39
+ [key: string]: unknown;
40
+ }
41
+ /** Identifies a mountable skin component for layout configuration. */
42
+ export type ComponentId = 'play-pause' | 'volume' | 'seekbar' | 'time' | 'live-sync' | 'settings' | 'pip' | 'cast' | 'fullscreen' | 'rewind' | 'forward' | 'share' | 'info';
43
+ /** Ordered component lists for each alignment zone within a bar. */
44
+ export interface BarLayout {
45
+ left?: ComponentId[];
46
+ center?: ComponentId[];
47
+ right?: ComponentId[];
48
+ }
49
+ /** Layout configuration controlling component placement in each bar. */
50
+ export interface LayoutConfig {
51
+ topBar?: BarLayout;
52
+ bottomBar?: BarLayout;
53
+ middleBar?: BarLayout;
54
+ }
55
+ /**
56
+ * Default layout matching the hardcoded component placement.
57
+ * Used as fallback when config.layout is not provided.
58
+ */
59
+ export declare const DEFAULT_LAYOUT: LayoutConfig;
60
+ /**
61
+ * Theme-specific default layouts.
62
+ * Used when config.layout is not explicitly provided but a theme is set.
63
+ */
64
+ export declare const THEME_LAYOUTS: Record<string, LayoutConfig>;
65
+ /**
66
+ * Returns the effective layout for a given config.
67
+ * Priority: explicit config.layout > theme default > DEFAULT_LAYOUT
68
+ */
69
+ export declare function resolveLayout(config: {
70
+ skin?: string;
71
+ layout?: LayoutConfig;
72
+ }): LayoutConfig;
73
+ export interface SkippableChapter {
74
+ message: string;
75
+ chapter: string;
76
+ }
77
+ /**
78
+ * PlayerConfig interface mirrors all options from configs/default.js.
79
+ * Consumer configs remain as JS objects (accepted via Partial<PlayerConfig>).
80
+ */
81
+ export interface PlayerConfig {
82
+ template: string;
83
+ el: string;
84
+ skin: string;
85
+ start: boolean;
86
+ forceAutoplayAudio: boolean;
87
+ style: string | string[] | undefined;
88
+ css: string;
89
+ dashjs: string | false;
90
+ hlsjs: string | false;
91
+ engineSettings: EngineSettings;
92
+ chromecast: string | false;
93
+ chromecastApp: string | undefined;
94
+ chromecastMetadata: ChromecastMetadata | undefined;
95
+ src: string | undefined;
96
+ autoplay: boolean;
97
+ muted: boolean;
98
+ image: string | false;
99
+ loop: boolean;
100
+ startAt: number | undefined;
101
+ loading: boolean;
102
+ logo: string | undefined;
103
+ logoLink: string | undefined;
104
+ logoPositions: Array<'top-left' | 'bottom-right' | 'center'>;
105
+ about: string;
106
+ primaryColor: string;
107
+ skinColor: string;
108
+ skinColors: SkinColors;
109
+ socials: Record<string, string> | false;
110
+ customSocialsShare: boolean;
111
+ seekbar: boolean;
112
+ middlebar: boolean;
113
+ pip: boolean;
114
+ retry: boolean;
115
+ lowLatency: boolean;
116
+ ad: string | undefined;
117
+ radio: boolean;
118
+ token: string | undefined;
119
+ tokenType: string | undefined;
120
+ srcInTokenRequest: boolean;
121
+ defaultAudio: string | string[] | undefined;
122
+ defaultSubtitle: string | string[] | undefined;
123
+ forceAutoplay: boolean;
124
+ forceQuality: false | 'lowest' | 'highest' | number;
125
+ liveButton: boolean;
126
+ syncLiveMargin: number;
127
+ isLive: boolean | undefined;
128
+ noUi: boolean;
129
+ preroll: string | false;
130
+ prerollSkip: number;
131
+ prerollLink: string | false;
132
+ posterStream: string | false;
133
+ speed: boolean;
134
+ chapters: string | null;
135
+ skippableChapters: SkippableChapter[];
136
+ seekOffset: number;
137
+ supportHotKeys: boolean;
138
+ useGeoblockingErrorHandle: boolean;
139
+ extraParamsCallback: ((src: string) => Record<string, unknown>) | undefined;
140
+ licenseXhrSetup: ((xhr: XMLHttpRequest, url: string) => void) | undefined;
141
+ volume: number;
142
+ lib: string | undefined;
143
+ manager: string | false;
144
+ stats: string;
145
+ origin: string;
146
+ content: string | undefined;
147
+ libSettings: LibSettings;
148
+ hasPlaylistPicker: boolean;
149
+ disableCustomAbr: boolean;
150
+ lang: string | undefined;
151
+ epgContentId: string | undefined;
152
+ epgPolling: number | null;
153
+ epgDefaultLang: string;
154
+ showEpgTitlePreview: boolean;
155
+ showProgressThumb: boolean;
156
+ layout: LayoutConfig | undefined;
157
+ [key: string]: unknown;
158
+ }
159
+ /**
160
+ * DEFAULT_CONFIG contains all default values matching configs/default.js.
161
+ */
162
+ export declare const DEFAULT_CONFIG: PlayerConfig;
163
+ /**
164
+ * Merges multiple configs in order (later configs win).
165
+ * Fixes the function-stripping bug from generator/mergeConfig.js.
166
+ *
167
+ * Rules:
168
+ * - Functions: passed by reference (not cloned)
169
+ * - Arrays: replaced entirely (not concatenated)
170
+ * - Plain objects: deep-merged recursively
171
+ * - null/undefined entries: silently ignored
172
+ */
173
+ export declare function mergeConfig(...configs: Array<Partial<PlayerConfig> | null | undefined>): PlayerConfig;
174
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import './theme-forja.css';
2
+ //# sourceMappingURL=theme-forja.entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-forja.entry.d.ts","sourceRoot":"","sources":["../../../../../src/core/css/theme-forja.entry.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import './theme-radio.css';
2
+ //# sourceMappingURL=theme-radio.entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-radio.entry.d.ts","sourceRoot":"","sources":["../../../../../src/core/css/theme-radio.entry.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import './theme-snrt.css';
2
+ //# sourceMappingURL=theme-snrt.entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-snrt.entry.d.ts","sourceRoot":"","sources":["../../../../../src/core/css/theme-snrt.entry.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA"}
@@ -0,0 +1,38 @@
1
+ import type { PlayerState } from './types';
2
+ /**
3
+ * EngineStateSync is the abstract base class defining the contract for Phase 2
4
+ * engine bridge implementations (HLS, DASH).
5
+ *
6
+ * Phase 2 HLS and DASH engines extend this class to bridge DOM video events
7
+ * to the PlayerState store. The attach() method receives the PlayerState and
8
+ * an AbortSignal for automatic cleanup — engines register video element
9
+ * event listeners using the signal to ensure zero-leak cleanup on dispose().
10
+ *
11
+ * Usage pattern in Phase 2:
12
+ * class HlsEngineSync extends EngineStateSync {
13
+ * attach(state: PlayerState, signal: AbortSignal): void {
14
+ * video.addEventListener('timeupdate', () => { state.currentTime = video.currentTime }, { signal })
15
+ * }
16
+ * detach(): void {
17
+ * this.driver?.destroy()
18
+ * }
19
+ * }
20
+ */
21
+ export declare abstract class EngineStateSync {
22
+ /**
23
+ * Called by PlayerController.setEngineSync() to bridge engine events to state.
24
+ * Implementations should register all event listeners using { signal } so they
25
+ * are automatically removed when the AbortController is aborted on dispose().
26
+ *
27
+ * @param state - The reactive PlayerState to write engine events into
28
+ * @param signal - AbortSignal tied to the PlayerController's lifecycle
29
+ */
30
+ abstract attach(state: PlayerState, signal: AbortSignal): void;
31
+ /**
32
+ * Called by PlayerController.dispose() or when a new engine replaces this one.
33
+ * Implementations should clean up engine-specific resources (e.g., driver.destroy()).
34
+ * Signal-based event listeners are automatically removed by the AbortController.
35
+ */
36
+ abstract detach(): void;
37
+ }
38
+ //# sourceMappingURL=engine-state-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-state-sync.d.ts","sourceRoot":"","sources":["../../../../src/core/engine-state-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAAsB,eAAe;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,MAAM,IAAI,IAAI;CACxB"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * EventMap defines the typed event names and their payload types.
3
+ * - void events: listener receives no arguments
4
+ * - payload events: listener receives the typed payload
5
+ *
6
+ * This type will be extended as more events are identified in Phase 2/3.
7
+ */
8
+ export interface EventMap {
9
+ 'request-reload': void;
10
+ 'ad-complete': void;
11
+ 'cast-stop': void;
12
+ 'error-fatal': {
13
+ code: string;
14
+ message: string;
15
+ };
16
+ 'cast-start': {
17
+ src: string;
18
+ };
19
+ 'cast-failed': void;
20
+ 'cast-stop-with-position': {
21
+ time: number;
22
+ };
23
+ 'play': void;
24
+ 'pause': void;
25
+ 'seek': {
26
+ time: number;
27
+ };
28
+ 'sync-live': void;
29
+ 'mute-toggle': void;
30
+ 'playlist-next': void;
31
+ 'playlist-prev': void;
32
+ 'settings-select-quality': {
33
+ index: number;
34
+ };
35
+ 'settings-select-audio': {
36
+ index: number;
37
+ };
38
+ 'settings-select-subtitle': {
39
+ index: number;
40
+ };
41
+ 'settings-select-speed': {
42
+ rate: number;
43
+ };
44
+ 'extension-event': {
45
+ zone: string;
46
+ data: unknown;
47
+ };
48
+ 'snapshot-handler-ready': {
49
+ take: (time: number) => void;
50
+ video: HTMLVideoElement;
51
+ };
52
+ }
53
+ type EventListener<T> = T extends void ? () => void : (payload: T) => void;
54
+ type EmitArgs<K extends keyof EventMap> = EventMap[K] extends void ? [event: K] : [event: K, payload: EventMap[K]];
55
+ /**
56
+ * TypedEventBus provides signal-based inter-component communication.
57
+ * It is distinct from PlayerState (reactive values) — the EventBus handles
58
+ * one-shot signals and commands between components.
59
+ *
60
+ * Usage:
61
+ * bus.on('request-reload', () => reload())
62
+ * bus.emit('request-reload')
63
+ * bus.on('error-fatal', (payload) => handleError(payload), { signal: ac.signal })
64
+ */
65
+ export declare class TypedEventBus {
66
+ private readonly listeners;
67
+ constructor();
68
+ /**
69
+ * Register a listener for the given event.
70
+ * Pass an AbortSignal via options to auto-remove the listener when the signal aborts.
71
+ */
72
+ on<K extends keyof EventMap>(event: K, listener: EventListener<EventMap[K]>, options?: {
73
+ signal?: AbortSignal;
74
+ }): void;
75
+ /**
76
+ * Emit an event, calling all registered listeners.
77
+ * Void events require no payload argument; payload events require the payload.
78
+ */
79
+ emit<K extends keyof EventMap>(...args: EmitArgs<K>): void;
80
+ /**
81
+ * Remove all listeners from all events.
82
+ * After calling dispose(), all subsequent emit calls are no-ops.
83
+ */
84
+ dispose(): void;
85
+ }
86
+ export {};
87
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../../src/core/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IAEvB,gBAAgB,EAAE,IAAI,CAAA;IACtB,aAAa,EAAE,IAAI,CAAA;IACnB,WAAW,EAAE,IAAI,CAAA;IACjB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,aAAa,EAAE,IAAI,CAAA;IACnB,yBAAyB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAG3C,MAAM,EAAE,IAAI,CAAA;IACZ,OAAO,EAAE,IAAI,CAAA;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACxB,WAAW,EAAE,IAAI,CAAA;IACjB,aAAa,EAAE,IAAI,CAAA;IACnB,eAAe,EAAE,IAAI,CAAA;IACrB,eAAe,EAAE,IAAI,CAAA;IACrB,yBAAyB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,uBAAuB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,0BAA0B,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,uBAAuB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACzC,iBAAiB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;IAGlD,wBAAwB,EAAE;QAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,gBAAgB,CAAA;KAAE,CAAA;CACpF;AAED,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAA;AAE1E,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,GAC9D,CAAC,KAAK,EAAE,CAAC,CAAC,GACV,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpC;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;;IAM5E;;;OAGG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EACzB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EACpC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,IAAI;IA2BP;;;OAGG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAiB1D;;;OAGG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Finite State Machine for player playback state transitions.
3
+ *
4
+ * The TRANSITIONS map defines all valid state transitions. The Proxy set trap
5
+ * in player-state.ts calls isValidTransition to enforce these rules.
6
+ */
7
+ export type PlaybackState = 'idle' | 'loading' | 'playing' | 'paused' | 'buffering' | 'error' | 'ended';
8
+ /**
9
+ * Maps each state to the set of states it may transition into.
10
+ *
11
+ * Design notes:
12
+ * - idle -> loading: initial load or post-stall reload
13
+ * - loading -> playing | error: stream starts or fails
14
+ * - playing -> paused | buffering | ended | error: normal playback events
15
+ * - paused -> playing | loading | idle: resume or stop
16
+ * - buffering -> playing | paused | idle | error: buffer recovered, user pause, or stall
17
+ * - buffering -> idle is needed for the stall-watchdog recovery path (kick off reload)
18
+ * - buffering -> paused is needed for live stream support (user pauses during buffer)
19
+ * - error -> loading: retry after error
20
+ * - ended -> loading | idle: restart playback or reset
21
+ */
22
+ export declare const TRANSITIONS: Readonly<Record<PlaybackState, ReadonlyArray<PlaybackState>>>;
23
+ /**
24
+ * Returns true if transitioning from `from` to `to` is valid per the FSM.
25
+ */
26
+ export declare function isValidTransition(from: PlaybackState, to: PlaybackState): boolean;
27
+ //# sourceMappingURL=fsm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsm.d.ts","sourceRoot":"","sources":["../../../../src/core/fsm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,GACR,WAAW,GACX,OAAO,GACP,OAAO,CAAA;AAEX;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAQrF,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAEjF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Lightweight i18n module replacing Vue i18n.
3
+ *
4
+ * Translations are keyed using dot-notation (e.g., 'error.start').
5
+ * A KEY_MAP provides backward compatibility with the old full-sentence keys
6
+ * used in component/translations/ for Phase 2/3 compatibility.
7
+ */
8
+ type LocaleMap = Record<string, string>;
9
+ type TranslationMap = Record<string, LocaleMap>;
10
+ /**
11
+ * KEY_MAP maps old full-sentence keys to new dot-notation keys.
12
+ * Provides Phase 2/3 backward compatibility with existing translation lookups.
13
+ */
14
+ export declare const KEY_MAP: Record<string, string>;
15
+ /**
16
+ * I18n class provides translation and interpolation for the player UI.
17
+ * Designed to grow as skin components are ported in Phase 3.
18
+ */
19
+ export declare class I18n {
20
+ private currentLocale;
21
+ private readonly translations;
22
+ constructor(locale?: string);
23
+ /**
24
+ * Add or extend translations at runtime.
25
+ * Useful for skin components adding their own translation keys in Phase 3.
26
+ */
27
+ addTranslations(entries: TranslationMap): void;
28
+ /**
29
+ * Look up a translation key in the current locale.
30
+ * Falls back to English if not found in current locale.
31
+ * Falls back to the key string itself if not found in English either.
32
+ * Interpolates {variable} placeholders with provided values.
33
+ */
34
+ t(key: string, vars?: Record<string, string | number>): string;
35
+ /**
36
+ * Replace {varName} placeholders in a template string with provided values.
37
+ * Unmatched placeholders are left unchanged.
38
+ */
39
+ interpolate(template: string, vars: Record<string, string | number>): string;
40
+ /**
41
+ * Change the active locale for subsequent t() calls.
42
+ * Falls back to 'en' for unsupported locales.
43
+ */
44
+ setLocale(locale: string): void;
45
+ /**
46
+ * Return the current active locale code.
47
+ */
48
+ getLocale(): string;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/core/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AACvC,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAuC/C;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE1C,CAAA;AAoBD;;;GAGG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,MAAM,CAAC,EAAE,MAAM;IAK3B;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAM9C;;;;;OAKG;IACH,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM;IAqB9D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM;IAO5E;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * eb-player core public API barrel export.
3
+ *
4
+ * This file is the entry point for the Rollup build (rollup.config.ts).
5
+ * Import from this file to access all public core module exports.
6
+ *
7
+ * CSS imports: base.css, theme files (auto-discovered via virtual:theme-css),
8
+ * and skin.css are imported here so Rollup's postcss plugin extracts them.
9
+ */
10
+ import './css/base.css';
11
+ import 'virtual:theme-css';
12
+ import '../skin/css/skin.css';
13
+ export { PlaybackState, TRANSITIONS, isValidTransition } from './fsm';
14
+ export type { StateMap, Listener, PlayerState } from './types';
15
+ export { createPlayerState } from './player-state';
16
+ export { TypedEventBus } from './event-bus';
17
+ export type { EventMap } from './event-bus';
18
+ export { mergeConfig, DEFAULT_CONFIG } from './config';
19
+ export type { PlayerConfig, SkinColors, EngineSettings } from './config';
20
+ export { I18n } from './i18n';
21
+ export { PlayerController } from './lifecycle';
22
+ export { EngineStateSync } from './engine-state-sync';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,gBAAgB,CAAA;AACvB,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sBAAsB,CAAA;AAG7B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGrE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG3C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGxE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAG7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA"}