react-native-audio-browser 0.2.0-next.11 → 0.2.0-next.13

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 (416) hide show
  1. package/README.md +14 -4
  2. package/android/build.gradle +20 -1
  3. package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +115 -26
  4. package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +262 -188
  5. package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +23 -3
  6. package/android/src/main/java/com/audiobrowser/browser/InertStyleDiagnostic.kt +267 -0
  7. package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +95 -58
  8. package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +68 -26
  9. package/android/src/main/java/com/audiobrowser/browser/StyleResolver.kt +60 -0
  10. package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +19 -7
  11. package/android/src/main/java/com/audiobrowser/extension/TappedTrack.kt +20 -0
  12. package/android/src/main/java/com/audiobrowser/extension/TrackIdentity.kt +15 -0
  13. package/android/src/main/java/com/audiobrowser/model/PlayerUpdateOptions.kt +1 -1
  14. package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +120 -67
  15. package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +21 -24
  16. package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +109 -74
  17. package/android/src/main/java/com/audiobrowser/player/Player.kt +51 -30
  18. package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +2 -15
  19. package/android/src/main/java/com/audiobrowser/player/ShuffleOrderLedBy.kt +30 -0
  20. package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +44 -40
  21. package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +28 -23
  22. package/android/src/main/java/com/audiobrowser/util/StyleWire.kt +108 -0
  23. package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +52 -53
  24. package/android/src/test/java/com/audiobrowser/TestFixtures.kt +74 -41
  25. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerFavoritesTest.kt +153 -0
  26. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +229 -50
  27. package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +38 -0
  28. package/android/src/test/java/com/audiobrowser/browser/InertStyleDiagnosticTest.kt +277 -0
  29. package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +1 -1
  30. package/android/src/test/java/com/audiobrowser/browser/JsonStyleTest.kt +147 -0
  31. package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +128 -53
  32. package/android/src/test/java/com/audiobrowser/browser/StyleResolverTest.kt +154 -0
  33. package/android/src/test/java/com/audiobrowser/extension/TappedTrackTest.kt +43 -0
  34. package/android/src/test/java/com/audiobrowser/extension/TrackIdentityTest.kt +41 -0
  35. package/android/src/test/java/com/audiobrowser/player/CapabilityControlsTest.kt +1 -2
  36. package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +42 -2
  37. package/android/src/test/java/com/audiobrowser/player/PlaybackStateStoreTrackJsonTest.kt +55 -0
  38. package/android/src/test/java/com/audiobrowser/player/ShuffleOrderLedByTest.kt +79 -0
  39. package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +41 -16
  40. package/android/src/test/java/com/audiobrowser/util/MediaExtrasBuilderTest.kt +161 -0
  41. package/android/src/test/java/com/audiobrowser/util/TrackFactoryMediaIdTest.kt +7 -7
  42. package/ios/Browser/BrowserConfig.swift +102 -5
  43. package/ios/Browser/BrowserManager+URLResolution.swift +18 -14
  44. package/ios/Browser/BrowserManager.swift +229 -180
  45. package/ios/Browser/BrowserPathHelper.swift +44 -44
  46. package/ios/Browser/InertStyleDiagnostic.swift +279 -0
  47. package/ios/Browser/JsonModels.swift +258 -106
  48. package/ios/Browser/SearchDrillIn.swift +6 -6
  49. package/ios/Browser/SectionPresentation.swift +64 -0
  50. package/ios/Browser/SectionScope.swift +58 -24
  51. package/ios/Browser/StyleResolver.swift +58 -0
  52. package/ios/Browser/TabBarEntries.swift +9 -3
  53. package/ios/Browser/TrackIdTemplate.swift +37 -0
  54. package/ios/CarPlay/CarPlayArtworkResolver.swift +8 -7
  55. package/ios/CarPlay/CarPlayController.swift +227 -85
  56. package/ios/CarPlay/CarPlayImageLoader.swift +38 -18
  57. package/ios/CarPlay/CarPlayListItemFactory.swift +289 -84
  58. package/ios/CarPlay/CarPlayNowPlayingManager.swift +15 -12
  59. package/ios/Extension/Capability+RemoteCommand.swift +1 -1
  60. package/ios/Extension/PlayerCapabilities+Favorite.swift +1 -15
  61. package/ios/Extension/ResolvedTrack+Copying.swift +11 -15
  62. package/ios/Extension/Section+Copying.swift +31 -0
  63. package/ios/Extension/Track+Copying.swift +6 -12
  64. package/ios/Extension/Track+Identity.swift +18 -0
  65. package/ios/Extension/UIApplication+ActiveScene.swift +27 -0
  66. package/ios/Http/HttpClient.swift +8 -2
  67. package/ios/HybridAudioBrowser.swift +166 -45
  68. package/ios/Model/NitroTypeStubs.swift +106 -21
  69. package/ios/Model/PlayerUpdateOptions.swift +7 -0
  70. package/ios/Player/MediaIntentCriteria.swift +13 -5
  71. package/ios/Player/MediaLoader.swift +33 -9
  72. package/ios/Player/NowPlayingUpdater.swift +54 -6
  73. package/ios/Player/PlaybackCoordinator.swift +13 -6
  74. package/ios/Player/PlaybackTimer.swift +8 -2
  75. package/ios/Player/QueueManager.swift +36 -10
  76. package/ios/Player/RetryManager.swift +4 -3
  77. package/ios/Player/ShuffleOrder.swift +23 -0
  78. package/ios/Player/SleepTimerHandling.swift +13 -0
  79. package/ios/RemoteCommand/RemoteCommandController.swift +53 -18
  80. package/ios/Tests/BrowserPathHelperTests.swift +50 -20
  81. package/ios/Tests/CarPlayArtworkResolverTests.swift +24 -41
  82. package/ios/Tests/InertStyleDiagnosticTests.swift +200 -0
  83. package/ios/Tests/JsonModelsTests.swift +150 -1
  84. package/ios/Tests/PlaybackStateStoreTests.swift +4 -3
  85. package/ios/Tests/QueueManagerTests.swift +72 -6
  86. package/ios/Tests/RemoteCommandControllerTests.swift +16 -0
  87. package/ios/Tests/ResolvedTrackCopyingTests.swift +37 -35
  88. package/ios/Tests/SearchDrillInTests.swift +16 -16
  89. package/ios/Tests/SectionPresentationTests.swift +90 -0
  90. package/ios/Tests/SectionScopeTests.swift +87 -55
  91. package/ios/Tests/StyleResolverTests.swift +127 -0
  92. package/ios/Tests/Support/TestTypes.swift +7 -0
  93. package/ios/Tests/TabBarEntriesTests.swift +18 -18
  94. package/ios/Tests/TrackIdTemplateTests.swift +67 -0
  95. package/ios/Tests/TrackIdentityTests.swift +20 -0
  96. package/ios/Tests/TrackSelectorTests.swift +168 -33
  97. package/ios/TrackPlayer.swift +57 -34
  98. package/ios/TrackSelector.swift +45 -30
  99. package/ios/Util/ArtworkImageFetcher.swift +16 -1
  100. package/ios/Util/NetworkMonitor.swift +43 -26
  101. package/ios/Util/SFSymbolRenderer.swift +24 -2
  102. package/ios/Util/SVGProcessor.swift +9 -2
  103. package/lib/commonjs/AudioBrowser.js +11 -0
  104. package/lib/commonjs/AudioBrowser.js.map +1 -1
  105. package/lib/commonjs/features/browser-config.js +11 -8
  106. package/lib/commonjs/features/browser-config.js.map +1 -1
  107. package/lib/commonjs/features/browser.js +2 -2
  108. package/lib/commonjs/features/favorites.js +13 -10
  109. package/lib/commonjs/features/favorites.js.map +1 -1
  110. package/lib/commonjs/features/playback/controls.js +4 -2
  111. package/lib/commonjs/features/playback/controls.js.map +1 -1
  112. package/lib/commonjs/features/playback/progress.js +2 -1
  113. package/lib/commonjs/features/playback/progress.js.map +1 -1
  114. package/lib/commonjs/features/playback/rate.js +8 -1
  115. package/lib/commonjs/features/playback/rate.js.map +1 -1
  116. package/lib/commonjs/features/playback/state.js +2 -3
  117. package/lib/commonjs/features/playback/state.js.map +1 -1
  118. package/lib/commonjs/features/player/options.js.map +1 -1
  119. package/lib/commonjs/features/player/setup.js +3 -1
  120. package/lib/commonjs/features/player/setup.js.map +1 -1
  121. package/lib/commonjs/features/player/validateOptions.js +2 -0
  122. package/lib/commonjs/features/player/validateOptions.js.map +1 -1
  123. package/lib/commonjs/features/queue/activeTrack.js +14 -3
  124. package/lib/commonjs/features/queue/activeTrack.js.map +1 -1
  125. package/lib/commonjs/features/queue/queue.js +11 -4
  126. package/lib/commonjs/features/queue/queue.js.map +1 -1
  127. package/lib/commonjs/utils/LazyNativeEmitter.js +21 -10
  128. package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
  129. package/lib/commonjs/utils/NativeUpdatedValue.js +31 -13
  130. package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -1
  131. package/lib/commonjs/utils/getTrackIdentity.js +24 -0
  132. package/lib/commonjs/utils/getTrackIdentity.js.map +1 -0
  133. package/lib/commonjs/utils/useNativeValueRefreshedBy.js +33 -0
  134. package/lib/commonjs/utils/useNativeValueRefreshedBy.js.map +1 -0
  135. package/lib/commonjs/web/NativeAudioBrowser.js +32 -24
  136. package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
  137. package/lib/commonjs/web/TrackPlayer/QueueManager.js +14 -0
  138. package/lib/commonjs/web/TrackPlayer/QueueManager.js.map +1 -1
  139. package/lib/commonjs/web/browser/BrowserManager.js +144 -87
  140. package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
  141. package/lib/commonjs/web/browser/FavoriteManager.js +30 -21
  142. package/lib/commonjs/web/browser/FavoriteManager.js.map +1 -1
  143. package/lib/commonjs/web/browser/assertBrowsePageShape.js +2 -2
  144. package/lib/commonjs/web/browser/assertBrowsePageShape.js.map +1 -1
  145. package/lib/commonjs/web/browser/classifyTrackNavigation.js +9 -9
  146. package/lib/commonjs/web/browser/classifyTrackNavigation.js.map +1 -1
  147. package/lib/commonjs/web/browser/sections.js +89 -0
  148. package/lib/commonjs/web/browser/sections.js.map +1 -0
  149. package/lib/commonjs/web/player/NowPlayingManager.js +4 -3
  150. package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
  151. package/lib/commonjs/web/util/BrowserPathHelper.js +56 -11
  152. package/lib/commonjs/web/util/BrowserPathHelper.js.map +1 -1
  153. package/lib/module/AudioBrowser.js +1 -0
  154. package/lib/module/AudioBrowser.js.map +1 -1
  155. package/lib/module/features/browser-config.js +11 -8
  156. package/lib/module/features/browser-config.js.map +1 -1
  157. package/lib/module/features/browser.js +2 -2
  158. package/lib/module/features/favorites.js +13 -10
  159. package/lib/module/features/favorites.js.map +1 -1
  160. package/lib/module/features/playback/controls.js +4 -2
  161. package/lib/module/features/playback/controls.js.map +1 -1
  162. package/lib/module/features/playback/progress.js +2 -1
  163. package/lib/module/features/playback/progress.js.map +1 -1
  164. package/lib/module/features/playback/rate.js +8 -1
  165. package/lib/module/features/playback/rate.js.map +1 -1
  166. package/lib/module/features/playback/state.js +2 -3
  167. package/lib/module/features/playback/state.js.map +1 -1
  168. package/lib/module/features/player/options.js.map +1 -1
  169. package/lib/module/features/player/setup.js +3 -1
  170. package/lib/module/features/player/setup.js.map +1 -1
  171. package/lib/module/features/player/validateOptions.js +2 -0
  172. package/lib/module/features/player/validateOptions.js.map +1 -1
  173. package/lib/module/features/queue/activeTrack.js +14 -3
  174. package/lib/module/features/queue/activeTrack.js.map +1 -1
  175. package/lib/module/features/queue/queue.js +11 -4
  176. package/lib/module/features/queue/queue.js.map +1 -1
  177. package/lib/module/utils/LazyNativeEmitter.js +21 -10
  178. package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
  179. package/lib/module/utils/NativeUpdatedValue.js +31 -13
  180. package/lib/module/utils/NativeUpdatedValue.js.map +1 -1
  181. package/lib/module/utils/getTrackIdentity.js +20 -0
  182. package/lib/module/utils/getTrackIdentity.js.map +1 -0
  183. package/lib/module/utils/useNativeValueRefreshedBy.js +29 -0
  184. package/lib/module/utils/useNativeValueRefreshedBy.js.map +1 -0
  185. package/lib/module/web/NativeAudioBrowser.js +32 -24
  186. package/lib/module/web/NativeAudioBrowser.js.map +1 -1
  187. package/lib/module/web/TrackPlayer/QueueManager.js +14 -0
  188. package/lib/module/web/TrackPlayer/QueueManager.js.map +1 -1
  189. package/lib/module/web/browser/BrowserManager.js +144 -87
  190. package/lib/module/web/browser/BrowserManager.js.map +1 -1
  191. package/lib/module/web/browser/FavoriteManager.js +31 -21
  192. package/lib/module/web/browser/FavoriteManager.js.map +1 -1
  193. package/lib/module/web/browser/assertBrowsePageShape.js +2 -2
  194. package/lib/module/web/browser/assertBrowsePageShape.js.map +1 -1
  195. package/lib/module/web/browser/classifyTrackNavigation.js +9 -9
  196. package/lib/module/web/browser/classifyTrackNavigation.js.map +1 -1
  197. package/lib/module/web/browser/sections.js +83 -0
  198. package/lib/module/web/browser/sections.js.map +1 -0
  199. package/lib/module/web/player/NowPlayingManager.js +4 -3
  200. package/lib/module/web/player/NowPlayingManager.js.map +1 -1
  201. package/lib/module/web/util/BrowserPathHelper.js +56 -11
  202. package/lib/module/web/util/BrowserPathHelper.js.map +1 -1
  203. package/lib/typescript/src/AudioBrowser.d.ts +1 -0
  204. package/lib/typescript/src/AudioBrowser.d.ts.map +1 -1
  205. package/lib/typescript/src/features/browser-config.d.ts.map +1 -1
  206. package/lib/typescript/src/features/browser.d.ts +2 -2
  207. package/lib/typescript/src/features/favorites.d.ts +13 -10
  208. package/lib/typescript/src/features/favorites.d.ts.map +1 -1
  209. package/lib/typescript/src/features/playback/controls.d.ts +4 -2
  210. package/lib/typescript/src/features/playback/controls.d.ts.map +1 -1
  211. package/lib/typescript/src/features/playback/progress.d.ts.map +1 -1
  212. package/lib/typescript/src/features/playback/rate.d.ts +8 -1
  213. package/lib/typescript/src/features/playback/rate.d.ts.map +1 -1
  214. package/lib/typescript/src/features/playback/state.d.ts +2 -3
  215. package/lib/typescript/src/features/playback/state.d.ts.map +1 -1
  216. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts +1 -1
  217. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts.map +1 -1
  218. package/lib/typescript/src/features/player/options.d.ts +21 -19
  219. package/lib/typescript/src/features/player/options.d.ts.map +1 -1
  220. package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
  221. package/lib/typescript/src/features/player/validateOptions.d.ts +1 -8
  222. package/lib/typescript/src/features/player/validateOptions.d.ts.map +1 -1
  223. package/lib/typescript/src/features/queue/activeTrack.d.ts +8 -1
  224. package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -1
  225. package/lib/typescript/src/features/queue/queue.d.ts +5 -2
  226. package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
  227. package/lib/typescript/src/types/browser-native.d.ts +2 -2
  228. package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
  229. package/lib/typescript/src/types/browser-nodes.d.ts +361 -126
  230. package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
  231. package/lib/typescript/src/types/browser.d.ts +33 -53
  232. package/lib/typescript/src/types/browser.d.ts.map +1 -1
  233. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +16 -17
  234. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
  235. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +24 -19
  236. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -1
  237. package/lib/typescript/src/utils/getTrackIdentity.d.ts +18 -0
  238. package/lib/typescript/src/utils/getTrackIdentity.d.ts.map +1 -0
  239. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts +21 -0
  240. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts.map +1 -0
  241. package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +0 -1
  242. package/nitrogen/generated/android/c++/{JFavoritesMatchMode.hpp → JArtworkRendering.hpp} +15 -15
  243. package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +8 -3
  244. package/nitrogen/generated/android/c++/JBrowseResult.hpp +16 -4
  245. package/nitrogen/generated/android/c++/JCarPlayPlayingIndicatorLocation.hpp +58 -0
  246. package/nitrogen/generated/android/c++/JCardImage.hpp +58 -0
  247. package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +8 -3
  248. package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +8 -3
  249. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +8 -3
  250. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +8 -3
  251. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +8 -3
  252. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +8 -3
  253. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +8 -2
  254. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +8 -2
  255. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.hpp +16 -4
  256. package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +8 -3
  257. package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +2 -5
  258. package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +8 -3
  259. package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +15 -3
  260. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +8 -2
  261. package/nitrogen/generated/android/c++/JGridTile.hpp +61 -0
  262. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +33 -14
  263. package/nitrogen/generated/android/c++/JIOSOptions.hpp +9 -3
  264. package/nitrogen/generated/android/c++/JImageShape.hpp +58 -0
  265. package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +8 -3
  266. package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +22 -10
  267. package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +14 -2
  268. package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +10 -7
  269. package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +2 -5
  270. package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +9 -3
  271. package/nitrogen/generated/android/c++/JOptions.hpp +2 -5
  272. package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +8 -3
  273. package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +5 -11
  274. package/nitrogen/generated/android/c++/JResolvedTrack.hpp +55 -51
  275. package/nitrogen/generated/android/c++/JSection.hpp +120 -0
  276. package/nitrogen/generated/android/c++/JSectionStyle.hpp +96 -0
  277. package/nitrogen/generated/android/c++/JStyleDisplay.hpp +58 -0
  278. package/nitrogen/generated/android/c++/JTrack.hpp +23 -48
  279. package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +8 -2
  280. package/nitrogen/generated/android/c++/JTrackStyle.hpp +46 -18
  281. package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +16 -4
  282. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoritesMatchMode.kt → ArtworkRendering.kt} +5 -5
  283. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayPlayingIndicatorLocation.kt +23 -0
  284. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CardImage.kt +23 -0
  285. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/GridTile.kt +24 -0
  286. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSOptions.kt +6 -3
  287. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageShape.kt +23 -0
  288. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +5 -5
  289. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroIOSUpdateOptions.kt +6 -3
  290. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
  291. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +12 -18
  292. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoriteConfig.kt → Section.kt} +18 -6
  293. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SectionStyle.kt +59 -0
  294. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StyleDisplay.kt +23 -0
  295. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +6 -15
  296. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +35 -5
  297. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +158 -82
  298. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +25 -10
  299. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +25 -10
  300. package/nitrogen/generated/ios/swift/ArtworkRendering.swift +40 -0
  301. package/nitrogen/generated/ios/swift/CarPlayPlayingIndicatorLocation.swift +40 -0
  302. package/nitrogen/generated/ios/swift/CardImage.swift +40 -0
  303. package/nitrogen/generated/ios/swift/GridTile.swift +44 -0
  304. package/nitrogen/generated/ios/swift/IOSOptions.swift +7 -2
  305. package/nitrogen/generated/ios/swift/ImageShape.swift +40 -0
  306. package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +5 -5
  307. package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +12 -1
  308. package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +8 -27
  309. package/nitrogen/generated/ios/swift/ResolvedTrack.swift +54 -83
  310. package/nitrogen/generated/ios/swift/Section.swift +100 -0
  311. package/nitrogen/generated/ios/swift/SectionStyle.swift +133 -0
  312. package/nitrogen/generated/ios/swift/StyleDisplay.swift +40 -0
  313. package/nitrogen/generated/ios/swift/Track.swift +20 -73
  314. package/nitrogen/generated/ios/swift/TrackStyle.swift +86 -22
  315. package/nitrogen/generated/shared/c++/{FavoritesMatchMode.hpp → ArtworkRendering.hpp} +17 -17
  316. package/nitrogen/generated/shared/c++/CarPlayPlayingIndicatorLocation.hpp +76 -0
  317. package/nitrogen/generated/shared/c++/CardImage.hpp +76 -0
  318. package/nitrogen/generated/shared/c++/GridTile.hpp +80 -0
  319. package/nitrogen/generated/shared/c++/IOSOptions.hpp +9 -2
  320. package/nitrogen/generated/shared/c++/ImageShape.hpp +76 -0
  321. package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +6 -6
  322. package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +9 -2
  323. package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +6 -9
  324. package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +30 -38
  325. package/nitrogen/generated/shared/c++/Section.hpp +106 -0
  326. package/nitrogen/generated/shared/c++/SectionStyle.hpp +126 -0
  327. package/nitrogen/generated/shared/c++/StyleDisplay.hpp +76 -0
  328. package/nitrogen/generated/shared/c++/Track.hpp +15 -31
  329. package/nitrogen/generated/shared/c++/TrackStyle.hpp +73 -34
  330. package/package.json +7 -2
  331. package/src/AudioBrowser.ts +1 -0
  332. package/src/features/browser-config.test.ts +21 -6
  333. package/src/features/browser-config.ts +11 -8
  334. package/src/features/browser.test.ts +1 -1
  335. package/src/features/browser.ts +2 -2
  336. package/src/features/favorites.ts +13 -10
  337. package/src/features/hook-wiring.test.ts +63 -15
  338. package/src/features/playback/controls.ts +4 -2
  339. package/src/features/playback/progress.ts +2 -1
  340. package/src/features/playback/rate.ts +8 -1
  341. package/src/features/playback/state.ts +2 -3
  342. package/src/features/playback/trackPlaybackTime.ts +1 -1
  343. package/src/features/player/options.ts +27 -19
  344. package/src/features/player/setup.test.ts +12 -3
  345. package/src/features/player/setup.ts +3 -1
  346. package/src/features/player/validateOptions.ts +2 -0
  347. package/src/features/queue/activeTrack.ts +14 -3
  348. package/src/features/queue/queue.ts +11 -4
  349. package/src/nitro-stub-drift.test.ts +40 -0
  350. package/src/public-surface.test.ts +40 -0
  351. package/src/specs/audio-browser.nitro.ts +4 -3
  352. package/src/style-resolution.test.ts +210 -0
  353. package/src/types/browser-native.ts +2 -2
  354. package/src/types/browser-nodes.ts +377 -135
  355. package/src/types/browser.ts +34 -55
  356. package/src/utils/LazyNativeEmitter.ts +20 -10
  357. package/src/utils/NativeUpdatedValue.ts +29 -13
  358. package/src/utils/getTrackIdentity.ts +20 -0
  359. package/src/utils/useNativeValueRefreshedBy.ts +38 -0
  360. package/src/web/NativeAudioBrowser.ts +37 -22
  361. package/src/web/TrackPlayer/QueueManager.test.ts +29 -0
  362. package/src/web/TrackPlayer/QueueManager.ts +14 -0
  363. package/src/web/browser/BrowserManager.ts +176 -95
  364. package/src/web/browser/FavoriteManager.test.ts +84 -0
  365. package/src/web/browser/FavoriteManager.ts +28 -23
  366. package/src/web/browser/assertBrowsePageShape.test.ts +1 -1
  367. package/src/web/browser/assertBrowsePageShape.ts +5 -3
  368. package/src/web/browser/classifyTrackNavigation.test.ts +10 -8
  369. package/src/web/browser/classifyTrackNavigation.ts +9 -9
  370. package/src/web/browser/parseSearchResponse.test.ts +8 -2
  371. package/src/web/browser/sections.test.ts +91 -0
  372. package/src/web/browser/sections.ts +72 -0
  373. package/src/web/player/NowPlayingManager.ts +4 -3
  374. package/src/web/util/BrowserPathHelper.test.ts +52 -0
  375. package/src/web/util/BrowserPathHelper.ts +61 -13
  376. package/website/guide/android-auto.md +114 -0
  377. package/website/guide/android-certificates.md +409 -0
  378. package/website/guide/artwork.md +255 -0
  379. package/website/guide/audio-output.md +135 -0
  380. package/website/guide/automotive.md +86 -0
  381. package/website/guide/basic-usage.md +151 -0
  382. package/website/guide/battery.md +115 -0
  383. package/website/guide/browser.md +581 -0
  384. package/website/guide/carplay.md +620 -0
  385. package/website/guide/configuration.md +173 -0
  386. package/website/guide/equalizer.md +231 -0
  387. package/website/guide/errors.md +310 -0
  388. package/website/guide/favorites.md +154 -0
  389. package/website/guide/gate.md +143 -0
  390. package/website/guide/getting-started.md +46 -0
  391. package/website/guide/hooks.md +238 -0
  392. package/website/guide/live-streams.md +125 -0
  393. package/website/guide/metadata.md +239 -0
  394. package/website/guide/migrating-from-track-player.md +244 -0
  395. package/website/guide/native-callback-fetch.md +127 -0
  396. package/website/guide/network.md +86 -0
  397. package/website/guide/now-playing.md +175 -0
  398. package/website/guide/playback.md +328 -0
  399. package/website/guide/queue.md +300 -0
  400. package/website/guide/remote-controls.md +256 -0
  401. package/website/guide/search.md +255 -0
  402. package/website/guide/sleep-timer.md +268 -0
  403. package/website/guide/track.md +246 -0
  404. package/ios/CarPlay/ImageRowItem+CarPlay.swift +0 -19
  405. package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +0 -58
  406. package/nitrogen/generated/android/c++/JImageRowItem.hpp +0 -105
  407. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp +0 -26
  408. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.hpp +0 -71
  409. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +0 -68
  410. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_FavoriteConfig.kt +0 -53
  411. package/nitrogen/generated/ios/swift/FavoriteConfig.swift +0 -29
  412. package/nitrogen/generated/ios/swift/FavoritesMatchMode.swift +0 -40
  413. package/nitrogen/generated/ios/swift/ImageRowItem.swift +0 -195
  414. package/nitrogen/generated/ios/swift/Variant_Bool_FavoriteConfig.swift +0 -18
  415. package/nitrogen/generated/shared/c++/FavoriteConfig.hpp +0 -84
  416. package/nitrogen/generated/shared/c++/ImageRowItem.hpp +0 -129
