@therealtinhtute/baroiplayer 1.2.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/README.md +91 -73
  2. package/dist/components/icons/index.d.ts +36 -0
  3. package/dist/components/icons/index.d.ts.map +1 -0
  4. package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
  5. package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
  6. package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts +5 -0
  7. package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
  8. package/dist/components/icons/svg-icons/AudioIcon.d.ts +5 -0
  9. package/dist/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
  10. package/dist/components/icons/svg-icons/BackwardIcon.d.ts +5 -0
  11. package/dist/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
  12. package/dist/components/icons/svg-icons/CameraIcon.d.ts +5 -0
  13. package/dist/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
  14. package/dist/components/icons/svg-icons/CheckIcon.d.ts +5 -0
  15. package/dist/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
  16. package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
  17. package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
  18. package/dist/components/icons/svg-icons/ForwardIcon.d.ts +5 -0
  19. package/dist/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
  20. package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts +5 -0
  21. package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
  22. package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts +5 -0
  23. package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
  24. package/dist/components/icons/svg-icons/LoadingIcon.d.ts +5 -0
  25. package/dist/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
  26. package/dist/components/icons/svg-icons/PauseIcon.d.ts +5 -0
  27. package/dist/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
  28. package/dist/components/icons/svg-icons/PlayIcon.d.ts +5 -0
  29. package/dist/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
  30. package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +5 -0
  31. package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
  32. package/dist/components/icons/svg-icons/QualityIcon.d.ts +5 -0
  33. package/dist/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
  34. package/dist/components/icons/svg-icons/SettingsIcon.d.ts +5 -0
  35. package/dist/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
  36. package/dist/components/icons/svg-icons/SliderIcon.d.ts +5 -0
  37. package/dist/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
  38. package/dist/components/icons/svg-icons/SubtitleIcon.d.ts +5 -0
  39. package/dist/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
  40. package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts +5 -0
  41. package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
  42. package/dist/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
  43. package/dist/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
  44. package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts +5 -0
  45. package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
  46. package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts +5 -0
  47. package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
  48. package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts +5 -0
  49. package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
  50. package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts +5 -0
  51. package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
  52. package/dist/components/variants/gradient/gradient-audio.d.ts +13 -0
  53. package/dist/components/variants/gradient/gradient-audio.d.ts.map +1 -0
  54. package/dist/components/variants/gradient/gradient-controls.d.ts +4 -0
  55. package/dist/components/variants/gradient/gradient-controls.d.ts.map +1 -0
  56. package/dist/components/variants/gradient/gradient-glyphs.d.ts +30 -0
  57. package/dist/components/variants/gradient/gradient-glyphs.d.ts.map +1 -0
  58. package/dist/components/variants/gradient/gradient-video.d.ts +16 -0
  59. package/dist/components/variants/gradient/gradient-video.d.ts.map +1 -0
  60. package/dist/index.css +1 -1
  61. package/dist/index.d.ts +5 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +2 -112
  64. package/dist/index.js.map +1 -1
  65. package/dist/index.mjs +786 -6271
  66. package/dist/index.mjs.map +1 -1
  67. package/dist/package.json +3 -0
  68. package/package.json +110 -108
  69. package/src/components/variants/gradient/gradient-audio.tsx +47 -0
  70. package/src/components/variants/gradient/gradient-controls.tsx +254 -0
  71. package/src/components/variants/gradient/gradient-glyphs.test.tsx +69 -0
  72. package/src/components/variants/gradient/gradient-glyphs.tsx +129 -0
  73. package/src/components/variants/gradient/gradient-skin.css +211 -0
  74. package/src/components/variants/gradient/gradient-video.tsx +70 -0
  75. package/src/index.ts +5 -198
  76. package/src/test/accessibility-utils.ts +0 -59
  77. package/dist/context/media.js +0 -2
  78. package/dist/context/media.js.map +0 -1
  79. package/dist/context/media.mjs +0 -15
  80. package/dist/context/media.mjs.map +0 -1
  81. package/dist/context/store.js +0 -2
  82. package/dist/context/store.js.map +0 -1
  83. package/dist/context/store.mjs +0 -5
  84. package/dist/context/store.mjs.map +0 -1
  85. package/dist/context-BYwDoSRX.js +0 -1172
  86. package/dist/context-BYwDoSRX.js.map +0 -1
  87. package/dist/context-eNS62_ac.cjs +0 -23
  88. package/dist/context-eNS62_ac.cjs.map +0 -1
  89. package/dist/core-events-B1iM2F46.cjs +0 -2
  90. package/dist/core-events-B1iM2F46.cjs.map +0 -1
  91. package/dist/core-events-DunPHKRE.js +0 -484
  92. package/dist/core-events-DunPHKRE.js.map +0 -1
  93. package/dist/core-plugins-By-4-kGs.cjs +0 -2
  94. package/dist/core-plugins-By-4-kGs.cjs.map +0 -1
  95. package/dist/core-plugins-DSBWcTuX.js +0 -821
  96. package/dist/core-plugins-DSBWcTuX.js.map +0 -1
  97. package/dist/core.js +0 -37
  98. package/dist/core.js.map +0 -1
  99. package/dist/core.mjs +0 -1233
  100. package/dist/core.mjs.map +0 -1
  101. package/dist/enhanced-components-B_l3cist.js +0 -1142
  102. package/dist/enhanced-components-B_l3cist.js.map +0 -1
  103. package/dist/enhanced-components-BspFs9OO.cjs +0 -2
  104. package/dist/enhanced-components-BspFs9OO.cjs.map +0 -1
  105. package/dist/hooks-BXwI8QG6.cjs +0 -4
  106. package/dist/hooks-BXwI8QG6.cjs.map +0 -1
  107. package/dist/hooks-Bpi-jDiO.js +0 -1816
  108. package/dist/hooks-Bpi-jDiO.js.map +0 -1
  109. package/dist/minimal-components-C4z900Ro.js +0 -1926
  110. package/dist/minimal-components-C4z900Ro.js.map +0 -1
  111. package/dist/minimal-components-v4qBp6jv.cjs +0 -2
  112. package/dist/minimal-components-v4qBp6jv.cjs.map +0 -1
  113. package/dist/minimal-components.css +0 -1
  114. package/dist/mona-loading.gif +0 -0
  115. package/dist/performance-monitor-C5k6FDXw.js +0 -301
  116. package/dist/performance-monitor-C5k6FDXw.js.map +0 -1
  117. package/dist/performance-monitor-lJmuUjQQ.cjs +0 -2
  118. package/dist/performance-monitor-lJmuUjQQ.cjs.map +0 -1
  119. package/dist/utils-CFOue_9K.cjs +0 -9
  120. package/dist/utils-CFOue_9K.cjs.map +0 -1
  121. package/dist/utils-Dzpl2ArK.js +0 -2844
  122. package/dist/utils-Dzpl2ArK.js.map +0 -1
  123. package/dist/utils.js +0 -2
  124. package/dist/utils.js.map +0 -1
  125. package/dist/utils.mjs +0 -11
  126. package/dist/utils.mjs.map +0 -1
  127. package/src/adapters/videojs-adapter.tsx +0 -470
  128. package/src/assets/mona-loading.gif +0 -0
  129. package/src/components/AnimateLoading.tsx +0 -107
  130. package/src/components/LoadingState.tsx +0 -239
  131. package/src/components/__tests__/media-player-accessibility.test.tsx +0 -510
  132. package/src/components/__tests__/media-player-react19.test.tsx +0 -457
  133. package/src/components/accessibility/keyboard-help-overlay.tsx +0 -207
  134. package/src/components/audio-player.tsx +0 -85
  135. package/src/components/basic/index.ts +0 -37
  136. package/src/components/enhanced/advanced-features.tsx +0 -311
  137. package/src/components/enhanced/debug-panel.tsx +0 -448
  138. package/src/components/enhanced/enhanced-controls.tsx +0 -597
  139. package/src/components/enhanced/enhanced-media-player.tsx +0 -566
  140. package/src/components/enhanced/error-handling.tsx +0 -338
  141. package/src/components/enhanced/index.ts +0 -39
  142. package/src/components/enhanced/media-player-enhanced.tsx +0 -383
  143. package/src/components/examples/basic-video-player.tsx +0 -50
  144. package/src/components/examples/custom-controls-example.tsx +0 -63
  145. package/src/components/examples/enhanced-controls-example.tsx +0 -100
  146. package/src/components/examples/enhanced-media-player-example.tsx +0 -302
  147. package/src/components/examples/loading-states-demo.tsx +0 -142
  148. package/src/components/examples/react-19-demo.tsx +0 -353
  149. package/src/components/examples/volume-orientation-demo.tsx +0 -106
  150. package/src/components/icon-demo.tsx +0 -196
  151. package/src/components/legacy.tsx +0 -87
  152. package/src/components/media-metadata-display.tsx +0 -99
  153. package/src/components/media-player-audio.tsx +0 -39
  154. package/src/components/media-player-controls.tsx +0 -223
  155. package/src/components/media-player-error.tsx +0 -163
  156. package/src/components/media-player-fullscreen.tsx +0 -109
  157. package/src/components/media-player-hls.tsx +0 -111
  158. package/src/components/media-player-loading.tsx +0 -76
  159. package/src/components/media-player-play.tsx +0 -75
  160. package/src/components/media-player-root.tsx +0 -338
  161. package/src/components/media-player-seek.tsx +0 -168
  162. package/src/components/media-player-time.tsx +0 -99
  163. package/src/components/media-player-tooltip.tsx +0 -58
  164. package/src/components/media-player-video.tsx +0 -54
  165. package/src/components/media-player-volume.tsx +0 -155
  166. package/src/components/media-player.tsx +0 -292
  167. package/src/components/media-suspense.tsx +0 -344
  168. package/src/components/player-settings-form.tsx +0 -158
  169. package/src/components/react-player-wrapper.tsx +0 -651
  170. package/src/components/simple-video-player.tsx +0 -62
  171. package/src/components/ui/blur-poster.tsx +0 -93
  172. package/src/components/ui/empty-state.tsx +0 -91
  173. package/src/components/ui/enhanced-seek-bar.tsx +0 -254
  174. package/src/components/ui/error-state.tsx +0 -124
  175. package/src/components/ui/fullscreen-button.tsx +0 -81
  176. package/src/components/ui/loading-skeleton.tsx +0 -107
  177. package/src/components/ui/media-resource-preloader.tsx +0 -458
  178. package/src/components/ui/offline-message.tsx +0 -98
  179. package/src/components/ui/play-button.tsx +0 -99
  180. package/src/components/ui/seek-bar.tsx +0 -191
  181. package/src/components/ui/time-display.tsx +0 -61
  182. package/src/components/ui/volume-control.tsx +0 -190
  183. package/src/components/unified/base-media-player.tsx +0 -252
  184. package/src/components/unified/media-player.tsx +0 -75
  185. package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -587
  186. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -573
  187. package/src/components/variants/minimal/MinimalControls.tsx +0 -124
  188. package/src/components/variants/minimal/MinimalLoading.tsx +0 -28
  189. package/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -318
  190. package/src/components/variants/minimal/MinimalOverlay.tsx +0 -58
  191. package/src/components/variants/minimal/MinimalPlayButton.tsx +0 -56
  192. package/src/components/variants/minimal/MinimalSeekBar.tsx +0 -140
  193. package/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -75
  194. package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -206
  195. package/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
  196. package/src/components/variants/minimal/components/ControlBar.tsx +0 -142
  197. package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -412
  198. package/src/components/variants/minimal/components/PlaybackControls.tsx +0 -46
  199. package/src/components/variants/minimal/components/RightControls.tsx +0 -164
  200. package/src/components/variants/minimal/components/SeekBar.tsx +0 -127
  201. package/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -68
  202. package/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
  203. package/src/components/variants/minimal/components/TimeDisplay.tsx +0 -15
  204. package/src/components/variants/minimal/components/VideoElement.tsx +0 -33
  205. package/src/components/variants/minimal/components/VolumeControl.tsx +0 -220
  206. package/src/components/variants/minimal/index.ts +0 -23
  207. package/src/components/video-player.tsx +0 -100
  208. package/src/context/__tests__/media-store.test.ts +0 -509
  209. package/src/context/error-handling.ts +0 -398
  210. package/src/context/media-context.tsx +0 -254
  211. package/src/context/media-provider.tsx +0 -264
  212. package/src/context/media-store.ts +0 -387
  213. package/src/context/persistence.ts +0 -462
  214. package/src/core/events/event-system.ts +0 -448
  215. package/src/core/events/hooks.ts +0 -325
  216. package/src/core/events/index.ts +0 -22
  217. package/src/core/events/middleware.ts +0 -286
  218. package/src/core/index.ts +0 -22
  219. package/src/core/optimization/bundle-optimizer.tsx +0 -312
  220. package/src/core/performance/cicd.ts +0 -98
  221. package/src/core/performance/index.ts +0 -38
  222. package/src/core/performance/media-loading-optimizer.ts +0 -544
  223. package/src/core/performance/performance-budgets.ts +0 -437
  224. package/src/core/performance/performance-monitor.tsx +0 -488
  225. package/src/core/performance/performance-testing.ts +0 -461
  226. package/src/core/plugins/__tests__/registry.test.ts +0 -595
  227. package/src/core/plugins/base-plugin.ts +0 -225
  228. package/src/core/plugins/enhanced-plugin-system.ts +0 -435
  229. package/src/core/plugins/examples/analytics-plugin.ts +0 -241
  230. package/src/core/plugins/index.ts +0 -39
  231. package/src/core/plugins/registry.ts +0 -546
  232. package/src/core/plugins/types.ts +0 -169
  233. package/src/core/plugins/utils.ts +0 -317
  234. package/src/core/progressive-loading.tsx +0 -331
  235. package/src/core/providers/enhanced-hls-provider.ts +0 -307
  236. package/src/core/providers/lazy-provider.tsx +0 -14
  237. package/src/core/providers/service-provider.tsx +0 -164
  238. package/src/core/utils.tsx +0 -34
  239. package/src/features/media-session/media-session-manager.ts +0 -411
  240. package/src/features/picture-in-picture/pip-manager.ts +0 -428
  241. package/src/features/playlist/playlist-manager.ts +0 -626
  242. package/src/features/subtitles/subtitle-manager.ts +0 -435
  243. package/src/features/subtitles/subtitle-parser.ts +0 -284
  244. package/src/features/thumbnails/thumbnail-generator.ts +0 -528
  245. package/src/hooks/__tests__/currentTime-fix.test.ts +0 -149
  246. package/src/hooks/__tests__/use-media-player.test.ts +0 -712
  247. package/src/hooks/__tests__/use-media-state.test.tsx +0 -316
  248. package/src/hooks/accessibility/index.ts +0 -27
  249. package/src/hooks/accessibility/use-accessibility-preferences.ts +0 -190
  250. package/src/hooks/accessibility/use-focus-management.ts +0 -183
  251. package/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -152
  252. package/src/hooks/accessibility/use-screen-reader.ts +0 -212
  253. package/src/hooks/core/index.ts +0 -47
  254. package/src/hooks/legacy.ts +0 -21
  255. package/src/hooks/use-buffer-health.ts +0 -218
  256. package/src/hooks/use-enhanced-media-player.ts +0 -575
  257. package/src/hooks/use-focus-trap.tsx +0 -162
  258. package/src/hooks/use-intelligent-preloading.ts +0 -387
  259. package/src/hooks/use-keyboard-controls.ts +0 -115
  260. package/src/hooks/use-keyboard-shortcuts.ts +0 -255
  261. package/src/hooks/use-media-actions.ts +0 -184
  262. package/src/hooks/use-media-metadata.ts +0 -91
  263. package/src/hooks/use-media-optimistic.ts +0 -264
  264. package/src/hooks/use-media-player.ts +0 -343
  265. package/src/hooks/use-media-state.ts +0 -194
  266. package/src/hooks/use-memory-optimization.ts +0 -360
  267. package/src/hooks/use-network-status.ts +0 -124
  268. package/src/hooks/use-optimistic-controls.ts +0 -95
  269. package/src/hooks/use-optimized-media.ts +0 -283
  270. package/src/hooks/use-smart-preload.ts +0 -229
  271. package/src/hooks/use-touch-gestures.ts +0 -461
  272. package/src/hooks/useEnhancedSubtitles.ts +0 -258
  273. package/src/hooks/useKeyboardShortcuts.ts +0 -106
  274. package/src/hooks/useMediaControls.ts +0 -52
  275. package/src/hooks/useScreenshot.ts +0 -61
  276. package/src/hooks/useSubtitles.ts +0 -91
  277. package/src/hooks/useVideoPlayer.ts +0 -278
  278. package/src/icons/components/FullscreenIcon.tsx +0 -36
  279. package/src/icons/components/SettingsIcon.tsx +0 -37
  280. package/src/icons/components/animated/LoadingIcon.tsx +0 -27
  281. package/src/icons/components/animated/PlayPauseIcon.tsx +0 -42
  282. package/src/icons/components/media/PauseIcon.tsx +0 -38
  283. package/src/icons/components/media/PlayIcon.tsx +0 -37
  284. package/src/icons/components/volume/VolumeIcon.tsx +0 -38
  285. package/src/icons/components/volume/VolumeOffIcon.tsx +0 -38
  286. package/src/icons/index.ts +0 -56
  287. package/src/icons/provider.tsx +0 -58
  288. package/src/icons/types.ts +0 -60
  289. package/src/index-enhanced.ts +0 -35
  290. package/src/index-legacy.ts +0 -324
  291. package/src/index.css +0 -102
  292. package/src/lib/__tests__/async-utils.test.ts +0 -291
  293. package/src/lib/async-utils.ts +0 -194
  294. package/src/lib/deprecation.ts +0 -51
  295. package/src/lib/format-time.ts +0 -37
  296. package/src/lib/index.ts +0 -4
  297. package/src/lib/utils.ts +0 -6
  298. package/src/styles/globals.css +0 -462
  299. package/src/styles/minimal-player.css +0 -621
  300. package/src/styles/pixel-art.css +0 -41
  301. package/src/styles/videojs.css +0 -100
  302. package/src/types/events.ts +0 -47
  303. package/src/types/formats.ts +0 -79
  304. package/src/types/index.ts +0 -203
  305. package/src/types/videojs-plugins.d.ts +0 -14
