@5stones/react-native-audio-browser 0.2.0 → 0.3.0

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 (605) hide show
  1. package/AudioBrowser.podspec +3 -1
  2. package/android/src/main/cpp/cpp-adapter.cpp +4 -1
  3. package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +8 -27
  4. package/android/src/main/java/com/audiobrowser/Service.kt +0 -2
  5. package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +5 -0
  6. package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +31 -0
  7. package/android/src/main/java/com/audiobrowser/browser/SimpleRouter.kt +10 -6
  8. package/android/src/main/java/com/audiobrowser/browser/TrackLoadHandler.kt +45 -0
  9. package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +3 -21
  10. package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +1 -0
  11. package/android/src/main/java/com/audiobrowser/player/Player.kt +1 -0
  12. package/android/src/test/java/com/audiobrowser/browser/SimpleRouterTest.kt +104 -95
  13. package/ios/Browser/BrowserConfig.swift +31 -5
  14. package/ios/Browser/BrowserManager.swift +96 -6
  15. package/ios/Browser/JsonModels.swift +37 -0
  16. package/ios/CarPlay/CarPlayController.swift +219 -99
  17. package/ios/CarPlay/RNABAudioBrowser.h +23 -0
  18. package/ios/CarPlay/RNABAudioBrowser.m +22 -0
  19. package/ios/CarPlay/RNABMediaIntentHandler.swift +60 -0
  20. package/ios/Extension/ChapterMetadata+AVFoundation.swift +1 -1
  21. package/ios/Extension/CxxVectorConformances.swift +20 -0
  22. package/ios/Extension/TimedMetadata+AVFoundation.swift +5 -5
  23. package/ios/Extension/Track+AVPlayer.swift +5 -6
  24. package/ios/Extension/TrackMetadata+AVFoundation.swift +1 -1
  25. package/ios/HybridAudioBrowser.swift +107 -46
  26. package/ios/Model/MediaURL.swift +2 -1
  27. package/ios/Player/PlayingStateManager.swift +1 -0
  28. package/ios/Player/RetryManager.swift +26 -65
  29. package/ios/Player/SleepTimerManager.swift +6 -8
  30. package/ios/RemoteCommand/RemoteCommandController.swift +6 -0
  31. package/ios/Tests/SimpleRouterTests.swift +139 -0
  32. package/ios/TrackPlayer.swift +35 -24
  33. package/ios/Util/NetworkMonitor.swift +3 -6
  34. package/ios/Util/SFSymbolRenderer.swift +142 -0
  35. package/lib/commonjs/features/browser.js +1 -0
  36. package/lib/commonjs/features/browser.js.map +1 -1
  37. package/lib/commonjs/features/remoteControls.js +1 -24
  38. package/lib/commonjs/features/remoteControls.js.map +1 -1
  39. package/lib/commonjs/web/NativeAudioBrowser.js +20 -24
  40. package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
  41. package/lib/commonjs/web/SimpleRouter.js +4 -3
  42. package/lib/commonjs/web/SimpleRouter.js.map +1 -1
  43. package/lib/commonjs/web/SimpleRouter.test.js +174 -0
  44. package/lib/commonjs/web/SimpleRouter.test.js.map +1 -0
  45. package/lib/module/features/browser.js +1 -0
  46. package/lib/module/features/browser.js.map +1 -1
  47. package/lib/module/features/remoteControls.js +0 -22
  48. package/lib/module/features/remoteControls.js.map +1 -1
  49. package/lib/module/web/NativeAudioBrowser.js +20 -24
  50. package/lib/module/web/NativeAudioBrowser.js.map +1 -1
  51. package/lib/module/web/SimpleRouter.js +4 -3
  52. package/lib/module/web/SimpleRouter.js.map +1 -1
  53. package/lib/module/web/SimpleRouter.test.js +174 -0
  54. package/lib/module/web/SimpleRouter.test.js.map +1 -0
  55. package/lib/typescript/src/features/browser.d.ts.map +1 -1
  56. package/lib/typescript/src/features/remoteControls.d.ts +0 -26
  57. package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
  58. package/lib/typescript/src/specs/audio-browser.nitro.d.ts +1 -3
  59. package/lib/typescript/src/specs/audio-browser.nitro.d.ts.map +1 -1
  60. package/lib/typescript/src/types/browser-native.d.ts +2 -1
  61. package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
  62. package/lib/typescript/src/types/browser-nodes.d.ts +46 -1
  63. package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
  64. package/lib/typescript/src/types/browser.d.ts +32 -0
  65. package/lib/typescript/src/types/browser.d.ts.map +1 -1
  66. package/lib/typescript/src/web/NativeAudioBrowser.d.ts +3 -6
  67. package/lib/typescript/src/web/NativeAudioBrowser.d.ts.map +1 -1
  68. package/lib/typescript/src/web/SimpleRouter.d.ts.map +1 -1
  69. package/lib/typescript/src/web/SimpleRouter.test.d.ts +2 -0
  70. package/lib/typescript/src/web/SimpleRouter.test.d.ts.map +1 -0
  71. package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +1 -1
  72. package/nitrogen/generated/android/AudioBrowser+autolinking.gradle +1 -1
  73. package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +67 -57
  74. package/nitrogen/generated/android/AudioBrowserOnLoad.hpp +14 -5
  75. package/nitrogen/generated/android/c++/JAndroidAudioContentType.hpp +6 -7
  76. package/nitrogen/generated/android/c++/JAndroidAudioOffloadSettings.hpp +1 -1
  77. package/nitrogen/generated/android/c++/JAndroidOptions.hpp +1 -1
  78. package/nitrogen/generated/android/c++/JAndroidPlayerWakeMode.hpp +4 -5
  79. package/nitrogen/generated/android/c++/JAndroidUpdateOptions.hpp +1 -1
  80. package/nitrogen/generated/android/c++/JAppKilledPlaybackBehavior.hpp +4 -5
  81. package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +4 -1
  82. package/nitrogen/generated/android/c++/JBatteryOptimizationStatus.hpp +4 -5
  83. package/nitrogen/generated/android/c++/JBatteryOptimizationStatusChangedEvent.hpp +1 -1
  84. package/nitrogen/generated/android/c++/JBatteryWarningPendingChangedEvent.hpp +1 -1
  85. package/nitrogen/generated/android/c++/JBrowseError.hpp +1 -1
  86. package/nitrogen/generated/android/c++/JBrowseResult.cpp +1 -1
  87. package/nitrogen/generated/android/c++/JBrowseResult.hpp +7 -3
  88. package/nitrogen/generated/android/c++/JBrowserSourceCallbackParam.hpp +1 -1
  89. package/nitrogen/generated/android/c++/JCarPlayNowPlayingButton.hpp +5 -6
  90. package/nitrogen/generated/android/c++/JCarPlaySiriListButtonPosition.hpp +58 -0
  91. package/nitrogen/generated/android/c++/JChapterMetadata.hpp +1 -1
  92. package/nitrogen/generated/android/c++/JEqualizerSettings.hpp +1 -1
  93. package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +4 -1
  94. package/nitrogen/generated/android/c++/JFormatNavigationErrorParams.hpp +1 -1
  95. package/nitrogen/generated/android/c++/JFormattedNavigationError.hpp +1 -1
  96. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.hpp +1 -1
  97. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.hpp +1 -1
  98. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____RequestConfig_std__optional_std__unordered_map_std__string__std__string__.hpp +1 -1
  99. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +4 -1
  100. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.hpp +5 -1
  101. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +3 -1
  102. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +139 -0
  103. package/nitrogen/generated/android/c++/JFunc_void.hpp +1 -1
  104. package/nitrogen/generated/android/c++/JFunc_void_BatteryOptimizationStatusChangedEvent.hpp +1 -1
  105. package/nitrogen/generated/android/c++/JFunc_void_BatteryWarningPendingChangedEvent.hpp +1 -1
  106. package/nitrogen/generated/android/c++/JFunc_void_EqualizerSettings.hpp +1 -1
  107. package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +4 -1
  108. package/nitrogen/generated/android/c++/JFunc_void_IosOutput.hpp +1 -1
  109. package/nitrogen/generated/android/c++/JFunc_void_NavigationErrorEvent.hpp +1 -1
  110. package/nitrogen/generated/android/c++/JFunc_void_NowPlayingMetadata.hpp +1 -1
  111. package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +1 -1
  112. package/nitrogen/generated/android/c++/JFunc_void_Playback.hpp +1 -1
  113. package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +4 -1
  114. package/nitrogen/generated/android/c++/JFunc_void_PlaybackErrorEvent.hpp +1 -1
  115. package/nitrogen/generated/android/c++/JFunc_void_PlaybackPlayWhenReadyChangedEvent.hpp +1 -1
  116. package/nitrogen/generated/android/c++/JFunc_void_PlaybackProgressUpdatedEvent.hpp +1 -1
  117. package/nitrogen/generated/android/c++/JFunc_void_PlaybackQueueEndedEvent.hpp +1 -1
  118. package/nitrogen/generated/android/c++/JFunc_void_PlayingState.hpp +1 -1
  119. package/nitrogen/generated/android/c++/JFunc_void_RemoteJumpBackwardEvent.hpp +1 -1
  120. package/nitrogen/generated/android/c++/JFunc_void_RemoteJumpForwardEvent.hpp +1 -1
  121. package/nitrogen/generated/android/c++/JFunc_void_RemotePlayIdEvent.hpp +1 -1
  122. package/nitrogen/generated/android/c++/JFunc_void_RemotePlaySearchEvent.hpp +1 -1
  123. package/nitrogen/generated/android/c++/JFunc_void_RemoteSeekEvent.hpp +1 -1
  124. package/nitrogen/generated/android/c++/JFunc_void_RemoteSetRatingEvent.hpp +1 -1
  125. package/nitrogen/generated/android/c++/JFunc_void_RemoteSkipEvent.hpp +1 -1
  126. package/nitrogen/generated/android/c++/JFunc_void_RepeatModeChangedEvent.hpp +1 -1
  127. package/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp +1 -1
  128. package/nitrogen/generated/android/c++/JFunc_void_TrackMetadata.hpp +1 -1
  129. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +1 -1
  130. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +1 -1
  131. package/nitrogen/generated/android/c++/JFunc_void_std__optional_FormattedNavigationError_.hpp +1 -1
  132. package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +5 -1
  133. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.hpp +1 -1
  134. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +1 -1
  135. package/nitrogen/generated/android/c++/JFunc_void_std__vector_ChapterMetadata_.hpp +1 -1
  136. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +3 -1
  137. package/nitrogen/generated/android/c++/JHeartRating.hpp +1 -1
  138. package/nitrogen/generated/android/c++/JHttpMethod.hpp +8 -9
  139. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +230 -245
  140. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +20 -26
  141. package/nitrogen/generated/android/c++/JIOSCategory.hpp +7 -8
  142. package/nitrogen/generated/android/c++/JIOSCategoryMode.hpp +10 -11
  143. package/nitrogen/generated/android/c++/JIOSCategoryOptions.hpp +8 -9
  144. package/nitrogen/generated/android/c++/JIOSCategoryPolicy.hpp +4 -5
  145. package/nitrogen/generated/android/c++/JImageContext.hpp +1 -1
  146. package/nitrogen/generated/android/c++/JImageQueryParams.hpp +1 -1
  147. package/nitrogen/generated/android/c++/JImageRowItem.hpp +75 -0
  148. package/nitrogen/generated/android/c++/JImageSource.hpp +1 -1
  149. package/nitrogen/generated/android/c++/JIosOutput.hpp +1 -1
  150. package/nitrogen/generated/android/c++/JIosOutputType.hpp +12 -13
  151. package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +4 -1
  152. package/nitrogen/generated/android/c++/JMediaTransformParams.hpp +1 -1
  153. package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +22 -2
  154. package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +5 -1
  155. package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +1 -1
  156. package/nitrogen/generated/android/c++/JNavigationError.hpp +1 -1
  157. package/nitrogen/generated/android/c++/JNavigationErrorEvent.hpp +1 -1
  158. package/nitrogen/generated/android/c++/JNavigationErrorType.hpp +6 -7
  159. package/nitrogen/generated/android/c++/JNitroAndroidUpdateOptions.hpp +1 -1
  160. package/nitrogen/generated/android/c++/JNotificationButton.hpp +6 -7
  161. package/nitrogen/generated/android/c++/JNotificationButtonLayout.hpp +1 -1
  162. package/nitrogen/generated/android/c++/JNowPlayingMetadata.hpp +1 -1
  163. package/nitrogen/generated/android/c++/JNowPlayingUpdate.hpp +1 -1
  164. package/nitrogen/generated/android/c++/JOptions.hpp +1 -1
  165. package/nitrogen/generated/android/c++/JPartialAndroidSetupPlayerOptions.hpp +1 -1
  166. package/nitrogen/generated/android/c++/JPartialIOSSetupPlayerOptions.hpp +1 -1
  167. package/nitrogen/generated/android/c++/JPartialSetupPlayerOptions.hpp +1 -1
  168. package/nitrogen/generated/android/c++/JPercentageRating.hpp +1 -1
  169. package/nitrogen/generated/android/c++/JPlayback.hpp +1 -1
  170. package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +4 -1
  171. package/nitrogen/generated/android/c++/JPlaybackError.hpp +1 -1
  172. package/nitrogen/generated/android/c++/JPlaybackErrorEvent.hpp +1 -1
  173. package/nitrogen/generated/android/c++/JPlaybackPlayWhenReadyChangedEvent.hpp +1 -1
  174. package/nitrogen/generated/android/c++/JPlaybackProgressUpdatedEvent.hpp +1 -1
  175. package/nitrogen/generated/android/c++/JPlaybackQueueEndedEvent.hpp +1 -1
  176. package/nitrogen/generated/android/c++/JPlaybackState.hpp +10 -11
  177. package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +1 -1
  178. package/nitrogen/generated/android/c++/JPlayingState.hpp +1 -1
  179. package/nitrogen/generated/android/c++/JProgress.hpp +1 -1
  180. package/nitrogen/generated/android/c++/JRatingType.hpp +8 -9
  181. package/nitrogen/generated/android/c++/JRemoteJumpBackwardEvent.hpp +1 -1
  182. package/nitrogen/generated/android/c++/JRemoteJumpForwardEvent.hpp +1 -1
  183. package/nitrogen/generated/android/c++/JRemotePlayIdEvent.hpp +1 -1
  184. package/nitrogen/generated/android/c++/JRemotePlaySearchEvent.hpp +1 -1
  185. package/nitrogen/generated/android/c++/JRemoteSeekEvent.hpp +1 -1
  186. package/nitrogen/generated/android/c++/JRemoteSetRatingEvent.hpp +1 -1
  187. package/nitrogen/generated/android/c++/JRemoteSkipEvent.hpp +1 -1
  188. package/nitrogen/generated/android/c++/JRepeatMode.hpp +4 -5
  189. package/nitrogen/generated/android/c++/JRepeatModeChangedEvent.hpp +1 -1
  190. package/nitrogen/generated/android/c++/JRequestConfig.hpp +1 -1
  191. package/nitrogen/generated/android/c++/JResolvedTrack.hpp +34 -4
  192. package/nitrogen/generated/android/c++/JRetryConfig.hpp +1 -1
  193. package/nitrogen/generated/android/c++/JSearchMode.hpp +7 -8
  194. package/nitrogen/generated/android/c++/JSearchParams.hpp +1 -1
  195. package/nitrogen/generated/android/c++/JSleepTimer.cpp +1 -1
  196. package/nitrogen/generated/android/c++/JSleepTimer.hpp +4 -4
  197. package/nitrogen/generated/android/c++/JSleepTimerEndOfTrack.hpp +1 -1
  198. package/nitrogen/generated/android/c++/JSleepTimerTime.hpp +1 -1
  199. package/nitrogen/generated/android/c++/JStarRating.hpp +1 -1
  200. package/nitrogen/generated/android/c++/JThumbsRating.hpp +1 -1
  201. package/nitrogen/generated/android/c++/JTimedMetadata.hpp +1 -1
  202. package/nitrogen/generated/android/c++/JTrack.hpp +29 -4
  203. package/nitrogen/generated/android/c++/{JRemoteLoadEvent.hpp → JTrackLoadEvent.hpp} +13 -11
  204. package/nitrogen/generated/android/c++/JTrackMetadata.hpp +1 -1
  205. package/nitrogen/generated/android/c++/JTrackStyle.hpp +3 -4
  206. package/nitrogen/generated/android/c++/JTransformableRequestConfig.hpp +1 -1
  207. package/nitrogen/generated/android/c++/JUpdateOptions.hpp +1 -1
  208. package/nitrogen/generated/android/c++/JVariant_Boolean_AndroidAudioOffloadSettings.cpp +1 -1
  209. package/nitrogen/generated/android/c++/JVariant_Boolean_AndroidAudioOffloadSettings.hpp +3 -3
  210. package/nitrogen/generated/android/c++/JVariant_Boolean_RetryConfig.cpp +1 -1
  211. package/nitrogen/generated/android/c++/JVariant_Boolean_RetryConfig.hpp +3 -3
  212. package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.cpp +1 -1
  213. package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.hpp +5 -5
  214. package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +1 -1
  215. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
  216. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.cpp +1 -1
  217. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.hpp +3 -3
  218. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioContentType.kt +3 -1
  219. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioOffloadSettings.kt +2 -2
  220. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidOptions.kt +2 -2
  221. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidPlayerWakeMode.kt +3 -1
  222. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidUpdateOptions.kt +2 -2
  223. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AppKilledPlaybackBehavior.kt +3 -1
  224. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ArtworkRequestConfig.kt +2 -2
  225. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AudioBrowserOnLoad.kt +1 -1
  226. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryOptimizationStatus.kt +3 -1
  227. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryOptimizationStatusChangedEvent.kt +2 -2
  228. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryWarningPendingChangedEvent.kt +2 -2
  229. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowseError.kt +2 -2
  230. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowseResult.kt +1 -7
  231. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowserSourceCallbackParam.kt +2 -2
  232. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayNowPlayingButton.kt +3 -1
  233. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlaySiriListButtonPosition.kt +23 -0
  234. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ChapterMetadata.kt +2 -2
  235. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/EqualizerSettings.kt +2 -2
  236. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FavoriteChangedEvent.kt +2 -2
  237. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormatNavigationErrorParams.kt +2 -2
  238. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormattedNavigationError.kt +2 -2
  239. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.kt +1 -1
  240. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.kt +1 -1
  241. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____RequestConfig_std__optional_std__unordered_map_std__string__std__string__.kt +1 -1
  242. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.kt +1 -1
  243. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.kt +1 -1
  244. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.kt +1 -1
  245. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Func_void_RemoteLoadEvent.kt → Func_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.kt} +14 -14
  246. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void.kt +1 -1
  247. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_BatteryOptimizationStatusChangedEvent.kt +1 -1
  248. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_BatteryWarningPendingChangedEvent.kt +1 -1
  249. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_EqualizerSettings.kt +1 -1
  250. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_FavoriteChangedEvent.kt +1 -1
  251. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_IosOutput.kt +1 -1
  252. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_NavigationErrorEvent.kt +1 -1
  253. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_NowPlayingMetadata.kt +1 -1
  254. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_Options.kt +1 -1
  255. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_Playback.kt +1 -1
  256. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackActiveTrackChangedEvent.kt +1 -1
  257. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackErrorEvent.kt +1 -1
  258. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackPlayWhenReadyChangedEvent.kt +1 -1
  259. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackProgressUpdatedEvent.kt +1 -1
  260. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackQueueEndedEvent.kt +1 -1
  261. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlayingState.kt +1 -1
  262. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteJumpBackwardEvent.kt +1 -1
  263. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteJumpForwardEvent.kt +1 -1
  264. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemotePlayIdEvent.kt +1 -1
  265. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemotePlaySearchEvent.kt +1 -1
  266. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSeekEvent.kt +1 -1
  267. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSetRatingEvent.kt +1 -1
  268. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSkipEvent.kt +1 -1
  269. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RepeatModeChangedEvent.kt +1 -1
  270. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_TimedMetadata.kt +1 -1
  271. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_TrackMetadata.kt +1 -1
  272. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_bool.kt +1 -1
  273. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_double.kt +1 -1
  274. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_FormattedNavigationError_.kt +1 -1
  275. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_ResolvedTrack_.kt +1 -1
  276. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.kt +1 -1
  277. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__string.kt +1 -1
  278. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__vector_ChapterMetadata_.kt +1 -1
  279. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__vector_Track_.kt +1 -1
  280. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HeartRating.kt +2 -2
  281. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HttpMethod.kt +3 -1
  282. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +16 -47
  283. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategory.kt +3 -1
  284. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryMode.kt +3 -1
  285. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryOptions.kt +3 -1
  286. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryPolicy.kt +3 -1
  287. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageContext.kt +2 -2
  288. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageQueryParams.kt +2 -2
  289. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +47 -0
  290. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageSource.kt +2 -2
  291. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutput.kt +2 -2
  292. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutputType.kt +3 -1
  293. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaRequestConfig.kt +2 -2
  294. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaTransformParams.kt +2 -2
  295. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +9 -6
  296. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeRouteEntry.kt +2 -2
  297. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeUpdateOptions.kt +2 -2
  298. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationError.kt +2 -2
  299. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorEvent.kt +2 -2
  300. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorType.kt +3 -1
  301. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroAndroidUpdateOptions.kt +2 -2
  302. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButton.kt +3 -1
  303. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButtonLayout.kt +2 -2
  304. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingMetadata.kt +2 -2
  305. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingUpdate.kt +2 -2
  306. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Options.kt +2 -2
  307. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialAndroidSetupPlayerOptions.kt +2 -2
  308. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialIOSSetupPlayerOptions.kt +2 -2
  309. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialSetupPlayerOptions.kt +2 -2
  310. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PercentageRating.kt +2 -2
  311. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Playback.kt +2 -2
  312. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackActiveTrackChangedEvent.kt +2 -2
  313. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackError.kt +2 -2
  314. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackErrorEvent.kt +2 -2
  315. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackPlayWhenReadyChangedEvent.kt +2 -2
  316. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackProgressUpdatedEvent.kt +2 -2
  317. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackQueueEndedEvent.kt +2 -2
  318. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackState.kt +3 -1
  319. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
  320. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayingState.kt +2 -2
  321. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Progress.kt +2 -2
  322. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RatingType.kt +3 -1
  323. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteJumpBackwardEvent.kt +2 -2
  324. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteJumpForwardEvent.kt +2 -2
  325. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemotePlayIdEvent.kt +2 -2
  326. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemotePlaySearchEvent.kt +2 -2
  327. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSeekEvent.kt +2 -2
  328. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSetRatingEvent.kt +2 -2
  329. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSkipEvent.kt +2 -2
  330. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RepeatMode.kt +3 -1
  331. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RepeatModeChangedEvent.kt +2 -2
  332. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RequestConfig.kt +2 -2
  333. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +11 -5
  334. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RetryConfig.kt +2 -2
  335. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchMode.kt +3 -1
  336. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchParams.kt +2 -2
  337. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimer.kt +1 -8
  338. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimerEndOfTrack.kt +2 -2
  339. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimerTime.kt +2 -2
  340. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StarRating.kt +2 -2
  341. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ThumbsRating.kt +2 -2
  342. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TimedMetadata.kt +2 -2
  343. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +8 -5
  344. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{RemoteLoadEvent.kt → TrackLoadEvent.kt} +7 -7
  345. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackMetadata.kt +2 -2
  346. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +3 -1
  347. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TransformableRequestConfig.kt +2 -2
  348. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/UpdateOptions.kt +2 -2
  349. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_AndroidAudioOffloadSettings.kt +1 -7
  350. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_RetryConfig.kt +1 -7
  351. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.kt +1 -9
  352. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_NullType_Double.kt +1 -7
  353. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_NullType_NotificationButtonLayout.kt +1 -7
  354. package/nitrogen/generated/ios/AudioBrowser+autolinking.rb +2 -2
  355. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +23 -14
  356. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +239 -142
  357. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +10 -4
  358. package/nitrogen/generated/ios/AudioBrowserAutolinking.mm +1 -1
  359. package/nitrogen/generated/ios/AudioBrowserAutolinking.swift +9 -8
  360. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.cpp +1 -1
  361. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +25 -18
  362. package/nitrogen/generated/ios/swift/AndroidAudioContentType.swift +1 -1
  363. package/nitrogen/generated/ios/swift/AndroidAudioOffloadSettings.swift +19 -44
  364. package/nitrogen/generated/ios/swift/AndroidOptions.swift +30 -74
  365. package/nitrogen/generated/ios/swift/AndroidPlayerWakeMode.swift +1 -1
  366. package/nitrogen/generated/ios/swift/AndroidUpdateOptions.swift +44 -112
  367. package/nitrogen/generated/ios/swift/AppKilledPlaybackBehavior.swift +1 -1
  368. package/nitrogen/generated/ios/swift/ArtworkRequestConfig.swift +152 -303
  369. package/nitrogen/generated/ios/swift/BatteryOptimizationStatus.swift +1 -1
  370. package/nitrogen/generated/ios/swift/BatteryOptimizationStatusChangedEvent.swift +3 -10
  371. package/nitrogen/generated/ios/swift/BatteryWarningPendingChangedEvent.swift +3 -10
  372. package/nitrogen/generated/ios/swift/BrowseError.swift +3 -10
  373. package/nitrogen/generated/ios/swift/BrowseResult.swift +1 -1
  374. package/nitrogen/generated/ios/swift/BrowserSourceCallbackParam.swift +20 -45
  375. package/nitrogen/generated/ios/swift/CarPlayNowPlayingButton.swift +1 -1
  376. package/nitrogen/generated/ios/swift/CarPlaySiriListButtonPosition.swift +40 -0
  377. package/nitrogen/generated/ios/swift/ChapterMetadata.swift +23 -60
  378. package/nitrogen/generated/ios/swift/EqualizerSettings.swift +24 -97
  379. package/nitrogen/generated/ios/swift/FavoriteChangedEvent.swift +5 -18
  380. package/nitrogen/generated/ios/swift/FormatNavigationErrorParams.swift +7 -26
  381. package/nitrogen/generated/ios/swift/FormattedNavigationError.swift +5 -18
  382. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.swift +1 -2
  383. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.swift +1 -2
  384. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____RequestConfig_std__optional_std__unordered_map_std__string__std__string__.swift +1 -2
  385. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.swift +1 -2
  386. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.swift +1 -2
  387. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.swift +1 -2
  388. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.swift +61 -0
  389. package/nitrogen/generated/ios/swift/Func_void.swift +1 -2
  390. package/nitrogen/generated/ios/swift/Func_void_BatteryOptimizationStatusChangedEvent.swift +1 -2
  391. package/nitrogen/generated/ios/swift/Func_void_BatteryWarningPendingChangedEvent.swift +1 -2
  392. package/nitrogen/generated/ios/swift/Func_void_EqualizerSettings.swift +1 -2
  393. package/nitrogen/generated/ios/swift/Func_void_FavoriteChangedEvent.swift +1 -2
  394. package/nitrogen/generated/ios/swift/Func_void_IosOutput.swift +1 -2
  395. package/nitrogen/generated/ios/swift/Func_void_NavigationErrorEvent.swift +1 -2
  396. package/nitrogen/generated/ios/swift/Func_void_NowPlayingMetadata.swift +1 -2
  397. package/nitrogen/generated/ios/swift/Func_void_Options.swift +1 -2
  398. package/nitrogen/generated/ios/swift/Func_void_Playback.swift +1 -2
  399. package/nitrogen/generated/ios/swift/Func_void_PlaybackActiveTrackChangedEvent.swift +1 -2
  400. package/nitrogen/generated/ios/swift/Func_void_PlaybackErrorEvent.swift +1 -2
  401. package/nitrogen/generated/ios/swift/Func_void_PlaybackPlayWhenReadyChangedEvent.swift +1 -2
  402. package/nitrogen/generated/ios/swift/Func_void_PlaybackProgressUpdatedEvent.swift +1 -2
  403. package/nitrogen/generated/ios/swift/Func_void_PlaybackQueueEndedEvent.swift +1 -2
  404. package/nitrogen/generated/ios/swift/Func_void_PlayingState.swift +1 -2
  405. package/nitrogen/generated/ios/swift/Func_void_RemoteJumpBackwardEvent.swift +1 -2
  406. package/nitrogen/generated/ios/swift/Func_void_RemoteJumpForwardEvent.swift +1 -2
  407. package/nitrogen/generated/ios/swift/Func_void_RemotePlayIdEvent.swift +1 -2
  408. package/nitrogen/generated/ios/swift/Func_void_RemotePlaySearchEvent.swift +1 -2
  409. package/nitrogen/generated/ios/swift/Func_void_RemoteSeekEvent.swift +1 -2
  410. package/nitrogen/generated/ios/swift/Func_void_RemoteSetRatingEvent.swift +1 -2
  411. package/nitrogen/generated/ios/swift/Func_void_RemoteSkipEvent.swift +1 -2
  412. package/nitrogen/generated/ios/swift/Func_void_RepeatModeChangedEvent.swift +1 -2
  413. package/nitrogen/generated/ios/swift/Func_void_RequestConfig.swift +1 -2
  414. package/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift +1 -2
  415. package/nitrogen/generated/ios/swift/Func_void_TrackMetadata.swift +1 -2
  416. package/nitrogen/generated/ios/swift/Func_void_bool.swift +1 -2
  417. package/nitrogen/generated/ios/swift/Func_void_double.swift +1 -2
  418. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -2
  419. package/nitrogen/generated/ios/swift/Func_void_std__optional_FormattedNavigationError_.swift +1 -2
  420. package/nitrogen/generated/ios/swift/Func_void_std__optional_ResolvedTrack_.swift +1 -2
  421. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.swift +1 -2
  422. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_RequestConfig__.swift +1 -2
  423. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError___.swift +1 -2
  424. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__vector_Track___.swift +1 -2
  425. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_void__.swift +64 -0
  426. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +1 -2
  427. package/nitrogen/generated/ios/swift/Func_void_std__variant_ResolvedTrack__BrowseError_.swift +1 -2
  428. package/nitrogen/generated/ios/swift/Func_void_std__vector_ChapterMetadata_.swift +1 -2
  429. package/nitrogen/generated/ios/swift/Func_void_std__vector_Track_.swift +1 -2
  430. package/nitrogen/generated/ios/swift/HeartRating.swift +3 -10
  431. package/nitrogen/generated/ios/swift/HttpMethod.swift +1 -1
  432. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +3 -6
  433. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +56 -58
  434. package/nitrogen/generated/ios/swift/IOSCategory.swift +1 -1
  435. package/nitrogen/generated/ios/swift/IOSCategoryMode.swift +1 -1
  436. package/nitrogen/generated/ios/swift/IOSCategoryOptions.swift +1 -1
  437. package/nitrogen/generated/ios/swift/IOSCategoryPolicy.swift +1 -1
  438. package/nitrogen/generated/ios/swift/ImageContext.swift +19 -30
  439. package/nitrogen/generated/ios/swift/ImageQueryParams.swift +19 -44
  440. package/nitrogen/generated/ios/swift/ImageRowItem.swift +76 -0
  441. package/nitrogen/generated/ios/swift/ImageSource.swift +31 -80
  442. package/nitrogen/generated/ios/swift/IosOutput.swift +7 -26
  443. package/nitrogen/generated/ios/swift/IosOutputType.swift +1 -1
  444. package/nitrogen/generated/ios/swift/MediaRequestConfig.swift +162 -301
  445. package/nitrogen/generated/ios/swift/MediaTransformParams.swift +5 -24
  446. package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +143 -232
  447. package/nitrogen/generated/ios/swift/NativeRouteEntry.swift +81 -178
  448. package/nitrogen/generated/ios/swift/NativeUpdateOptions.swift +53 -125
  449. package/nitrogen/generated/ios/swift/NavigationError.swift +23 -53
  450. package/nitrogen/generated/ios/swift/NavigationErrorEvent.swift +3 -16
  451. package/nitrogen/generated/ios/swift/NavigationErrorType.swift +1 -1
  452. package/nitrogen/generated/ios/swift/NitroAndroidUpdateOptions.swift +44 -112
  453. package/nitrogen/generated/ios/swift/NotificationButton.swift +1 -1
  454. package/nitrogen/generated/ios/swift/NotificationButtonLayout.swift +18 -85
  455. package/nitrogen/generated/ios/swift/NowPlayingMetadata.swift +109 -227
  456. package/nitrogen/generated/ios/swift/NowPlayingUpdate.swift +19 -44
  457. package/nitrogen/generated/ios/swift/Options.swift +32 -88
  458. package/nitrogen/generated/ios/swift/PartialAndroidSetupPlayerOptions.swift +101 -201
  459. package/nitrogen/generated/ios/swift/PartialIOSSetupPlayerOptions.swift +25 -85
  460. package/nitrogen/generated/ios/swift/PartialSetupPlayerOptions.swift +35 -91
  461. package/nitrogen/generated/ios/swift/PercentageRating.swift +3 -10
  462. package/nitrogen/generated/ios/swift/Playback.swift +5 -24
  463. package/nitrogen/generated/ios/swift/PlaybackActiveTrackChangedEvent.swift +25 -66
  464. package/nitrogen/generated/ios/swift/PlaybackError.swift +5 -18
  465. package/nitrogen/generated/ios/swift/PlaybackErrorEvent.swift +3 -16
  466. package/nitrogen/generated/ios/swift/PlaybackPlayWhenReadyChangedEvent.swift +3 -10
  467. package/nitrogen/generated/ios/swift/PlaybackProgressUpdatedEvent.swift +9 -34
  468. package/nitrogen/generated/ios/swift/PlaybackQueueEndedEvent.swift +5 -18
  469. package/nitrogen/generated/ios/swift/PlaybackState.swift +1 -1
  470. package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +109 -254
  471. package/nitrogen/generated/ios/swift/PlayingState.swift +5 -18
  472. package/nitrogen/generated/ios/swift/Progress.swift +7 -26
  473. package/nitrogen/generated/ios/swift/RatingType.swift +1 -1
  474. package/nitrogen/generated/ios/swift/RemoteJumpBackwardEvent.swift +3 -10
  475. package/nitrogen/generated/ios/swift/RemoteJumpForwardEvent.swift +3 -10
  476. package/nitrogen/generated/ios/swift/RemotePlayIdEvent.swift +12 -24
  477. package/nitrogen/generated/ios/swift/RemotePlaySearchEvent.swift +3 -10
  478. package/nitrogen/generated/ios/swift/RemoteSeekEvent.swift +3 -10
  479. package/nitrogen/generated/ios/swift/RemoteSetRatingEvent.swift +21 -39
  480. package/nitrogen/generated/ios/swift/RemoteSkipEvent.swift +3 -10
  481. package/nitrogen/generated/ios/swift/RepeatMode.swift +1 -1
  482. package/nitrogen/generated/ios/swift/RepeatModeChangedEvent.swift +3 -10
  483. package/nitrogen/generated/ios/swift/RequestConfig.swift +82 -191
  484. package/nitrogen/generated/ios/swift/ResolvedTrack.swift +164 -333
  485. package/nitrogen/generated/ios/swift/RetryConfig.swift +12 -24
  486. package/nitrogen/generated/ios/swift/SearchMode.swift +1 -1
  487. package/nitrogen/generated/ios/swift/SearchParams.swift +50 -129
  488. package/nitrogen/generated/ios/swift/SleepTimer.swift +1 -1
  489. package/nitrogen/generated/ios/swift/SleepTimerEndOfTrack.swift +3 -10
  490. package/nitrogen/generated/ios/swift/SleepTimerTime.swift +3 -10
  491. package/nitrogen/generated/ios/swift/StarRating.swift +3 -10
  492. package/nitrogen/generated/ios/swift/ThumbsRating.swift +3 -10
  493. package/nitrogen/generated/ios/swift/TimedMetadata.swift +46 -107
  494. package/nitrogen/generated/ios/swift/Track.swift +151 -319
  495. package/nitrogen/generated/ios/swift/TrackLoadEvent.swift +45 -0
  496. package/nitrogen/generated/ios/swift/TrackMetadata.swift +145 -338
  497. package/nitrogen/generated/ios/swift/TrackStyle.swift +1 -1
  498. package/nitrogen/generated/ios/swift/TransformableRequestConfig.swift +128 -252
  499. package/nitrogen/generated/ios/swift/UpdateOptions.swift +53 -125
  500. package/nitrogen/generated/ios/swift/Variant_Bool_AndroidAudioOffloadSettings.swift +1 -1
  501. package/nitrogen/generated/ios/swift/Variant_Bool_RetryConfig.swift +1 -1
  502. package/nitrogen/generated/ios/swift/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.swift +1 -1
  503. package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +1 -1
  504. package/nitrogen/generated/ios/swift/Variant_NullType_NotificationButtonLayout.swift +1 -1
  505. package/nitrogen/generated/shared/c++/AndroidAudioContentType.hpp +1 -1
  506. package/nitrogen/generated/shared/c++/AndroidAudioOffloadSettings.hpp +16 -8
  507. package/nitrogen/generated/shared/c++/AndroidOptions.hpp +25 -17
  508. package/nitrogen/generated/shared/c++/AndroidPlayerWakeMode.hpp +1 -1
  509. package/nitrogen/generated/shared/c++/AndroidUpdateOptions.hpp +25 -17
  510. package/nitrogen/generated/shared/c++/AppKilledPlaybackBehavior.hpp +1 -1
  511. package/nitrogen/generated/shared/c++/ArtworkRequestConfig.hpp +43 -35
  512. package/nitrogen/generated/shared/c++/BatteryOptimizationStatus.hpp +1 -1
  513. package/nitrogen/generated/shared/c++/BatteryOptimizationStatusChangedEvent.hpp +13 -5
  514. package/nitrogen/generated/shared/c++/BatteryWarningPendingChangedEvent.hpp +13 -5
  515. package/nitrogen/generated/shared/c++/BrowseError.hpp +13 -5
  516. package/nitrogen/generated/shared/c++/BrowserSourceCallbackParam.hpp +16 -8
  517. package/nitrogen/generated/shared/c++/CarPlayNowPlayingButton.hpp +1 -1
  518. package/nitrogen/generated/shared/c++/CarPlaySiriListButtonPosition.hpp +76 -0
  519. package/nitrogen/generated/shared/c++/ChapterMetadata.hpp +22 -14
  520. package/nitrogen/generated/shared/c++/EqualizerSettings.hpp +34 -26
  521. package/nitrogen/generated/shared/c++/FavoriteChangedEvent.hpp +16 -8
  522. package/nitrogen/generated/shared/c++/FormatNavigationErrorParams.hpp +19 -11
  523. package/nitrogen/generated/shared/c++/FormattedNavigationError.hpp +16 -8
  524. package/nitrogen/generated/shared/c++/HeartRating.hpp +13 -5
  525. package/nitrogen/generated/shared/c++/HttpMethod.hpp +1 -1
  526. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +1 -5
  527. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +1 -8
  528. package/nitrogen/generated/shared/c++/IOSCategory.hpp +1 -1
  529. package/nitrogen/generated/shared/c++/IOSCategoryMode.hpp +1 -1
  530. package/nitrogen/generated/shared/c++/IOSCategoryOptions.hpp +1 -1
  531. package/nitrogen/generated/shared/c++/IOSCategoryPolicy.hpp +1 -1
  532. package/nitrogen/generated/shared/c++/ImageContext.hpp +16 -8
  533. package/nitrogen/generated/shared/c++/ImageQueryParams.hpp +16 -8
  534. package/nitrogen/generated/shared/c++/ImageRowItem.hpp +98 -0
  535. package/nitrogen/generated/shared/c++/ImageSource.hpp +22 -14
  536. package/nitrogen/generated/shared/c++/IosOutput.hpp +19 -11
  537. package/nitrogen/generated/shared/c++/IosOutputType.hpp +1 -1
  538. package/nitrogen/generated/shared/c++/MediaRequestConfig.hpp +40 -32
  539. package/nitrogen/generated/shared/c++/MediaTransformParams.hpp +16 -8
  540. package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +50 -35
  541. package/nitrogen/generated/shared/c++/NativeRouteEntry.hpp +34 -26
  542. package/nitrogen/generated/shared/c++/NativeUpdateOptions.hpp +28 -20
  543. package/nitrogen/generated/shared/c++/NavigationError.hpp +22 -14
  544. package/nitrogen/generated/shared/c++/NavigationErrorEvent.hpp +13 -5
  545. package/nitrogen/generated/shared/c++/NavigationErrorType.hpp +1 -1
  546. package/nitrogen/generated/shared/c++/NitroAndroidUpdateOptions.hpp +25 -17
  547. package/nitrogen/generated/shared/c++/NotificationButton.hpp +1 -1
  548. package/nitrogen/generated/shared/c++/NotificationButtonLayout.hpp +25 -17
  549. package/nitrogen/generated/shared/c++/NowPlayingMetadata.hpp +40 -32
  550. package/nitrogen/generated/shared/c++/NowPlayingUpdate.hpp +16 -8
  551. package/nitrogen/generated/shared/c++/Options.hpp +28 -20
  552. package/nitrogen/generated/shared/c++/PartialAndroidSetupPlayerOptions.hpp +40 -32
  553. package/nitrogen/generated/shared/c++/PartialIOSSetupPlayerOptions.hpp +25 -17
  554. package/nitrogen/generated/shared/c++/PartialSetupPlayerOptions.hpp +22 -14
  555. package/nitrogen/generated/shared/c++/PercentageRating.hpp +13 -5
  556. package/nitrogen/generated/shared/c++/Playback.hpp +16 -8
  557. package/nitrogen/generated/shared/c++/PlaybackActiveTrackChangedEvent.hpp +25 -17
  558. package/nitrogen/generated/shared/c++/PlaybackError.hpp +16 -8
  559. package/nitrogen/generated/shared/c++/PlaybackErrorEvent.hpp +13 -5
  560. package/nitrogen/generated/shared/c++/PlaybackPlayWhenReadyChangedEvent.hpp +13 -5
  561. package/nitrogen/generated/shared/c++/PlaybackProgressUpdatedEvent.hpp +22 -14
  562. package/nitrogen/generated/shared/c++/PlaybackQueueEndedEvent.hpp +16 -8
  563. package/nitrogen/generated/shared/c++/PlaybackState.hpp +1 -1
  564. package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +46 -38
  565. package/nitrogen/generated/shared/c++/PlayingState.hpp +16 -8
  566. package/nitrogen/generated/shared/c++/Progress.hpp +19 -11
  567. package/nitrogen/generated/shared/c++/RatingType.hpp +1 -1
  568. package/nitrogen/generated/shared/c++/RemoteJumpBackwardEvent.hpp +13 -5
  569. package/nitrogen/generated/shared/c++/RemoteJumpForwardEvent.hpp +13 -5
  570. package/nitrogen/generated/shared/c++/RemotePlayIdEvent.hpp +16 -8
  571. package/nitrogen/generated/shared/c++/RemotePlaySearchEvent.hpp +13 -5
  572. package/nitrogen/generated/shared/c++/RemoteSeekEvent.hpp +13 -5
  573. package/nitrogen/generated/shared/c++/RemoteSetRatingEvent.hpp +13 -5
  574. package/nitrogen/generated/shared/c++/RemoteSkipEvent.hpp +13 -5
  575. package/nitrogen/generated/shared/c++/RepeatMode.hpp +1 -1
  576. package/nitrogen/generated/shared/c++/RepeatModeChangedEvent.hpp +13 -5
  577. package/nitrogen/generated/shared/c++/RequestConfig.hpp +34 -26
  578. package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +79 -57
  579. package/nitrogen/generated/shared/c++/RetryConfig.hpp +16 -8
  580. package/nitrogen/generated/shared/c++/SearchMode.hpp +1 -1
  581. package/nitrogen/generated/shared/c++/SearchParams.hpp +31 -23
  582. package/nitrogen/generated/shared/c++/SleepTimerEndOfTrack.hpp +13 -5
  583. package/nitrogen/generated/shared/c++/SleepTimerTime.hpp +13 -5
  584. package/nitrogen/generated/shared/c++/StarRating.hpp +13 -5
  585. package/nitrogen/generated/shared/c++/ThumbsRating.hpp +13 -5
  586. package/nitrogen/generated/shared/c++/TimedMetadata.hpp +25 -17
  587. package/nitrogen/generated/shared/c++/Track.hpp +70 -54
  588. package/nitrogen/generated/shared/c++/{RemoteLoadEvent.hpp → TrackLoadEvent.hpp} +28 -20
  589. package/nitrogen/generated/shared/c++/TrackMetadata.hpp +58 -50
  590. package/nitrogen/generated/shared/c++/TrackStyle.hpp +1 -1
  591. package/nitrogen/generated/shared/c++/TransformableRequestConfig.hpp +37 -29
  592. package/nitrogen/generated/shared/c++/UpdateOptions.hpp +28 -20
  593. package/package.json +6 -7
  594. package/src/features/browser.ts +1 -0
  595. package/src/features/remoteControls.ts +0 -35
  596. package/src/specs/audio-browser.nitro.ts +0 -3
  597. package/src/types/browser-native.ts +2 -0
  598. package/src/types/browser-nodes.ts +49 -1
  599. package/src/types/browser.ts +36 -0
  600. package/src/web/NativeAudioBrowser.ts +19 -24
  601. package/src/web/SimpleRouter.test.ts +160 -0
  602. package/src/web/SimpleRouter.ts +10 -8
  603. package/nitrogen/generated/android/c++/JFunc_void_RemoteLoadEvent.hpp +0 -89
  604. package/nitrogen/generated/ios/swift/Func_void_RemoteLoadEvent.swift +0 -47
  605. package/nitrogen/generated/ios/swift/RemoteLoadEvent.swift +0 -70