@@ -44,26 +44,29 @@ function toggleActiveTrackFavorited() {
44
44
  }
45
45
 
46
46
  /**
47
- * Sets the list of favorited track source identifiers.
47
+ * Sets the list of favorited track identifiers.
48
48
  *
49
49
  * This syncs your app's favorites with the native favorites cache, enabling
50
50
  * the heart button in media controllers (notification, Android Auto, CarPlay)
51
51
  * to show the correct state.
52
52
  *
53
- * Note: This is only needed if the tracks provided to AudioBrowser do not
54
- * include the `favorited` field. If your API already includes favorite state in
55
- * track responses, the native favorites cache is populated automatically during browsing.
53
+ * Each identifier is matched **exactly** against a track's *identity* — its
54
+ * `id` when set, falling back to `src`. Store favorites as the same stable
55
+ * identifier you put in `Track.id` (or as the full `src` for id-less tracks).
56
56
  *
57
- * When the heart button is tapped in media controllers or when you call
58
- * `setActiveTrackFavorited()`, the native favorites cache is automatically
59
- * updated. You only need to call this on app launch to hydrate the cache.
57
+ * A track whose response already carries `favorited` keeps that value on
58
+ * display surfaces — a caller-set flag wins over cache hydration. The cache
59
+ * itself is written only by this call and by heart toggles
60
+ * (`setActiveTrackFavorited()` / media-controller taps), so you only need to
61
+ * call this on app launch — and again whenever the collection changes outside
62
+ * the player (a sync from another device, say).
60
63
  *
61
- * @param favorites - Array of favorited track `src` values
64
+ * @param favorites - Array of favorited track identities (`id`, or `src` for id-less tracks)
62
65
  *
63
66
  * @example
64
67
  * ```ts
65
- * const favoriteSrcs = await loadFavoritesFromStorage()
66
- * setFavorites(favoriteSrcs)
68
+ * const favoriteIds = await loadFavoritesFromStorage()
69
+ * setFavorites(favoriteIds)
67
70
  * ```
68
71
  */
