@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,301 +0,0 @@
1
- var p = Object.defineProperty;
2
- var g = (a, e, r) => e in a ? p(a, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : a[e] = r;
3
- var d = (a, e, r) => g(a, typeof e != "symbol" ? e + "" : e, r);
4
- import { j as t } from "./context-BYwDoSRX.js";
5
- import { useState as m, useEffect as h, useCallback as b, useRef as M } from "react";
6
- const x = {
7
- lcp: { good: 2500, poor: 4e3 },
8
- fid: { good: 100, poor: 300 },
9
- cls: { good: 0.1, poor: 0.25 },
10
- renderTime: { good: 16, poor: 100 },
11
- // Target 60fps = 16.67ms per frame
12
- memoryUsage: { good: 50 * 1024 * 1024, poor: 100 * 1024 * 1024 }
13
- // 50MB good, 100MB poor
14
- };
15
- class v {
16
- constructor(e = x) {
17
- d(this, "metrics", []);
18
- d(this, "listeners", /* @__PURE__ */ new Set());
19
- d(this, "thresholds");
20
- d(this, "observer");
21
- d(this, "isMonitoring", !1);
22
- this.thresholds = e, this.initializeWebVitals(), this.initializePerformanceObserver();
23
- }
24
- async initializeWebVitals() {
25
- if (!(typeof window > "u"))
26
- try {
27
- const e = await import("web-vitals").catch(() => null);
28
- if (!e) {
29
- console.warn("web-vitals package not available, Core Web Vitals tracking disabled");
30
- return;
31
- }
32
- const r = (o) => {
33
- this.updateMetric(o.name.toLowerCase(), o.value);
34
- }, s = e;
35
- s.getCLS && s.getCLS(r), s.getFID && s.getFID(r), s.getFCP && s.getFCP(r), s.getLCP && s.getLCP(r), s.getTTFB && s.getTTFB(r), s.onINP && s.onINP(r);
36
- } catch (e) {
37
- console.warn("Web Vitals initialization failed:", e);
38
- }
39
- }
40
- initializePerformanceObserver() {
41
- if (!(typeof window > "u" || !("PerformanceObserver" in window)))
42
- try {
43
- this.observer = new PerformanceObserver((e) => {
44
- for (const r of e.getEntries())
45
- this.handlePerformanceEntry(r);
46
- }), this.observer.observe({ entryTypes: ["measure", "navigation", "resource", "paint"] });
47
- } catch (e) {
48
- console.warn("PerformanceObserver not supported:", e);
49
- }
50
- }
51
- handlePerformanceEntry(e) {
52
- switch (e.entryType) {
53
- case "measure":
54
- e.name.startsWith("baroiplayer-render") && this.updateMetric("componentRenderTime", e.duration);
55
- break;
56
- case "resource":
57
- (e.name.includes(".js") || e.name.includes(".css")) && this.updateMetric("bundleLoadTime", e.duration);
58
- break;
59
- case "paint":
60
- e.name === "first-contentful-paint" && this.updateMetric("fcp", e.startTime);
61
- break;
62
- }
63
- }
64
- updateMetric(e, r) {
65
- const s = this.getCurrentMetrics(), o = {
66
- ...s,
67
- [e]: r,
68
- timestamp: Date.now(),
69
- performanceScore: this.calculatePerformanceScore({ ...s, [e]: r })
70
- };
71
- this.metrics.push(o), this.metrics.length > 100 && (this.metrics = this.metrics.slice(-100)), this.listeners.forEach((i) => i(o));
72
- }
73
- getCurrentMetrics() {
74
- return this.metrics[this.metrics.length - 1] || {
75
- componentRenderTime: 0,
76
- bundleLoadTime: 0,
77
- mediaLoadTime: 0,
78
- memoryUsage: this.getMemoryUsage(),
79
- performanceScore: 0,
80
- timestamp: Date.now()
81
- };
82
- }
83
- getMemoryUsage() {
84
- return "memory" in performance && performance.memory.usedJSHeapSize || 0;
85
- }
86
- calculatePerformanceScore(e) {
87
- let r = 100;
88
- return e.lcp && e.lcp > this.thresholds.lcp.good && (r -= e.lcp > this.thresholds.lcp.poor ? 30 : 15), e.fid && e.fid > this.thresholds.fid.good && (r -= e.fid > this.thresholds.fid.poor ? 25 : 10), e.cls && e.cls > this.thresholds.cls.good && (r -= e.cls > this.thresholds.cls.poor ? 20 : 10), e.componentRenderTime > this.thresholds.renderTime.good && (r -= e.componentRenderTime > this.thresholds.renderTime.poor ? 20 : 10), e.memoryUsage > this.thresholds.memoryUsage.good && (r -= e.memoryUsage > this.thresholds.memoryUsage.poor ? 15 : 5), Math.max(0, r);
89
- }
90
- // Public API
91
- startMonitoring() {
92
- this.isMonitoring = !0, this.startMemoryMonitoring();
93
- }
94
- stopMonitoring() {
95
- this.isMonitoring = !1, this.observer && this.observer.disconnect();
96
- }
97
- startMemoryMonitoring() {
98
- this.isMonitoring && (this.updateMetric("memoryUsage", this.getMemoryUsage()), setTimeout(() => this.startMemoryMonitoring(), 5e3));
99
- }
100
- measureComponentRender(e, r) {
101
- const s = `baroiplayer-render-${e}-start`, o = `baroiplayer-render-${e}-end`, i = `baroiplayer-render-${e}`;
102
- performance.mark(s);
103
- const c = r();
104
- performance.mark(o);
105
- try {
106
- performance.measure(i, s, o);
107
- } catch (n) {
108
- console.warn("Performance measurement failed:", n);
109
- }
110
- return c;
111
- }
112
- subscribe(e) {
113
- return this.listeners.add(e), () => this.listeners.delete(e);
114
- }
115
- getLatestMetrics() {
116
- return this.metrics[this.metrics.length - 1] || null;
117
- }
118
- getAllMetrics() {
119
- return [...this.metrics];
120
- }
121
- getAverageMetrics(e = 10) {
122
- const r = this.metrics.slice(-e);
123
- if (r.length === 0) return {};
124
- const s = {};
125
- return [
126
- "lcp",
127
- "fid",
128
- "cls",
129
- "fcp",
130
- "ttfb",
131
- "inp",
132
- "componentRenderTime",
133
- "bundleLoadTime",
134
- "mediaLoadTime",
135
- "memoryUsage",
136
- "performanceScore"
137
- ].forEach((i) => {
138
- const c = r.map((n) => n[i]).filter((n) => typeof n == "number" && !isNaN(n));
139
- c.length > 0 && (s[i] = c.reduce((n, u) => n + u, 0) / c.length);
140
- }), s;
141
- }
142
- getThresholds() {
143
- return this.thresholds;
144
- }
145
- updateThresholds(e) {
146
- this.thresholds = { ...this.thresholds, ...e };
147
- }
148
- }
149
- const l = new v();
150
- function f() {
151
- const [a, e] = m(null), [r, s] = m(!0);
152
- h(() => {
153
- if (s(typeof window < "u" && "performance" in window), !r) return;
154
- l.startMonitoring();
155
- const i = l.subscribe(e);
156
- return () => {
157
- i(), l.stopMonitoring();
158
- };
159
- }, [r]);
160
- const o = b((i, c) => l.measureComponentRender(i, c), []);
161
- return {
162
- metrics: a,
163
- isSupported: r,
164
- measureRender: o,
165
- averageMetrics: l.getAverageMetrics(),
166
- allMetrics: l.getAllMetrics(),
167
- thresholds: l.getThresholds()
168
- };
169
- }
170
- function w(a, e) {
171
- const r = e || a.displayName || a.name || "Component";
172
- function s(o) {
173
- const i = M(0), { measureRender: c } = f(), n = m(() => Math.random())[0];
174
- return h(() => {
175
- i.current += 1;
176
- }), c(`${r}-${n}`, () => /* @__PURE__ */ t.jsx(a, { ...o }));
177
- }
178
- return s.displayName = `withPerformanceMonitoring(${r})`, s;
179
- }
180
- class P {
181
- constructor() {
182
- d(this, "baselineMetrics", null);
183
- d(this, "regressionThreshold", 0.2);
184
- }
185
- // 20% degradation threshold
186
- setBaseline(e) {
187
- this.baselineMetrics = e;
188
- }
189
- detectRegression(e) {
190
- if (!this.baselineMetrics) return [];
191
- const r = [];
192
- return [
193
- "componentRenderTime",
194
- "bundleLoadTime",
195
- "mediaLoadTime",
196
- "memoryUsage"
197
- ].forEach((o) => {
198
- const i = this.baselineMetrics[o], c = e[o];
199
- if (i && c && i > 0) {
200
- const n = (c - i) / i;
201
- n > this.regressionThreshold && r.push({ metric: o, baseline: i, current: c, degradation: n });
202
- }
203
- }), r;
204
- }
205
- setRegressionThreshold(e) {
206
- this.regressionThreshold = Math.max(0, Math.min(1, e));
207
- }
208
- }
209
- function S({
210
- className: a = "",
211
- showAdvanced: e = !1
212
- }) {
213
- const { metrics: r, averageMetrics: s, isSupported: o } = f();
214
- if (!o || !r)
215
- return /* @__PURE__ */ t.jsx("div", { className: `performance-dashboard ${a}`, children: /* @__PURE__ */ t.jsx("p", { children: "Performance monitoring not supported in this environment" }) });
216
- const i = (n) => n >= 90 ? "text-green-600" : n >= 70 ? "text-yellow-600" : "text-red-600", c = (n) => `${(n / 1024 / 1024).toFixed(2)} MB`;
217
- return /* @__PURE__ */ t.jsxs("div", { className: `performance-dashboard rounded-lg bg-white p-4 shadow ${a}`, children: [
218
- /* @__PURE__ */ t.jsx("h3", { className: "mb-4 font-semibold text-lg", children: "Performance Dashboard" }),
219
- /* @__PURE__ */ t.jsxs("div", { className: "mb-4", children: [
220
- /* @__PURE__ */ t.jsxs("div", { className: "flex items-center justify-between", children: [
221
- /* @__PURE__ */ t.jsx("span", { children: "Performance Score" }),
222
- /* @__PURE__ */ t.jsx("span", { className: `font-bold ${i(r.performanceScore)}`, children: r.performanceScore.toFixed(0) })
223
- ] }),
224
- /* @__PURE__ */ t.jsx("div", { className: "mt-1 h-2 w-full rounded-full bg-gray-200", children: /* @__PURE__ */ t.jsx(
225
- "div",
226
- {
227
- className: `h-2 rounded-full transition-all duration-300 ${r.performanceScore >= 90 ? "bg-green-500" : r.performanceScore >= 70 ? "bg-yellow-500" : "bg-red-500"}`,
228
- style: { width: `${r.performanceScore}%` }
229
- }
230
- ) })
231
- ] }),
232
- /* @__PURE__ */ t.jsxs("div", { className: "mb-4 grid grid-cols-2 gap-4", children: [
233
- /* @__PURE__ */ t.jsxs("div", { children: [
234
- /* @__PURE__ */ t.jsx("h4", { className: "mb-2 font-medium", children: "Core Web Vitals" }),
235
- /* @__PURE__ */ t.jsxs("div", { className: "space-y-1 text-sm", children: [
236
- r.lcp && /* @__PURE__ */ t.jsxs("div", { children: [
237
- "LCP: ",
238
- r.lcp.toFixed(0),
239
- "ms"
240
- ] }),
241
- r.fid && /* @__PURE__ */ t.jsxs("div", { children: [
242
- "FID: ",
243
- r.fid.toFixed(0),
244
- "ms"
245
- ] }),
246
- r.cls && /* @__PURE__ */ t.jsxs("div", { children: [
247
- "CLS: ",
248
- r.cls.toFixed(3)
249
- ] })
250
- ] })
251
- ] }),
252
- /* @__PURE__ */ t.jsxs("div", { children: [
253
- /* @__PURE__ */ t.jsx("h4", { className: "mb-2 font-medium", children: "Custom Metrics" }),
254
- /* @__PURE__ */ t.jsxs("div", { className: "space-y-1 text-sm", children: [
255
- /* @__PURE__ */ t.jsxs("div", { children: [
256
- "Render: ",
257
- r.componentRenderTime.toFixed(2),
258
- "ms"
259
- ] }),
260
- /* @__PURE__ */ t.jsxs("div", { children: [
261
- "Memory: ",
262
- c(r.memoryUsage)
263
- ] }),
264
- r.bundleLoadTime > 0 && /* @__PURE__ */ t.jsxs("div", { children: [
265
- "Bundle: ",
266
- r.bundleLoadTime.toFixed(0),
267
- "ms"
268
- ] })
269
- ] })
270
- ] })
271
- ] }),
272
- e && /* @__PURE__ */ t.jsxs("div", { children: [
273
- /* @__PURE__ */ t.jsx("h4", { className: "mb-2 font-medium", children: "Advanced Metrics" }),
274
- /* @__PURE__ */ t.jsxs("div", { className: "space-y-1 text-sm", children: [
275
- /* @__PURE__ */ t.jsxs("div", { children: [
276
- "Average Render Time: ",
277
- (s.componentRenderTime || 0).toFixed(2),
278
- "ms"
279
- ] }),
280
- /* @__PURE__ */ t.jsxs("div", { children: [
281
- "Average Memory: ",
282
- c(s.memoryUsage || 0)
283
- ] }),
284
- /* @__PURE__ */ t.jsxs("div", { children: [
285
- "Average Score: ",
286
- (s.performanceScore || 0).toFixed(0)
287
- ] })
288
- ] })
289
- ] })
290
- ] });
291
- }
292
- export {
293
- v as P,
294
- P as a,
295
- S as b,
296
- x as d,
297
- l as p,
298
- f as u,
299
- w
300
- };
301
- //# sourceMappingURL=performance-monitor-C5k6FDXw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"performance-monitor-C5k6FDXw.js","sources":["../src/core/performance/performance-monitor.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback, useReducer } from \"react\"\n// Import type safely with fallback\ntype ReportHandler = (metric: { name: string; value: number }) => void\n\n// Performance metrics types\nexport interface PerformanceMetrics {\n\t// Core Web Vitals\n\tlcp?: number // Largest Contentful Paint\n\tfid?: number // First Input Delay\n\tcls?: number // Cumulative Layout Shift\n\tfcp?: number // First Contentful Paint\n\tttfb?: number // Time to First Byte\n\tinp?: number // Interaction to Next Paint\n\n\t// Custom metrics\n\tcomponentRenderTime: number\n\tbundleLoadTime: number\n\tmediaLoadTime: number\n\tmemoryUsage: number\n\n\t// Performance scores\n\tperformanceScore: number\n\ttimestamp: number\n}\n\nexport interface PerformanceThresholds {\n\tlcp: { good: number; poor: number }\n\tfid: { good: number; poor: number }\n\tcls: { good: number; poor: number }\n\trenderTime: { good: number; poor: number }\n\tmemoryUsage: { good: number; poor: number }\n}\n\nexport const defaultThresholds: PerformanceThresholds = {\n\tlcp: { good: 2500, poor: 4000 },\n\tfid: { good: 100, poor: 300 },\n\tcls: { good: 0.1, poor: 0.25 },\n\trenderTime: { good: 16, poor: 100 }, // Target 60fps = 16.67ms per frame\n\tmemoryUsage: { good: 50 * 1024 * 1024, poor: 100 * 1024 * 1024 } // 50MB good, 100MB poor\n}\n\n// Performance monitoring class\nexport class PerformanceMonitor {\n\tprivate metrics: PerformanceMetrics[] = []\n\tprivate listeners: Set<(metrics: PerformanceMetrics) => void> = new Set()\n\tprivate thresholds: PerformanceThresholds\n\tprivate observer?: PerformanceObserver\n\tprivate isMonitoring = false\n\n\tconstructor(thresholds: PerformanceThresholds = defaultThresholds) {\n\t\tthis.thresholds = thresholds\n\t\tthis.initializeWebVitals()\n\t\tthis.initializePerformanceObserver()\n\t}\n\n\tprivate async initializeWebVitals() {\n\t\tif (typeof window === \"undefined\") return\n\n\t\ttry {\n\t\t\t// Try to import web-vitals dynamically and handle different versions\n\t\t\tconst webVitals = await import(\"web-vitals\").catch(() => null)\n\n\t\t\tif (!webVitals) {\n\t\t\t\tconsole.warn(\"web-vitals package not available, Core Web Vitals tracking disabled\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst reportHandler: ReportHandler = (metric) => {\n\t\t\t\tthis.updateMetric(metric.name.toLowerCase() as keyof PerformanceMetrics, metric.value)\n\t\t\t}\n\n\t\t\t// Handle different web-vitals versions safely\n\t\t\tconst vitalsAny = webVitals as any\n\t\t\tif (vitalsAny.getCLS) vitalsAny.getCLS(reportHandler)\n\t\t\tif (vitalsAny.getFID) vitalsAny.getFID(reportHandler)\n\t\t\tif (vitalsAny.getFCP) vitalsAny.getFCP(reportHandler)\n\t\t\tif (vitalsAny.getLCP) vitalsAny.getLCP(reportHandler)\n\t\t\tif (vitalsAny.getTTFB) vitalsAny.getTTFB(reportHandler)\n\t\t\tif (vitalsAny.onINP) vitalsAny.onINP(reportHandler)\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"Web Vitals initialization failed:\", error)\n\t\t}\n\t}\n\n\tprivate initializePerformanceObserver() {\n\t\tif (typeof window === \"undefined\" || !(\"PerformanceObserver\" in window)) return\n\n\t\ttry {\n\t\t\tthis.observer = new PerformanceObserver((list) => {\n\t\t\t\tfor (const entry of list.getEntries()) {\n\t\t\t\t\tthis.handlePerformanceEntry(entry)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.observer.observe({ entryTypes: [\"measure\", \"navigation\", \"resource\", \"paint\"] })\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"PerformanceObserver not supported:\", error)\n\t\t}\n\t}\n\n\tprivate handlePerformanceEntry(entry: PerformanceEntry) {\n\t\tswitch (entry.entryType) {\n\t\t\tcase \"measure\":\n\t\t\t\tif (entry.name.startsWith(\"baroiplayer-render\")) {\n\t\t\t\t\tthis.updateMetric(\"componentRenderTime\", entry.duration)\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"resource\":\n\t\t\t\tif (entry.name.includes(\".js\") || entry.name.includes(\".css\")) {\n\t\t\t\t\tthis.updateMetric(\"bundleLoadTime\", entry.duration)\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"paint\":\n\t\t\t\tif (entry.name === \"first-contentful-paint\") {\n\t\t\t\t\tthis.updateMetric(\"fcp\", entry.startTime)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate updateMetric(key: keyof PerformanceMetrics, value: number) {\n\t\tconst currentMetrics = this.getCurrentMetrics()\n\t\tconst updatedMetrics = {\n\t\t\t...currentMetrics,\n\t\t\t[key]: value,\n\t\t\ttimestamp: Date.now(),\n\t\t\tperformanceScore: this.calculatePerformanceScore({ ...currentMetrics, [key]: value })\n\t\t}\n\n\t\tthis.metrics.push(updatedMetrics)\n\n\t\t// Keep only last 100 metrics\n\t\tif (this.metrics.length > 100) {\n\t\t\tthis.metrics = this.metrics.slice(-100)\n\t\t}\n\n\t\tthis.listeners.forEach((listener) => listener(updatedMetrics))\n\t}\n\n\tprivate getCurrentMetrics(): PerformanceMetrics {\n\t\tconst latest = this.metrics[this.metrics.length - 1]\n\t\treturn (\n\t\t\tlatest || {\n\t\t\t\tcomponentRenderTime: 0,\n\t\t\t\tbundleLoadTime: 0,\n\t\t\t\tmediaLoadTime: 0,\n\t\t\t\tmemoryUsage: this.getMemoryUsage(),\n\t\t\t\tperformanceScore: 0,\n\t\t\t\ttimestamp: Date.now()\n\t\t\t}\n\t\t)\n\t}\n\n\tprivate getMemoryUsage(): number {\n\t\tif (\"memory\" in performance) {\n\t\t\treturn (performance as any).memory.usedJSHeapSize || 0\n\t\t}\n\t\treturn 0\n\t}\n\n\tprivate calculatePerformanceScore(metrics: PerformanceMetrics): number {\n\t\tlet score = 100\n\n\t\t// Penalize based on thresholds\n\t\tif (metrics.lcp && metrics.lcp > this.thresholds.lcp.good) {\n\t\t\tscore -= metrics.lcp > this.thresholds.lcp.poor ? 30 : 15\n\t\t}\n\n\t\tif (metrics.fid && metrics.fid > this.thresholds.fid.good) {\n\t\t\tscore -= metrics.fid > this.thresholds.fid.poor ? 25 : 10\n\t\t}\n\n\t\tif (metrics.cls && metrics.cls > this.thresholds.cls.good) {\n\t\t\tscore -= metrics.cls > this.thresholds.cls.poor ? 20 : 10\n\t\t}\n\n\t\tif (metrics.componentRenderTime > this.thresholds.renderTime.good) {\n\t\t\tscore -= metrics.componentRenderTime > this.thresholds.renderTime.poor ? 20 : 10\n\t\t}\n\n\t\tif (metrics.memoryUsage > this.thresholds.memoryUsage.good) {\n\t\t\tscore -= metrics.memoryUsage > this.thresholds.memoryUsage.poor ? 15 : 5\n\t\t}\n\n\t\treturn Math.max(0, score)\n\t}\n\n\t// Public API\n\tpublic startMonitoring() {\n\t\tthis.isMonitoring = true\n\t\tthis.startMemoryMonitoring()\n\t}\n\n\tpublic stopMonitoring() {\n\t\tthis.isMonitoring = false\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect()\n\t\t}\n\t}\n\n\tprivate startMemoryMonitoring() {\n\t\tif (!this.isMonitoring) return\n\n\t\tthis.updateMetric(\"memoryUsage\", this.getMemoryUsage())\n\t\tsetTimeout(() => this.startMemoryMonitoring(), 5000) // Check every 5 seconds\n\t}\n\n\tpublic measureComponentRender(componentName: string, renderFn: () => any): any {\n\t\tconst startMark = `baroiplayer-render-${componentName}-start`\n\t\tconst endMark = `baroiplayer-render-${componentName}-end`\n\t\tconst measureName = `baroiplayer-render-${componentName}`\n\n\t\tperformance.mark(startMark)\n\t\tconst result = renderFn()\n\t\tperformance.mark(endMark)\n\n\t\ttry {\n\t\t\tperformance.measure(measureName, startMark, endMark)\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"Performance measurement failed:\", error)\n\t\t}\n\n\t\treturn result\n\t}\n\n\tpublic subscribe(listener: (metrics: PerformanceMetrics) => void): () => void {\n\t\tthis.listeners.add(listener)\n\t\treturn () => this.listeners.delete(listener)\n\t}\n\n\tpublic getLatestMetrics(): PerformanceMetrics | null {\n\t\treturn this.metrics[this.metrics.length - 1] || null\n\t}\n\n\tpublic getAllMetrics(): PerformanceMetrics[] {\n\t\treturn [...this.metrics]\n\t}\n\n\tpublic getAverageMetrics(count = 10): Partial<PerformanceMetrics> {\n\t\tconst recentMetrics = this.metrics.slice(-count)\n\t\tif (recentMetrics.length === 0) return {}\n\n\t\tconst averages: Partial<PerformanceMetrics> = {}\n\t\tconst keys: Array<keyof PerformanceMetrics> = [\n\t\t\t\"lcp\",\n\t\t\t\"fid\",\n\t\t\t\"cls\",\n\t\t\t\"fcp\",\n\t\t\t\"ttfb\",\n\t\t\t\"inp\",\n\t\t\t\"componentRenderTime\",\n\t\t\t\"bundleLoadTime\",\n\t\t\t\"mediaLoadTime\",\n\t\t\t\"memoryUsage\",\n\t\t\t\"performanceScore\"\n\t\t]\n\n\t\tkeys.forEach((key) => {\n\t\t\tconst values = recentMetrics\n\t\t\t\t.map((m) => m[key] as number)\n\t\t\t\t.filter((v) => typeof v === \"number\" && !isNaN(v))\n\n\t\t\tif (values.length > 0) {\n\t\t\t\t;(averages as any)[key] = values.reduce((sum, v) => sum + v, 0) / values.length\n\t\t\t}\n\t\t})\n\n\t\treturn averages\n\t}\n\n\tpublic getThresholds(): PerformanceThresholds {\n\t\treturn this.thresholds\n\t}\n\n\tpublic updateThresholds(newThresholds: Partial<PerformanceThresholds>) {\n\t\tthis.thresholds = { ...this.thresholds, ...newThresholds }\n\t}\n}\n\n// Global performance monitor instance\nexport const performanceMonitor = new PerformanceMonitor()\n\n// React hook for performance monitoring\nexport function usePerformanceMonitor() {\n\tconst [metrics, setMetrics] = useState<PerformanceMetrics | null>(null)\n\tconst [isSupported, setIsSupported] = useState(true)\n\n\tuseEffect(() => {\n\t\tsetIsSupported(typeof window !== \"undefined\" && \"performance\" in window)\n\n\t\tif (!isSupported) return\n\n\t\tperformanceMonitor.startMonitoring()\n\t\tconst unsubscribe = performanceMonitor.subscribe(setMetrics)\n\n\t\treturn () => {\n\t\t\tunsubscribe()\n\t\t\tperformanceMonitor.stopMonitoring()\n\t\t}\n\t}, [isSupported])\n\n\tconst measureRender = useCallback((componentName: string, renderFn: () => any): any => {\n\t\treturn performanceMonitor.measureComponentRender(componentName, renderFn)\n\t}, [])\n\n\treturn {\n\t\tmetrics,\n\t\tisSupported,\n\t\tmeasureRender,\n\t\taverageMetrics: performanceMonitor.getAverageMetrics(),\n\t\tallMetrics: performanceMonitor.getAllMetrics(),\n\t\tthresholds: performanceMonitor.getThresholds()\n\t}\n}\n\n// HOC for performance monitoring\nexport function withPerformanceMonitoring(\n\tWrappedComponent: React.ComponentType<any>,\n\tcomponentName?: string\n) {\n\tconst displayName =\n\t\tcomponentName || WrappedComponent.displayName || WrappedComponent.name || \"Component\"\n\n\tfunction PerformanceMonitoredComponent(props: any) {\n\t\tconst renderRef = useRef(0)\n\t\tconst { measureRender } = usePerformanceMonitor()\n\n\t\t// Use a simple counter that increments during render but doesn't access the ref value\n\t\tconst renderKey = useState(() => Math.random())[0]\n\n\t\t// Update ref in effect to track count without accessing during render\n\t\tuseEffect(() => {\n\t\t\trenderRef.current += 1\n\t\t})\n\n\t\treturn measureRender(`${displayName}-${renderKey}`, () => <WrappedComponent {...props} />)\n\t}\n\n\tPerformanceMonitoredComponent.displayName = `withPerformanceMonitoring(${displayName})`\n\treturn PerformanceMonitoredComponent\n}\n\n// Performance regression detector\nexport class PerformanceRegressionDetector {\n\tprivate baselineMetrics: PerformanceMetrics | null = null\n\tprivate regressionThreshold = 0.2 // 20% degradation threshold\n\n\tsetBaseline(metrics: PerformanceMetrics) {\n\t\tthis.baselineMetrics = metrics\n\t}\n\n\tdetectRegression(currentMetrics: PerformanceMetrics): Array<{\n\t\tmetric: keyof PerformanceMetrics\n\t\tbaseline: number\n\t\tcurrent: number\n\t\tdegradation: number\n\t}> {\n\t\tif (!this.baselineMetrics) return []\n\n\t\tconst regressions: Array<{\n\t\t\tmetric: keyof PerformanceMetrics\n\t\t\tbaseline: number\n\t\t\tcurrent: number\n\t\t\tdegradation: number\n\t\t}> = []\n\n\t\tconst metricsToCheck: Array<keyof PerformanceMetrics> = [\n\t\t\t\"componentRenderTime\",\n\t\t\t\"bundleLoadTime\",\n\t\t\t\"mediaLoadTime\",\n\t\t\t\"memoryUsage\"\n\t\t]\n\n\t\tmetricsToCheck.forEach((metric) => {\n\t\t\tconst baseline = this.baselineMetrics![metric] as number\n\t\t\tconst current = currentMetrics[metric] as number\n\n\t\t\tif (baseline && current && baseline > 0) {\n\t\t\t\tconst degradation = (current - baseline) / baseline\n\t\t\t\tif (degradation > this.regressionThreshold) {\n\t\t\t\t\tregressions.push({ metric, baseline, current, degradation })\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\treturn regressions\n\t}\n\n\tsetRegressionThreshold(threshold: number) {\n\t\tthis.regressionThreshold = Math.max(0, Math.min(1, threshold))\n\t}\n}\n\n// Development dashboard component\nexport interface PerformanceDashboardProps {\n\tclassName?: string\n\tshowAdvanced?: boolean\n}\n\nexport function PerformanceDashboard({\n\tclassName = \"\",\n\tshowAdvanced = false\n}: PerformanceDashboardProps) {\n\tconst { metrics, averageMetrics, thresholds, isSupported } = usePerformanceMonitor()\n\n\tif (!isSupported || !metrics) {\n\t\treturn (\n\t\t\t<div className={`performance-dashboard ${className}`}>\n\t\t\t\t<p>Performance monitoring not supported in this environment</p>\n\t\t\t</div>\n\t\t)\n\t}\n\n\tconst getScoreColor = (score: number) => {\n\t\tif (score >= 90) return \"text-green-600\"\n\t\tif (score >= 70) return \"text-yellow-600\"\n\t\treturn \"text-red-600\"\n\t}\n\n\tconst formatBytes = (bytes: number) => {\n\t\treturn `${(bytes / 1024 / 1024).toFixed(2)} MB`\n\t}\n\n\treturn (\n\t\t<div className={`performance-dashboard rounded-lg bg-white p-4 shadow ${className}`}>\n\t\t\t<h3 className=\"mb-4 font-semibold text-lg\">Performance Dashboard</h3>\n\n\t\t\t{/* Performance Score */}\n\t\t\t<div className=\"mb-4\">\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<span>Performance Score</span>\n\t\t\t\t\t<span className={`font-bold ${getScoreColor(metrics.performanceScore)}`}>\n\t\t\t\t\t\t{metrics.performanceScore.toFixed(0)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-1 h-2 w-full rounded-full bg-gray-200\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`h-2 rounded-full transition-all duration-300 ${\n\t\t\t\t\t\t\tmetrics.performanceScore >= 90\n\t\t\t\t\t\t\t\t? \"bg-green-500\"\n\t\t\t\t\t\t\t\t: metrics.performanceScore >= 70\n\t\t\t\t\t\t\t\t\t? \"bg-yellow-500\"\n\t\t\t\t\t\t\t\t\t: \"bg-red-500\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={{ width: `${metrics.performanceScore}%` }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Core Web Vitals */}\n\t\t\t<div className=\"mb-4 grid grid-cols-2 gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h4 className=\"mb-2 font-medium\">Core Web Vitals</h4>\n\t\t\t\t\t<div className=\"space-y-1 text-sm\">\n\t\t\t\t\t\t{metrics.lcp && <div>LCP: {metrics.lcp.toFixed(0)}ms</div>}\n\t\t\t\t\t\t{metrics.fid && <div>FID: {metrics.fid.toFixed(0)}ms</div>}\n\t\t\t\t\t\t{metrics.cls && <div>CLS: {metrics.cls.toFixed(3)}</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<h4 className=\"mb-2 font-medium\">Custom Metrics</h4>\n\t\t\t\t\t<div className=\"space-y-1 text-sm\">\n\t\t\t\t\t\t<div>Render: {metrics.componentRenderTime.toFixed(2)}ms</div>\n\t\t\t\t\t\t<div>Memory: {formatBytes(metrics.memoryUsage)}</div>\n\t\t\t\t\t\t{metrics.bundleLoadTime > 0 && <div>Bundle: {metrics.bundleLoadTime.toFixed(0)}ms</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Advanced metrics */}\n\t\t\t{showAdvanced && (\n\t\t\t\t<div>\n\t\t\t\t\t<h4 className=\"mb-2 font-medium\">Advanced Metrics</h4>\n\t\t\t\t\t<div className=\"space-y-1 text-sm\">\n\t\t\t\t\t\t<div>Average Render Time: {(averageMetrics.componentRenderTime || 0).toFixed(2)}ms</div>\n\t\t\t\t\t\t<div>Average Memory: {formatBytes(averageMetrics.memoryUsage || 0)}</div>\n\t\t\t\t\t\t<div>Average Score: {(averageMetrics.performanceScore || 0).toFixed(0)}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nexport default PerformanceMonitor\n"],"names":["defaultThresholds","PerformanceMonitor","thresholds","__publicField","webVitals","reportHandler","metric","vitalsAny","error","list","entry","key","value","currentMetrics","updatedMetrics","listener","metrics","score","componentName","renderFn","startMark","endMark","measureName","result","count","recentMetrics","averages","values","m","v","sum","newThresholds","performanceMonitor","usePerformanceMonitor","setMetrics","useState","isSupported","setIsSupported","useEffect","unsubscribe","measureRender","useCallback","withPerformanceMonitoring","WrappedComponent","displayName","PerformanceMonitoredComponent","props","renderRef","useRef","renderKey","jsx","PerformanceRegressionDetector","regressions","baseline","current","degradation","threshold","PerformanceDashboard","className","showAdvanced","averageMetrics","getScoreColor","formatBytes","bytes","jsxs"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";var g=Object.create;var h=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var v=(i,e,r)=>e in i?h(i,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[e]=r;var y=(i,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of j(e))!R.call(i,o)&&o!==r&&h(i,o,{get:()=>e[o],enumerable:!(s=b(e,o))||s.enumerable});return i};var T=(i,e,r)=>(r=i!=null?g(M(i)):{},y(e||!i||!i.__esModule?h(r,"default",{value:i,enumerable:!0}):r,i));var d=(i,e,r)=>v(i,typeof e!="symbol"?e+"":e,r);const t=require("./context-eNS62_ac.cjs"),l=require("react"),f={lcp:{good:2500,poor:4e3},fid:{good:100,poor:300},cls:{good:.1,poor:.25},renderTime:{good:16,poor:100},memoryUsage:{good:50*1024*1024,poor:100*1024*1024}};class p{constructor(e=f){d(this,"metrics",[]);d(this,"listeners",new Set);d(this,"thresholds");d(this,"observer");d(this,"isMonitoring",!1);this.thresholds=e,this.initializeWebVitals(),this.initializePerformanceObserver()}async initializeWebVitals(){if(!(typeof window>"u"))try{const e=await import("web-vitals").catch(()=>null);if(!e){console.warn("web-vitals package not available, Core Web Vitals tracking disabled");return}const r=o=>{this.updateMetric(o.name.toLowerCase(),o.value)},s=e;s.getCLS&&s.getCLS(r),s.getFID&&s.getFID(r),s.getFCP&&s.getFCP(r),s.getLCP&&s.getLCP(r),s.getTTFB&&s.getTTFB(r),s.onINP&&s.onINP(r)}catch(e){console.warn("Web Vitals initialization failed:",e)}}initializePerformanceObserver(){if(!(typeof window>"u"||!("PerformanceObserver"in window)))try{this.observer=new PerformanceObserver(e=>{for(const r of e.getEntries())this.handlePerformanceEntry(r)}),this.observer.observe({entryTypes:["measure","navigation","resource","paint"]})}catch(e){console.warn("PerformanceObserver not supported:",e)}}handlePerformanceEntry(e){switch(e.entryType){case"measure":e.name.startsWith("baroiplayer-render")&&this.updateMetric("componentRenderTime",e.duration);break;case"resource":(e.name.includes(".js")||e.name.includes(".css"))&&this.updateMetric("bundleLoadTime",e.duration);break;case"paint":e.name==="first-contentful-paint"&&this.updateMetric("fcp",e.startTime);break}}updateMetric(e,r){const s=this.getCurrentMetrics(),o={...s,[e]:r,timestamp:Date.now(),performanceScore:this.calculatePerformanceScore({...s,[e]:r})};this.metrics.push(o),this.metrics.length>100&&(this.metrics=this.metrics.slice(-100)),this.listeners.forEach(n=>n(o))}getCurrentMetrics(){return this.metrics[this.metrics.length-1]||{componentRenderTime:0,bundleLoadTime:0,mediaLoadTime:0,memoryUsage:this.getMemoryUsage(),performanceScore:0,timestamp:Date.now()}}getMemoryUsage(){return"memory"in performance&&performance.memory.usedJSHeapSize||0}calculatePerformanceScore(e){let r=100;return e.lcp&&e.lcp>this.thresholds.lcp.good&&(r-=e.lcp>this.thresholds.lcp.poor?30:15),e.fid&&e.fid>this.thresholds.fid.good&&(r-=e.fid>this.thresholds.fid.poor?25:10),e.cls&&e.cls>this.thresholds.cls.good&&(r-=e.cls>this.thresholds.cls.poor?20:10),e.componentRenderTime>this.thresholds.renderTime.good&&(r-=e.componentRenderTime>this.thresholds.renderTime.poor?20:10),e.memoryUsage>this.thresholds.memoryUsage.good&&(r-=e.memoryUsage>this.thresholds.memoryUsage.poor?15:5),Math.max(0,r)}startMonitoring(){this.isMonitoring=!0,this.startMemoryMonitoring()}stopMonitoring(){this.isMonitoring=!1,this.observer&&this.observer.disconnect()}startMemoryMonitoring(){this.isMonitoring&&(this.updateMetric("memoryUsage",this.getMemoryUsage()),setTimeout(()=>this.startMemoryMonitoring(),5e3))}measureComponentRender(e,r){const s=`baroiplayer-render-${e}-start`,o=`baroiplayer-render-${e}-end`,n=`baroiplayer-render-${e}`;performance.mark(s);const c=r();performance.mark(o);try{performance.measure(n,s,o)}catch(a){console.warn("Performance measurement failed:",a)}return c}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}getLatestMetrics(){return this.metrics[this.metrics.length-1]||null}getAllMetrics(){return[...this.metrics]}getAverageMetrics(e=10){const r=this.metrics.slice(-e);if(r.length===0)return{};const s={};return["lcp","fid","cls","fcp","ttfb","inp","componentRenderTime","bundleLoadTime","mediaLoadTime","memoryUsage","performanceScore"].forEach(n=>{const c=r.map(a=>a[n]).filter(a=>typeof a=="number"&&!isNaN(a));c.length>0&&(s[n]=c.reduce((a,x)=>a+x,0)/c.length)}),s}getThresholds(){return this.thresholds}updateThresholds(e){this.thresholds={...this.thresholds,...e}}}const m=new p;function u(){const[i,e]=l.useState(null),[r,s]=l.useState(!0);l.useEffect(()=>{if(s(typeof window<"u"&&"performance"in window),!r)return;m.startMonitoring();const n=m.subscribe(e);return()=>{n(),m.stopMonitoring()}},[r]);const o=l.useCallback((n,c)=>m.measureComponentRender(n,c),[]);return{metrics:i,isSupported:r,measureRender:o,averageMetrics:m.getAverageMetrics(),allMetrics:m.getAllMetrics(),thresholds:m.getThresholds()}}function E(i,e){const r=e||i.displayName||i.name||"Component";function s(o){const n=l.useRef(0),{measureRender:c}=u(),a=l.useState(()=>Math.random())[0];return l.useEffect(()=>{n.current+=1}),c(`${r}-${a}`,()=>t.jsxRuntimeExports.jsx(i,{...o}))}return s.displayName=`withPerformanceMonitoring(${r})`,s}class w{constructor(){d(this,"baselineMetrics",null);d(this,"regressionThreshold",.2)}setBaseline(e){this.baselineMetrics=e}detectRegression(e){if(!this.baselineMetrics)return[];const r=[];return["componentRenderTime","bundleLoadTime","mediaLoadTime","memoryUsage"].forEach(o=>{const n=this.baselineMetrics[o],c=e[o];if(n&&c&&n>0){const a=(c-n)/n;a>this.regressionThreshold&&r.push({metric:o,baseline:n,current:c,degradation:a})}}),r}setRegressionThreshold(e){this.regressionThreshold=Math.max(0,Math.min(1,e))}}function P({className:i="",showAdvanced:e=!1}){const{metrics:r,averageMetrics:s,isSupported:o}=u();if(!o||!r)return t.jsxRuntimeExports.jsx("div",{className:`performance-dashboard ${i}`,children:t.jsxRuntimeExports.jsx("p",{children:"Performance monitoring not supported in this environment"})});const n=a=>a>=90?"text-green-600":a>=70?"text-yellow-600":"text-red-600",c=a=>`${(a/1024/1024).toFixed(2)} MB`;return t.jsxRuntimeExports.jsxs("div",{className:`performance-dashboard rounded-lg bg-white p-4 shadow ${i}`,children:[t.jsxRuntimeExports.jsx("h3",{className:"mb-4 font-semibold text-lg",children:"Performance Dashboard"}),t.jsxRuntimeExports.jsxs("div",{className:"mb-4",children:[t.jsxRuntimeExports.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxRuntimeExports.jsx("span",{children:"Performance Score"}),t.jsxRuntimeExports.jsx("span",{className:`font-bold ${n(r.performanceScore)}`,children:r.performanceScore.toFixed(0)})]}),t.jsxRuntimeExports.jsx("div",{className:"mt-1 h-2 w-full rounded-full bg-gray-200",children:t.jsxRuntimeExports.jsx("div",{className:`h-2 rounded-full transition-all duration-300 ${r.performanceScore>=90?"bg-green-500":r.performanceScore>=70?"bg-yellow-500":"bg-red-500"}`,style:{width:`${r.performanceScore}%`}})})]}),t.jsxRuntimeExports.jsxs("div",{className:"mb-4 grid grid-cols-2 gap-4",children:[t.jsxRuntimeExports.jsxs("div",{children:[t.jsxRuntimeExports.jsx("h4",{className:"mb-2 font-medium",children:"Core Web Vitals"}),t.jsxRuntimeExports.jsxs("div",{className:"space-y-1 text-sm",children:[r.lcp&&t.jsxRuntimeExports.jsxs("div",{children:["LCP: ",r.lcp.toFixed(0),"ms"]}),r.fid&&t.jsxRuntimeExports.jsxs("div",{children:["FID: ",r.fid.toFixed(0),"ms"]}),r.cls&&t.jsxRuntimeExports.jsxs("div",{children:["CLS: ",r.cls.toFixed(3)]})]})]}),t.jsxRuntimeExports.jsxs("div",{children:[t.jsxRuntimeExports.jsx("h4",{className:"mb-2 font-medium",children:"Custom Metrics"}),t.jsxRuntimeExports.jsxs("div",{className:"space-y-1 text-sm",children:[t.jsxRuntimeExports.jsxs("div",{children:["Render: ",r.componentRenderTime.toFixed(2),"ms"]}),t.jsxRuntimeExports.jsxs("div",{children:["Memory: ",c(r.memoryUsage)]}),r.bundleLoadTime>0&&t.jsxRuntimeExports.jsxs("div",{children:["Bundle: ",r.bundleLoadTime.toFixed(0),"ms"]})]})]})]}),e&&t.jsxRuntimeExports.jsxs("div",{children:[t.jsxRuntimeExports.jsx("h4",{className:"mb-2 font-medium",children:"Advanced Metrics"}),t.jsxRuntimeExports.jsxs("div",{className:"space-y-1 text-sm",children:[t.jsxRuntimeExports.jsxs("div",{children:["Average Render Time: ",(s.componentRenderTime||0).toFixed(2),"ms"]}),t.jsxRuntimeExports.jsxs("div",{children:["Average Memory: ",c(s.memoryUsage||0)]}),t.jsxRuntimeExports.jsxs("div",{children:["Average Score: ",(s.performanceScore||0).toFixed(0)]})]})]})]})}exports.PerformanceDashboard=P;exports.PerformanceMonitor=p;exports.PerformanceRegressionDetector=w;exports.defaultThresholds=f;exports.performanceMonitor=m;exports.usePerformanceMonitor=u;exports.withPerformanceMonitoring=E;
2
- //# sourceMappingURL=performance-monitor-lJmuUjQQ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"performance-monitor-lJmuUjQQ.cjs","sources":["../src/core/performance/performance-monitor.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback, useReducer } from \"react\"\n// Import type safely with fallback\ntype ReportHandler = (metric: { name: string; value: number }) => void\n\n// Performance metrics types\nexport interface PerformanceMetrics {\n\t// Core Web Vitals\n\tlcp?: number // Largest Contentful Paint\n\tfid?: number // First Input Delay\n\tcls?: number // Cumulative Layout Shift\n\tfcp?: number // First Contentful Paint\n\tttfb?: number // Time to First Byte\n\tinp?: number // Interaction to Next Paint\n\n\t// Custom metrics\n\tcomponentRenderTime: number\n\tbundleLoadTime: number\n\tmediaLoadTime: number\n\tmemoryUsage: number\n\n\t// Performance scores\n\tperformanceScore: number\n\ttimestamp: number\n}\n\nexport interface PerformanceThresholds {\n\tlcp: { good: number; poor: number }\n\tfid: { good: number; poor: number }\n\tcls: { good: number; poor: number }\n\trenderTime: { good: number; poor: number }\n\tmemoryUsage: { good: number; poor: number }\n}\n\nexport const defaultThresholds: PerformanceThresholds = {\n\tlcp: { good: 2500, poor: 4000 },\n\tfid: { good: 100, poor: 300 },\n\tcls: { good: 0.1, poor: 0.25 },\n\trenderTime: { good: 16, poor: 100 }, // Target 60fps = 16.67ms per frame\n\tmemoryUsage: { good: 50 * 1024 * 1024, poor: 100 * 1024 * 1024 } // 50MB good, 100MB poor\n}\n\n// Performance monitoring class\nexport class PerformanceMonitor {\n\tprivate metrics: PerformanceMetrics[] = []\n\tprivate listeners: Set<(metrics: PerformanceMetrics) => void> = new Set()\n\tprivate thresholds: PerformanceThresholds\n\tprivate observer?: PerformanceObserver\n\tprivate isMonitoring = false\n\n\tconstructor(thresholds: PerformanceThresholds = defaultThresholds) {\n\t\tthis.thresholds = thresholds\n\t\tthis.initializeWebVitals()\n\t\tthis.initializePerformanceObserver()\n\t}\n\n\tprivate async initializeWebVitals() {\n\t\tif (typeof window === \"undefined\") return\n\n\t\ttry {\n\t\t\t// Try to import web-vitals dynamically and handle different versions\n\t\t\tconst webVitals = await import(\"web-vitals\").catch(() => null)\n\n\t\t\tif (!webVitals) {\n\t\t\t\tconsole.warn(\"web-vitals package not available, Core Web Vitals tracking disabled\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst reportHandler: ReportHandler = (metric) => {\n\t\t\t\tthis.updateMetric(metric.name.toLowerCase() as keyof PerformanceMetrics, metric.value)\n\t\t\t}\n\n\t\t\t// Handle different web-vitals versions safely\n\t\t\tconst vitalsAny = webVitals as any\n\t\t\tif (vitalsAny.getCLS) vitalsAny.getCLS(reportHandler)\n\t\t\tif (vitalsAny.getFID) vitalsAny.getFID(reportHandler)\n\t\t\tif (vitalsAny.getFCP) vitalsAny.getFCP(reportHandler)\n\t\t\tif (vitalsAny.getLCP) vitalsAny.getLCP(reportHandler)\n\t\t\tif (vitalsAny.getTTFB) vitalsAny.getTTFB(reportHandler)\n\t\t\tif (vitalsAny.onINP) vitalsAny.onINP(reportHandler)\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"Web Vitals initialization failed:\", error)\n\t\t}\n\t}\n\n\tprivate initializePerformanceObserver() {\n\t\tif (typeof window === \"undefined\" || !(\"PerformanceObserver\" in window)) return\n\n\t\ttry {\n\t\t\tthis.observer = new PerformanceObserver((list) => {\n\t\t\t\tfor (const entry of list.getEntries()) {\n\t\t\t\t\tthis.handlePerformanceEntry(entry)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.observer.observe({ entryTypes: [\"measure\", \"navigation\", \"resource\", \"paint\"] })\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"PerformanceObserver not supported:\", error)\n\t\t}\n\t}\n\n\tprivate handlePerformanceEntry(entry: PerformanceEntry) {\n\t\tswitch (entry.entryType) {\n\t\t\tcase \"measure\":\n\t\t\t\tif (entry.name.startsWith(\"baroiplayer-render\")) {\n\t\t\t\t\tthis.updateMetric(\"componentRenderTime\", entry.duration)\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"resource\":\n\t\t\t\tif (entry.name.includes(\".js\") || entry.name.includes(\".css\")) {\n\t\t\t\t\tthis.updateMetric(\"bundleLoadTime\", entry.duration)\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"paint\":\n\t\t\t\tif (entry.name === \"first-contentful-paint\") {\n\t\t\t\t\tthis.updateMetric(\"fcp\", entry.startTime)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate updateMetric(key: keyof PerformanceMetrics, value: number) {\n\t\tconst currentMetrics = this.getCurrentMetrics()\n\t\tconst updatedMetrics = {\n\t\t\t...currentMetrics,\n\t\t\t[key]: value,\n\t\t\ttimestamp: Date.now(),\n\t\t\tperformanceScore: this.calculatePerformanceScore({ ...currentMetrics, [key]: value })\n\t\t}\n\n\t\tthis.metrics.push(updatedMetrics)\n\n\t\t// Keep only last 100 metrics\n\t\tif (this.metrics.length > 100) {\n\t\t\tthis.metrics = this.metrics.slice(-100)\n\t\t}\n\n\t\tthis.listeners.forEach((listener) => listener(updatedMetrics))\n\t}\n\n\tprivate getCurrentMetrics(): PerformanceMetrics {\n\t\tconst latest = this.metrics[this.metrics.length - 1]\n\t\treturn (\n\t\t\tlatest || {\n\t\t\t\tcomponentRenderTime: 0,\n\t\t\t\tbundleLoadTime: 0,\n\t\t\t\tmediaLoadTime: 0,\n\t\t\t\tmemoryUsage: this.getMemoryUsage(),\n\t\t\t\tperformanceScore: 0,\n\t\t\t\ttimestamp: Date.now()\n\t\t\t}\n\t\t)\n\t}\n\n\tprivate getMemoryUsage(): number {\n\t\tif (\"memory\" in performance) {\n\t\t\treturn (performance as any).memory.usedJSHeapSize || 0\n\t\t}\n\t\treturn 0\n\t}\n\n\tprivate calculatePerformanceScore(metrics: PerformanceMetrics): number {\n\t\tlet score = 100\n\n\t\t// Penalize based on thresholds\n\t\tif (metrics.lcp && metrics.lcp > this.thresholds.lcp.good) {\n\t\t\tscore -= metrics.lcp > this.thresholds.lcp.poor ? 30 : 15\n\t\t}\n\n\t\tif (metrics.fid && metrics.fid > this.thresholds.fid.good) {\n\t\t\tscore -= metrics.fid > this.thresholds.fid.poor ? 25 : 10\n\t\t}\n\n\t\tif (metrics.cls && metrics.cls > this.thresholds.cls.good) {\n\t\t\tscore -= metrics.cls > this.thresholds.cls.poor ? 20 : 10\n\t\t}\n\n\t\tif (metrics.componentRenderTime > this.thresholds.renderTime.good) {\n\t\t\tscore -= metrics.componentRenderTime > this.thresholds.renderTime.poor ? 20 : 10\n\t\t}\n\n\t\tif (metrics.memoryUsage > this.thresholds.memoryUsage.good) {\n\t\t\tscore -= metrics.memoryUsage > this.thresholds.memoryUsage.poor ? 15 : 5\n\t\t}\n\n\t\treturn Math.max(0, score)\n\t}\n\n\t// Public API\n\tpublic startMonitoring() {\n\t\tthis.isMonitoring = true\n\t\tthis.startMemoryMonitoring()\n\t}\n\n\tpublic stopMonitoring() {\n\t\tthis.isMonitoring = false\n\t\tif (this.observer) {\n\t\t\tthis.observer.disconnect()\n\t\t}\n\t}\n\n\tprivate startMemoryMonitoring() {\n\t\tif (!this.isMonitoring) return\n\n\t\tthis.updateMetric(\"memoryUsage\", this.getMemoryUsage())\n\t\tsetTimeout(() => this.startMemoryMonitoring(), 5000) // Check every 5 seconds\n\t}\n\n\tpublic measureComponentRender(componentName: string, renderFn: () => any): any {\n\t\tconst startMark = `baroiplayer-render-${componentName}-start`\n\t\tconst endMark = `baroiplayer-render-${componentName}-end`\n\t\tconst measureName = `baroiplayer-render-${componentName}`\n\n\t\tperformance.mark(startMark)\n\t\tconst result = renderFn()\n\t\tperformance.mark(endMark)\n\n\t\ttry {\n\t\t\tperformance.measure(measureName, startMark, endMark)\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"Performance measurement failed:\", error)\n\t\t}\n\n\t\treturn result\n\t}\n\n\tpublic subscribe(listener: (metrics: PerformanceMetrics) => void): () => void {\n\t\tthis.listeners.add(listener)\n\t\treturn () => this.listeners.delete(listener)\n\t}\n\n\tpublic getLatestMetrics(): PerformanceMetrics | null {\n\t\treturn this.metrics[this.metrics.length - 1] || null\n\t}\n\n\tpublic getAllMetrics(): PerformanceMetrics[] {\n\t\treturn [...this.metrics]\n\t}\n\n\tpublic getAverageMetrics(count = 10): Partial<PerformanceMetrics> {\n\t\tconst recentMetrics = this.metrics.slice(-count)\n\t\tif (recentMetrics.length === 0) return {}\n\n\t\tconst averages: Partial<PerformanceMetrics> = {}\n\t\tconst keys: Array<keyof PerformanceMetrics> = [\n\t\t\t\"lcp\",\n\t\t\t\"fid\",\n\t\t\t\"cls\",\n\t\t\t\"fcp\",\n\t\t\t\"ttfb\",\n\t\t\t\"inp\",\n\t\t\t\"componentRenderTime\",\n\t\t\t\"bundleLoadTime\",\n\t\t\t\"mediaLoadTime\",\n\t\t\t\"memoryUsage\",\n\t\t\t\"performanceScore\"\n\t\t]\n\n\t\tkeys.forEach((key) => {\n\t\t\tconst values = recentMetrics\n\t\t\t\t.map((m) => m[key] as number)\n\t\t\t\t.filter((v) => typeof v === \"number\" && !isNaN(v))\n\n\t\t\tif (values.length > 0) {\n\t\t\t\t;(averages as any)[key] = values.reduce((sum, v) => sum + v, 0) / values.length\n\t\t\t}\n\t\t})\n\n\t\treturn averages\n\t}\n\n\tpublic getThresholds(): PerformanceThresholds {\n\t\treturn this.thresholds\n\t}\n\n\tpublic updateThresholds(newThresholds: Partial<PerformanceThresholds>) {\n\t\tthis.thresholds = { ...this.thresholds, ...newThresholds }\n\t}\n}\n\n// Global performance monitor instance\nexport const performanceMonitor = new PerformanceMonitor()\n\n// React hook for performance monitoring\nexport function usePerformanceMonitor() {\n\tconst [metrics, setMetrics] = useState<PerformanceMetrics | null>(null)\n\tconst [isSupported, setIsSupported] = useState(true)\n\n\tuseEffect(() => {\n\t\tsetIsSupported(typeof window !== \"undefined\" && \"performance\" in window)\n\n\t\tif (!isSupported) return\n\n\t\tperformanceMonitor.startMonitoring()\n\t\tconst unsubscribe = performanceMonitor.subscribe(setMetrics)\n\n\t\treturn () => {\n\t\t\tunsubscribe()\n\t\t\tperformanceMonitor.stopMonitoring()\n\t\t}\n\t}, [isSupported])\n\n\tconst measureRender = useCallback((componentName: string, renderFn: () => any): any => {\n\t\treturn performanceMonitor.measureComponentRender(componentName, renderFn)\n\t}, [])\n\n\treturn {\n\t\tmetrics,\n\t\tisSupported,\n\t\tmeasureRender,\n\t\taverageMetrics: performanceMonitor.getAverageMetrics(),\n\t\tallMetrics: performanceMonitor.getAllMetrics(),\n\t\tthresholds: performanceMonitor.getThresholds()\n\t}\n}\n\n// HOC for performance monitoring\nexport function withPerformanceMonitoring(\n\tWrappedComponent: React.ComponentType<any>,\n\tcomponentName?: string\n) {\n\tconst displayName =\n\t\tcomponentName || WrappedComponent.displayName || WrappedComponent.name || \"Component\"\n\n\tfunction PerformanceMonitoredComponent(props: any) {\n\t\tconst renderRef = useRef(0)\n\t\tconst { measureRender } = usePerformanceMonitor()\n\n\t\t// Use a simple counter that increments during render but doesn't access the ref value\n\t\tconst renderKey = useState(() => Math.random())[0]\n\n\t\t// Update ref in effect to track count without accessing during render\n\t\tuseEffect(() => {\n\t\t\trenderRef.current += 1\n\t\t})\n\n\t\treturn measureRender(`${displayName}-${renderKey}`, () => <WrappedComponent {...props} />)\n\t}\n\n\tPerformanceMonitoredComponent.displayName = `withPerformanceMonitoring(${displayName})`\n\treturn PerformanceMonitoredComponent\n}\n\n// Performance regression detector\nexport class PerformanceRegressionDetector {\n\tprivate baselineMetrics: PerformanceMetrics | null = null\n\tprivate regressionThreshold = 0.2 // 20% degradation threshold\n\n\tsetBaseline(metrics: PerformanceMetrics) {\n\t\tthis.baselineMetrics = metrics\n\t}\n\n\tdetectRegression(currentMetrics: PerformanceMetrics): Array<{\n\t\tmetric: keyof PerformanceMetrics\n\t\tbaseline: number\n\t\tcurrent: number\n\t\tdegradation: number\n\t}> {\n\t\tif (!this.baselineMetrics) return []\n\n\t\tconst regressions: Array<{\n\t\t\tmetric: keyof PerformanceMetrics\n\t\t\tbaseline: number\n\t\t\tcurrent: number\n\t\t\tdegradation: number\n\t\t}> = []\n\n\t\tconst metricsToCheck: Array<keyof PerformanceMetrics> = [\n\t\t\t\"componentRenderTime\",\n\t\t\t\"bundleLoadTime\",\n\t\t\t\"mediaLoadTime\",\n\t\t\t\"memoryUsage\"\n\t\t]\n\n\t\tmetricsToCheck.forEach((metric) => {\n\t\t\tconst baseline = this.baselineMetrics![metric] as number\n\t\t\tconst current = currentMetrics[metric] as number\n\n\t\t\tif (baseline && current && baseline > 0) {\n\t\t\t\tconst degradation = (current - baseline) / baseline\n\t\t\t\tif (degradation > this.regressionThreshold) {\n\t\t\t\t\tregressions.push({ metric, baseline, current, degradation })\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\treturn regressions\n\t}\n\n\tsetRegressionThreshold(threshold: number) {\n\t\tthis.regressionThreshold = Math.max(0, Math.min(1, threshold))\n\t}\n}\n\n// Development dashboard component\nexport interface PerformanceDashboardProps {\n\tclassName?: string\n\tshowAdvanced?: boolean\n}\n\nexport function PerformanceDashboard({\n\tclassName = \"\",\n\tshowAdvanced = false\n}: PerformanceDashboardProps) {\n\tconst { metrics, averageMetrics, thresholds, isSupported } = usePerformanceMonitor()\n\n\tif (!isSupported || !metrics) {\n\t\treturn (\n\t\t\t<div className={`performance-dashboard ${className}`}>\n\t\t\t\t<p>Performance monitoring not supported in this environment</p>\n\t\t\t</div>\n\t\t)\n\t}\n\n\tconst getScoreColor = (score: number) => {\n\t\tif (score >= 90) return \"text-green-600\"\n\t\tif (score >= 70) return \"text-yellow-600\"\n\t\treturn \"text-red-600\"\n\t}\n\n\tconst formatBytes = (bytes: number) => {\n\t\treturn `${(bytes / 1024 / 1024).toFixed(2)} MB`\n\t}\n\n\treturn (\n\t\t<div className={`performance-dashboard rounded-lg bg-white p-4 shadow ${className}`}>\n\t\t\t<h3 className=\"mb-4 font-semibold text-lg\">Performance Dashboard</h3>\n\n\t\t\t{/* Performance Score */}\n\t\t\t<div className=\"mb-4\">\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<span>Performance Score</span>\n\t\t\t\t\t<span className={`font-bold ${getScoreColor(metrics.performanceScore)}`}>\n\t\t\t\t\t\t{metrics.performanceScore.toFixed(0)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-1 h-2 w-full rounded-full bg-gray-200\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`h-2 rounded-full transition-all duration-300 ${\n\t\t\t\t\t\t\tmetrics.performanceScore >= 90\n\t\t\t\t\t\t\t\t? \"bg-green-500\"\n\t\t\t\t\t\t\t\t: metrics.performanceScore >= 70\n\t\t\t\t\t\t\t\t\t? \"bg-yellow-500\"\n\t\t\t\t\t\t\t\t\t: \"bg-red-500\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t\tstyle={{ width: `${metrics.performanceScore}%` }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Core Web Vitals */}\n\t\t\t<div className=\"mb-4 grid grid-cols-2 gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h4 className=\"mb-2 font-medium\">Core Web Vitals</h4>\n\t\t\t\t\t<div className=\"space-y-1 text-sm\">\n\t\t\t\t\t\t{metrics.lcp && <div>LCP: {metrics.lcp.toFixed(0)}ms</div>}\n\t\t\t\t\t\t{metrics.fid && <div>FID: {metrics.fid.toFixed(0)}ms</div>}\n\t\t\t\t\t\t{metrics.cls && <div>CLS: {metrics.cls.toFixed(3)}</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<h4 className=\"mb-2 font-medium\">Custom Metrics</h4>\n\t\t\t\t\t<div className=\"space-y-1 text-sm\">\n\t\t\t\t\t\t<div>Render: {metrics.componentRenderTime.toFixed(2)}ms</div>\n\t\t\t\t\t\t<div>Memory: {formatBytes(metrics.memoryUsage)}</div>\n\t\t\t\t\t\t{metrics.bundleLoadTime > 0 && <div>Bundle: {metrics.bundleLoadTime.toFixed(0)}ms</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Advanced metrics */}\n\t\t\t{showAdvanced && (\n\t\t\t\t<div>\n\t\t\t\t\t<h4 className=\"mb-2 font-medium\">Advanced Metrics</h4>\n\t\t\t\t\t<div className=\"space-y-1 text-sm\">\n\t\t\t\t\t\t<div>Average Render Time: {(averageMetrics.componentRenderTime || 0).toFixed(2)}ms</div>\n\t\t\t\t\t\t<div>Average Memory: {formatBytes(averageMetrics.memoryUsage || 0)}</div>\n\t\t\t\t\t\t<div>Average Score: {(averageMetrics.performanceScore || 0).toFixed(0)}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nexport default PerformanceMonitor\n"],"names":["defaultThresholds","PerformanceMonitor","thresholds","__publicField","webVitals","reportHandler","metric","vitalsAny","error","list","entry","key","value","currentMetrics","updatedMetrics","listener","metrics","score","componentName","renderFn","startMark","endMark","measureName","result","count","recentMetrics","averages","values","m","v","sum","newThresholds","performanceMonitor","usePerformanceMonitor","setMetrics","useState","isSupported","setIsSupported","useEffect","unsubscribe","measureRender","useCallback","withPerformanceMonitoring","WrappedComponent","displayName","PerformanceMonitoredComponent","props","renderRef","useRef","renderKey","jsx","PerformanceRegressionDetector","regressions","baseline","current","degradation","threshold","PerformanceDashboard","className","showAdvanced","averageMetrics","getScoreColor","formatBytes","bytes","jsxs"],"mappings":"6pBAiCaA,EAA2C,CACvD,IAAK,CAAE,KAAM,KAAM,KAAM,GAAA,EACzB,IAAK,CAAE,KAAM,IAAK,KAAM,GAAA,EACxB,IAAK,CAAE,KAAM,GAAK,KAAM,GAAA,EACxB,WAAY,CAAE,KAAM,GAAI,KAAM,GAAA,EAC9B,YAAa,CAAE,KAAM,GAAK,KAAO,KAAM,KAAM,IAAM,KAAO,IAAA,CAC3D,EAGO,MAAMC,CAAmB,CAO/B,YAAYC,EAAoCF,EAAmB,CAN3DG,EAAA,eAAgC,CAAA,GAChCA,EAAA,qBAA4D,KAC5DA,EAAA,mBACAA,EAAA,iBACAA,EAAA,oBAAe,IAGtB,KAAK,WAAaD,EAClB,KAAK,oBAAA,EACL,KAAK,8BAAA,CACN,CAEA,MAAc,qBAAsB,CACnC,GAAI,SAAO,OAAW,KAEtB,GAAI,CAEH,MAAME,EAAY,KAAM,QAAO,YAAY,EAAE,MAAM,IAAM,IAAI,EAE7D,GAAI,CAACA,EAAW,CACf,QAAQ,KAAK,qEAAqE,EAClF,MACD,CAEA,MAAMC,EAAgCC,GAAW,CAChD,KAAK,aAAaA,EAAO,KAAK,YAAA,EAA2CA,EAAO,KAAK,CACtF,EAGMC,EAAYH,EACdG,EAAU,QAAQA,EAAU,OAAOF,CAAa,EAChDE,EAAU,QAAQA,EAAU,OAAOF,CAAa,EAChDE,EAAU,QAAQA,EAAU,OAAOF,CAAa,EAChDE,EAAU,QAAQA,EAAU,OAAOF,CAAa,EAChDE,EAAU,SAASA,EAAU,QAAQF,CAAa,EAClDE,EAAU,OAAOA,EAAU,MAAMF,CAAa,CACnD,OAASG,EAAO,CACf,QAAQ,KAAK,oCAAqCA,CAAK,CACxD,CACD,CAEQ,+BAAgC,CACvC,GAAI,SAAO,OAAW,KAAe,EAAE,wBAAyB,SAEhE,GAAI,CACH,KAAK,SAAW,IAAI,oBAAqBC,GAAS,CACjD,UAAWC,KAASD,EAAK,aACxB,KAAK,uBAAuBC,CAAK,CAEnC,CAAC,EAED,KAAK,SAAS,QAAQ,CAAE,WAAY,CAAC,UAAW,aAAc,WAAY,OAAO,EAAG,CACrF,OAASF,EAAO,CACf,QAAQ,KAAK,qCAAsCA,CAAK,CACzD,CACD,CAEQ,uBAAuBE,EAAyB,CACvD,OAAQA,EAAM,UAAA,CACb,IAAK,UACAA,EAAM,KAAK,WAAW,oBAAoB,GAC7C,KAAK,aAAa,sBAAuBA,EAAM,QAAQ,EAExD,MAED,IAAK,YACAA,EAAM,KAAK,SAAS,KAAK,GAAKA,EAAM,KAAK,SAAS,MAAM,IAC3D,KAAK,aAAa,iBAAkBA,EAAM,QAAQ,EAEnD,MAED,IAAK,QACAA,EAAM,OAAS,0BAClB,KAAK,aAAa,MAAOA,EAAM,SAAS,EAEzC,KAAA,CAEH,CAEQ,aAAaC,EAA+BC,EAAe,CAClE,MAAMC,EAAiB,KAAK,kBAAA,EACtBC,EAAiB,CACtB,GAAGD,EACH,CAACF,CAAG,EAAGC,EACP,UAAW,KAAK,IAAA,EAChB,iBAAkB,KAAK,0BAA0B,CAAE,GAAGC,EAAgB,CAACF,CAAG,EAAGC,CAAA,CAAO,CAAA,EAGrF,KAAK,QAAQ,KAAKE,CAAc,EAG5B,KAAK,QAAQ,OAAS,MACzB,KAAK,QAAU,KAAK,QAAQ,MAAM,IAAI,GAGvC,KAAK,UAAU,QAASC,GAAaA,EAASD,CAAc,CAAC,CAC9D,CAEQ,mBAAwC,CAE/C,OADe,KAAK,QAAQ,KAAK,QAAQ,OAAS,CAAC,GAExC,CACT,oBAAqB,EACrB,eAAgB,EAChB,cAAe,EACf,YAAa,KAAK,eAAA,EAClB,iBAAkB,EAClB,UAAW,KAAK,IAAA,CAAI,CAGvB,CAEQ,gBAAyB,CAChC,MAAI,WAAY,aACP,YAAoB,OAAO,gBAAkB,CAGvD,CAEQ,0BAA0BE,EAAqC,CACtE,IAAIC,EAAQ,IAGZ,OAAID,EAAQ,KAAOA,EAAQ,IAAM,KAAK,WAAW,IAAI,OACpDC,GAASD,EAAQ,IAAM,KAAK,WAAW,IAAI,KAAO,GAAK,IAGpDA,EAAQ,KAAOA,EAAQ,IAAM,KAAK,WAAW,IAAI,OACpDC,GAASD,EAAQ,IAAM,KAAK,WAAW,IAAI,KAAO,GAAK,IAGpDA,EAAQ,KAAOA,EAAQ,IAAM,KAAK,WAAW,IAAI,OACpDC,GAASD,EAAQ,IAAM,KAAK,WAAW,IAAI,KAAO,GAAK,IAGpDA,EAAQ,oBAAsB,KAAK,WAAW,WAAW,OAC5DC,GAASD,EAAQ,oBAAsB,KAAK,WAAW,WAAW,KAAO,GAAK,IAG3EA,EAAQ,YAAc,KAAK,WAAW,YAAY,OACrDC,GAASD,EAAQ,YAAc,KAAK,WAAW,YAAY,KAAO,GAAK,GAGjE,KAAK,IAAI,EAAGC,CAAK,CACzB,CAGO,iBAAkB,CACxB,KAAK,aAAe,GACpB,KAAK,sBAAA,CACN,CAEO,gBAAiB,CACvB,KAAK,aAAe,GAChB,KAAK,UACR,KAAK,SAAS,WAAA,CAEhB,CAEQ,uBAAwB,CAC1B,KAAK,eAEV,KAAK,aAAa,cAAe,KAAK,eAAA,CAAgB,EACtD,WAAW,IAAM,KAAK,sBAAA,EAAyB,GAAI,EACpD,CAEO,uBAAuBC,EAAuBC,EAA0B,CAC9E,MAAMC,EAAY,sBAAsBF,CAAa,SAC/CG,EAAU,sBAAsBH,CAAa,OAC7CI,EAAc,sBAAsBJ,CAAa,GAEvD,YAAY,KAAKE,CAAS,EAC1B,MAAMG,EAASJ,EAAA,EACf,YAAY,KAAKE,CAAO,EAExB,GAAI,CACH,YAAY,QAAQC,EAAaF,EAAWC,CAAO,CACpD,OAASb,EAAO,CACf,QAAQ,KAAK,kCAAmCA,CAAK,CACtD,CAEA,OAAOe,CACR,CAEO,UAAUR,EAA6D,CAC7E,YAAK,UAAU,IAAIA,CAAQ,EACpB,IAAM,KAAK,UAAU,OAAOA,CAAQ,CAC5C,CAEO,kBAA8C,CACpD,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAS,CAAC,GAAK,IACjD,CAEO,eAAsC,CAC5C,MAAO,CAAC,GAAG,KAAK,OAAO,CACxB,CAEO,kBAAkBS,EAAQ,GAAiC,CACjE,MAAMC,EAAgB,KAAK,QAAQ,MAAM,CAACD,CAAK,EAC/C,GAAIC,EAAc,SAAW,EAAG,MAAO,CAAA,EAEvC,MAAMC,EAAwC,CAAA,EAe9C,MAd8C,CAC7C,MACA,MACA,MACA,MACA,OACA,MACA,sBACA,iBACA,gBACA,cACA,kBAAA,EAGI,QAASf,GAAQ,CACrB,MAAMgB,EAASF,EACb,IAAKG,GAAMA,EAAEjB,CAAG,CAAW,EAC3B,OAAQkB,GAAM,OAAOA,GAAM,UAAY,CAAC,MAAMA,CAAC,CAAC,EAE9CF,EAAO,OAAS,IACjBD,EAAiBf,CAAG,EAAIgB,EAAO,OAAO,CAACG,EAAKD,IAAMC,EAAMD,EAAG,CAAC,EAAIF,EAAO,OAE3E,CAAC,EAEMD,CACR,CAEO,eAAuC,CAC7C,OAAO,KAAK,UACb,CAEO,iBAAiBK,EAA+C,CACtE,KAAK,WAAa,CAAE,GAAG,KAAK,WAAY,GAAGA,CAAA,CAC5C,CACD,CAGO,MAAMC,EAAqB,IAAI/B,EAG/B,SAASgC,GAAwB,CACvC,KAAM,CAACjB,EAASkB,CAAU,EAAIC,EAAAA,SAAoC,IAAI,EAChE,CAACC,EAAaC,CAAc,EAAIF,EAAAA,SAAS,EAAI,EAEnDG,EAAAA,UAAU,IAAM,CAGf,GAFAD,EAAe,OAAO,OAAW,KAAe,gBAAiB,MAAM,EAEnE,CAACD,EAAa,OAElBJ,EAAmB,gBAAA,EACnB,MAAMO,EAAcP,EAAmB,UAAUE,CAAU,EAE3D,MAAO,IAAM,CACZK,EAAA,EACAP,EAAmB,eAAA,CACpB,CACD,EAAG,CAACI,CAAW,CAAC,EAEhB,MAAMI,EAAgBC,EAAAA,YAAY,CAACvB,EAAuBC,IAClDa,EAAmB,uBAAuBd,EAAeC,CAAQ,EACtE,CAAA,CAAE,EAEL,MAAO,CACN,QAAAH,EACA,YAAAoB,EACA,cAAAI,EACA,eAAgBR,EAAmB,kBAAA,EACnC,WAAYA,EAAmB,cAAA,EAC/B,WAAYA,EAAmB,cAAA,CAAc,CAE/C,CAGO,SAASU,EACfC,EACAzB,EACC,CACD,MAAM0B,EACL1B,GAAiByB,EAAiB,aAAeA,EAAiB,MAAQ,YAE3E,SAASE,EAA8BC,EAAY,CAClD,MAAMC,EAAYC,EAAAA,OAAO,CAAC,EACpB,CAAE,cAAAR,CAAA,EAAkBP,EAAA,EAGpBgB,EAAYd,EAAAA,SAAS,IAAM,KAAK,OAAA,CAAQ,EAAE,CAAC,EAGjDG,OAAAA,EAAAA,UAAU,IAAM,CACfS,EAAU,SAAW,CACtB,CAAC,EAEMP,EAAc,GAAGI,CAAW,IAAIK,CAAS,GAAI,IAAMC,EAAAA,kBAAAA,IAACP,EAAA,CAAkB,GAAGG,CAAA,CAAO,CAAE,CAC1F,CAEA,OAAAD,EAA8B,YAAc,6BAA6BD,CAAW,IAC7EC,CACR,CAGO,MAAMM,CAA8B,CAApC,cACEhD,EAAA,uBAA6C,MAC7CA,EAAA,2BAAsB,IAE9B,YAAYa,EAA6B,CACxC,KAAK,gBAAkBA,CACxB,CAEA,iBAAiBH,EAKd,CACF,GAAI,CAAC,KAAK,gBAAiB,MAAO,CAAA,EAElC,MAAMuC,EAKD,CAAA,EASL,MAPwD,CACvD,sBACA,iBACA,gBACA,aAAA,EAGc,QAAS9C,GAAW,CAClC,MAAM+C,EAAW,KAAK,gBAAiB/C,CAAM,EACvCgD,EAAUzC,EAAeP,CAAM,EAErC,GAAI+C,GAAYC,GAAWD,EAAW,EAAG,CACxC,MAAME,GAAeD,EAAUD,GAAYA,EACvCE,EAAc,KAAK,qBACtBH,EAAY,KAAK,CAAE,OAAA9C,EAAQ,SAAA+C,EAAU,QAAAC,EAAS,YAAAC,EAAa,CAE7D,CACD,CAAC,EAEMH,CACR,CAEA,uBAAuBI,EAAmB,CACzC,KAAK,oBAAsB,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,CAAS,CAAC,CAC9D,CACD,CAQO,SAASC,EAAqB,CACpC,UAAAC,EAAY,GACZ,aAAAC,EAAe,EAChB,EAA8B,CAC7B,KAAM,CAAE,QAAA3C,EAAS,eAAA4C,EAA4B,YAAAxB,CAAA,EAAgBH,EAAA,EAE7D,GAAI,CAACG,GAAe,CAACpB,EACpB,OACCkC,EAAAA,kBAAAA,IAAC,OAAI,UAAW,yBAAyBQ,CAAS,GACjD,SAAAR,EAAAA,kBAAAA,IAAC,IAAA,CAAE,SAAA,0DAAA,CAAwD,CAAA,CAC5D,EAIF,MAAMW,EAAiB5C,GAClBA,GAAS,GAAW,iBACpBA,GAAS,GAAW,kBACjB,eAGF6C,EAAeC,GACb,IAAIA,EAAQ,KAAO,MAAM,QAAQ,CAAC,CAAC,MAG3C,OACCC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAW,wDAAwDN,CAAS,GAChF,SAAA,CAAAR,EAAAA,kBAAAA,IAAC,KAAA,CAAG,UAAU,6BAA6B,SAAA,wBAAqB,EAGhEc,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,OACd,SAAA,CAAAA,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAd,EAAAA,kBAAAA,IAAC,QAAK,SAAA,mBAAA,CAAiB,EACvBA,EAAAA,kBAAAA,IAAC,OAAA,CAAK,UAAW,aAAaW,EAAc7C,EAAQ,gBAAgB,CAAC,GACnE,SAAAA,EAAQ,iBAAiB,QAAQ,CAAC,CAAA,CACpC,CAAA,EACD,EACAkC,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,2CACd,SAAAA,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAW,gDACVlC,EAAQ,kBAAoB,GACzB,eACAA,EAAQ,kBAAoB,GAC3B,gBACA,YACL,GACA,MAAO,CAAE,MAAO,GAAGA,EAAQ,gBAAgB,GAAA,CAAI,CAAA,CAChD,CACD,CAAA,EACD,EAGAgD,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,8BACd,SAAA,CAAAA,yBAAC,MAAA,CACA,SAAA,CAAAd,EAAAA,kBAAAA,IAAC,KAAA,CAAG,UAAU,mBAAmB,SAAA,kBAAe,EAChDc,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,oBACb,SAAA,CAAAhD,EAAQ,8BAAQ,MAAA,CAAI,SAAA,CAAA,QAAMA,EAAQ,IAAI,QAAQ,CAAC,EAAE,IAAA,EAAE,EACnDA,EAAQ,KAAOgD,EAAAA,kBAAAA,KAAC,MAAA,CAAI,SAAA,CAAA,QAAMhD,EAAQ,IAAI,QAAQ,CAAC,EAAE,IAAA,EAAE,EACnDA,EAAQ,KAAOgD,EAAAA,kBAAAA,KAAC,MAAA,CAAI,SAAA,CAAA,QAAMhD,EAAQ,IAAI,QAAQ,CAAC,CAAA,CAAA,CAAE,CAAA,CAAA,CACnD,CAAA,EACD,2BAEC,MAAA,CACA,SAAA,CAAAkC,EAAAA,kBAAAA,IAAC,KAAA,CAAG,UAAU,mBAAmB,SAAA,iBAAc,EAC/Cc,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,oBACd,SAAA,CAAAA,yBAAC,MAAA,CAAI,SAAA,CAAA,WAAShD,EAAQ,oBAAoB,QAAQ,CAAC,EAAE,IAAA,EAAE,2BACtD,MAAA,CAAI,SAAA,CAAA,WAAS8C,EAAY9C,EAAQ,WAAW,CAAA,EAAE,EAC9CA,EAAQ,eAAiB,GAAKgD,EAAAA,kBAAAA,KAAC,MAAA,CAAI,SAAA,CAAA,WAAShD,EAAQ,eAAe,QAAQ,CAAC,EAAE,IAAA,CAAA,CAAE,CAAA,CAAA,CAClF,CAAA,CAAA,CACD,CAAA,EACD,EAGC2C,4BACC,MAAA,CACA,SAAA,CAAAT,EAAAA,kBAAAA,IAAC,KAAA,CAAG,UAAU,mBAAmB,SAAA,mBAAgB,EACjDc,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,oBACd,SAAA,CAAAA,yBAAC,MAAA,CAAI,SAAA,CAAA,yBAAuBJ,EAAe,qBAAuB,GAAG,QAAQ,CAAC,EAAE,IAAA,EAAE,2BACjF,MAAA,CAAI,SAAA,CAAA,mBAAiBE,EAAYF,EAAe,aAAe,CAAC,CAAA,EAAE,2BAClE,MAAA,CAAI,SAAA,CAAA,mBAAiBA,EAAe,kBAAoB,GAAG,QAAQ,CAAC,CAAA,CAAA,CAAE,CAAA,CAAA,CACxE,CAAA,CAAA,CACD,CAAA,EAEF,CAEF"}
@@ -1,9 +0,0 @@
1
- "use strict";function ye(e){var t,r,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(r=ye(e[t]))&&(o&&(o+=" "),o+=r)}else for(r in e)e[r]&&(o&&(o+=" "),o+=r);return o}function ne(){for(var e,t,r=0,o="",a=arguments.length;r<a;r++)(e=arguments[r])&&(t=ye(e))&&(o&&(o+=" "),o+=t);return o}const ae="-",Ge=e=>{const t=Ee(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:l=>{const p=l.split(ae);return p[0]===""&&p.length!==1&&p.shift(),ke(p,t)||Ne(l)},getConflictingClassGroupIds:(l,p)=>{const m=r[l]||[];return p&&o[l]?[...m,...o[l]]:m}}},ke=(e,t)=>{if(e.length===0)return t.classGroupId;const r=e[0],o=t.nextPart.get(r),a=o?ke(e.slice(1),o):void 0;if(a)return a;if(t.validators.length===0)return;const i=e.join(ae);return t.validators.find(({validator:l})=>l(i))?.classGroupId},ge=/^\[(.+)\]$/,Ne=e=>{if(ge.test(e)){const t=ge.exec(e)[1],r=t?.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},Ee=e=>{const{theme:t,classGroups:r}=e,o={nextPart:new Map,validators:[]};for(const a in r)te(r[a],o,a,t);return o},te=(e,t,r,o)=>{e.forEach(a=>{if(typeof a=="string"){const i=a===""?t:be(t,a);i.classGroupId=r;return}if(typeof a=="function"){if($e(a)){te(a(o),t,r,o);return}t.validators.push({validator:a,classGroupId:r});return}Object.entries(a).forEach(([i,l])=>{te(l,be(t,i),r,o)})})},be=(e,t)=>{let r=e;return t.split(ae).forEach(o=>{r.nextPart.has(o)||r.nextPart.set(o,{nextPart:new Map,validators:[]}),r=r.nextPart.get(o)}),r},$e=e=>e.isThemeGetter,Ve=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,o=new Map;const a=(i,l)=>{r.set(i,l),t++,t>e&&(t=0,o=r,r=new Map)};return{get(i){let l=r.get(i);if(l!==void 0)return l;if((l=o.get(i))!==void 0)return a(i,l),l},set(i,l){r.has(i)?r.set(i,l):a(i,l)}}},re="!",se=":",Le=se.length,je=e=>{const{prefix:t,experimentalParseClassName:r}=e;let o=a=>{const i=[];let l=0,p=0,m=0,f;for(let y=0;y<a.length;y++){let k=a[y];if(l===0&&p===0){if(k===se){i.push(a.slice(m,y)),m=y+Le;continue}if(k==="/"){f=y;continue}}k==="["?l++:k==="]"?l--:k==="("?p++:k===")"&&p--}const g=i.length===0?a:a.substring(m),v=Oe(g),j=v!==g,O=f&&f>m?f-m:void 0;return{modifiers:i,hasImportantModifier:j,baseClassName:v,maybePostfixModifierPosition:O}};if(t){const a=t+se,i=o;o=l=>l.startsWith(a)?i(l.substring(a.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:l,maybePostfixModifierPosition:void 0}}if(r){const a=o;o=i=>r({className:i,parseClassName:a})}return o},Oe=e=>e.endsWith(re)?e.substring(0,e.length-1):e.startsWith(re)?e.substring(1):e,We=e=>{const t=Object.fromEntries(e.orderSensitiveModifiers.map(o=>[o,!0]));return o=>{if(o.length<=1)return o;const a=[];let i=[];return o.forEach(l=>{l[0]==="["||t[l]?(a.push(...i.sort(),l),i=[]):i.push(l)}),a.push(...i.sort()),a}},Fe=e=>({cache:Ve(e.cacheSize),parseClassName:je(e),sortModifiers:We(e),...Ge(e)}),Be=/\s+/,Ue=(e,t)=>{const{parseClassName:r,getClassGroupId:o,getConflictingClassGroupIds:a,sortModifiers:i}=t,l=[],p=e.trim().split(Be);let m="";for(let f=p.length-1;f>=0;f-=1){const g=p[f],{isExternal:v,modifiers:j,hasImportantModifier:O,baseClassName:y,maybePostfixModifierPosition:k}=r(g);if(v){m=g+(m.length>0?" "+m:m);continue}let R=!!k,M=o(R?y.substring(0,k):y);if(!M){if(!R){m=g+(m.length>0?" "+m:m);continue}if(M=o(y),!M){m=g+(m.length>0?" "+m:m);continue}R=!1}const U=i(j).join(":"),W=O?U+re:U,G=W+M;if(l.includes(G))continue;l.push(G);const N=a(M,R);for(let P=0;P<N.length;++P){const F=N[P];l.push(W+F)}m=g+(m.length>0?" "+m:m)}return m};function _e(){let e=0,t,r,o="";for(;e<arguments.length;)(t=arguments[e++])&&(r=ve(t))&&(o&&(o+=" "),o+=r);return o}const ve=e=>{if(typeof e=="string")return e;let t,r="";for(let o=0;o<e.length;o++)e[o]&&(t=ve(e[o]))&&(r&&(r+=" "),r+=t);return r};function De(e,...t){let r,o,a,i=l;function l(m){const f=t.reduce((g,v)=>v(g),e());return r=Fe(f),o=r.cache.get,a=r.cache.set,i=p,p(m)}function p(m){const f=o(m);if(f)return f;const g=Ue(m,r);return a(m,g),g}return function(){return i(_e.apply(null,arguments))}}const b=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},ze=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Ce=/^\((?:(\w[\w-]*):)?(.+)\)$/i,qe=/^\d+\/\d+$/,Ke=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Ze=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,He=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Je=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Xe=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,$=e=>qe.test(e),u=e=>!!e&&!Number.isNaN(Number(e)),S=e=>!!e&&Number.isInteger(Number(e)),ee=e=>e.endsWith("%")&&u(e.slice(0,-1)),A=e=>Ke.test(e),Qe=()=>!0,Ye=e=>Ze.test(e)&&!He.test(e),Ae=()=>!1,eo=e=>Je.test(e),oo=e=>Xe.test(e),to=e=>!s(e)&&!n(e),ro=e=>V(e,Pe,Ae),s=e=>ze.test(e),T=e=>V(e,Ie,Ye),oe=e=>V(e,lo,u),he=e=>V(e,Se,Ae),so=e=>V(e,Me,oo),H=e=>V(e,Te,eo),n=e=>Ce.test(e),B=e=>L(e,Ie),no=e=>L(e,co),we=e=>L(e,Se),ao=e=>L(e,Pe),io=e=>L(e,Me),J=e=>L(e,Te,!0),V=(e,t,r)=>{const o=ze.exec(e);return o?o[1]?t(o[1]):r(o[2]):!1},L=(e,t,r=!1)=>{const o=Ce.exec(e);return o?o[1]?t(o[1]):r:!1},Se=e=>e==="position"||e==="percentage",Me=e=>e==="image"||e==="url",Pe=e=>e==="length"||e==="size"||e==="bg-size",Ie=e=>e==="length",lo=e=>e==="number",co=e=>e==="family-name",Te=e=>e==="shadow",mo=()=>{const e=b("color"),t=b("font"),r=b("text"),o=b("font-weight"),a=b("tracking"),i=b("leading"),l=b("breakpoint"),p=b("container"),m=b("spacing"),f=b("radius"),g=b("shadow"),v=b("inset-shadow"),j=b("text-shadow"),O=b("drop-shadow"),y=b("blur"),k=b("perspective"),R=b("aspect"),M=b("ease"),U=b("animate"),W=()=>["auto","avoid","all","avoid-page","page","left","right","column"],G=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],N=()=>[...G(),n,s],P=()=>["auto","hidden","clip","visible","scroll"],F=()=>["auto","contain","none"],d=()=>[n,s,m],z=()=>[$,"full","auto",...d()],ie=()=>[S,"none","subgrid",n,s],le=()=>["auto",{span:["full",S,n,s]},S,n,s],_=()=>[S,"auto",n,s],ce=()=>["auto","min","max","fr",n,s],X=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],E=()=>["start","end","center","stretch","center-safe","end-safe"],C=()=>["auto",...d()],I=()=>[$,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...d()],c=()=>[e,n,s],de=()=>[...G(),we,he,{position:[n,s]}],me=()=>["no-repeat",{repeat:["","x","y","space","round"]}],ue=()=>["auto","cover","contain",ao,ro,{size:[n,s]}],Q=()=>[ee,B,T],w=()=>["","none","full",f,n,s],x=()=>["",u,B,T],D=()=>["solid","dashed","dotted","double"],pe=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],h=()=>[u,ee,we,he],fe=()=>["","none",y,n,s],q=()=>["none",u,n,s],K=()=>["none",u,n,s],Y=()=>[u,n,s],Z=()=>[$,"full",...d()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[A],breakpoint:[A],color:[Qe],container:[A],"drop-shadow":[A],ease:["in","out","in-out"],font:[to],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[A],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[A],shadow:[A],spacing:["px",u],text:[A],"text-shadow":[A],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",$,s,n,R]}],container:["container"],columns:[{columns:[u,s,n,p]}],"break-after":[{"break-after":W()}],"break-before":[{"break-before":W()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:N()}],overflow:[{overflow:P()}],"overflow-x":[{"overflow-x":P()}],"overflow-y":[{"overflow-y":P()}],overscroll:[{overscroll:F()}],"overscroll-x":[{"overscroll-x":F()}],"overscroll-y":[{"overscroll-y":F()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:z()}],"inset-x":[{"inset-x":z()}],"inset-y":[{"inset-y":z()}],start:[{start:z()}],end:[{end:z()}],top:[{top:z()}],right:[{right:z()}],bottom:[{bottom:z()}],left:[{left:z()}],visibility:["visible","invisible","collapse"],z:[{z:[S,"auto",n,s]}],basis:[{basis:[$,"full","auto",p,...d()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[u,$,"auto","initial","none",s]}],grow:[{grow:["",u,n,s]}],shrink:[{shrink:["",u,n,s]}],order:[{order:[S,"first","last","none",n,s]}],"grid-cols":[{"grid-cols":ie()}],"col-start-end":[{col:le()}],"col-start":[{"col-start":_()}],"col-end":[{"col-end":_()}],"grid-rows":[{"grid-rows":ie()}],"row-start-end":[{row:le()}],"row-start":[{"row-start":_()}],"row-end":[{"row-end":_()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":ce()}],"auto-rows":[{"auto-rows":ce()}],gap:[{gap:d()}],"gap-x":[{"gap-x":d()}],"gap-y":[{"gap-y":d()}],"justify-content":[{justify:[...X(),"normal"]}],"justify-items":[{"justify-items":[...E(),"normal"]}],"justify-self":[{"justify-self":["auto",...E()]}],"align-content":[{content:["normal",...X()]}],"align-items":[{items:[...E(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...E(),{baseline:["","last"]}]}],"place-content":[{"place-content":X()}],"place-items":[{"place-items":[...E(),"baseline"]}],"place-self":[{"place-self":["auto",...E()]}],p:[{p:d()}],px:[{px:d()}],py:[{py:d()}],ps:[{ps:d()}],pe:[{pe:d()}],pt:[{pt:d()}],pr:[{pr:d()}],pb:[{pb:d()}],pl:[{pl:d()}],m:[{m:C()}],mx:[{mx:C()}],my:[{my:C()}],ms:[{ms:C()}],me:[{me:C()}],mt:[{mt:C()}],mr:[{mr:C()}],mb:[{mb:C()}],ml:[{ml:C()}],"space-x":[{"space-x":d()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":d()}],"space-y-reverse":["space-y-reverse"],size:[{size:I()}],w:[{w:[p,"screen",...I()]}],"min-w":[{"min-w":[p,"screen","none",...I()]}],"max-w":[{"max-w":[p,"screen","none","prose",{screen:[l]},...I()]}],h:[{h:["screen","lh",...I()]}],"min-h":[{"min-h":["screen","lh","none",...I()]}],"max-h":[{"max-h":["screen","lh",...I()]}],"font-size":[{text:["base",r,B,T]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[o,n,oe]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",ee,s]}],"font-family":[{font:[no,s,t]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[a,n,s]}],"line-clamp":[{"line-clamp":[u,"none",n,oe]}],leading:[{leading:[i,...d()]}],"list-image":[{"list-image":["none",n,s]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",n,s]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:c()}],"text-color":[{text:c()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...D(),"wavy"]}],"text-decoration-thickness":[{decoration:[u,"from-font","auto",n,T]}],"text-decoration-color":[{decoration:c()}],"underline-offset":[{"underline-offset":[u,"auto",n,s]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:d()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",n,s]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",n,s]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:de()}],"bg-repeat":[{bg:me()}],"bg-size":[{bg:ue()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},S,n,s],radial:["",n,s],conic:[S,n,s]},io,so]}],"bg-color":[{bg:c()}],"gradient-from-pos":[{from:Q()}],"gradient-via-pos":[{via:Q()}],"gradient-to-pos":[{to:Q()}],"gradient-from":[{from:c()}],"gradient-via":[{via:c()}],"gradient-to":[{to:c()}],rounded:[{rounded:w()}],"rounded-s":[{"rounded-s":w()}],"rounded-e":[{"rounded-e":w()}],"rounded-t":[{"rounded-t":w()}],"rounded-r":[{"rounded-r":w()}],"rounded-b":[{"rounded-b":w()}],"rounded-l":[{"rounded-l":w()}],"rounded-ss":[{"rounded-ss":w()}],"rounded-se":[{"rounded-se":w()}],"rounded-ee":[{"rounded-ee":w()}],"rounded-es":[{"rounded-es":w()}],"rounded-tl":[{"rounded-tl":w()}],"rounded-tr":[{"rounded-tr":w()}],"rounded-br":[{"rounded-br":w()}],"rounded-bl":[{"rounded-bl":w()}],"border-w":[{border:x()}],"border-w-x":[{"border-x":x()}],"border-w-y":[{"border-y":x()}],"border-w-s":[{"border-s":x()}],"border-w-e":[{"border-e":x()}],"border-w-t":[{"border-t":x()}],"border-w-r":[{"border-r":x()}],"border-w-b":[{"border-b":x()}],"border-w-l":[{"border-l":x()}],"divide-x":[{"divide-x":x()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":x()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...D(),"hidden","none"]}],"divide-style":[{divide:[...D(),"hidden","none"]}],"border-color":[{border:c()}],"border-color-x":[{"border-x":c()}],"border-color-y":[{"border-y":c()}],"border-color-s":[{"border-s":c()}],"border-color-e":[{"border-e":c()}],"border-color-t":[{"border-t":c()}],"border-color-r":[{"border-r":c()}],"border-color-b":[{"border-b":c()}],"border-color-l":[{"border-l":c()}],"divide-color":[{divide:c()}],"outline-style":[{outline:[...D(),"none","hidden"]}],"outline-offset":[{"outline-offset":[u,n,s]}],"outline-w":[{outline:["",u,B,T]}],"outline-color":[{outline:c()}],shadow:[{shadow:["","none",g,J,H]}],"shadow-color":[{shadow:c()}],"inset-shadow":[{"inset-shadow":["none",v,J,H]}],"inset-shadow-color":[{"inset-shadow":c()}],"ring-w":[{ring:x()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:c()}],"ring-offset-w":[{"ring-offset":[u,T]}],"ring-offset-color":[{"ring-offset":c()}],"inset-ring-w":[{"inset-ring":x()}],"inset-ring-color":[{"inset-ring":c()}],"text-shadow":[{"text-shadow":["none",j,J,H]}],"text-shadow-color":[{"text-shadow":c()}],opacity:[{opacity:[u,n,s]}],"mix-blend":[{"mix-blend":[...pe(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":pe()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[u]}],"mask-image-linear-from-pos":[{"mask-linear-from":h()}],"mask-image-linear-to-pos":[{"mask-linear-to":h()}],"mask-image-linear-from-color":[{"mask-linear-from":c()}],"mask-image-linear-to-color":[{"mask-linear-to":c()}],"mask-image-t-from-pos":[{"mask-t-from":h()}],"mask-image-t-to-pos":[{"mask-t-to":h()}],"mask-image-t-from-color":[{"mask-t-from":c()}],"mask-image-t-to-color":[{"mask-t-to":c()}],"mask-image-r-from-pos":[{"mask-r-from":h()}],"mask-image-r-to-pos":[{"mask-r-to":h()}],"mask-image-r-from-color":[{"mask-r-from":c()}],"mask-image-r-to-color":[{"mask-r-to":c()}],"mask-image-b-from-pos":[{"mask-b-from":h()}],"mask-image-b-to-pos":[{"mask-b-to":h()}],"mask-image-b-from-color":[{"mask-b-from":c()}],"mask-image-b-to-color":[{"mask-b-to":c()}],"mask-image-l-from-pos":[{"mask-l-from":h()}],"mask-image-l-to-pos":[{"mask-l-to":h()}],"mask-image-l-from-color":[{"mask-l-from":c()}],"mask-image-l-to-color":[{"mask-l-to":c()}],"mask-image-x-from-pos":[{"mask-x-from":h()}],"mask-image-x-to-pos":[{"mask-x-to":h()}],"mask-image-x-from-color":[{"mask-x-from":c()}],"mask-image-x-to-color":[{"mask-x-to":c()}],"mask-image-y-from-pos":[{"mask-y-from":h()}],"mask-image-y-to-pos":[{"mask-y-to":h()}],"mask-image-y-from-color":[{"mask-y-from":c()}],"mask-image-y-to-color":[{"mask-y-to":c()}],"mask-image-radial":[{"mask-radial":[n,s]}],"mask-image-radial-from-pos":[{"mask-radial-from":h()}],"mask-image-radial-to-pos":[{"mask-radial-to":h()}],"mask-image-radial-from-color":[{"mask-radial-from":c()}],"mask-image-radial-to-color":[{"mask-radial-to":c()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":G()}],"mask-image-conic-pos":[{"mask-conic":[u]}],"mask-image-conic-from-pos":[{"mask-conic-from":h()}],"mask-image-conic-to-pos":[{"mask-conic-to":h()}],"mask-image-conic-from-color":[{"mask-conic-from":c()}],"mask-image-conic-to-color":[{"mask-conic-to":c()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:de()}],"mask-repeat":[{mask:me()}],"mask-size":[{mask:ue()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",n,s]}],filter:[{filter:["","none",n,s]}],blur:[{blur:fe()}],brightness:[{brightness:[u,n,s]}],contrast:[{contrast:[u,n,s]}],"drop-shadow":[{"drop-shadow":["","none",O,J,H]}],"drop-shadow-color":[{"drop-shadow":c()}],grayscale:[{grayscale:["",u,n,s]}],"hue-rotate":[{"hue-rotate":[u,n,s]}],invert:[{invert:["",u,n,s]}],saturate:[{saturate:[u,n,s]}],sepia:[{sepia:["",u,n,s]}],"backdrop-filter":[{"backdrop-filter":["","none",n,s]}],"backdrop-blur":[{"backdrop-blur":fe()}],"backdrop-brightness":[{"backdrop-brightness":[u,n,s]}],"backdrop-contrast":[{"backdrop-contrast":[u,n,s]}],"backdrop-grayscale":[{"backdrop-grayscale":["",u,n,s]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[u,n,s]}],"backdrop-invert":[{"backdrop-invert":["",u,n,s]}],"backdrop-opacity":[{"backdrop-opacity":[u,n,s]}],"backdrop-saturate":[{"backdrop-saturate":[u,n,s]}],"backdrop-sepia":[{"backdrop-sepia":["",u,n,s]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":d()}],"border-spacing-x":[{"border-spacing-x":d()}],"border-spacing-y":[{"border-spacing-y":d()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",n,s]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[u,"initial",n,s]}],ease:[{ease:["linear","initial",M,n,s]}],delay:[{delay:[u,n,s]}],animate:[{animate:["none",U,n,s]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[k,n,s]}],"perspective-origin":[{"perspective-origin":N()}],rotate:[{rotate:q()}],"rotate-x":[{"rotate-x":q()}],"rotate-y":[{"rotate-y":q()}],"rotate-z":[{"rotate-z":q()}],scale:[{scale:K()}],"scale-x":[{"scale-x":K()}],"scale-y":[{"scale-y":K()}],"scale-z":[{"scale-z":K()}],"scale-3d":["scale-3d"],skew:[{skew:Y()}],"skew-x":[{"skew-x":Y()}],"skew-y":[{"skew-y":Y()}],transform:[{transform:[n,s,"","none","gpu","cpu"]}],"transform-origin":[{origin:N()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Z()}],"translate-x":[{"translate-x":Z()}],"translate-y":[{"translate-y":Z()}],"translate-z":[{"translate-z":Z()}],"translate-none":["translate-none"],accent:[{accent:c()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:c()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",n,s]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":d()}],"scroll-mx":[{"scroll-mx":d()}],"scroll-my":[{"scroll-my":d()}],"scroll-ms":[{"scroll-ms":d()}],"scroll-me":[{"scroll-me":d()}],"scroll-mt":[{"scroll-mt":d()}],"scroll-mr":[{"scroll-mr":d()}],"scroll-mb":[{"scroll-mb":d()}],"scroll-ml":[{"scroll-ml":d()}],"scroll-p":[{"scroll-p":d()}],"scroll-px":[{"scroll-px":d()}],"scroll-py":[{"scroll-py":d()}],"scroll-ps":[{"scroll-ps":d()}],"scroll-pe":[{"scroll-pe":d()}],"scroll-pt":[{"scroll-pt":d()}],"scroll-pr":[{"scroll-pr":d()}],"scroll-pb":[{"scroll-pb":d()}],"scroll-pl":[{"scroll-pl":d()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",n,s]}],fill:[{fill:["none",...c()]}],"stroke-w":[{stroke:[u,B,T,oe]}],stroke:[{stroke:["none",...c()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},Re=De(mo);function uo(...e){return Re(ne(e))}function po(e){if(isNaN(e)||!isFinite(e))return"0:00";const t=Math.floor(e/3600),r=Math.floor(e%3600/60),o=Math.floor(e%60);return t>0?`${t}:${r.toString().padStart(2,"0")}:${o.toString().padStart(2,"0")}`:`${r}:${o.toString().padStart(2,"0")}`}function fo(e){const t=e.split(":").map(Number);if(t.length===2){const[r=0,o=0]=t;return r*60+o}else if(t.length===3){const[r=0,o=0,a=0]=t;return r*3600+o*60+a}return 0}function go(...e){return Re(ne(...e))}/**
2
- * @license lucide-react v0.511.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const bo=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),ho=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,r,o)=>o?o.toUpperCase():r.toLowerCase()),wo=e=>{const t=ho(e);return t.charAt(0).toUpperCase()+t.slice(1)},xo=(...e)=>e.filter((t,r,o)=>!!t&&t.trim()!==""&&o.indexOf(t)===r).join(" ").trim(),yo=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0},xe=new Set;function ko(e,t,r="2.0"){const o=`${e}-${t}-${r}`;xe.has(o)||(xe.add(o),console.warn(`⚠️ [BaroiPlayer] DEPRECATION WARNING: ${e} is deprecated and will be removed in v${r}.
7
- Please replace it with: ${t}
8
- See https://github.com/baroi/baroiplayer/blob/main/MIGRATION.md for migration guide.`))}function vo(e,t,r={leading:!0,trailing:!0}){let o,a=0,i=null;const{leading:l=!0,trailing:p=!0}=r;return((...m)=>{const f=Date.now(),g=t-(f-a),v=()=>{a=Date.now(),i=null,o=e(...m)};return a?g<=0?(i&&(clearTimeout(i),i=null),o=e(...m),a=f):p&&!i&&(i=setTimeout(()=>v(),g)):(l&&(o=e(...m)),a=f),o})}function zo(e,t,r={}){let o=null;const{immediate:a=!1}=r;return((...i)=>{const l=()=>(o=null,e(...i)),p=()=>{if(o=null,!a)return e(...i)},f=a&&!o?e(...i):void 0;return o&&clearTimeout(o),o=setTimeout(a?p:l,t),f})}function Co(e,t){let r=e,o=0,a=e;return{update:f=>{r=f;const g=Date.now();g-o>=t&&(a=f,o=g)},getThrottledValue:()=>a,getLatestValue:()=>r,forceUpdate:()=>{a=r,o=Date.now()}}}function Ao(e){let t=[],r=!1;const o=()=>{t.length>0&&(e(t),t=[]),r=!1};return(...a)=>{t.push(a),r||(r=!0,setTimeout(()=>o(),0))}}exports.batch=Ao;exports.clsx=ne;exports.cn=uo;exports.cn$1=go;exports.createThrottledValue=Co;exports.debounce=zo;exports.formatTime=po;exports.hasA11yProp=yo;exports.mergeClasses=xo;exports.parseTime=fo;exports.showDeprecationWarning=ko;exports.throttle=vo;exports.toKebabCase=bo;exports.toPascalCase=wo;
9
- //# sourceMappingURL=utils-CFOue_9K.cjs.map