@@ -2,7 +2,7 @@
2
2
  /// TransformableRequestConfig.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -22,6 +22,11 @@
22
22
  #else
23
23
  #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
24
24
  #endif
25
+ #if __has_include(<NitroModules/PropNameIDCache.hpp>)
26
+ #include <NitroModules/PropNameIDCache.hpp>
27
+ #else
28
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
29
+ #endif
25
30
 
26
31
  // Forward declaration of `RequestConfig` to properly resolve imports.
27
32
  namespace margelo::nitro::audiobrowser { struct RequestConfig; }
@@ -41,7 +46,7 @@ namespace margelo::nitro::audiobrowser {
41
46
  /**
42
47
  * A struct which can be represented as a JavaScript object (TransformableRequestConfig).
43
48
  */
44
- struct TransformableRequestConfig {
49
+ struct TransformableRequestConfig final {
45
50
  public:
46
51
  std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<RequestConfig>>>>(const RequestConfig& /* request */, const std::optional<std::unordered_map<std::string, std::string>>& /* routeParams */)>> transform SWIFT_PRIVATE;
47
52
  std::optional<HttpMethod> method SWIFT_PRIVATE;
@@ -56,6 +61,9 @@ namespace margelo::nitro::audiobrowser {
56
61
  public:
57
62
  TransformableRequestConfig() = default;
58
63
  explicit TransformableRequestConfig(std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<RequestConfig>>>>(const RequestConfig& /* request */, const std::optional<std::unordered_map<std::string, std::string>>& /* routeParams */)>> transform, std::optional<HttpMethod> method, std::optional<std::string> path, std::optional<std::string> baseUrl, std::optional<std::unordered_map<std::string, std::string>> headers, std::optional<std::unordered_map<std::string, std::string>> query, std::optional<std::string> body, std::optional<std::string> contentType, std::optional<std::string> userAgent): transform(transform), method(method), path(path), baseUrl(baseUrl), headers(headers), query(query), body(body), contentType(contentType), userAgent(userAgent) {}
64
+
65
+ public:
66
+ // TransformableRequestConfig is not equatable because these properties are not equatable: transform
59
67
  };
60
68
 
61
69
  } // namespace margelo::nitro::audiobrowser
@@ -68,28 +76,28 @@ namespace margelo::nitro {
68
76
  static inline margelo::nitro::audiobrowser::TransformableRequestConfig fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
69
77
  jsi::Object obj = arg.asObject(runtime);
70
78
  return margelo::nitro::audiobrowser::TransformableRequestConfig(
71
- JSIConverter<std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<margelo::nitro::audiobrowser::RequestConfig>>>>(const margelo::nitro::audiobrowser::RequestConfig&, const std::optional<std::unordered_map<std::string, std::string>>&)>>>::fromJSI(runtime, obj.getProperty(runtime, "transform")),
72
- JSIConverter<std::optional<margelo::nitro::audiobrowser::HttpMethod>>::fromJSI(runtime, obj.getProperty(runtime, "method")),
73
- JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "path")),
74
- JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "baseUrl")),
75
- JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, "headers")),
76
- JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, "query")),
77
- JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "body")),
78
- JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "contentType")),
79
- JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "userAgent"))
79
+ JSIConverter<std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<margelo::nitro::audiobrowser::RequestConfig>>>>(const margelo::nitro::audiobrowser::RequestConfig&, const std::optional<std::unordered_map<std::string, std::string>>&)>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "transform"))),
80
+ JSIConverter<std::optional<margelo::nitro::audiobrowser::HttpMethod>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "method"))),
81
+ JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "path"))),
82
+ JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "baseUrl"))),
83
+ JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "headers"))),
84
+ JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "query"))),
85
+ JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "body"))),
86
+ JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "contentType"))),
87
+ JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "userAgent")))
80
88
  );
