@therealtinhtute/baroiplayer 1.0.5 → 1.0.7

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 (611) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/package.json +1 -1
  3. package/dist/src/components/media-player-error.tsx +2 -2
  4. package/dist/src/components/media-player-fullscreen.tsx +2 -2
  5. package/dist/src/components/media-player-play.tsx +2 -2
  6. package/dist/src/components/media-player-seek.tsx +1 -1
  7. package/dist/src/components/media-player-tooltip.tsx +1 -1
  8. package/dist/src/components/media-player-volume.tsx +3 -3
  9. package/dist/src/components/react-player-wrapper.tsx +5 -5
  10. package/dist/src/hooks/use-touch-gestures.ts +1 -1
  11. package/package.json +1 -1
  12. package/src/components/media-player-error.tsx +2 -2
  13. package/src/components/media-player-fullscreen.tsx +2 -2
  14. package/src/components/media-player-play.tsx +2 -2
  15. package/src/components/media-player-seek.tsx +1 -1
  16. package/src/components/media-player-tooltip.tsx +1 -1
  17. package/src/components/media-player-volume.tsx +3 -3
  18. package/src/components/react-player-wrapper.tsx +5 -5
  19. package/src/hooks/use-touch-gestures.ts +1 -1
  20. package/dist/context/media.js +0 -2
  21. package/dist/context/media.js.map +0 -1
  22. package/dist/context/media.mjs +0 -15
  23. package/dist/context/media.mjs.map +0 -1
  24. package/dist/context/store.js +0 -2
  25. package/dist/context/store.js.map +0 -1
  26. package/dist/context/store.mjs +0 -5
  27. package/dist/context/store.mjs.map +0 -1
  28. package/dist/context-Af84FynT.js +0 -1179
  29. package/dist/context-Af84FynT.js.map +0 -1
  30. package/dist/context-CwZnPdz0.cjs +0 -23
  31. package/dist/context-CwZnPdz0.cjs.map +0 -1
  32. package/dist/core-events-B5W_j8yU.js +0 -480
  33. package/dist/core-events-B5W_j8yU.js.map +0 -1
  34. package/dist/core-events-CN0-Vhhq.cjs +0 -2
  35. package/dist/core-events-CN0-Vhhq.cjs.map +0 -1
  36. package/dist/core-plugins-Bq9KLany.js +0 -696
  37. package/dist/core-plugins-Bq9KLany.js.map +0 -1
  38. package/dist/core-plugins-CPDSHMiQ.cjs +0 -2
  39. package/dist/core-plugins-CPDSHMiQ.cjs.map +0 -1
  40. package/dist/core.js +0 -37
  41. package/dist/core.js.map +0 -1
  42. package/dist/core.mjs +0 -1217
  43. package/dist/core.mjs.map +0 -1
  44. package/dist/enhanced-components-CXnYiOt6.cjs +0 -2
  45. package/dist/enhanced-components-CXnYiOt6.cjs.map +0 -1
  46. package/dist/enhanced-components-Da0TSvKe.js +0 -1073
  47. package/dist/enhanced-components-Da0TSvKe.js.map +0 -1
  48. package/dist/hooks-BCMilGRf.cjs +0 -4
  49. package/dist/hooks-BCMilGRf.cjs.map +0 -1
  50. package/dist/hooks-BPtHV1ZT.js +0 -2042
  51. package/dist/hooks-BPtHV1ZT.js.map +0 -1
  52. package/dist/index.js.map +0 -1
  53. package/dist/index.mjs.map +0 -1
  54. package/dist/minimal-components-BHJMuaL7.cjs +0 -2
  55. package/dist/minimal-components-BHJMuaL7.cjs.map +0 -1
  56. package/dist/minimal-components-BmqRefl1.js +0 -2002
  57. package/dist/minimal-components-BmqRefl1.js.map +0 -1
  58. package/dist/mona-loading.gif +0 -0
  59. package/dist/performance-monitor--rzKTlbj.js +0 -302
  60. package/dist/performance-monitor--rzKTlbj.js.map +0 -1
  61. package/dist/performance-monitor-cjIvZE2D.cjs +0 -2
  62. package/dist/performance-monitor-cjIvZE2D.cjs.map +0 -1
  63. package/dist/src/adapters/videojs-adapter.d.ts.map +0 -1
  64. package/dist/src/adapters/videojs-adapter.js +0 -350
  65. package/dist/src/assets/mona-loading.gif +0 -0
  66. package/dist/src/components/AnimateLoading.d.ts.map +0 -1
  67. package/dist/src/components/AnimateLoading.js +0 -41
  68. package/dist/src/components/LoadingState.d.ts.map +0 -1
  69. package/dist/src/components/LoadingState.js +0 -111
  70. package/dist/src/components/accessibility/keyboard-help-overlay.d.ts.map +0 -1
  71. package/dist/src/components/accessibility/keyboard-help-overlay.js +0 -90
  72. package/dist/src/components/audio-player.d.ts.map +0 -1
  73. package/dist/src/components/audio-player.js +0 -31
  74. package/dist/src/components/basic/index.d.ts.map +0 -1
  75. package/dist/src/components/basic/index.js +0 -29
  76. package/dist/src/components/enhanced/advanced-features.d.ts.map +0 -1
  77. package/dist/src/components/enhanced/advanced-features.js +0 -64
  78. package/dist/src/components/enhanced/debug-panel.d.ts.map +0 -1
  79. package/dist/src/components/enhanced/debug-panel.js +0 -94
  80. package/dist/src/components/enhanced/enhanced-controls.d.ts.map +0 -1
  81. package/dist/src/components/enhanced/enhanced-controls.js +0 -233
  82. package/dist/src/components/enhanced/enhanced-media-player.d.ts.map +0 -1
  83. package/dist/src/components/enhanced/enhanced-media-player.js +0 -316
  84. package/dist/src/components/enhanced/error-handling.d.ts.map +0 -1
  85. package/dist/src/components/enhanced/error-handling.js +0 -153
  86. package/dist/src/components/enhanced/index.d.ts.map +0 -1
  87. package/dist/src/components/enhanced/index.js +0 -10
  88. package/dist/src/components/enhanced/media-player-enhanced.d.ts.map +0 -1
  89. package/dist/src/components/enhanced/media-player-enhanced.js +0 -250
  90. package/dist/src/components/examples/basic-video-player.d.ts.map +0 -1
  91. package/dist/src/components/examples/basic-video-player.js +0 -16
  92. package/dist/src/components/examples/custom-controls-example.d.ts.map +0 -1
  93. package/dist/src/components/examples/custom-controls-example.js +0 -12
  94. package/dist/src/components/examples/enhanced-controls-example.d.ts.map +0 -1
  95. package/dist/src/components/examples/enhanced-controls-example.js +0 -18
  96. package/dist/src/components/examples/enhanced-media-player-example.d.ts.map +0 -1
  97. package/dist/src/components/examples/enhanced-media-player-example.js +0 -13
  98. package/dist/src/components/examples/loading-states-demo.d.ts.map +0 -1
  99. package/dist/src/components/examples/loading-states-demo.js +0 -41
  100. package/dist/src/components/examples/react-19-demo.d.ts.map +0 -1
  101. package/dist/src/components/examples/react-19-demo.js +0 -104
  102. package/dist/src/components/examples/volume-orientation-demo.d.ts.map +0 -1
  103. package/dist/src/components/examples/volume-orientation-demo.js +0 -31
  104. package/dist/src/components/icon-demo.d.ts.map +0 -1
  105. package/dist/src/components/icon-demo.js +0 -16
  106. package/dist/src/components/icons/index.d.ts.map +0 -1
  107. package/dist/src/components/icons/index.js +0 -59
  108. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +0 -1
  109. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.js +0 -3
  110. package/dist/src/components/icons/svg-icons/ArrowRightIcon.d.ts.map +0 -1
  111. package/dist/src/components/icons/svg-icons/ArrowRightIcon.js +0 -3
  112. package/dist/src/components/icons/svg-icons/AudioIcon.d.ts.map +0 -1
  113. package/dist/src/components/icons/svg-icons/AudioIcon.js +0 -4
  114. package/dist/src/components/icons/svg-icons/BackwardIcon.d.ts.map +0 -1
  115. package/dist/src/components/icons/svg-icons/BackwardIcon.js +0 -3
  116. package/dist/src/components/icons/svg-icons/CameraIcon.d.ts.map +0 -1
  117. package/dist/src/components/icons/svg-icons/CameraIcon.js +0 -4
  118. package/dist/src/components/icons/svg-icons/CheckIcon.d.ts.map +0 -1
  119. package/dist/src/components/icons/svg-icons/CheckIcon.js +0 -4
  120. package/dist/src/components/icons/svg-icons/EnablePiPIcon.d.ts.map +0 -1
  121. package/dist/src/components/icons/svg-icons/EnablePiPIcon.js +0 -5
  122. package/dist/src/components/icons/svg-icons/ForwardIcon.d.ts.map +0 -1
  123. package/dist/src/components/icons/svg-icons/ForwardIcon.js +0 -3
  124. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +0 -1
  125. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.js +0 -3
  126. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +0 -1
  127. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.js +0 -3
  128. package/dist/src/components/icons/svg-icons/LoadingIcon.d.ts.map +0 -1
  129. package/dist/src/components/icons/svg-icons/LoadingIcon.js +0 -3
  130. package/dist/src/components/icons/svg-icons/PauseIcon.d.ts.map +0 -1
  131. package/dist/src/components/icons/svg-icons/PauseIcon.js +0 -3
  132. package/dist/src/components/icons/svg-icons/PlayIcon.d.ts.map +0 -1
  133. package/dist/src/components/icons/svg-icons/PlayIcon.js +0 -3
  134. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +0 -1
  135. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.js +0 -3
  136. package/dist/src/components/icons/svg-icons/QualityIcon.d.ts.map +0 -1
  137. package/dist/src/components/icons/svg-icons/QualityIcon.js +0 -3
  138. package/dist/src/components/icons/svg-icons/SettingsIcon.d.ts.map +0 -1
  139. package/dist/src/components/icons/svg-icons/SettingsIcon.js +0 -3
  140. package/dist/src/components/icons/svg-icons/SliderIcon.d.ts.map +0 -1
  141. package/dist/src/components/icons/svg-icons/SliderIcon.js +0 -3
  142. package/dist/src/components/icons/svg-icons/SubtitleIcon.d.ts.map +0 -1
  143. package/dist/src/components/icons/svg-icons/SubtitleIcon.js +0 -3
  144. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +0 -1
  145. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.js +0 -3
  146. package/dist/src/components/icons/svg-icons/UnPiPIcon.d.ts.map +0 -1
  147. package/dist/src/components/icons/svg-icons/UnPiPIcon.js +0 -5
  148. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +0 -1
  149. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.js +0 -3
  150. package/dist/src/components/icons/svg-icons/VolumeOneIcon.d.ts.map +0 -1
  151. package/dist/src/components/icons/svg-icons/VolumeOneIcon.js +0 -3
  152. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +0 -1
  153. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.js +0 -3
  154. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +0 -1
  155. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.js +0 -3
  156. package/dist/src/components/legacy.d.ts.map +0 -1
  157. package/dist/src/components/legacy.js +0 -52
  158. package/dist/src/components/media-metadata-display.d.ts.map +0 -1
  159. package/dist/src/components/media-metadata-display.js +0 -20
  160. package/dist/src/components/media-player-audio.d.ts.map +0 -1
  161. package/dist/src/components/media-player-audio.js +0 -18
  162. package/dist/src/components/media-player-controls.d.ts.map +0 -1
  163. package/dist/src/components/media-player-controls.js +0 -150
  164. package/dist/src/components/media-player-error.d.ts.map +0 -1
  165. package/dist/src/components/media-player-error.js +0 -85
  166. package/dist/src/components/media-player-fullscreen.d.ts.map +0 -1
  167. package/dist/src/components/media-player-fullscreen.js +0 -68
  168. package/dist/src/components/media-player-hls.d.ts.map +0 -1
  169. package/dist/src/components/media-player-hls.js +0 -20
  170. package/dist/src/components/media-player-loading.d.ts.map +0 -1
  171. package/dist/src/components/media-player-loading.js +0 -53
  172. package/dist/src/components/media-player-play.d.ts.map +0 -1
  173. package/dist/src/components/media-player-play.js +0 -44
  174. package/dist/src/components/media-player-root.d.ts.map +0 -1
  175. package/dist/src/components/media-player-root.js +0 -243
  176. package/dist/src/components/media-player-seek.d.ts.map +0 -1
  177. package/dist/src/components/media-player-seek.js +0 -92
  178. package/dist/src/components/media-player-time.d.ts.map +0 -1
  179. package/dist/src/components/media-player-time.js +0 -57
  180. package/dist/src/components/media-player-tooltip.d.ts.map +0 -1
  181. package/dist/src/components/media-player-tooltip.js +0 -14
  182. package/dist/src/components/media-player-video.d.ts.map +0 -1
  183. package/dist/src/components/media-player-video.js +0 -18
  184. package/dist/src/components/media-player-volume.d.ts.map +0 -1
  185. package/dist/src/components/media-player-volume.js +0 -88
  186. package/dist/src/components/media-player.d.ts.map +0 -1
  187. package/dist/src/components/media-player.js +0 -67
  188. package/dist/src/components/media-suspense.d.ts.map +0 -1
  189. package/dist/src/components/media-suspense.js +0 -173
  190. package/dist/src/components/player-settings-form.d.ts.map +0 -1
  191. package/dist/src/components/player-settings-form.js +0 -46
  192. package/dist/src/components/react-player-wrapper.d.ts.map +0 -1
  193. package/dist/src/components/react-player-wrapper.js +0 -163
  194. package/dist/src/components/simple-video-player.d.ts.map +0 -1
  195. package/dist/src/components/simple-video-player.js +0 -41
  196. package/dist/src/components/ui/enhanced-seek-bar.d.ts.map +0 -1
  197. package/dist/src/components/ui/enhanced-seek-bar.js +0 -112
  198. package/dist/src/components/ui/fullscreen-button.d.ts.map +0 -1
  199. package/dist/src/components/ui/fullscreen-button.js +0 -21
  200. package/dist/src/components/ui/media-resource-preloader.d.ts.map +0 -1
  201. package/dist/src/components/ui/media-resource-preloader.js +0 -295
  202. package/dist/src/components/ui/play-button.d.ts.map +0 -1
  203. package/dist/src/components/ui/play-button.js +0 -26
  204. package/dist/src/components/ui/seek-bar.d.ts.map +0 -1
  205. package/dist/src/components/ui/seek-bar.js +0 -54
  206. package/dist/src/components/ui/time-display.d.ts.map +0 -1
  207. package/dist/src/components/ui/time-display.js +0 -18
  208. package/dist/src/components/ui/volume-control.d.ts.map +0 -1
  209. package/dist/src/components/ui/volume-control.js +0 -71
  210. package/dist/src/components/unified/base-media-player.d.ts.map +0 -1
  211. package/dist/src/components/unified/base-media-player.js +0 -104
  212. package/dist/src/components/unified/media-player.d.ts.map +0 -1
  213. package/dist/src/components/unified/media-player.js +0 -41
  214. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts.map +0 -1
  215. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.js +0 -322
  216. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts.map +0 -1
  217. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +0 -280
  218. package/dist/src/components/variants/minimal/MinimalControls.d.ts.map +0 -1
  219. package/dist/src/components/variants/minimal/MinimalControls.js +0 -19
  220. package/dist/src/components/variants/minimal/MinimalLoading.d.ts.map +0 -1
  221. package/dist/src/components/variants/minimal/MinimalLoading.js +0 -6
  222. package/dist/src/components/variants/minimal/MinimalMediaPlayer.d.ts.map +0 -1
  223. package/dist/src/components/variants/minimal/MinimalMediaPlayer.js +0 -135
  224. package/dist/src/components/variants/minimal/MinimalOverlay.d.ts.map +0 -1
  225. package/dist/src/components/variants/minimal/MinimalOverlay.js +0 -15
  226. package/dist/src/components/variants/minimal/MinimalPlayButton.d.ts.map +0 -1
  227. package/dist/src/components/variants/minimal/MinimalPlayButton.js +0 -29
  228. package/dist/src/components/variants/minimal/MinimalSeekBar.d.ts.map +0 -1
  229. package/dist/src/components/variants/minimal/MinimalSeekBar.js +0 -73
  230. package/dist/src/components/variants/minimal/MinimalVolumeControl.d.ts.map +0 -1
  231. package/dist/src/components/variants/minimal/MinimalVolumeControl.js +0 -29
  232. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.d.ts.map +0 -1
  233. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.js +0 -51
  234. package/dist/src/components/variants/minimal/components/CenterPlayButton.d.ts.map +0 -1
  235. package/dist/src/components/variants/minimal/components/CenterPlayButton.js +0 -8
  236. package/dist/src/components/variants/minimal/components/ControlBar.d.ts.map +0 -1
  237. package/dist/src/components/variants/minimal/components/ControlBar.js +0 -10
  238. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts.map +0 -1
  239. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.js +0 -68
  240. package/dist/src/components/variants/minimal/components/PlaybackControls.d.ts.map +0 -1
  241. package/dist/src/components/variants/minimal/components/PlaybackControls.js +0 -9
  242. package/dist/src/components/variants/minimal/components/RightControls.d.ts.map +0 -1
  243. package/dist/src/components/variants/minimal/components/RightControls.js +0 -40
  244. package/dist/src/components/variants/minimal/components/SeekBar.d.ts.map +0 -1
  245. package/dist/src/components/variants/minimal/components/SeekBar.js +0 -43
  246. package/dist/src/components/variants/minimal/components/SettingsDropdown.d.ts.map +0 -1
  247. package/dist/src/components/variants/minimal/components/SettingsDropdown.js +0 -18
  248. package/dist/src/components/variants/minimal/components/SubtitleDisplay.d.ts.map +0 -1
  249. package/dist/src/components/variants/minimal/components/SubtitleDisplay.js +0 -6
  250. package/dist/src/components/variants/minimal/components/TimeDisplay.d.ts.map +0 -1
  251. package/dist/src/components/variants/minimal/components/TimeDisplay.js +0 -5
  252. package/dist/src/components/variants/minimal/components/VideoElement.d.ts.map +0 -1
  253. package/dist/src/components/variants/minimal/components/VideoElement.js +0 -4
  254. package/dist/src/components/variants/minimal/components/VolumeControl.d.ts.map +0 -1
  255. package/dist/src/components/variants/minimal/components/VolumeControl.js +0 -99
  256. package/dist/src/components/variants/minimal/index.d.ts.map +0 -1
  257. package/dist/src/components/variants/minimal/index.js +0 -8
  258. package/dist/src/components/video-player.d.ts.map +0 -1
  259. package/dist/src/components/video-player.js +0 -38
  260. package/dist/src/context/error-handling.d.ts.map +0 -1
  261. package/dist/src/context/error-handling.js +0 -300
  262. package/dist/src/context/media-context.d.ts.map +0 -1
  263. package/dist/src/context/media-context.js +0 -121
  264. package/dist/src/context/media-provider.d.ts.map +0 -1
  265. package/dist/src/context/media-provider.js +0 -164
  266. package/dist/src/context/media-store.d.ts.map +0 -1
  267. package/dist/src/context/media-store.js +0 -273
  268. package/dist/src/context/persistence.d.ts.map +0 -1
  269. package/dist/src/context/persistence.js +0 -356
  270. package/dist/src/core/events/event-system.d.ts.map +0 -1
  271. package/dist/src/core/events/event-system.js +0 -288
  272. package/dist/src/core/events/hooks.d.ts.map +0 -1
  273. package/dist/src/core/events/hooks.js +0 -198
  274. package/dist/src/core/events/index.d.ts.map +0 -1
  275. package/dist/src/core/events/index.js +0 -7
  276. package/dist/src/core/events/middleware.d.ts.map +0 -1
  277. package/dist/src/core/events/middleware.js +0 -219
  278. package/dist/src/core/index.d.ts.map +0 -1
  279. package/dist/src/core/index.js +0 -15
  280. package/dist/src/core/optimization/bundle-optimizer.d.ts.map +0 -1
  281. package/dist/src/core/optimization/bundle-optimizer.js +0 -217
  282. package/dist/src/core/performance/cicd.d.ts.map +0 -1
  283. package/dist/src/core/performance/cicd.js +0 -83
  284. package/dist/src/core/performance/index.d.ts.map +0 -1
  285. package/dist/src/core/performance/index.js +0 -14
  286. package/dist/src/core/performance/media-loading-optimizer.d.ts.map +0 -1
  287. package/dist/src/core/performance/media-loading-optimizer.js +0 -404
  288. package/dist/src/core/performance/performance-budgets.d.ts.map +0 -1
  289. package/dist/src/core/performance/performance-budgets.js +0 -326
  290. package/dist/src/core/performance/performance-monitor.d.ts.map +0 -1
  291. package/dist/src/core/performance/performance-monitor.js +0 -297
  292. package/dist/src/core/performance/performance-testing.d.ts.map +0 -1
  293. package/dist/src/core/performance/performance-testing.js +0 -314
  294. package/dist/src/core/plugins/base-plugin.d.ts.map +0 -1
  295. package/dist/src/core/plugins/base-plugin.js +0 -151
  296. package/dist/src/core/plugins/enhanced-plugin-system.d.ts.map +0 -1
  297. package/dist/src/core/plugins/enhanced-plugin-system.js +0 -305
  298. package/dist/src/core/plugins/examples/analytics-plugin.d.ts.map +0 -1
  299. package/dist/src/core/plugins/examples/analytics-plugin.js +0 -191
  300. package/dist/src/core/plugins/index.d.ts.map +0 -1
  301. package/dist/src/core/plugins/index.js +0 -9
  302. package/dist/src/core/plugins/registry.d.ts.map +0 -1
  303. package/dist/src/core/plugins/registry.js +0 -261
  304. package/dist/src/core/plugins/types.d.ts.map +0 -1
  305. package/dist/src/core/plugins/types.js +0 -31
  306. package/dist/src/core/plugins/utils.d.ts.map +0 -1
  307. package/dist/src/core/plugins/utils.js +0 -274
  308. package/dist/src/core/progressive-loading.d.ts.map +0 -1
  309. package/dist/src/core/progressive-loading.js +0 -239
  310. package/dist/src/core/providers/enhanced-hls-provider.d.ts.map +0 -1
  311. package/dist/src/core/providers/enhanced-hls-provider.js +0 -273
  312. package/dist/src/core/providers/service-provider.d.ts.map +0 -1
  313. package/dist/src/core/providers/service-provider.js +0 -105
  314. package/dist/src/core/utils.d.ts.map +0 -1
  315. package/dist/src/core/utils.js +0 -21
  316. package/dist/src/features/media-session/media-session-manager.d.ts.map +0 -1
  317. package/dist/src/features/media-session/media-session-manager.js +0 -331
  318. package/dist/src/features/picture-in-picture/pip-manager.d.ts.map +0 -1
  319. package/dist/src/features/picture-in-picture/pip-manager.js +0 -353
  320. package/dist/src/features/playlist/playlist-manager.d.ts.map +0 -1
  321. package/dist/src/features/playlist/playlist-manager.js +0 -475
  322. package/dist/src/features/subtitles/subtitle-manager.d.ts.map +0 -1
  323. package/dist/src/features/subtitles/subtitle-manager.js +0 -335
  324. package/dist/src/features/subtitles/subtitle-parser.d.ts.map +0 -1
  325. package/dist/src/features/subtitles/subtitle-parser.js +0 -217
  326. package/dist/src/features/thumbnails/thumbnail-generator.d.ts.map +0 -1
  327. package/dist/src/features/thumbnails/thumbnail-generator.js +0 -388
  328. package/dist/src/hooks/accessibility/index.d.ts.map +0 -1
  329. package/dist/src/hooks/accessibility/index.js +0 -4
  330. package/dist/src/hooks/accessibility/use-accessibility-preferences.d.ts.map +0 -1
  331. package/dist/src/hooks/accessibility/use-accessibility-preferences.js +0 -156
  332. package/dist/src/hooks/accessibility/use-focus-management.d.ts.map +0 -1
  333. package/dist/src/hooks/accessibility/use-focus-management.js +0 -142
  334. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.d.ts.map +0 -1
  335. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.js +0 -101
  336. package/dist/src/hooks/accessibility/use-screen-reader.d.ts.map +0 -1
  337. package/dist/src/hooks/accessibility/use-screen-reader.js +0 -148
  338. package/dist/src/hooks/core/index.d.ts.map +0 -1
  339. package/dist/src/hooks/core/index.js +0 -19
  340. package/dist/src/hooks/legacy.d.ts.map +0 -1
  341. package/dist/src/hooks/legacy.js +0 -17
  342. package/dist/src/hooks/use-enhanced-media-player.d.ts.map +0 -1
  343. package/dist/src/hooks/use-enhanced-media-player.js +0 -395
  344. package/dist/src/hooks/use-intelligent-preloading.d.ts.map +0 -1
  345. package/dist/src/hooks/use-intelligent-preloading.js +0 -258
  346. package/dist/src/hooks/use-keyboard-controls.d.ts.map +0 -1
  347. package/dist/src/hooks/use-keyboard-controls.js +0 -83
  348. package/dist/src/hooks/use-media-actions.d.ts.map +0 -1
  349. package/dist/src/hooks/use-media-actions.js +0 -121
  350. package/dist/src/hooks/use-media-metadata.d.ts.map +0 -1
  351. package/dist/src/hooks/use-media-metadata.js +0 -74
  352. package/dist/src/hooks/use-media-optimistic.d.ts.map +0 -1
  353. package/dist/src/hooks/use-media-optimistic.js +0 -205
  354. package/dist/src/hooks/use-media-player.d.ts.map +0 -1
  355. package/dist/src/hooks/use-media-player.js +0 -251
  356. package/dist/src/hooks/use-media-state.d.ts.map +0 -1
  357. package/dist/src/hooks/use-media-state.js +0 -162
  358. package/dist/src/hooks/use-memory-optimization.d.ts.map +0 -1
  359. package/dist/src/hooks/use-memory-optimization.js +0 -288
  360. package/dist/src/hooks/use-optimistic-controls.d.ts.map +0 -1
  361. package/dist/src/hooks/use-optimistic-controls.js +0 -60
  362. package/dist/src/hooks/use-optimized-media.d.ts.map +0 -1
  363. package/dist/src/hooks/use-optimized-media.js +0 -211
  364. package/dist/src/hooks/use-touch-gestures.d.ts.map +0 -1
  365. package/dist/src/hooks/use-touch-gestures.js +0 -289
  366. package/dist/src/hooks/useEnhancedSubtitles.d.ts.map +0 -1
  367. package/dist/src/hooks/useEnhancedSubtitles.js +0 -205
  368. package/dist/src/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  369. package/dist/src/hooks/useKeyboardShortcuts.js +0 -59
  370. package/dist/src/hooks/useMediaControls.d.ts.map +0 -1
  371. package/dist/src/hooks/useMediaControls.js +0 -44
  372. package/dist/src/hooks/useScreenshot.d.ts.map +0 -1
  373. package/dist/src/hooks/useScreenshot.js +0 -56
  374. package/dist/src/hooks/useSubtitles.d.ts.map +0 -1
  375. package/dist/src/hooks/useSubtitles.js +0 -73
  376. package/dist/src/hooks/useVideoPlayer.d.ts.map +0 -1
  377. package/dist/src/hooks/useVideoPlayer.js +0 -184
  378. package/dist/src/icons/components/FullscreenIcon.d.ts.map +0 -1
  379. package/dist/src/icons/components/FullscreenIcon.js +0 -11
  380. package/dist/src/icons/components/SettingsIcon.d.ts.map +0 -1
  381. package/dist/src/icons/components/SettingsIcon.js +0 -11
  382. package/dist/src/icons/components/animated/LoadingIcon.d.ts.map +0 -1
  383. package/dist/src/icons/components/animated/LoadingIcon.js +0 -11
  384. package/dist/src/icons/components/animated/PlayPauseIcon.d.ts.map +0 -1
  385. package/dist/src/icons/components/animated/PlayPauseIcon.js +0 -9
  386. package/dist/src/icons/components/media/PauseIcon.d.ts.map +0 -1
  387. package/dist/src/icons/components/media/PauseIcon.js +0 -12
  388. package/dist/src/icons/components/media/PlayIcon.d.ts.map +0 -1
  389. package/dist/src/icons/components/media/PlayIcon.js +0 -12
  390. package/dist/src/icons/components/volume/VolumeIcon.d.ts.map +0 -1
  391. package/dist/src/icons/components/volume/VolumeIcon.js +0 -11
  392. package/dist/src/icons/components/volume/VolumeOffIcon.d.ts.map +0 -1
  393. package/dist/src/icons/components/volume/VolumeOffIcon.js +0 -11
  394. package/dist/src/icons/index.d.ts.map +0 -1
  395. package/dist/src/icons/index.js +0 -45
  396. package/dist/src/icons/provider.d.ts.map +0 -1
  397. package/dist/src/icons/provider.js +0 -37
  398. package/dist/src/icons/types.d.ts.map +0 -1
  399. package/dist/src/icons/types.js +0 -1
  400. package/dist/src/index-enhanced.d.ts.map +0 -1
  401. package/dist/src/index-enhanced.js +0 -16
  402. package/dist/src/index-legacy.d.ts.map +0 -1
  403. package/dist/src/index-legacy.js +0 -97
  404. package/dist/src/index.d.ts.map +0 -1
  405. package/dist/src/index.js +0 -90
  406. package/dist/src/index.minimal.d.ts.map +0 -1
  407. package/dist/src/index.minimal.js +0 -3
  408. package/dist/src/lib/deprecation.d.ts.map +0 -1
  409. package/dist/src/lib/deprecation.js +0 -31
  410. package/dist/src/lib/format-time.d.ts.map +0 -1
  411. package/dist/src/lib/format-time.js +0 -32
  412. package/dist/src/lib/index.d.ts.map +0 -1
  413. package/dist/src/lib/index.js +0 -3
  414. package/dist/src/lib/utils.d.ts.map +0 -1
  415. package/dist/src/lib/utils.js +0 -5
  416. package/dist/src/test/setup.d.ts.map +0 -1
  417. package/dist/src/test/setup.js +0 -65
  418. package/dist/src/types/events.d.ts.map +0 -1
  419. package/dist/src/types/events.js +0 -2
  420. package/dist/src/types/formats.d.ts.map +0 -1
  421. package/dist/src/types/formats.js +0 -63
  422. package/dist/src/types/index.d.ts.map +0 -1
  423. package/dist/src/types/index.js +0 -4
  424. package/dist/utils-Db13763z.cjs +0 -9
  425. package/dist/utils-Db13763z.cjs.map +0 -1
  426. package/dist/utils-nTO4AnHo.js +0 -2809
  427. package/dist/utils-nTO4AnHo.js.map +0 -1
  428. package/dist/utils.js +0 -2
  429. package/dist/utils.js.map +0 -1
  430. package/dist/utils.mjs +0 -7
  431. package/dist/utils.mjs.map +0 -1
  432. package/src/adapters/videojs-adapter.js +0 -350
  433. package/src/components/AnimateLoading.js +0 -41
  434. package/src/components/LoadingState.js +0 -111
  435. package/src/components/accessibility/keyboard-help-overlay.js +0 -90
  436. package/src/components/audio-player.js +0 -31
  437. package/src/components/basic/index.js +0 -29
  438. package/src/components/enhanced/advanced-features.js +0 -64
  439. package/src/components/enhanced/debug-panel.js +0 -94
  440. package/src/components/enhanced/enhanced-controls.js +0 -233
  441. package/src/components/enhanced/enhanced-media-player.js +0 -316
  442. package/src/components/enhanced/error-handling.js +0 -153
  443. package/src/components/enhanced/index.js +0 -10
  444. package/src/components/enhanced/media-player-enhanced.js +0 -250
  445. package/src/components/examples/basic-video-player.js +0 -16
  446. package/src/components/examples/custom-controls-example.js +0 -12
  447. package/src/components/examples/enhanced-controls-example.js +0 -18
  448. package/src/components/examples/enhanced-media-player-example.js +0 -13
  449. package/src/components/examples/loading-states-demo.js +0 -41
  450. package/src/components/examples/react-19-demo.js +0 -104
  451. package/src/components/examples/volume-orientation-demo.js +0 -31
  452. package/src/components/icon-demo.js +0 -16
  453. package/src/components/icons/index.js +0 -59
  454. package/src/components/icons/svg-icons/ArrowLeftIcon.js +0 -3
  455. package/src/components/icons/svg-icons/ArrowRightIcon.js +0 -3
  456. package/src/components/icons/svg-icons/AudioIcon.js +0 -4
  457. package/src/components/icons/svg-icons/BackwardIcon.js +0 -3
  458. package/src/components/icons/svg-icons/CameraIcon.js +0 -4
  459. package/src/components/icons/svg-icons/CheckIcon.js +0 -4
  460. package/src/components/icons/svg-icons/EnablePiPIcon.js +0 -5
  461. package/src/components/icons/svg-icons/ForwardIcon.js +0 -3
  462. package/src/components/icons/svg-icons/FullscreenEnterIcon.js +0 -3
  463. package/src/components/icons/svg-icons/FullscreenExitIcon.js +0 -3
  464. package/src/components/icons/svg-icons/LoadingIcon.js +0 -3
  465. package/src/components/icons/svg-icons/PauseIcon.js +0 -3
  466. package/src/components/icons/svg-icons/PlayIcon.js +0 -3
  467. package/src/components/icons/svg-icons/PlaybackSpeedIcon.js +0 -3
  468. package/src/components/icons/svg-icons/QualityIcon.js +0 -3
  469. package/src/components/icons/svg-icons/SettingsIcon.js +0 -3
  470. package/src/components/icons/svg-icons/SliderIcon.js +0 -3
  471. package/src/components/icons/svg-icons/SubtitleIcon.js +0 -3
  472. package/src/components/icons/svg-icons/SubtitleOffIcon.js +0 -3
  473. package/src/components/icons/svg-icons/UnPiPIcon.js +0 -5
  474. package/src/components/icons/svg-icons/VolumeMutedIcon.js +0 -3
  475. package/src/components/icons/svg-icons/VolumeOneIcon.js +0 -3
  476. package/src/components/icons/svg-icons/VolumeThreeIcon.js +0 -3
  477. package/src/components/icons/svg-icons/VolumeTwoIcon.js +0 -3
  478. package/src/components/legacy.js +0 -52
  479. package/src/components/media-metadata-display.js +0 -20
  480. package/src/components/media-player-audio.js +0 -18
  481. package/src/components/media-player-controls.js +0 -150
  482. package/src/components/media-player-error.js +0 -85
  483. package/src/components/media-player-fullscreen.js +0 -68
  484. package/src/components/media-player-hls.js +0 -20
  485. package/src/components/media-player-loading.js +0 -53
  486. package/src/components/media-player-play.js +0 -44
  487. package/src/components/media-player-root.js +0 -243
  488. package/src/components/media-player-seek.js +0 -92
  489. package/src/components/media-player-time.js +0 -57
  490. package/src/components/media-player-tooltip.js +0 -14
  491. package/src/components/media-player-video.js +0 -18
  492. package/src/components/media-player-volume.js +0 -88
  493. package/src/components/media-player.js +0 -67
  494. package/src/components/media-suspense.js +0 -173
  495. package/src/components/player-settings-form.js +0 -46
  496. package/src/components/react-player-wrapper.js +0 -163
  497. package/src/components/simple-video-player.js +0 -41
  498. package/src/components/ui/enhanced-seek-bar.js +0 -112
  499. package/src/components/ui/fullscreen-button.js +0 -21
  500. package/src/components/ui/media-resource-preloader.js +0 -295
  501. package/src/components/ui/play-button.js +0 -26
  502. package/src/components/ui/seek-bar.js +0 -54
  503. package/src/components/ui/time-display.js +0 -18
  504. package/src/components/ui/volume-control.js +0 -71
  505. package/src/components/unified/base-media-player.js +0 -104
  506. package/src/components/unified/media-player.js +0 -41
  507. package/src/components/variants/minimal/AccessibleMinimalPlayer.js +0 -322
  508. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +0 -280
  509. package/src/components/variants/minimal/MinimalControls.js +0 -19
  510. package/src/components/variants/minimal/MinimalLoading.js +0 -6
  511. package/src/components/variants/minimal/MinimalMediaPlayer.js +0 -135
  512. package/src/components/variants/minimal/MinimalOverlay.js +0 -15
  513. package/src/components/variants/minimal/MinimalPlayButton.js +0 -29
  514. package/src/components/variants/minimal/MinimalSeekBar.js +0 -73
  515. package/src/components/variants/minimal/MinimalVolumeControl.js +0 -29
  516. package/src/components/variants/minimal/SimpleMinimalPlayer.js +0 -51
  517. package/src/components/variants/minimal/components/CenterPlayButton.js +0 -8
  518. package/src/components/variants/minimal/components/ControlBar.js +0 -10
  519. package/src/components/variants/minimal/components/EnhancedSettingsMenu.js +0 -68
  520. package/src/components/variants/minimal/components/PlaybackControls.js +0 -9
  521. package/src/components/variants/minimal/components/RightControls.js +0 -40
  522. package/src/components/variants/minimal/components/SeekBar.js +0 -43
  523. package/src/components/variants/minimal/components/SettingsDropdown.js +0 -18
  524. package/src/components/variants/minimal/components/SubtitleDisplay.js +0 -6
  525. package/src/components/variants/minimal/components/TimeDisplay.js +0 -5
  526. package/src/components/variants/minimal/components/VideoElement.js +0 -4
  527. package/src/components/variants/minimal/components/VolumeControl.js +0 -99
  528. package/src/components/variants/minimal/index.js +0 -8
  529. package/src/components/video-player.js +0 -38
  530. package/src/context/error-handling.js +0 -300
  531. package/src/context/media-context.js +0 -121
  532. package/src/context/media-provider.js +0 -164
  533. package/src/context/media-store.js +0 -273
  534. package/src/context/persistence.js +0 -356
  535. package/src/core/events/event-system.js +0 -288
  536. package/src/core/events/hooks.js +0 -198
  537. package/src/core/events/index.js +0 -7
  538. package/src/core/events/middleware.js +0 -219
  539. package/src/core/index.js +0 -15
  540. package/src/core/optimization/bundle-optimizer.js +0 -217
  541. package/src/core/performance/cicd.js +0 -83
  542. package/src/core/performance/index.js +0 -14
  543. package/src/core/performance/media-loading-optimizer.js +0 -404
  544. package/src/core/performance/performance-budgets.js +0 -326
  545. package/src/core/performance/performance-monitor.js +0 -297
  546. package/src/core/performance/performance-testing.js +0 -314
  547. package/src/core/plugins/base-plugin.js +0 -151
  548. package/src/core/plugins/enhanced-plugin-system.js +0 -305
  549. package/src/core/plugins/examples/analytics-plugin.js +0 -191
  550. package/src/core/plugins/index.js +0 -9
  551. package/src/core/plugins/registry.js +0 -261
  552. package/src/core/plugins/types.js +0 -31
  553. package/src/core/plugins/utils.js +0 -274
  554. package/src/core/progressive-loading.js +0 -239
  555. package/src/core/providers/enhanced-hls-provider.js +0 -273
  556. package/src/core/providers/service-provider.js +0 -105
  557. package/src/core/utils.js +0 -21
  558. package/src/features/media-session/media-session-manager.js +0 -331
  559. package/src/features/picture-in-picture/pip-manager.js +0 -353
  560. package/src/features/playlist/playlist-manager.js +0 -475
  561. package/src/features/subtitles/subtitle-manager.js +0 -335
  562. package/src/features/subtitles/subtitle-parser.js +0 -217
  563. package/src/features/thumbnails/thumbnail-generator.js +0 -388
  564. package/src/hooks/accessibility/index.js +0 -4
  565. package/src/hooks/accessibility/use-accessibility-preferences.js +0 -156
  566. package/src/hooks/accessibility/use-focus-management.js +0 -142
  567. package/src/hooks/accessibility/use-keyboard-shortcuts.js +0 -101
  568. package/src/hooks/accessibility/use-screen-reader.js +0 -148
  569. package/src/hooks/core/index.js +0 -19
  570. package/src/hooks/legacy.js +0 -17
  571. package/src/hooks/use-enhanced-media-player.js +0 -395
  572. package/src/hooks/use-intelligent-preloading.js +0 -258
  573. package/src/hooks/use-keyboard-controls.js +0 -83
  574. package/src/hooks/use-media-actions.js +0 -121
  575. package/src/hooks/use-media-metadata.js +0 -74
  576. package/src/hooks/use-media-optimistic.js +0 -205
  577. package/src/hooks/use-media-player.js +0 -251
  578. package/src/hooks/use-media-state.js +0 -162
  579. package/src/hooks/use-memory-optimization.js +0 -288
  580. package/src/hooks/use-optimistic-controls.js +0 -60
  581. package/src/hooks/use-optimized-media.js +0 -211
  582. package/src/hooks/use-touch-gestures.js +0 -289
  583. package/src/hooks/useEnhancedSubtitles.js +0 -205
  584. package/src/hooks/useKeyboardShortcuts.js +0 -59
  585. package/src/hooks/useMediaControls.js +0 -44
  586. package/src/hooks/useScreenshot.js +0 -56
  587. package/src/hooks/useSubtitles.js +0 -73
  588. package/src/hooks/useVideoPlayer.js +0 -184
  589. package/src/icons/components/FullscreenIcon.js +0 -11
  590. package/src/icons/components/SettingsIcon.js +0 -11
  591. package/src/icons/components/animated/LoadingIcon.js +0 -11
  592. package/src/icons/components/animated/PlayPauseIcon.js +0 -9
  593. package/src/icons/components/media/PauseIcon.js +0 -12
  594. package/src/icons/components/media/PlayIcon.js +0 -12
  595. package/src/icons/components/volume/VolumeIcon.js +0 -11
  596. package/src/icons/components/volume/VolumeOffIcon.js +0 -11
  597. package/src/icons/index.js +0 -45
  598. package/src/icons/provider.js +0 -37
  599. package/src/icons/types.js +0 -1
  600. package/src/index-enhanced.js +0 -16
  601. package/src/index-legacy.js +0 -97
  602. package/src/index.js +0 -90
  603. package/src/index.minimal.js +0 -3
  604. package/src/lib/deprecation.js +0 -31
  605. package/src/lib/format-time.js +0 -32
  606. package/src/lib/index.js +0 -3
  607. package/src/lib/utils.js +0 -5
  608. package/src/test/setup.js +0 -65
  609. package/src/types/events.js +0 -2
  610. package/src/types/formats.js +0 -63
  611. package/src/types/index.js +0 -4