69
72
  function setFavorites(favorites) {
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","_NativeUpdatedValue","setActiveTrackFavorited","favorited","nativeBrowser","toggleActiveTrackFavorited","setFavorites","favorites","onFavoriteChanged","exports","NativeUpdatedValue","emitterize","cb"],"sourceRoot":"../../../src","sources":["features/favorites.ts"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,uBAAuBA,CAACC,SAAkB,EAAQ;EAChEC,qBAAa,CAACF,uBAAuB,CAACC,SAAS,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,0BAA0BA,CAAA,EAAS;EACjDD,qBAAa,CAACC,0BAA0B,CAAC,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAACC,SAAmB,EAAQ;EACtDH,qBAAa,CAACE,YAAY,CAACC,SAAS,CAAC;AACvC;;AAEA;;AAEA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAC5BE,sCAAkB,CAACC,UAAU,CAC1BC,EAAE,IAAMR,qBAAa,CAACI,iBAAiB,GAAGI,EAC7C,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","_NativeUpdatedValue","setActiveTrackFavorited","favorited","nativeBrowser","toggleActiveTrackFavorited","setFavorites","favorites","onFavoriteChanged","exports","NativeUpdatedValue","emitterize","cb"],"sourceRoot":"../../../src","sources":["features/favorites.ts"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,uBAAuBA,CAACC,SAAkB,EAAQ;EAChEC,qBAAa,CAACF,uBAAuB,CAACC,SAAS,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,0BAA0BA,CAAA,EAAS;EACjDD,qBAAa,CAACC,0BAA0B,CAAC,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAACC,SAAmB,EAAQ;EACtDH,qBAAa,CAACE,YAAY,CAACC,SAAS,CAAC;AACvC;;AAEA;;AAEA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAC5BE,sCAAkB,CAACC,UAAU,CAC1BC,EAAE,IAAMR,qBAAa,CAACI,iBAAiB,GAAGI,EAC7C,CAAC","ignoreList":[]}
@@ -71,8 +71,10 @@ function seekTo(position) {
71
71
  }
72
72
 
73
73
  /**
74
- * Jump to the live edge of the current track. No-op for non-live tracks; for
75
- * live, seeks to the window end (HLS) or reconnects (non-seekable streams).
74
+ * Jump to the live edge of the current track; no-op unless the track
75
+ * declares `live: true`. A stream with a seekable live window (HLS) seeks
76
+ * to the window's edge; a non-seekable stream (e.g. ICY radio) reconnects
77
+ * to rejoin live — an expired URL re-resolves through `media.resolve`.
76
78
  */
77
79
  function seekToLiveEdge() {
78
80
  _native.nativeBrowser.seekToLiveEdge();
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","reset","nativeBrowser","play","pause","togglePlayback","stop","retry","seekTo","position","seekToLiveEdge","seekBy","offset"],"sourceRoot":"../../../../src","sources":["features/playback/controls.ts"],"mappings":";;;;;;;;;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AAFA;;AAIA;AACA;AACA;AACO,SAASC,KAAKA,CAAA,EAAS;EAC5BC,qBAAa,CAACD,KAAK,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACO,SAASE,IAAIA,CAAA,EAAS;EAC3BD,qBAAa,CAACC,IAAI,CAAC,CAAC;AACtB;;AAEA;AACA;AACA;AACO,SAASC,KAAKA,CAAA,EAAS;EAC5BF,qBAAa,CAACE,KAAK,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAS;EACrCH,qBAAa,CAACG,cAAc,CAAC,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,IAAIA,CAAA,EAAS;EAC3BJ,qBAAa,CAACI,IAAI,CAAC,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,KAAKA,CAAA,EAAS;EAC5BL,qBAAa,CAACK,KAAK,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACA;AACO,SAASC,MAAMA,CAACC,QAAgB,EAAQ;EAC7CP,qBAAa,CAACM,MAAM,CAACC,QAAQ,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAS;EACrCR,qBAAa,CAACQ,cAAc,CAAC,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACO,SAASC,MAAMA,CAACC,MAAc,EAAQ;EAC3CV,qBAAa,CAACS,MAAM,CAACC,MAAM,CAAC;AAC9B","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","reset","nativeBrowser","play","pause","togglePlayback","stop","retry","seekTo","position","seekToLiveEdge","seekBy","offset"],"sourceRoot":"../../../../src","sources":["features/playback/controls.ts"],"mappings":";;;;;;;;;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AAFA;;AAIA;AACA;AACA;AACO,SAASC,KAAKA,CAAA,EAAS;EAC5BC,qBAAa,CAACD,KAAK,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACO,SAASE,IAAIA,CAAA,EAAS;EAC3BD,qBAAa,CAACC,IAAI,CAAC,CAAC;AACtB;;AAEA;AACA;AACA;AACO,SAASC,KAAKA,CAAA,EAAS;EAC5BF,qBAAa,CAACE,KAAK,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAS;EACrCH,qBAAa,CAACG,cAAc,CAAC,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,IAAIA,CAAA,EAAS;EAC3BJ,qBAAa,CAACI,IAAI,CAAC,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,KAAKA,CAAA,EAAS;EAC5BL,qBAAa,CAACK,KAAK,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACA;AACO,SAASC,MAAMA,CAACC,QAAgB,EAAQ;EAC7CP,qBAAa,CAACM,MAAM,CAACC,QAAQ,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAS;EACrCR,qBAAa,CAACQ,cAAc,CAAC,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACO,SAASC,MAAMA,CAACC,MAAc,EAAQ;EAC3CV,qBAAa,CAACS,MAAM,CAACC,MAAM,CAAC;AAC9B","ignoreList":[]}
@@ -101,7 +101,8 @@ function usePolledProgress(updateInterval = 1000) {
101
101
  poll();
102
102
  };
103
103
  const stop = () => {
104
- clearTimeout(timer);
104
+ // Guarded: React Native types clearTimeout(handle: number) — no undefined.
105
+ if (timer !== undefined) clearTimeout(timer);
105
106
  timer = undefined;
106
107
  unsubscribeState?.();
107
108
  unsubscribeState = undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_native","_NativeUpdatedValue","_useNativeUpdatedValue","_state","getProgress","nativeBrowser","onProgressUpdated","exports","NativeUpdatedValue","emitterize","cb","onPlaybackProgressUpdated","useProgress","useNativeUpdatedValue","usePolledProgress","updateInterval","state","setState","useState","position","duration","buffered","useEffect","timer","unsubscribeState","update","currentState","poll","setTimeout","start","undefined","onPlaybackChanged","addListener","stop","clearTimeout","appStateSub","AppState","addEventListener","next","remove"],"sourceRoot":"../../../../src","sources":["features/playback/progress.ts"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AACA,IAAAI,sBAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEA;;AAiBA;AACA;AACA;;AAMA;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASM,WAAWA,CAAA,EAAa;EACtC,OAAOC,qBAAa,CAACD,WAAW,CAAC,CAAC;AACpC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAME,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAC5BE,sCAAkB,CAACC,UAAU,CAC1BC,EAAE,IAAML,qBAAa,CAACM,yBAAyB,GAAGD,EACrD,CAAC;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,WAAWA,CAAA,EAAa;EACtC,OAAO,IAAAC,4CAAqB,EAACT,WAAW,EAAEE,iBAAiB,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASQ,iBAAiBA,CAACC,cAAc,GAAG,IAAI,EAAY;EACjE,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAAW;IAC3CC,QAAQ,EAAE,CAAC;IACXC,QAAQ,EAAE,CAAC;IACXC,QAAQ,EAAE;EACZ,CAAC,CAAC;EAEF,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAIC,KAAgD;IACpD,IAAIC,gBAA0C;IAE9C,MAAMC,MAAM,GAAGA,CAAA,KAAM;MACnB,IAAI;QACF,MAAM;UAAEN,QAAQ;UAAEC,QAAQ;UAAEC;QAAS,CAAC,GAAGjB,WAAW,CAAC,CAAC;QAEtDa,QAAQ,CAAES,YAAY,IACpBP,QAAQ,KAAKO,YAAY,CAACP,QAAQ,IAClCC,QAAQ,KAAKM,YAAY,CAACN,QAAQ,IAClCC,QAAQ,KAAKK,YAAY,CAACL,QAAQ,GAC9BK,YAAY,GACZ;UAAEP,QAAQ;UAAEC,QAAQ;UAAEC;QAAS,CACrC,CAAC;MACH,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ,CAAC;IAED,MAAMM,IAAI,GAAGA,CAAA,KAAM;MACjBF,MAAM,CAAC,CAAC;MACRF,KAAK,GAAGK,UAAU,CAACD,IAAI,EAAEZ,cAAc,CAAC;IAC1C,CAAC;;IAED;IACA;IACA;IACA,MAAMc,KAAK,GAAGA,CAAA,KAAM;MAClB,IAAIN,KAAK,KAAKO,SAAS,EAAE;MACzBN,gBAAgB,GAAGO,wBAAiB,CAACC,WAAW,CAACP,MAAM,CAAC;MACxDE,IAAI,CAAC,CAAC;IACR,CAAC;IAED,MAAMM,IAAI,GAAGA,CAAA,KAAM;MACjBC,YAAY,CAACX,KAAK,CAAC;MACnBA,KAAK,GAAGO,SAAS;MACjBN,gBAAgB,GAAG,CAAC;MACpBA,gBAAgB,GAAGM,SAAS;IAC9B,CAAC;IAED,MAAMK,WAAW,GAAGC,qBAAQ,CAACC,gBAAgB,CAAC,QAAQ,EAAGC,IAAI,IAAK;MAChE,IAAIA,IAAI,KAAK,QAAQ,EAAET,KAAK,CAAC,CAAC,MACzBI,IAAI,CAAC,CAAC;IACb,CAAC,CAAC;IAEF,IAAIG,qBAAQ,CAACV,YAAY,KAAK,QAAQ,EAAEG,KAAK,CAAC,CAAC;IAE/C,OAAO,MAAM;MACXI,IAAI,CAAC,CAAC;MACNE,WAAW,CAACI,MAAM,CAAC,CAAC;IACtB,CAAC;EACH,CAAC,EAAE,CAACxB,cAAc,CAAC,CAAC;EAEpB,OAAOC,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_native","_NativeUpdatedValue","_useNativeUpdatedValue","_state","getProgress","nativeBrowser","onProgressUpdated","exports","NativeUpdatedValue","emitterize","cb","onPlaybackProgressUpdated","useProgress","useNativeUpdatedValue","usePolledProgress","updateInterval","state","setState","useState","position","duration","buffered","useEffect","timer","unsubscribeState","update","currentState","poll","setTimeout","start","undefined","onPlaybackChanged","addListener","stop","clearTimeout","appStateSub","AppState","addEventListener","next","remove"],"sourceRoot":"../../../../src","sources":["features/playback/progress.ts"],"mappings":"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","ignoreList":[]}
@@ -20,8 +20,15 @@ function getRate() {
20
20
 
21
21
  /**
22
22
  * Sets the playback rate.
23
+ *
24
+ * The rate is a speed multiplier, not a transport control — it is independent
25
+ * of play/pause, and setting it while paused never starts playback. Use
26
+ * {@link play} / {@link pause} for that.
27
+ *
23
28
  * @param rate - The playback rate to change to, where 0.5 would be half speed,
24
- * 1 would be regular speed, 2 would be double speed etc.
29
+ * 1 would be regular speed, 2 would be double speed etc. Must be greater than
30
+ * zero; platforms disagree on what a non-positive rate does (iOS ignores it,
31
+ * Android throws, web stalls the element), so treat it as unsupported.
25
32
  */
26
33
  function setRate(rate) {
27
34
  _native.nativeBrowser.setRate(rate);
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","getRate","nativeBrowser","setRate","rate"],"sourceRoot":"../../../../src","sources":["features/playback/rate.ts"],"mappings":";;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AAFA;;AAIA;AACA;AACA;AACA;AACO,SAASC,OAAOA,CAAA,EAAW;EAChC,OAAOC,qBAAa,CAACD,OAAO,CAAC,CAAC;AAChC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,OAAOA,CAACC,IAAY,EAAQ;EAC1CF,qBAAa,CAACC,OAAO,CAACC,IAAI,CAAC;AAC7B","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","getRate","nativeBrowser","setRate","rate"],"sourceRoot":"../../../../src","sources":["features/playback/rate.ts"],"mappings":";;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AAFA;;AAIA;AACA;AACA;AACA;AACO,SAASC,OAAOA,CAAA,EAAW;EAChC,OAAOC,qBAAa,CAACD,OAAO,CAAC,CAAC;AAChC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,OAAOA,CAACC,IAAY,EAAQ;EAC1CF,qBAAa,CAACC,OAAO,CAACC,IAAI,CAAC;AAC7B","ignoreList":[]}
@@ -24,9 +24,8 @@ var _useNativeUpdatedValue = require("../../utils/useNativeUpdatedValue");
24
24
  * - `'buffering'`: Indicates that the player is currently loading more data
25
25
  * before it can continue playing or is ready to start playing.
26
26
  * - `'error'`: Indicates that playback of the current item failed. Call
27
- * `AudioBrowser.getError()` to get more information on the type of error that
28
- * occurred. Call `AudioBrowser.retry()` or `AudioBrowser.play()` to try to play
29
- * the item again.
27
+ * `getPlaybackError()` (or subscribe via `usePlaybackError()`) for the
28
+ * error details. Call `retry()` or `play()` to try to play the item again.
30
29
  * - `'ended'`: Indicates that playback stopped due to the end of the queue
31
30
  * being reached.
32
31
  */
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","getPlayback","nativeBrowser","onPlaybackChanged","exports","NativeUpdatedValue","emitterize","cb","usePlayback","useNativeUpdatedValue"],"sourceRoot":"../../../../src","sources":["features/playback/state.ts"],"mappings":";;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiBA;;AAEA;AACA;AACA;AACA;AACO,SAASG,WAAWA,CAAA,EAAa;EACtC,OAAOC,qBAAa,CAACD,WAAW,CAAC,CAAC;AACpC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAME,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAGE,sCAAkB,CAACC,UAAU,CAC3DC,EAAE,IAAML,qBAAa,CAACC,iBAAiB,GAAGI,EAC7C,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACO,SAASC,WAAWA,CAAA,EAAa;EACtC,OAAO,IAAAC,4CAAqB,EAACR,WAAW,EAAEE,iBAAiB,CAAC;AAC9D","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","getPlayback","nativeBrowser","onPlaybackChanged","exports","NativeUpdatedValue","emitterize","cb","usePlayback","useNativeUpdatedValue"],"sourceRoot":"../../../../src","sources":["features/playback/state.ts"],"mappings":";;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiBA;;AAEA;AACA;AACA;AACA;AACO,SAASG,WAAWA,CAAA,EAAa;EACtC,OAAOC,qBAAa,CAACD,WAAW,CAAC,CAAC;AACpC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAME,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAGE,sCAAkB,CAACC,UAAU,CAC3DC,EAAE,IAAML,qBAAa,CAACC,iBAAiB,GAAGI,EAC7C,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACO,SAASC,WAAWA,CAAA,EAAa;EACtC,OAAO,IAAAC,4CAAqB,EAACR,WAAW,EAAEE,iBAAiB,CAAC;AAC9D","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","_validateOptions","updateOptions","options","validateIOSUpdateOptions","ios","nativeBrowser","getOptions","onOptionsChanged","exports","NativeUpdatedValue","emitterize","cb","useOptions","useNativeUpdatedValue"],"sourceRoot":"../../../../src","sources":["features/player/options.ts"],"mappings":";;;;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgGA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA4CA;AACA;AACA;AACA;;AA4EA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;;AA6BA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuDA;AACA;AACA;AACA;;AAwCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,aAAaA,CAACC,OAAsB,EAAQ;EAC1D,IAAAC,yCAAwB,EAACD,OAAO,CAACE,GAAG,CAAC;EACrCC,qBAAa,CAACJ,aAAa,CAACC,OAAO,CAAC;AACtC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,UAAUA,CAAA,EAAY;EACpC,OAAOD,qBAAa,CAACC,UAAU,CAAC,CAAC;AACnC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAGE,sCAAkB,CAACC,UAAU,CAC1DC,EAAE,IAAMN,qBAAa,CAACE,gBAAgB,GAAGI,EAC5C,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA,EAAY;EACpC,OAAO,IAAAC,4CAAqB,EAACP,UAAU,EAAEC,gBAAgB,CAAC;AAC5D","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","_validateOptions","updateOptions","options","validateIOSUpdateOptions","ios","nativeBrowser","getOptions","onOptionsChanged","exports","NativeUpdatedValue","emitterize","cb","useOptions","useNativeUpdatedValue"],"sourceRoot":"../../../../src","sources":["features/player/options.ts"],"mappings":";;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuFA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA4CA;AACA;AACA;AACA;;AAmFA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;;AAoCA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuDA;AACA;AACA;AACA;;AAwCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,aAAaA,CAACC,OAAsB,EAAQ;EAC1D,IAAAC,yCAAwB,EAACD,OAAO,CAACE,GAAG,CAAC;EACrCC,qBAAa,CAACJ,aAAa,CAACC,OAAO,CAAC;AACtC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,UAAUA,CAAA,EAAY;EACpC,OAAOD,qBAAa,CAACC,UAAU,CAAC,CAAC;AACnC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAGE,sCAAkB,CAACC,UAAU,CAC1DC,EAAE,IAAMN,qBAAa,CAACE,gBAAgB,GAAGI,EAC5C,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAAA,EAAY;EACpC,OAAO,IAAAC,4CAAqB,EAACP,UAAU,EAAEC,gBAAgB,CAAC;AAC5D","ignoreList":[]}
@@ -365,12 +365,14 @@ async function setupPlayer(options = {}) {
365
365
  playbackRates,
366
366
  carPlayUpNextButton,
367
367
  carPlayNowPlayingButtons,
368
+ carPlayPlayingIndicatorLocation,
368
369
  ...iosSetup
369
370
  } = ios;
370
371
  const iosUpdate = definedFields({
371
372
  playbackRates,
372
373
  carPlayUpNextButton,
373
- carPlayNowPlayingButtons
374
+ carPlayNowPlayingButtons,
375
+ carPlayPlayingIndicatorLocation
374
376
  });
375
377
  (0, _validateOptions.validateIOSUpdateOptions)(iosUpdate);
376
378
  const updates = definedFields({
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","_validateOptions","resolveNowPlaying","value","autoUpdateNowPlayingMetadata","nowPlayingMetadataFormatter","wrapNowPlayingFormatter","undefined","formatter","params","definedFields","obj","out","key","nonEmpty","Object","keys","length","setupPlayer","options","nowPlaying","capabilities","forwardJumpInterval","backwardJumpInterval","progressUpdateEventInterval","android","ios","nativeSetup","appKilledPlaybackBehavior","skipSilence","remoteButtonLayout","androidSetup","playbackRates","carPlayUpNextButton","carPlayNowPlayingButtons","iosSetup","iosUpdate","validateIOSUpdateOptions","updates","nativeBrowser"],"sourceRoot":"../../../../src","sources":["features/player/setup.ts"],"mappings":";;;;;;AAYA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAbA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAyBA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AA2GA;;AA4CA;AACA;AACA;AACA;AACA;;AAgCA;;AAEA;AACA;AACA;AACA;;AAMA;AACA;AA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","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","_validateOptions","resolveNowPlaying","value","autoUpdateNowPlayingMetadata","nowPlayingMetadataFormatter","wrapNowPlayingFormatter","undefined","formatter","params","definedFields","obj","out","key","nonEmpty","Object","keys","length","setupPlayer","options","nowPlaying","capabilities","forwardJumpInterval","backwardJumpInterval","progressUpdateEventInterval","android","ios","nativeSetup","appKilledPlaybackBehavior","skipSilence","remoteButtonLayout","androidSetup","playbackRates","carPlayUpNextButton","carPlayNowPlayingButtons","carPlayPlayingIndicatorLocation","iosSetup","iosUpdate","validateIOSUpdateOptions","updates","nativeBrowser"],"sourceRoot":"../../../../src","sources":["features/player/setup.ts"],"mappings":";;;;;;AAYA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAbA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAyBA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AA2GA;;AA4CA;AACA;AACA;AACA;AACA;;AAgCA;;AAEA;AACA;AACA;AACA;;AAMA;AACA;AA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","ignoreList":[]}
@@ -11,6 +11,8 @@ const MAX_CARPLAY_NOW_PLAYING_BUTTONS = 5;
11
11
  * Shared by `updateOptions` and `setupPlayer` (both can carry `ios` options).
12
12
  * Kept out of `options.ts`, which the barrel re-exports — see
13
13
  * public-surface.test.ts.
14
+ *
15
+ * @internal
14
16
  */
15
17
  function validateIOSUpdateOptions(ios) {
16
18
  const buttons = ios?.carPlayNowPlayingButtons;
@@ -1 +1 @@
1
- {"version":3,"names":["MAX_CARPLAY_NOW_PLAYING_BUTTONS","validateIOSUpdateOptions","ios","buttons","carPlayNowPlayingButtons","length","console","warn"],"sourceRoot":"../../../../src","sources":["features/player/validateOptions.ts"],"mappings":";;;;;;AAEA,MAAMA,+BAA+B,GAAG,CAAC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,wBAAwBA,CAACC,GAAsB,EAAQ;EACrE,MAAMC,OAAO,GAAGD,GAAG,EAAEE,wBAAwB;EAC7C,IAAID,OAAO,IAAIA,OAAO,CAACE,MAAM,GAAGL,+BAA+B,EAAE;IAC/DM,OAAO,CAACC,IAAI,CACV,gCAAgCJ,OAAO,CAACE,MAAM,uBAAuB,GACnE,6CAA6CL,+BAA+B,GAChF,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"names":["MAX_CARPLAY_NOW_PLAYING_BUTTONS","validateIOSUpdateOptions","ios","buttons","carPlayNowPlayingButtons","length","console","warn"],"sourceRoot":"../../../../src","sources":["features/player/validateOptions.ts"],"mappings":";;;;;;AAEA,MAAMA,+BAA+B,GAAG,CAAC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,wBAAwBA,CAACC,GAAsB,EAAQ;EACrE,MAAMC,OAAO,GAAGD,GAAG,EAAEE,wBAAwB;EAC7C,IAAID,OAAO,IAAIA,OAAO,CAACE,MAAM,GAAGL,+BAA+B,EAAE;IAC/DM,OAAO,CAACC,IAAI,CACV,gCAAgCJ,OAAO,CAACE,MAAM,uBAAuB,GACnE,6CAA6CL,+BAA+B,GAChF,CAAC;EACH;AACF","ignoreList":[]}
@@ -9,7 +9,8 @@ exports.onActiveTrackChanged = void 0;
9
9
  exports.useActiveTrack = useActiveTrack;
10
10
  var _native = require("../../native");
11
11
  var _NativeUpdatedValue = require("../../utils/NativeUpdatedValue");
12
- var _useNativeUpdatedValue = require("../../utils/useNativeUpdatedValue");
12
+ var _useNativeValueRefreshedBy = require("../../utils/useNativeValueRefreshedBy");
13
+ var _favorites = require("../favorites");
13
14
  /**
14
15
  * Event data for when the active track changes.
15
16
  */
@@ -35,6 +36,12 @@ function getActiveTrackIndex() {
35
36
 
36
37
  /**
37
38
  * Subscribes to active track change events.
39
+ *
40
+ * Fires on **transitions only** — selection, queue advance, skip. In-place
41
+ * metadata mutations of the active track (a favorite toggle) emit
42
+ * {@link onFavoriteChanged} instead; {@link useActiveTrack} subscribes to
43
+ * both, so UI bound through the hook still re-renders on a heart toggle.
44
+ *
38
45
  * @param callback - Called when the active track changes
39
46
  * @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
40
47
  */
@@ -42,11 +49,15 @@ const onActiveTrackChanged = exports.onActiveTrackChanged = _NativeUpdatedValue.
42
49
 
43
50
  // MARK: - Hooks
44
51
 
52
+ // Module-level so the hook's subscription identity is stable across renders.
53
+ const activeTrackInvalidators = [onActiveTrackChanged, _favorites.onFavoriteChanged];
54
+
45
55
  /**
46
- * Hook that returns the current active track and updates when it changes.
56
+ * Hook that returns the current active track, updating on transitions AND on
57
+ * in-place mutations of the active track (favorite toggles).
47
58
  * @returns The current active track or undefined
48
59
  */
49
60
  function useActiveTrack() {
50
- return (0, _useNativeUpdatedValue.useNativeUpdatedValue)(getActiveTrack, onActiveTrackChanged, 'track');
61
+ return (0, _useNativeValueRefreshedBy.useNativeValueRefreshedBy)(getActiveTrack, activeTrackInvalidators);
51
62
  }
52
63
  //# sourceMappingURL=activeTrack.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","getActiveTrack","nativeBrowser","undefined","getActiveTrackIndex","onActiveTrackChanged","exports","NativeUpdatedValue","emitterize","cb","onPlaybackActiveTrackChanged","useActiveTrack","useNativeUpdatedValue"],"sourceRoot":"../../../../src","sources":["features/queue/activeTrack.ts"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AAEA;AACA;AACA;;AAcA;;AAEA;AACA;AACA;AACO,SAASG,cAAcA,CAAA,EAAsB;EAClD,OAAOC,qBAAa,CAACD,cAAc,CAAC,CAAC,IAAIE,SAAS;AACpD;;AAEA;AACA;AACA;AACA;AACO,SAASC,mBAAmBA,CAAA,EAAuB;EACxD,OAAOF,qBAAa,CAACE,mBAAmB,CAAC,CAAC,IAAID,SAAS;AACzD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAME,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAC/BE,sCAAkB,CAACC,UAAU,CAC1BC,EAAE,IAAMP,qBAAa,CAACQ,4BAA4B,GAAGD,EACxD,CAAC;;AAEH;;AAEA;AACA;AACA;AACA;AACO,SAASE,cAAcA,CAAA,EAAsB;EAClD,OAAO,IAAAC,4CAAqB,EAACX,cAAc,EAAEI,oBAAoB,EAAE,OAAO,CAAC;AAC7E","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeValueRefreshedBy","_favorites","getActiveTrack","nativeBrowser","undefined","getActiveTrackIndex","onActiveTrackChanged","exports","NativeUpdatedValue","emitterize","cb","onPlaybackActiveTrackChanged","activeTrackInvalidators","onFavoriteChanged","useActiveTrack","useNativeValueRefreshedBy"],"sourceRoot":"../../../../src","sources":["features/queue/activeTrack.ts"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,0BAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAEA;AACA;AACA;;AAcA;;AAEA;AACA;AACA;AACO,SAASI,cAAcA,CAAA,EAAsB;EAClD,OAAOC,qBAAa,CAACD,cAAc,CAAC,CAAC,IAAIE,SAAS;AACpD;;AAEA;AACA;AACA;AACA;AACO,SAASC,mBAAmBA,CAAA,EAAuB;EACxD,OAAOF,qBAAa,CAACE,mBAAmB,CAAC,CAAC,IAAID,SAAS;AACzD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAC/BE,sCAAkB,CAACC,UAAU,CAC1BC,EAAE,IAAMP,qBAAa,CAACQ,4BAA4B,GAAGD,EACxD,CAAC;;AAEH;;AAEA;AACA,MAAME,uBAAuB,GAAG,CAACN,oBAAoB,EAAEO,4BAAiB,CAAC;;AAEzE;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAA,EAAsB;EAClD,OAAO,IAAAC,oDAAyB,EAACb,cAAc,EAAEU,uBAAuB,CAAC;AAC3E","ignoreList":[]}
@@ -18,7 +18,8 @@ exports.skipToPrevious = skipToPrevious;
18
18
  exports.useQueue = useQueue;
19
19
  var _native = require("../../native");
20
20
  var _NativeUpdatedValue = require("../../utils/NativeUpdatedValue");
21
- var _useNativeUpdatedValue = require("../../utils/useNativeUpdatedValue");
21
+ var _useNativeValueRefreshedBy = require("../../utils/useNativeValueRefreshedBy");
22
+ var _favorites = require("../favorites");
22
23
  // MARK: - Types
23
24
 
24
25
  /**
@@ -166,7 +167,9 @@ const onQueueEnded = exports.onQueueEnded = _NativeUpdatedValue.NativeUpdatedVal
166
167
 
167
168
  /**
168
169
  * Subscribes to queue change events.
169
- * Called when tracks are added, removed, reordered, or when track metadata changes.
170
+ * Called when tracks are added, removed, or reordered. An in-place mutation of
171
+ * a queued track's metadata (a favorite toggle) emits `onFavoriteChanged`
172
+ * instead; {@link useQueue} subscribes to both.
170
173
  * @param callback - Called with the updated queue
171
174
  * @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
172
175
  */
@@ -174,11 +177,15 @@ const onQueueChanged = exports.onQueueChanged = _NativeUpdatedValue.NativeUpdate
174
177
 
175
178
  // MARK: - Hooks
176
179
 
180
+ // Module-level so the hook's subscription identity is stable across renders.
181
+ const queueInvalidators = [onQueueChanged, _favorites.onFavoriteChanged];
182
+
177
183
  /**
178
- * Hook that returns the current queue and updates when it changes.
184
+ * Hook that returns the current queue, updating on queue changes AND on
185
+ * in-place mutations of queued tracks (favorite toggles).
179
186
  * @returns The current queue
180
187
  */
181
188
  function useQueue() {
182
- return (0, _useNativeUpdatedValue.useNativeUpdatedValue)(getQueue, onQueueChanged);
189
+ return (0, _useNativeValueRefreshedBy.useNativeValueRefreshedBy)(getQueue, queueInvalidators);
183
190
  }
184
191
  //# sourceMappingURL=queue.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","add","tracks","insertBeforeIndex","addTracks","Array","isArray","length","nativeBrowser","load","track","move","fromIndex","toIndex","remove","indexOrIndexes","removeUpcomingTracks","skip","index","initialPosition","skipToNext","skipToPrevious","setQueue","startIndex","startPosition","getTrack","getQueue","onQueueEnded","exports","NativeUpdatedValue","emitterize","cb","onPlaybackQueueEnded","onQueueChanged","onPlaybackQueueChanged","useQueue","useNativeUpdatedValue"],"sourceRoot":"../../../../src","sources":["features/queue/queue.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeValueRefreshedBy","_favorites","add","tracks","insertBeforeIndex","addTracks","Array","isArray","length","nativeBrowser","load","track","move","fromIndex","toIndex","remove","indexOrIndexes","removeUpcomingTracks","skip","index","initialPosition","skipToNext","skipToPrevious","setQueue","startIndex","startPosition","getTrack","getQueue","onQueueEnded","exports","NativeUpdatedValue","emitterize","cb","onPlaybackQueueEnded","onQueueChanged","onPlaybackQueueChanged","queueInvalidators","onFavoriteChanged","useQueue","useNativeValueRefreshedBy"],"sourceRoot":"../../../../src","sources":["features/queue/queue.ts"],"mappings":"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","ignoreList":[]}
@@ -5,25 +5,28 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.LazyNativeEmitter = void 0;
7
7
  /**
8
- * A lightweight event emitter that lazily bridges native callbacks to multiple JavaScript listeners.
8
+ * The subscription object behind the library's **discrete** events — the
9
+ * remote-control exports (`onRemotePlay`, `onRemoteSeek`, …) and other
10
+ * one-shot signals with no "current value" to cache. Subscribe with
11
+ * {@link addListener}; the returned function unsubscribes. The emitter is
12
+ * not callable itself.
9
13
  *
10
- * The native callback is only assigned when the first listener is added, making the emitter
11
- * creation lightweight with no side effects until actually used.
12
- *
13
- * Use this for optional/rare events like remote controls where most apps won't need to listen.
14
- * For critical state changes (playback, progress, etc.), use NativeEmitter instead to ensure
15
- * no events are missed.
14
+ * "Lazy" is an implementation detail you may notice in timing: the native
15
+ * side only starts delivering the event once the first listener is added.
16
+ * State that always has a current reading uses `NativeUpdatedValue`
17
+ * instead.
16
18
  *
17
19
  * @example
18
20
  * ```typescript
19
- * export const onRemotePlay = LazyNativeEmitter.emitterize<void>(
20
- * (cb) => (nativeBrowser.onRemotePlay = cb)
21
- * )
21
+ * import { onRemotePlay } from 'react-native-audio-browser'
22
22
  *
23
23
  * const unsubscribe = onRemotePlay.addListener(() => console.log('play'))
24
+ * // later:
25
+ * unsubscribe()
24
26
  * ```
25
27
  */
26
28
  class LazyNativeEmitter {
29
+ /** @internal */
27
30
  constructor(setter) {
28
31
  this.setter = setter;
29
32
  }
@@ -37,6 +40,13 @@ class LazyNativeEmitter {
37
40
  });
38
41
  return listeners;
39
42
  }
43
+
44
+ /**
45
+ * Subscribes to the event.
46
+ *
47
+ * @param callback - Invoked with each event
48
+ * @returns A function that removes the listener
49
+ */
40
50
  addListener(callback) {
41
51
  const listeners = this.getListeners();
42
52
  listeners.add(callback);
@@ -49,6 +59,7 @@ class LazyNativeEmitter {
49
59
  * @param setter - Function that sets the native callback property
50
60
  * @returns The emitter instance — subscribe with `addListener`, which returns
51
61
  * an unsubscribe function
62
+ * @internal
52
63
  */
53
64
  static emitterize(setter) {
54
65
  return new LazyNativeEmitter(setter);
@@ -1 +1 @@
1
- {"version":3,"names":["LazyNativeEmitter","constructor","setter","getListeners","listeners","Set","data","listener","addListener","callback","add","delete","emitterize","exports"],"sourceRoot":"../../../src","sources":["utils/LazyNativeEmitter.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,iBAAiB,CAAI;EAIhCC,WAAWA,CAACC,MAA6C,EAAE;IACzD,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEQC,YAAYA,CAAA,EAAqB;IACvC,IAAI,IAAI,CAACC,SAAS,EAAE,OAAO,IAAI,CAACA,SAAS;IACzC,MAAMA,SAAS,GAAI,IAAI,CAACA,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAE;IAC9C,IAAI,CAACH,MAAM,CAAEI,IAAO,IAAK;MACvB,KAAK,MAAMC,QAAQ,IAAIH,SAAS,EAAE;QAChCG,QAAQ,CAACD,IAAI,CAAC;MAChB;IACF,CAAC,CAAC;IACF,OAAOF,SAAS;EAClB;EAEAI,WAAWA,CAACC,QAAqB,EAAc;IAC7C,MAAML,SAAS,GAAG,IAAI,CAACD,YAAY,CAAC,CAAC;IACrCC,SAAS,CAACM,GAAG,CAACD,QAAQ,CAAC;IACvB,OAAO,MAAML,SAAS,CAACO,MAAM,CAACF,QAAQ,CAAC;EACzC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOG,UAAUA,CACfV,MAA6C,EACvB;IACtB,OAAO,IAAIF,iBAAiB,CAACE,MAAM,CAAC;EACtC;AACF;AAACW,OAAA,CAAAb,iBAAA,GAAAA,iBAAA","ignoreList":[]}
1
+ {"version":3,"names":["LazyNativeEmitter","constructor","setter","getListeners","listeners","Set","data","listener","addListener","callback","add","delete","emitterize","exports"],"sourceRoot":"../../../src","sources":["utils/LazyNativeEmitter.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,iBAAiB,CAAI;EAIhC;EACAC,WAAWA,CAACC,MAA6C,EAAE;IACzD,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEQC,YAAYA,CAAA,EAAqB;IACvC,IAAI,IAAI,CAACC,SAAS,EAAE,OAAO,IAAI,CAACA,SAAS;IACzC,MAAMA,SAAS,GAAI,IAAI,CAACA,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAE;IAC9C,IAAI,CAACH,MAAM,CAAEI,IAAO,IAAK;MACvB,KAAK,MAAMC,QAAQ,IAAIH,SAAS,EAAE;QAChCG,QAAQ,CAACD,IAAI,CAAC;MAChB;IACF,CAAC,CAAC;IACF,OAAOF,SAAS;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEI,WAAWA,CAACC,QAAqB,EAAc;IAC7C,MAAML,SAAS,GAAG,IAAI,CAACD,YAAY,CAAC,CAAC;IACrCC,SAAS,CAACM,GAAG,CAACD,QAAQ,CAAC;IACvB,OAAO,MAAML,SAAS,CAACO,MAAM,CAACF,QAAQ,CAAC;EACzC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOG,UAAUA,CACfV,MAA6C,EACvB;IACtB,OAAO,IAAIF,iBAAiB,CAACE,MAAM,CAAC;EACtC;AACF;AAACW,OAAA,CAAAb,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -5,29 +5,39 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.NativeUpdatedValue = void 0;
7
7
  /**
8
- * Bridges native value changes to JavaScript, storing the latest value for immediate access.
8
+ * The subscription object behind the library's **state** events — every
9
+ * `on<Thing>Changed`-style export (`onPlaybackChanged`, `onQueueChanged`, …)
10
+ * is one of these. Subscribe with {@link addListener}; the returned function
11
+ * unsubscribes. The emitter is not callable itself.
9
12
  *
10
- * Subscribes to native changes immediately at module load to ensure no updates are missed.
11
- * The `lastValue` property caches the most recent value, allowing hooks to read the current
12
- * state synchronously without calling a separate getter function.
13
- *
14
- * Use this for state-based values that have a "current value" (playback state, options, progress).
15
- * For discrete events without a current value (remote controls), use LazyNativeEmitter instead.
13
+ * It tracks a value that always has a *current* reading (playback state,
14
+ * progress, options): {@link lastValue} caches the most recent one so hooks —
15
+ * and you — can read it synchronously without a getter round-trip. Discrete
16
+ * events with no current value (remote-control presses) use
17
+ * `LazyNativeEmitter` instead.
16
18
  *
17
19
  * @example
18
20
  * ```typescript
19
- * export const onPlaybackChanged = NativeUpdatedValue.emitterize<Playback>(
20
- * (cb) => (nativeBrowser.onPlaybackChanged = cb)
21
- * )
21
+ * import { onPlaybackChanged } from 'react-native-audio-browser'
22
22
  *
23
- * export function usePlayback(): Playback {
24
- * return useUpdatedNativeValue(getPlayback, onPlaybackChanged)
25
- * }
23
+ * const unsubscribe = onPlaybackChanged.addListener((p) => {
24
+ * console.log(p.state)
25
+ * })
26
+ * // later:
27
+ * unsubscribe()
26
28
  * ```
27
29
  */
28
30
  class NativeUpdatedValue {
29
31
  listeners = new Set();
32
+
33
+ /**
34
+ * The most recent value delivered by native, or `undefined` before the
35
+ * first update. Subscription starts at module load, so this is safe to
36
+ * read synchronously at any time.
37
+ */
30
38
  lastValue = undefined;
39
+
40
+ /** @internal */
31
41
  constructor(setter) {
32
42
  // Install native callback immediately at module load
33
43
  setter(data => {
@@ -37,6 +47,13 @@ class NativeUpdatedValue {
37
47
  }
38
48
  });
39
49
  }
50
+
51
+ /**
52
+ * Subscribes to value changes.
53
+ *
54
+ * @param callback - Invoked with each new value
55
+ * @returns A function that removes the listener
56
+ */
40
57
  addListener(callback) {
41
58
  this.listeners.add(callback);
42
59
  return () => this.listeners.delete(callback);
@@ -47,6 +64,7 @@ class NativeUpdatedValue {
47
64
  *
48
65
  * @param setter - Function that sets the native callback property
49
66
  * @returns The subscription instance with lastValue and addListener
67
+ * @internal
50
68
  */
51
69
  static emitterize(setter) {
52
70
  return new NativeUpdatedValue(setter);
@@ -1 +1 @@
1
- {"version":3,"names":["NativeUpdatedValue","listeners","Set","lastValue","undefined","constructor","setter","data","listener","addListener","callback","add","delete","emitterize","exports"],"sourceRoot":"../../../src","sources":["utils/NativeUpdatedValue.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,kBAAkB,CAAI;EACzBC,SAAS,GAAG,IAAIC,GAAG,CAAc,CAAC;EAC1CC,SAAS,GAAkBC,SAAS;EAEpCC,WAAWA,CAACC,MAA6C,EAAE;IACzD;IACAA,MAAM,CAAEC,IAAO,IAAK;MAClB,IAAI,CAACJ,SAAS,GAAGI,IAAI;MACrB,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAACP,SAAS,EAAE;QACrCO,QAAQ,CAACD,IAAI,CAAC;MAChB;IACF,CAAC,CAAC;EACJ;EAEAE,WAAWA,CAACC,QAAqB,EAAc;IAC7C,IAAI,CAACT,SAAS,CAACU,GAAG,CAACD,QAAQ,CAAC;IAC5B,OAAO,MAAM,IAAI,CAACT,SAAS,CAACW,MAAM,CAACF,QAAQ,CAAC;EAC9C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOG,UAAUA,CACfP,MAA6C,EACtB;IACvB,OAAO,IAAIN,kBAAkB,CAACM,MAAM,CAAC;EACvC;AACF;AAACQ,OAAA,CAAAd,kBAAA,GAAAA,kBAAA","ignoreList":[]}
1
+ {"version":3,"names":["NativeUpdatedValue","listeners","Set","lastValue","undefined","constructor","setter","data","listener","addListener","callback","add","delete","emitterize","exports"],"sourceRoot":"../../../src","sources":["utils/NativeUpdatedValue.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,kBAAkB,CAAI;EACzBC,SAAS,GAAG,IAAIC,GAAG,CAAc,CAAC;;EAE1C;AACF;AACA;AACA;AACA;EACEC,SAAS,GAAkBC,SAAS;;EAEpC;EACAC,WAAWA,CAACC,MAA6C,EAAE;IACzD;IACAA,MAAM,CAAEC,IAAO,IAAK;MAClB,IAAI,CAACJ,SAAS,GAAGI,IAAI;MACrB,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAACP,SAAS,EAAE;QACrCO,QAAQ,CAACD,IAAI,CAAC;MAChB;IACF,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEE,WAAWA,CAACC,QAAqB,EAAc;IAC7C,IAAI,CAACT,SAAS,CAACU,GAAG,CAACD,QAAQ,CAAC;IAC5B,OAAO,MAAM,IAAI,CAACT,SAAS,CAACW,MAAM,CAACF,QAAQ,CAAC;EAC9C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOG,UAAUA,CACfP,MAA6C,EACtB;IACvB,OAAO,IAAIN,kBAAkB,CAACM,MAAM,CAAC;EACvC;AACF;AAACQ,OAAA,CAAAd,kBAAA,GAAAA,kBAAA","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTrackIdentity = getTrackIdentity;
7
+ /**
8
+ * A track's identity: its opaque `id` when present (non-blank), falling back
9
+ * to the playable `src`. Two tracks refer to the same item exactly when their
10
+ * identities are equal. Browsable-only tracks (neither `id` nor `src`) have
11
+ * no identity — they are addressed by their `path` instead.
12
+ *
13
+ * This is the same comparison the library uses everywhere it matches tracks:
14
+ * favorites (`setFavorites`), the CarPlay / Android Auto "now playing" row
15
+ * indicator, and queue expansion and in-place skipping when a track is
16
+ * selected from browse content. Use it for your own bookkeeping — keying a
17
+ * favorites collection, deduplicating history — so your comparisons agree
18
+ * with the library's.
19
+ */
20
+ // Decision record: ADR 0008 (docs/adr/).
21
+ function getTrackIdentity(track) {
22
+ return track.id?.length ? track.id : track.src;
23
+ }
24
+ //# sourceMappingURL=getTrackIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getTrackIdentity","track","id","length","src"],"sourceRoot":"../../../src","sources":["utils/getTrackIdentity.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,gBAAgBA,CAACC,KAGhC,EAAsB;EACrB,OAAOA,KAAK,CAACC,EAAE,EAAEC,MAAM,GAAGF,KAAK,CAACC,EAAE,GAAGD,KAAK,CAACG,GAAG;AAChD","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useNativeValueRefreshedBy = useNativeValueRefreshedBy;
7
+ var _react = require("react");
8
+ /**
9
+ * Hook for a native-fetched value that must stay fresh across SEVERAL event
10
+ * sources — e.g. the active track, which changes on a queue transition
11
+ * (`onActiveTrackChanged`) but is also mutated in place by a favorite toggle
12
+ * (`onFavoriteChanged`).
13
+ *
14
+ * Unlike {@link useNativeUpdatedValue}, this never reads a cached event
15
+ * payload: every trigger re-reads `getter()`, and the mount effect re-reads
16
+ * once after the subscriptions attach (so an event firing between render and
17
+ * effect cannot be missed). The getters are cheap synchronous Nitro calls.
18
+ *
19
+ * @param getter - Synchronous native getter for the current value
20
+ * @param emitters - Event sources that invalidate the value (a stable,
21
+ * module-level array — identity changes resubscribe)
22
+ */
23
+ function useNativeValueRefreshedBy(getter, emitters) {
24
+ const [value, setValue] = (0, _react.useState)(getter);
25
+ (0, _react.useEffect)(() => {
26
+ setValue(getter());
27
+ const cleanups = emitters.map(emitter => emitter.addListener(() => setValue(getter())));
28
+ return () => cleanups.forEach(cleanup => cleanup());
29
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
+ }, [getter, ...emitters]);
31
+ return value;
32
+ }
33
+ //# sourceMappingURL=useNativeValueRefreshedBy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","useNativeValueRefreshedBy","getter","emitters","value","setValue","useState","useEffect","cleanups","map","emitter","addListener","forEach","cleanup"],"sourceRoot":"../../../src","sources":["utils/useNativeValueRefreshedBy.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,yBAAyBA,CACvCC,MAAe,EACfC,QAAiC,EAC9B;EACH,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAACJ,MAAM,CAAC;EAE1C,IAAAK,gBAAS,EAAC,MAAM;IACdF,QAAQ,CAACH,MAAM,CAAC,CAAC,CAAC;IAClB,MAAMM,QAAQ,GAAGL,QAAQ,CAACM,GAAG,CAAEC,OAAO,IACpCA,OAAO,CAACC,WAAW,CAAC,MAAMN,QAAQ,CAACH,MAAM,CAAC,CAAC,CAAC,CAC9C,CAAC;IACD,OAAO,MAAMM,QAAQ,CAACI,OAAO,CAAEC,OAAO,IAAKA,OAAO,CAAC,CAAC,CAAC;IACrD;EACF,CAAC,EAAE,CAACX,MAAM,EAAE,GAAGC,QAAQ,CAAC,CAAC;EAEzB,OAAOC,KAAK;AACd","ignoreList":[]}