xxf_react 0.8.3 → 0.8.5

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 (250) hide show
  1. package/package.json +1 -1
  2. package/dist/cache/CacheEntry.d.ts +0 -28
  3. package/dist/cache/CacheEntry.d.ts.map +0 -1
  4. package/dist/cache/CacheEntry.js +0 -1
  5. package/dist/cache/DiskCacheConfig.d.ts +0 -56
  6. package/dist/cache/DiskCacheConfig.d.ts.map +0 -1
  7. package/dist/cache/DiskCacheConfig.js +0 -4
  8. package/dist/cache/DiskLruCache.d.ts +0 -69
  9. package/dist/cache/DiskLruCache.d.ts.map +0 -1
  10. package/dist/cache/DiskLruCache.js +0 -305
  11. package/dist/cache/LruMetadata.d.ts +0 -28
  12. package/dist/cache/LruMetadata.d.ts.map +0 -1
  13. package/dist/cache/LruMetadata.js +0 -6
  14. package/dist/cache/index.d.ts +0 -5
  15. package/dist/cache/index.d.ts.map +0 -1
  16. package/dist/cache/index.js +0 -2
  17. package/dist/event-bus/EventBus.d.ts +0 -176
  18. package/dist/event-bus/EventBus.d.ts.map +0 -1
  19. package/dist/event-bus/EventBus.js +0 -278
  20. package/dist/event-bus/EventDemo.d.ts +0 -71
  21. package/dist/event-bus/EventDemo.d.ts.map +0 -1
  22. package/dist/event-bus/EventDemo.js +0 -76
  23. package/dist/event-bus/EventHooks.d.ts +0 -48
  24. package/dist/event-bus/EventHooks.d.ts.map +0 -1
  25. package/dist/event-bus/EventHooks.js +0 -73
  26. package/dist/event-bus/index.d.ts +0 -3
  27. package/dist/event-bus/index.d.ts.map +0 -1
  28. package/dist/event-bus/index.js +0 -2
  29. package/dist/fetch/Fetch.d.ts +0 -9
  30. package/dist/fetch/Fetch.d.ts.map +0 -1
  31. package/dist/fetch/Fetch.js +0 -54
  32. package/dist/fetch/TimeoutError.d.ts +0 -7
  33. package/dist/fetch/TimeoutError.d.ts.map +0 -1
  34. package/dist/fetch/TimeoutError.js +0 -23
  35. package/dist/fetch/index.d.ts +0 -3
  36. package/dist/fetch/index.d.ts.map +0 -1
  37. package/dist/fetch/index.js +0 -2
  38. package/dist/flow/PromiseExt.d.ts +0 -8
  39. package/dist/flow/PromiseExt.d.ts.map +0 -1
  40. package/dist/flow/PromiseExt.js +0 -50
  41. package/dist/flow/PromiseLifecycle.d.ts +0 -33
  42. package/dist/flow/PromiseLifecycle.d.ts.map +0 -1
  43. package/dist/flow/PromiseLifecycle.js +0 -37
  44. package/dist/flow/PromiseLoading.d.ts +0 -25
  45. package/dist/flow/PromiseLoading.d.ts.map +0 -1
  46. package/dist/flow/PromiseLoading.js +0 -30
  47. package/dist/flow/index.d.ts +0 -4
  48. package/dist/flow/index.d.ts.map +0 -1
  49. package/dist/flow/index.js +0 -3
  50. package/dist/foundation/Copy.d.ts +0 -8
  51. package/dist/foundation/Copy.d.ts.map +0 -1
  52. package/dist/foundation/Copy.js +0 -21
  53. package/dist/foundation/Debug.d.ts +0 -7
  54. package/dist/foundation/Debug.d.ts.map +0 -1
  55. package/dist/foundation/Debug.js +0 -12
  56. package/dist/foundation/LayoutSize.d.ts +0 -5
  57. package/dist/foundation/LayoutSize.d.ts.map +0 -1
  58. package/dist/foundation/LayoutSize.js +0 -1
  59. package/dist/foundation/PerformanceMonitor.d.ts +0 -13
  60. package/dist/foundation/PerformanceMonitor.d.ts.map +0 -1
  61. package/dist/foundation/PerformanceMonitor.js +0 -26
  62. package/dist/foundation/index.d.ts +0 -5
  63. package/dist/foundation/index.d.ts.map +0 -1
  64. package/dist/foundation/index.js +0 -4
  65. package/dist/http/api/ApiBuilder.d.ts +0 -251
  66. package/dist/http/api/ApiBuilder.d.ts.map +0 -1
  67. package/dist/http/api/ApiBuilder.js +0 -189
  68. package/dist/http/api/index.d.ts +0 -2
  69. package/dist/http/api/index.d.ts.map +0 -1
  70. package/dist/http/api/index.js +0 -1
  71. package/dist/http/cache/HttpCache.d.ts +0 -59
  72. package/dist/http/cache/HttpCache.d.ts.map +0 -1
  73. package/dist/http/cache/HttpCache.js +0 -215
  74. package/dist/http/cache/index.d.ts +0 -3
  75. package/dist/http/cache/index.d.ts.map +0 -1
  76. package/dist/http/cache/index.js +0 -2
  77. package/dist/http/client/ApiStream.d.ts +0 -80
  78. package/dist/http/client/ApiStream.d.ts.map +0 -1
  79. package/dist/http/client/ApiStream.js +0 -190
  80. package/dist/http/client/HttpClient.d.ts +0 -88
  81. package/dist/http/client/HttpClient.d.ts.map +0 -1
  82. package/dist/http/client/HttpClient.js +0 -381
  83. package/dist/http/client/index.d.ts +0 -3
  84. package/dist/http/client/index.d.ts.map +0 -1
  85. package/dist/http/client/index.js +0 -2
  86. package/dist/http/demo/api-builder.demo.d.ts +0 -102
  87. package/dist/http/demo/api-builder.demo.d.ts.map +0 -1
  88. package/dist/http/demo/api-builder.demo.js +0 -343
  89. package/dist/http/index.d.ts +0 -52
  90. package/dist/http/index.d.ts.map +0 -1
  91. package/dist/http/index.js +0 -61
  92. package/dist/http/interceptor/CacheInterceptor.d.ts +0 -112
  93. package/dist/http/interceptor/CacheInterceptor.d.ts.map +0 -1
  94. package/dist/http/interceptor/CacheInterceptor.js +0 -6
  95. package/dist/http/interceptor/DefaultCacheInterceptor.d.ts +0 -53
  96. package/dist/http/interceptor/DefaultCacheInterceptor.d.ts.map +0 -1
  97. package/dist/http/interceptor/DefaultCacheInterceptor.js +0 -106
  98. package/dist/http/interceptor/index.d.ts +0 -3
  99. package/dist/http/interceptor/index.d.ts.map +0 -1
  100. package/dist/http/interceptor/index.js +0 -2
  101. package/dist/http/models/ApiTypes.d.ts +0 -54
  102. package/dist/http/models/ApiTypes.d.ts.map +0 -1
  103. package/dist/http/models/ApiTypes.js +0 -4
  104. package/dist/http/models/CacheConfig.d.ts +0 -58
  105. package/dist/http/models/CacheConfig.d.ts.map +0 -1
  106. package/dist/http/models/CacheConfig.js +0 -4
  107. package/dist/http/models/CacheMode.d.ts +0 -45
  108. package/dist/http/models/CacheMode.d.ts.map +0 -1
  109. package/dist/http/models/CacheMode.js +0 -45
  110. package/dist/http/models/HttpClientConfig.d.ts +0 -90
  111. package/dist/http/models/HttpClientConfig.d.ts.map +0 -1
  112. package/dist/http/models/HttpClientConfig.js +0 -4
  113. package/dist/http/models/RequestConfig.d.ts +0 -67
  114. package/dist/http/models/RequestConfig.d.ts.map +0 -1
  115. package/dist/http/models/RequestConfig.js +0 -4
  116. package/dist/http/models/index.d.ts +0 -24
  117. package/dist/http/models/index.d.ts.map +0 -1
  118. package/dist/http/models/index.js +0 -16
  119. package/dist/http/types.d.ts +0 -13
  120. package/dist/http/types.d.ts.map +0 -1
  121. package/dist/http/types.js +0 -14
  122. package/dist/index.d.ts +0 -15
  123. package/dist/index.d.ts.map +0 -1
  124. package/dist/index.js +0 -20
  125. package/dist/layout/button/XButton.d.ts +0 -99
  126. package/dist/layout/button/XButton.d.ts.map +0 -1
  127. package/dist/layout/button/XButton.js +0 -131
  128. package/dist/layout/hover/XHover.d.ts +0 -147
  129. package/dist/layout/hover/XHover.d.ts.map +0 -1
  130. package/dist/layout/hover/XHover.js +0 -128
  131. package/dist/layout/image/XImage.d.ts +0 -35
  132. package/dist/layout/image/XImage.d.ts.map +0 -1
  133. package/dist/layout/image/XImage.effects.d.ts +0 -16
  134. package/dist/layout/image/XImage.effects.d.ts.map +0 -1
  135. package/dist/layout/image/XImage.effects.js +0 -77
  136. package/dist/layout/image/XImage.js +0 -261
  137. package/dist/layout/image/XImage.types.d.ts +0 -130
  138. package/dist/layout/image/XImage.types.d.ts.map +0 -1
  139. package/dist/layout/image/XImage.types.js +0 -2
  140. package/dist/layout/image/XImageGallery.d.ts +0 -76
  141. package/dist/layout/image/XImageGallery.d.ts.map +0 -1
  142. package/dist/layout/image/XImageGallery.js +0 -94
  143. package/dist/layout/image/index.d.ts +0 -12
  144. package/dist/layout/image/index.d.ts.map +0 -1
  145. package/dist/layout/image/index.js +0 -4
  146. package/dist/layout/index.d.ts +0 -12
  147. package/dist/layout/index.d.ts.map +0 -1
  148. package/dist/layout/index.js +0 -11
  149. package/dist/layout/resize/core/ResizeObserverHook.d.ts +0 -41
  150. package/dist/layout/resize/core/ResizeObserverHook.d.ts.map +0 -1
  151. package/dist/layout/resize/core/ResizeObserverHook.js +0 -57
  152. package/dist/layout/resize/core/SizedLayoutContext.d.ts +0 -23
  153. package/dist/layout/resize/core/SizedLayoutContext.d.ts.map +0 -1
  154. package/dist/layout/resize/core/SizedLayoutContext.js +0 -23
  155. package/dist/layout/resize/core/SizedLayoutProps.d.ts +0 -19
  156. package/dist/layout/resize/core/SizedLayoutProps.d.ts.map +0 -1
  157. package/dist/layout/resize/core/SizedLayoutProps.js +0 -1
  158. package/dist/layout/resize/impl/SizedContainer.d.ts +0 -45
  159. package/dist/layout/resize/impl/SizedContainer.d.ts.map +0 -1
  160. package/dist/layout/resize/impl/SizedContainer.js +0 -65
  161. package/dist/layout/resize/impl/SizedLayout.d.ts +0 -45
  162. package/dist/layout/resize/impl/SizedLayout.d.ts.map +0 -1
  163. package/dist/layout/resize/impl/SizedLayout.js +0 -65
  164. package/dist/layout/spinner/XSpinner.d.ts +0 -43
  165. package/dist/layout/spinner/XSpinner.d.ts.map +0 -1
  166. package/dist/layout/spinner/XSpinner.js +0 -47
  167. package/dist/layout/virtualized/VirtualizedConfig.d.ts +0 -16
  168. package/dist/layout/virtualized/VirtualizedConfig.d.ts.map +0 -1
  169. package/dist/layout/virtualized/VirtualizedConfig.js +0 -15
  170. package/dist/layout/visibility/ElementVisibilityHooks.d.ts +0 -13
  171. package/dist/layout/visibility/ElementVisibilityHooks.d.ts.map +0 -1
  172. package/dist/layout/visibility/ElementVisibilityHooks.js +0 -119
  173. package/dist/media/components/XVideo.d.ts +0 -205
  174. package/dist/media/components/XVideo.d.ts.map +0 -1
  175. package/dist/media/components/XVideo.js +0 -297
  176. package/dist/media/components/XVideoBufferingIndicator.d.ts +0 -13
  177. package/dist/media/components/XVideoBufferingIndicator.d.ts.map +0 -1
  178. package/dist/media/components/XVideoBufferingIndicator.js +0 -13
  179. package/dist/media/components/XVideoErrorIndicator.d.ts +0 -15
  180. package/dist/media/components/XVideoErrorIndicator.d.ts.map +0 -1
  181. package/dist/media/components/XVideoErrorIndicator.js +0 -19
  182. package/dist/media/index.d.ts +0 -7
  183. package/dist/media/index.d.ts.map +0 -1
  184. package/dist/media/index.js +0 -7
  185. package/dist/media/playback-queue-store.d.ts +0 -746
  186. package/dist/media/playback-queue-store.d.ts.map +0 -1
  187. package/dist/media/playback-queue-store.js +0 -670
  188. package/dist/media/video-play-safe.d.ts +0 -26
  189. package/dist/media/video-play-safe.d.ts.map +0 -1
  190. package/dist/media/video-play-safe.js +0 -56
  191. package/dist/media/video-state.d.ts +0 -38
  192. package/dist/media/video-state.d.ts.map +0 -1
  193. package/dist/media/video-state.js +0 -125
  194. package/dist/models/ApiPageDataFieldDTO.d.ts +0 -9
  195. package/dist/models/ApiPageDataFieldDTO.d.ts.map +0 -1
  196. package/dist/models/ApiPageDataFieldDTO.js +0 -1
  197. package/dist/models/ApiResponse.d.ts +0 -29
  198. package/dist/models/ApiResponse.d.ts.map +0 -1
  199. package/dist/models/ApiResponse.js +0 -32
  200. package/dist/models/PaginationDTO.d.ts +0 -8
  201. package/dist/models/PaginationDTO.d.ts.map +0 -1
  202. package/dist/models/PaginationDTO.js +0 -6
  203. package/dist/models/index.d.ts +0 -4
  204. package/dist/models/index.d.ts.map +0 -1
  205. package/dist/models/index.js +0 -3
  206. package/dist/refresh/LoadMoreAsync.d.ts +0 -36
  207. package/dist/refresh/LoadMoreAsync.d.ts.map +0 -1
  208. package/dist/refresh/LoadMoreAsync.js +0 -55
  209. package/dist/refresh/index.d.ts +0 -2
  210. package/dist/refresh/index.d.ts.map +0 -1
  211. package/dist/refresh/index.js +0 -2
  212. package/dist/responsive/BrowserAdapter.d.ts +0 -26
  213. package/dist/responsive/BrowserAdapter.d.ts.map +0 -1
  214. package/dist/responsive/BrowserAdapter.js +0 -79
  215. package/dist/responsive/ScreenAdapter.d.ts +0 -2
  216. package/dist/responsive/ScreenAdapter.d.ts.map +0 -1
  217. package/dist/responsive/ScreenAdapter.js +0 -5
  218. package/dist/responsive/index.d.ts +0 -3
  219. package/dist/responsive/index.d.ts.map +0 -1
  220. package/dist/responsive/index.js +0 -3
  221. package/dist/sse/SSEManager.d.ts +0 -21
  222. package/dist/sse/SSEManager.d.ts.map +0 -1
  223. package/dist/sse/SSEManager.js +0 -73
  224. package/dist/sse/SSERegistry.d.ts +0 -20
  225. package/dist/sse/SSERegistry.d.ts.map +0 -1
  226. package/dist/sse/SSERegistry.js +0 -36
  227. package/dist/sse/SSEStatus.d.ts +0 -7
  228. package/dist/sse/SSEStatus.d.ts.map +0 -1
  229. package/dist/sse/SSEStatus.js +0 -7
  230. package/dist/sse/UseSSE.d.ts +0 -13
  231. package/dist/sse/UseSSE.d.ts.map +0 -1
  232. package/dist/sse/UseSSE.js +0 -39
  233. package/dist/sse/index.d.ts +0 -5
  234. package/dist/sse/index.d.ts.map +0 -1
  235. package/dist/sse/index.js +0 -5
  236. package/dist/utils/MIME.d.ts +0 -137
  237. package/dist/utils/MIME.d.ts.map +0 -1
  238. package/dist/utils/MIME.js +0 -192
  239. package/dist/utils/Reload.d.ts +0 -62
  240. package/dist/utils/Reload.d.ts.map +0 -1
  241. package/dist/utils/Reload.js +0 -66
  242. package/dist/utils/ScrollToCenter.d.ts +0 -72
  243. package/dist/utils/ScrollToCenter.d.ts.map +0 -1
  244. package/dist/utils/ScrollToCenter.js +0 -145
  245. package/dist/utils/index.d.ts +0 -5
  246. package/dist/utils/index.d.ts.map +0 -1
  247. package/dist/utils/index.js +0 -5
  248. package/dist/utils/url-placholder.d.ts +0 -14
  249. package/dist/utils/url-placholder.d.ts.map +0 -1
  250. package/dist/utils/url-placholder.js +0 -17
