@djangocfg/ui-tools 2.1.415 → 2.1.417

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 (140) hide show
  1. package/dist/audio-player/index.cjs +2099 -0
  2. package/dist/audio-player/index.cjs.map +1 -0
  3. package/dist/audio-player/index.css +65 -0
  4. package/dist/audio-player/index.css.map +1 -0
  5. package/dist/audio-player/index.d.cts +174 -0
  6. package/dist/audio-player/index.d.ts +174 -0
  7. package/dist/audio-player/index.mjs +2076 -0
  8. package/dist/audio-player/index.mjs.map +1 -0
  9. package/dist/composer-registry/index.cjs +45 -0
  10. package/dist/composer-registry/index.cjs.map +1 -0
  11. package/dist/composer-registry/index.d.cts +73 -0
  12. package/dist/composer-registry/index.d.ts +73 -0
  13. package/dist/composer-registry/index.mjs +39 -0
  14. package/dist/composer-registry/index.mjs.map +1 -0
  15. package/dist/file-icon/index.d.cts +1 -1
  16. package/dist/file-icon/index.d.ts +1 -1
  17. package/dist/slots-ClRpIzoh.d.cts +88 -0
  18. package/dist/slots-ClRpIzoh.d.ts +88 -0
  19. package/dist/tree/index.cjs +2019 -279
  20. package/dist/tree/index.cjs.map +1 -1
  21. package/dist/tree/index.d.cts +731 -72
  22. package/dist/tree/index.d.ts +731 -72
  23. package/dist/tree/index.mjs +2009 -282
  24. package/dist/tree/index.mjs.map +1 -1
  25. package/package.json +18 -9
  26. package/src/tools/chat/README.md +111 -1
  27. package/src/tools/chat/composer/Composer.tsx +146 -25
  28. package/src/tools/chat/composer/ComposerRichTextarea.tsx +25 -0
  29. package/src/tools/chat/composer/index.ts +22 -0
  30. package/src/tools/chat/composer/slash/README.md +187 -0
  31. package/src/tools/chat/composer/slash/SlashHighlightTextarea.tsx +144 -0
  32. package/src/tools/chat/composer/slash/SlashMenu.tsx +142 -0
  33. package/src/tools/chat/composer/slash/SlashToken.tsx +57 -0
  34. package/src/tools/chat/composer/slash/index.ts +44 -0
  35. package/src/tools/chat/composer/slash/labels.ts +19 -0
  36. package/src/tools/chat/composer/slash/state.ts +168 -0
  37. package/src/tools/chat/composer/slash/types.ts +64 -0
  38. package/src/tools/chat/composer/slash/useSlashCommands.ts +204 -0
  39. package/src/tools/chat/composer/types.ts +8 -0
  40. package/src/tools/chat/context/ChatProvider.tsx +13 -78
  41. package/src/tools/chat/hooks/useAutoFocusOnStreamEnd.ts +12 -15
  42. package/src/tools/chat/hooks/useFocusOnEmptyClick.ts +4 -5
  43. package/src/tools/chat/launcher/header/ChatHeader.tsx +14 -19
  44. package/src/tools/chat/launcher/header/ChatHeaderActionButton.tsx +8 -12
  45. package/src/tools/chat/shell/SuggestedPrompts.tsx +194 -0
  46. package/src/tools/chat/shell/index.ts +6 -0
  47. package/src/tools/data/Listbox/lazy.tsx +1 -1
  48. package/src/tools/data/Masonry/lazy.tsx +1 -1
  49. package/src/tools/data/Timeline/lazy.tsx +1 -1
  50. package/src/tools/data/Tree/FinderTree.tsx +42 -0
  51. package/src/tools/data/Tree/README.md +337 -208
  52. package/src/tools/data/Tree/TreeDndProvider.tsx +137 -0
  53. package/src/tools/data/Tree/TreeRoot.tsx +111 -72
  54. package/src/tools/data/Tree/__tests__/dnd.test.ts +160 -0
  55. package/src/tools/data/Tree/__tests__/keyboard.test.ts +137 -0
  56. package/src/tools/data/Tree/__tests__/renameUtils.test.ts +52 -0
  57. package/src/tools/data/Tree/__tests__/selection.test.ts +227 -0
  58. package/src/tools/data/Tree/components/TreeDropIndicator.tsx +65 -0
  59. package/src/tools/data/Tree/components/TreeEmptyArea.tsx +160 -0
  60. package/src/tools/data/Tree/components/TreeRenameInput.tsx +114 -0
  61. package/src/tools/data/Tree/components/TreeRow.tsx +103 -8
  62. package/src/tools/data/Tree/components/index.ts +6 -0
  63. package/src/tools/data/Tree/context/TreeContext.tsx +223 -363
  64. package/src/tools/data/Tree/context/TreeContextValue.ts +139 -0
  65. package/src/tools/data/Tree/context/async-children/collect-ids.ts +27 -0
  66. package/src/tools/data/Tree/context/async-children/index.ts +8 -0
  67. package/src/tools/data/Tree/context/async-children/use-async-children.ts +157 -0
  68. package/src/tools/data/Tree/context/clipboard/index.ts +4 -0
  69. package/src/tools/data/Tree/context/clipboard/use-clipboard.ts +115 -0
  70. package/src/tools/data/Tree/context/dnd/index.ts +8 -0
  71. package/src/tools/data/Tree/context/dnd/use-dnd.ts +194 -0
  72. package/src/tools/data/Tree/context/expansion/index.ts +4 -0
  73. package/src/tools/data/Tree/context/expansion/use-expansion.ts +55 -0
  74. package/src/tools/data/Tree/context/hooks.ts +68 -1
  75. package/src/tools/data/Tree/context/index.ts +3 -0
  76. package/src/tools/data/Tree/context/menu/builtin-actions.ts +357 -0
  77. package/src/tools/data/Tree/context/menu/index.ts +11 -0
  78. package/src/tools/data/Tree/context/menu/render.tsx +75 -0
  79. package/src/tools/data/Tree/context/menu/use-resolved-menu.ts +141 -0
  80. package/src/tools/data/Tree/context/persist/index.ts +4 -0
  81. package/src/tools/data/Tree/context/persist/use-persist-sync.ts +74 -0
  82. package/src/tools/data/Tree/context/rename/index.ts +4 -0
  83. package/src/tools/data/Tree/context/rename/use-rename.ts +113 -0
  84. package/src/tools/data/Tree/context/selection/index.ts +4 -0
  85. package/src/tools/data/Tree/context/selection/use-selection.ts +146 -0
  86. package/src/tools/data/Tree/context/state/index.ts +6 -0
  87. package/src/tools/data/Tree/context/state/initial.ts +41 -0
  88. package/src/tools/data/Tree/context/state/reducer.ts +76 -0
  89. package/src/tools/data/Tree/context/state/types.ts +46 -0
  90. package/src/tools/data/Tree/data/clipboard.ts +33 -0
  91. package/src/tools/data/Tree/data/dnd.ts +123 -0
  92. package/src/tools/data/Tree/data/finderShortcuts.ts +67 -0
  93. package/src/tools/data/Tree/data/index.ts +19 -0
  94. package/src/tools/data/Tree/data/renameUtils.ts +51 -0
  95. package/src/tools/data/Tree/data/selection.ts +157 -0
  96. package/src/tools/data/Tree/hooks/finder-hotkeys/build-ctx.ts +48 -0
  97. package/src/tools/data/Tree/hooks/finder-hotkeys/index.ts +8 -0
  98. package/src/tools/data/Tree/hooks/finder-hotkeys/use-tree-finder-hotkeys.ts +166 -0
  99. package/src/tools/data/Tree/hooks/index.ts +23 -4
  100. package/src/tools/data/Tree/hooks/keyboard/activation.ts +27 -0
  101. package/src/tools/data/Tree/hooks/keyboard/arrow-nav.ts +26 -0
  102. package/src/tools/data/Tree/hooks/keyboard/expand-collapse.ts +54 -0
  103. package/src/tools/data/Tree/hooks/keyboard/index.ts +10 -0
  104. package/src/tools/data/Tree/hooks/keyboard/types.ts +39 -0
  105. package/src/tools/data/Tree/hooks/keyboard/use-tree-keyboard.ts +196 -0
  106. package/src/tools/data/Tree/hooks/type-ahead/index.ts +5 -0
  107. package/src/tools/data/Tree/hooks/type-ahead/match-prefix.ts +42 -0
  108. package/src/tools/data/Tree/hooks/{useTreeTypeAhead.ts → type-ahead/use-tree-type-ahead.ts} +8 -19
  109. package/src/tools/data/Tree/index.tsx +26 -2
  110. package/src/tools/data/Tree/types/activation.ts +30 -0
  111. package/src/tools/data/Tree/types/adapter.ts +70 -0
  112. package/src/tools/data/Tree/types/index.ts +27 -0
  113. package/src/tools/data/Tree/types/labels.ts +97 -0
  114. package/src/tools/data/Tree/types/loader.ts +9 -0
  115. package/src/tools/data/Tree/types/node.ts +38 -0
  116. package/src/tools/data/Tree/types/root-props.ts +158 -0
  117. package/src/tools/data/Tree/types/selection.ts +3 -0
  118. package/src/tools/data/Tree/types/slots.ts +64 -0
  119. package/src/tools/dev/OpenapiViewer/components/DocsLayout/EndpointDoc/Header/MetaActions.tsx +6 -9
  120. package/src/tools/dev/OpenapiViewer/components/DocsLayout/index.tsx +2 -4
  121. package/src/tools/forms/MarkdownEditor/MarkdownEditor.tsx +85 -0
  122. package/src/tools/forms/MarkdownEditor/index.ts +1 -0
  123. package/src/tools/forms/MarkdownEditor/lazy.tsx +6 -0
  124. package/src/tools/forms/MarkdownEditor/slash/SlashCommandNode.ts +162 -0
  125. package/src/tools/forms/MarkdownEditor/slash/index.ts +4 -0
  126. package/src/tools/forms/MarkdownEditor/slash/syncSlashNode.ts +97 -0
  127. package/src/tools/forms/MarkdownEditor/slash/types.ts +13 -0
  128. package/src/tools/forms/MarkdownEditor/styles.css +18 -0
  129. package/src/tools/input/SpeechRecognition/widgets/VoiceComposerSlot.tsx +11 -12
  130. package/src/tools/integration/ComposerRegistry/index.ts +105 -0
  131. package/src/tools/media/AudioPlayer/Player.tsx +2 -0
  132. package/src/tools/media/AudioPlayer/PlayerShell.tsx +37 -22
  133. package/src/tools/media/AudioPlayer/lazy.tsx +30 -42
  134. package/src/tools/media/AudioPlayer/parts/Controls/IconButton.tsx +10 -11
  135. package/src/tools/media/AudioPlayer/parts/Controls/VolumeControl.tsx +52 -115
  136. package/src/tools/media/AudioPlayer/types.ts +15 -0
  137. package/dist/types-j2vhn4Kv.d.cts +0 -241
  138. package/dist/types-j2vhn4Kv.d.ts +0 -241
  139. package/src/tools/data/Tree/hooks/useTreeKeyboard.ts +0 -171
  140. package/src/tools/data/Tree/types.ts +0 -217