81
89
  }
82
90
  static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::audiobrowser::TransformableRequestConfig& arg) {
83
91
  jsi::Object obj(runtime);
84
- obj.setProperty(runtime, "transform", JSIConverter<std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<margelo::nitro::audiobrowser::RequestConfig>>>>(const margelo::nitro::audiobrowser::RequestConfig&, const std::optional<std::unordered_map<std::string, std::string>>&)>>>::toJSI(runtime, arg.transform));
85
- obj.setProperty(runtime, "method", JSIConverter<std::optional<margelo::nitro::audiobrowser::HttpMethod>>::toJSI(runtime, arg.method));
86
- obj.setProperty(runtime, "path", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.path));
87
- obj.setProperty(runtime, "baseUrl", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.baseUrl));
88
- obj.setProperty(runtime, "headers", JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::toJSI(runtime, arg.headers));
89
- obj.setProperty(runtime, "query", JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::toJSI(runtime, arg.query));
90
- obj.setProperty(runtime, "body", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.body));
91
- obj.setProperty(runtime, "contentType", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.contentType));
92
- obj.setProperty(runtime, "userAgent", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.userAgent));
92
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "transform"), JSIConverter<std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<margelo::nitro::audiobrowser::RequestConfig>>>>(const margelo::nitro::audiobrowser::RequestConfig&, const std::optional<std::unordered_map<std::string, std::string>>&)>>>::toJSI(runtime, arg.transform));
93
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "method"), JSIConverter<std::optional<margelo::nitro::audiobrowser::HttpMethod>>::toJSI(runtime, arg.method));
94
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "path"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.path));
95
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "baseUrl"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.baseUrl));
96
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "headers"), JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::toJSI(runtime, arg.headers));
97
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "query"), JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::toJSI(runtime, arg.query));
98
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "body"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.body));
99
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "contentType"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.contentType));
100
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "userAgent"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.userAgent));
93
101
  return obj;
