@5stones/react-native-audio-browser 0.1.6 → 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 (593) 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 +15 -9
  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 +39 -17
  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/main/java/com/audiobrowser/player/TransformingDataSource.kt +33 -11
  13. package/android/src/test/java/com/audiobrowser/browser/SimpleRouterTest.kt +104 -95
  14. package/ios/Browser/BrowserConfig.swift +31 -5
  15. package/ios/Browser/BrowserManager.swift +98 -23
  16. package/ios/Browser/JsonModels.swift +37 -0
  17. package/ios/CarPlay/CarPlayController.swift +256 -88
  18. package/ios/CarPlay/RNABAudioBrowser.h +23 -0
  19. package/ios/CarPlay/RNABAudioBrowser.m +22 -0
  20. package/ios/CarPlay/RNABMediaIntentHandler.swift +60 -0
  21. package/ios/Extension/ChapterMetadata+AVFoundation.swift +1 -1
  22. package/ios/Extension/CxxVectorConformances.swift +20 -0
  23. package/ios/Extension/TimedMetadata+AVFoundation.swift +5 -5
  24. package/ios/Extension/Track+AVPlayer.swift +5 -6
  25. package/ios/Extension/TrackMetadata+AVFoundation.swift +1 -1
  26. package/ios/HybridAudioBrowser.swift +126 -35
  27. package/ios/Model/MediaURL.swift +2 -1
  28. package/ios/Player/PlayingStateManager.swift +1 -0
  29. package/ios/Player/RetryManager.swift +26 -65
  30. package/ios/Player/SleepTimerManager.swift +6 -8
  31. package/ios/RemoteCommand/RemoteCommandController.swift +6 -0
  32. package/ios/Tests/SimpleRouterTests.swift +139 -0
  33. package/ios/TrackPlayer.swift +71 -53
  34. package/ios/Util/NetworkMonitor.swift +3 -6
  35. package/ios/Util/SFSymbolRenderer.swift +142 -0
  36. package/lib/commonjs/features/browser.js +1 -0
  37. package/lib/commonjs/features/browser.js.map +1 -1
  38. package/lib/commonjs/web/NativeAudioBrowser.js +32 -7
  39. package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
  40. package/lib/commonjs/web/SimpleRouter.js +4 -3
  41. package/lib/commonjs/web/SimpleRouter.js.map +1 -1
  42. package/lib/commonjs/web/SimpleRouter.test.js +174 -0
  43. package/lib/commonjs/web/SimpleRouter.test.js.map +1 -0
  44. package/lib/module/features/browser.js +1 -0
  45. package/lib/module/features/browser.js.map +1 -1
  46. package/lib/module/web/NativeAudioBrowser.js +32 -7
  47. package/lib/module/web/NativeAudioBrowser.js.map +1 -1
  48. package/lib/module/web/SimpleRouter.js +4 -3
  49. package/lib/module/web/SimpleRouter.js.map +1 -1
  50. package/lib/module/web/SimpleRouter.test.js +174 -0
  51. package/lib/module/web/SimpleRouter.test.js.map +1 -0
  52. package/lib/typescript/src/features/browser.d.ts.map +1 -1
  53. package/lib/typescript/src/types/browser-native.d.ts +2 -1
  54. package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
  55. package/lib/typescript/src/types/browser-nodes.d.ts +46 -1
  56. package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
  57. package/lib/typescript/src/types/browser.d.ts +32 -0
  58. package/lib/typescript/src/types/browser.d.ts.map +1 -1
  59. package/lib/typescript/src/web/NativeAudioBrowser.d.ts +7 -0
  60. package/lib/typescript/src/web/NativeAudioBrowser.d.ts.map +1 -1
  61. package/lib/typescript/src/web/SimpleRouter.d.ts.map +1 -1
  62. package/lib/typescript/src/web/SimpleRouter.test.d.ts +2 -0
  63. package/lib/typescript/src/web/SimpleRouter.test.d.ts.map +1 -0
  64. package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +1 -1
  65. package/nitrogen/generated/android/AudioBrowser+autolinking.gradle +1 -1
  66. package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +67 -55
  67. package/nitrogen/generated/android/AudioBrowserOnLoad.hpp +14 -5
  68. package/nitrogen/generated/android/c++/JAndroidAudioContentType.hpp +6 -7
  69. package/nitrogen/generated/android/c++/JAndroidAudioOffloadSettings.hpp +1 -1
  70. package/nitrogen/generated/android/c++/JAndroidOptions.hpp +1 -1
  71. package/nitrogen/generated/android/c++/JAndroidPlayerWakeMode.hpp +4 -5
  72. package/nitrogen/generated/android/c++/JAndroidUpdateOptions.hpp +1 -1
  73. package/nitrogen/generated/android/c++/JAppKilledPlaybackBehavior.hpp +4 -5
  74. package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +4 -1
  75. package/nitrogen/generated/android/c++/JBatteryOptimizationStatus.hpp +4 -5
  76. package/nitrogen/generated/android/c++/JBatteryOptimizationStatusChangedEvent.hpp +1 -1
  77. package/nitrogen/generated/android/c++/JBatteryWarningPendingChangedEvent.hpp +1 -1
  78. package/nitrogen/generated/android/c++/JBrowseError.hpp +1 -1
  79. package/nitrogen/generated/android/c++/JBrowseResult.cpp +1 -1
  80. package/nitrogen/generated/android/c++/JBrowseResult.hpp +7 -3
  81. package/nitrogen/generated/android/c++/JBrowserSourceCallbackParam.hpp +1 -1
  82. package/nitrogen/generated/android/c++/JCarPlayNowPlayingButton.hpp +5 -6
  83. package/nitrogen/generated/android/c++/JCarPlaySiriListButtonPosition.hpp +58 -0
  84. package/nitrogen/generated/android/c++/JChapterMetadata.hpp +1 -1
  85. package/nitrogen/generated/android/c++/JEqualizerSettings.hpp +1 -1
  86. package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +4 -1
  87. package/nitrogen/generated/android/c++/JFormatNavigationErrorParams.hpp +1 -1
  88. package/nitrogen/generated/android/c++/JFormattedNavigationError.hpp +1 -1
  89. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.hpp +1 -1
  90. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.hpp +1 -1
  91. 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
  92. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +4 -1
  93. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.hpp +5 -1
  94. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +3 -1
  95. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +139 -0
  96. package/nitrogen/generated/android/c++/JFunc_void.hpp +1 -1
  97. package/nitrogen/generated/android/c++/JFunc_void_BatteryOptimizationStatusChangedEvent.hpp +1 -1
  98. package/nitrogen/generated/android/c++/JFunc_void_BatteryWarningPendingChangedEvent.hpp +1 -1
  99. package/nitrogen/generated/android/c++/JFunc_void_EqualizerSettings.hpp +1 -1
  100. package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +4 -1
  101. package/nitrogen/generated/android/c++/JFunc_void_IosOutput.hpp +1 -1
  102. package/nitrogen/generated/android/c++/JFunc_void_NavigationErrorEvent.hpp +1 -1
  103. package/nitrogen/generated/android/c++/JFunc_void_NowPlayingMetadata.hpp +1 -1
  104. package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +1 -1
  105. package/nitrogen/generated/android/c++/JFunc_void_Playback.hpp +1 -1
  106. package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +4 -1
  107. package/nitrogen/generated/android/c++/JFunc_void_PlaybackErrorEvent.hpp +1 -1
  108. package/nitrogen/generated/android/c++/JFunc_void_PlaybackPlayWhenReadyChangedEvent.hpp +1 -1
  109. package/nitrogen/generated/android/c++/JFunc_void_PlaybackProgressUpdatedEvent.hpp +1 -1
  110. package/nitrogen/generated/android/c++/JFunc_void_PlaybackQueueEndedEvent.hpp +1 -1
  111. package/nitrogen/generated/android/c++/JFunc_void_PlayingState.hpp +1 -1
  112. package/nitrogen/generated/android/c++/JFunc_void_RemoteJumpBackwardEvent.hpp +1 -1
  113. package/nitrogen/generated/android/c++/JFunc_void_RemoteJumpForwardEvent.hpp +1 -1
  114. package/nitrogen/generated/android/c++/JFunc_void_RemotePlayIdEvent.hpp +1 -1
  115. package/nitrogen/generated/android/c++/JFunc_void_RemotePlaySearchEvent.hpp +1 -1
  116. package/nitrogen/generated/android/c++/JFunc_void_RemoteSeekEvent.hpp +1 -1
  117. package/nitrogen/generated/android/c++/JFunc_void_RemoteSetRatingEvent.hpp +1 -1
  118. package/nitrogen/generated/android/c++/JFunc_void_RemoteSkipEvent.hpp +1 -1
  119. package/nitrogen/generated/android/c++/JFunc_void_RepeatModeChangedEvent.hpp +1 -1
  120. package/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp +1 -1
  121. package/nitrogen/generated/android/c++/JFunc_void_TrackMetadata.hpp +1 -1
  122. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +1 -1
  123. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +1 -1
  124. package/nitrogen/generated/android/c++/JFunc_void_std__optional_FormattedNavigationError_.hpp +1 -1
  125. package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +5 -1
  126. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.hpp +1 -1
  127. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +1 -1
  128. package/nitrogen/generated/android/c++/JFunc_void_std__vector_ChapterMetadata_.hpp +1 -1
  129. package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +3 -1
  130. package/nitrogen/generated/android/c++/JHeartRating.hpp +1 -1
  131. package/nitrogen/generated/android/c++/JHttpMethod.hpp +8 -9
  132. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +230 -206
  133. package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +20 -22
  134. package/nitrogen/generated/android/c++/JIOSCategory.hpp +7 -8
  135. package/nitrogen/generated/android/c++/JIOSCategoryMode.hpp +10 -11
  136. package/nitrogen/generated/android/c++/JIOSCategoryOptions.hpp +8 -9
  137. package/nitrogen/generated/android/c++/JIOSCategoryPolicy.hpp +4 -5
  138. package/nitrogen/generated/android/c++/JImageContext.hpp +1 -1
  139. package/nitrogen/generated/android/c++/JImageQueryParams.hpp +1 -1
  140. package/nitrogen/generated/android/c++/JImageRowItem.hpp +75 -0
  141. package/nitrogen/generated/android/c++/JImageSource.hpp +1 -1
  142. package/nitrogen/generated/android/c++/JIosOutput.hpp +1 -1
  143. package/nitrogen/generated/android/c++/JIosOutputType.hpp +12 -13
  144. package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +4 -1
  145. package/nitrogen/generated/android/c++/JMediaTransformParams.hpp +1 -1
  146. package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +22 -2
  147. package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +5 -1
  148. package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +1 -1
  149. package/nitrogen/generated/android/c++/JNavigationError.hpp +1 -1
  150. package/nitrogen/generated/android/c++/JNavigationErrorEvent.hpp +1 -1
  151. package/nitrogen/generated/android/c++/JNavigationErrorType.hpp +6 -7
  152. package/nitrogen/generated/android/c++/JNitroAndroidUpdateOptions.hpp +1 -1
  153. package/nitrogen/generated/android/c++/JNotificationButton.hpp +6 -7
  154. package/nitrogen/generated/android/c++/JNotificationButtonLayout.hpp +1 -1
  155. package/nitrogen/generated/android/c++/JNowPlayingMetadata.hpp +1 -1
  156. package/nitrogen/generated/android/c++/JNowPlayingUpdate.hpp +1 -1
  157. package/nitrogen/generated/android/c++/JOptions.hpp +1 -1
  158. package/nitrogen/generated/android/c++/JPartialAndroidSetupPlayerOptions.hpp +1 -1
  159. package/nitrogen/generated/android/c++/JPartialIOSSetupPlayerOptions.hpp +1 -1
  160. package/nitrogen/generated/android/c++/JPartialSetupPlayerOptions.hpp +1 -1
  161. package/nitrogen/generated/android/c++/JPercentageRating.hpp +1 -1
  162. package/nitrogen/generated/android/c++/JPlayback.hpp +1 -1
  163. package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +4 -1
  164. package/nitrogen/generated/android/c++/JPlaybackError.hpp +1 -1
  165. package/nitrogen/generated/android/c++/JPlaybackErrorEvent.hpp +1 -1
  166. package/nitrogen/generated/android/c++/JPlaybackPlayWhenReadyChangedEvent.hpp +1 -1
  167. package/nitrogen/generated/android/c++/JPlaybackProgressUpdatedEvent.hpp +1 -1
  168. package/nitrogen/generated/android/c++/JPlaybackQueueEndedEvent.hpp +1 -1
  169. package/nitrogen/generated/android/c++/JPlaybackState.hpp +10 -11
  170. package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +1 -1
  171. package/nitrogen/generated/android/c++/JPlayingState.hpp +1 -1
  172. package/nitrogen/generated/android/c++/JProgress.hpp +1 -1
  173. package/nitrogen/generated/android/c++/JRatingType.hpp +8 -9
  174. package/nitrogen/generated/android/c++/JRemoteJumpBackwardEvent.hpp +1 -1
  175. package/nitrogen/generated/android/c++/JRemoteJumpForwardEvent.hpp +1 -1
  176. package/nitrogen/generated/android/c++/JRemotePlayIdEvent.hpp +1 -1
  177. package/nitrogen/generated/android/c++/JRemotePlaySearchEvent.hpp +1 -1
  178. package/nitrogen/generated/android/c++/JRemoteSeekEvent.hpp +1 -1
  179. package/nitrogen/generated/android/c++/JRemoteSetRatingEvent.hpp +1 -1
  180. package/nitrogen/generated/android/c++/JRemoteSkipEvent.hpp +1 -1
  181. package/nitrogen/generated/android/c++/JRepeatMode.hpp +4 -5
  182. package/nitrogen/generated/android/c++/JRepeatModeChangedEvent.hpp +1 -1
  183. package/nitrogen/generated/android/c++/JRequestConfig.hpp +1 -1
  184. package/nitrogen/generated/android/c++/JResolvedTrack.hpp +34 -4
  185. package/nitrogen/generated/android/c++/JRetryConfig.hpp +1 -1
  186. package/nitrogen/generated/android/c++/JSearchMode.hpp +7 -8
  187. package/nitrogen/generated/android/c++/JSearchParams.hpp +1 -1
  188. package/nitrogen/generated/android/c++/JSleepTimer.cpp +1 -1
  189. package/nitrogen/generated/android/c++/JSleepTimer.hpp +4 -4
  190. package/nitrogen/generated/android/c++/JSleepTimerEndOfTrack.hpp +1 -1
  191. package/nitrogen/generated/android/c++/JSleepTimerTime.hpp +1 -1
  192. package/nitrogen/generated/android/c++/JStarRating.hpp +1 -1
  193. package/nitrogen/generated/android/c++/JThumbsRating.hpp +1 -1
  194. package/nitrogen/generated/android/c++/JTimedMetadata.hpp +1 -1
  195. package/nitrogen/generated/android/c++/JTrack.hpp +29 -4
  196. package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +96 -0
  197. package/nitrogen/generated/android/c++/JTrackMetadata.hpp +1 -1
  198. package/nitrogen/generated/android/c++/JTrackStyle.hpp +3 -4
  199. package/nitrogen/generated/android/c++/JTransformableRequestConfig.hpp +1 -1
  200. package/nitrogen/generated/android/c++/JUpdateOptions.hpp +1 -1
  201. package/nitrogen/generated/android/c++/JVariant_Boolean_AndroidAudioOffloadSettings.cpp +1 -1
  202. package/nitrogen/generated/android/c++/JVariant_Boolean_AndroidAudioOffloadSettings.hpp +3 -3
  203. package/nitrogen/generated/android/c++/JVariant_Boolean_RetryConfig.cpp +1 -1
  204. package/nitrogen/generated/android/c++/JVariant_Boolean_RetryConfig.hpp +3 -3
  205. package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.cpp +1 -1
  206. package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.hpp +5 -5
  207. package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +1 -1
  208. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
  209. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.cpp +1 -1
  210. package/nitrogen/generated/android/c++/JVariant_NullType_NotificationButtonLayout.hpp +3 -3
  211. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioContentType.kt +3 -1
  212. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioOffloadSettings.kt +2 -2
  213. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidOptions.kt +2 -2
  214. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidPlayerWakeMode.kt +3 -1
  215. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidUpdateOptions.kt +2 -2
  216. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AppKilledPlaybackBehavior.kt +3 -1
  217. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ArtworkRequestConfig.kt +2 -2
  218. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AudioBrowserOnLoad.kt +1 -1
  219. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryOptimizationStatus.kt +3 -1
  220. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryOptimizationStatusChangedEvent.kt +2 -2
  221. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BatteryWarningPendingChangedEvent.kt +2 -2
  222. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowseError.kt +2 -2
  223. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowseResult.kt +1 -7
  224. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/BrowserSourceCallbackParam.kt +2 -2
  225. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayNowPlayingButton.kt +3 -1
  226. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlaySiriListButtonPosition.kt +23 -0
  227. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ChapterMetadata.kt +2 -2
  228. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/EqualizerSettings.kt +2 -2
  229. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FavoriteChangedEvent.kt +2 -2
  230. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormatNavigationErrorParams.kt +2 -2
  231. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormattedNavigationError.kt +2 -2
  232. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.kt +1 -1
  233. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.kt +1 -1
  234. 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
  235. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.kt +1 -1
  236. 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
  237. 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
  238. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.kt +80 -0
  239. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void.kt +1 -1
  240. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_BatteryOptimizationStatusChangedEvent.kt +1 -1
  241. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_BatteryWarningPendingChangedEvent.kt +1 -1
  242. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_EqualizerSettings.kt +1 -1
  243. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_FavoriteChangedEvent.kt +1 -1
  244. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_IosOutput.kt +1 -1
  245. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_NavigationErrorEvent.kt +1 -1
  246. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_NowPlayingMetadata.kt +1 -1
  247. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_Options.kt +1 -1
  248. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_Playback.kt +1 -1
  249. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackActiveTrackChangedEvent.kt +1 -1
  250. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackErrorEvent.kt +1 -1
  251. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackPlayWhenReadyChangedEvent.kt +1 -1
  252. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackProgressUpdatedEvent.kt +1 -1
  253. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlaybackQueueEndedEvent.kt +1 -1
  254. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_PlayingState.kt +1 -1
  255. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteJumpBackwardEvent.kt +1 -1
  256. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteJumpForwardEvent.kt +1 -1
  257. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemotePlayIdEvent.kt +1 -1
  258. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemotePlaySearchEvent.kt +1 -1
  259. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSeekEvent.kt +1 -1
  260. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSetRatingEvent.kt +1 -1
  261. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RemoteSkipEvent.kt +1 -1
  262. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_RepeatModeChangedEvent.kt +1 -1
  263. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_TimedMetadata.kt +1 -1
  264. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_TrackMetadata.kt +1 -1
  265. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_bool.kt +1 -1
  266. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_double.kt +1 -1
  267. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_FormattedNavigationError_.kt +1 -1
  268. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_ResolvedTrack_.kt +1 -1
  269. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.kt +1 -1
  270. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__string.kt +1 -1
  271. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__vector_ChapterMetadata_.kt +1 -1
  272. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_std__vector_Track_.kt +1 -1
  273. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HeartRating.kt +2 -2
  274. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HttpMethod.kt +3 -1
  275. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +16 -19
  276. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategory.kt +3 -1
  277. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryMode.kt +3 -1
  278. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryOptions.kt +3 -1
  279. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSCategoryPolicy.kt +3 -1
  280. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageContext.kt +2 -2
  281. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageQueryParams.kt +2 -2
  282. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +47 -0
  283. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageSource.kt +2 -2
  284. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutput.kt +2 -2
  285. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutputType.kt +3 -1
  286. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaRequestConfig.kt +2 -2
  287. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaTransformParams.kt +2 -2
  288. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +9 -6
  289. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeRouteEntry.kt +2 -2
  290. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeUpdateOptions.kt +2 -2
  291. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationError.kt +2 -2
  292. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorEvent.kt +2 -2
  293. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorType.kt +3 -1
  294. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroAndroidUpdateOptions.kt +2 -2
  295. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButton.kt +3 -1
  296. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButtonLayout.kt +2 -2
  297. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingMetadata.kt +2 -2
  298. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingUpdate.kt +2 -2
  299. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Options.kt +2 -2
  300. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialAndroidSetupPlayerOptions.kt +2 -2
  301. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialIOSSetupPlayerOptions.kt +2 -2
  302. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialSetupPlayerOptions.kt +2 -2
  303. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PercentageRating.kt +2 -2
  304. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Playback.kt +2 -2
  305. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackActiveTrackChangedEvent.kt +2 -2
  306. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackError.kt +2 -2
  307. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackErrorEvent.kt +2 -2
  308. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackPlayWhenReadyChangedEvent.kt +2 -2
  309. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackProgressUpdatedEvent.kt +2 -2
  310. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackQueueEndedEvent.kt +2 -2
  311. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackState.kt +3 -1
  312. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
  313. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayingState.kt +2 -2
  314. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Progress.kt +2 -2
  315. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RatingType.kt +3 -1
  316. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteJumpBackwardEvent.kt +2 -2
  317. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteJumpForwardEvent.kt +2 -2
  318. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemotePlayIdEvent.kt +2 -2
  319. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemotePlaySearchEvent.kt +2 -2
  320. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSeekEvent.kt +2 -2
  321. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSetRatingEvent.kt +2 -2
  322. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RemoteSkipEvent.kt +2 -2
  323. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RepeatMode.kt +3 -1
  324. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RepeatModeChangedEvent.kt +2 -2
  325. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RequestConfig.kt +2 -2
  326. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +11 -5
  327. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RetryConfig.kt +2 -2
  328. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchMode.kt +3 -1
  329. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchParams.kt +2 -2
  330. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimer.kt +1 -8
  331. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimerEndOfTrack.kt +2 -2
  332. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SleepTimerTime.kt +2 -2
  333. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StarRating.kt +2 -2
  334. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ThumbsRating.kt +2 -2
  335. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TimedMetadata.kt +2 -2
  336. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +8 -5
  337. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackLoadEvent.kt +44 -0
  338. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackMetadata.kt +2 -2
  339. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackStyle.kt +3 -1
  340. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TransformableRequestConfig.kt +2 -2
  341. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/UpdateOptions.kt +2 -2
  342. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_AndroidAudioOffloadSettings.kt +1 -7
  343. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_RetryConfig.kt +1 -7
  344. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.kt +1 -9
  345. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_NullType_Double.kt +1 -7
  346. package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_NullType_NotificationButtonLayout.kt +1 -7
  347. package/nitrogen/generated/ios/AudioBrowser+autolinking.rb +2 -2
  348. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +23 -6
  349. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +239 -102
  350. package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +10 -1
  351. package/nitrogen/generated/ios/AudioBrowserAutolinking.mm +1 -1
  352. package/nitrogen/generated/ios/AudioBrowserAutolinking.swift +9 -8
  353. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.cpp +1 -1
  354. package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +25 -1
  355. package/nitrogen/generated/ios/swift/AndroidAudioContentType.swift +1 -1
  356. package/nitrogen/generated/ios/swift/AndroidAudioOffloadSettings.swift +19 -44
  357. package/nitrogen/generated/ios/swift/AndroidOptions.swift +30 -74
  358. package/nitrogen/generated/ios/swift/AndroidPlayerWakeMode.swift +1 -1
  359. package/nitrogen/generated/ios/swift/AndroidUpdateOptions.swift +44 -112
  360. package/nitrogen/generated/ios/swift/AppKilledPlaybackBehavior.swift +1 -1
  361. package/nitrogen/generated/ios/swift/ArtworkRequestConfig.swift +152 -303
  362. package/nitrogen/generated/ios/swift/BatteryOptimizationStatus.swift +1 -1
  363. package/nitrogen/generated/ios/swift/BatteryOptimizationStatusChangedEvent.swift +3 -10
  364. package/nitrogen/generated/ios/swift/BatteryWarningPendingChangedEvent.swift +3 -10
  365. package/nitrogen/generated/ios/swift/BrowseError.swift +3 -10
  366. package/nitrogen/generated/ios/swift/BrowseResult.swift +1 -1
  367. package/nitrogen/generated/ios/swift/BrowserSourceCallbackParam.swift +20 -45
  368. package/nitrogen/generated/ios/swift/CarPlayNowPlayingButton.swift +1 -1
  369. package/nitrogen/generated/ios/swift/CarPlaySiriListButtonPosition.swift +40 -0
  370. package/nitrogen/generated/ios/swift/ChapterMetadata.swift +23 -60
  371. package/nitrogen/generated/ios/swift/EqualizerSettings.swift +24 -97
  372. package/nitrogen/generated/ios/swift/FavoriteChangedEvent.swift +5 -18
  373. package/nitrogen/generated/ios/swift/FormatNavigationErrorParams.swift +7 -26
  374. package/nitrogen/generated/ios/swift/FormattedNavigationError.swift +5 -18
  375. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__optional_FormattedNavigationError____FormatNavigationErrorParams.swift +1 -2
  376. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____MediaTransformParams.swift +1 -2
  377. 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
  378. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.swift +1 -2
  379. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.swift +1 -2
  380. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.swift +1 -2
  381. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.swift +61 -0
  382. package/nitrogen/generated/ios/swift/Func_void.swift +1 -2
  383. package/nitrogen/generated/ios/swift/Func_void_BatteryOptimizationStatusChangedEvent.swift +1 -2
  384. package/nitrogen/generated/ios/swift/Func_void_BatteryWarningPendingChangedEvent.swift +1 -2
  385. package/nitrogen/generated/ios/swift/Func_void_EqualizerSettings.swift +1 -2
  386. package/nitrogen/generated/ios/swift/Func_void_FavoriteChangedEvent.swift +1 -2
  387. package/nitrogen/generated/ios/swift/Func_void_IosOutput.swift +1 -2
  388. package/nitrogen/generated/ios/swift/Func_void_NavigationErrorEvent.swift +1 -2
  389. package/nitrogen/generated/ios/swift/Func_void_NowPlayingMetadata.swift +1 -2
  390. package/nitrogen/generated/ios/swift/Func_void_Options.swift +1 -2
  391. package/nitrogen/generated/ios/swift/Func_void_Playback.swift +1 -2
  392. package/nitrogen/generated/ios/swift/Func_void_PlaybackActiveTrackChangedEvent.swift +1 -2
  393. package/nitrogen/generated/ios/swift/Func_void_PlaybackErrorEvent.swift +1 -2
  394. package/nitrogen/generated/ios/swift/Func_void_PlaybackPlayWhenReadyChangedEvent.swift +1 -2
  395. package/nitrogen/generated/ios/swift/Func_void_PlaybackProgressUpdatedEvent.swift +1 -2
  396. package/nitrogen/generated/ios/swift/Func_void_PlaybackQueueEndedEvent.swift +1 -2
  397. package/nitrogen/generated/ios/swift/Func_void_PlayingState.swift +1 -2
  398. package/nitrogen/generated/ios/swift/Func_void_RemoteJumpBackwardEvent.swift +1 -2
  399. package/nitrogen/generated/ios/swift/Func_void_RemoteJumpForwardEvent.swift +1 -2
  400. package/nitrogen/generated/ios/swift/Func_void_RemotePlayIdEvent.swift +1 -2
  401. package/nitrogen/generated/ios/swift/Func_void_RemotePlaySearchEvent.swift +1 -2
  402. package/nitrogen/generated/ios/swift/Func_void_RemoteSeekEvent.swift +1 -2
  403. package/nitrogen/generated/ios/swift/Func_void_RemoteSetRatingEvent.swift +1 -2
  404. package/nitrogen/generated/ios/swift/Func_void_RemoteSkipEvent.swift +1 -2
  405. package/nitrogen/generated/ios/swift/Func_void_RepeatModeChangedEvent.swift +1 -2
  406. package/nitrogen/generated/ios/swift/Func_void_RequestConfig.swift +1 -2
  407. package/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift +1 -2
  408. package/nitrogen/generated/ios/swift/Func_void_TrackMetadata.swift +1 -2
  409. package/nitrogen/generated/ios/swift/Func_void_bool.swift +1 -2
  410. package/nitrogen/generated/ios/swift/Func_void_double.swift +1 -2
  411. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -2
  412. package/nitrogen/generated/ios/swift/Func_void_std__optional_FormattedNavigationError_.swift +1 -2
  413. package/nitrogen/generated/ios/swift/Func_void_std__optional_ResolvedTrack_.swift +1 -2
  414. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__SleepTimerTime__SleepTimerEndOfTrack__.swift +1 -2
  415. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_RequestConfig__.swift +1 -2
  416. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError___.swift +1 -2
  417. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__vector_Track___.swift +1 -2
  418. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_void__.swift +64 -0
  419. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +1 -2
  420. package/nitrogen/generated/ios/swift/Func_void_std__variant_ResolvedTrack__BrowseError_.swift +1 -2
  421. package/nitrogen/generated/ios/swift/Func_void_std__vector_ChapterMetadata_.swift +1 -2
  422. package/nitrogen/generated/ios/swift/Func_void_std__vector_Track_.swift +1 -2
  423. package/nitrogen/generated/ios/swift/HeartRating.swift +3 -10
  424. package/nitrogen/generated/ios/swift/HttpMethod.swift +1 -1
  425. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +3 -4
  426. package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +56 -7
  427. package/nitrogen/generated/ios/swift/IOSCategory.swift +1 -1
  428. package/nitrogen/generated/ios/swift/IOSCategoryMode.swift +1 -1
  429. package/nitrogen/generated/ios/swift/IOSCategoryOptions.swift +1 -1
  430. package/nitrogen/generated/ios/swift/IOSCategoryPolicy.swift +1 -1
  431. package/nitrogen/generated/ios/swift/ImageContext.swift +19 -30
  432. package/nitrogen/generated/ios/swift/ImageQueryParams.swift +19 -44
  433. package/nitrogen/generated/ios/swift/ImageRowItem.swift +76 -0
  434. package/nitrogen/generated/ios/swift/ImageSource.swift +31 -80
  435. package/nitrogen/generated/ios/swift/IosOutput.swift +7 -26
  436. package/nitrogen/generated/ios/swift/IosOutputType.swift +1 -1
  437. package/nitrogen/generated/ios/swift/MediaRequestConfig.swift +162 -301
  438. package/nitrogen/generated/ios/swift/MediaTransformParams.swift +5 -24
  439. package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +143 -232
  440. package/nitrogen/generated/ios/swift/NativeRouteEntry.swift +81 -178
  441. package/nitrogen/generated/ios/swift/NativeUpdateOptions.swift +53 -125
  442. package/nitrogen/generated/ios/swift/NavigationError.swift +23 -53
  443. package/nitrogen/generated/ios/swift/NavigationErrorEvent.swift +3 -16
  444. package/nitrogen/generated/ios/swift/NavigationErrorType.swift +1 -1
  445. package/nitrogen/generated/ios/swift/NitroAndroidUpdateOptions.swift +44 -112
  446. package/nitrogen/generated/ios/swift/NotificationButton.swift +1 -1
  447. package/nitrogen/generated/ios/swift/NotificationButtonLayout.swift +18 -85
  448. package/nitrogen/generated/ios/swift/NowPlayingMetadata.swift +109 -227
  449. package/nitrogen/generated/ios/swift/NowPlayingUpdate.swift +19 -44
  450. package/nitrogen/generated/ios/swift/Options.swift +32 -88
  451. package/nitrogen/generated/ios/swift/PartialAndroidSetupPlayerOptions.swift +101 -201
  452. package/nitrogen/generated/ios/swift/PartialIOSSetupPlayerOptions.swift +25 -85
  453. package/nitrogen/generated/ios/swift/PartialSetupPlayerOptions.swift +35 -91
  454. package/nitrogen/generated/ios/swift/PercentageRating.swift +3 -10
  455. package/nitrogen/generated/ios/swift/Playback.swift +5 -24
  456. package/nitrogen/generated/ios/swift/PlaybackActiveTrackChangedEvent.swift +25 -66
  457. package/nitrogen/generated/ios/swift/PlaybackError.swift +5 -18
  458. package/nitrogen/generated/ios/swift/PlaybackErrorEvent.swift +3 -16
  459. package/nitrogen/generated/ios/swift/PlaybackPlayWhenReadyChangedEvent.swift +3 -10
  460. package/nitrogen/generated/ios/swift/PlaybackProgressUpdatedEvent.swift +9 -34
  461. package/nitrogen/generated/ios/swift/PlaybackQueueEndedEvent.swift +5 -18
  462. package/nitrogen/generated/ios/swift/PlaybackState.swift +1 -1
  463. package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +109 -254
  464. package/nitrogen/generated/ios/swift/PlayingState.swift +5 -18
  465. package/nitrogen/generated/ios/swift/Progress.swift +7 -26
  466. package/nitrogen/generated/ios/swift/RatingType.swift +1 -1
  467. package/nitrogen/generated/ios/swift/RemoteJumpBackwardEvent.swift +3 -10
  468. package/nitrogen/generated/ios/swift/RemoteJumpForwardEvent.swift +3 -10
  469. package/nitrogen/generated/ios/swift/RemotePlayIdEvent.swift +12 -24
  470. package/nitrogen/generated/ios/swift/RemotePlaySearchEvent.swift +3 -10
  471. package/nitrogen/generated/ios/swift/RemoteSeekEvent.swift +3 -10
  472. package/nitrogen/generated/ios/swift/RemoteSetRatingEvent.swift +21 -39
  473. package/nitrogen/generated/ios/swift/RemoteSkipEvent.swift +3 -10
  474. package/nitrogen/generated/ios/swift/RepeatMode.swift +1 -1
  475. package/nitrogen/generated/ios/swift/RepeatModeChangedEvent.swift +3 -10
  476. package/nitrogen/generated/ios/swift/RequestConfig.swift +82 -191
  477. package/nitrogen/generated/ios/swift/ResolvedTrack.swift +164 -333
  478. package/nitrogen/generated/ios/swift/RetryConfig.swift +12 -24
  479. package/nitrogen/generated/ios/swift/SearchMode.swift +1 -1
  480. package/nitrogen/generated/ios/swift/SearchParams.swift +50 -129
  481. package/nitrogen/generated/ios/swift/SleepTimer.swift +1 -1
  482. package/nitrogen/generated/ios/swift/SleepTimerEndOfTrack.swift +3 -10
  483. package/nitrogen/generated/ios/swift/SleepTimerTime.swift +3 -10
  484. package/nitrogen/generated/ios/swift/StarRating.swift +3 -10
  485. package/nitrogen/generated/ios/swift/ThumbsRating.swift +3 -10
  486. package/nitrogen/generated/ios/swift/TimedMetadata.swift +46 -107
  487. package/nitrogen/generated/ios/swift/Track.swift +151 -319
  488. package/nitrogen/generated/ios/swift/TrackLoadEvent.swift +45 -0
  489. package/nitrogen/generated/ios/swift/TrackMetadata.swift +145 -338
  490. package/nitrogen/generated/ios/swift/TrackStyle.swift +1 -1
  491. package/nitrogen/generated/ios/swift/TransformableRequestConfig.swift +128 -252
  492. package/nitrogen/generated/ios/swift/UpdateOptions.swift +53 -125
  493. package/nitrogen/generated/ios/swift/Variant_Bool_AndroidAudioOffloadSettings.swift +1 -1
  494. package/nitrogen/generated/ios/swift/Variant_Bool_RetryConfig.swift +1 -1
  495. package/nitrogen/generated/ios/swift/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.swift +1 -1
  496. package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +1 -1
  497. package/nitrogen/generated/ios/swift/Variant_NullType_NotificationButtonLayout.swift +1 -1
  498. package/nitrogen/generated/shared/c++/AndroidAudioContentType.hpp +1 -1
  499. package/nitrogen/generated/shared/c++/AndroidAudioOffloadSettings.hpp +16 -8
  500. package/nitrogen/generated/shared/c++/AndroidOptions.hpp +25 -17
  501. package/nitrogen/generated/shared/c++/AndroidPlayerWakeMode.hpp +1 -1
  502. package/nitrogen/generated/shared/c++/AndroidUpdateOptions.hpp +25 -17
  503. package/nitrogen/generated/shared/c++/AppKilledPlaybackBehavior.hpp +1 -1
  504. package/nitrogen/generated/shared/c++/ArtworkRequestConfig.hpp +43 -35
  505. package/nitrogen/generated/shared/c++/BatteryOptimizationStatus.hpp +1 -1
  506. package/nitrogen/generated/shared/c++/BatteryOptimizationStatusChangedEvent.hpp +13 -5
  507. package/nitrogen/generated/shared/c++/BatteryWarningPendingChangedEvent.hpp +13 -5
  508. package/nitrogen/generated/shared/c++/BrowseError.hpp +13 -5
  509. package/nitrogen/generated/shared/c++/BrowserSourceCallbackParam.hpp +16 -8
  510. package/nitrogen/generated/shared/c++/CarPlayNowPlayingButton.hpp +1 -1
  511. package/nitrogen/generated/shared/c++/CarPlaySiriListButtonPosition.hpp +76 -0
  512. package/nitrogen/generated/shared/c++/ChapterMetadata.hpp +22 -14
  513. package/nitrogen/generated/shared/c++/EqualizerSettings.hpp +34 -26
  514. package/nitrogen/generated/shared/c++/FavoriteChangedEvent.hpp +16 -8
  515. package/nitrogen/generated/shared/c++/FormatNavigationErrorParams.hpp +19 -11
  516. package/nitrogen/generated/shared/c++/FormattedNavigationError.hpp +16 -8
  517. package/nitrogen/generated/shared/c++/HeartRating.hpp +13 -5
  518. package/nitrogen/generated/shared/c++/HttpMethod.hpp +1 -1
  519. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +1 -1
  520. package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +1 -1
  521. package/nitrogen/generated/shared/c++/IOSCategory.hpp +1 -1
  522. package/nitrogen/generated/shared/c++/IOSCategoryMode.hpp +1 -1
  523. package/nitrogen/generated/shared/c++/IOSCategoryOptions.hpp +1 -1
  524. package/nitrogen/generated/shared/c++/IOSCategoryPolicy.hpp +1 -1
  525. package/nitrogen/generated/shared/c++/ImageContext.hpp +16 -8
  526. package/nitrogen/generated/shared/c++/ImageQueryParams.hpp +16 -8
  527. package/nitrogen/generated/shared/c++/ImageRowItem.hpp +98 -0
  528. package/nitrogen/generated/shared/c++/ImageSource.hpp +22 -14
  529. package/nitrogen/generated/shared/c++/IosOutput.hpp +19 -11
  530. package/nitrogen/generated/shared/c++/IosOutputType.hpp +1 -1
  531. package/nitrogen/generated/shared/c++/MediaRequestConfig.hpp +40 -32
  532. package/nitrogen/generated/shared/c++/MediaTransformParams.hpp +16 -8
  533. package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +50 -35
  534. package/nitrogen/generated/shared/c++/NativeRouteEntry.hpp +34 -26
  535. package/nitrogen/generated/shared/c++/NativeUpdateOptions.hpp +28 -20
  536. package/nitrogen/generated/shared/c++/NavigationError.hpp +22 -14
  537. package/nitrogen/generated/shared/c++/NavigationErrorEvent.hpp +13 -5
  538. package/nitrogen/generated/shared/c++/NavigationErrorType.hpp +1 -1
  539. package/nitrogen/generated/shared/c++/NitroAndroidUpdateOptions.hpp +25 -17
  540. package/nitrogen/generated/shared/c++/NotificationButton.hpp +1 -1
  541. package/nitrogen/generated/shared/c++/NotificationButtonLayout.hpp +25 -17
  542. package/nitrogen/generated/shared/c++/NowPlayingMetadata.hpp +40 -32
  543. package/nitrogen/generated/shared/c++/NowPlayingUpdate.hpp +16 -8
  544. package/nitrogen/generated/shared/c++/Options.hpp +28 -20
  545. package/nitrogen/generated/shared/c++/PartialAndroidSetupPlayerOptions.hpp +40 -32
  546. package/nitrogen/generated/shared/c++/PartialIOSSetupPlayerOptions.hpp +25 -17
  547. package/nitrogen/generated/shared/c++/PartialSetupPlayerOptions.hpp +22 -14
  548. package/nitrogen/generated/shared/c++/PercentageRating.hpp +13 -5
  549. package/nitrogen/generated/shared/c++/Playback.hpp +16 -8
  550. package/nitrogen/generated/shared/c++/PlaybackActiveTrackChangedEvent.hpp +25 -17
  551. package/nitrogen/generated/shared/c++/PlaybackError.hpp +16 -8
  552. package/nitrogen/generated/shared/c++/PlaybackErrorEvent.hpp +13 -5
  553. package/nitrogen/generated/shared/c++/PlaybackPlayWhenReadyChangedEvent.hpp +13 -5
  554. package/nitrogen/generated/shared/c++/PlaybackProgressUpdatedEvent.hpp +22 -14
  555. package/nitrogen/generated/shared/c++/PlaybackQueueEndedEvent.hpp +16 -8
  556. package/nitrogen/generated/shared/c++/PlaybackState.hpp +1 -1
  557. package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +46 -38
  558. package/nitrogen/generated/shared/c++/PlayingState.hpp +16 -8
  559. package/nitrogen/generated/shared/c++/Progress.hpp +19 -11
  560. package/nitrogen/generated/shared/c++/RatingType.hpp +1 -1
  561. package/nitrogen/generated/shared/c++/RemoteJumpBackwardEvent.hpp +13 -5
  562. package/nitrogen/generated/shared/c++/RemoteJumpForwardEvent.hpp +13 -5
  563. package/nitrogen/generated/shared/c++/RemotePlayIdEvent.hpp +16 -8
  564. package/nitrogen/generated/shared/c++/RemotePlaySearchEvent.hpp +13 -5
  565. package/nitrogen/generated/shared/c++/RemoteSeekEvent.hpp +13 -5
  566. package/nitrogen/generated/shared/c++/RemoteSetRatingEvent.hpp +13 -5
  567. package/nitrogen/generated/shared/c++/RemoteSkipEvent.hpp +13 -5
  568. package/nitrogen/generated/shared/c++/RepeatMode.hpp +1 -1
  569. package/nitrogen/generated/shared/c++/RepeatModeChangedEvent.hpp +13 -5
  570. package/nitrogen/generated/shared/c++/RequestConfig.hpp +34 -26
  571. package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +79 -57
  572. package/nitrogen/generated/shared/c++/RetryConfig.hpp +16 -8
  573. package/nitrogen/generated/shared/c++/SearchMode.hpp +1 -1
  574. package/nitrogen/generated/shared/c++/SearchParams.hpp +31 -23
  575. package/nitrogen/generated/shared/c++/SleepTimerEndOfTrack.hpp +13 -5
  576. package/nitrogen/generated/shared/c++/SleepTimerTime.hpp +13 -5
  577. package/nitrogen/generated/shared/c++/StarRating.hpp +13 -5
  578. package/nitrogen/generated/shared/c++/ThumbsRating.hpp +13 -5
  579. package/nitrogen/generated/shared/c++/TimedMetadata.hpp +25 -17
  580. package/nitrogen/generated/shared/c++/Track.hpp +70 -54
  581. package/nitrogen/generated/shared/c++/TrackLoadEvent.hpp +93 -0
  582. package/nitrogen/generated/shared/c++/TrackMetadata.hpp +58 -50
  583. package/nitrogen/generated/shared/c++/TrackStyle.hpp +1 -1
  584. package/nitrogen/generated/shared/c++/TransformableRequestConfig.hpp +37 -29
  585. package/nitrogen/generated/shared/c++/UpdateOptions.hpp +28 -20
  586. package/package.json +6 -7
  587. package/src/features/browser.ts +1 -0
  588. package/src/types/browser-native.ts +2 -0
  589. package/src/types/browser-nodes.ts +49 -1
  590. package/src/types/browser.ts +36 -0
  591. package/src/web/NativeAudioBrowser.ts +33 -9
  592. package/src/web/SimpleRouter.test.ts +160 -0
  593. package/src/web/SimpleRouter.ts +10 -8