@@ -1,746 +0,0 @@
1
- /**
2
- * @fileoverview 播放队列状态管理 (Zustand)
3
- *
4
- * 支持多 Tab / 多页面场景,全局只有一个视频在播放。
5
- *
6
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
7
- *
8
- * @module playback-queue-store
9
- * @see {@link ./playback-queue-store.md} 详细文档
10
- */
11
- /**
12
- * Source 数据结构
13
- *
14
- * 每个 source 代表一个独立的播放列表,通常对应一个 Tab 或页面。
15
- *
16
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
17
- *
18
- * @example
19
- * ```ts
20
- * const homeSource: SourceData = {
21
- * itemIds: ['video-1', 'video-2', 'video-3']
22
- * }
23
- * ```
24
- */
25
- interface SourceData {
26
- /**
27
- * 该 source 下的所有项目 ID 列表
28
- *
29
- * - 有序数组,决定播放顺序
30
- * - ID 应该是唯一的字符串标识符
31
- *
32
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
33
- */
34
- itemIds: string[];
35
- }
36
- /**
37
- * 播放队列状态
38
- *
39
- * 核心状态结构,包含所有 source 的数据和当前播放状态。
40
- *
41
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
42
- *
43
- * @example
44
- * ```ts
45
- * const state: PlaybackQueueState = {
46
- * sources: {
47
- * 'home': { itemIds: ['a', 'b', 'c'] },
48
- * 'community': { itemIds: ['d', 'e'] },
49
- * },
50
- * itemIdToSource: { 'a': 'home', 'b': 'home', 'd': 'community' },
51
- * activeSource: 'home',
52
- * currentId: 'a',
53
- * muted: true,
54
- * loop: true,
55
- * }
56
- * ```
57
- */
58
- interface PlaybackQueueState {
59
- /**
60
- * 多个 source 的数据
61
- *
62
- * key: source 名称(如 'home', 'community', 'detail-123')
63
- * value: 该 source 的数据
64
- *
65
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
66
- */
67
- sources: Record<string, SourceData>;
68
- /**
69
- * ID 到 source 的反向索引
70
- *
71
- * 用于 `playById` 快速查找某个 ID 属于哪个 source。
72
- * 复杂度从 O(n*m) 降低到 O(1)。
73
- *
74
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
75
- *
76
- * @internal 内部使用,自动维护
77
- */
78
- itemIdToSource: Record<string, string>;
79
- /**
80
- * 当前激活的 source 名称
81
- *
82
- * - 播放、next、prev 操作都在此 source 内进行
83
- * - 为 null 表示没有激活的 source
84
- *
85
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
86
- */
87
- activeSource: string | null;
88
- /**
89
- * 当前正在播放的项目 ID
90
- *
91
- * - 全局唯一,保证同一时间只有一个视频在播放
92
- * - 为 null 表示没有视频在播放
93
- *
94
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
95
- */
96
- currentId: string | null;
97
- /**
98
- * 是否静音
99
- *
100
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
101
- *
102
- * @default true(默认静音,符合浏览器自动播放策略)
103
- */
104
- muted: boolean;
105
- /**
106
- * 是否循环播放
107
- *
108
- * - true: 播放到最后一个后自动回到第一个
109
- * - false: 播放到最后一个后停止
110
- *
111
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
112
- *
113
- * @default true
114
- */
115
- loop: boolean;
116
- }
117
- /**
118
- * 播放队列操作方法接口
119
- *
120
- * 定义所有可用的操作方法。
121
- *
122
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
123
- */
124
- interface PlaybackQueueActions {
125
- /**
126
- * 设置某个 source 的播放列表
127
- *
128
- * 用于初始化或更新某个 Tab/页面的播放列表。
129
- *
130
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
131
- *
132
- * @param source - source 名称,建议使用有意义的标识符
133
- * - 'home' - 首页
134
- * - 'community' - 社区页
135
- * - 'detail-{id}' - 详情页
136
- * @param ids - 项目 ID 列表,会自动去重
137
- * @param autoPlay - 是否自动播放第一个,默认 false
138
- *
139
- * @example
140
- * ```tsx
141
- * // 初始化首页列表
142
- * const { setSource } = usePlaybackActions()
143
- *
144
- * useEffect(() => {
145
- * setSource('home', templates.map(t => t.id))
146
- * }, [templates])
147
- *
148
- * // 初始化并自动播放
149
- * setSource('home', ['id-1', 'id-2'], true)
150
- * ```
151
- */
152
- setSource: (source: string, ids: string[], autoPlay?: boolean) => void;
153
- /**
154
- * 向某个 source 追加项目
155
- *
156
- * 用于滚动加载场景,追加新数据时不影响当前播放状态。
157
- *
158
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
159
- *
160
- * @param source - source 名称
161
- * @param ids - 要追加的项目 ID 列表,会自动去重
162
- *
163
- * @example
164
- * ```tsx
165
- * // 滚动加载更多
166
- * const { appendToSource } = usePlaybackActions()
167
- *
168
- * const onLoadMore = (newItems: Template[]) => {
169
- * appendToSource('home', newItems.map(t => t.id))
170
- * }
171
- * ```
172
- */
173
- appendToSource: (source: string, ids: string[]) => void;
174
- /**
175
- * 移除某个 source
176
- *
177
- * 用于页面卸载时清理数据,防止内存泄漏。
178
- * 如果移除的是当前激活的 source,会自动停止播放。
179
- *
180
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
181
- *
182
- * @param source - 要移除的 source 名称
183
- *
184
- * @example
185
- * ```tsx
186
- * // 详情页卸载时清理
187
- * useEffect(() => {
188
- * setSource(`detail-${id}`, items)
189
- * return () => removeSource(`detail-${id}`)
190
- * }, [id])
191
- * ```
192
- */
193
- removeSource: (source: string) => void;
194
- /**
195
- * 播放指定 source 中的指定项目
196
- *
197
- * 会自动切换 activeSource 到指定的 source。
198
- *
199
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
200
- *
201
- * @param source - source 名称
202
- * @param id - 项目 ID
203
- *
204
- * @example
205
- * ```tsx
206
- * const { play } = usePlaybackActions()
207
- *
208
- * // 点击卡片播放
209
- * <div onClick={() => play('home', item.id)}>
210
- * ...
211
- * </div>
212
- * ```
213
- */
214
- play: (source: string, id: string) => void;
215
- /**
216
- * 播放指定项目(自动查找 source)
217
- *
218
- * 优先在当前 activeSource 中查找,找不到则通过反向索引查找。
219
- * 适用于不关心具体 source 的场景。
220
- *
221
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
222
- *
223
- * @param id - 项目 ID
224
- *
225
- * @example
226
- * ```tsx
227
- * const { playById } = usePlaybackActions()
228
- *
229
- * // 从搜索结果播放(不知道属于哪个 source)
230
- * <div onClick={() => playById(searchResult.id)}>
231
- * ...
232
- * </div>
233
- * ```
234
- */
235
- playById: (id: string) => void;
236
- /**
237
- * 播放下一个
238
- *
239
- * 在当前 activeSource 内播放下一个项目。
240
- * 如果已是最后一个:
241
- * - loop=true: 回到第一个
242
- * - loop=false: 停止播放(currentId 变为 null)
243
- *
244
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
245
- *
246
- * @example
247
- * ```tsx
248
- * const { next } = usePlaybackActions()
249
- *
250
- * <button onClick={next}>下一个</button>
251
- * ```
252
- */
253
- next: () => void;
254
- /**
255
- * 播放上一个
256
- *
257
- * 在当前 activeSource 内播放上一个项目。
258
- * 如果已是第一个:
259
- * - loop=true: 跳到最后一个
260
- * - loop=false: 停止播放
261
- *
262
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
263
- *
264
- * @example
265
- * ```tsx
266
- * const { prev } = usePlaybackActions()
267
- *
268
- * <button onClick={prev}>上一个</button>
269
- * ```
270
- */
271
- prev: () => void;
272
- /**
273
- * 停止播放
274
- *
275
- * 将 currentId 设为 null,但保留 activeSource。
276
- *
277
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
278
- *
279
- * @example
280
- * ```tsx
281
- * const { stop } = usePlaybackActions()
282
- *
283
- * <button onClick={stop}>停止</button>
284
- * ```
285
- */
286
- stop: () => void;
287
- /**
288
- * 播放完成回调
289
- *
290
- * 应在视频的 onEnded 事件中调用,会自动播放下一个。
291
- *
292
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
293
- *
294
- * @example
295
- * ```tsx
296
- * const { onEnded } = usePlaybackActions()
297
- *
298
- * <video onEnded={onEnded} />
299
- * ```
300
- */
301
- onEnded: () => void;
302
- /**
303
- * 设置静音状态
304
- *
305
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
306
- *
307
- * @param muted - true 静音,false 取消静音
308
- *
309
- * @example
310
- * ```tsx
311
- * const { setMuted } = usePlaybackActions()
312
- *
313
- * setMuted(true) // 静音
314
- * setMuted(false) // 取消静音
315
- * ```
316
- */
317
- setMuted: (muted: boolean) => void;
318
- /**
319
- * 切换静音状态
320
- *
321
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
322
- *
323
- * @example
324
- * ```tsx
325
- * const { toggleMute } = usePlaybackActions()
326
- * const muted = usePlaybackMuted()
327
- *
328
- * <button onClick={toggleMute}>
329
- * {muted ? '🔇' : '🔊'}
330
- * </button>
331
- * ```
332
- */
333
- toggleMute: () => void;
334
- /**
335
- * 设置循环播放
336
- *
337
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
338
- *
339
- * @param loop - true 循环播放,false 播完停止
340
- *
341
- * @example
342
- * ```tsx
343
- * const { setLoop } = usePlaybackActions()
344
- *
345
- * setLoop(false) // 关闭循环
346
- * ```
347
- */
348
- setLoop: (loop: boolean) => void;
349
- /**
350
- * 重置所有状态
351
- *
352
- * 将状态恢复到初始值,清空所有 source 和播放状态。
353
- * 通常用于用户登出或需要完全重置的场景。
354
- *
355
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
356
- *
357
- * @example
358
- * ```tsx
359
- * const { reset } = usePlaybackActions()
360
- *
361
- * // 用户登出时清理
362
- * const handleLogout = () => {
363
- * reset()
364
- * // ...其他清理逻辑
365
- * }
366
- * ```
367
- */
368
- reset: () => void;
369
- }
370
- /**
371
- * 播放队列 Store 完整类型
372
- *
373
- * 包含状态和操作方法。
374
- *
375
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
376
- */
377
- type PlaybackQueueStore = PlaybackQueueState & PlaybackQueueActions;
378
- /**
379
- * 播放队列 Zustand Store
380
- *
381
- * 使用 `subscribeWithSelector` 中间件支持选择性订阅。
382
- *
383
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
384
- *
385
- * @example
386
- * ```tsx
387
- * // 直接使用 store(不推荐,建议使用封装的 hooks)
388
- * const currentId = usePlaybackQueueStore(state => state.currentId)
389
- * ```
390
- */
391
- export declare const usePlaybackQueueStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<PlaybackQueueStore>, "subscribe"> & {
392
- subscribe: {
393
- (listener: (selectedState: PlaybackQueueStore, previousSelectedState: PlaybackQueueStore) => void): () => void;
394
- <U>(selector: (state: PlaybackQueueStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
395
- equalityFn?: ((a: U, b: U) => boolean) | undefined;
396
- fireImmediately?: boolean;
397
- } | undefined): () => void;
398
- };
399
- }>;
400
- /**
401
- * 获取播放队列操作方法
402
- *
403
- * 使用 shallow 比较,避免不必要的重渲染。
404
- * 返回的方法引用稳定,可以安全地用作依赖项。
405
- *
406
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
407
- *
408
- * @returns 所有操作方法
409
- *
410
- * @example
411
- * ```tsx
412
- * const { play, stop, next, prev, toggleMute, onEnded } = usePlaybackActions()
413
- *
414
- * // 在视频组件中
415
- * <video
416
- * onEnded={onEnded}
417
- * onClick={() => play('home', item.id)}
418
- * />
419
- *
420
- * // 控制按钮
421
- * <button onClick={prev}>上一个</button>
422
- * <button onClick={next}>下一个</button>
423
- * <button onClick={toggleMute}>静音</button>
424
- * ```
425
- */
426
- export declare function usePlaybackActions(): PlaybackQueueActions;
427
- /**
428
- * 判断指定项目是否正在播放
429
- *
430
- * 选择性订阅,只有当该项目的播放状态变化时才会重渲染。
431
- * 这是性能最优的播放状态判断方式。
432
- *
433
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
434
- *
435
- * @param id - 项目 ID
436
- * @returns 是否正在播放
437
- *
438
- * @example
439
- * ```tsx
440
- * const VideoCard = ({ item }) => {
441
- * const isPlaying = usePlaybackIsPlaying(item.id)
442
- *
443
- * return (
444
- * <video autoPlay={isPlaying} muted />
445
- * )
446
- * }
447
- * ```
448
- */
449
- export declare function usePlaybackIsPlaying(id: string): boolean;
450
- /**
451
- * 获取静音状态
452
- *
453
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
454
- *
455
- * @returns 是否静音
456
- *
457
- * @example
458
- * ```tsx
459
- * const muted = usePlaybackMuted()
460
- *
461
- * <video muted={muted} />
462
- * ```
463
- */
464
- export declare function usePlaybackMuted(): boolean;
465
- /**
466
- * 获取当前播放的项目 ID
467
- *
468
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
469
- *
470
- * @returns 当前播放的 ID,没有播放时为 null
471
- *
472
- * @example
473
- * ```tsx
474
- * const currentId = usePlaybackCurrentId()
475
- *
476
- * if (currentId) {
477
- * console.log('正在播放:', currentId)
478
- * }
479
- * ```
480
- */
481
- export declare function usePlaybackCurrentId(): string | null;
482
- /**
483
- * 获取当前激活的 source 名称
484
- *
485
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
486
- *
487
- * @returns source 名称,没有激活时为 null
488
- *
489
- * @example
490
- * ```tsx
491
- * const activeSource = usePlaybackActiveSource()
492
- *
493
- * // 高亮当前激活的 Tab
494
- * <Tab active={activeSource === 'home'}>首页</Tab>
495
- * ```
496
- */
497
- export declare function usePlaybackActiveSource(): string | null;
498
- /**
499
- * 获取循环播放状态
500
- *
501
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
502
- *
503
- * @returns 是否循环播放
504
- *
505
- * @example
506
- * ```tsx
507
- * const loop = usePlaybackLoop()
508
- * const { setLoop } = usePlaybackActions()
509
- *
510
- * <button onClick={() => setLoop(!loop)}>
511
- * {loop ? '循环开' : '循环关'}
512
- * </button>
513
- * ```
514
- */
515
- export declare function usePlaybackLoop(): boolean;
516
- /**
517
- * 获取指定 source 的项目 ID 列表
518
- *
519
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
520
- *
521
- * @param source - source 名称
522
- * @returns 项目 ID 列表,source 不存在时返回空数组
523
- *
524
- * @example
525
- * ```tsx
526
- * const homeItems = usePlaybackSourceItems('home')
527
- *
528
- * console.log('首页有', homeItems.length, '个视频')
529
- * ```
530
- */
531
- export declare function usePlaybackSourceItems(source: string): string[];
532
- /**
533
- * 获取单个 item 的播放状态和静音状态(常用组合)
534
- *
535
- * 使用 shallow 比较,仅当 isPlaying 或 muted 变化时重渲染。
536
- *
537
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
538
- *
539
- * @param id - 项目 ID
540
- * @returns { isPlaying: boolean, muted: boolean }
541
- *
542
- * @example
543
- * ```tsx
544
- * const VideoCard = ({ item }) => {
545
- * const { isPlaying, muted } = usePlaybackItemState(item.id)
546
- * const { onEnded } = usePlaybackActions()
547
- *
548
- * return (
549
- * <video
550
- * autoPlay={isPlaying}
551
- * muted={muted}
552
- * onEnded={onEnded}
553
- * />
554
- * )
555
- * }
556
- * ```
557
- */
558
- export declare function usePlaybackItemState(id: string): {
559
- isPlaying: boolean;
560
- muted: boolean;
561
- };
562
- /**
563
- * 播放队列命名空间
564
- *
565
- * 非 Hook 版本的 API,用于:
566
- * - 组件外部调用(如事件回调、工具函数)
567
- * - 不在 React 组件中的场景
568
- * - 需要命令式调用的场景
569
- *
570
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
571
- *
572
- * @example
573
- * ```tsx
574
- * // 在事件回调中使用
575
- * const handleClick = () => {
576
- * PlaybackQueue.play('home', 'item-1')
577
- * }
578
- *
579
- * // 在非组件代码中使用
580
- * PlaybackQueue.toggleMute()
581
- *
582
- * // 获取当前状态快照
583
- * const state = PlaybackQueue.getState()
584
- * console.log('当前播放:', state.currentId)
585
- *
586
- * // 订阅状态变化
587
- * const unsubscribe = PlaybackQueue.subscribeCurrentId((currentId, prevId) => {
588
- * console.log('播放变化:', prevId, '->', currentId)
589
- * })
590
- * // 不再需要时取消订阅
591
- * unsubscribe()
592
- * ```
593
- */
594
- export declare const PlaybackQueue: {
595
- /**
596
- * 获取当前状态快照(非响应式)
597
- *
598
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
599
- *
600
- * @returns 当前完整状态
601
- */
602
- readonly getState: () => PlaybackQueueState;
603
- /**
604
- * 设置某个 source 的播放列表
605
- *
606
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
607
- *
608
- * @see {@link PlaybackQueueActions.setSource}
609
- */
610
- readonly setSource: (source: string, ids: string[], autoPlay?: boolean | undefined) => void;
611
- /**
612
- * 向某个 source 追加项目
613
- *
614
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
615
- *
616
- * @see {@link PlaybackQueueActions.appendToSource}
617
- */
618
- readonly appendToSource: (source: string, ids: string[]) => void;
619
- /**
620
- * 移除某个 source
621
- *
622
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
623
- *
624
- * @see {@link PlaybackQueueActions.removeSource}
625
- */
626
- readonly removeSource: (source: string) => void;
627
- /**
628
- * 播放指定项目
629
- *
630
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
631
- *
632
- * @see {@link PlaybackQueueActions.play}
633
- */
634
- readonly play: (source: string, id: string) => void;
635
- /**
636
- * 播放指定项目(自动查找 source)
637
- *
638
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
639
- *
640
- * @see {@link PlaybackQueueActions.playById}
641
- */
642
- readonly playById: (id: string) => void;
643
- /**
644
- * 播放下一个
645
- *
646
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
647
- *
648
- * @see {@link PlaybackQueueActions.next}
649
- */
650
- readonly next: () => void;
651
- /**
652
- * 播放上一个
653
- *
654
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
655
- *
656
- * @see {@link PlaybackQueueActions.prev}
657
- */
658
- readonly prev: () => void;
659
- /**
660
- * 停止播放
661
- *
662
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
663
- *
664
- * @see {@link PlaybackQueueActions.stop}
665
- */
666
- readonly stop: () => void;
667
- /**
668
- * 播放完成回调
669
- *
670
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
671
- *
672
- * @see {@link PlaybackQueueActions.onEnded}
673
- */
674
- readonly onEnded: () => void;
675
- /**
676
- * 设置静音状态
677
- *
678
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
679
- *
680
- * @see {@link PlaybackQueueActions.setMuted}
681
- */
682
- readonly setMuted: (muted: boolean) => void;
683
- /**
684
- * 切换静音状态
685
- *
686
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
687
- *
688
- * @see {@link PlaybackQueueActions.toggleMute}
689
- */
690
- readonly toggleMute: () => void;
691
- /**
692
- * 设置循环播放
693
- *
694
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
695
- *
696
- * @see {@link PlaybackQueueActions.setLoop}
697
- */
698
- readonly setLoop: (loop: boolean) => void;
699
- /**
700
- * 重置所有状态
701
- *
702
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
703
- *
704
- * @see {@link PlaybackQueueActions.reset}
705
- */
706
- readonly reset: () => void;
707
- /**
708
- * 订阅当前播放 ID 变化
709
- *
710
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
711
- *
712
- * @param callback - 回调函数,参数为 (新值, 旧值)
713
- * @returns 取消订阅函数
714
- *
715
- * @example
716
- * ```ts
717
- * const unsubscribe = PlaybackQueue.subscribeCurrentId((currentId, prevId) => {
718
- * console.log('播放变化:', prevId, '->', currentId)
719
- * })
720
- *
721
- * // 清理时取消订阅
722
- * unsubscribe()
723
- * ```
724
- */
725
- readonly subscribeCurrentId: (callback: (currentId: string | null, prevId: string | null) => void) => () => void;
726
- /**
727
- * 订阅 activeSource 变化
728
- *
729
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
730
- *
731
- * @param callback - 回调函数,参数为 (新值, 旧值)
732
- * @returns 取消订阅函数
733
- */
734
- readonly subscribeActiveSource: (callback: (source: string | null, prevSource: string | null) => void) => () => void;
735
- /**
736
- * 订阅静音状态变化
737
- *
738
- * 查看更多,请访问 https://github.com/NBXXF/xxf_react/blob/main/src/media/playback-queue-store.md
739
- *
740
- * @param callback - 回调函数,参数为 (新值, 旧值)
741
- * @returns 取消订阅函数
742
- */
743
- readonly subscribeMuted: (callback: (muted: boolean, prevMuted: boolean) => void) => () => void;
744
- };
745
- export {};
746
- //# sourceMappingURL=playback-queue-store.d.ts.map