94
102
  }
95
103
  static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
@@ -100,15 +108,15 @@ namespace margelo::nitro {
100
108
  if (!nitro::isPlainObject(runtime, obj)) {
101
109
  return false;
102
110
  }
103
- if (!JSIConverter<std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<margelo::nitro::audiobrowser::RequestConfig>>>>(const margelo::nitro::audiobrowser::RequestConfig&, const std::optional<std::unordered_map<std::string, std::string>>&)>>>::canConvert(runtime, obj.getProperty(runtime, "transform"))) return false;
104
- if (!JSIConverter<std::optional<margelo::nitro::audiobrowser::HttpMethod>>::canConvert(runtime, obj.getProperty(runtime, "method"))) return false;
105
- if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "path"))) return false;
106
- if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "baseUrl"))) return false;
107
- if (!JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::canConvert(runtime, obj.getProperty(runtime, "headers"))) return false;
108
- if (!JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::canConvert(runtime, obj.getProperty(runtime, "query"))) return false;
109
- if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "body"))) return false;
110
- if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "contentType"))) return false;
111
- if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "userAgent"))) return false;
111
+ if (!JSIConverter<std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<margelo::nitro::audiobrowser::RequestConfig>>>>(const margelo::nitro::audiobrowser::RequestConfig&, const std::optional<std::unordered_map<std::string, std::string>>&)>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "transform")))) return false;
112
+ if (!JSIConverter<std::optional<margelo::nitro::audiobrowser::HttpMethod>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "method")))) return false;
113
+ if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "path")))) return false;
114
+ if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "baseUrl")))) return false;
115
+ if (!JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "headers")))) return false;
116
+ if (!JSIConverter<std::optional<std::unordered_map<std::string, std::string>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "query")))) return false;
117
+ if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "body")))) return false;
118
+ if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "contentType")))) return false;
119
+ if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "userAgent")))) return false;
112
120
  return true;