@@ -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.1.6",
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,
@@ -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.
@@ -40,7 +40,7 @@ import type {
40
40
  AudioBrowser as AudioBrowserSpec,
41
41
  IosOutput
42
42
  } from '../specs/audio-browser.nitro'
43
- import type { ResolvedTrack, Track } from '../types'
43
+ import type { ResolvedTrack, Track, TrackLoadEvent } from '../types'
44
44
  import type { NativeBrowserConfiguration } from '../types/browser-native'
45
45
  import { BrowserManager } from './browser/BrowserManager'
46
46
  import { FavoriteManager } from './browser/FavoriteManager'
@@ -349,6 +349,26 @@ export class NativeAudioBrowser
349
349
  void this.navigateTrackAsync(track, url)
350
350
  }
351
351
 
352
+ /**
353
+ * Centralizes handleTrackLoad interception logic.
354
+ * If handleTrackLoad is set on configuration, calls it (intercepted). Otherwise runs defaultBehavior.
355
+ *
356
+ * @returns true if the handler intercepted, false if defaultBehavior ran
357
+ */
358
+ private async handleLoad(
359
+ track: Track, queue: Track[], startIndex: number,
360
+ defaultBehavior: () => void
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
367
+ }
368
+ defaultBehavior()
369
+ return false
370
+ }
371
+
352
372
  /**
353
373
  * Attempts to skip to a track already in the current queue.
354
374
  * Used as an optimization to avoid re-expanding the queue.
@@ -357,10 +377,10 @@ export class NativeAudioBrowser
357
377
  * @param parentPath The parent path to check against queueSourcePath
358
378
  * @returns true if successfully skipped to existing track, false otherwise
359
379
  */