package/dist/core.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.js","sources":["../src/core/performance/performance-testing.ts","../src/core/performance/performance-budgets.ts","../src/core/performance/media-loading-optimizer.ts","../src/core/providers/service-provider.tsx","../src/core/utils.tsx","../src/core/progressive-loading.tsx","../src/core/index.ts"],"sourcesContent":["import { performanceMonitor, PerformanceRegressionDetector } from './performance-monitor';\nimport type { PerformanceMetrics } from './performance-monitor';\n\n// Performance test configuration\nexport interface PerformanceTestConfig {\n name: string;\n iterations: number;\n warmupIterations: number;\n timeout: number;\n expectedThreshold: {\n renderTime: number;\n memoryUsage: number;\n };\n}\n\n// Performance test result\nexport interface PerformanceTestResult {\n testName: string;\n passed: boolean;\n metrics: {\n averageRenderTime: number;\n minRenderTime: number;\n maxRenderTime: number;\n memoryUsage: number;\n iterations: number;\n };\n threshold: PerformanceTestConfig['expectedThreshold'];\n error?: string;\n}\n\n// Performance benchmark suite\nexport class PerformanceBenchmark {\n private results: PerformanceTestResult[] = [];\n private regressionDetector = new PerformanceRegressionDetector();\n\n async runTest(\n config: PerformanceTestConfig,\n testFunction: () => any | Promise<any>\n ): Promise<PerformanceTestResult> {\n const renderTimes: number[] = [];\n let memoryBefore = 0;\n let memoryAfter = 0;\n let error: string | undefined;\n\n try {\n // Warmup iterations\n for (let i = 0; i < config.warmupIterations; i++) {\n await testFunction();\n }\n\n // Force garbage collection if available\n if (global.gc) {\n global.gc();\n }\n\n memoryBefore = this.getMemoryUsage();\n\n // Main test iterations\n for (let i = 0; i < config.iterations; i++) {\n const startTime = performance.now();\n await testFunction();\n const endTime = performance.now();\n renderTimes.push(endTime - startTime);\n }\n\n memoryAfter = this.getMemoryUsage();\n\n } catch (err) {\n error = err instanceof Error ? err.message : String(err);\n }\n\n const averageRenderTime = renderTimes.reduce((sum, time) => sum + time, 0) / renderTimes.length;\n const minRenderTime = Math.min(...renderTimes);\n const maxRenderTime = Math.max(...renderTimes);\n const memoryUsage = memoryAfter - memoryBefore;\n\n const passed = !error && \n averageRenderTime <= config.expectedThreshold.renderTime &&\n memoryUsage <= config.expectedThreshold.memoryUsage;\n\n const result: PerformanceTestResult = {\n testName: config.name,\n passed,\n metrics: {\n averageRenderTime,\n minRenderTime: isFinite(minRenderTime) ? minRenderTime : 0,\n maxRenderTime: isFinite(maxRenderTime) ? maxRenderTime : 0,\n memoryUsage,\n iterations: config.iterations\n },\n threshold: config.expectedThreshold,\n error\n };\n\n this.results.push(result);\n return result;\n }\n\n private getMemoryUsage(): number {\n if ('memory' in performance) {\n return (performance as any).memory.usedJSHeapSize || 0;\n }\n return 0;\n }\n\n // Component rendering performance test\n async testComponentRender(\n componentName: string,\n renderFunction: () => any,\n expectedRenderTime = 16 // 60fps target\n ): Promise<PerformanceTestResult> {\n const config: PerformanceTestConfig = {\n name: `${componentName} Render Performance`,\n iterations: 100,\n warmupIterations: 10,\n timeout: 5000,\n expectedThreshold: {\n renderTime: expectedRenderTime,\n memoryUsage: 1024 * 1024 // 1MB\n }\n };\n\n return this.runTest(config, renderFunction);\n }\n\n // Bundle loading performance test\n async testBundleLoading(\n bundlePath: string,\n expectedLoadTime = 1000 // 1 second\n ): Promise<PerformanceTestResult> {\n const config: PerformanceTestConfig = {\n name: `Bundle Loading: ${bundlePath}`,\n iterations: 5,\n warmupIterations: 1,\n timeout: 10000,\n expectedThreshold: {\n renderTime: expectedLoadTime,\n memoryUsage: 5 * 1024 * 1024 // 5MB\n }\n };\n\n return this.runTest(config, async () => {\n // Simulate bundle loading\n const startTime = performance.now();\n try {\n // Use fetch instead of dynamic import to avoid bundler issues\n const response = await fetch(bundlePath);\n if (!response.ok) {\n throw new Error(`Failed to load bundle: ${response.status}`);\n }\n await response.blob(); // Consume the response\n } catch (error) {\n console.warn(`Bundle loading test failed for ${bundlePath}:`, error);\n // Return a mock time for testing purposes\n }\n const endTime = performance.now();\n return endTime - startTime;\n });\n }\n\n // Memory leak detection test\n async testMemoryLeaks(\n testFunction: () => any,\n iterations = 1000\n ): Promise<PerformanceTestResult> {\n const config: PerformanceTestConfig = {\n name: 'Memory Leak Detection',\n iterations,\n warmupIterations: 100,\n timeout: 30000,\n expectedThreshold: {\n renderTime: Infinity, // Not testing render time\n memoryUsage: 10 * 1024 * 1024 // 10MB max increase\n }\n };\n\n const memoryBefore = this.getMemoryUsage();\n \n const result = await this.runTest(config, testFunction);\n \n const memoryAfter = this.getMemoryUsage();\n const memoryIncrease = memoryAfter - memoryBefore;\n \n // Check for memory leaks (memory should not increase significantly)\n const hasMemoryLeak = memoryIncrease > config.expectedThreshold.memoryUsage;\n \n return {\n ...result,\n passed: result.passed && !hasMemoryLeak,\n error: hasMemoryLeak ? `Potential memory leak detected: ${Math.round(memoryIncrease / 1024 / 1024)}MB increase` : result.error\n };\n }\n\n // Interaction delay test\n async testInteractionDelay(\n interactionFunction: () => any,\n expectedDelay = 100 // 100ms\n ): Promise<PerformanceTestResult> {\n const config: PerformanceTestConfig = {\n name: 'Interaction Delay',\n iterations: 50,\n warmupIterations: 5,\n timeout: 5000,\n expectedThreshold: {\n renderTime: expectedDelay,\n memoryUsage: 1024 * 1024 // 1MB\n }\n };\n\n return this.runTest(config, interactionFunction);\n }\n\n // Regression testing\n async runRegressionTests(\n currentMetrics: PerformanceMetrics,\n baselineMetrics?: PerformanceMetrics\n ): Promise<{\n passed: boolean;\n regressions: ReturnType<PerformanceRegressionDetector['detectRegression']>;\n }> {\n if (baselineMetrics) {\n this.regressionDetector.setBaseline(baselineMetrics);\n }\n\n const regressions = this.regressionDetector.detectRegression(currentMetrics);\n const passed = regressions.length === 0;\n\n return { passed, regressions };\n }\n\n // Get all test results\n getResults(): PerformanceTestResult[] {\n return [...this.results];\n }\n\n // Get test summary\n getSummary(): {\n totalTests: number;\n passedTests: number;\n failedTests: number;\n passRate: number;\n } {\n const totalTests = this.results.length;\n const passedTests = this.results.filter(result => result.passed).length;\n const failedTests = totalTests - passedTests;\n const passRate = totalTests > 0 ? (passedTests / totalTests) * 100 : 0;\n\n return { totalTests, passedTests, failedTests, passRate };\n }\n\n // Clear test results\n clearResults(): void {\n this.results = [];\n }\n\n // Generate performance report\n generateReport(): string {\n const summary = this.getSummary();\n let report = `Performance Test Report\\n`;\n report += `========================\\n\\n`;\n report += `Total Tests: ${summary.totalTests}\\n`;\n report += `Passed: ${summary.passedTests}\\n`;\n report += `Failed: ${summary.failedTests}\\n`;\n report += `Pass Rate: ${summary.passRate.toFixed(1)}%\\n\\n`;\n\n if (this.results.length > 0) {\n report += `Detailed Results:\\n`;\n report += `-----------------\\n\\n`;\n\n this.results.forEach((result, index) => {\n report += `${index + 1}. ${result.testName}\\n`;\n report += ` Status: ${result.passed ? 'PASS' : 'FAIL'}\\n`;\n report += ` Average Render Time: ${result.metrics.averageRenderTime.toFixed(2)}ms\\n`;\n report += ` Min/Max Render Time: ${result.metrics.minRenderTime.toFixed(2)}ms / ${result.metrics.maxRenderTime.toFixed(2)}ms\\n`;\n report += ` Memory Usage: ${Math.round(result.metrics.memoryUsage / 1024)} KB\\n`;\n report += ` Iterations: ${result.metrics.iterations}\\n`;\n \n if (result.error) {\n report += ` Error: ${result.error}\\n`;\n }\n \n report += `\\n`;\n });\n }\n\n return report;\n }\n}\n\n// Global performance benchmark instance\nexport const performanceBenchmark = new PerformanceBenchmark();\n\n// Utility functions for common performance tests\nexport const performanceTestUtils = {\n // Test component rendering performance\n async testComponent(\n Component: any,\n props: any = {},\n expectedRenderTime = 16\n ): Promise<PerformanceTestResult> {\n return performanceBenchmark.testComponentRender(\n Component.displayName || Component.name || 'Component',\n () => {\n // This would need React Testing Library in a real test environment\n // For now, we'll simulate component rendering\n return { type: Component, props }; // Mock element\n },\n expectedRenderTime\n );\n },\n\n // Test hook performance\n async testHook(\n hookFunction: () => any,\n hookName: string,\n expectedExecutionTime = 1\n ): Promise<PerformanceTestResult> {\n const config: PerformanceTestConfig = {\n name: `Hook Performance: ${hookName}`,\n iterations: 1000,\n warmupIterations: 100,\n timeout: 5000,\n expectedThreshold: {\n renderTime: expectedExecutionTime,\n memoryUsage: 1024 * 1024 // 1MB\n }\n };\n\n return performanceBenchmark.runTest(config, hookFunction);\n },\n\n // Test async operation performance\n async testAsyncOperation(\n operation: () => Promise<any>,\n operationName: string,\n expectedTime = 1000\n ): Promise<PerformanceTestResult> {\n const config: PerformanceTestConfig = {\n name: `Async Operation: ${operationName}`,\n iterations: 10,\n warmupIterations: 2,\n timeout: 30000,\n expectedThreshold: {\n renderTime: expectedTime,\n memoryUsage: 2 * 1024 * 1024 // 2MB\n }\n };\n\n return performanceBenchmark.runTest(config, operation);\n },\n\n // Test bundle size impact\n async measureBundleImpact(\n beforeFunction: () => void,\n afterFunction: () => void,\n featureName: string\n ): Promise<{\n bundleIncrease: number;\n memoryIncrease: number;\n renderTimeImpact: number;\n }> {\n const beforeMemory = (performance as any).memory?.usedJSHeapSize || 0;\n const beforeTime = performance.now();\n \n beforeFunction();\n \n const midMemory = (performance as any).memory?.usedJSHeapSize || 0;\n const midTime = performance.now();\n \n afterFunction();\n \n const afterMemory = (performance as any).memory?.usedJSHeapSize || 0;\n const afterTime = performance.now();\n\n return {\n bundleIncrease: afterMemory - beforeMemory,\n memoryIncrease: midMemory - beforeMemory,\n renderTimeImpact: (afterTime - midTime) - (midTime - beforeTime)\n };\n }\n};\n\n// Performance testing framework\nexport class PerformanceTestFramework {\n private benchmark = new PerformanceBenchmark();\n private suites: Map<string, PerformanceTestConfig[]> = new Map();\n\n // Register a test suite\n registerSuite(suiteName: string, tests: PerformanceTestConfig[]) {\n this.suites.set(suiteName, tests);\n }\n\n // Run all tests in a suite\n async runSuite(\n suiteName: string,\n testImplementations: Map<string, () => any>\n ): Promise<PerformanceTestResult[]> {\n const tests = this.suites.get(suiteName);\n if (!tests) {\n throw new Error(`Test suite '${suiteName}' not found`);\n }\n\n const results: PerformanceTestResult[] = [];\n\n for (const test of tests) {\n const implementation = testImplementations.get(test.name);\n if (!implementation) {\n console.warn(`No implementation found for test '${test.name}'`);\n continue;\n }\n\n const result = await this.benchmark.runTest(test, implementation);\n results.push(result);\n }\n\n return results;\n }\n\n // Run all registered test suites\n async runAllSuites(\n implementations: Map<string, Map<string, () => any>>\n ): Promise<Map<string, PerformanceTestResult[]>> {\n const allResults = new Map<string, PerformanceTestResult[]>();\n\n for (const [suiteName] of this.suites) {\n const suiteImplementations = implementations.get(suiteName);\n if (!suiteImplementations) {\n console.warn(`No implementations found for suite '${suiteName}'`);\n continue;\n }\n\n const results = await this.runSuite(suiteName, suiteImplementations);\n allResults.set(suiteName, results);\n }\n\n return allResults;\n }\n\n // Generate comprehensive report\n generateComprehensiveReport(): string {\n const summary = this.benchmark.getSummary();\n let report = this.benchmark.generateReport();\n\n // Add suite breakdown if available\n if (this.suites.size > 0) {\n report += `\\nTest Suites:\\n`;\n report += `============\\n\\n`;\n\n for (const [suiteName, tests] of this.suites) {\n report += `Suite: ${suiteName}\\n`;\n report += `Tests: ${tests.length}\\n\\n`;\n }\n }\n\n return report;\n }\n}\n\nexport const performanceTestFramework = new PerformanceTestFramework();","// Performance budget configuration\nexport interface PerformanceBudget {\n name: string;\n category: 'bundle' | 'runtime' | 'network' | 'memory';\n limit: number;\n unit: 'bytes' | 'ms' | 'score' | 'percent';\n severity: 'error' | 'warning' | 'info';\n description: string;\n}\n\n// Performance budget violation\nexport interface BudgetViolation {\n budget: PerformanceBudget;\n actualValue: number;\n overageAmount: number;\n overagePercentage: number;\n timestamp: number;\n}\n\n// Alert configuration\nexport interface AlertConfig {\n enabled: boolean;\n channels: AlertChannel[];\n threshold: number; // Number of violations before alerting\n cooldown: number; // Minimum time between alerts (ms)\n}\n\nexport interface AlertChannel {\n type: 'console' | 'webhook' | 'email' | 'slack';\n config: {\n url?: string;\n email?: string;\n token?: string;\n channel?: string;\n };\n}\n\n// Default performance budgets for media player\nexport const defaultPerformanceBudgets: PerformanceBudget[] = [\n // Bundle size budgets\n {\n name: 'Main Bundle Size (ESM)',\n category: 'bundle',\n limit: 250 * 1024, // 250KB\n unit: 'bytes',\n severity: 'error',\n description: 'Main bundle should stay under 250KB for fast initial loading'\n },\n {\n name: 'Main Bundle Size (CJS)',\n category: 'bundle', \n limit: 200 * 1024, // 200KB\n unit: 'bytes',\n severity: 'error',\n description: 'CJS bundle should be smaller due to better compression'\n },\n {\n name: 'Core Module Size',\n category: 'bundle',\n limit: 15 * 1024, // 15KB\n unit: 'bytes',\n severity: 'warning',\n description: 'Core architecture should remain lightweight'\n },\n {\n name: 'Enhanced Components Size',\n category: 'bundle',\n limit: 40 * 1024, // 40KB\n unit: 'bytes',\n severity: 'warning',\n description: 'Enhanced components bundle size'\n },\n \n // Runtime performance budgets\n {\n name: 'Component Render Time',\n category: 'runtime',\n limit: 16, // 16ms for 60fps\n unit: 'ms',\n severity: 'error',\n description: 'Component rendering should complete within one frame'\n },\n {\n name: 'First Input Delay',\n category: 'runtime',\n limit: 100, // 100ms\n unit: 'ms',\n severity: 'error',\n description: 'First Input Delay should be under 100ms for good UX'\n },\n {\n name: 'Largest Contentful Paint',\n category: 'runtime',\n limit: 2500, // 2.5s\n unit: 'ms',\n severity: 'warning',\n description: 'LCP should be under 2.5s for good Core Web Vitals score'\n },\n {\n name: 'Cumulative Layout Shift',\n category: 'runtime',\n limit: 0.1,\n unit: 'score',\n severity: 'warning',\n description: 'CLS should be under 0.1 for good visual stability'\n },\n \n // Memory budgets\n {\n name: 'Memory Usage',\n category: 'memory',\n limit: 50 * 1024 * 1024, // 50MB\n unit: 'bytes',\n severity: 'warning',\n description: 'Memory usage should stay under 50MB for good performance'\n },\n {\n name: 'Memory Increase Per Operation',\n category: 'memory',\n limit: 1024 * 1024, // 1MB\n unit: 'bytes',\n severity: 'error',\n description: 'Each operation should not increase memory by more than 1MB'\n },\n \n // Network budgets (for media loading)\n {\n name: 'Media Load Time',\n category: 'network',\n limit: 3000, // 3s\n unit: 'ms',\n severity: 'warning',\n description: 'Media should start loading within 3 seconds'\n }\n];\n\n// Performance budget monitor\nexport class PerformanceBudgetMonitor {\n private budgets: Map<string, PerformanceBudget> = new Map();\n private violations: BudgetViolation[] = [];\n private alertConfig: AlertConfig;\n private lastAlertTime = 0;\n\n constructor(\n budgets: PerformanceBudget[] = defaultPerformanceBudgets,\n alertConfig: AlertConfig = {\n enabled: true,\n channels: [{ type: 'console', config: {} }],\n threshold: 1,\n cooldown: 5 * 60 * 1000 // 5 minutes\n }\n ) {\n budgets.forEach(budget => {\n this.budgets.set(budget.name, budget);\n });\n this.alertConfig = alertConfig;\n }\n\n // Check a single metric against budgets\n checkMetric(\n metricName: string,\n value: number,\n category: PerformanceBudget['category'] = 'runtime'\n ): BudgetViolation[] {\n const violations: BudgetViolation[] = [];\n \n for (const [name, budget] of this.budgets) {\n if (budget.category === category && \n (name.includes(metricName) || metricName.includes(name.split(' ')[0]?.toLowerCase() || ''))) {\n \n if (value > budget.limit) {\n const violation: BudgetViolation = {\n budget,\n actualValue: value,\n overageAmount: value - budget.limit,\n overagePercentage: ((value - budget.limit) / budget.limit) * 100,\n timestamp: Date.now()\n };\n \n violations.push(violation);\n this.violations.push(violation);\n }\n }\n }\n\n if (violations.length > 0) {\n this.handleViolations(violations);\n }\n\n return violations;\n }\n\n // Check bundle sizes\n async checkBundleSizes(distPath: string): Promise<BudgetViolation[]> {\n const violations: BudgetViolation[] = [];\n \n // Only check bundle sizes in Node.js environment\n if (typeof window !== 'undefined' || typeof process === 'undefined') {\n console.warn('Bundle size checking is only available in Node.js environment');\n return violations;\n }\n \n // Bundle size checking is disabled in browser environments\n console.warn('Bundle size checking disabled - use Node.js cicdIntegration from @rp/baroiplayer/core/performance/cicd for CI/CD environments');\n\n return violations;\n }\n\n // Check runtime performance\n checkRuntimeMetrics(metrics: {\n renderTime?: number;\n fid?: number;\n lcp?: number;\n cls?: number;\n memoryUsage?: number;\n mediaLoadTime?: number;\n }): BudgetViolation[] {\n const allViolations: BudgetViolation[] = [];\n\n if (metrics.renderTime !== undefined) {\n allViolations.push(...this.checkMetric('Component Render Time', metrics.renderTime, 'runtime'));\n }\n \n if (metrics.fid !== undefined) {\n allViolations.push(...this.checkMetric('First Input Delay', metrics.fid, 'runtime'));\n }\n \n if (metrics.lcp !== undefined) {\n allViolations.push(...this.checkMetric('Largest Contentful Paint', metrics.lcp, 'runtime'));\n }\n \n if (metrics.cls !== undefined) {\n allViolations.push(...this.checkMetric('Cumulative Layout Shift', metrics.cls, 'runtime'));\n }\n \n if (metrics.memoryUsage !== undefined) {\n allViolations.push(...this.checkMetric('Memory Usage', metrics.memoryUsage, 'memory'));\n }\n \n if (metrics.mediaLoadTime !== undefined) {\n allViolations.push(...this.checkMetric('Media Load Time', metrics.mediaLoadTime, 'network'));\n }\n\n return allViolations;\n }\n\n // Handle budget violations\n private async handleViolations(violations: BudgetViolation[]) {\n if (!this.alertConfig.enabled) return;\n \n const now = Date.now();\n const errorViolations = violations.filter(v => v.budget.severity === 'error');\n \n // Check if we should send an alert based on threshold and cooldown\n if (errorViolations.length >= this.alertConfig.threshold &&\n now - this.lastAlertTime >= this.alertConfig.cooldown) {\n \n await this.sendAlerts(violations);\n this.lastAlertTime = now;\n }\n }\n\n // Send alerts through configured channels\n private async sendAlerts(violations: BudgetViolation[]) {\n const message = this.formatAlertMessage(violations);\n \n for (const channel of this.alertConfig.channels) {\n try {\n await this.sendAlert(channel, message);\n } catch (error) {\n console.error(`Failed to send alert via ${channel.type}:`, error);\n }\n }\n }\n\n // Format alert message\n private formatAlertMessage(violations: BudgetViolation[]): string {\n let message = `🚨 Performance Budget Violations Detected!\\n\\n`;\n \n violations.forEach(violation => {\n const { budget, actualValue, overageAmount, overagePercentage } = violation;\n const unit = this.getUnitDisplay(budget.unit);\n \n message += `❌ ${budget.name}\\n`;\n message += ` Limit: ${this.formatValue(budget.limit, budget.unit)}\\n`;\n message += ` Actual: ${this.formatValue(actualValue, budget.unit)}\\n`;\n message += ` Overage: ${this.formatValue(overageAmount, budget.unit)} (+${overagePercentage.toFixed(1)}%)\\n`;\n message += ` Severity: ${budget.severity.toUpperCase()}\\n\\n`;\n });\n \n message += `Time: ${new Date().toISOString()}\\n`;\n message += `Total Violations: ${violations.length}`;\n \n return message;\n }\n\n // Send alert to specific channel\n private async sendAlert(channel: AlertChannel, message: string) {\n switch (channel.type) {\n case 'console':\n console.error(message);\n break;\n \n case 'webhook':\n if (channel.config.url) {\n const response = await fetch(channel.config.url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ text: message, timestamp: Date.now() })\n });\n if (!response.ok) {\n throw new Error(`Webhook failed: ${response.status}`);\n }\n }\n break;\n \n case 'slack':\n if (channel.config.url) {\n const response = await fetch(channel.config.url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n text: message,\n channel: channel.config.channel,\n username: 'BaroiPlayer Performance Monitor'\n })\n });\n if (!response.ok) {\n throw new Error(`Slack webhook failed: ${response.status}`);\n }\n }\n break;\n \n default:\n console.warn(`Unsupported alert channel: ${channel.type}`);\n }\n }\n\n // Helper methods\n private formatValue(value: number, unit: PerformanceBudget['unit']): string {\n switch (unit) {\n case 'bytes':\n return this.formatBytes(value);\n case 'ms':\n return `${value.toFixed(2)}ms`;\n case 'score':\n return value.toFixed(3);\n case 'percent':\n return `${value.toFixed(1)}%`;\n default:\n return value.toString();\n }\n }\n\n private formatBytes(bytes: number): string {\n if (bytes >= 1024 * 1024) {\n return `${(bytes / 1024 / 1024).toFixed(2)}MB`;\n }\n if (bytes >= 1024) {\n return `${(bytes / 1024).toFixed(2)}KB`;\n }\n return `${bytes}B`;\n }\n\n private getUnitDisplay(unit: PerformanceBudget['unit']): string {\n const displays = {\n 'bytes': 'bytes',\n 'ms': 'milliseconds', \n 'score': 'score',\n 'percent': 'percent'\n };\n return displays[unit] || unit;\n }\n\n // Management methods\n addBudget(budget: PerformanceBudget) {\n this.budgets.set(budget.name, budget);\n }\n\n removeBudget(name: string) {\n this.budgets.delete(name);\n }\n\n updateBudget(name: string, updates: Partial<PerformanceBudget>) {\n const existing = this.budgets.get(name);\n if (existing) {\n this.budgets.set(name, { ...existing, ...updates });\n }\n }\n\n getBudgets(): PerformanceBudget[] {\n return Array.from(this.budgets.values());\n }\n\n getViolations(since?: number): BudgetViolation[] {\n if (since) {\n return this.violations.filter(v => v.timestamp >= since);\n }\n return [...this.violations];\n }\n\n clearViolations() {\n this.violations = [];\n }\n\n getViolationSummary(): {\n total: number;\n byCategory: Record<string, number>;\n bySeverity: Record<string, number>;\n } {\n const byCategory: Record<string, number> = {};\n const bySeverity: Record<string, number> = {};\n\n this.violations.forEach(violation => {\n const category = violation.budget.category;\n const severity = violation.budget.severity;\n \n byCategory[category] = (byCategory[category] || 0) + 1;\n bySeverity[severity] = (bySeverity[severity] || 0) + 1;\n });\n\n return {\n total: this.violations.length,\n byCategory,\n bySeverity\n };\n }\n}\n\n// Global performance budget monitor\nexport const performanceBudgetMonitor = new PerformanceBudgetMonitor();\n\n","import React from 'react';\n\n// Network monitoring and adaptive loading\nexport interface NetworkInfo {\n effectiveType: '2g' | '3g' | '4g' | '5g' | 'unknown';\n downlink: number; // Mbps\n rtt: number; // Round trip time in ms\n saveData: boolean;\n isOnline: boolean;\n}\n\nexport interface MediaLoadingConfig {\n preloadStrategy: 'none' | 'metadata' | 'auto';\n adaptiveBitrate: boolean;\n maxPreloadSize: number; // bytes\n networkThresholds: {\n '2g': { maxBitrate: number; preload: boolean };\n '3g': { maxBitrate: number; preload: boolean };\n '4g': { maxBitrate: number; preload: boolean };\n '5g': { maxBitrate: number; preload: boolean };\n };\n bufferSize: number; // seconds\n enableServiceWorker: boolean;\n}\n\nexport const defaultMediaLoadingConfig: MediaLoadingConfig = {\n preloadStrategy: 'metadata',\n adaptiveBitrate: true,\n maxPreloadSize: 2 * 1024 * 1024, // 2MB\n networkThresholds: {\n '2g': { maxBitrate: 128, preload: false }, // 128 kbps\n '3g': { maxBitrate: 500, preload: false }, // 500 kbps \n '4g': { maxBitrate: 2000, preload: true }, // 2 Mbps\n '5g': { maxBitrate: 10000, preload: true } // 10 Mbps\n },\n bufferSize: 10, // 10 seconds\n enableServiceWorker: true\n};\n\n// Media loading performance tracker\nexport interface MediaLoadingMetrics {\n loadStartTime: number;\n firstByteTime?: number;\n loadCompleteTime?: number;\n totalLoadTime?: number;\n bytesLoaded: number;\n loadSpeed: number; // bytes per second\n networkType: string;\n quality: string;\n bufferHealth: number; // 0-1 scale\n stallsCount: number;\n stallsDuration: number;\n}\n\n// Network monitoring utility\nexport class NetworkMonitor {\n private connection: any;\n private listeners: Set<(info: NetworkInfo) => void> = new Set();\n private currentInfo: NetworkInfo;\n\n constructor() {\n if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n // Server-side rendering fallback\n this.connection = null;\n this.currentInfo = {\n effectiveType: 'unknown',\n downlink: 0,\n rtt: 0,\n saveData: false,\n isOnline: true\n };\n return;\n }\n\n this.connection = (navigator as any).connection || \n (navigator as any).mozConnection || \n (navigator as any).webkitConnection;\n \n this.currentInfo = this.getNetworkInfo();\n this.initializeListeners();\n }\n\n private getNetworkInfo(): NetworkInfo {\n if (typeof navigator === 'undefined') {\n // Server-side rendering fallback\n return {\n effectiveType: 'unknown',\n downlink: 0,\n rtt: 0,\n saveData: false,\n isOnline: true\n };\n }\n\n const isOnline = navigator.onLine;\n \n if (this.connection) {\n return {\n effectiveType: this.connection.effectiveType || 'unknown',\n downlink: this.connection.downlink || 0,\n rtt: this.connection.rtt || 0,\n saveData: this.connection.saveData || false,\n isOnline\n };\n }\n\n // Fallback for browsers without Network Information API\n return {\n effectiveType: 'unknown',\n downlink: 0,\n rtt: 0,\n saveData: false,\n isOnline\n };\n }\n\n private initializeListeners() {\n if (typeof window === 'undefined') {\n // Server-side rendering - skip event listeners\n return;\n }\n\n if (this.connection) {\n this.connection.addEventListener('change', this.handleNetworkChange.bind(this));\n }\n \n window.addEventListener('online', this.handleNetworkChange.bind(this));\n window.addEventListener('offline', this.handleNetworkChange.bind(this));\n }\n\n private handleNetworkChange() {\n const newInfo = this.getNetworkInfo();\n this.currentInfo = newInfo;\n this.listeners.forEach(listener => listener(newInfo));\n }\n\n getCurrentNetworkInfo(): NetworkInfo {\n return { ...this.currentInfo };\n }\n\n subscribe(listener: (info: NetworkInfo) => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n // Estimate available bandwidth with fallback detection\n async estimateBandwidth(): Promise<number> {\n if (this.connection && this.connection.downlink) {\n return this.connection.downlink * 1000; // Convert to kbps\n }\n\n // Fallback: simple bandwidth test\n try {\n const startTime = performance.now();\n const testUrl = '/api/bandwidth-test?size=100kb'; // Would need to be implemented\n const response = await fetch(testUrl);\n const blob = await response.blob();\n const endTime = performance.now();\n \n const timeInSeconds = (endTime - startTime) / 1000;\n const bytesLoaded = blob.size;\n const bitsPerSecond = (bytesLoaded * 8) / timeInSeconds;\n \n return bitsPerSecond / 1000; // Return in kbps\n } catch (error) {\n console.warn('Bandwidth estimation failed:', error);\n return 1000; // Default to 1Mbps\n }\n }\n}\n\n// Media loading optimizer\nexport class MediaLoadingOptimizer {\n private config: MediaLoadingConfig;\n private networkMonitor: NetworkMonitor;\n private loadingMetrics: Map<string, MediaLoadingMetrics> = new Map();\n private preloadCache: Map<string, Promise<Blob>> = new Map();\n\n constructor(config: Partial<MediaLoadingConfig> = {}) {\n this.config = { ...defaultMediaLoadingConfig, ...config };\n this.networkMonitor = new NetworkMonitor();\n this.initializeNetworkMonitoring();\n }\n\n private initializeNetworkMonitoring() {\n this.networkMonitor.subscribe((networkInfo) => {\n this.handleNetworkChange(networkInfo);\n });\n }\n\n private handleNetworkChange(networkInfo: NetworkInfo) {\n console.log('Network changed:', networkInfo);\n \n // Adjust quality based on network conditions\n if (this.config.adaptiveBitrate) {\n this.adjustQualityForNetwork(networkInfo);\n }\n\n // Clear preload cache if on slow network\n if (networkInfo.effectiveType === '2g' || networkInfo.saveData) {\n this.clearPreloadCache();\n }\n }\n\n // Optimize media loading based on network conditions\n async optimizeMediaLoading(\n mediaUrl: string,\n element: HTMLMediaElement,\n options: {\n quality?: string;\n preload?: boolean;\n priority?: 'high' | 'normal' | 'low';\n } = {}\n ): Promise<MediaLoadingMetrics> {\n const startTime = performance.now();\n const networkInfo = this.networkMonitor.getCurrentNetworkInfo();\n \n const metrics: MediaLoadingMetrics = {\n loadStartTime: startTime,\n bytesLoaded: 0,\n loadSpeed: 0,\n networkType: networkInfo.effectiveType,\n quality: options.quality || 'auto',\n bufferHealth: 0,\n stallsCount: 0,\n stallsDuration: 0\n };\n\n this.loadingMetrics.set(mediaUrl, metrics);\n\n try {\n // Choose optimal loading strategy\n const loadingStrategy = this.chooseLoadingStrategy(networkInfo, options);\n \n // Apply preload strategy\n if (loadingStrategy.shouldPreload) {\n await this.preloadMedia(mediaUrl, loadingStrategy.preloadAmount);\n }\n\n // Set appropriate preload attribute\n element.preload = loadingStrategy.preloadAttribute;\n\n // Monitor loading progress\n this.monitorLoadingProgress(element, metrics);\n\n // Apply quality adjustments\n if (this.config.adaptiveBitrate && loadingStrategy.suggestedQuality) {\n this.applyQualitySettings(element, loadingStrategy.suggestedQuality);\n }\n\n return metrics;\n } catch (error) {\n console.error('Media loading optimization failed:', error);\n return metrics;\n }\n }\n\n private chooseLoadingStrategy(\n networkInfo: NetworkInfo,\n options: { preload?: boolean; priority?: string; quality?: string }\n ) {\n const effectiveType = networkInfo.effectiveType === 'unknown' ? '4g' : networkInfo.effectiveType;\n const threshold = this.config.networkThresholds[effectiveType] || \n this.config.networkThresholds['4g'];\n \n return {\n shouldPreload: options.preload !== false && threshold.preload && !networkInfo.saveData,\n preloadAmount: networkInfo.saveData ? 0 : this.config.maxPreloadSize,\n preloadAttribute: this.getPreloadAttribute(networkInfo),\n suggestedQuality: this.getSuggestedQuality(networkInfo, threshold.maxBitrate),\n bufferTarget: this.getBufferTarget(networkInfo)\n };\n }\n\n private getPreloadAttribute(networkInfo: NetworkInfo): 'none' | 'metadata' | 'auto' {\n if (networkInfo.saveData || networkInfo.effectiveType === '2g') {\n return 'none';\n }\n \n if (networkInfo.effectiveType === '3g') {\n return 'metadata';\n }\n \n return this.config.preloadStrategy;\n }\n\n private getSuggestedQuality(networkInfo: NetworkInfo, maxBitrate: number): string {\n const availableBandwidth = networkInfo.downlink * 1000; // Convert to kbps\n \n if (availableBandwidth >= maxBitrate * 2) return 'high';\n if (availableBandwidth >= maxBitrate) return 'medium';\n return 'low';\n }\n\n private getBufferTarget(networkInfo: NetworkInfo): number {\n switch (networkInfo.effectiveType) {\n case '2g': return 2; // 2 seconds\n case '3g': return 5; // 5 seconds\n case '4g': return this.config.bufferSize;\n case '5g': return this.config.bufferSize * 1.5;\n default: return this.config.bufferSize;\n }\n }\n\n // Preload media content\n async preloadMedia(url: string, maxSize: number): Promise<void> {\n if (this.preloadCache.has(url)) {\n return; // Already preloading or preloaded\n }\n\n const preloadPromise = this.fetchWithProgress(url, maxSize);\n this.preloadCache.set(url, preloadPromise);\n\n try {\n await preloadPromise;\n } catch (error) {\n console.warn(`Preload failed for ${url}:`, error);\n this.preloadCache.delete(url);\n }\n }\n\n private async fetchWithProgress(url: string, maxSize: number): Promise<Blob> {\n const response = await fetch(url, {\n headers: {\n 'Range': `bytes=0-${maxSize - 1}` // Limit preload size\n }\n });\n\n if (!response.ok) {\n throw new Error(`Failed to preload: ${response.status}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body not readable');\n }\n\n const chunks: Uint8Array[] = [];\n let bytesRead = 0;\n\n try {\n while (bytesRead < maxSize) {\n const { done, value } = await reader.read();\n if (done) break;\n \n chunks.push(value);\n bytesRead += value.length;\n }\n } finally {\n reader.releaseLock();\n }\n\n return new Blob(chunks);\n }\n\n // Monitor loading progress and update metrics\n private monitorLoadingProgress(element: HTMLMediaElement, metrics: MediaLoadingMetrics) {\n let stallStartTime: number | null = null;\n\n const updateMetrics = () => {\n if (element.buffered.length > 0) {\n const bufferedEnd = element.buffered.end(element.buffered.length - 1);\n const currentTime = element.currentTime;\n metrics.bufferHealth = Math.min((bufferedEnd - currentTime) / this.config.bufferSize, 1);\n }\n };\n\n // Track first byte\n const onLoadStart = () => {\n metrics.firstByteTime = performance.now();\n };\n\n // Track load completion\n const onCanPlay = () => {\n metrics.loadCompleteTime = performance.now();\n metrics.totalLoadTime = metrics.loadCompleteTime - metrics.loadStartTime;\n \n // Calculate load speed\n if (metrics.totalLoadTime && metrics.bytesLoaded > 0) {\n metrics.loadSpeed = metrics.bytesLoaded / (metrics.totalLoadTime / 1000);\n }\n };\n\n // Track stalls\n const onWaiting = () => {\n if (stallStartTime === null) {\n stallStartTime = performance.now();\n metrics.stallsCount++;\n }\n };\n\n const onPlaying = () => {\n if (stallStartTime !== null) {\n metrics.stallsDuration += performance.now() - stallStartTime;\n stallStartTime = null;\n }\n updateMetrics();\n };\n\n // Track progress\n const onProgress = () => {\n if (element.buffered.length > 0) {\n const bufferedBytes = element.buffered.end(0) * 1000; // Rough estimate\n metrics.bytesLoaded = bufferedBytes;\n }\n updateMetrics();\n };\n\n // Add event listeners\n element.addEventListener('loadstart', onLoadStart);\n element.addEventListener('canplay', onCanPlay);\n element.addEventListener('waiting', onWaiting);\n element.addEventListener('playing', onPlaying);\n element.addEventListener('progress', onProgress);\n\n // Cleanup function\n const cleanup = () => {\n element.removeEventListener('loadstart', onLoadStart);\n element.removeEventListener('canplay', onCanPlay);\n element.removeEventListener('waiting', onWaiting);\n element.removeEventListener('playing', onPlaying);\n element.removeEventListener('progress', onProgress);\n };\n\n // Auto-cleanup after 5 minutes\n setTimeout(cleanup, 5 * 60 * 1000);\n }\n\n // Apply quality settings (would integrate with HLS.js or similar)\n private applyQualitySettings(element: HTMLMediaElement, quality: string) {\n // This would integrate with your video streaming library\n console.log(`Applying quality setting: ${quality} to`, element);\n \n // Example integration with HLS.js:\n // if (element.hls) {\n // element.hls.currentLevel = this.getQualityLevel(quality);\n // }\n }\n\n private adjustQualityForNetwork(networkInfo: NetworkInfo) {\n // Auto-adjust quality for all active media elements\n console.log('Adjusting quality for network conditions:', networkInfo.effectiveType);\n }\n\n // Clear preload cache to save memory\n clearPreloadCache() {\n this.preloadCache.clear();\n }\n\n // Get loading metrics for a specific media URL\n getLoadingMetrics(url: string): MediaLoadingMetrics | undefined {\n return this.loadingMetrics.get(url);\n }\n\n // Get all loading metrics\n getAllMetrics(): MediaLoadingMetrics[] {\n return Array.from(this.loadingMetrics.values());\n }\n\n // Calculate average loading performance\n getAverageLoadingTime(): number {\n const metrics = this.getAllMetrics();\n const completedLoads = metrics.filter(m => m.totalLoadTime !== undefined);\n \n if (completedLoads.length === 0) return 0;\n \n const total = completedLoads.reduce((sum, m) => sum + (m.totalLoadTime || 0), 0);\n return total / completedLoads.length;\n }\n\n // Get network-specific performance stats\n getNetworkPerformanceStats(): {\n networkType: string;\n avgLoadTime: number;\n avgStalls: number;\n avgBufferHealth: number;\n }[] {\n const statsByNetwork = new Map<string, MediaLoadingMetrics[]>();\n \n this.getAllMetrics().forEach(metrics => {\n const network = metrics.networkType;\n if (!statsByNetwork.has(network)) {\n statsByNetwork.set(network, []);\n }\n statsByNetwork.get(network)!.push(metrics);\n });\n\n return Array.from(statsByNetwork.entries()).map(([networkType, metrics]) => ({\n networkType,\n avgLoadTime: metrics.reduce((sum, m) => sum + (m.totalLoadTime || 0), 0) / metrics.length,\n avgStalls: metrics.reduce((sum, m) => sum + m.stallsCount, 0) / metrics.length,\n avgBufferHealth: metrics.reduce((sum, m) => sum + m.bufferHealth, 0) / metrics.length\n }));\n }\n}\n\n// Global media loading optimizer instance\nexport const mediaLoadingOptimizer = new MediaLoadingOptimizer();\n\n// React hook for media loading optimization\nexport function useMediaLoadingOptimizer(config?: Partial<MediaLoadingConfig>) {\n const [optimizer] = React.useState(() => \n config ? new MediaLoadingOptimizer(config) : mediaLoadingOptimizer\n );\n \n const [networkInfo, setNetworkInfo] = React.useState<NetworkInfo | null>(null);\n const [loadingMetrics, setLoadingMetrics] = React.useState<MediaLoadingMetrics[]>([]);\n\n React.useEffect(() => {\n const unsubscribe = optimizer['networkMonitor'].subscribe(setNetworkInfo);\n setNetworkInfo(optimizer['networkMonitor'].getCurrentNetworkInfo());\n\n // Update metrics periodically\n const interval = setInterval(() => {\n setLoadingMetrics(optimizer.getAllMetrics());\n }, 1000);\n\n return () => {\n unsubscribe();\n clearInterval(interval);\n };\n }, [optimizer]);\n\n const optimizeLoading = React.useCallback(\n (mediaUrl: string, element: HTMLMediaElement, options?: any) => {\n return optimizer.optimizeMediaLoading(mediaUrl, element, options);\n },\n [optimizer]\n );\n\n return {\n networkInfo,\n loadingMetrics,\n optimizeLoading,\n averageLoadTime: optimizer.getAverageLoadingTime(),\n networkStats: optimizer.getNetworkPerformanceStats()\n };\n}","import React, { createContext, useContext, useMemo } from 'react'\nimport { EventBus } from '../events'\nimport { PluginRegistry, ConsolePluginLogger } from '../plugins'\n\n// Service interfaces\nexport interface MediaService {\n loadMedia(src: string): Promise<void>\n play(): Promise<void>\n pause(): Promise<void>\n seek(time: number): Promise<void>\n setVolume(volume: number): Promise<void>\n}\n\nexport interface StorageService {\n get<T>(key: string): T | null\n set<T>(key: string, value: T): void\n remove(key: string): void\n clear(): void\n}\n\nexport interface AnalyticsService {\n track(event: string, data?: any): void\n identify(userId: string, traits?: any): void\n page(name: string, properties?: any): void\n}\n\nexport interface LoggerService {\n info(message: string, data?: any): void\n warn(message: string, data?: any): void\n error(message: string, data?: any): void\n debug(message: string, data?: any): void\n}\n\n// Service implementations\nclass LocalStorageService implements StorageService {\n get<T>(key: string): T | null {\n try {\n const item = localStorage.getItem(`baroi-player-${key}`)\n return item ? JSON.parse(item) as T : null\n } catch {\n return null\n }\n }\n\n set<T>(key: string, value: T): void {\n try {\n localStorage.setItem(`baroi-player-${key}`, JSON.stringify(value))\n } catch (error) {\n console.warn('Failed to store data:', error)\n }\n }\n\n remove(key: string): void {\n try {\n localStorage.removeItem(`baroi-player-${key}`)\n } catch (error) {\n console.warn('Failed to remove data:', error)\n }\n }\n\n clear(): void {\n try {\n Object.keys(localStorage).forEach(key => {\n if (key.startsWith('baroi-player-')) {\n localStorage.removeItem(key)\n }\n })\n } catch (error) {\n console.warn('Failed to clear data:', error)\n }\n }\n}\n\nclass NoOpAnalyticsService implements AnalyticsService {\n track(event: string, data?: any): void {\n console.log('Analytics:', event, data)\n }\n\n identify(userId: string, traits?: any): void {\n console.log('Analytics identify:', userId, traits)\n }\n\n page(name: string, properties?: any): void {\n console.log('Analytics page:', name, properties)\n }\n}\n\n// Service container\nexport interface ServiceContainer {\n eventBus: EventBus\n pluginRegistry: PluginRegistry\n storage: StorageService\n analytics: AnalyticsService\n logger: LoggerService\n}\n\n// Service provider context\nconst ServiceContext = createContext<ServiceContainer | null>(null)\n\n// Service provider props\nexport interface ServiceProviderProps {\n children: React.ReactNode\n services?: Partial<ServiceContainer>\n}\n\n// Service provider component\nexport function ServiceProvider({ children, services = {} }: ServiceProviderProps) {\n const container = useMemo<ServiceContainer>(() => {\n const logger = services.logger || new ConsolePluginLogger('[BaroiPlayer]')\n const eventBus = services.eventBus || new EventBus()\n const pluginRegistry = services.pluginRegistry || new PluginRegistry(logger)\n const storage = services.storage || new LocalStorageService()\n const analytics = services.analytics || new NoOpAnalyticsService()\n\n return {\n eventBus,\n pluginRegistry,\n storage,\n analytics,\n logger\n }\n }, [services])\n\n return (\n <ServiceContext.Provider value={container}>\n {children}\n </ServiceContext.Provider>\n )\n}\n\n// Service hooks\nexport function useServices(): ServiceContainer {\n const context = useContext(ServiceContext)\n if (!context) {\n throw new Error('useServices must be used within ServiceProvider')\n }\n return context\n}\n\nexport function useServiceEventBus(): EventBus {\n return useServices().eventBus\n}\n\nexport function usePluginRegistry(): PluginRegistry {\n return useServices().pluginRegistry\n}\n\nexport function useStorage(): StorageService {\n return useServices().storage\n}\n\nexport function useAnalytics(): AnalyticsService {\n return useServices().analytics\n}\n\nexport function useLogger(): LoggerService {\n return useServices().logger\n}\n\n// Service decorators for dependency injection\nexport function withServices<P extends object>(\n Component: React.ComponentType<P & { services: ServiceContainer }>\n): React.ComponentType<P> {\n return function WithServicesComponent(props: P) {\n const services = useServices()\n return <Component {...props} services={services} />\n }\n}","import React from 'react'\nimport { EventBus } from './events'\nimport { PluginRegistry } from './plugins'\nimport { ServiceProvider, type ServiceContainer } from './providers/service-provider'\n\n// Architecture configuration\nexport interface ArchitectureConfig {\n plugins?: string[]\n services?: Partial<ServiceContainer>\n eventMiddleware?: any[]\n debug?: boolean\n}\n\n// Create architecture wrapper component\nexport function createArchitecture(config: ArchitectureConfig = {}) {\n return function ArchitectureProvider({ children }: { children: React.ReactNode }) {\n return (\n <ServiceProvider services={config.services}>\n {children}\n </ServiceProvider>\n )\n }\n}\n\n// Architecture health check\nexport async function healthCheck(services: ServiceContainer) {\n const results = {\n eventBus: {\n healthy: true,\n listenerCount: services.eventBus.getListenerCount(),\n eventTypes: services.eventBus.getEventTypes().length\n },\n plugins: await services.pluginRegistry.healthCheck(),\n timestamp: Date.now()\n }\n\n return results\n}","import React, { lazy, Suspense } from 'react';\n\n// Feature flags for progressive loading\nexport const FEATURES = {\n SUBTITLES: 'subtitles',\n PLAYLISTS: 'playlists', \n ADVANCED_CONTROLS: 'advanced_controls',\n ANALYTICS: 'analytics',\n PICTURE_IN_PICTURE: 'picture_in_picture',\n QUALITY_SELECTOR: 'quality_selector',\n PLAYBACK_SPEED: 'playback_speed',\n CHAPTERS: 'chapters',\n THUMBNAILS: 'thumbnails',\n KEYBOARD_SHORTCUTS: 'keyboard_shortcuts'\n} as const;\n\nexport type FeatureType = typeof FEATURES[keyof typeof FEATURES];\n\n// Progressive loading configuration\nexport interface ProgressiveLoadingConfig {\n enabledFeatures: FeatureType[];\n loadingStrategy: 'lazy' | 'preload' | 'immediate';\n fallbackTimeout: number;\n retryAttempts: number;\n}\n\nexport const defaultProgressiveConfig: ProgressiveLoadingConfig = {\n enabledFeatures: [\n FEATURES.SUBTITLES,\n FEATURES.ADVANCED_CONTROLS,\n FEATURES.KEYBOARD_SHORTCUTS\n ],\n loadingStrategy: 'lazy',\n fallbackTimeout: 5000,\n retryAttempts: 3\n};\n\n// Dynamic imports with error handling and retry logic\nexport const lazyComponents = {\n // Subtitle system\n SubtitleSelector: lazy(() => \n import('../components/enhanced/advanced-features')\n .then(module => ({ default: module.SubtitleSelector }))\n ),\n\n // Playlist functionality \n PlaylistManager: lazy(() =>\n import('../components/enhanced/advanced-features')\n .then(module => ({ default: module.SubtitleSelector })) // Use existing component as placeholder\n ),\n\n // Advanced controls\n QualitySelector: lazy(() =>\n import('../components/enhanced/advanced-features')\n .then(module => ({ default: module.QualitySelector }))\n ),\n\n PlaybackSpeedSelector: lazy(() =>\n import('../components/enhanced/advanced-features')\n .then(module => ({ default: module.PlaybackSpeedSelector }))\n ),\n\n ChaptersPanel: lazy(() =>\n import('../components/enhanced/advanced-features')\n .then(module => ({ default: module.ChaptersPanel }))\n ),\n\n PictureInPictureButton: lazy(() =>\n import('../components/enhanced/advanced-features')\n .then(module => ({ default: module.PictureInPictureButton }))\n ),\n\n // Analytics\n AnalyticsTracker: lazy(() =>\n import('../components/enhanced/advanced-features')\n .then(module => ({ default: module.SubtitleSelector })) // Use existing component as placeholder\n ),\n};\n\n// Feature detection utilities\nexport class FeatureDetector {\n private static cache = new Map<FeatureType, boolean>();\n\n static async isSupported(feature: FeatureType): Promise<boolean> {\n if (this.cache.has(feature)) {\n return this.cache.get(feature)!;\n }\n\n const supported = await this.checkFeatureSupport(feature);\n this.cache.set(feature, supported);\n return supported;\n }\n\n private static async checkFeatureSupport(feature: FeatureType): Promise<boolean> {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Server-side rendering - assume basic support\n return true;\n }\n\n switch (feature) {\n case FEATURES.SUBTITLES:\n return 'TextTrack' in window;\n \n case FEATURES.PICTURE_IN_PICTURE:\n return 'pictureInPictureEnabled' in document;\n \n case FEATURES.ADVANCED_CONTROLS:\n return true; // Always supported\n \n case FEATURES.PLAYLISTS:\n return 'MediaSession' in window;\n \n case FEATURES.ANALYTICS:\n return 'IntersectionObserver' in window;\n \n case FEATURES.QUALITY_SELECTOR:\n return 'MediaSource' in window;\n \n case FEATURES.PLAYBACK_SPEED:\n return true; // HTML5 video supports this\n \n case FEATURES.CHAPTERS:\n return 'TextTrack' in window;\n \n case FEATURES.THUMBNAILS:\n return 'OffscreenCanvas' in window || 'canvas' in document.createElement('canvas');\n \n case FEATURES.KEYBOARD_SHORTCUTS:\n return 'KeyboardEvent' in window;\n \n default:\n return false;\n }\n }\n}\n\n// Progressive loading manager\nexport class ProgressiveLoader {\n private config: ProgressiveLoadingConfig;\n private loadedFeatures = new Set<FeatureType>();\n private loadingPromises = new Map<FeatureType, Promise<any>>();\n\n constructor(config: Partial<ProgressiveLoadingConfig> = {}) {\n this.config = { ...defaultProgressiveConfig, ...config };\n }\n\n async loadFeature<T = any>(feature: FeatureType): Promise<T | null> {\n // Check if feature is enabled\n if (!this.config.enabledFeatures.includes(feature)) {\n return null;\n }\n\n // Check if already loaded\n if (this.loadedFeatures.has(feature)) {\n return this.getLoadedFeature(feature);\n }\n\n // Check if currently loading\n if (this.loadingPromises.has(feature)) {\n return this.loadingPromises.get(feature);\n }\n\n // Check browser support\n const isSupported = await FeatureDetector.isSupported(feature);\n if (!isSupported) {\n console.warn(`Feature ${feature} is not supported in this browser`);\n return null;\n }\n\n // Start loading with retry logic\n const loadingPromise = this.loadWithRetry(feature);\n this.loadingPromises.set(feature, loadingPromise);\n\n try {\n const result = await loadingPromise;\n this.loadedFeatures.add(feature);\n return result as T;\n } catch (error) {\n console.error(`Failed to load feature ${feature}:`, error);\n this.loadingPromises.delete(feature);\n return null;\n }\n }\n\n private async loadWithRetry<T>(feature: FeatureType, attempt = 1): Promise<T> {\n try {\n const result = await this.loadFeatureModule(feature);\n return result as T;\n } catch (error) {\n if (attempt < this.config.retryAttempts) {\n console.warn(`Loading feature ${feature} failed, retrying (${attempt}/${this.config.retryAttempts})`);\n await new Promise(resolve => setTimeout(resolve, 1000 * attempt));\n return this.loadWithRetry(feature, attempt + 1);\n }\n throw error;\n }\n }\n\n private async loadFeatureModule(feature: FeatureType) {\n switch (feature) {\n case FEATURES.SUBTITLES:\n return import('../hooks/useEnhancedSubtitles');\n \n case FEATURES.PLAYLISTS:\n return import('../components/enhanced/advanced-features'); // Use existing features\n \n case FEATURES.ADVANCED_CONTROLS:\n return import('../components/enhanced/advanced-features');\n \n case FEATURES.ANALYTICS:\n return import('../components/enhanced/advanced-features'); // Use existing features\n \n case FEATURES.PICTURE_IN_PICTURE:\n return import('../components/enhanced/advanced-features'); // Use existing features\n \n case FEATURES.QUALITY_SELECTOR:\n return import('../components/enhanced/advanced-features'); // Use existing features\n \n case FEATURES.PLAYBACK_SPEED:\n return import('../components/enhanced/advanced-features'); // Use existing features\n \n case FEATURES.CHAPTERS:\n return import('../components/enhanced/advanced-features'); // Use existing features\n \n case FEATURES.THUMBNAILS:\n return import('../components/enhanced/advanced-features'); // Use existing features\n \n case FEATURES.KEYBOARD_SHORTCUTS:\n return import('../hooks/use-keyboard-controls');\n \n default:\n throw new Error(`Unknown feature: ${feature}`);\n }\n }\n\n private getLoadedFeature(feature: FeatureType) {\n // Return cached feature instance\n return this.loadingPromises.get(feature);\n }\n\n // Preload features for faster access\n async preloadFeatures(features: FeatureType[] = this.config.enabledFeatures) {\n const preloadPromises = features.map(feature => this.loadFeature(feature));\n await Promise.allSettled(preloadPromises);\n }\n\n // Get loading state\n getLoadingState() {\n return {\n loaded: Array.from(this.loadedFeatures),\n loading: Array.from(this.loadingPromises.keys()),\n enabled: this.config.enabledFeatures\n };\n }\n}\n\n// Global progressive loader instance\nexport const progressiveLoader = new ProgressiveLoader();\n\n// React hook for progressive loading\nexport function useProgressiveFeature<T = any>(feature: FeatureType): {\n feature: T | null;\n loading: boolean;\n error: Error | null;\n load: () => Promise<void>;\n} {\n const [featureModule, setFeatureModule] = React.useState<T | null>(null);\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState<Error | null>(null);\n\n const load = React.useCallback(async () => {\n if (loading || featureModule) return;\n \n setLoading(true);\n setError(null);\n \n try {\n const module = await progressiveLoader.loadFeature<T>(feature);\n setFeatureModule(module);\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, [feature, loading, featureModule]);\n\n // Auto-load if strategy is immediate\n React.useEffect(() => {\n if (progressiveLoader['config'].loadingStrategy === 'immediate') {\n load();\n }\n }, [load]);\n\n return {\n feature: featureModule,\n loading,\n error,\n load\n };\n}\n\n// HOC for progressive feature loading\nexport function withProgressiveFeature<P extends object>(\n WrappedComponent: React.ComponentType<P>,\n feature: FeatureType,\n fallback?: React.ComponentType<P>\n) {\n return function ProgressiveFeatureWrapper(props: P) {\n const { feature: featureModule, loading, error } = useProgressiveFeature(feature);\n\n if (loading) {\n return <div className=\"h-8 animate-pulse rounded bg-gray-200\" />;\n }\n\n if (error || !featureModule) {\n const Fallback = fallback;\n return Fallback ? <Fallback {...props} /> : null;\n }\n\n return <WrappedComponent {...props} />;\n };\n}\n","// Core architecture exports\n\n// Plugin system\nexport * from './plugins'\n\n// Event system \nexport * from './events'\n\n// Service providers\nexport * from './providers/service-provider'\n\n// Version\nexport const CORE_ARCHITECTURE_VERSION = '1.0.0'\n\n// Architecture utilities\nexport { createArchitecture } from './utils'\n\n// Progressive loading system\nexport * from './progressive-loading'\n\n// Performance monitoring and testing\nexport * from './performance'\n"],"names":["PerformanceBenchmark","__publicField","PerformanceRegressionDetector","config","testFunction","renderTimes","memoryBefore","memoryAfter","error","i","startTime","endTime","err","averageRenderTime","sum","time","minRenderTime","maxRenderTime","memoryUsage","passed","result","componentName","renderFunction","expectedRenderTime","bundlePath","expectedLoadTime","response","iterations","memoryIncrease","hasMemoryLeak","interactionFunction","expectedDelay","currentMetrics","baselineMetrics","regressions","totalTests","passedTests","failedTests","passRate","summary","report","index","performanceBenchmark","performanceTestUtils","Component","props","hookFunction","hookName","expectedExecutionTime","operation","operationName","expectedTime","beforeFunction","afterFunction","featureName","beforeMemory","beforeTime","midMemory","midTime","afterMemory","afterTime","PerformanceTestFramework","suiteName","tests","testImplementations","results","test","implementation","implementations","allResults","suiteImplementations","performanceTestFramework","defaultPerformanceBudgets","PerformanceBudgetMonitor","budgets","alertConfig","budget","metricName","value","category","violations","name","violation","distPath","metrics","allViolations","now","v","message","channel","actualValue","overageAmount","overagePercentage","unit","bytes","updates","existing","since","byCategory","bySeverity","severity","performanceBudgetMonitor","defaultMediaLoadingConfig","NetworkMonitor","isOnline","newInfo","listener","blob","timeInSeconds","MediaLoadingOptimizer","networkInfo","mediaUrl","element","options","loadingStrategy","effectiveType","threshold","maxBitrate","availableBandwidth","url","maxSize","preloadPromise","reader","chunks","bytesRead","done","stallStartTime","updateMetrics","bufferedEnd","currentTime","onLoadStart","onCanPlay","onWaiting","onPlaying","onProgress","bufferedBytes","quality","completedLoads","m","statsByNetwork","network","networkType","mediaLoadingOptimizer","useMediaLoadingOptimizer","optimizer","React","setNetworkInfo","loadingMetrics","setLoadingMetrics","unsubscribe","interval","optimizeLoading","LocalStorageService","key","item","NoOpAnalyticsService","event","data","userId","traits","properties","ServiceContext","createContext","ServiceProvider","children","services","container","useMemo","logger","ConsolePluginLogger","eventBus","EventBus","pluginRegistry","PluginRegistry","storage","analytics","useServices","context","useContext","useServiceEventBus","usePluginRegistry","useStorage","useAnalytics","useLogger","withServices","jsx","createArchitecture","FEATURES","defaultProgressiveConfig","lazyComponents","lazy","n","module","FeatureDetector","feature","supported","ProgressiveLoader","loadingPromise","attempt","resolve","features","preloadPromises","progressiveLoader","useProgressiveFeature","featureModule","setFeatureModule","loading","setLoading","setError","load","withProgressiveFeature","WrappedComponent","fallback","Fallback","CORE_ARCHITECTURE_VERSION"],"mappings":"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"}