113
121
  }
114
122
  };
@@ -2,7 +2,7 @@
2
2
  /// UpdateOptions.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -22,6 +22,11 @@
22
22
  #else
23
23
  #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
24
24
  #endif
25
+ #if __has_include(<NitroModules/PropNameIDCache.hpp>)
26
+ #include <NitroModules/PropNameIDCache.hpp>
27
+ #else
28
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
29
+ #endif
25
30
 
26
31
  // Forward declaration of `AndroidUpdateOptions` to properly resolve imports.
27
32
  namespace margelo::nitro::audiobrowser { struct AndroidUpdateOptions; }
@@ -40,7 +45,7 @@ namespace margelo::nitro::audiobrowser {
40
45
  /**
41
46
  * A struct which can be represented as a JavaScript object (UpdateOptions).
42
47
  */
43
- struct UpdateOptions {
48
+ struct UpdateOptions final {
44
49
  public:
45
50
  std::optional<AndroidUpdateOptions> android SWIFT_PRIVATE;
46
51
  std::optional<double> forwardJumpInterval SWIFT_PRIVATE;
@@ -52,6 +57,9 @@ namespace margelo::nitro::audiobrowser {
52
57
  public:
53
58
  UpdateOptions() = default;
54
59
  explicit UpdateOptions(std::optional<AndroidUpdateOptions> android, std::optional<double> forwardJumpInterval, std::optional<double> backwardJumpInterval, std::optional<std::variant<nitro::NullType, double>> progressUpdateEventInterval, std::optional<PlayerCapabilities> capabilities, std::optional<std::vector<double>> iosPlaybackRates): android(android), forwardJumpInterval(forwardJumpInterval), backwardJumpInterval(backwardJumpInterval), progressUpdateEventInterval(progressUpdateEventInterval), capabilities(capabilities), iosPlaybackRates(iosPlaybackRates) {}
60
+
61
+ public:
62
+ friend bool operator==(const UpdateOptions& lhs, const UpdateOptions& rhs) = default;
55
63
  };
56
64
 
57
65
  } // namespace margelo::nitro::audiobrowser
@@ -64,22 +72,22 @@ namespace margelo::nitro {
64
72
  static inline margelo::nitro::audiobrowser::UpdateOptions fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
65
73
  jsi::Object obj = arg.asObject(runtime);
66
74
  return margelo::nitro::audiobrowser::UpdateOptions(
67
- JSIConverter<std::optional<margelo::nitro::audiobrowser::AndroidUpdateOptions>>::fromJSI(runtime, obj.getProperty(runtime, "android")),
68
- JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, "forwardJumpInterval")),
69
- JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, "backwardJumpInterval")),
70
- JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, "progressUpdateEventInterval")),
71
- JSIConverter<std::optional<margelo::nitro::audiobrowser::PlayerCapabilities>>::fromJSI(runtime, obj.getProperty(runtime, "capabilities")),
72
- JSIConverter<std::optional<std::vector<double>>>::fromJSI(runtime, obj.getProperty(runtime, "iosPlaybackRates"))
75
+ JSIConverter<std::optional<margelo::nitro::audiobrowser::AndroidUpdateOptions>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "android"))),
76
+ JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forwardJumpInterval"))),
77
+ JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "backwardJumpInterval"))),
78
+ JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progressUpdateEventInterval"))),
79
+ JSIConverter<std::optional<margelo::nitro::audiobrowser::PlayerCapabilities>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "capabilities"))),
80
+ JSIConverter<std::optional<std::vector<double>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "iosPlaybackRates")))
73
81
  );