360
- private trySkipToExistingQueueTrack(
380
+ private async trySkipToExistingQueueTrack(
361
381
  trackId: string,
362
382
  parentPath: string
363
- ): boolean {
383
+ ): Promise<boolean> {
364
384
  if (parentPath !== this.browserManager.queueSourcePath) {
365
385
  return false
366
386
  }
@@ -372,8 +392,10 @@ export class NativeAudioBrowser
372
392
  return false
373
393
  }
374
394
 
375
- this.skip(index)
376
- this.play()
395
+ await this.handleLoad(queue[index]!, queue, index, () => {
396
+ this.skip(index)
397
+ this.play()
398
+ })
377
399
  return true
378
400
  }
379
401
 
@@ -394,7 +416,9 @@ export class NativeAudioBrowser
394
416
  return false
395
417
  }
396
418
 
397
- this.setQueue(result.tracks, result.startIndex)
419
+ await this.handleLoad(track, result.tracks, result.startIndex, () => {
420
+ this.setQueue(result.tracks, result.startIndex)
421
+ })
398
422
  return true
399
423
  }
400
424
 
@@ -413,7 +437,7 @@ export class NativeAudioBrowser
413
437
  const trackId = BrowserPathHelper.extractTrackId(url)
414
438
 
415
439
  // Optimization: skip to track if already in current queue
416
- if (trackId && this.trySkipToExistingQueueTrack(trackId, parentPath)) {
440
+ if (trackId && await this.trySkipToExistingQueueTrack(trackId, parentPath)) {
417
441
  return
418
442
  }
419
443
 
@@ -423,7 +447,7 @@ export class NativeAudioBrowser
423
447
  }
424
448
 
425
449
  // Fallback: load single track if expansion fails
426
- this.load(track)
450
+ await this.handleLoad(track, [track], 0, () => this.load(track))
427
451
  return
428
452
  }
429
453
 
@@ -437,7 +461,7 @@ export class NativeAudioBrowser
437
461
 
438
462
  // Handle playable track (has src but no URL)
439
463
  if (track.src) {
440
- this.load(track)
464
+ await this.handleLoad(track, [track], 0, () => this.load(track))
441
465
  return
442
466
  }
443
467