@@ -0,0 +1,174 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+
5
+ type WaveformMode = 'peaks' | 'live' | 'bars' | 'progress' | 'none';
6
+ type WaveformConfig = {
7
+ mode?: WaveformMode;
8
+ peaks?: Float32Array;
9
+ height?: number;
10
+ barWidth?: number;
11
+ barGap?: number;
12
+ bgColor?: string;
13
+ fgColor?: string;
14
+ decodeOnMount?: boolean;
15
+ };
16
+ type ReactiveCoverMode = false | 'subtle';
17
+ type PlayerVariant = 'default' | 'compact' | 'auto';
18
+ type PlayerErrorReason = 'network' | 'decode' | 'unsupported' | 'unknown';
19
+ type PlayerProps = {
20
+ src: string;
21
+ peaks?: Float32Array;
22
+ title?: string;
23
+ artist?: string;
24
+ album?: string;
25
+ cover?: string;
26
+ variant?: PlayerVariant;
27
+ className?: string;
28
+ waveform?: WaveformConfig;
29
+ reactiveCover?: ReactiveCoverMode;
30
+ autoplay?: boolean;
31
+ loop?: boolean;
32
+ initialVolume?: number;
33
+ muted?: boolean;
34
+ preload?: 'none' | 'metadata' | 'auto';
35
+ exclusive?: boolean;
36
+ onPrev?: () => void;
37
+ onNext?: () => void;
38
+ onPlay?: () => void;
39
+ onPause?: () => void;
40
+ onEnded?: () => void;
41
+ onError?: (reason: PlayerErrorReason, e: unknown) => void;
42
+ onTimeUpdate?: (currentTime: number, duration: number) => void;
43
+ ariaLabel?: string;
44
+ enableKeyboardShortcuts?: boolean;
45
+ /**
46
+ * Move keyboard focus into the player container on mount. Activates
47
+ * the hotkey scope (Space=play/pause, ←→=seek, ↑↓=volume, M=mute)
48
+ * without the user having to click the player first.
49
+ *
50
+ * Useful when the player mounts as the result of an explicit user
51
+ * action — e.g. a file picker selecting an audio file — so keyboard
52
+ * control is immediately live.
53
+ *
54
+ * @default false
55
+ */
56
+ autoFocus?: boolean;
57
+ seekStartsPlayback?: boolean;
58
+ };
59
+ type PlayerStateKind = 'idle' | 'loading' | 'decoding' | 'ready' | 'playing' | 'paused' | 'ended' | 'error';
60
+ type PlayerState = {
61
+ kind: 'idle' | 'loading';
62
+ } | {
63
+ kind: 'decoding';
64
+ duration: number;
65
+ } | {
66
+ kind: 'ready' | 'playing' | 'paused' | 'ended';
67
+ duration: number;
68
+ peaks?: Float32Array;
69
+ } | {
70
+ kind: 'error';
71
+ reason: PlayerErrorReason;
72
+ duration: number;
73
+ };
74
+ type PlayerControls = {
75
+ play: () => Promise<void>;
76
+ pause: () => void;
77
+ toggle: () => Promise<void>;
78
+ seek: (seconds: number) => void;
79
+ seekTo: (ratio: number) => void;
80
+ setVolume: (v: number) => void;
81
+ toggleMute: () => void;
82
+ toggleLoop: () => void;
83
+ };
84
+ type PlayerHandle = {
85
+ audio: HTMLAudioElement;
86
+ play: () => Promise<void>;
87
+ pause: () => void;
88
+ seek: (seconds: number) => void;
89
+ getCurrentTime: () => number;
90
+ getDuration: () => number;
91
+ /** Move keyboard focus to the player container so its hotkey scope
92
+ * (Space=play/pause, ←→=seek, ↑↓=volume, M=mute) becomes active. */
93
+ focus: () => void;
94
+ };
95
+
96
+ declare const Player: react.ForwardRefExoticComponent<PlayerProps & react.RefAttributes<PlayerHandle>>;
97
+
98
+ type LevelsStore = {
99
+ subscribe: (cb: () => void) => () => void;
100
+ getCurrent: () => Float32Array;
101
+ set: (next: Float32Array) => void;
102
+ setActive: (active: boolean) => void;
103
+ isActive: () => boolean;
104
+ };
105
+
106
+ type Listener$1 = (activeId: string | null) => void;
107
+ declare function setActivePlayer(id: string | null): void;
108
+ declare function getActivePlayer(): string | null;
109
+ declare function getLastActivePlayer(): string | null;
110
+ declare function subscribeActivePlayer(cb: Listener$1): () => void;
111
+
112
+ type PlayerPreferences = {
113
+ volume: number;
114
+ muted: boolean;
115
+ };
116
+ type Listener = (prefs: PlayerPreferences) => void;
117
+ declare function getPreferences(): PlayerPreferences;
118
+ declare function setStoredVolume(volume: number): void;
119
+ declare function setStoredMuted(muted: boolean): void;
120
+ declare function subscribePreferences(cb: Listener): () => void;
121
+
122
+ type PlayerMeta = {
123
+ src: string;
124
+ title?: string;
125
+ artist?: string;
126
+ album?: string;
127
+ cover?: string;
128
+ hasPrev: boolean;
129
+ hasNext: boolean;
130
+ };
131
+
132
+ type PlayerProviderProps = {
133
+ src: string;
134
+ peaks?: Float32Array;
135
+ title?: string;
136
+ artist?: string;
137
+ album?: string;
138
+ cover?: string;
139
+ autoplay?: boolean;
140
+ loop?: boolean;
141
+ initialVolume?: number;
142
+ muted?: boolean;
143
+ preload?: 'none' | 'metadata' | 'auto';
144
+ exclusive?: boolean;
145
+ onPrev?: () => void;
146
+ onNext?: () => void;
147
+ onPlay?: () => void;
148
+ onPause?: () => void;
149
+ onEnded?: () => void;
150
+ onError?: (reason: PlayerErrorReason, e: unknown) => void;
151
+ children: ReactNode;
152
+ };
153
+ declare function PlayerProvider(props: PlayerProviderProps): react_jsx_runtime.JSX.Element;
154
+
155
+ declare const usePlayerState: () => PlayerState;
156
+ declare const usePlayerControls: () => PlayerControls;
157
+ declare const usePlayerLevels: () => LevelsStore;
158
+ declare const usePlayerMeta: () => PlayerMeta;
159
+ declare const usePlayerAudio: () => HTMLAudioElement;
160
+ declare const usePlayerPaused: () => boolean;
161
+ declare const usePlayerDuration: () => number;
162
+
163
+ /** Currently active player id. `null` when nothing plays. */
164
+ declare function useActivePlayer(): string | null;
165
+ /** Most recently active player id. Stays set after pause; useful for "last
166
+ * played" UIs where you want to keep showing a track even when paused. */
167
+ declare function useLastActivePlayer(): string | null;
168
+ /** True when the given id is currently active. Convenience for conditional
169
+ * styling without comparing strings inline. */
170
+ declare function useIsActivePlayer(id: string | null | undefined): boolean;
171
+
172
+ declare function usePlayerPreferences(): PlayerPreferences;
173
+
174
+ export { Player as LazyPlayer, Player, type PlayerControls, type PlayerErrorReason, type PlayerHandle, type PlayerPreferences, type PlayerProps, PlayerProvider, type PlayerState, type PlayerStateKind, type PlayerVariant, type ReactiveCoverMode, type WaveformConfig, type WaveformMode, getActivePlayer, getLastActivePlayer, getPreferences, setActivePlayer, setStoredMuted, setStoredVolume, subscribeActivePlayer, subscribePreferences, useActivePlayer, useIsActivePlayer, useLastActivePlayer, usePlayerAudio, usePlayerControls, usePlayerDuration, usePlayerLevels, usePlayerMeta, usePlayerPaused, usePlayerPreferences, usePlayerState };
@@ -0,0 +1,174 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+
5
+ type WaveformMode = 'peaks' | 'live' | 'bars' | 'progress' | 'none';
6
+ type WaveformConfig = {
7
+ mode?: WaveformMode;
8
+ peaks?: Float32Array;
9
+ height?: number;
10
+ barWidth?: number;
11
+ barGap?: number;
12
+ bgColor?: string;
13
+ fgColor?: string;
14
+ decodeOnMount?: boolean;
15
+ };
16
+ type ReactiveCoverMode = false | 'subtle';
17
+ type PlayerVariant = 'default' | 'compact' | 'auto';
18
+ type PlayerErrorReason = 'network' | 'decode' | 'unsupported' | 'unknown';
19
+ type PlayerProps = {
20
+ src: string;
21
+ peaks?: Float32Array;
22
+ title?: string;
23
+ artist?: string;
24
+ album?: string;
25
+ cover?: string;
26
+ variant?: PlayerVariant;
27
+ className?: string;
28
+ waveform?: WaveformConfig;
29
+ reactiveCover?: ReactiveCoverMode;
30
+ autoplay?: boolean;
31
+ loop?: boolean;
32
+ initialVolume?: number;
33
+ muted?: boolean;
34
+ preload?: 'none' | 'metadata' | 'auto';
35
+ exclusive?: boolean;
36
+ onPrev?: () => void;
37
+ onNext?: () => void;
38
+ onPlay?: () => void;
39
+ onPause?: () => void;
40
+ onEnded?: () => void;
41
+ onError?: (reason: PlayerErrorReason, e: unknown) => void;
42
+ onTimeUpdate?: (currentTime: number, duration: number) => void;
43
+ ariaLabel?: string;
44
+ enableKeyboardShortcuts?: boolean;
45
+ /**
46
+ * Move keyboard focus into the player container on mount. Activates
47
+ * the hotkey scope (Space=play/pause, ←→=seek, ↑↓=volume, M=mute)
48
+ * without the user having to click the player first.
49
+ *
50
+ * Useful when the player mounts as the result of an explicit user
51
+ * action — e.g. a file picker selecting an audio file — so keyboard
52
+ * control is immediately live.
53
+ *
54
+ * @default false
55
+ */
56
+ autoFocus?: boolean;
57
+ seekStartsPlayback?: boolean;
58
+ };
59
+ type PlayerStateKind = 'idle' | 'loading' | 'decoding' | 'ready' | 'playing' | 'paused' | 'ended' | 'error';
60
+ type PlayerState = {
61
+ kind: 'idle' | 'loading';
62
+ } | {
63
+ kind: 'decoding';
64
+ duration: number;
65
+ } | {
66
+ kind: 'ready' | 'playing' | 'paused' | 'ended';
67
+ duration: number;
68
+ peaks?: Float32Array;
69
+ } | {
70
+ kind: 'error';
71
+ reason: PlayerErrorReason;
72
+ duration: number;
73
+ };
74
+ type PlayerControls = {
75
+ play: () => Promise<void>;
76
+ pause: () => void;
77
+ toggle: () => Promise<void>;
78
+ seek: (seconds: number) => void;
79
+ seekTo: (ratio: number) => void;
80
+ setVolume: (v: number) => void;
81
+ toggleMute: () => void;
82
+ toggleLoop: () => void;
83
+ };
84
+ type PlayerHandle = {
85
+ audio: HTMLAudioElement;
86
+ play: () => Promise<void>;
87
+ pause: () => void;
88
+ seek: (seconds: number) => void;
89
+ getCurrentTime: () => number;
90
+ getDuration: () => number;
91
+ /** Move keyboard focus to the player container so its hotkey scope
92
+ * (Space=play/pause, ←→=seek, ↑↓=volume, M=mute) becomes active. */
93
+ focus: () => void;
94
+ };
95
+
96
+ declare const Player: react.ForwardRefExoticComponent<PlayerProps & react.RefAttributes<PlayerHandle>>;
97
+
98
+ type LevelsStore = {
99
+ subscribe: (cb: () => void) => () => void;
100
+ getCurrent: () => Float32Array;
101
+ set: (next: Float32Array) => void;
102
+ setActive: (active: boolean) => void;
103
+ isActive: () => boolean;
104
+ };
105
+
106
+ type Listener$1 = (activeId: string | null) => void;
107
+ declare function setActivePlayer(id: string | null): void;
108
+ declare function getActivePlayer(): string | null;
109
+ declare function getLastActivePlayer(): string | null;
110
+ declare function subscribeActivePlayer(cb: Listener$1): () => void;
111
+
112
+ type PlayerPreferences = {
113
+ volume: number;
114
+ muted: boolean;
115
+ };
116
+ type Listener = (prefs: PlayerPreferences) => void;
117
+ declare function getPreferences(): PlayerPreferences;
118
+ declare function setStoredVolume(volume: number): void;
119
+ declare function setStoredMuted(muted: boolean): void;
120
+ declare function subscribePreferences(cb: Listener): () => void;
121
+
122
+ type PlayerMeta = {
123
+ src: string;
124
+ title?: string;
125
+ artist?: string;
126
+ album?: string;
127
+ cover?: string;
128
+ hasPrev: boolean;
129
+ hasNext: boolean;
130
+ };
131
+
132
+ type PlayerProviderProps = {
133
+ src: string;
134
+ peaks?: Float32Array;
135
+ title?: string;
136
+ artist?: string;
137
+ album?: string;
138
+ cover?: string;
139
+ autoplay?: boolean;
140
+ loop?: boolean;
141
+ initialVolume?: number;
142
+ muted?: boolean;
143
+ preload?: 'none' | 'metadata' | 'auto';
144
+ exclusive?: boolean;
145
+ onPrev?: () => void;
146
+ onNext?: () => void;
147
+ onPlay?: () => void;
148
+ onPause?: () => void;
149
+ onEnded?: () => void;
150
+ onError?: (reason: PlayerErrorReason, e: unknown) => void;
151
+ children: ReactNode;
152
+ };
153
+ declare function PlayerProvider(props: PlayerProviderProps): react_jsx_runtime.JSX.Element;
154
+
155
+ declare const usePlayerState: () => PlayerState;
156
+ declare const usePlayerControls: () => PlayerControls;
157
+ declare const usePlayerLevels: () => LevelsStore;
158
+ declare const usePlayerMeta: () => PlayerMeta;
159
+ declare const usePlayerAudio: () => HTMLAudioElement;
160
+ declare const usePlayerPaused: () => boolean;
161
+ declare const usePlayerDuration: () => number;
162
+
163
+ /** Currently active player id. `null` when nothing plays. */
164
+ declare function useActivePlayer(): string | null;
165
+ /** Most recently active player id. Stays set after pause; useful for "last
166
+ * played" UIs where you want to keep showing a track even when paused. */
167
+ declare function useLastActivePlayer(): string | null;
168
+ /** True when the given id is currently active. Convenience for conditional
169
+ * styling without comparing strings inline. */
170
+ declare function useIsActivePlayer(id: string | null | undefined): boolean;
171
+
172
+ declare function usePlayerPreferences(): PlayerPreferences;
173
+
174
+ export { Player as LazyPlayer, Player, type PlayerControls, type PlayerErrorReason, type PlayerHandle, type PlayerPreferences, type PlayerProps, PlayerProvider, type PlayerState, type PlayerStateKind, type PlayerVariant, type ReactiveCoverMode, type WaveformConfig, type WaveformMode, getActivePlayer, getLastActivePlayer, getPreferences, setActivePlayer, setStoredMuted, setStoredVolume, subscribeActivePlayer, subscribePreferences, useActivePlayer, useIsActivePlayer, useLastActivePlayer, usePlayerAudio, usePlayerControls, usePlayerDuration, usePlayerLevels, usePlayerMeta, usePlayerPaused, usePlayerPreferences, usePlayerState };