react-native-audio-browser 0.2.0-next.10 → 0.2.0-next.12

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 (345) hide show
  1. package/README.md +4 -4
  2. package/android/build.gradle +6 -5
  3. package/android/gradle.properties +1 -1
  4. package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +110 -25
  5. package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +254 -188
  6. package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +23 -3
  7. package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +77 -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 +49 -0
  10. package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +9 -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/player/MediaSessionCallback.kt +120 -67
  14. package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +21 -24
  15. package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +93 -73
  16. package/android/src/main/java/com/audiobrowser/player/Player.kt +48 -30
  17. package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +2 -15
  18. package/android/src/main/java/com/audiobrowser/tls/AiaCertChaser.kt +46 -5
  19. package/android/src/main/java/com/audiobrowser/tls/AiaChasingExtendedTrustManager.kt +86 -27
  20. package/android/src/main/java/com/audiobrowser/tls/AiaChasingTrustManager.kt +58 -14
  21. package/android/src/main/java/com/audiobrowser/tls/AiaTls.kt +20 -6
  22. package/android/src/main/java/com/audiobrowser/tls/CachingCertificateFetcher.kt +249 -86
  23. package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +44 -40
  24. package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +28 -23
  25. package/android/src/main/java/com/audiobrowser/util/StyleWire.kt +35 -0
  26. package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +45 -53
  27. package/android/src/test/java/com/audiobrowser/TestFixtures.kt +69 -30
  28. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerFavoritesTest.kt +153 -0
  29. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerLayerResolutionTest.kt +6 -0
  30. package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +345 -8
  31. package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +38 -0
  32. package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +1 -1
  33. package/android/src/test/java/com/audiobrowser/browser/JsonStyleTest.kt +91 -0
  34. package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +128 -53
  35. package/android/src/test/java/com/audiobrowser/browser/StyleResolverTest.kt +87 -0
  36. package/android/src/test/java/com/audiobrowser/extension/TappedTrackTest.kt +43 -0
  37. package/android/src/test/java/com/audiobrowser/extension/TrackIdentityTest.kt +41 -0
  38. package/android/src/test/java/com/audiobrowser/player/CapabilityControlsTest.kt +1 -2
  39. package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +42 -2
  40. package/android/src/test/java/com/audiobrowser/player/PlaybackStateStoreTrackJsonTest.kt +55 -0
  41. package/android/src/test/java/com/audiobrowser/tls/AiaCertChaserTest.kt +152 -8
  42. package/android/src/test/java/com/audiobrowser/tls/AiaChasingTrustManagerTest.kt +218 -10
  43. package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherCallSiteTest.kt +322 -0
  44. package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +41 -16
  45. package/android/src/test/java/com/audiobrowser/util/MediaExtrasBuilderTest.kt +161 -0
  46. package/android/src/test/java/com/audiobrowser/util/TrackFactoryMediaIdTest.kt +7 -7
  47. package/ios/Browser/BrowserConfig.swift +102 -5
  48. package/ios/Browser/BrowserManager+URLResolution.swift +18 -14
  49. package/ios/Browser/BrowserManager.swift +131 -143
  50. package/ios/Browser/BrowserPathHelper.swift +44 -44
  51. package/ios/Browser/JsonModels.swift +187 -106
  52. package/ios/Browser/SearchDrillIn.swift +6 -6
  53. package/ios/Browser/SectionPresentation.swift +34 -0
  54. package/ios/Browser/SectionScope.swift +58 -24
  55. package/ios/Browser/StyleResolver.swift +47 -0
  56. package/ios/Browser/TabBarEntries.swift +2 -2
  57. package/ios/Browser/TrackIdTemplate.swift +37 -0
  58. package/ios/CarPlay/CarPlayArtworkResolver.swift +8 -7
  59. package/ios/CarPlay/CarPlayController.swift +105 -67
  60. package/ios/CarPlay/CarPlayImageLoader.swift +38 -18
  61. package/ios/CarPlay/CarPlayListItemFactory.swift +217 -84
  62. package/ios/CarPlay/CarPlayNowPlayingManager.swift +15 -12
  63. package/ios/Extension/Capability+RemoteCommand.swift +1 -1
  64. package/ios/Extension/PlayerCapabilities+Favorite.swift +1 -15
  65. package/ios/Extension/ResolvedTrack+Copying.swift +11 -15
  66. package/ios/Extension/Section+Copying.swift +31 -0
  67. package/ios/Extension/Track+Copying.swift +6 -12
  68. package/ios/Extension/Track+Identity.swift +18 -0
  69. package/ios/HybridAudioBrowser.swift +113 -35
  70. package/ios/Model/NitroTypeStubs.swift +64 -23
  71. package/ios/Model/PlayerUpdateOptions.swift +7 -0
  72. package/ios/Player/NowPlayingUpdater.swift +1 -1
  73. package/ios/Player/PlaybackCoordinator.swift +2 -2
  74. package/ios/Player/RetryManager.swift +4 -3
  75. package/ios/Tests/BrowserPathHelperTests.swift +50 -20
  76. package/ios/Tests/CarPlayArtworkResolverTests.swift +24 -41
  77. package/ios/Tests/JsonModelsTests.swift +75 -1
  78. package/ios/Tests/PlaybackStateStoreTests.swift +4 -3
  79. package/ios/Tests/QueueManagerTests.swift +4 -4
  80. package/ios/Tests/ResolvedTrackCopyingTests.swift +37 -35
  81. package/ios/Tests/SearchDrillInTests.swift +16 -16
  82. package/ios/Tests/SectionPresentationTests.swift +61 -0
  83. package/ios/Tests/SectionScopeTests.swift +87 -55
  84. package/ios/Tests/StyleResolverTests.swift +67 -0
  85. package/ios/Tests/TabBarEntriesTests.swift +18 -18
  86. package/ios/Tests/TrackIdTemplateTests.swift +67 -0
  87. package/ios/Tests/TrackIdentityTests.swift +20 -0
  88. package/ios/Tests/TrackSelectorTests.swift +168 -33
  89. package/ios/TrackSelector.swift +45 -30
  90. package/ios/Util/ArtworkImageFetcher.swift +16 -1
  91. package/lib/commonjs/AudioBrowser.js +11 -0
  92. package/lib/commonjs/AudioBrowser.js.map +1 -1
  93. package/lib/commonjs/features/browser-config.js +11 -8
  94. package/lib/commonjs/features/browser-config.js.map +1 -1
  95. package/lib/commonjs/features/browser.js +2 -2
  96. package/lib/commonjs/features/favorites.js +13 -10
  97. package/lib/commonjs/features/favorites.js.map +1 -1
  98. package/lib/commonjs/features/playback/controls.js +4 -2
  99. package/lib/commonjs/features/playback/controls.js.map +1 -1
  100. package/lib/commonjs/features/playback/state.js +2 -3
  101. package/lib/commonjs/features/playback/state.js.map +1 -1
  102. package/lib/commonjs/features/player/options.js.map +1 -1
  103. package/lib/commonjs/features/player/setup.js +3 -1
  104. package/lib/commonjs/features/player/setup.js.map +1 -1
  105. package/lib/commonjs/features/player/validateOptions.js +2 -0
  106. package/lib/commonjs/features/player/validateOptions.js.map +1 -1
  107. package/lib/commonjs/features/queue/activeTrack.js +14 -3
  108. package/lib/commonjs/features/queue/activeTrack.js.map +1 -1
  109. package/lib/commonjs/features/queue/queue.js +11 -4
  110. package/lib/commonjs/features/queue/queue.js.map +1 -1
  111. package/lib/commonjs/utils/LazyNativeEmitter.js +21 -10
  112. package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
  113. package/lib/commonjs/utils/NativeUpdatedValue.js +31 -13
  114. package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -1
  115. package/lib/commonjs/utils/getTrackIdentity.js +24 -0
  116. package/lib/commonjs/utils/getTrackIdentity.js.map +1 -0
  117. package/lib/commonjs/utils/useNativeValueRefreshedBy.js +33 -0
  118. package/lib/commonjs/utils/useNativeValueRefreshedBy.js.map +1 -0
  119. package/lib/commonjs/web/NativeAudioBrowser.js +32 -24
  120. package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
  121. package/lib/commonjs/web/browser/BrowserManager.js +144 -87
  122. package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
  123. package/lib/commonjs/web/browser/FavoriteManager.js +30 -21
  124. package/lib/commonjs/web/browser/FavoriteManager.js.map +1 -1
  125. package/lib/commonjs/web/browser/assertBrowsePageShape.js +2 -2
  126. package/lib/commonjs/web/browser/assertBrowsePageShape.js.map +1 -1
  127. package/lib/commonjs/web/browser/classifyTrackNavigation.js +9 -9
  128. package/lib/commonjs/web/browser/classifyTrackNavigation.js.map +1 -1
  129. package/lib/commonjs/web/browser/sections.js +89 -0
  130. package/lib/commonjs/web/browser/sections.js.map +1 -0
  131. package/lib/commonjs/web/player/NowPlayingManager.js +4 -3
  132. package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
  133. package/lib/commonjs/web/util/BrowserPathHelper.js +56 -11
  134. package/lib/commonjs/web/util/BrowserPathHelper.js.map +1 -1
  135. package/lib/module/AudioBrowser.js +1 -0
  136. package/lib/module/AudioBrowser.js.map +1 -1
  137. package/lib/module/features/browser-config.js +11 -8
  138. package/lib/module/features/browser-config.js.map +1 -1
  139. package/lib/module/features/browser.js +2 -2
  140. package/lib/module/features/favorites.js +13 -10
  141. package/lib/module/features/favorites.js.map +1 -1
  142. package/lib/module/features/playback/controls.js +4 -2
  143. package/lib/module/features/playback/controls.js.map +1 -1
  144. package/lib/module/features/playback/state.js +2 -3
  145. package/lib/module/features/playback/state.js.map +1 -1
  146. package/lib/module/features/player/options.js.map +1 -1
  147. package/lib/module/features/player/setup.js +3 -1
  148. package/lib/module/features/player/setup.js.map +1 -1
  149. package/lib/module/features/player/validateOptions.js +2 -0
  150. package/lib/module/features/player/validateOptions.js.map +1 -1
  151. package/lib/module/features/queue/activeTrack.js +14 -3
  152. package/lib/module/features/queue/activeTrack.js.map +1 -1
  153. package/lib/module/features/queue/queue.js +11 -4
  154. package/lib/module/features/queue/queue.js.map +1 -1
  155. package/lib/module/utils/LazyNativeEmitter.js +21 -10
  156. package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
  157. package/lib/module/utils/NativeUpdatedValue.js +31 -13
  158. package/lib/module/utils/NativeUpdatedValue.js.map +1 -1
  159. package/lib/module/utils/getTrackIdentity.js +20 -0
  160. package/lib/module/utils/getTrackIdentity.js.map +1 -0
  161. package/lib/module/utils/useNativeValueRefreshedBy.js +29 -0
  162. package/lib/module/utils/useNativeValueRefreshedBy.js.map +1 -0
  163. package/lib/module/web/NativeAudioBrowser.js +32 -24
  164. package/lib/module/web/NativeAudioBrowser.js.map +1 -1
  165. package/lib/module/web/browser/BrowserManager.js +144 -87
  166. package/lib/module/web/browser/BrowserManager.js.map +1 -1
  167. package/lib/module/web/browser/FavoriteManager.js +31 -21
  168. package/lib/module/web/browser/FavoriteManager.js.map +1 -1
  169. package/lib/module/web/browser/assertBrowsePageShape.js +2 -2
  170. package/lib/module/web/browser/assertBrowsePageShape.js.map +1 -1
  171. package/lib/module/web/browser/classifyTrackNavigation.js +9 -9
  172. package/lib/module/web/browser/classifyTrackNavigation.js.map +1 -1
  173. package/lib/module/web/browser/sections.js +83 -0
  174. package/lib/module/web/browser/sections.js.map +1 -0
  175. package/lib/module/web/player/NowPlayingManager.js +4 -3
  176. package/lib/module/web/player/NowPlayingManager.js.map +1 -1
  177. package/lib/module/web/util/BrowserPathHelper.js +56 -11
  178. package/lib/module/web/util/BrowserPathHelper.js.map +1 -1
  179. package/lib/typescript/src/AudioBrowser.d.ts +1 -0
  180. package/lib/typescript/src/AudioBrowser.d.ts.map +1 -1
  181. package/lib/typescript/src/features/browser-config.d.ts.map +1 -1
  182. package/lib/typescript/src/features/browser.d.ts +2 -2
  183. package/lib/typescript/src/features/favorites.d.ts +13 -10
  184. package/lib/typescript/src/features/favorites.d.ts.map +1 -1
  185. package/lib/typescript/src/features/playback/controls.d.ts +4 -2
  186. package/lib/typescript/src/features/playback/controls.d.ts.map +1 -1
  187. package/lib/typescript/src/features/playback/state.d.ts +2 -3
  188. package/lib/typescript/src/features/playback/state.d.ts.map +1 -1
  189. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts +1 -1
  190. package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts.map +1 -1
  191. package/lib/typescript/src/features/player/options.d.ts +21 -19
  192. package/lib/typescript/src/features/player/options.d.ts.map +1 -1
  193. package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
  194. package/lib/typescript/src/features/player/validateOptions.d.ts +1 -8
  195. package/lib/typescript/src/features/player/validateOptions.d.ts.map +1 -1
  196. package/lib/typescript/src/features/queue/activeTrack.d.ts +8 -1
  197. package/lib/typescript/src/features/queue/activeTrack.d.ts.map +1 -1
  198. package/lib/typescript/src/features/queue/queue.d.ts +5 -2
  199. package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
  200. package/lib/typescript/src/types/browser-native.d.ts +2 -2
  201. package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
  202. package/lib/typescript/src/types/browser-nodes.d.ts +260 -127
  203. package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
  204. package/lib/typescript/src/types/browser.d.ts +33 -53
  205. package/lib/typescript/src/types/browser.d.ts.map +1 -1
  206. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +16 -17
  207. package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
  208. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +24 -19
  209. package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -1
  210. package/lib/typescript/src/utils/getTrackIdentity.d.ts +18 -0
  211. package/lib/typescript/src/utils/getTrackIdentity.d.ts.map +1 -0
  212. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts +21 -0
  213. package/lib/typescript/src/utils/useNativeValueRefreshedBy.d.ts.map +1 -0
  214. package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +0 -1
  215. package/nitrogen/generated/android/c++/{JFavoritesMatchMode.hpp → JArtworkRendering.hpp} +15 -15
  216. package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +4 -3
  217. package/nitrogen/generated/android/c++/JBrowseResult.hpp +10 -4
  218. package/nitrogen/generated/android/c++/JCarPlayPlayingIndicatorLocation.hpp +58 -0
  219. package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +4 -3
  220. package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +4 -3
  221. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +4 -3
  222. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +4 -3
  223. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +4 -3
  224. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +4 -3
  225. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +4 -2
  226. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +4 -2
  227. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.hpp +10 -4
  228. package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +4 -3
  229. package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +2 -5
  230. package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +4 -3
  231. package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +9 -3
  232. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +4 -2
  233. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +21 -14
  234. package/nitrogen/generated/android/c++/JIOSOptions.hpp +9 -3
  235. package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +4 -3
  236. package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +16 -10
  237. package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +8 -2
  238. package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +6 -7
  239. package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +2 -5
  240. package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +9 -3
  241. package/nitrogen/generated/android/c++/JOptions.hpp +2 -5
  242. package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +4 -3
  243. package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +5 -11
  244. package/nitrogen/generated/android/c++/JResolvedTrack.hpp +49 -51
  245. package/nitrogen/generated/android/c++/JSection.hpp +114 -0
  246. package/nitrogen/generated/android/c++/JSectionStyle.hpp +69 -0
  247. package/nitrogen/generated/android/c++/JStyleDisplay.hpp +58 -0
  248. package/nitrogen/generated/android/c++/JTrack.hpp +19 -48
  249. package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +4 -2
  250. package/nitrogen/generated/android/c++/JTrackStyle.hpp +25 -18
  251. package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +10 -4
  252. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoritesMatchMode.kt → ArtworkRendering.kt} +5 -5
  253. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayPlayingIndicatorLocation.kt +23 -0
  254. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSOptions.kt +6 -3
  255. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +5 -5
  256. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroIOSUpdateOptions.kt +6 -3
  257. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
  258. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +12 -18
  259. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Section.kt +50 -0
  260. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{FavoriteConfig.kt → SectionStyle.kt} +12 -6
  261. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StyleDisplay.kt +23 -0
  262. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +6 -15
  263. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +23 -5
  264. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +104 -82
  265. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +16 -10
  266. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +16 -10
  267. package/nitrogen/generated/ios/swift/ArtworkRendering.swift +40 -0
  268. package/nitrogen/generated/ios/swift/CarPlayPlayingIndicatorLocation.swift +40 -0
  269. package/nitrogen/generated/ios/swift/IOSOptions.swift +7 -2
  270. package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +5 -5
  271. package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +12 -1
  272. package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +8 -27
  273. package/nitrogen/generated/ios/swift/ResolvedTrack.swift +54 -83
  274. package/nitrogen/generated/ios/swift/Section.swift +100 -0
  275. package/nitrogen/generated/ios/swift/SectionStyle.swift +64 -0
  276. package/nitrogen/generated/ios/swift/StyleDisplay.swift +40 -0
  277. package/nitrogen/generated/ios/swift/Track.swift +20 -73
  278. package/nitrogen/generated/ios/swift/TrackStyle.swift +28 -22
  279. package/nitrogen/generated/shared/c++/{FavoritesMatchMode.hpp → ArtworkRendering.hpp} +17 -17
  280. package/nitrogen/generated/shared/c++/CarPlayPlayingIndicatorLocation.hpp +76 -0
  281. package/nitrogen/generated/shared/c++/IOSOptions.hpp +9 -2
  282. package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +6 -6
  283. package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +9 -2
  284. package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +6 -9
  285. package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +30 -38
  286. package/nitrogen/generated/shared/c++/Section.hpp +106 -0
  287. package/nitrogen/generated/shared/c++/SectionStyle.hpp +96 -0
  288. package/nitrogen/generated/shared/c++/StyleDisplay.hpp +76 -0
  289. package/nitrogen/generated/shared/c++/Track.hpp +15 -31
  290. package/nitrogen/generated/shared/c++/TrackStyle.hpp +50 -34
  291. package/package.json +3 -2
  292. package/src/AudioBrowser.ts +1 -0
  293. package/src/features/browser-config.test.ts +21 -6
  294. package/src/features/browser-config.ts +11 -8
  295. package/src/features/browser.test.ts +1 -1
  296. package/src/features/browser.ts +2 -2
  297. package/src/features/favorites.ts +13 -10
  298. package/src/features/hook-wiring.test.ts +63 -15
  299. package/src/features/playback/controls.ts +4 -2
  300. package/src/features/playback/state.ts +2 -3
  301. package/src/features/playback/trackPlaybackTime.ts +1 -1
  302. package/src/features/player/options.ts +27 -19
  303. package/src/features/player/setup.test.ts +12 -3
  304. package/src/features/player/setup.ts +3 -1
  305. package/src/features/player/validateOptions.ts +2 -0
  306. package/src/features/queue/activeTrack.ts +14 -3
  307. package/src/features/queue/queue.ts +11 -4
  308. package/src/nitro-stub-drift.test.ts +277 -0
  309. package/src/public-surface.test.ts +40 -0
  310. package/src/specs/audio-browser.nitro.ts +4 -3
  311. package/src/style-resolution.test.ts +139 -0
  312. package/src/types/browser-native.ts +2 -2
  313. package/src/types/browser-nodes.ts +268 -136
  314. package/src/types/browser.ts +34 -55
  315. package/src/utils/LazyNativeEmitter.ts +20 -10
  316. package/src/utils/NativeUpdatedValue.ts +29 -13
  317. package/src/utils/getTrackIdentity.ts +20 -0
  318. package/src/utils/useNativeValueRefreshedBy.ts +38 -0
  319. package/src/web/NativeAudioBrowser.ts +37 -22
  320. package/src/web/browser/BrowserManager.ts +176 -95
  321. package/src/web/browser/FavoriteManager.test.ts +84 -0
  322. package/src/web/browser/FavoriteManager.ts +28 -23
  323. package/src/web/browser/assertBrowsePageShape.test.ts +1 -1
  324. package/src/web/browser/assertBrowsePageShape.ts +5 -3
  325. package/src/web/browser/classifyTrackNavigation.test.ts +10 -8
  326. package/src/web/browser/classifyTrackNavigation.ts +9 -9
  327. package/src/web/browser/parseSearchResponse.test.ts +8 -2
  328. package/src/web/browser/sections.test.ts +91 -0
  329. package/src/web/browser/sections.ts +72 -0
  330. package/src/web/player/NowPlayingManager.ts +4 -3
  331. package/src/web/util/BrowserPathHelper.test.ts +52 -0
  332. package/src/web/util/BrowserPathHelper.ts +61 -13
  333. package/ios/CarPlay/ImageRowItem+CarPlay.swift +0 -19
  334. package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +0 -58
  335. package/nitrogen/generated/android/c++/JImageRowItem.hpp +0 -105
  336. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp +0 -26
  337. package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.hpp +0 -71
  338. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +0 -68
  339. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_FavoriteConfig.kt +0 -53
  340. package/nitrogen/generated/ios/swift/FavoriteConfig.swift +0 -29
  341. package/nitrogen/generated/ios/swift/FavoritesMatchMode.swift +0 -40
  342. package/nitrogen/generated/ios/swift/ImageRowItem.swift +0 -195
  343. package/nitrogen/generated/ios/swift/Variant_Bool_FavoriteConfig.swift +0 -18
  344. package/nitrogen/generated/shared/c++/FavoriteConfig.hpp +0 -84
  345. package/nitrogen/generated/shared/c++/ImageRowItem.hpp +0 -129