74
82
  }
75
83
  static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::audiobrowser::UpdateOptions& arg) {
76
84
  jsi::Object obj(runtime);
77
- obj.setProperty(runtime, "android", JSIConverter<std::optional<margelo::nitro::audiobrowser::AndroidUpdateOptions>>::toJSI(runtime, arg.android));
78
- obj.setProperty(runtime, "forwardJumpInterval", JSIConverter<std::optional<double>>::toJSI(runtime, arg.forwardJumpInterval));
79
- obj.setProperty(runtime, "backwardJumpInterval", JSIConverter<std::optional<double>>::toJSI(runtime, arg.backwardJumpInterval));
80
- obj.setProperty(runtime, "progressUpdateEventInterval", JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.progressUpdateEventInterval));
81
- obj.setProperty(runtime, "capabilities", JSIConverter<std::optional<margelo::nitro::audiobrowser::PlayerCapabilities>>::toJSI(runtime, arg.capabilities));
82
- obj.setProperty(runtime, "iosPlaybackRates", JSIConverter<std::optional<std::vector<double>>>::toJSI(runtime, arg.iosPlaybackRates));
85
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "android"), JSIConverter<std::optional<margelo::nitro::audiobrowser::AndroidUpdateOptions>>::toJSI(runtime, arg.android));
86
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "forwardJumpInterval"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.forwardJumpInterval));
87
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "backwardJumpInterval"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.backwardJumpInterval));
88
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "progressUpdateEventInterval"), JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::toJSI(runtime, arg.progressUpdateEventInterval));
89
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "capabilities"), JSIConverter<std::optional<margelo::nitro::audiobrowser::PlayerCapabilities>>::toJSI(runtime, arg.capabilities));
90
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "iosPlaybackRates"), JSIConverter<std::optional<std::vector<double>>>::toJSI(runtime, arg.iosPlaybackRates));
83
91
  return obj;
84
92
  }
85
93
  static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
