@therealtinhtute/baroiplayer 1.2.1 → 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.
- package/README.md +90 -71
- package/dist/components/icons/index.d.ts +36 -0
- package/dist/components/icons/index.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/AudioIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/BackwardIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/CameraIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/CheckIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ForwardIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/LoadingIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PauseIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PlayIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/QualityIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SettingsIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SliderIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SubtitleIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-audio.d.ts +13 -0
- package/dist/components/variants/gradient/gradient-audio.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-controls.d.ts +4 -0
- package/dist/components/variants/gradient/gradient-controls.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-glyphs.d.ts +30 -0
- package/dist/components/variants/gradient/gradient-glyphs.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-video.d.ts +16 -0
- package/dist/components/variants/gradient/gradient-video.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +750 -5640
- package/dist/index.mjs.map +1 -1
- package/dist/package.json +3 -0
- package/package.json +110 -114
- package/src/components/variants/gradient/gradient-audio.tsx +47 -0
- package/src/components/variants/gradient/gradient-controls.tsx +254 -0
- package/src/components/variants/gradient/gradient-glyphs.test.tsx +69 -0
- package/src/components/variants/gradient/gradient-glyphs.tsx +129 -0
- package/src/components/variants/gradient/gradient-skin.css +211 -0
- package/src/components/variants/gradient/gradient-video.tsx +70 -0
- package/src/index.ts +5 -198
- package/src/test/accessibility-utils.ts +0 -59
- package/dist/context/media.js +0 -1
- package/dist/context/media.mjs +0 -3
- package/dist/context/store.js +0 -1
- package/dist/context/store.mjs +0 -3
- package/dist/context-Bzd5QCKM.cjs +0 -7
- package/dist/context-Bzd5QCKM.cjs.map +0 -1
- package/dist/context-DD_SH4tT.js +0 -1053
- package/dist/context-DD_SH4tT.js.map +0 -1
- package/dist/core-events-BRnLMB7s.cjs +0 -2
- package/dist/core-events-BRnLMB7s.cjs.map +0 -1
- package/dist/core-events-v_mKdj5p.js +0 -417
- package/dist/core-events-v_mKdj5p.js.map +0 -1
- package/dist/core-plugins-CMBv-yVh.cjs +0 -2
- package/dist/core-plugins-CMBv-yVh.cjs.map +0 -1
- package/dist/core-plugins-CqCxLkbd.js +0 -754
- package/dist/core-plugins-CqCxLkbd.js.map +0 -1
- package/dist/core.js +0 -15
- package/dist/core.js.map +0 -1
- package/dist/core.mjs +0 -960
- package/dist/core.mjs.map +0 -1
- package/dist/enhanced-components-BwjBqSA1.js +0 -2858
- package/dist/enhanced-components-BwjBqSA1.js.map +0 -1
- package/dist/enhanced-components-C-ka-XLp.cjs +0 -2
- package/dist/enhanced-components-C-ka-XLp.cjs.map +0 -1
- package/dist/hooks-B-IIWPJr.js +0 -1842
- package/dist/hooks-B-IIWPJr.js.map +0 -1
- package/dist/hooks-DcHzmBwA.cjs +0 -4
- package/dist/hooks-DcHzmBwA.cjs.map +0 -1
- package/dist/minimal-components-BYsMQde5.js +0 -1610
- package/dist/minimal-components-BYsMQde5.js.map +0 -1
- package/dist/minimal-components-CsxQbDp7.cjs +0 -2
- package/dist/minimal-components-CsxQbDp7.cjs.map +0 -1
- package/dist/minimal-components.css +0 -1
- package/dist/mona-loading.gif +0 -0
- package/dist/performance-monitor-DCSijLJg.js +0 -312
- package/dist/performance-monitor-DCSijLJg.js.map +0 -1
- package/dist/performance-monitor-wNFKmqMr.cjs +0 -2
- package/dist/performance-monitor-wNFKmqMr.cjs.map +0 -1
- package/dist/rolldown-runtime-BmowowmI.js +0 -14
- package/dist/rolldown-runtime-mLOUI7ql.cjs +0 -1
- package/dist/utils-D2gQ7c2R.js +0 -64
- package/dist/utils-D2gQ7c2R.js.map +0 -1
- package/dist/utils-DJaAwiZ9.cjs +0 -2
- package/dist/utils-DJaAwiZ9.cjs.map +0 -1
- package/dist/utils.js +0 -1
- package/dist/utils.mjs +0 -3
- package/src/adapters/videojs-adapter.tsx +0 -470
- package/src/assets/mona-loading.gif +0 -0
- package/src/components/AnimateLoading.tsx +0 -111
- package/src/components/LoadingState.tsx +0 -239
- package/src/components/__tests__/media-player-accessibility.test.tsx +0 -510
- package/src/components/__tests__/media-player-react19.test.tsx +0 -457
- package/src/components/accessibility/keyboard-help-overlay.tsx +0 -207
- package/src/components/audio-player.tsx +0 -85
- package/src/components/basic/index.ts +0 -37
- package/src/components/enhanced/advanced-features.tsx +0 -311
- package/src/components/enhanced/debug-panel.tsx +0 -448
- package/src/components/enhanced/enhanced-controls.tsx +0 -597
- package/src/components/enhanced/enhanced-media-player.tsx +0 -566
- package/src/components/enhanced/error-handling.tsx +0 -338
- package/src/components/enhanced/index.ts +0 -39
- package/src/components/enhanced/media-player-enhanced.tsx +0 -383
- package/src/components/examples/basic-video-player.tsx +0 -50
- package/src/components/examples/custom-controls-example.tsx +0 -63
- package/src/components/examples/enhanced-controls-example.tsx +0 -100
- package/src/components/examples/enhanced-media-player-example.tsx +0 -302
- package/src/components/examples/loading-states-demo.tsx +0 -141
- package/src/components/examples/react-19-demo.tsx +0 -349
- package/src/components/examples/volume-orientation-demo.tsx +0 -105
- package/src/components/icon-demo.tsx +0 -196
- package/src/components/legacy.tsx +0 -87
- package/src/components/media-metadata-display.tsx +0 -99
- package/src/components/media-player-audio.tsx +0 -39
- package/src/components/media-player-controls.tsx +0 -223
- package/src/components/media-player-error.tsx +0 -163
- package/src/components/media-player-fullscreen.tsx +0 -109
- package/src/components/media-player-hls.tsx +0 -111
- package/src/components/media-player-loading.tsx +0 -76
- package/src/components/media-player-play.tsx +0 -75
- package/src/components/media-player-root.tsx +0 -338
- package/src/components/media-player-seek.tsx +0 -168
- package/src/components/media-player-time.tsx +0 -99
- package/src/components/media-player-tooltip.tsx +0 -58
- package/src/components/media-player-video.tsx +0 -54
- package/src/components/media-player-volume.tsx +0 -155
- package/src/components/media-player.tsx +0 -292
- package/src/components/media-suspense.tsx +0 -344
- package/src/components/player-settings-form.tsx +0 -158
- package/src/components/react-player-wrapper.tsx +0 -651
- package/src/components/simple-video-player.tsx +0 -62
- package/src/components/ui/blur-poster.tsx +0 -96
- package/src/components/ui/empty-state.tsx +0 -91
- package/src/components/ui/enhanced-seek-bar.tsx +0 -254
- package/src/components/ui/error-state.tsx +0 -124
- package/src/components/ui/fullscreen-button.tsx +0 -81
- package/src/components/ui/loading-skeleton.tsx +0 -107
- package/src/components/ui/media-resource-preloader.tsx +0 -458
- package/src/components/ui/offline-message.tsx +0 -98
- package/src/components/ui/play-button.tsx +0 -99
- package/src/components/ui/seek-bar.tsx +0 -191
- package/src/components/ui/time-display.tsx +0 -61
- package/src/components/ui/volume-control.tsx +0 -190
- package/src/components/unified/base-media-player.tsx +0 -252
- package/src/components/unified/media-player.tsx +0 -75
- package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -587
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -573
- package/src/components/variants/minimal/MinimalControls.tsx +0 -124
- package/src/components/variants/minimal/MinimalLoading.tsx +0 -28
- package/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -318
- package/src/components/variants/minimal/MinimalOverlay.tsx +0 -58
- package/src/components/variants/minimal/MinimalPlayButton.tsx +0 -56
- package/src/components/variants/minimal/MinimalSeekBar.tsx +0 -140
- package/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -75
- package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -206
- package/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
- package/src/components/variants/minimal/components/ControlBar.tsx +0 -142
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -412
- package/src/components/variants/minimal/components/PlaybackControls.tsx +0 -46
- package/src/components/variants/minimal/components/RightControls.tsx +0 -164
- package/src/components/variants/minimal/components/SeekBar.tsx +0 -127
- package/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -68
- package/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
- package/src/components/variants/minimal/components/TimeDisplay.tsx +0 -15
- package/src/components/variants/minimal/components/VideoElement.tsx +0 -35
- package/src/components/variants/minimal/components/VolumeControl.tsx +0 -220
- package/src/components/variants/minimal/index.ts +0 -23
- package/src/components/video-player.tsx +0 -100
- package/src/context/__tests__/media-store.test.ts +0 -509
- package/src/context/error-handling.ts +0 -398
- package/src/context/media-context.tsx +0 -254
- package/src/context/media-provider.tsx +0 -264
- package/src/context/media-store.ts +0 -387
- package/src/context/persistence.ts +0 -462
- package/src/core/events/event-system.ts +0 -448
- package/src/core/events/hooks.ts +0 -325
- package/src/core/events/index.ts +0 -22
- package/src/core/events/middleware.ts +0 -286
- package/src/core/index.ts +0 -22
- package/src/core/optimization/bundle-optimizer.tsx +0 -312
- package/src/core/performance/cicd.ts +0 -98
- package/src/core/performance/index.ts +0 -38
- package/src/core/performance/media-loading-optimizer.ts +0 -545
- package/src/core/performance/performance-budgets.ts +0 -437
- package/src/core/performance/performance-monitor.tsx +0 -488
- package/src/core/performance/performance-testing.ts +0 -461
- package/src/core/plugins/__tests__/registry.test.ts +0 -595
- package/src/core/plugins/base-plugin.ts +0 -225
- package/src/core/plugins/enhanced-plugin-system.ts +0 -435
- package/src/core/plugins/examples/analytics-plugin.ts +0 -241
- package/src/core/plugins/index.ts +0 -39
- package/src/core/plugins/registry.ts +0 -546
- package/src/core/plugins/types.ts +0 -169
- package/src/core/plugins/utils.ts +0 -317
- package/src/core/progressive-loading.tsx +0 -331
- package/src/core/providers/enhanced-hls-provider.ts +0 -307
- package/src/core/providers/lazy-provider.tsx +0 -14
- package/src/core/providers/service-provider.tsx +0 -164
- package/src/core/utils.tsx +0 -34
- package/src/features/media-session/media-session-manager.ts +0 -411
- package/src/features/picture-in-picture/pip-manager.ts +0 -428
- package/src/features/playlist/playlist-manager.ts +0 -626
- package/src/features/subtitles/subtitle-manager.ts +0 -435
- package/src/features/subtitles/subtitle-parser.ts +0 -284
- package/src/features/thumbnails/thumbnail-generator.ts +0 -528
- package/src/hooks/__tests__/currentTime-fix.test.ts +0 -149
- package/src/hooks/__tests__/use-media-player.test.ts +0 -712
- package/src/hooks/__tests__/use-media-state.test.tsx +0 -316
- package/src/hooks/accessibility/index.ts +0 -27
- package/src/hooks/accessibility/use-accessibility-preferences.ts +0 -190
- package/src/hooks/accessibility/use-focus-management.ts +0 -183
- package/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -152
- package/src/hooks/accessibility/use-screen-reader.ts +0 -212
- package/src/hooks/core/index.ts +0 -47
- package/src/hooks/legacy.ts +0 -21
- package/src/hooks/use-buffer-health.ts +0 -218
- package/src/hooks/use-enhanced-media-player.ts +0 -575
- package/src/hooks/use-focus-trap.tsx +0 -162
- package/src/hooks/use-intelligent-preloading.ts +0 -387
- package/src/hooks/use-keyboard-controls.ts +0 -115
- package/src/hooks/use-keyboard-shortcuts.ts +0 -255
- package/src/hooks/use-media-actions.ts +0 -184
- package/src/hooks/use-media-metadata.ts +0 -91
- package/src/hooks/use-media-optimistic.ts +0 -264
- package/src/hooks/use-media-player.ts +0 -343
- package/src/hooks/use-media-state.ts +0 -194
- package/src/hooks/use-memory-optimization.ts +0 -360
- package/src/hooks/use-network-status.ts +0 -124
- package/src/hooks/use-optimistic-controls.ts +0 -95
- package/src/hooks/use-optimized-media.ts +0 -283
- package/src/hooks/use-smart-preload.ts +0 -229
- package/src/hooks/use-touch-gestures.ts +0 -461
- package/src/hooks/useEnhancedSubtitles.ts +0 -258
- package/src/hooks/useKeyboardShortcuts.ts +0 -106
- package/src/hooks/useMediaControls.ts +0 -52
- package/src/hooks/useScreenshot.ts +0 -77
- package/src/hooks/useSubtitles.ts +0 -91
- package/src/hooks/useVideoPlayer.ts +0 -278
- package/src/icons/components/FullscreenIcon.tsx +0 -36
- package/src/icons/components/SettingsIcon.tsx +0 -37
- package/src/icons/components/animated/LoadingIcon.tsx +0 -27
- package/src/icons/components/animated/PlayPauseIcon.tsx +0 -42
- package/src/icons/components/media/PauseIcon.tsx +0 -38
- package/src/icons/components/media/PlayIcon.tsx +0 -37
- package/src/icons/components/volume/VolumeIcon.tsx +0 -38
- package/src/icons/components/volume/VolumeOffIcon.tsx +0 -38
- package/src/icons/index.ts +0 -56
- package/src/icons/provider.tsx +0 -58
- package/src/icons/types.ts +0 -60
- package/src/index-enhanced.ts +0 -35
- package/src/index-legacy.ts +0 -324
- package/src/index.css +0 -102
- package/src/lib/__tests__/async-utils.test.ts +0 -291
- package/src/lib/async-utils.ts +0 -194
- package/src/lib/deprecation.ts +0 -51
- package/src/lib/format-time.ts +0 -37
- package/src/lib/index.ts +0 -4
- package/src/lib/utils.ts +0 -6
- package/src/styles/globals.css +0 -462
- package/src/styles/minimal-player.css +0 -621
- package/src/styles/pixel-art.css +0 -41
- package/src/styles/videojs.css +0 -100
- package/src/types/assets.d.ts +0 -29
- package/src/types/events.ts +0 -47
- package/src/types/formats.ts +0 -79
- package/src/types/index.ts +0 -203
- package/src/types/videojs-plugins.d.ts +0 -14
package/src/lib/async-utils.ts
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Async utilities for performance optimization
|
|
3
|
-
* Provides throttle and debounce functions for controlling event frequency
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Throttle function that ensures a function is only called at most once
|
|
8
|
-
* within a specified time period. Includes options for leading and trailing calls.
|
|
9
|
-
*
|
|
10
|
-
* @param func - The function to throttle
|
|
11
|
-
* @param limit - The time limit in milliseconds
|
|
12
|
-
* @param options - Options for leading/trailing edge calls
|
|
13
|
-
* @returns The throttled function
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* // Throttle a click handler to at most once per 250ms
|
|
17
|
-
* const throttledClick = throttle(handleClick, 250);
|
|
18
|
-
*
|
|
19
|
-
* // For timeupdate events with leading edge disabled
|
|
20
|
-
* const throttledUpdate = throttle(handleUpdate, 250, { leading: false });
|
|
21
|
-
*/
|
|
22
|
-
export function throttle<T extends (...args: Parameters<T>) => ReturnType<T>>(
|
|
23
|
-
func: T,
|
|
24
|
-
limit: number,
|
|
25
|
-
options: { leading?: boolean; trailing?: boolean } = {
|
|
26
|
-
leading: true,
|
|
27
|
-
trailing: true
|
|
28
|
-
}
|
|
29
|
-
): T {
|
|
30
|
-
let lastResult: ReturnType<T> | undefined
|
|
31
|
-
let lastCallTime = 0
|
|
32
|
-
let timeoutId: ReturnType<typeof setTimeout> | null = null
|
|
33
|
-
const { leading = true, trailing = true } = options
|
|
34
|
-
|
|
35
|
-
return ((...args: Parameters<T>): ReturnType<T> => {
|
|
36
|
-
const now = Date.now()
|
|
37
|
-
const remaining = limit - (now - lastCallTime)
|
|
38
|
-
|
|
39
|
-
const call = () => {
|
|
40
|
-
lastCallTime = Date.now()
|
|
41
|
-
timeoutId = null
|
|
42
|
-
lastResult = func(...args)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (!lastCallTime) {
|
|
46
|
-
// First call - respect leading option
|
|
47
|
-
if (leading) {
|
|
48
|
-
lastResult = func(...args)
|
|
49
|
-
}
|
|
50
|
-
lastCallTime = now
|
|
51
|
-
} else if (remaining <= 0) {
|
|
52
|
-
// Time limit reached
|
|
53
|
-
if (timeoutId) {
|
|
54
|
-
clearTimeout(timeoutId)
|
|
55
|
-
timeoutId = null
|
|
56
|
-
}
|
|
57
|
-
lastResult = func(...args)
|
|
58
|
-
lastCallTime = now
|
|
59
|
-
} else if (trailing && !timeoutId) {
|
|
60
|
-
// Schedule trailing call
|
|
61
|
-
timeoutId = setTimeout(() => call(), remaining)
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return lastResult as ReturnType<T>
|
|
65
|
-
}) as T
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Debounce function that delays calling a function until after a specified
|
|
70
|
-
* wait period has elapsed since the last time the debounced function was called.
|
|
71
|
-
*
|
|
72
|
-
* @param func - The function to debounce
|
|
73
|
-
* @param wait - The wait period in milliseconds
|
|
74
|
-
* @param options - Options for immediate invocation
|
|
75
|
-
* @returns The debounced function
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* // Debounce a resize handler
|
|
79
|
-
* const debouncedResize = debounce(handleResize, 150);
|
|
80
|
-
*
|
|
81
|
-
* // Debounce with immediate option for form validation
|
|
82
|
-
* const immediateValidate = debounce(validateForm, 300, { immediate: true });
|
|
83
|
-
*/
|
|
84
|
-
export function debounce<T extends (...args: Parameters<T>) => ReturnType<T>>(
|
|
85
|
-
func: T,
|
|
86
|
-
wait: number,
|
|
87
|
-
options: { immediate?: boolean } = {}
|
|
88
|
-
): T {
|
|
89
|
-
let timeoutId: ReturnType<typeof setTimeout> | null = null
|
|
90
|
-
const { immediate = false } = options
|
|
91
|
-
|
|
92
|
-
return ((...args: Parameters<T>): ReturnType<T> => {
|
|
93
|
-
const call = () => {
|
|
94
|
-
timeoutId = null
|
|
95
|
-
return func(...args)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const later = () => {
|
|
99
|
-
timeoutId = null
|
|
100
|
-
if (!immediate) {
|
|
101
|
-
return func(...args)
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const callNow = immediate && !timeoutId
|
|
106
|
-
const result = callNow ? func(...args) : undefined
|
|
107
|
-
|
|
108
|
-
if (timeoutId) {
|
|
109
|
-
clearTimeout(timeoutId)
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
timeoutId = setTimeout(immediate ? later : call, wait)
|
|
113
|
-
|
|
114
|
-
return result as ReturnType<T>
|
|
115
|
-
}) as T
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Creates a throttled callback that only updates the value at most once
|
|
120
|
-
* per interval, but always returns the latest value when called.
|
|
121
|
-
* Useful for UI updates that should be throttled but need to show final state.
|
|
122
|
-
*
|
|
123
|
-
* @param initialValue - The initial value
|
|
124
|
-
* @param limit - The time limit in milliseconds
|
|
125
|
-
* @returns An object with update function and getter functions
|
|
126
|
-
*
|
|
127
|
-
* @example
|
|
128
|
-
* const { update, getThrottledValue, getLatestValue } = createThrottledValue(0, 250);
|
|
129
|
-
*/
|
|
130
|
-
export function createThrottledValue<T>(initialValue: T, limit: number) {
|
|
131
|
-
let latestValue = initialValue
|
|
132
|
-
let lastUpdateTime = 0
|
|
133
|
-
let throttledValue = initialValue
|
|
134
|
-
|
|
135
|
-
const update = (value: T) => {
|
|
136
|
-
latestValue = value
|
|
137
|
-
const now = Date.now()
|
|
138
|
-
if (now - lastUpdateTime >= limit) {
|
|
139
|
-
throttledValue = value
|
|
140
|
-
lastUpdateTime = now
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const getThrottledValue = () => throttledValue
|
|
145
|
-
const getLatestValue = () => latestValue
|
|
146
|
-
const forceUpdate = () => {
|
|
147
|
-
throttledValue = latestValue
|
|
148
|
-
lastUpdateTime = Date.now()
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return { update, getThrottledValue, getLatestValue, forceUpdate }
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Batch multiple rapid calls into a single call at the end of the event loop.
|
|
156
|
-
* Useful for React state updates that should be batched.
|
|
157
|
-
*
|
|
158
|
-
* @param func - The function to call with batched arguments
|
|
159
|
-
* @returns A function that batches arguments and calls the original function once
|
|
160
|
-
*
|
|
161
|
-
* @example
|
|
162
|
-
* const batchUpdate = batch((updates) => {
|
|
163
|
-
* updates.forEach(update => setState(prev => ({ ...prev, ...update })));
|
|
164
|
-
* });
|
|
165
|
-
*
|
|
166
|
-
* // Multiple rapid calls will be batched
|
|
167
|
-
* batchUpdate({ a: 1 });
|
|
168
|
-
* batchUpdate({ a: 2 });
|
|
169
|
-
* batchUpdate({ a: 3 });
|
|
170
|
-
*/
|
|
171
|
-
export function batch<T extends (...args: Parameters<T>) => void>(
|
|
172
|
-
func: (args: Parameters<T>[]) => void
|
|
173
|
-
): (...args: Parameters<T>) => void {
|
|
174
|
-
let batchedArgs: Parameters<T>[] = []
|
|
175
|
-
let scheduled = false
|
|
176
|
-
|
|
177
|
-
const flush = () => {
|
|
178
|
-
if (batchedArgs.length > 0) {
|
|
179
|
-
func(batchedArgs)
|
|
180
|
-
batchedArgs = []
|
|
181
|
-
}
|
|
182
|
-
scheduled = false
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
return (...args: Parameters<T>) => {
|
|
186
|
-
batchedArgs.push(args)
|
|
187
|
-
if (!scheduled) {
|
|
188
|
-
scheduled = true
|
|
189
|
-
// Use setImmediate/setTimeout pattern for cross-environment compatibility
|
|
190
|
-
// In browsers this schedules as a macrotask, in tests with fake timers it will fire
|
|
191
|
-
setTimeout(() => flush(), 0)
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
package/src/lib/deprecation.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deprecation warning utility
|
|
3
|
-
* Shows console warnings for deprecated components and hooks
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const deprecationWarnings = new Set<string>()
|
|
7
|
-
|
|
8
|
-
export function showDeprecationWarning(
|
|
9
|
-
itemName: string,
|
|
10
|
-
replacement: string,
|
|
11
|
-
version: string = "2.0"
|
|
12
|
-
) {
|
|
13
|
-
const key = `${itemName}-${replacement}-${version}`
|
|
14
|
-
|
|
15
|
-
if (deprecationWarnings.has(key)) {
|
|
16
|
-
return // Already shown this warning
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
deprecationWarnings.add(key)
|
|
20
|
-
|
|
21
|
-
console.warn(
|
|
22
|
-
`⚠️ [BaroiPlayer] DEPRECATION WARNING: ${itemName} is deprecated and will be removed in v${version}.` +
|
|
23
|
-
`\n Please replace it with: ${replacement}` +
|
|
24
|
-
`\n See https://github.com/baroi/baroiplayer/blob/main/MIGRATION.md for migration guide.`
|
|
25
|
-
)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function createDeprecatedComponent<T>(
|
|
29
|
-
ComponentName: string,
|
|
30
|
-
replacement: string,
|
|
31
|
-
component: T
|
|
32
|
-
): T {
|
|
33
|
-
const DeprecatedComponent = component as any
|
|
34
|
-
|
|
35
|
-
// Add deprecation warning to the component
|
|
36
|
-
if (typeof DeprecatedComponent === "function") {
|
|
37
|
-
const originalComponent = DeprecatedComponent
|
|
38
|
-
const WrappedComponent = function (props: any) {
|
|
39
|
-
showDeprecationWarning(ComponentName, replacement)
|
|
40
|
-
return originalComponent(props)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Copy over displayName and other properties
|
|
44
|
-
Object.setPrototypeOf(WrappedComponent, originalComponent)
|
|
45
|
-
WrappedComponent.displayName = `Deprecated(${ComponentName})`
|
|
46
|
-
|
|
47
|
-
return WrappedComponent as T
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return component
|
|
51
|
-
}
|
package/src/lib/format-time.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Formats time in seconds to a human-readable string (MM:SS or HH:MM:SS)
|
|
3
|
-
*/
|
|
4
|
-
export function formatTime(seconds: number): string {
|
|
5
|
-
if (isNaN(seconds) || !isFinite(seconds)) {
|
|
6
|
-
return "0:00"
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const hours = Math.floor(seconds / 3600)
|
|
10
|
-
const minutes = Math.floor((seconds % 3600) / 60)
|
|
11
|
-
const secs = Math.floor(seconds % 60)
|
|
12
|
-
|
|
13
|
-
if (hours > 0) {
|
|
14
|
-
return `${hours}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return `${minutes}:${secs.toString().padStart(2, "0")}`
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Parses a time string (MM:SS or HH:MM:SS) to seconds
|
|
22
|
-
*/
|
|
23
|
-
export function parseTime(timeString: string): number {
|
|
24
|
-
const parts = timeString.split(":").map(Number)
|
|
25
|
-
|
|
26
|
-
if (parts.length === 2) {
|
|
27
|
-
// MM:SS format
|
|
28
|
-
const [minutes = 0, seconds = 0] = parts
|
|
29
|
-
return minutes * 60 + seconds
|
|
30
|
-
} else if (parts.length === 3) {
|
|
31
|
-
// HH:MM:SS format
|
|
32
|
-
const [hours = 0, minutes = 0, seconds = 0] = parts
|
|
33
|
-
return hours * 3600 + minutes * 60 + seconds
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return 0
|
|
37
|
-
}
|
package/src/lib/index.ts
DELETED