@@ -13,9 +13,10 @@ export interface TrackLoadEvent {
13
13
  }
14
14
  /**
15
15
  * Callback for handling track load events.
16
- * When set on BrowserConfiguration, navigateTrack() will call this handler
17
- * instead of auto-loading/playing the track. The native side awaits completion
18
- * before proceeding (e.g., showing Now Playing in CarPlay).
16
+ * When set on BrowserConfiguration, loading a playable track — a browse-row
17
+ * tap or a `navigate(track)` call — invokes this handler instead of the
18
+ * library auto-loading/playing it. The native side awaits the returned
19
+ * promise before proceeding (e.g., showing Now Playing in CarPlay).
19
20
  */
20
21
  export type HandleTrackLoadCallback = (event: TrackLoadEvent) => Promise<void>;
21
22
  export type BrowserSourceCallbackParam = {
@@ -142,7 +143,7 @@ export interface RequestConfig {
142
143
  method?: HttpMethod;
143
144
  /**
144
145
  * The request path.
145
- * - For browser requests, this is the track's `url`
146
+ * - For browser requests, this is the track's `path`
146
147
  * - For media requests, this is the track's `src` value
147
148
  * - For artwork requests, this is the track's `artwork` URL
148
149
  */
@@ -293,7 +294,7 @@ export type RequestConfigResolver = () => TransformableRequestConfig | Promise<T
293
294
  /**
294
295
  * Configuration for artwork image requests
295
296
  *
296
- * ## Configuration Hierarchy
297
+ * ### Configuration Hierarchy
297
298
  *
298
299
  * When a request is made, configs are merged in this order (later overrides earlier):
299
300
  * 1. `request` (base config) - shared settings like user agent, common headers
@@ -302,7 +303,7 @@ export type RequestConfigResolver = () => TransformableRequestConfig | Promise<T
302
303
  * 4. `imageQueryParams` - automatic size query param injection (if configured)
303
304
  * 5. `transform(request, context)` result - final modifications (if provided)
304
305
  *
305
- * ## Usage Patterns
306
+ * ### Usage Patterns
306
307
  *
307
308
  * **Simple CDN configuration:**
308
309
  * ```typescript
@@ -366,7 +367,7 @@ export interface ImageQueryParams {
366
367
  * Used for both `media` (audio streaming) and `artwork` (image loading) configuration
367
368
  * in BrowserConfiguration.
368
369
  *
369
- * ## Configuration Hierarchy
370
+ * ### Configuration Hierarchy
370
371
  *
371
372
  * When a request is made, configs are merged in this order (later overrides earlier):
372
373
  * 1. `request` (base config) - shared settings like user agent, common headers
@@ -374,7 +375,7 @@ export interface ImageQueryParams {
374
375
  * 3. `resolve(track)` result - per-track overrides (if provided)
375
376
  * 4. `transform(request)` result - final modifications (if provided)
376
377
  *
377
- * ## Usage Patterns
378
+ * ### Usage Patterns
378
379
  *
379
380
  * **Simple CDN configuration:**
380
381
  * ```typescript
@@ -526,9 +527,9 @@ export interface ArtworkRequestConfig extends RequestConfig {
526
527
  *
527
528
  * **Response shape (HTTP / `TransformableRequestConfig`):** the endpoint must
528
529
  * return a single **page object** — a {@link ResolvedTrack}
529
- * (`{ title, url?, children: Track[] }`). The `children` array holds the rows
530
+ * (`{ title, path?, children: Track[] }`). The `children` array holds the rows
530
531
  * shown for the container; each child is a playable leaf (`src`) or a navigable
531
- * sub-container (`url`). A callback / static `ResolvedTrack` returns the same
532
+ * sub-container (`path`). A callback / static `ResolvedTrack` returns the same
532
533
  * page object directly.
533
534
  *
534
535
  * {@link SearchSource} and {@link TabsSource} HTTP endpoints return this same
@@ -581,41 +582,10 @@ export type TabsSource = Track[] | TabsSourceCallback | TransformableRequestConf
581
582
  * @see BrowserConfiguration.search
582
583
  */
583
584
  export type SearchSource = SearchSourceCallback | TransformableRequestConfig;
584
- /**
585
- * How ids passed to `setFavorites` are matched against a
586
- * track's `src` to hydrate its `favorited` flag.
587
- *
588
- * - `'exact'`: the id must equal `src`.
589
- * - `'partial'`: the id matches if it appears as a complete path segment within
590
- * `src` (delimited by `/`, `?`, `#`, or the string boundaries). Useful when
591
- * favorites are stored as a stable identifier that is embedded in — but not
592
- * equal to — the playable `src` URL.
593
- *
594
- * @example
595
- * ```text
596
- * setFavorites(['abc123']) + track.src = '/stream/jazz-fm/abc123'
597
- *
598
- * 'exact' 'abc123' === '/stream/jazz-fm/abc123' → not favorited
599
- * 'partial' 'abc123' is the last segment of the src → favorited
600
- *
601
- * setFavorites(['https://cdn.example.com/jazz-fm/abc123.mp3'])
602
- *
603
- * 'exact' id === src → favorited
604
- * 'partial' id is a full segment of src → favorited
605
- * ```
606
- */
607
- export type FavoritesMatchMode = 'exact' | 'partial';
608
- /**
609
- * Object form of the `favorite` capability — enables favoriting with an explicit
610
- * {@link FavoritesMatchMode}. (A bare `true` is shorthand for `{ match: 'exact' }`.)
611
- */
612
- export interface FavoriteConfig {
613
- match: FavoritesMatchMode;
614
- }
615
585
  export type BrowserConfiguration = {
616
586
  /**
617
587
  * Initial navigation path. Setting this triggers initial navigation to the
618
- * specified path. When unset, the first tab's URL is used; when there are
588
+ * specified path. When unset, the first tab's path is used; when there are
619
589
  * no tabs either, `/`.
620
590
  */
621
591
  path?: string | undefined;
@@ -784,18 +754,18 @@ export type BrowserConfiguration = {
784
754
  search?: SearchSource;
785
755
  /**
786
756
  * Configuration for navigation tabs in the media browser.
787
- * The first tab's URL is automatically loaded when the browser starts.
757
+ * The first tab's path is automatically loaded when the browser starts.
788
758
  *
789
759
  * Optional - if not provided, no tab navigation will be available.
790
760
  * Limited to maximum 4 tabs for automotive platform compatibility (Android Auto/CarPlay).
791
761
  *
792
- * Can provide static array of Track objects with urls as tabs, API configuration, or custom callback.
762
+ * Can provide static array of Track objects with paths as tabs, API configuration, or custom callback.
793
763
  */
794
764
  tabs?: TabsSource;
795
765
  /**
796
- * Route-specific configurations. Maps URL path patterns to browse sources.
766
+ * Route-specific configurations. Maps path patterns to browse sources.
797
767
  *
798
- * ## Matching
768
+ * ### Matching
799
769
  *
800
770
  * Patterns match on **exact segment count** — `/artists` does NOT match
801
771
  * `/artists/123`. Segments may be:
@@ -809,7 +779,7 @@ export type BrowserConfiguration = {
809
779
  * When several patterns match, the most specific wins
810
780
  * (constants > parameters > wildcards > tail wildcard).
811
781
  *
812
- * ## Defaults and reserved keys
782
+ * ### Defaults and reserved keys
813
783
  *
814
784
  * A path matching no route is fetched over HTTP via the `request` →
815
785
  * `browse` layers with the path applied — most APIs only need explicit
@@ -885,22 +855,22 @@ export type BrowserConfiguration = {
885
855
  carPlayLoadingTitle?: string;
886
856
  /**
887
857
  * Called when the album line on the CarPlay Now Playing screen is tapped
888
- * and the active track has no {@link Track.albumUrl}. Return a browse path
858
+ * and the active track has no {@link Track.albumPath}. Return a browse path
889
859
  * to navigate the CarPlay browse stack there, or `undefined` if the tap was
890
860
  * handled (or should do nothing).
891
861
  *
892
- * The album line is tappable whenever the active track has an `albumUrl`
862
+ * The album line is tappable whenever the active track has an `albumPath`
893
863
  * or this callback is configured.
894
864
  *
895
865
  * @example
896
866
  * ```typescript
897
- * resolveAlbumUrl: (track) =>
867
+ * resolveAlbumPath: (track) =>
898
868
  * track.album ? `/album/${slugify(track.album)}` : undefined
899
869
  * ```
900
870
  *
901
871
  * @platform ios
902
872
  */
903
- resolveAlbumUrl?: ResolveAlbumUrlCallback;
873
+ resolveAlbumPath?: ResolveAlbumPathCallback;
904
874
  /**
905
875
  * Callback to customize error messages for navigation errors.
906
876
  * Used by CarPlay and available via `useFormattedNavigationError()` for app UI.
@@ -933,6 +903,16 @@ export type BrowserConfiguration = {
933
903
  * @platform ios
934
904
  */
935
905
  export type CarPlayNowPlayingButton = 'shuffle' | 'repeat' | 'favorite' | 'playback-rate';
906
+ /**
907
+ * Where the now-playing indicator draws on a CarPlay list row.
908
+ *
909
+ * - `'leading'`: in the artwork slot, replacing the row's artwork while it
910
+ * plays (the system default, as Apple Music does)
911
+ * - `'trailing'`: at the end of the row, keeping the artwork visible
912
+ *
913
+ * @platform ios
914
+ */
915
+ export type CarPlayPlayingIndicatorLocation = 'leading' | 'trailing';
936
916
  /**
937
917
  * Position of the "Ask Siri to Play Audio" assistant cell on a CarPlay list template.
938
918
  *
@@ -1000,7 +980,7 @@ export type FormatNavigationErrorParams = {
1000
980
  export type FormatNavigationErrorCallback = (params: FormatNavigationErrorParams) => FormattedNavigationError | undefined;
1001
981
  /**
1002
982
  * Maps the tapped active track to a browse path for the CarPlay album line,
1003
- * or `undefined` to do nothing. See `resolveAlbumUrl`.
983
+ * or `undefined` to do nothing. See `resolveAlbumPath`.
1004
984
  */
1005
- export type ResolveAlbumUrlCallback = (track: Track) => string | undefined;
985
+ export type ResolveAlbumPathCallback = (track: Track) => string | undefined;
1006
986
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/types/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/types/browser.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,36 @@
1
1
  type Callback<T> = (arg: T) => void;
2
2
  /**
3
- * A lightweight event emitter that lazily bridges native callbacks to multiple JavaScript listeners.
3
+ * The subscription object behind the library's **discrete** events — the
4
+ * remote-control exports (`onRemotePlay`, `onRemoteSeek`, …) and other
5
+ * one-shot signals with no "current value" to cache. Subscribe with
6
+ * {@link addListener}; the returned function unsubscribes. The emitter is
7
+ * not callable itself.
4
8
  *
5
- * The native callback is only assigned when the first listener is added, making the emitter
6
- * creation lightweight with no side effects until actually used.
7
- *
8
- * Use this for optional/rare events like remote controls where most apps won't need to listen.
9
- * For critical state changes (playback, progress, etc.), use NativeEmitter instead to ensure
10
- * no events are missed.
9
+ * "Lazy" is an implementation detail you may notice in timing: the native
10
+ * side only starts delivering the event once the first listener is added.
11
+ * State that always has a current reading uses `NativeUpdatedValue`
12
+ * instead.
11
13
  *
12
14
  * @example
13
15
  * ```typescript
14
- * export const onRemotePlay = LazyNativeEmitter.emitterize<void>(
15
- * (cb) => (nativeBrowser.onRemotePlay = cb)
16
- * )
16
+ * import { onRemotePlay } from 'react-native-audio-browser'
17
17
  *
18
18
  * const unsubscribe = onRemotePlay.addListener(() => console.log('play'))
19
+ * // later:
20
+ * unsubscribe()
19
21
  * ```
20
22
  */
21
23
  export declare class LazyNativeEmitter<T> {
22
24
  private setter;
23
25
  private listeners;
24
- constructor(setter: (callback: (data: T) => void) => void);
25
26
  private getListeners;
26
- addListener(callback: Callback<T>): () => void;
27
27
  /**
28
- * Creates a lazy emitter for a native callback.
28
+ * Subscribes to the event.
29
29
  *
30
- * @param setter - Function that sets the native callback property
31
- * @returns The emitter instance — subscribe with `addListener`, which returns
32
- * an unsubscribe function
30
+ * @param callback - Invoked with each event
31
+ * @returns A function that removes the listener
33
32
  */
34
- static emitterize<T>(setter: (callback: (data: T) => void) => void): LazyNativeEmitter<T>;
33
+ addListener(callback: Callback<T>): () => void;
35
34
  }
36
35
  export {};
37
36
  //# sourceMappingURL=LazyNativeEmitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LazyNativeEmitter.d.ts","sourceRoot":"","sources":["../../../../src/utils/LazyNativeEmitter.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnC;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAiB,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,SAAS,CAAmC;IAEpD,YAAY,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,EAExD;IAED,OAAO,CAAC,YAAY;IAWpB,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAI7C;IAED;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EACjB,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,GAC5C,iBAAiB,CAAC,CAAC,CAAC,CAEtB;CACF"}
1
+ {"version":3,"file":"LazyNativeEmitter.d.ts","sourceRoot":"","sources":["../../../../src/utils/LazyNativeEmitter.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAiB,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,SAAS,CAAmC;IAOpD,OAAO,CAAC,YAAY;IAWpB;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAI7C;CAeF"}
@@ -1,37 +1,42 @@
1
1
  type Callback<T> = (arg: T) => void;
2
2
  /**
3
- * Bridges native value changes to JavaScript, storing the latest value for immediate access.
3
+ * The subscription object behind the library's **state** events — every
4
+ * `on<Thing>Changed`-style export (`onPlaybackChanged`, `onQueueChanged`, …)
5
+ * is one of these. Subscribe with {@link addListener}; the returned function
6
+ * unsubscribes. The emitter is not callable itself.
4
7
  *
5
- * Subscribes to native changes immediately at module load to ensure no updates are missed.
6
- * The `lastValue` property caches the most recent value, allowing hooks to read the current
7
- * state synchronously without calling a separate getter function.
8
- *
9
- * Use this for state-based values that have a "current value" (playback state, options, progress).
10
- * For discrete events without a current value (remote controls), use LazyNativeEmitter instead.
8
+ * It tracks a value that always has a *current* reading (playback state,
9
+ * progress, options): {@link lastValue} caches the most recent one so hooks —
10
+ * and you — can read it synchronously without a getter round-trip. Discrete
11
+ * events with no current value (remote-control presses) use
12
+ * `LazyNativeEmitter` instead.
11
13
  *
12
14
  * @example
13
15
  * ```typescript
14
- * export const onPlaybackChanged = NativeUpdatedValue.emitterize<Playback>(
15
- * (cb) => (nativeBrowser.onPlaybackChanged = cb)
16
- * )
16
+ * import { onPlaybackChanged } from 'react-native-audio-browser'
17
17
  *
18
- * export function usePlayback(): Playback {
19
- * return useUpdatedNativeValue(getPlayback, onPlaybackChanged)
20
- * }
18
+ * const unsubscribe = onPlaybackChanged.addListener((p) => {
19
+ * console.log(p.state)
20
+ * })
21
+ * // later:
22
+ * unsubscribe()
21
23
  * ```
22
24
  */
23
25
  export declare class NativeUpdatedValue<T> {
24
26
  private listeners;
27
+ /**
28
+ * The most recent value delivered by native, or `undefined` before the
29
+ * first update. Subscription starts at module load, so this is safe to
30
+ * read synchronously at any time.
31
+ */
25
32
  lastValue: T | undefined;
26
- constructor(setter: (callback: (data: T) => void) => void);
27
- addListener(callback: Callback<T>): () => void;
28
33
  /**
29
- * Creates a native value subscription.
34
+ * Subscribes to value changes.
30
35
  *
31
- * @param setter - Function that sets the native callback property
32
- * @returns The subscription instance with lastValue and addListener
36
+ * @param callback - Invoked with each new value
37
+ * @returns A function that removes the listener
33
38
  */
34
- static emitterize<T>(setter: (callback: (data: T) => void) => void): NativeUpdatedValue<T>;
39
+ addListener(callback: Callback<T>): () => void;
35
40
  }
36
41
  export {};
37
42
  //# sourceMappingURL=NativeUpdatedValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NativeUpdatedValue.d.ts","sourceRoot":"","sources":["../../../../src/utils/NativeUpdatedValue.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,kBAAkB,CAAC,CAAC;IAC/B,OAAO,CAAC,SAAS,CAAyB;IAC1C,SAAS,EAAE,CAAC,GAAG,SAAS,CAAY;IAEpC,YAAY,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,EAQxD;IAED,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAG7C;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EACjB,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,GAC5C,kBAAkB,CAAC,CAAC,CAAC,CAEvB;CACF"}
1
+ {"version":3,"file":"NativeUpdatedValue.d.ts","sourceRoot":"","sources":["../../../../src/utils/NativeUpdatedValue.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,kBAAkB,CAAC,CAAC;IAC/B,OAAO,CAAC,SAAS,CAAyB;IAE1C;;;;OAIG;IACH,SAAS,EAAE,CAAC,GAAG,SAAS,CAAY;IAapC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAG7C;CAcF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * A track's identity: its opaque `id` when present (non-blank), falling back
3
+ * to the playable `src`. Two tracks refer to the same item exactly when their
4
+ * identities are equal. Browsable-only tracks (neither `id` nor `src`) have
5
+ * no identity — they are addressed by their `path` instead.
6
+ *
7
+ * This is the same comparison the library uses everywhere it matches tracks:
8
+ * favorites (`setFavorites`), the CarPlay / Android Auto "now playing" row
9
+ * indicator, and queue expansion and in-place skipping when a track is
10
+ * selected from browse content. Use it for your own bookkeeping — keying a
11
+ * favorites collection, deduplicating history — so your comparisons agree
12
+ * with the library's.
13
+ */
14
+ export declare function getTrackIdentity(track: {
15
+ id?: string;
16
+ src?: string;
17
+ }): string | undefined;
18
+ //# sourceMappingURL=getTrackIdentity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTrackIdentity.d.ts","sourceRoot":"","sources":["../../../../src/utils/getTrackIdentity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,MAAM,GAAG,SAAS,CAErB"}
@@ -0,0 +1,21 @@
1
+ type Subscribable = {
2
+ addListener(callback: (event: unknown) => void): () => void;
3
+ };
4
+ /**
5
+ * Hook for a native-fetched value that must stay fresh across SEVERAL event
6
+ * sources — e.g. the active track, which changes on a queue transition
7
+ * (`onActiveTrackChanged`) but is also mutated in place by a favorite toggle
8
+ * (`onFavoriteChanged`).
9
+ *
10
+ * Unlike {@link useNativeUpdatedValue}, this never reads a cached event
11
+ * payload: every trigger re-reads `getter()`, and the mount effect re-reads
12
+ * once after the subscriptions attach (so an event firing between render and
13
+ * effect cannot be missed). The getters are cheap synchronous Nitro calls.
14
+ *
15
+ * @param getter - Synchronous native getter for the current value
16
+ * @param emitters - Event sources that invalidate the value (a stable,
17
+ * module-level array — identity changes resubscribe)
18
+ */
19
+ export declare function useNativeValueRefreshedBy<T>(getter: () => T, emitters: readonly Subscribable[]): T;
20
+ export {};
21
+ //# sourceMappingURL=useNativeValueRefreshedBy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNativeValueRefreshedBy.d.ts","sourceRoot":"","sources":["../../../../src/utils/useNativeValueRefreshedBy.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAClB,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC5D,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,MAAM,EAAE,MAAM,CAAC,EACf,QAAQ,EAAE,SAAS,YAAY,EAAE,GAChC,CAAC,CAaH"}
@@ -42,7 +42,6 @@ target_sources(
42
42
  ../nitrogen/generated/android/c++/JSleepTimer.cpp
43
43
  ../nitrogen/generated/android/c++/JVariant_NullType_RemoteButtonLayout.cpp
44
44
  ../nitrogen/generated/android/c++/JVariant_NullType_Double.cpp
45
- ../nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp
46
45
  ../nitrogen/generated/android/c++/JVariant_Boolean_AndroidAudioOffloadSettings.cpp
47
46
  ../nitrogen/generated/android/c++/JVariant_Boolean_RetryConfig.cpp
48
47
  )
@@ -1,5 +1,5 @@
1
1
  ///
2
- /// JFavoritesMatchMode.hpp
2
+ /// JArtworkRendering.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
5
  /// Copyright © Marc Rousavy @ Margelo
@@ -8,30 +8,30 @@
8
8
  #pragma once
9
9
 
10
10
  #include <fbjni/fbjni.h>
11
- #include "FavoritesMatchMode.hpp"
11
+ #include "ArtworkRendering.hpp"
12
12
 
13
13
  namespace margelo::nitro::audiobrowser {
14
14
 
15
15
  using namespace facebook;
16
16
 
17
17
  /**
18
- * The C++ JNI bridge between the C++ enum "FavoritesMatchMode" and the the Kotlin enum "FavoritesMatchMode".
18
+ * The C++ JNI bridge between the C++ enum "ArtworkRendering" and the the Kotlin enum "ArtworkRendering".
19
19
  */
20
- struct JFavoritesMatchMode final: public jni::JavaClass<JFavoritesMatchMode> {
20
+ struct JArtworkRendering final: public jni::JavaClass<JArtworkRendering> {
21
21
  public:
22
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/audiobrowser/FavoritesMatchMode;";
22
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/audiobrowser/ArtworkRendering;";
23
23
 
24
24
  public:
25
25
  /**
26
- * Convert this Java/Kotlin-based enum to the C++ enum FavoritesMatchMode.
26
+ * Convert this Java/Kotlin-based enum to the C++ enum ArtworkRendering.
27
27
  */
28
28
  [[maybe_unused]]
29
29
  [[nodiscard]]
30
- FavoritesMatchMode toCpp() const {
30
+ ArtworkRendering toCpp() const {
31
31
  static const auto clazz = javaClassStatic();
32
32
  static const auto fieldOrdinal = clazz->getField<int>("value");
33
33
  int ordinal = this->getFieldValue(fieldOrdinal);
34
- return static_cast<FavoritesMatchMode>(ordinal);
34
+ return static_cast<ArtworkRendering>(ordinal);
35
35
  }
36
36
 
37
37
  public:
@@ -39,15 +39,15 @@ namespace margelo::nitro::audiobrowser {
39
39
  * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
40
  */
41
41
  [[maybe_unused]]
42
- static jni::alias_ref<JFavoritesMatchMode> fromCpp(FavoritesMatchMode value) {
42
+ static jni::alias_ref<JArtworkRendering> fromCpp(ArtworkRendering value) {
43
43
  static const auto clazz = javaClassStatic();
44
44
  switch (value) {
45
- case FavoritesMatchMode::EXACT:
46
- static const auto fieldEXACT = clazz->getStaticField<JFavoritesMatchMode>("EXACT");
47
- return clazz->getStaticFieldValue(fieldEXACT);
48
- case FavoritesMatchMode::PARTIAL:
49
- static const auto fieldPARTIAL = clazz->getStaticField<JFavoritesMatchMode>("PARTIAL");
50
- return clazz->getStaticFieldValue(fieldPARTIAL);
45
+ case ArtworkRendering::ORIGINAL:
46
+ static const auto fieldORIGINAL = clazz->getStaticField<JArtworkRendering>("ORIGINAL");
47
+ return clazz->getStaticFieldValue(fieldORIGINAL);
48
+ case ArtworkRendering::STENCIL:
49
+ static const auto fieldSTENCIL = clazz->getStaticField<JArtworkRendering>("STENCIL");
50
+ return clazz->getStaticFieldValue(fieldSTENCIL);
51
51
  default:
52
52
  std::string stringValue = std::to_string(static_cast<int>(value));
53
53
  throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
@@ -10,12 +10,13 @@
10
10
  #include <fbjni/fbjni.h>
11
11
  #include "ArtworkRequestConfig.hpp"
12
12
 
13
+ #include "ArtworkRendering.hpp"
13
14
  #include "ArtworkVariants.hpp"
14
15
  #include "HttpMethod.hpp"
15
16
  #include "ImageContext.hpp"
16
17
  #include "ImageQueryParams.hpp"
17
- #include "ImageRowItem.hpp"
18
18
  #include "ImageSource.hpp"
19
+ #include "JArtworkRendering.hpp"
19
20
  #include "JArtworkVariants.hpp"
20
21
  #include "JFunc_std__shared_ptr_Promise_RequestConfig___MediaTransformParams.hpp"
21
22
  #include "JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp"
@@ -24,16 +25,17 @@
24
25
  #include "JHttpMethod.hpp"
25
26
  #include "JImageContext.hpp"
26
27
  #include "JImageQueryParams.hpp"
27
- #include "JImageRowItem.hpp"
28
28
  #include "JImageSource.hpp"
29
29
  #include "JMediaTransformParams.hpp"
30
30
  #include "JRequestConfig.hpp"
31
+ #include "JStyleDisplay.hpp"
31
32
  #include "JTrack.hpp"
32
33
  #include "JTrackRequest.hpp"
33
34
  #include "JTrackStyle.hpp"
34
35
  #include "JVariant_String_ArtworkVariants.hpp"
35
36
  #include "MediaTransformParams.hpp"
36
37
  #include "RequestConfig.hpp"
38
+ #include "StyleDisplay.hpp"
37
39
  #include "Track.hpp"
38
40
  #include "TrackRequest.hpp"
39
41
  #include "TrackStyle.hpp"
@@ -45,7 +47,6 @@
45
47
  #include <string>
46
48
  #include <unordered_map>
47
49
  #include <variant>
48
- #include <vector>
49
50
 
50
51
  namespace margelo::nitro::audiobrowser {
51
52
 
@@ -15,9 +15,17 @@
15
15
  #include <variant>
16
16
  #include "JResolvedTrack.hpp"
17
17
  #include <string>
18
- #include "Track.hpp"
19
- #include <vector>
18
+ #include "SectionStyle.hpp"
20
19
  #include <optional>
20
+ #include "JSectionStyle.hpp"
21
+ #include "StyleDisplay.hpp"
22
+ #include "JStyleDisplay.hpp"
23
+ #include "ArtworkRendering.hpp"
24
+ #include "JArtworkRendering.hpp"
25
+ #include "Section.hpp"
26
+ #include <vector>
27
+ #include "JSection.hpp"
28
+ #include "Track.hpp"
21
29
  #include "JTrack.hpp"
22
30
  #include "ArtworkVariants.hpp"
23
31
  #include "JVariant_String_ArtworkVariants.hpp"
@@ -31,8 +39,6 @@
31
39
  #include "JTrackRequest.hpp"
32
40
  #include "TrackStyle.hpp"
33
41
  #include "JTrackStyle.hpp"
34
- #include "ImageRowItem.hpp"
35
- #include "JImageRowItem.hpp"
36
42
  #include "CarPlaySiriListButtonPosition.hpp"
37
43
  #include "JCarPlaySiriListButtonPosition.hpp"
38
44
  #include "JBrowseError.hpp"
@@ -0,0 +1,58 @@
1
+ ///
2
+ /// JCarPlayPlayingIndicatorLocation.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "CarPlayPlayingIndicatorLocation.hpp"
12
+
13
+ namespace margelo::nitro::audiobrowser {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "CarPlayPlayingIndicatorLocation" and the the Kotlin enum "CarPlayPlayingIndicatorLocation".
19
+ */
20
+ struct JCarPlayPlayingIndicatorLocation final: public jni::JavaClass<JCarPlayPlayingIndicatorLocation> {
21
+ public:
22
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/audiobrowser/CarPlayPlayingIndicatorLocation;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum CarPlayPlayingIndicatorLocation.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ CarPlayPlayingIndicatorLocation toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<CarPlayPlayingIndicatorLocation>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JCarPlayPlayingIndicatorLocation> fromCpp(CarPlayPlayingIndicatorLocation value) {
43
+ static const auto clazz = javaClassStatic();
44
+ switch (value) {
45
+ case CarPlayPlayingIndicatorLocation::LEADING:
46
+ static const auto fieldLEADING = clazz->getStaticField<JCarPlayPlayingIndicatorLocation>("LEADING");
47
+ return clazz->getStaticFieldValue(fieldLEADING);
48
+ case CarPlayPlayingIndicatorLocation::TRAILING:
49
+ static const auto fieldTRAILING = clazz->getStaticField<JCarPlayPlayingIndicatorLocation>("TRAILING");
50
+ return clazz->getStaticFieldValue(fieldTRAILING);
51
+ default:
52
+ std::string stringValue = std::to_string(static_cast<int>(value));
53
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
54
+ }
55
+ }
56
+ };
57
+
58
+ } // namespace margelo::nitro::audiobrowser
@@ -10,18 +10,20 @@
10
10
  #include <fbjni/fbjni.h>
11
11
  #include "FavoriteChangedEvent.hpp"
12
12
 
13
+ #include "ArtworkRendering.hpp"
13
14
  #include "ArtworkVariants.hpp"
14
15
  #include "HttpMethod.hpp"
15
- #include "ImageRowItem.hpp"
16
16
  #include "ImageSource.hpp"
17
+ #include "JArtworkRendering.hpp"
17
18
  #include "JArtworkVariants.hpp"
18
19
  #include "JHttpMethod.hpp"
19
- #include "JImageRowItem.hpp"
20
20
  #include "JImageSource.hpp"
21
+ #include "JStyleDisplay.hpp"
21
22
  #include "JTrack.hpp"
22
23
  #include "JTrackRequest.hpp"
23
24
  #include "JTrackStyle.hpp"
24
25
  #include "JVariant_String_ArtworkVariants.hpp"
26
+ #include "StyleDisplay.hpp"
25
27
  #include "Track.hpp"
26
28
  #include "TrackRequest.hpp"
27
29
  #include "TrackStyle.hpp"
@@ -29,7 +31,6 @@
29
31
  #include <string>
30
32
  #include <unordered_map>
31
33
  #include <variant>
32
- #include <vector>
33
34
 
34
35
  namespace margelo::nitro::audiobrowser {
35
36