@@ -90,12 +98,12 @@ namespace margelo::nitro {
90
98
  if (!nitro::isPlainObject(runtime, obj)) {
91
99
  return false;
92
100
  }
93
- if (!JSIConverter<std::optional<margelo::nitro::audiobrowser::AndroidUpdateOptions>>::canConvert(runtime, obj.getProperty(runtime, "android"))) return false;
94
- if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, "forwardJumpInterval"))) return false;
95
- if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, "backwardJumpInterval"))) return false;
96
- if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, "progressUpdateEventInterval"))) return false;
97
- if (!JSIConverter<std::optional<margelo::nitro::audiobrowser::PlayerCapabilities>>::canConvert(runtime, obj.getProperty(runtime, "capabilities"))) return false;
98
- if (!JSIConverter<std::optional<std::vector<double>>>::canConvert(runtime, obj.getProperty(runtime, "iosPlaybackRates"))) return false;
101
+ if (!JSIConverter<std::optional<margelo::nitro::audiobrowser::AndroidUpdateOptions>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "android")))) return false;
102
+ if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forwardJumpInterval")))) return false;
103
+ if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "backwardJumpInterval")))) return false;
104
+ if (!JSIConverter<std::optional<std::variant<nitro::NullType, double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progressUpdateEventInterval")))) return false;
105
+ if (!JSIConverter<std::optional<margelo::nitro::audiobrowser::PlayerCapabilities>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "capabilities")))) return false;
106
+ if (!JSIConverter<std::optional<std::vector<double>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "iosPlaybackRates")))) return false;
99
107
  return true;
100
108
  }
101
109
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5stones/react-native-audio-browser",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "react-native-audio-browser is a react native package built with Nitro",
5
5
  "keywords": [
6
6
  "react-native",
@@ -64,19 +64,17 @@
64
64
  "ios:rebuild": "yarn workspace example-native ios:rebuild",
65
65
  "lint": "oxlint --fix",
66
66
  "release": "semantic-release",
67
- "test": "jest",
67
+ "test": "vitest run",
68
68
  "types": "tsc --noEmit"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@react-native-community/cli": "15.0.0-alpha.2",
72
72
  "@semantic-release/changelog": "^6.0.3",
73
73
  "@semantic-release/git": "^10.0.1",
74
- "@types/jest": "^29.5.12",
75
74
  "@types/react": "19.1.1",
76
75
  "conventional-changelog-conventionalcommits": "^9.1.0",
77
76
  "del-cli": "^5.1.0",
78
- "jest": "^29.7.0",
79
- "nitrogen": "^0.33.3",
77
+ "nitrogen": "0.35.0",
80
78
  "oxfmt": "^0.27.0",
81
79
  "oxlint": "^1.42.0",
82
80
  "oxlint-tsgolint": "^0.11.2",
@@ -85,11 +83,12 @@
85
83
  "react-native": "0.83.0",
86
84
  "react-native-builder-bob": "^0.37.0",
87
85
  "react-native-monorepo-config": "^0.3.1",
88
- "react-native-nitro-modules": "0.33.3",
86
+ "react-native-nitro-modules": "0.35.0",
89
87
  "semantic-release": "^24.2.9",
90
88
  "shaka-player": "^4.15.4",
91
89
  "typescript": "^5.8.3",
92
- "typescript-eslint": "^8.46.0"
90
+ "typescript-eslint": "^8.46.0",
91
+ "vitest": "^4.0.18"
93
92
  },
94
93
  "peerDependencies": {
95
94
  "react": "*",
@@ -195,6 +195,7 @@ function toNativeConfig(
195
195
  config.search
196
196
  ),
197
197
  singleTrack: config.singleTrack,
198
+ handleTrackLoad: config.handleTrackLoad,
198
199
  androidControllerOfflineError: config.androidControllerOfflineError,
199
200
  carPlayUpNextButton: config.carPlayUpNextButton,
200
201
  carPlayNowPlayingButtons: config.carPlayNowPlayingButtons,
@@ -4,7 +4,6 @@ import type {
4
4
  StarRating,
5
5
  ThumbsRating
6
6
  } from './rating'
7
- import type { Track } from '../types'
8
7
  import { nativeBrowser } from '../native'
9
8
  import { LazyNativeEmitter } from '../utils/LazyNativeEmitter'
10
9
 
@@ -67,18 +66,6 @@ export interface RemoteSkipEvent {
67
66
  index: number
68
67
  }
69
68
 
70
- /**
71
- * Remote load event, fired when a track is about to be loaded via navigateTrack.
72
- */
73
- export interface RemoteLoadEvent {
74
- /** The track that will be loaded */
75
- track: Track
76
- /** The resolved queue of tracks */
77
- queue: Track[]
78
- /** The index of the track in the queue */
79
- startIndex: number
80
- }
81
-
82
69
  // MARK: - Default Handlers
83
70
 
84
71
  // Install remote control handlers with default behavior immediately when module loads
@@ -234,17 +221,6 @@ export function handleRemoteJumpBackward(
234
221
  nativeBrowser.handleRemoteJumpBackward = callback
235
222
  }
236
223
 
237
- /**
238
- * Sets a custom handler for remote load events, overriding the default track loading behavior.
239
- * When set, navigateTrack() will call this handler instead of auto-loading/playing the track.
240
- * @param callback - Called with the track, queue, and startIndex. Pass undefined to restore default behavior.
241
- */
242
- export function handleRemoteLoad(
243
- callback: ((event: RemoteLoadEvent) => void) | undefined
244
- ) {
245
- nativeBrowser.handleRemoteLoad = callback
246
- }
247
-
248
224
  // MARK: - Event Callbacks (for listening/debugging only)
249
225
  //
250
226
  // Use these functions when you want to LISTEN to remote control events without overriding
@@ -272,17 +248,6 @@ export const onRemoteJumpForward =
272
248
  (cb) => (nativeBrowser.onRemoteJumpForward = cb)
273
249
  )
274
250
 
275
- /**
276
- * Subscribes to remote load events.
277
- * Fires whenever a track is about to be loaded via navigateTrack(),
278
- * regardless of whether handleRemoteLoad is set.
279
- * @param callback - Called with the track, queue, and startIndex
280
- * @returns Cleanup function to unsubscribe
281
- */
282
- export const onRemoteLoad = LazyNativeEmitter.emitterize<RemoteLoadEvent>(
283
- (cb) => (nativeBrowser.onRemoteLoad = cb)
284
- )
285
-
286
251
  /**
287
252
  * Subscribes to remote next events.
288
253
  * @param callback - Called when the user presses the next track button
@@ -43,7 +43,6 @@ import type {
43
43
  RemoteJumpForwardEvent,
44
44
  RemotePlayIdEvent,
45
45
  RemotePlaySearchEvent,
46
- RemoteLoadEvent,
47
46
  RemoteSeekEvent,
48
47
  RemoteSetRatingEvent,
49
48
  RemoteSkipEvent
@@ -139,7 +138,6 @@ export interface AudioBrowser extends HybridObject<{
139
138
  onRemoteJumpBackward: (event: RemoteJumpBackwardEvent) => void
140
139
  onRemoteJumpForward: (event: RemoteJumpForwardEvent) => void
141
140
  onRemoteLike: () => void
142
- onRemoteLoad: (event: RemoteLoadEvent) => void
143
141
  onRemoteNext: () => void
144
142
  onRemotePause: () => void
145
143
  onRemotePlay: () => void
@@ -162,7 +160,6 @@ export interface AudioBrowser extends HybridObject<{
162
160
  | undefined
163
161
  handleRemoteJumpForward: ((event: RemoteJumpForwardEvent) => void) | undefined
164
162
  handleRemoteLike: (() => void) | undefined
165
- handleRemoteLoad: ((event: RemoteLoadEvent) => void) | undefined
166
163
  handleRemoteNext: (() => void) | undefined
167
164
  handleRemotePause: (() => void) | undefined
168
165
  handleRemotePlay: (() => void) | undefined
@@ -11,6 +11,7 @@ import type {
11
11
  BrowserSourceCallback,
12
12
  CarPlayNowPlayingButton,
13
13
  FormatNavigationErrorCallback,
14
+ HandleTrackLoadCallback,
14
15
  MediaRequestConfig,
15
16
  SearchSourceCallback,
16
17
  TransformableRequestConfig
@@ -57,6 +58,7 @@ export interface NativeBrowserConfiguration {
57
58
 
58
59
  // Behavior
59
60
  singleTrack?: boolean
61
+ handleTrackLoad?: HandleTrackLoadCallback
60
62
  androidControllerOfflineError?: boolean
61
63
 
62
64
  // CarPlay options
@@ -1,4 +1,4 @@
1
- import type { HttpMethod } from './browser'
1
+ import type { CarPlaySiriListButtonPosition, HttpMethod } from './browser'
2
2
 
3
3
  export type TrackStyle = 'list' | 'grid'
4
4
 
@@ -29,6 +29,17 @@ export interface ImageSource {
29
29
  // children: Track
30
30
  // }
31
31
 
32
+ export interface ImageRowItem {
33
+ /** Navigation path. Tapping this thumbnail navigates to this URL. */
34
+ url?: string
35
+ /** Artwork URL for the thumbnail image. */
36
+ artwork?: string
37
+ /** Output only — populated by the artwork transform pipeline. */
38
+ readonly artworkSource?: ImageSource
39
+ /** Title of this item. Used for identification and accessibility. */
40
+ title: string
41
+ }
42
+
32
43
  export interface Track {
33
44
  /**
34
45
  * Navigation path. When present, this track is a container (tab, album, playlist, folder)
@@ -55,6 +66,13 @@ export interface Track {
55
66
  * The artwork URL is also returned by native in the `artworkSource` property
56
67
  * for use in an `<Image>` component, which will contain the transformed version
57
68
  * if `artwork` configuration is set in `BrowserConfiguration` or a route.
69
+ *
70
+ * **iOS:** supports {@link https://developer.apple.com/sf-symbols/ | SF Symbols}
71
+ * with the `sf:` prefix and optional color params:
72
+ * `sf:heart.fill?bg=#FF0090&fg=#fff`. `bg` sets the background color
73
+ * (transparent if omitted), `fg` sets the symbol color (black if omitted).
74
+ * On CarPlay, SF Symbols without explicit colors automatically adapt to
75
+ * light/dark mode.
58
76
  */
59
77
  artwork?: string
60
78
 
@@ -144,6 +162,24 @@ export interface Track {
144
162
  * in iOS now playing interfaces.
145
163
  */
146
164
  live?: boolean
165
+
166
+ /**
167
+ * When present, renders this track as a horizontal row of tappable artwork
168
+ * thumbnails instead of a standard list item.
169
+ *
170
+ * - Track.title → row header text
171
+ * - Track.url → navigated when header is tapped (optional)
172
+ * - Each ImageRowItem → one thumbnail in the horizontal row
173
+ *
174
+ * On CarPlay: maps to CPListImageRowItem. Limits visible images by display
175
+ * width (~4-5). Excess silently truncated.
176
+ *
177
+ * On Android Auto: ignored; the parent Track renders as a regular
178
+ * browsable item using its own artwork/title/url.
179
+ *
180
+ * On app side: consumable by React Native UI for horizontal thumbnail layouts.
181
+ */
182
+ imageRow?: ImageRowItem[]
147
183
  }
148
184
 
149
185
  /**
@@ -171,4 +207,16 @@ export interface ResolvedTrack extends Track {
171
207
  * Undefined for leaf tracks (individual songs without children).
172
208
  */
173
209
  children?: Track[]
210
+
211
+ /**
212
+ * Shows the "Ask Siri to Play Audio" assistant cell on the CarPlay list template
213
+ * for this content. Requires an Intents Extension to be configured in the app.
214
+ *
215
+ * - `'top'`: Shows at the top of the list
216
+ * - `'bottom'`: Shows at the bottom of the list
217
+ *
218
+ * @see {@link https://audiobrowser.dev/guide/carplay#siri-voice-search | CarPlay Siri Voice Search guide}
219
+ * @platform ios
220
+ */
221
+ carPlaySiriListButton?: CarPlaySiriListButtonPosition
174
222
  }