@@ -1,325 +0,0 @@
1
- import React, { useEffect, useRef, useCallback, useMemo, useState } from "react"
2
- import {
3
- EventBus,
4
- type EventHandler,
5
- type EventOptions,
6
- type EventUnsubscriber,
7
- type MediaEvents
8
- } from "./event-system"
9
-
10
- // Hook to use event bus with React
11
- export function useEventBus(eventBus?: EventBus): EventBus {
12
- const [eventBusInstance, setEventBusInstance] = useState(() => eventBus || new EventBus())
13
-
14
- useEffect(() => {
15
- // If an external eventBus is provided, we don't manage its lifecycle
16
- if (eventBus) {
17
- setEventBusInstance(eventBus)
18
- return () => {
19
- // Don't destroy externally provided event bus
20
- }
21
- }
22
-
23
- return () => {
24
- // Cleanup internally created event bus on unmount
25
- eventBusInstance.destroy()
26
- }
27
- }, [eventBus, eventBusInstance])
28
-
29
- return eventBusInstance
30
- }
31
-
32
- // Hook to listen to events
33
- export function useEventListener<K extends keyof MediaEvents>(
34
- eventBus: EventBus,
35
- type: K,
36
- handler: EventHandler<MediaEvents[K]>,
37
- options?: EventOptions,
38
- deps?: React.DependencyList
39
- ): void {
40
- const handlerRef = useRef(handler)
41
- const optionsRef = useRef(options)
42
-
43
- // Update refs when dependencies change
44
- useEffect(() => {
45
- handlerRef.current = handler
46
- optionsRef.current = options
47
- })
48
-
49
- useEffect(() => {
50
- const unsubscribe = eventBus.on(type, handlerRef.current, optionsRef.current)
51
- return unsubscribe
52
- }, [eventBus, type])
53
- }
54
-
55
- // Hook to emit events
56
- export function useEventEmitter(eventBus: EventBus) {
57
- return useCallback(
58
- <K extends keyof MediaEvents>(
59
- type: K,
60
- detail?: MediaEvents[K],
61
- options?: Partial<MediaEvents[K]>
62
- ) => {
63
- return eventBus.emit(type, detail, options)
64
- },
65
- [eventBus]
66
- )
67
- }
68
-
69
- // Hook for one-time event listeners
70
- export function useEventOnce<K extends keyof MediaEvents>(
71
- eventBus: EventBus,
72
- type: K,
73
- handler: EventHandler<MediaEvents[K]>,
74
- deps?: React.DependencyList
75
- ): void {
76
- useEventListener(eventBus, type, handler, { once: true }, deps)
77
- }
78
-
79
- // Hook to create event handlers with automatic cleanup
80
- export function useEventHandlers(eventBus: EventBus) {
81
- const handlersRef = useRef<EventUnsubscriber[]>([])
82
-
83
- const addHandler = useCallback(
84
- <K extends keyof MediaEvents>(
85
- type: K,
86
- handler: EventHandler<MediaEvents[K]>,
87
- options?: EventOptions
88
- ) => {
89
- const unsubscribe = eventBus.on(type, handler, options)
90
- handlersRef.current.push(unsubscribe)
91
- return unsubscribe
92
- },
93
- [eventBus]
94
- )
95
-
96
- const removeAllHandlers = useCallback(() => {
97
- handlersRef.current.forEach((unsubscribe) => unsubscribe())
98
- handlersRef.current = []
99
- }, [])
100
-
101
- useEffect(() => {
102
- return removeAllHandlers
103
- }, [removeAllHandlers])
104
-
105
- return {
106
- on: addHandler,
107
- removeAll: removeAllHandlers
108
- }
109
- }
110
-
111
- // Hook for event history
112
- export function useEventHistory(
113
- eventBus: EventBus,
114
- filter?: (event: any) => boolean,
115
- maxSize = 100
116
- ) {
117
- const [history, setHistory] = useState<any[]>([])
118
-
119
- useEffect(() => {
120
- const unsubscribe = eventBus.addEventListener("*", (event) => {
121
- if (!filter || filter(event)) {
122
- setHistory((prevHistory) => {
123
- const newHistory = [...prevHistory, event]
124
-
125
- // Limit history size
126
- if (newHistory.length > maxSize) {
127
- return newHistory.slice(-maxSize)
128
- }
129
-
130
- return newHistory
131
- })
132
- }
133
- })
134
-
135
- return unsubscribe
136
- }, [eventBus, filter, maxSize])
137
-
138
- const clearHistory = useCallback(() => {
139
- setHistory([])
140
- }, [])
141
-
142
- return {
143
- history,
144
- clearHistory
145
- }
146
- }
147
-
148
- // Hook for event metrics/analytics
149
- export function useEventMetrics(eventBus: EventBus) {
150
- const metricsRef = useRef<
151
- Map<
152
- string,
153
- {
154
- count: number
155
- lastTimestamp: number
156
- frequency: number // events per second
157
- }
158
- >
159
- >(new Map())
160
-
161
- useEffect(() => {
162
- const updateMetrics = (event: any) => {
163
- const existing = metricsRef.current.get(event.type) || {
164
- count: 0,
165
- lastTimestamp: 0,
166
- frequency: 0
167
- }
168
-
169
- existing.count++
170
-
171
- if (existing.lastTimestamp > 0) {
172
- const timeDiff = (event.timestamp - existing.lastTimestamp) / 1000 // seconds
173
- existing.frequency = timeDiff > 0 ? 1 / timeDiff : 0
174
- }
175
-
176
- existing.lastTimestamp = event.timestamp
177
- metricsRef.current.set(event.type, existing)
178
- }
179
-
180
- const unsubscribe = eventBus.addEventListener("*", updateMetrics)
181
- return unsubscribe
182
- }, [eventBus])
183
-
184
- const getMetrics = useCallback(() => {
185
- return Object.fromEntries(metricsRef.current.entries())
186
- }, [])
187
-
188
- const resetMetrics = useCallback(() => {
189
- metricsRef.current.clear()
190
- }, [])
191
-
192
- return {
193
- getMetrics,
194
- resetMetrics
195
- }
196
- }
197
-
198
- // Hook for event debugging
199
- export function useEventDebugger(
200
- eventBus: EventBus,
201
- options: {
202
- logEvents?: boolean
203
- logMetrics?: boolean
204
- filterEventTypes?: string[]
205
- } = {}
206
- ) {
207
- const { logEvents = true, logMetrics = false, filterEventTypes } = options
208
-
209
- useEffect(() => {
210
- if (!logEvents) return
211
-
212
- const unsubscribe = eventBus.addEventListener("*", (event) => {
213
- if (filterEventTypes && !filterEventTypes.includes(event.type)) {
214
- return
215
- }
216
-
217
- console.group(`🎯 Event: ${event.type}`)
218
- console.log("Timestamp:", new Date(event.timestamp).toISOString())
219
- console.log("Detail:", event.detail)
220
- console.log("Bubbles:", event.bubbles)
221
- console.log("Cancelable:", event.cancelable)
222
- console.groupEnd()
223
- })
224
-
225
- return unsubscribe
226
- }, [eventBus, logEvents, filterEventTypes])
227
-
228
- useEffect(() => {
229
- if (!logMetrics) return
230
-
231
- const interval = setInterval(() => {
232
- const listenerCount = eventBus.getListenerCount()
233
- const eventTypes = eventBus.getEventTypes()
234
-
235
- console.group("📊 Event Metrics")
236
- console.log("Total Listeners:", listenerCount)
237
- console.log("Event Types:", eventTypes.length)
238
- console.log("Active Types:", eventTypes)
239
- console.groupEnd()
240
- }, 5000)
241
-
242
- return () => clearInterval(interval)
243
- }, [eventBus, logMetrics])
244
- }
245
-
246
- // Hook for conditional event handling
247
- export function useConditionalEventListener<K extends keyof MediaEvents>(
248
- eventBus: EventBus,
249
- type: K,
250
- handler: EventHandler<MediaEvents[K]>,
251
- condition: boolean | (() => boolean),
252
- options?: EventOptions,
253
- deps?: React.DependencyList
254
- ): void {
255
- const shouldListen = useMemo(() => {
256
- return typeof condition === "function" ? condition() : condition
257
- }, [condition])
258
-
259
- useEffect(() => {
260
- if (!shouldListen) return
261
-
262
- const unsubscribe = eventBus.on(type, handler, options)
263
- return unsubscribe
264
- }, [eventBus, type, shouldListen])
265
- }
266
-
267
- // Hook for event state synchronization
268
- export function useEventState<T>(
269
- eventBus: EventBus,
270
- initialValue: T,
271
- eventMapping: Record<string, (detail: any, currentValue: T) => T>
272
- ) {
273
- const [state, setState] = useState<T>(initialValue)
274
-
275
- useEffect(() => {
276
- const unsubscribers: EventUnsubscriber[] = []
277
-
278
- Object.entries(eventMapping).forEach(([eventType, updater]) => {
279
- const unsubscribe = eventBus.addEventListener(eventType, (event) => {
280
- setState((current) => updater(event.detail, current))
281
- })
282
- unsubscribers.push(unsubscribe)
283
- })
284
-
285
- return () => {
286
- unsubscribers.forEach((unsubscribe) => unsubscribe())
287
- }
288
- }, [eventBus, eventMapping])
289
-
290
- return state
291
- }
292
-
293
- // Hook for creating event-driven effects
294
- export function useEventEffect<K extends keyof MediaEvents>(
295
- eventBus: EventBus,
296
- type: K,
297
- effect: (detail: MediaEvents[K]) => void | (() => void),
298
- deps?: React.DependencyList
299
- ): void {
300
- const cleanupRef = useRef<(() => void) | void>(undefined)
301
-
302
- useEventListener(
303
- eventBus,
304
- type,
305
- useCallback((event) => {
306
- // Clean up previous effect
307
- if (typeof cleanupRef.current === "function") {
308
- cleanupRef.current()
309
- }
310
-
311
- // Run new effect
312
- cleanupRef.current = effect(event.detail)
313
- }, []),
314
- undefined,
315
- deps
316
- )
317
-
318
- useEffect(() => {
319
- return () => {
320
- if (typeof cleanupRef.current === "function") {
321
- cleanupRef.current()
322
- }
323
- }
324
- }, [])
325
- }
@@ -1,22 +0,0 @@
1
- // Event system exports
2
- export {
3
- EventBus,
4
- EventDelegator,
5
- defaultEventBus
6
- } from "./event-system"
7
-
8
- export type {
9
- MediaPlayerEvent,
10
- EventHandler,
11
- EventUnsubscriber,
12
- EventOptions,
13
- EventCategory,
14
- MediaEvents
15
- } from "./event-system"
16
-
17
- // Event utilities
18
- export * from "./middleware"
19
- export * from "./hooks"
20
-
21
- // Version
22
- export const EVENT_SYSTEM_VERSION = "1.0.0"
@@ -1,286 +0,0 @@
1
- import type { MediaPlayerEvent } from "./event-system"
2
-
3
- // Middleware function type
4
- export type EventMiddleware = (event: MediaPlayerEvent) => MediaPlayerEvent | null
5
-
6
- // Common middleware implementations
7
- export const eventMiddlewares = {
8
- // Logging middleware
9
- logger:
10
- (prefix = "[Event]"): EventMiddleware =>
11
- (event) => {
12
- if (process.env.NODE_ENV === "development") {
13
- console.log(`${prefix} ${event.type}`, event.detail)
14
- }
15
- return event
16
- },
17
-
18
- // Throttling middleware
19
- throttle: (eventTypes: string[], delay = 100): EventMiddleware => {
20
- const lastTimes = new Map<string, number>()
21
-
22
- return (event) => {
23
- if (eventTypes.includes(event.type)) {
24
- const lastTime = lastTimes.get(event.type) || 0
25
- const now = event.timestamp
26
-
27
- if (now - lastTime < delay) {
28
- return null // Throttle this event
29
- }
30
-
31
- lastTimes.set(event.type, now)
32
- }
33
-
34
- return event
35
- }
36
- },
37
-
38
- // Debouncing middleware
39
- debounce: (eventTypes: string[], delay = 100): EventMiddleware => {
40
- const timeouts = new Map<string, NodeJS.Timeout>()
41
- const eventQueue = new Map<string, MediaPlayerEvent>()
42
-
43
- return (event) => {
44
- if (eventTypes.includes(event.type)) {
45
- // Clear existing timeout
46
- const existingTimeout = timeouts.get(event.type)
47
- if (existingTimeout) {
48
- clearTimeout(existingTimeout)
49
- }
50
-
51
- // Store the latest event
52
- eventQueue.set(event.type, event)
53
-
54
- // Set new timeout
55
- const timeout = setTimeout(() => {
56
- const queuedEvent = eventQueue.get(event.type)
57
- if (queuedEvent) {
58
- // Process the debounced event
59
- // Note: This is a simplified approach - in a real implementation,
60
- // you'd need to re-inject the event into the processing pipeline
61
- eventQueue.delete(event.type)
62
- timeouts.delete(event.type)
63
- }
64
- }, delay)
65
-
66
- timeouts.set(event.type, timeout)
67
-
68
- return null // Don't process immediately
69
- }
70
-
71
- return event
72
- }
73
- },
74
-
75
- // Filtering middleware
76
- filter:
77
- (predicate: (event: MediaPlayerEvent) => boolean): EventMiddleware =>
78
- (event) => {
79
- return predicate(event) ? event : null
80
- },
81
-
82
- // Event transformation middleware
83
- transform:
84
- (transformer: (event: MediaPlayerEvent) => MediaPlayerEvent): EventMiddleware =>
85
- (event) => {
86
- try {
87
- return transformer(event)
88
- } catch (error) {
89
- console.error("Error in event transformer:", error)
90
- return event
91
- }
92
- },
93
-
94
- // Performance monitoring middleware
95
- performance: (): EventMiddleware => {
96
- const metrics = new Map<string, { count: number; totalTime: number }>()
97
-
98
- return (event) => {
99
- const startTime = performance.now()
100
-
101
- // Update metrics
102
- const existing = metrics.get(event.type) || { count: 0, totalTime: 0 }
103
- existing.count++
104
- existing.totalTime += performance.now() - startTime
105
- metrics.set(event.type, existing)
106
-
107
- // Log metrics periodically (every 100 events)
108
- if (existing.count % 100 === 0) {
109
- const avgTime = existing.totalTime / existing.count
110
- console.log(`Event ${event.type}: ${existing.count} calls, avg ${avgTime.toFixed(2)}ms`)
111
- }
112
-
113
- return event
114
- }
115
- },
116
-
117
- // Error handling middleware
118
- errorHandler:
119
- (onError?: (error: Error, event: MediaPlayerEvent) => void): EventMiddleware =>
120
- (event) => {
121
- try {
122
- // Validate event structure
123
- if (!event.type || typeof event.type !== "string") {
124
- throw new Error("Invalid event: missing or invalid type")
125
- }
126
-
127
- if (!event.timestamp || typeof event.timestamp !== "number") {
128
- throw new Error("Invalid event: missing or invalid timestamp")
129
- }
130
-
131
- return event
132
- } catch (error) {
133
- if (onError) {
134
- onError(error as Error, event)
135
- } else {
136
- console.error("Event validation error:", error)
137
- }
138
- return null
139
- }
140
- },
141
-
142
- // Security middleware (prevent certain events or sanitize data)
143
- security:
144
- (
145
- options: {
146
- blockedEventTypes?: string[]
147
- sanitizeDetail?: boolean
148
- maxDetailSize?: number
149
- } = {}
150
- ): EventMiddleware =>
151
- (event) => {
152
- const { blockedEventTypes = [], sanitizeDetail = true, maxDetailSize = 10000 } = options
153
-
154
- // Block certain event types
155
- if (blockedEventTypes.includes(event.type)) {
156
- console.warn(`Blocked event type: ${event.type}`)
157
- return null
158
- }
159
-
160
- // Sanitize detail if needed
161
- if (sanitizeDetail && event.detail) {
162
- try {
163
- const detailStr = JSON.stringify(event.detail)
164
- if (detailStr.length > maxDetailSize) {
165
- console.warn(`Event detail too large, truncating: ${event.type}`)
166
- event.detail = { ...event.detail, _truncated: true }
167
- }
168
- } catch (error) {
169
- console.warn(`Failed to serialize event detail: ${event.type}`)
170
- event.detail = { _serializationError: true }
171
- }
172
- }
173
-
174
- return event
175
- },
176
-
177
- // Conditional middleware
178
- when:
179
- (
180
- condition: (event: MediaPlayerEvent) => boolean,
181
- middleware: EventMiddleware
182
- ): EventMiddleware =>
183
- (event) => {
184
- return condition(event) ? middleware(event) : event
185
- },
186
-
187
- // Chain multiple middleware
188
- chain:
189
- (...middlewares: EventMiddleware[]): EventMiddleware =>
190
- (event) => {
191
- let currentEvent: MediaPlayerEvent | null = event
192
-
193
- for (const middleware of middlewares) {
194
- if (currentEvent === null) break
195
- currentEvent = middleware(currentEvent)
196
- }
197
-
198
- return currentEvent
199
- }
200
- }
201
-
202
- // Middleware builder class
203
- export class MiddlewareBuilder {
204
- private middlewares: EventMiddleware[] = []
205
-
206
- // Add middleware
207
- use(middleware: EventMiddleware): this {
208
- this.middlewares.push(middleware)
209
- return this
210
- }
211
-
212
- // Add logging
213
- log(prefix?: string): this {
214
- return this.use(eventMiddlewares.logger(prefix))
215
- }
216
-
217
- // Add throttling
218
- throttle(eventTypes: string[], delay?: number): this {
219
- return this.use(eventMiddlewares.throttle(eventTypes, delay))
220
- }
221
-
222
- // Add debouncing
223
- debounce(eventTypes: string[], delay?: number): this {
224
- return this.use(eventMiddlewares.debounce(eventTypes, delay))
225
- }
226
-
227
- // Add filtering
228
- filter(predicate: (event: MediaPlayerEvent) => boolean): this {
229
- return this.use(eventMiddlewares.filter(predicate))
230
- }
231
-
232
- // Add transformation
233
- transform(transformer: (event: MediaPlayerEvent) => MediaPlayerEvent): this {
234
- return this.use(eventMiddlewares.transform(transformer))
235
- }
236
-
237
- // Add performance monitoring
238
- performance(): this {
239
- return this.use(eventMiddlewares.performance())
240
- }
241
-
242
- // Add error handling
243
- errorHandler(onError?: (error: Error, event: MediaPlayerEvent) => void): this {
244
- return this.use(eventMiddlewares.errorHandler(onError))
245
- }
246
-
247
- // Add security
248
- security(options?: Parameters<typeof eventMiddlewares.security>[0]): this {
249
- return this.use(eventMiddlewares.security(options))
250
- }
251
-
252
- // Add conditional middleware
253
- when(condition: (event: MediaPlayerEvent) => boolean, middleware: EventMiddleware): this {
254
- return this.use(eventMiddlewares.when(condition, middleware))
255
- }
256
-
257
- // Build the final middleware
258
- build(): EventMiddleware {
259
- return eventMiddlewares.chain(...this.middlewares)
260
- }
261
- }
262
-
263
- // Helper to create middleware builder
264
- export const createMiddleware = () => new MiddlewareBuilder()
265
-
266
- // Export commonly used middleware combinations
267
- export const commonMiddlewares = {
268
- // Development middleware stack
269
- development: () => createMiddleware().log("[Dev Event]").performance().errorHandler().build(),
270
-
271
- // Production middleware stack
272
- production: () =>
273
- createMiddleware()
274
- .security()
275
- .errorHandler()
276
- .throttle(["media:timeupdate", "user:mousemove"], 16) // ~60fps
277
- .build(),
278
-
279
- // Testing middleware stack
280
- testing: () =>
281
- createMiddleware()
282
- .errorHandler((error, event) => {
283
- throw new Error(`Event error in test: ${error.message} for event ${event.type}`)
284
- })
285
- .build()
286
- }
package/src/core/index.ts DELETED
@@ -1,22 +0,0 @@
1
- // Core architecture exports
2
-
3
- // Plugin system
4
- export * from "./plugins"
5
-
6
- // Event system
7
- export * from "./events"
8
-
9
- // Service providers
10
- export * from "./providers/service-provider"
11
-
12
- // Version
13
- export const CORE_ARCHITECTURE_VERSION = "1.0.0"
14
-
15
- // Architecture utilities
16
- export { createArchitecture } from "./utils"
17
-
18
- // Progressive loading system
19
- export * from "./progressive-loading"
20
-
21
- // Performance monitoring and testing
22
- export * from "./performance"