@@ -1,6 +1,26 @@
1
1
  import type { NavigationError } from '../features/errors'
2
2
  import type { ResolvedTrack, Track } from './browser-nodes.ts'
3
3
 
4
+ /**
5
+ * Event fired when a track is about to be loaded via navigateTrack.
6
+ */
7
+ export interface TrackLoadEvent {
8
+ /** The track that will be loaded */
9
+ track: Track
10
+ /** The resolved queue of tracks */
11
+ queue: Track[]
12
+ /** The index of the track in the queue */
13
+ startIndex: number
14
+ }
15
+
16
+ /**
17
+ * Callback for handling track load events.
18
+ * When set on BrowserConfiguration, navigateTrack() will call this handler
19
+ * instead of auto-loading/playing the track. The native side awaits completion
20
+ * before proceeding (e.g., showing Now Playing in CarPlay).
21
+ */
22
+ export type HandleTrackLoadCallback = (event: TrackLoadEvent) => Promise<void>
23
+
4
24
  export type BrowserSourceCallbackParam = {
5
25
  path: string
6
26
  routeParams?: Record<string, string>
@@ -650,6 +670,15 @@ export type BrowserConfiguration = {
650
670
  */
651
671
  singleTrack?: boolean
652
672
 
673
+ /**
674
+ * Custom handler for track load events.
675
+ * When set, navigateTrack() will call this handler instead of auto-loading/playing the track.
676
+ * Pass undefined to restore default behavior.
677
+ *
678
+ * @param event - The track load event containing the track, queue, and startIndex
679
+ */
680
+ handleTrackLoad?: HandleTrackLoadCallback
681
+
653
682
  /**
654
683
  * Show an offline error message in external controllers (Android Auto, Wear OS, Automotive)
655
684
  * when network connectivity is lost.
@@ -728,6 +757,13 @@ export type CarPlayNowPlayingButton =
728
757
  | 'favorite'
729
758
  | 'playback-rate'
730
759
 
760
+ /**
761
+ * Position of the "Ask Siri to Play Audio" assistant cell on a CarPlay list template.
762
+ *
763
+ * @platform ios
764
+ */
765
+ export type CarPlaySiriListButtonPosition = 'top' | 'bottom'
766
+
731
767
  /**
732
768
  * Formatted navigation error for display in UI.
733
769
  * Used by CarPlay/Android Auto and available via `useFormattedNavigationError()` for app UI.
@@ -17,7 +17,6 @@ import type {
17
17
  PlaybackPlayWhenReadyChangedEvent,
18
18
  RemoteJumpBackwardEvent,
19
19
  RemoteJumpForwardEvent,
20
- RemoteLoadEvent,
21
20
  RemotePlayIdEvent,
22
21
  RemotePlaySearchEvent,
23
22
  RemoteSeekEvent,
@@ -41,7 +40,7 @@ import type {
41
40
  AudioBrowser as AudioBrowserSpec,
42
41
  IosOutput
43
42
  } from '../specs/audio-browser.nitro'
44
- import type { ResolvedTrack, Track } from '../types'
43
+ import type { ResolvedTrack, Track, TrackLoadEvent } from '../types'
45
44
  import type { NativeBrowserConfiguration } from '../types/browser-native'
46
45
  import { BrowserManager } from './browser/BrowserManager'
47
46
  import { FavoriteManager } from './browser/FavoriteManager'
@@ -163,7 +162,6 @@ export class NativeAudioBrowser
163
162
  onRemoteJumpBackward: (event: RemoteJumpBackwardEvent) => void = () => {}
164
163
  onRemoteJumpForward: (event: RemoteJumpForwardEvent) => void = () => {}
165
164
  onRemoteLike: () => void = () => {}
166
- onRemoteLoad: (event: RemoteLoadEvent) => void = () => {}
167
165
  onRemoteNext: () => void = () => {}
168
166
  onRemotePause: () => void = () => {}
169
167
  onRemotePlay: () => void = () => {}
@@ -198,7 +196,6 @@ export class NativeAudioBrowser
198
196
  | ((event: RemoteJumpForwardEvent) => void)
199
197
  | undefined = undefined
200
198
  handleRemoteLike: (() => void) | undefined = undefined
201
- handleRemoteLoad: ((event: RemoteLoadEvent) => void) | undefined = undefined
202
199
  handleRemoteNext: (() => void) | undefined = undefined
203
200
  handleRemotePause: (() => void) | undefined = undefined
204
201
  handleRemotePlay: (() => void) | undefined = undefined
@@ -353,25 +350,23 @@ export class NativeAudioBrowser
353
350
  }
354
351
 
355
352
  /**
356
- * Centralizes handleRemoteLoad interception logic.
357
- * If handleRemoteLoad is set, calls it (intercepted). Otherwise runs defaultBehavior.
358
- * Always fires onRemoteLoad afterward.
353
+ * Centralizes handleTrackLoad interception logic.
354
+ * If handleTrackLoad is set on configuration, calls it (intercepted). Otherwise runs defaultBehavior.
359
355
  *
360
356
  * @returns true if the handler intercepted, false if defaultBehavior ran
361
357
  */
362
- private handleLoad(
358
+ private async handleLoad(
363
359
  track: Track, queue: Track[], startIndex: number,
364
360
  defaultBehavior: () => void
365
- ): boolean {
366
- const event: RemoteLoadEvent = { track, queue, startIndex }
367
- const handled = !!this.handleRemoteLoad
368
- if (this.handleRemoteLoad) {
369
- this.handleRemoteLoad(event)
370
- } else {
371
- defaultBehavior()
361
+ ): Promise<boolean> {
362
+ const handler = this.configuration.handleTrackLoad
363
+ if (handler) {
364
+ const event: TrackLoadEvent = { track, queue, startIndex }
365
+ await handler(event)
366
+ return true
372
367
  }
373
- this.onRemoteLoad(event)
374
- return handled
368
+ defaultBehavior()
369
+ return false
375
370
  }
376
371
 
377
372
  /**
@@ -382,10 +377,10 @@ export class NativeAudioBrowser
382
377
  * @param parentPath The parent path to check against queueSourcePath
383
378
  * @returns true if successfully skipped to existing track, false otherwise
384
379
  */
385
- private trySkipToExistingQueueTrack(
380
+ private async trySkipToExistingQueueTrack(
386
381
  trackId: string,
387
382
  parentPath: string
388
- ): boolean {
383
+ ): Promise<boolean> {
389
384
  if (parentPath !== this.browserManager.queueSourcePath) {
390
385
  return false
391
386
  }
@@ -397,7 +392,7 @@ export class NativeAudioBrowser
397
392
  return false
398
393
  }
399
394
 
400
- this.handleLoad(queue[index]!, queue, index, () => {
395
+ await this.handleLoad(queue[index]!, queue, index, () => {
401
396
  this.skip(index)
402
397
  this.play()
403
398
  })
@@ -421,7 +416,7 @@ export class NativeAudioBrowser
421
416
  return false
422
417
  }
423
418
 
424
- this.handleLoad(track, result.tracks, result.startIndex, () => {
419
+ await this.handleLoad(track, result.tracks, result.startIndex, () => {
425
420
  this.setQueue(result.tracks, result.startIndex)
426
421
  })
427
422
  return true
@@ -442,7 +437,7 @@ export class NativeAudioBrowser
442
437
  const trackId = BrowserPathHelper.extractTrackId(url)
443
438
 
444
439
  // Optimization: skip to track if already in current queue
445
- if (trackId && this.trySkipToExistingQueueTrack(trackId, parentPath)) {
440
+ if (trackId && await this.trySkipToExistingQueueTrack(trackId, parentPath)) {
446
441
  return
447
442
  }
448
443
 
@@ -452,7 +447,7 @@ export class NativeAudioBrowser
452
447
  }
453
448
 
454
449
  // Fallback: load single track if expansion fails
455
- this.handleLoad(track, [track], 0, () => this.load(track))
450
+ await this.handleLoad(track, [track], 0, () => this.load(track))
456
451
  return
457
452
  }
458
453
 
@@ -466,7 +461,7 @@ export class NativeAudioBrowser
466
461
 
467
462
  // Handle playable track (has src but no URL)
468
463
  if (track.src) {
469
- this.handleLoad(track, [track], 0, () => this.load(track))
464
+ await this.handleLoad(track, [track], 0, () => this.load(track))
470
465
  return
471
466
  }
472
467