@legendapp/spark 0.0.1-next.2

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 (669) hide show
  1. package/README.md +21 -0
  2. package/app.ts +1 -0
  3. package/audio.ts +1 -0
  4. package/auth-session.ts +1 -0
  5. package/bin/spark.cjs +5 -0
  6. package/clipboard.ts +1 -0
  7. package/config-plugin.cjs +1 -0
  8. package/config.cjs +1 -0
  9. package/config.d.cts +1 -0
  10. package/context-menu.ts +1 -0
  11. package/dialogs.ts +2 -0
  12. package/drag-drop.ts +1 -0
  13. package/expo-config.cjs +1 -0
  14. package/expo-metro.cjs +1 -0
  15. package/files.ts +1 -0
  16. package/global-shortcuts.ts +1 -0
  17. package/init-template.cjs +2 -0
  18. package/links.ts +1 -0
  19. package/menus.ts +1 -0
  20. package/message-dialog.ts +1 -0
  21. package/metro-gate.cjs +1 -0
  22. package/metro.cjs +1 -0
  23. package/native.cjs +1 -0
  24. package/notifications.ts +1 -0
  25. package/package.json +161 -0
  26. package/processes.ts +1 -0
  27. package/runtime-entry.cjs +1 -0
  28. package/schema.json +305 -0
  29. package/secure-storage.ts +1 -0
  30. package/settings.ts +1 -0
  31. package/shortcuts.ts +1 -0
  32. package/sqlite.ts +1 -0
  33. package/system.ts +1 -0
  34. package/tray.ts +1 -0
  35. package/ui-uniwind.ts +1 -0
  36. package/ui.ts +1 -0
  37. package/universal.cjs +1 -0
  38. package/updates.ts +1 -0
  39. package/vendor/node_modules/@legendapp/spark-audio/RNSparkAudio.podspec +18 -0
  40. package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.h +4 -0
  41. package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.mm +154 -0
  42. package/vendor/node_modules/@legendapp/spark-audio/package.json +49 -0
  43. package/vendor/node_modules/@legendapp/spark-audio/src/NativeSparkAudio.ts +3 -0
  44. package/vendor/node_modules/@legendapp/spark-audio/src/desktop.ts +39 -0
  45. package/vendor/node_modules/@legendapp/spark-audio/src/index.android.ts +1 -0
  46. package/vendor/node_modules/@legendapp/spark-audio/src/index.ios.ts +1 -0
  47. package/vendor/node_modules/@legendapp/spark-audio/src/index.ts +1 -0
  48. package/vendor/node_modules/@legendapp/spark-audio/src/index.web.ts +42 -0
  49. package/vendor/node_modules/@legendapp/spark-audio/src/index.windows.ts +1 -0
  50. package/vendor/node_modules/@legendapp/spark-audio/src/media-session-unavailable.ts +5 -0
  51. package/vendor/node_modules/@legendapp/spark-audio/src/media-session.ts +25 -0
  52. package/vendor/node_modules/@legendapp/spark-audio/src/media-session.web.ts +35 -0
  53. package/vendor/node_modules/@legendapp/spark-audio/src/media-types.ts +32 -0
  54. package/vendor/node_modules/@legendapp/spark-audio/src/mobile.ts +38 -0
  55. package/vendor/node_modules/@legendapp/spark-audio/src/status-listeners.ts +22 -0
  56. package/vendor/node_modules/@legendapp/spark-audio/src/types.ts +21 -0
  57. package/vendor/node_modules/@legendapp/spark-audio/windows/ExperimentalFeatures.props +33 -0
  58. package/vendor/node_modules/@legendapp/spark-audio/windows/LICENSE +25 -0
  59. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/ReactPackageProvider.cpp +20 -0
  60. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/ReactPackageProvider.h +24 -0
  61. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/ReactPackageProvider.idl +9 -0
  62. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.cpp +2 -0
  63. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.def +3 -0
  64. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.h +146 -0
  65. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.rc +0 -0
  66. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.vcxproj +143 -0
  67. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.vcxproj.filters +44 -0
  68. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/pch.cpp +1 -0
  69. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/pch.h +30 -0
  70. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/resource.h +5 -0
  71. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/targetver.h +8 -0
  72. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio.sln +43 -0
  73. package/vendor/node_modules/@legendapp/spark-auth-session/package.json +41 -0
  74. package/vendor/node_modules/@legendapp/spark-auth-session/src/core.ts +68 -0
  75. package/vendor/node_modules/@legendapp/spark-auth-session/src/index.android.ts +1 -0
  76. package/vendor/node_modules/@legendapp/spark-auth-session/src/index.ios.ts +1 -0
  77. package/vendor/node_modules/@legendapp/spark-auth-session/src/index.ts +22 -0
  78. package/vendor/node_modules/@legendapp/spark-auth-session/src/index.web.ts +1 -0
  79. package/vendor/node_modules/@legendapp/spark-auth-session/src/mobile.ts +52 -0
  80. package/vendor/node_modules/@legendapp/spark-auth-session/src/types.ts +38 -0
  81. package/vendor/node_modules/@legendapp/spark-cli/dist/add-desktop.js +164 -0
  82. package/vendor/node_modules/@legendapp/spark-cli/dist/build-mode.js +7 -0
  83. package/vendor/node_modules/@legendapp/spark-cli/dist/build.js +278 -0
  84. package/vendor/node_modules/@legendapp/spark-cli/dist/commands.js +107 -0
  85. package/vendor/node_modules/@legendapp/spark-cli/dist/create.js +99 -0
  86. package/vendor/node_modules/@legendapp/spark-cli/dist/credentials.js +69 -0
  87. package/vendor/node_modules/@legendapp/spark-cli/dist/dev-command.js +81 -0
  88. package/vendor/node_modules/@legendapp/spark-cli/dist/dev.js +408 -0
  89. package/vendor/node_modules/@legendapp/spark-cli/dist/examples.js +43 -0
  90. package/vendor/node_modules/@legendapp/spark-cli/dist/executable.js +19 -0
  91. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-dev-extension.cjs +51 -0
  92. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-dev-patch.cjs +38 -0
  93. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-dev-preload.cjs +19 -0
  94. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-metro.cjs +41 -0
  95. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-native.cjs +10 -0
  96. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-node.js +21 -0
  97. package/vendor/node_modules/@legendapp/spark-cli/dist/go-profile.js +20 -0
  98. package/vendor/node_modules/@legendapp/spark-cli/dist/helpers.js +79 -0
  99. package/vendor/node_modules/@legendapp/spark-cli/dist/index.js +263 -0
  100. package/vendor/node_modules/@legendapp/spark-cli/dist/init-template.cjs +25 -0
  101. package/vendor/node_modules/@legendapp/spark-cli/dist/local.js +124 -0
  102. package/vendor/node_modules/@legendapp/spark-cli/dist/macos-release.js +7 -0
  103. package/vendor/node_modules/@legendapp/spark-cli/dist/metro-gate.cjs +33 -0
  104. package/vendor/node_modules/@legendapp/spark-cli/dist/metro.cjs +63 -0
  105. package/vendor/node_modules/@legendapp/spark-cli/dist/metro.js +25 -0
  106. package/vendor/node_modules/@legendapp/spark-cli/dist/npm-bin/npm +6 -0
  107. package/vendor/node_modules/@legendapp/spark-cli/dist/npm-bin/npm.cmd +1 -0
  108. package/vendor/node_modules/@legendapp/spark-cli/dist/pack-archive.js +23 -0
  109. package/vendor/node_modules/@legendapp/spark-cli/dist/package-manager.js +45 -0
  110. package/vendor/node_modules/@legendapp/spark-cli/dist/package.js +199 -0
  111. package/vendor/node_modules/@legendapp/spark-cli/dist/platform.js +34 -0
  112. package/vendor/node_modules/@legendapp/spark-cli/dist/process.js +57 -0
  113. package/vendor/node_modules/@legendapp/spark-cli/dist/project.js +324 -0
  114. package/vendor/node_modules/@legendapp/spark-cli/dist/release.js +42 -0
  115. package/vendor/node_modules/@legendapp/spark-cli/dist/release.json +37 -0
  116. package/vendor/node_modules/@legendapp/spark-cli/dist/runner-install.js +138 -0
  117. package/vendor/node_modules/@legendapp/spark-cli/dist/runtime-entry.cjs +1 -0
  118. package/vendor/node_modules/@legendapp/spark-cli/dist/sdk-install.js +66 -0
  119. package/vendor/node_modules/@legendapp/spark-cli/dist/sdk-transfer.js +113 -0
  120. package/vendor/node_modules/@legendapp/spark-cli/dist/session-status.js +22 -0
  121. package/vendor/node_modules/@legendapp/spark-cli/dist/signing.js +175 -0
  122. package/vendor/node_modules/@legendapp/spark-cli/dist/universal.cjs +28 -0
  123. package/vendor/node_modules/@legendapp/spark-cli/dist/updates.js +110 -0
  124. package/vendor/node_modules/@legendapp/spark-cli/dist/windows-associations.js +45 -0
  125. package/vendor/node_modules/@legendapp/spark-cli/dist/windows-associations.ps1 +57 -0
  126. package/vendor/node_modules/@legendapp/spark-cli/dist/windows-geometry.js +33 -0
  127. package/vendor/node_modules/@legendapp/spark-cli/dist/windows-metro.js +112 -0
  128. package/vendor/node_modules/@legendapp/spark-cli/dist/windows.js +141 -0
  129. package/vendor/node_modules/@legendapp/spark-cli/package.json +22 -0
  130. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/App.tsx +29 -0
  131. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/app.json +11 -0
  132. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/assets/icon.png +0 -0
  133. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/desktop.config.json +19 -0
  134. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/gitignore +8 -0
  135. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/index.ts +5 -0
  136. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/metro.config.js +3 -0
  137. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/package.json +55 -0
  138. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/tsconfig.json +10 -0
  139. package/vendor/node_modules/@legendapp/spark-cli/templates/diff-lite/App.tsx +34 -0
  140. package/vendor/node_modules/@legendapp/spark-cli/templates/diff-lite/Git.macos.tsx +13 -0
  141. package/vendor/node_modules/@legendapp/spark-cli/templates/diff-lite/Git.tsx +1 -0
  142. package/vendor/node_modules/@legendapp/spark-cli/templates/diff-lite/compare.ts +12 -0
  143. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/App.tsx +34 -0
  144. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.macos.tsx +57 -0
  145. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.tsx +13 -0
  146. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.web.tsx +14 -0
  147. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.windows.tsx +57 -0
  148. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/document.ts +58 -0
  149. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.desktop.ts +24 -0
  150. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.macos.ts +7 -0
  151. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.ts +31 -0
  152. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.web.ts +21 -0
  153. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.windows.ts +1 -0
  154. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/sessions.ts +8 -0
  155. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/useDocument.ts +6 -0
  156. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.desktop.tsx +31 -0
  157. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.macos.tsx +1 -0
  158. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.tsx +14 -0
  159. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.web.tsx +20 -0
  160. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.windows.tsx +1 -0
  161. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/OpenFiles.desktop.tsx +28 -0
  162. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/OpenFiles.macos.tsx +1 -0
  163. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/OpenFiles.tsx +2 -0
  164. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/OpenFiles.windows.tsx +1 -0
  165. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/document.ts +58 -0
  166. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.desktop.ts +24 -0
  167. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.macos.ts +7 -0
  168. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.ts +31 -0
  169. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.web.ts +21 -0
  170. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.windows.ts +1 -0
  171. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/lifecycle-types.ts +10 -0
  172. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/lifetime.ts +23 -0
  173. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/records.ts +51 -0
  174. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/storage.ts +6 -0
  175. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/useModel.ts +6 -0
  176. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/Activation.desktop.tsx +4 -0
  177. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/Activation.macos.tsx +1 -0
  178. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/Activation.tsx +1 -0
  179. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/Activation.windows.tsx +1 -0
  180. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/App.tsx +38 -0
  181. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.desktop.ts +7 -0
  182. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.macos.ts +1 -0
  183. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.ts +18 -0
  184. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.web.ts +37 -0
  185. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.windows.ts +1 -0
  186. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/model.ts +91 -0
  187. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/store.ts +10 -0
  188. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Activation.desktop.tsx +5 -0
  189. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Activation.macos.tsx +1 -0
  190. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Activation.tsx +1 -0
  191. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Activation.windows.tsx +1 -0
  192. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/App.tsx +92 -0
  193. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Desktop.desktop.ts +25 -0
  194. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Desktop.macos.ts +1 -0
  195. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Desktop.ts +7 -0
  196. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Desktop.windows.ts +1 -0
  197. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Theme.tsx +17 -0
  198. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/model.ts +61 -0
  199. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/search.ts +3 -0
  200. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/session.ts +16 -0
  201. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/store.ts +4 -0
  202. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/window-session.ts +62 -0
  203. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/App.tsx +57 -0
  204. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/app.json +15 -0
  205. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/assets/icon.png +0 -0
  206. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/desktop.config.json +62 -0
  207. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/gitignore +10 -0
  208. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/global.css +31 -0
  209. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/index.ts +4 -0
  210. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/metro.config.js +7 -0
  211. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/package.json +70 -0
  212. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/react-native.config.js +2 -0
  213. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/tsconfig.json +10 -0
  214. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/uniwind-types.d.ts +10 -0
  215. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/App.tsx +16 -0
  216. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/app.json +11 -0
  217. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/assets/icon.png +0 -0
  218. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/desktop.config.json +10 -0
  219. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/gitignore +8 -0
  220. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/index.ts +3 -0
  221. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/metro.config.js +3 -0
  222. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/package.json +56 -0
  223. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/react-native.config.js +2 -0
  224. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/tsconfig.json +10 -0
  225. package/vendor/node_modules/@legendapp/spark-clipboard/RNDesktopClipboard.podspec +16 -0
  226. package/vendor/node_modules/@legendapp/spark-clipboard/macos/RNDesktopClipboard.h +4 -0
  227. package/vendor/node_modules/@legendapp/spark-clipboard/macos/RNDesktopClipboard.mm +87 -0
  228. package/vendor/node_modules/@legendapp/spark-clipboard/package.json +52 -0
  229. package/vendor/node_modules/@legendapp/spark-clipboard/react-native.config.js +6 -0
  230. package/vendor/node_modules/@legendapp/spark-clipboard/src/NativeDesktopClipboard.ts +6 -0
  231. package/vendor/node_modules/@legendapp/spark-clipboard/src/desktop.ts +39 -0
  232. package/vendor/node_modules/@legendapp/spark-clipboard/src/expo.ts +12 -0
  233. package/vendor/node_modules/@legendapp/spark-clipboard/src/formats.ts +1 -0
  234. package/vendor/node_modules/@legendapp/spark-clipboard/src/index.android.ts +1 -0
  235. package/vendor/node_modules/@legendapp/spark-clipboard/src/index.ios.ts +1 -0
  236. package/vendor/node_modules/@legendapp/spark-clipboard/src/index.ts +1 -0
  237. package/vendor/node_modules/@legendapp/spark-clipboard/src/index.web.ts +1 -0
  238. package/vendor/node_modules/@legendapp/spark-clipboard/src/index.windows.ts +1 -0
  239. package/vendor/node_modules/@legendapp/spark-clipboard/windows/ExperimentalFeatures.props +33 -0
  240. package/vendor/node_modules/@legendapp/spark-clipboard/windows/LICENSE +25 -0
  241. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/ReactPackageProvider.cpp +20 -0
  242. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/ReactPackageProvider.h +24 -0
  243. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/ReactPackageProvider.idl +9 -0
  244. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.cpp +2 -0
  245. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.def +3 -0
  246. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.h +119 -0
  247. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.rc +0 -0
  248. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.vcxproj +143 -0
  249. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.vcxproj.filters +44 -0
  250. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/pch.cpp +1 -0
  251. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/pch.h +30 -0
  252. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/resource.h +5 -0
  253. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/targetver.h +8 -0
  254. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard.sln +43 -0
  255. package/vendor/node_modules/@legendapp/spark-context-menu/RNContextMenu.podspec +16 -0
  256. package/vendor/node_modules/@legendapp/spark-context-menu/macos/RNContextMenu.h +9 -0
  257. package/vendor/node_modules/@legendapp/spark-context-menu/macos/RNContextMenu.mm +160 -0
  258. package/vendor/node_modules/@legendapp/spark-context-menu/package.json +46 -0
  259. package/vendor/node_modules/@legendapp/spark-context-menu/react-native.config.js +6 -0
  260. package/vendor/node_modules/@legendapp/spark-context-menu/src/NativeContextMenu.ts +8 -0
  261. package/vendor/node_modules/@legendapp/spark-context-menu/src/index.ts +29 -0
  262. package/vendor/node_modules/@legendapp/spark-context-menu/windows/ExperimentalFeatures.props +33 -0
  263. package/vendor/node_modules/@legendapp/spark-context-menu/windows/LICENSE +25 -0
  264. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/ReactPackageProvider.cpp +20 -0
  265. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/ReactPackageProvider.h +24 -0
  266. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/ReactPackageProvider.idl +9 -0
  267. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.cpp +2 -0
  268. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.def +3 -0
  269. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.h +112 -0
  270. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.rc +0 -0
  271. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.vcxproj +143 -0
  272. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.vcxproj.filters +44 -0
  273. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/pch.cpp +1 -0
  274. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/pch.h +30 -0
  275. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/resource.h +5 -0
  276. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/targetver.h +8 -0
  277. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu.sln +43 -0
  278. package/vendor/node_modules/@legendapp/spark-desktop-app/RNDesktopApp.podspec +15 -0
  279. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/RNDesktopApp.h +4 -0
  280. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/RNDesktopApp.mm +34 -0
  281. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.h +23 -0
  282. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.mm +135 -0
  283. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkWindow.mm +81 -0
  284. package/vendor/node_modules/@legendapp/spark-desktop-app/package.json +39 -0
  285. package/vendor/node_modules/@legendapp/spark-desktop-app/react-native.config.js +6 -0
  286. package/vendor/node_modules/@legendapp/spark-desktop-app/src/NativeDesktopApp.ts +8 -0
  287. package/vendor/node_modules/@legendapp/spark-desktop-app/src/api.ts +42 -0
  288. package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.ts +1 -0
  289. package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.windows.ts +1 -0
  290. package/vendor/node_modules/@legendapp/spark-desktop-config/app.plugin.cjs +75 -0
  291. package/vendor/node_modules/@legendapp/spark-desktop-config/config.cjs +161 -0
  292. package/vendor/node_modules/@legendapp/spark-desktop-config/config.d.cts +13 -0
  293. package/vendor/node_modules/@legendapp/spark-desktop-config/entitlements.cjs +23 -0
  294. package/vendor/node_modules/@legendapp/spark-desktop-config/expo.cjs +26 -0
  295. package/vendor/node_modules/@legendapp/spark-desktop-config/fabric-lifecycle.cjs +125 -0
  296. package/vendor/node_modules/@legendapp/spark-desktop-config/helpers.cjs +20 -0
  297. package/vendor/node_modules/@legendapp/spark-desktop-config/identity.cjs +28 -0
  298. package/vendor/node_modules/@legendapp/spark-desktop-config/keyboard-events.cjs +44 -0
  299. package/vendor/node_modules/@legendapp/spark-desktop-config/package.json +19 -0
  300. package/vendor/node_modules/@legendapp/spark-desktop-config/schema.json +305 -0
  301. package/vendor/node_modules/@legendapp/spark-desktop-config/updates.cjs +24 -0
  302. package/vendor/node_modules/@legendapp/spark-desktop-config/windows.plugin.cjs +72 -0
  303. package/vendor/node_modules/@legendapp/spark-desktop-host/AppDelegate.mm +79 -0
  304. package/vendor/node_modules/@legendapp/spark-desktop-host/package.json +13 -0
  305. package/vendor/node_modules/@legendapp/spark-desktop-host/windows/SparkComponentGeometry.h +9 -0
  306. package/vendor/node_modules/@legendapp/spark-desktop-host/windows/application.inc +647 -0
  307. package/vendor/node_modules/@legendapp/spark-desktop-host/windows/notifications.inc +60 -0
  308. package/vendor/node_modules/@legendapp/spark-desktop-host/windows/runtime.inc +63 -0
  309. package/vendor/node_modules/@legendapp/spark-desktop-host/windows/runtimes.inc +162 -0
  310. package/vendor/node_modules/@legendapp/spark-desktop-links/RNDesktopLinks.podspec +17 -0
  311. package/vendor/node_modules/@legendapp/spark-desktop-links/common/AuthLoopback.h +121 -0
  312. package/vendor/node_modules/@legendapp/spark-desktop-links/macos/RNDesktopLinks.h +4 -0
  313. package/vendor/node_modules/@legendapp/spark-desktop-links/macos/RNDesktopLinks.mm +79 -0
  314. package/vendor/node_modules/@legendapp/spark-desktop-links/package.json +53 -0
  315. package/vendor/node_modules/@legendapp/spark-desktop-links/react-native.config.js +6 -0
  316. package/vendor/node_modules/@legendapp/spark-desktop-links/src/NativeDesktopLinks.ts +6 -0
  317. package/vendor/node_modules/@legendapp/spark-desktop-links/src/api.ts +37 -0
  318. package/vendor/node_modules/@legendapp/spark-desktop-links/src/expo.ts +5 -0
  319. package/vendor/node_modules/@legendapp/spark-desktop-links/src/index.android.ts +1 -0
  320. package/vendor/node_modules/@legendapp/spark-desktop-links/src/index.ios.ts +1 -0
  321. package/vendor/node_modules/@legendapp/spark-desktop-links/src/index.ts +1 -0
  322. package/vendor/node_modules/@legendapp/spark-desktop-links/src/index.web.ts +1 -0
  323. package/vendor/node_modules/@legendapp/spark-desktop-links/src/index.windows.ts +1 -0
  324. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/ExperimentalFeatures.props +33 -0
  325. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/LICENSE +25 -0
  326. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/ReactPackageProvider.cpp +20 -0
  327. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/ReactPackageProvider.h +24 -0
  328. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/ReactPackageProvider.idl +9 -0
  329. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.cpp +2 -0
  330. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.def +3 -0
  331. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.h +128 -0
  332. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.rc +0 -0
  333. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.vcxproj +143 -0
  334. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.vcxproj.filters +44 -0
  335. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/pch.cpp +1 -0
  336. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/pch.h +30 -0
  337. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/resource.h +5 -0
  338. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/targetver.h +8 -0
  339. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks.sln +43 -0
  340. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/RNDesktopShortcuts.podspec +16 -0
  341. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/RNDesktopShortcuts.h +4 -0
  342. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/RNDesktopShortcuts.mm +56 -0
  343. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/package.json +43 -0
  344. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/NativeDesktopShortcuts.ts +8 -0
  345. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/accelerator.ts +22 -0
  346. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/api.ts +20 -0
  347. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/index.ts +1 -0
  348. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/index.windows.ts +1 -0
  349. package/vendor/node_modules/@legendapp/spark-desktop-windows/RNDesktopWindows.podspec +17 -0
  350. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/RNDesktopWindows.h +4 -0
  351. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/RNDesktopWindows.mm +210 -0
  352. package/vendor/node_modules/@legendapp/spark-desktop-windows/package.json +44 -0
  353. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/NativeDesktopWindowManager.ts +6 -0
  354. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/api.ts +79 -0
  355. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.ts +1 -0
  356. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.windows.ts +1 -0
  357. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows-options.ts +11 -0
  358. package/vendor/node_modules/@legendapp/spark-drag-drop/RNDesktopDrag.podspec +20 -0
  359. package/vendor/node_modules/@legendapp/spark-drag-drop/macos/RNDesktopDragView.h +4 -0
  360. package/vendor/node_modules/@legendapp/spark-drag-drop/macos/RNDesktopDragView.mm +94 -0
  361. package/vendor/node_modules/@legendapp/spark-drag-drop/package.json +44 -0
  362. package/vendor/node_modules/@legendapp/spark-drag-drop/react-native.config.js +6 -0
  363. package/vendor/node_modules/@legendapp/spark-drag-drop/src/DesktopDragViewNativeComponent.ts +16 -0
  364. package/vendor/node_modules/@legendapp/spark-drag-drop/src/contracts.ts +28 -0
  365. package/vendor/node_modules/@legendapp/spark-drag-drop/src/index.tsx +17 -0
  366. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/ExperimentalFeatures.props +33 -0
  367. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/LICENSE +25 -0
  368. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/ReactPackageProvider.cpp +21 -0
  369. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/ReactPackageProvider.h +24 -0
  370. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/ReactPackageProvider.idl +9 -0
  371. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.cpp +2 -0
  372. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.def +3 -0
  373. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.h +209 -0
  374. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.rc +0 -0
  375. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.vcxproj +143 -0
  376. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.vcxproj.filters +44 -0
  377. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/pch.cpp +1 -0
  378. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/pch.h +30 -0
  379. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/resource.h +5 -0
  380. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/targetver.h +8 -0
  381. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop.sln +43 -0
  382. package/vendor/node_modules/@legendapp/spark-file-dialog/RNFileDialog.podspec +17 -0
  383. package/vendor/node_modules/@legendapp/spark-file-dialog/ios/RNFileDialog.h +9 -0
  384. package/vendor/node_modules/@legendapp/spark-file-dialog/ios/RNFileDialog.mm +259 -0
  385. package/vendor/node_modules/@legendapp/spark-file-dialog/package.json +43 -0
  386. package/vendor/node_modules/@legendapp/spark-file-dialog/src/NativeFileDialog.ts +13 -0
  387. package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.ts +89 -0
  388. package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.windows.ts +15 -0
  389. package/vendor/node_modules/@legendapp/spark-file-dialog/src/options.ts +16 -0
  390. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/ExperimentalFeatures.props +33 -0
  391. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/LICENSE +25 -0
  392. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/ReactPackageProvider.cpp +20 -0
  393. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/ReactPackageProvider.h +24 -0
  394. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/ReactPackageProvider.idl +9 -0
  395. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.cpp +2 -0
  396. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.def +3 -0
  397. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.h +128 -0
  398. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.rc +0 -0
  399. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.vcxproj +143 -0
  400. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.vcxproj.filters +44 -0
  401. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/pch.cpp +1 -0
  402. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/pch.h +30 -0
  403. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/resource.h +5 -0
  404. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/targetver.h +8 -0
  405. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog.sln +43 -0
  406. package/vendor/node_modules/@legendapp/spark-file-system/RNDesktopFileSystem.podspec +17 -0
  407. package/vendor/node_modules/@legendapp/spark-file-system/macos/RNDesktopFileSystem.h +4 -0
  408. package/vendor/node_modules/@legendapp/spark-file-system/macos/RNDesktopFileSystem.mm +211 -0
  409. package/vendor/node_modules/@legendapp/spark-file-system/package.json +47 -0
  410. package/vendor/node_modules/@legendapp/spark-file-system/react-native.config.js +6 -0
  411. package/vendor/node_modules/@legendapp/spark-file-system/src/NativeDesktopFileSystem.ts +8 -0
  412. package/vendor/node_modules/@legendapp/spark-file-system/src/handles.ts +45 -0
  413. package/vendor/node_modules/@legendapp/spark-file-system/src/index.ts +61 -0
  414. package/vendor/node_modules/@legendapp/spark-file-system/src/path.ts +9 -0
  415. package/vendor/node_modules/@legendapp/spark-file-system/windows/ExperimentalFeatures.props +33 -0
  416. package/vendor/node_modules/@legendapp/spark-file-system/windows/LICENSE +25 -0
  417. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/ReactPackageProvider.cpp +20 -0
  418. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/ReactPackageProvider.h +24 -0
  419. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/ReactPackageProvider.idl +9 -0
  420. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.cpp +2 -0
  421. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.def +3 -0
  422. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.h +295 -0
  423. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.rc +0 -0
  424. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.vcxproj +144 -0
  425. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.vcxproj.filters +45 -0
  426. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/Trash.h +52 -0
  427. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/pch.cpp +1 -0
  428. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/pch.h +30 -0
  429. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/resource.h +5 -0
  430. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/targetver.h +8 -0
  431. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem.sln +43 -0
  432. package/vendor/node_modules/@legendapp/spark-global-shortcuts/RNDesktopGlobalShortcuts.podspec +17 -0
  433. package/vendor/node_modules/@legendapp/spark-global-shortcuts/macos/RNDesktopGlobalShortcuts.h +3 -0
  434. package/vendor/node_modules/@legendapp/spark-global-shortcuts/macos/RNDesktopGlobalShortcuts.mm +65 -0
  435. package/vendor/node_modules/@legendapp/spark-global-shortcuts/package.json +46 -0
  436. package/vendor/node_modules/@legendapp/spark-global-shortcuts/react-native.config.js +6 -0
  437. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/NativeDesktopGlobalShortcuts.ts +3 -0
  438. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/accelerator.ts +22 -0
  439. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/index.ts +16 -0
  440. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/ExperimentalFeatures.props +33 -0
  441. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/LICENSE +25 -0
  442. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/ReactPackageProvider.cpp +20 -0
  443. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/ReactPackageProvider.h +24 -0
  444. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/ReactPackageProvider.idl +9 -0
  445. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.cpp +2 -0
  446. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.def +3 -0
  447. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.h +80 -0
  448. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.rc +0 -0
  449. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.vcxproj +143 -0
  450. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.vcxproj.filters +44 -0
  451. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/pch.cpp +1 -0
  452. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/pch.h +30 -0
  453. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/resource.h +5 -0
  454. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/targetver.h +8 -0
  455. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts.sln +43 -0
  456. package/vendor/node_modules/@legendapp/spark-message-dialog/RNDesktopMessageDialog.podspec +17 -0
  457. package/vendor/node_modules/@legendapp/spark-message-dialog/macos/RNDesktopMessageDialog.h +3 -0
  458. package/vendor/node_modules/@legendapp/spark-message-dialog/macos/RNDesktopMessageDialog.mm +36 -0
  459. package/vendor/node_modules/@legendapp/spark-message-dialog/package.json +46 -0
  460. package/vendor/node_modules/@legendapp/spark-message-dialog/react-native.config.js +6 -0
  461. package/vendor/node_modules/@legendapp/spark-message-dialog/src/NativeDesktopMessageDialog.ts +3 -0
  462. package/vendor/node_modules/@legendapp/spark-message-dialog/src/index.ts +13 -0
  463. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/ExperimentalFeatures.props +33 -0
  464. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/LICENSE +25 -0
  465. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/ReactPackageProvider.cpp +20 -0
  466. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/ReactPackageProvider.h +24 -0
  467. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/ReactPackageProvider.idl +9 -0
  468. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/SparkMessageDialog.cpp +2 -0
  469. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/SparkMessageDialog.def +3 -0
  470. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/SparkMessageDialog.h +145 -0
  471. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/SparkMessageDialog.rc +0 -0
  472. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/SparkMessageDialog.vcxproj +143 -0
  473. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/SparkMessageDialog.vcxproj.filters +44 -0
  474. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/pch.cpp +1 -0
  475. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/pch.h +30 -0
  476. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/resource.h +5 -0
  477. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog/targetver.h +8 -0
  478. package/vendor/node_modules/@legendapp/spark-message-dialog/windows/SparkMessageDialog.sln +43 -0
  479. package/vendor/node_modules/@legendapp/spark-native-menu/RNNativeMenu.podspec +17 -0
  480. package/vendor/node_modules/@legendapp/spark-native-menu/ios/RNNativeMenu.h +10 -0
  481. package/vendor/node_modules/@legendapp/spark-native-menu/ios/RNNativeMenu.mm +632 -0
  482. package/vendor/node_modules/@legendapp/spark-native-menu/package.json +41 -0
  483. package/vendor/node_modules/@legendapp/spark-native-menu/src/NativeMenu.ts +13 -0
  484. package/vendor/node_modules/@legendapp/spark-native-menu/src/api.ts +128 -0
  485. package/vendor/node_modules/@legendapp/spark-native-menu/src/index.ts +1 -0
  486. package/vendor/node_modules/@legendapp/spark-native-menu/src/index.windows.ts +1 -0
  487. package/vendor/node_modules/@legendapp/spark-native-menu/src/windows-menus.ts +43 -0
  488. package/vendor/node_modules/@legendapp/spark-notifications/RNDesktopNotifications.podspec +17 -0
  489. package/vendor/node_modules/@legendapp/spark-notifications/macos/RNDesktopNotifications.h +4 -0
  490. package/vendor/node_modules/@legendapp/spark-notifications/macos/RNDesktopNotifications.mm +111 -0
  491. package/vendor/node_modules/@legendapp/spark-notifications/package.json +46 -0
  492. package/vendor/node_modules/@legendapp/spark-notifications/react-native.config.js +6 -0
  493. package/vendor/node_modules/@legendapp/spark-notifications/src/NativeDesktopNotifications.ts +4 -0
  494. package/vendor/node_modules/@legendapp/spark-notifications/src/index.ts +53 -0
  495. package/vendor/node_modules/@legendapp/spark-notifications/windows/ExperimentalFeatures.props +33 -0
  496. package/vendor/node_modules/@legendapp/spark-notifications/windows/LICENSE +25 -0
  497. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/ReactPackageProvider.cpp +20 -0
  498. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/ReactPackageProvider.h +24 -0
  499. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/ReactPackageProvider.idl +9 -0
  500. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.cpp +2 -0
  501. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.def +3 -0
  502. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.h +132 -0
  503. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.rc +0 -0
  504. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.vcxproj +143 -0
  505. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.vcxproj.filters +44 -0
  506. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/pch.cpp +1 -0
  507. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/pch.h +30 -0
  508. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/resource.h +5 -0
  509. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/targetver.h +8 -0
  510. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications.sln +43 -0
  511. package/vendor/node_modules/@legendapp/spark-processes/RNDesktopProcesses.podspec +17 -0
  512. package/vendor/node_modules/@legendapp/spark-processes/macos/RNDesktopProcesses.h +3 -0
  513. package/vendor/node_modules/@legendapp/spark-processes/macos/RNDesktopProcesses.mm +153 -0
  514. package/vendor/node_modules/@legendapp/spark-processes/package.json +46 -0
  515. package/vendor/node_modules/@legendapp/spark-processes/react-native.config.js +6 -0
  516. package/vendor/node_modules/@legendapp/spark-processes/src/NativeDesktopProcesses.ts +3 -0
  517. package/vendor/node_modules/@legendapp/spark-processes/src/index.ts +39 -0
  518. package/vendor/node_modules/@legendapp/spark-processes/windows/ExperimentalFeatures.props +33 -0
  519. package/vendor/node_modules/@legendapp/spark-processes/windows/LICENSE +25 -0
  520. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/ReactPackageProvider.cpp +20 -0
  521. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/ReactPackageProvider.h +24 -0
  522. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/ReactPackageProvider.idl +9 -0
  523. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.cpp +2 -0
  524. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.def +3 -0
  525. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.h +171 -0
  526. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.rc +0 -0
  527. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.vcxproj +143 -0
  528. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.vcxproj.filters +44 -0
  529. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/pch.cpp +1 -0
  530. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/pch.h +30 -0
  531. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/resource.h +5 -0
  532. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/targetver.h +8 -0
  533. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses.sln +43 -0
  534. package/vendor/node_modules/@legendapp/spark-secure-storage/RNDesktopSecureStorage.podspec +17 -0
  535. package/vendor/node_modules/@legendapp/spark-secure-storage/macos/RNDesktopSecureStorage.h +4 -0
  536. package/vendor/node_modules/@legendapp/spark-secure-storage/macos/RNDesktopSecureStorage.mm +53 -0
  537. package/vendor/node_modules/@legendapp/spark-secure-storage/package.json +52 -0
  538. package/vendor/node_modules/@legendapp/spark-secure-storage/react-native.config.js +6 -0
  539. package/vendor/node_modules/@legendapp/spark-secure-storage/src/NativeDesktopSecureStorage.ts +6 -0
  540. package/vendor/node_modules/@legendapp/spark-secure-storage/src/desktop.ts +24 -0
  541. package/vendor/node_modules/@legendapp/spark-secure-storage/src/expo.ts +14 -0
  542. package/vendor/node_modules/@legendapp/spark-secure-storage/src/index.android.ts +1 -0
  543. package/vendor/node_modules/@legendapp/spark-secure-storage/src/index.ios.ts +1 -0
  544. package/vendor/node_modules/@legendapp/spark-secure-storage/src/index.ts +1 -0
  545. package/vendor/node_modules/@legendapp/spark-secure-storage/src/index.web.ts +1 -0
  546. package/vendor/node_modules/@legendapp/spark-secure-storage/src/index.windows.ts +2 -0
  547. package/vendor/node_modules/@legendapp/spark-secure-storage/src/options.ts +6 -0
  548. package/vendor/node_modules/@legendapp/spark-secure-storage/src/unavailable.ts +5 -0
  549. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/ExperimentalFeatures.props +33 -0
  550. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/LICENSE +25 -0
  551. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/ReactPackageProvider.cpp +20 -0
  552. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/ReactPackageProvider.h +24 -0
  553. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/ReactPackageProvider.idl +9 -0
  554. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/SparkSecureStorage.cpp +2 -0
  555. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/SparkSecureStorage.def +3 -0
  556. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/SparkSecureStorage.h +48 -0
  557. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/SparkSecureStorage.rc +0 -0
  558. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/SparkSecureStorage.vcxproj +143 -0
  559. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/SparkSecureStorage.vcxproj.filters +44 -0
  560. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/pch.cpp +1 -0
  561. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/pch.h +30 -0
  562. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/resource.h +5 -0
  563. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage/targetver.h +8 -0
  564. package/vendor/node_modules/@legendapp/spark-secure-storage/windows/SparkSecureStorage.sln +43 -0
  565. package/vendor/node_modules/@legendapp/spark-settings/package.json +13 -0
  566. package/vendor/node_modules/@legendapp/spark-settings/src/filename.ts +1 -0
  567. package/vendor/node_modules/@legendapp/spark-settings/src/filename.windows.ts +9 -0
  568. package/vendor/node_modules/@legendapp/spark-settings/src/index.ts +19 -0
  569. package/vendor/node_modules/@legendapp/spark-settings/src/store.ts +37 -0
  570. package/vendor/node_modules/@legendapp/spark-sqlite/package.json +16 -0
  571. package/vendor/node_modules/@legendapp/spark-sqlite/src/index.ts +7 -0
  572. package/vendor/node_modules/@legendapp/spark-system/RNDesktopSystem.podspec +17 -0
  573. package/vendor/node_modules/@legendapp/spark-system/macos/RNDesktopSystem.h +3 -0
  574. package/vendor/node_modules/@legendapp/spark-system/macos/RNDesktopSystem.mm +108 -0
  575. package/vendor/node_modules/@legendapp/spark-system/package.json +46 -0
  576. package/vendor/node_modules/@legendapp/spark-system/react-native.config.js +6 -0
  577. package/vendor/node_modules/@legendapp/spark-system/src/NativeDesktopSystem.ts +3 -0
  578. package/vendor/node_modules/@legendapp/spark-system/src/index.ts +35 -0
  579. package/vendor/node_modules/@legendapp/spark-system/windows/ExperimentalFeatures.props +33 -0
  580. package/vendor/node_modules/@legendapp/spark-system/windows/LICENSE +25 -0
  581. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/ReactPackageProvider.cpp +20 -0
  582. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/ReactPackageProvider.h +24 -0
  583. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/ReactPackageProvider.idl +9 -0
  584. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.cpp +2 -0
  585. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.def +3 -0
  586. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.h +154 -0
  587. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.rc +0 -0
  588. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.vcxproj +143 -0
  589. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.vcxproj.filters +44 -0
  590. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/pch.cpp +1 -0
  591. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/pch.h +30 -0
  592. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/resource.h +5 -0
  593. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/targetver.h +8 -0
  594. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem.sln +43 -0
  595. package/vendor/node_modules/@legendapp/spark-tray/RNDesktopTray.podspec +17 -0
  596. package/vendor/node_modules/@legendapp/spark-tray/macos/RNDesktopTray.h +4 -0
  597. package/vendor/node_modules/@legendapp/spark-tray/macos/RNDesktopTray.mm +63 -0
  598. package/vendor/node_modules/@legendapp/spark-tray/package.json +46 -0
  599. package/vendor/node_modules/@legendapp/spark-tray/react-native.config.js +6 -0
  600. package/vendor/node_modules/@legendapp/spark-tray/src/NativeDesktopTray.ts +4 -0
  601. package/vendor/node_modules/@legendapp/spark-tray/src/index.ts +46 -0
  602. package/vendor/node_modules/@legendapp/spark-tray/windows/ExperimentalFeatures.props +33 -0
  603. package/vendor/node_modules/@legendapp/spark-tray/windows/LICENSE +25 -0
  604. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/ReactPackageProvider.cpp +20 -0
  605. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/ReactPackageProvider.h +24 -0
  606. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/ReactPackageProvider.idl +9 -0
  607. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.cpp +2 -0
  608. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.def +3 -0
  609. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.h +133 -0
  610. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.rc +0 -0
  611. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.vcxproj +143 -0
  612. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.vcxproj.filters +44 -0
  613. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/pch.cpp +1 -0
  614. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/pch.h +30 -0
  615. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/resource.h +5 -0
  616. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/targetver.h +8 -0
  617. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray.sln +43 -0
  618. package/vendor/node_modules/@legendapp/spark-ui/RNSparkUI.podspec +17 -0
  619. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkButton.h +4 -0
  620. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkButton.mm +51 -0
  621. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkSelect.h +4 -0
  622. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkSelect.mm +53 -0
  623. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkTextInput.h +4 -0
  624. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkTextInput.mm +45 -0
  625. package/vendor/node_modules/@legendapp/spark-ui/package.json +61 -0
  626. package/vendor/node_modules/@legendapp/spark-ui/react-native.config.js +5 -0
  627. package/vendor/node_modules/@legendapp/spark-ui/src/SparkButtonNativeComponent.ts +12 -0
  628. package/vendor/node_modules/@legendapp/spark-ui/src/SparkSelectNativeComponent.ts +10 -0
  629. package/vendor/node_modules/@legendapp/spark-ui/src/SparkTextInputNativeComponent.ts +9 -0
  630. package/vendor/node_modules/@legendapp/spark-ui/src/index.android.tsx +25 -0
  631. package/vendor/node_modules/@legendapp/spark-ui/src/index.ios.tsx +30 -0
  632. package/vendor/node_modules/@legendapp/spark-ui/src/index.tsx +27 -0
  633. package/vendor/node_modules/@legendapp/spark-ui/src/index.web.tsx +23 -0
  634. package/vendor/node_modules/@legendapp/spark-ui/src/index.windows.tsx +42 -0
  635. package/vendor/node_modules/@legendapp/spark-ui/src/select.ts +7 -0
  636. package/vendor/node_modules/@legendapp/spark-ui/src/types.ts +28 -0
  637. package/vendor/node_modules/@legendapp/spark-ui/uniwind.ts +8 -0
  638. package/vendor/node_modules/@legendapp/spark-ui/uniwind.web.ts +17 -0
  639. package/vendor/node_modules/@legendapp/spark-ui/windows/ExperimentalFeatures.props +33 -0
  640. package/vendor/node_modules/@legendapp/spark-ui/windows/LICENSE +25 -0
  641. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/ReactPackageProvider.cpp +21 -0
  642. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/ReactPackageProvider.h +24 -0
  643. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/ReactPackageProvider.idl +9 -0
  644. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkAppearance.h +61 -0
  645. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.cpp +2 -0
  646. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.def +3 -0
  647. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.h +181 -0
  648. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.rc +0 -0
  649. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.vcxproj +144 -0
  650. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.vcxproj.filters +44 -0
  651. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/pch.cpp +1 -0
  652. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/pch.h +30 -0
  653. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/resource.h +5 -0
  654. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/targetver.h +8 -0
  655. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI.sln +43 -0
  656. package/vendor/node_modules/@legendapp/spark-updates/RNDesktopUpdates.podspec +18 -0
  657. package/vendor/node_modules/@legendapp/spark-updates/Sparkle.podspec.json +39 -0
  658. package/vendor/node_modules/@legendapp/spark-updates/macos/RNDesktopUpdates.h +4 -0
  659. package/vendor/node_modules/@legendapp/spark-updates/macos/RNDesktopUpdates.mm +72 -0
  660. package/vendor/node_modules/@legendapp/spark-updates/package.json +44 -0
  661. package/vendor/node_modules/@legendapp/spark-updates/src/NativeDesktopUpdates.ts +4 -0
  662. package/vendor/node_modules/@legendapp/spark-updates/src/index.ts +23 -0
  663. package/vendor/node_modules/@legendapp/spark-webview/package.json +15 -0
  664. package/vendor/node_modules/@legendapp/spark-webview/src/index.ts +2 -0
  665. package/vendor/node_modules/@legendapp/spark-window-options/index.cjs +25 -0
  666. package/vendor/node_modules/@legendapp/spark-window-options/index.d.ts +12 -0
  667. package/vendor/node_modules/@legendapp/spark-window-options/package.json +12 -0
  668. package/webview.ts +1 -0
  669. package/windows.ts +1 -0
@@ -0,0 +1,154 @@
1
+ #import "RNSparkAudio.h"
2
+ #import <AVFoundation/AVFoundation.h>
3
+ #import <MediaPlayer/MediaPlayer.h>
4
+ @interface RNSparkAudio ()
5
+ @property NSMutableDictionary<NSString *, AVPlayer *> *players;
6
+ @property NSString *activeID;
7
+ @property NSMutableDictionary<NSString *, NSDictionary *> *metadata;
8
+ @property NSMutableDictionary<NSString *, id> *targets;
9
+ @property NSString *sessionID;
10
+ @property NSMutableDictionary *session;
11
+ @property NSMutableArray *commands;
12
+ @property NSUInteger artworkGeneration;
13
+ @end
14
+ static NSDictionary *MediaInfo(NSDictionary *metadata) {
15
+ NSMutableDictionary *info = [NSMutableDictionary new];
16
+ if (metadata[@"title"]) info[MPMediaItemPropertyTitle] = metadata[@"title"];
17
+ if (metadata[@"artist"]) info[MPMediaItemPropertyArtist] = metadata[@"artist"];
18
+ if (metadata[@"albumTitle"]) info[MPMediaItemPropertyAlbumTitle] = metadata[@"albumTitle"];
19
+ return info;
20
+ }
21
+ static NSDictionary<NSString *, MPRemoteCommand *> *RemoteCommands() {
22
+ MPRemoteCommandCenter *center = MPRemoteCommandCenter.sharedCommandCenter;
23
+ return @{ @"play": center.playCommand, @"pause": center.pauseCommand, @"nextTrack": center.nextTrackCommand,
24
+ @"previousTrack": center.previousTrackCommand, @"seekTo": center.changePlaybackPositionCommand };
25
+ }
26
+ @interface RNSparkAudio ()
27
+ @end
28
+ @implementation RNSparkAudio
29
+ RCT_EXPORT_MODULE(NativeSparkAudio)
30
+ + (BOOL)requiresMainQueueSetup { return YES; }
31
+ - (instancetype)init { if (self = [super init]) {
32
+ _players = [NSMutableDictionary new];
33
+ _metadata = [NSMutableDictionary new]; _targets = [NSMutableDictionary new]; _commands = [NSMutableArray new];
34
+ __weak RNSparkAudio *weakSelf = self;
35
+ [RemoteCommands() enumerateKeysAndObjectsUsingBlock:^(NSString *name, MPRemoteCommand *command, BOOL *stop) {
36
+ command.enabled = [@[@"play", @"pause", @"seekTo"] containsObject:name];
37
+ self.targets[name] = [command addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) {
38
+ RNSparkAudio *owner = weakSelf;
39
+ if (!owner) return MPRemoteCommandHandlerStatusNoSuchContent;
40
+ // Deliver on the main queue, serial with session updates and disposal.
41
+ dispatch_async(dispatch_get_main_queue(), ^{
42
+ if (owner.sessionID) {
43
+ if (![owner.session[@"commands"] containsObject:name]) return;
44
+ NSMutableDictionary *value = [@{@"command": name} mutableCopy];
45
+ if ([event isKindOfClass:MPChangePlaybackPositionCommandEvent.class]) value[@"position"] = @(((MPChangePlaybackPositionCommandEvent *)event).positionTime);
46
+ if (owner.commands.count < 128) [owner.commands addObject:value];
47
+ } else {
48
+ AVPlayer *player = owner.players[owner.activeID ?: @""];
49
+ if ([name isEqual:@"play"]) [player play];
50
+ else if ([name isEqual:@"pause"]) [player pause];
51
+ else if ([event isKindOfClass:MPChangePlaybackPositionCommandEvent.class]) [player seekToTime:CMTimeMakeWithSeconds(((MPChangePlaybackPositionCommandEvent *)event).positionTime, 600)];
52
+ }
53
+ });
54
+ return MPRemoteCommandHandlerStatusSuccess;
55
+ }];
56
+ }];
57
+ } return self; }
58
+ - (void)publishMetadata:(NSDictionary *)metadata {
59
+ NSMutableDictionary *info = [MediaInfo(metadata) mutableCopy];
60
+ MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = info;
61
+ NSUInteger generation = ++self.artworkGeneration;
62
+ NSString *artwork = metadata[@"artworkUrl"];
63
+ if (!artwork.length) return;
64
+ NSURL *url = [artwork hasPrefix:@"/"] ? [NSURL fileURLWithPath:artwork] : [NSURL URLWithString:artwork];
65
+ __weak RNSparkAudio *weakSelf = self;
66
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{
67
+ NSData *data = [NSData dataWithContentsOfURL:url];
68
+ NSImage *image = data ? [[NSImage alloc] initWithData:data] : nil;
69
+ dispatch_async(dispatch_get_main_queue(), ^{
70
+ RNSparkAudio *owner = weakSelf;
71
+ if (!owner || generation != owner.artworkGeneration || !image) return;
72
+ NSMutableDictionary *current = [MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo mutableCopy];
73
+ current[MPMediaItemPropertyArtwork] = [[MPMediaItemArtwork alloc] initWithBoundsSize:image.size requestHandler:^NSImage *(CGSize size) { return image; }];
74
+ MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = current;
75
+ });
76
+ });
77
+ }
78
+ - (void)publishSession {
79
+ NSMutableDictionary *info = [MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo mutableCopy] ?: [NSMutableDictionary new];
80
+ info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = self.session[@"position"] ?: @0;
81
+ info[MPMediaItemPropertyPlaybackDuration] = self.session[@"duration"] ?: @0;
82
+ BOOL playing = [self.session[@"playbackState"] isEqual:@"playing"];
83
+ info[MPNowPlayingInfoPropertyPlaybackRate] = playing ? (self.session[@"playbackRate"] ?: @1) : @0;
84
+ MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = info;
85
+ MPNowPlayingInfoCenter.defaultCenter.playbackState = playing ? MPNowPlayingPlaybackStatePlaying : [self.session[@"playbackState"] isEqual:@"stopped"] ? MPNowPlayingPlaybackStateStopped : MPNowPlayingPlaybackStatePaused;
86
+ [RemoteCommands() enumerateKeysAndObjectsUsingBlock:^(NSString *key, MPRemoteCommand *command, BOOL *stop) { command.enabled = [self.session[@"commands"] containsObject:key]; }];
87
+ }
88
+ - (void)call:(NSString *)method args:(NSString *)json resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
89
+ dispatch_async(dispatch_get_main_queue(), ^{
90
+ NSDictionary *args = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
91
+ NSString *identifier = args[@"id"]; if (!identifier.length) { reject(@"E_AUDIO", @"Missing player id", nil); return; }
92
+ AVPlayer *player = self.players[identifier]; id result = NSNull.null;
93
+ if ([method hasPrefix:@"session"]) {
94
+ if ([method isEqual:@"sessionCreate"]) {
95
+ self.sessionID = identifier; self.session = [@{@"commands": @[@"play", @"pause"]} mutableCopy]; [self.commands removeAllObjects];
96
+ [self publishMetadata:args[@"metadata"] ?: @{}];
97
+ } else if (![self.sessionID isEqual:identifier]) { reject(@"E_SESSION_REPLACED", @"Media session has been replaced", nil); return; }
98
+ if ([method isEqual:@"sessionCreate"] || [method isEqual:@"sessionUpdate"]) {
99
+ [self.session addEntriesFromDictionary:args];
100
+ if (args[@"metadata"]) [self publishMetadata:args[@"metadata"]];
101
+ [self publishSession];
102
+ } else if ([method isEqual:@"sessionCommands"]) { result = [self.commands copy]; [self.commands removeAllObjects]; }
103
+ else if ([method isEqual:@"sessionRemove"]) {
104
+ self.sessionID = nil; self.session = nil; self.activeID = nil; ++self.artworkGeneration; [self.commands removeAllObjects];
105
+ MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = nil; MPNowPlayingInfoCenter.defaultCenter.playbackState = MPNowPlayingPlaybackStateStopped;
106
+ for (MPRemoteCommand *command in RemoteCommands().allValues) command.enabled = NO;
107
+ } else { reject(@"E_AUDIO", @"Unknown session operation", nil); return; }
108
+ } else if ([method isEqual:@"create"]) {
109
+ NSString *uri = args[@"uri"]; NSURL *url = [uri hasPrefix:@"/"] ? [NSURL fileURLWithPath:uri] : [NSURL URLWithString:uri];
110
+ if (!url || (!url.isFileURL && ![@[@"https", @"http"] containsObject:url.scheme])) { reject(@"E_AUDIO", @"Expected a local file or HTTP audio URL", nil); return; }
111
+ if (url.isFileURL && ![NSFileManager.defaultManager isReadableFileAtPath:url.path]) { reject(@"E_NOT_FOUND", @"Audio file is not readable", nil); return; }
112
+ self.players[identifier] = [AVPlayer playerWithURL:url]; self.metadata[identifier] = @{@"title": args[@"title"] ?: @"Music"};
113
+ if (!self.sessionID) { self.activeID = identifier; [self publishMetadata:self.metadata[identifier]]; }
114
+ } else if (!player) { reject(@"E_AUDIO", @"Audio player is not available", nil); return; }
115
+ else if ([method isEqual:@"ready"]) {
116
+ NSError *error = player.error ?: player.currentItem.error;
117
+ if (error) { reject(@"E_AUDIO", error.localizedDescription, error); return; }
118
+ result = @(player.currentItem.status == AVPlayerItemStatusReadyToPlay);
119
+ }
120
+ else if ([method isEqual:@"volume"]) { double volume = [args[@"volume"] doubleValue]; if (!isfinite(volume) || volume < 0 || volume > 1) { reject(@"E_AUDIO", @"Invalid volume", nil); return; } player.volume = volume; }
121
+ else if ([method isEqual:@"metadata"]) { self.metadata[identifier] = args[@"metadata"]; if (!self.sessionID && [self.activeID isEqual:identifier]) [self publishMetadata:self.metadata[identifier]]; }
122
+ else if ([method isEqual:@"play"]) {
123
+ if (!self.sessionID) { self.activeID = identifier; [self publishMetadata:self.metadata[identifier]]; for (NSString *key in RemoteCommands()) RemoteCommands()[key].enabled = [@[@"play", @"pause", @"seekTo"] containsObject:key]; }
124
+ [player play];
125
+ }
126
+ else if ([method isEqual:@"pause"]) [player pause];
127
+ else if ([method isEqual:@"seek"]) {
128
+ double seconds = [args[@"seconds"] doubleValue];
129
+ if (!isfinite(seconds) || seconds < 0) { reject(@"E_AUDIO", @"Invalid seek position", nil); return; }
130
+ [player seekToTime:CMTimeMakeWithSeconds(seconds, 600) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished) { if (finished) resolve(@"null"); else reject(@"E_AUDIO", @"Seek was interrupted", nil); }]; return;
131
+ } else if ([method isEqual:@"status"]) {
132
+ double position = CMTimeGetSeconds(player.currentTime), duration = CMTimeGetSeconds(player.currentItem.duration);
133
+ if (!isfinite(position)) position = 0; if (!isfinite(duration)) duration = 0;
134
+ NSError *error = player.error ?: player.currentItem.error;
135
+ BOOL playing = player.timeControlStatus == AVPlayerTimeControlStatusPlaying;
136
+ result = @{ @"volume": @(player.volume), @"playing": @(playing), @"currentTime": @(position), @"duration": @(duration), @"didJustFinish": @(duration > 0 && position >= duration && player.rate == 0), @"error": error.localizedDescription ?: NSNull.null };
137
+ if (!self.sessionID && [self.activeID isEqual:identifier]) {
138
+ NSMutableDictionary *info = [MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo mutableCopy] ?: [NSMutableDictionary new];
139
+ info[MPMediaItemPropertyPlaybackDuration] = @(duration); info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(position); info[MPNowPlayingInfoPropertyPlaybackRate] = @(player.rate); MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = info;
140
+ MPNowPlayingInfoCenter.defaultCenter.playbackState = playing ? MPNowPlayingPlaybackStatePlaying : MPNowPlayingPlaybackStatePaused;
141
+ }
142
+ } else if ([method isEqual:@"remove"]) { [player pause]; [self.players removeObjectForKey:identifier]; [self.metadata removeObjectForKey:identifier]; if (!self.sessionID && [self.activeID isEqual:identifier]) { self.activeID = nil; ++self.artworkGeneration; MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = nil; } }
143
+ else { reject(@"E_AUDIO", @"Unknown audio operation", nil); return; }
144
+ NSData *data = [NSJSONSerialization dataWithJSONObject:result options:NSJSONWritingFragmentsAllowed error:nil]; resolve([[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
145
+ });
146
+ }
147
+ - (void)invalidate { dispatch_async(dispatch_get_main_queue(), ^{
148
+ for (AVPlayer *player in self.players.allValues) [player pause];
149
+ [self.players removeAllObjects]; [self.metadata removeAllObjects]; ++self.artworkGeneration;
150
+ for (NSString *key in self.targets) [RemoteCommands()[key] removeTarget:self.targets[key]];
151
+ [self.targets removeAllObjects]; self.sessionID = nil; MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = nil;
152
+ }); }
153
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params { return std::make_shared<facebook::react::NativeSparkAudioSpecJSI>(params); }
154
+ @end
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@legendapp/spark-audio",
3
+ "version": "0.0.1-next.2",
4
+ "license": "MIT",
5
+ "main": "src/index",
6
+ "react-native": "src/index",
7
+ "files": [
8
+ "src",
9
+ "macos",
10
+ "windows",
11
+ "*.podspec"
12
+ ],
13
+ "peerDependencies": {
14
+ "react": "19.1.4",
15
+ "react-native": "0.81.6",
16
+ "expo-audio": "1.1.1"
17
+ },
18
+ "peerDependenciesMeta": {
19
+ "expo-audio": {
20
+ "optional": true
21
+ }
22
+ },
23
+ "codegenConfig": {
24
+ "name": "RNSparkAudioSpec",
25
+ "type": "modules",
26
+ "jsSrcsDir": "src",
27
+ "ios": {
28
+ "modulesProvider": {
29
+ "NativeSparkAudio": "RNSparkAudio"
30
+ }
31
+ }
32
+ },
33
+ "spark": {
34
+ "sdk": true,
35
+ "nativeModules": [
36
+ "NativeSparkAudio"
37
+ ],
38
+ "pod": "RNSparkAudio",
39
+ "platforms": [
40
+ "macos",
41
+ "windows",
42
+ "ios",
43
+ "android",
44
+ "web"
45
+ ],
46
+ "requires": []
47
+ },
48
+ "private": true
49
+ }
@@ -0,0 +1,3 @@
1
+ import { TurboModuleRegistry, type TurboModule } from "react-native";
2
+ export interface Spec extends TurboModule { call(method: string, args: string): Promise<string> }
3
+ export default TurboModuleRegistry.get<Spec>("NativeSparkAudio");
@@ -0,0 +1,39 @@
1
+ import { statusListeners } from "./status-listeners";
2
+ import { validateVolume, validateMetadata } from "./media-types";
3
+ export { createMediaSession } from "./media-session";
4
+ export type * from "./media-types";
5
+ import Native from "./NativeSparkAudio";
6
+ import { validateSource, validateTime, type AudioPlayer, type AudioSource, type AudioStatus } from "./types";
7
+ export type { AudioPlayer, AudioSource, AudioStatus } from "./types";
8
+ let sequence = 0;
9
+ export async function createAudioPlayer(source: AudioSource): Promise<AudioPlayer> {
10
+ validateSource(source);
11
+ if (!Native) throw Object.assign(new Error("Audio playback is unavailable. Build a client with @legendapp/spark-audio."), { code: "E_UNAVAILABLE" });
12
+ const native = Native, id = `audio-${Date.now()}-${++sequence}`;
13
+ let removed = false;
14
+ const call = async <T = void>(method: string, args = {}): Promise<T> => {
15
+ if (removed) throw new Error("Audio player has been removed");
16
+ return JSON.parse(await native.call(method, JSON.stringify({ id, ...args })));
17
+ };
18
+ await call("create", source);
19
+ let timer: ReturnType<typeof setTimeout> | undefined;
20
+ let cancelled = false;
21
+ try {
22
+ await Promise.race([
23
+ (async () => { while (!cancelled && !await call<boolean>("ready")) await new Promise(resolve => setTimeout(resolve, 50)); })(),
24
+ new Promise<never>((_, reject) => { timer = setTimeout(() => reject(new Error("Audio loading timed out")), 15_000); }),
25
+ ]);
26
+ } catch (error) { void call("remove").catch(() => {}); throw error; }
27
+ finally { cancelled = true; clearTimeout(timer); }
28
+ const read = () => call<AudioStatus>("status");
29
+ const listeners = statusListeners(read);
30
+ return {
31
+ setVolume: volume => { validateVolume(volume); return call("volume", { volume }); },
32
+ setMetadata: metadata => { validateMetadata(metadata); return call("metadata", { metadata }); },
33
+ addListener: (event, listener) => { if (event !== "playbackStatusUpdate") throw new TypeError("Unknown audio event"); return listeners.add(listener); },
34
+ play: () => call("play"), pause: () => call("pause"),
35
+ seekTo: seconds => { validateTime(seconds); return call("seek", { seconds }); },
36
+ getStatus: read,
37
+ async remove() { if (!removed) { await call("remove"); removed = true; listeners.close(); } },
38
+ };
39
+ }
@@ -0,0 +1 @@
1
+ export * from "./mobile";
@@ -0,0 +1 @@
1
+ export * from "./mobile";
@@ -0,0 +1 @@
1
+ export * from "./desktop";
@@ -0,0 +1,42 @@
1
+ import { validateVolume, validateMetadata } from "./media-types";
2
+ import { statusListeners } from "./status-listeners";
3
+ import { hasExplicitMediaSession, claimPlayerMediaSession, ownsPlayerMediaSession, releasePlayerMediaSession } from "./media-session.web";
4
+ export { createMediaSession } from "./media-session.web";
5
+ export type * from "./media-types";
6
+ import { validateSource, validateTime, type AudioPlayer, type AudioSource } from "./types";
7
+ export type { AudioPlayer, AudioSource, AudioStatus } from "./types";
8
+
9
+ export async function createAudioPlayer(source: AudioSource): Promise<AudioPlayer> {
10
+ validateSource(source);
11
+ const audio = new Audio(source.uri);
12
+ audio.preload = "metadata";
13
+ let removed = false;
14
+ const pending = new Set<() => void>();
15
+ const alive = () => { if (removed) throw new Error("Audio player has been removed"); };
16
+ const media = navigator.mediaSession;
17
+ if (media && !hasExplicitMediaSession()) {
18
+ claimPlayerMediaSession(audio);
19
+ media.metadata = new MediaMetadata({ title: source.title ?? "Music" });
20
+ media.setActionHandler("play", () => { void audio.play().catch(console.error); });
21
+ media.setActionHandler("pause", () => audio.pause());
22
+ media.setActionHandler("seekto", event => { if (event.seekTime !== undefined) audio.currentTime = event.seekTime; });
23
+ }
24
+ const read = async () => { alive(); return { playing: !audio.paused, currentTime: audio.currentTime, duration: Number.isFinite(audio.duration) ? audio.duration : 0, didJustFinish: audio.ended, error: audio.error?.message ?? null, volume: audio.volume }; };
25
+ const listeners = statusListeners(read);
26
+ return {
27
+ async setVolume(volume) { alive(); validateVolume(volume); audio.volume = volume; },
28
+ async setMetadata(metadata) { alive(); validateMetadata(metadata); if (media && ownsPlayerMediaSession(audio)) media.metadata = new MediaMetadata({ title: metadata.title, artist: metadata.artist, album: metadata.albumTitle, artwork: metadata.artworkUrl ? [{ src: metadata.artworkUrl }] : [] }); },
29
+ addListener(event, listener) { if (event !== "playbackStatusUpdate") throw new TypeError("Unknown audio event"); return listeners.add(listener); },
30
+ async play() { alive(); await audio.play(); }, async pause() { alive(); audio.pause(); },
31
+ async seekTo(seconds) { alive(); validateTime(seconds); if (audio.readyState === 0) await new Promise<void>((resolve, reject) => {
32
+ const clear = () => { clearTimeout(timer); pending.delete(cancel); audio.removeEventListener("loadedmetadata", loaded); audio.removeEventListener("error", failed); };
33
+ const loaded = () => { clear(); resolve(); }; const failed = () => { clear(); reject(new Error("Could not load audio")); };
34
+ const cancel = () => { clear(); reject(new Error("Audio player has been removed")); };
35
+ const timer = setTimeout(() => { clear(); reject(new Error("Audio loading timed out")); }, 15_000);
36
+ pending.add(cancel);
37
+ audio.addEventListener("loadedmetadata", loaded); audio.addEventListener("error", failed);
38
+ }); alive(); audio.currentTime = seconds; },
39
+ getStatus: read,
40
+ async remove() { if (!removed) { removed = true; listeners.close(); for (const cancel of pending) cancel(); audio.pause(); audio.removeAttribute("src"); audio.load(); if (media && ownsPlayerMediaSession(audio)) { for (const action of ["play", "pause", "seekto"] as const) media.setActionHandler(action, null); media.metadata = null; releasePlayerMediaSession(audio); } } },
41
+ };
42
+ }
@@ -0,0 +1 @@
1
+ export * from "./desktop";
@@ -0,0 +1,5 @@
1
+ import type { MediaCommand, MediaSession, MediaSessionOptions } from "./media-types";
2
+ /** Expo Audio owns mobile transport controls; it cannot attach an external engine. */
3
+ export async function createMediaSession(_options: MediaSessionOptions, _onCommand: (command: MediaCommand) => void): Promise<MediaSession> {
4
+ throw Object.assign(new Error("Standalone media sessions support desktop and web. On mobile use the audio player's Expo-backed controls."), { code: "E_UNAVAILABLE" });
5
+ }
@@ -0,0 +1,25 @@
1
+ import Native from "./NativeSparkAudio";
2
+ import { validateSession, type MediaCommand, type MediaSession, type MediaSessionOptions } from "./media-types";
3
+ let owner: (() => void) | undefined, sequence = 0;
4
+ /** One explicit session owns the app's system media controls, independent of playback. */
5
+ export async function createMediaSession(options: MediaSessionOptions, onCommand: (command: MediaCommand) => void): Promise<MediaSession> {
6
+ validateSession(options);
7
+ if (!Native) throw Object.assign(new Error("Media sessions require @legendapp/spark-audio in the native runtime"), { code: "E_UNAVAILABLE" });
8
+ const native = Native, id = `media-${Date.now()}-${++sequence}`;
9
+ let removed = false, timer: ReturnType<typeof setTimeout> | undefined;
10
+ const call = async <T = void>(method: string, args = {}): Promise<T> => JSON.parse(await native.call(method, JSON.stringify({ id, ...args })));
11
+ const stop = () => { removed = true; clearTimeout(timer); };
12
+ await call("sessionCreate", options); owner?.(); owner = stop;
13
+ async function poll() {
14
+ try {
15
+ const commands = await call<MediaCommand[]>("sessionCommands");
16
+ if (!removed) for (const command of commands) { try { onCommand(command); } catch (error) { console.error(error); } }
17
+ } catch (error) { if (!removed) { stop(); console.error(error); } }
18
+ finally { if (!removed) timer = setTimeout(poll, 100); }
19
+ }
20
+ void poll();
21
+ return {
22
+ async update(patch) { if (removed) throw new Error("Media session has been removed or replaced"); validateSession(patch); await call("sessionUpdate", patch); },
23
+ async remove() { if (removed) return; await call("sessionRemove"); stop(); if (owner === stop) owner = undefined; },
24
+ };
25
+ }
@@ -0,0 +1,35 @@
1
+ import { validateSession, type MediaCommand, type MediaCommandName, type MediaSession, type MediaSessionOptions } from "./media-types";
2
+ let owner: object | undefined, explicit = false;
3
+ export const hasExplicitMediaSession = () => explicit;
4
+ export const claimPlayerMediaSession = (player: object) => { owner = player; };
5
+ export const ownsPlayerMediaSession = (player: object) => owner === player;
6
+ export const releasePlayerMediaSession = (player: object) => { if (owner === player) owner = undefined; };
7
+ const actions: Record<MediaCommandName, MediaSessionAction> = { play: "play", pause: "pause", nextTrack: "nexttrack", previousTrack: "previoustrack", seekTo: "seekto" };
8
+ export async function createMediaSession(options: MediaSessionOptions, onCommand: (command: MediaCommand) => void): Promise<MediaSession> {
9
+ validateSession(options);
10
+ const available = typeof navigator === "undefined" ? undefined : navigator.mediaSession;
11
+ if (!available) throw Object.assign(new Error("Browser media sessions are unavailable"), { code: "E_UNAVAILABLE" });
12
+ const media = available;
13
+ const id = {}; let removed = false, state: MediaSessionOptions = { commands: ["play", "pause"] };
14
+ const clearActions = () => { for (const action of Object.values(actions)) { try { media.setActionHandler(action, null); } catch {} } };
15
+ function apply(patch: MediaSessionOptions) {
16
+ state = { ...state, ...patch };
17
+ const metadata = state.metadata ?? {};
18
+ media.metadata = new MediaMetadata({ title: metadata.title, artist: metadata.artist, album: metadata.albumTitle, artwork: metadata.artworkUrl ? [{ src: metadata.artworkUrl }] : [] });
19
+ media.playbackState = state.playbackState === "playing" ? "playing" : state.playbackState === "paused" ? "paused" : "none";
20
+ if (media.setPositionState) {
21
+ if (state.duration && (state.playbackRate ?? 1) > 0) media.setPositionState({ duration: state.duration, position: Math.min(state.position ?? 0, state.duration), playbackRate: state.playbackRate ?? 1 });
22
+ else media.setPositionState();
23
+ }
24
+ clearActions();
25
+ for (const command of state.commands ?? []) media.setActionHandler(actions[command], details => {
26
+ if (owner === id && !removed) onCommand({ command, ...(details.seekTime === undefined ? {} : { position: details.seekTime }) });
27
+ });
28
+ }
29
+ owner = id; explicit = true;
30
+ try { apply(options); } catch (error) { clearActions(); media.metadata = null; media.playbackState = "none"; owner = undefined; explicit = false; throw error; }
31
+ return {
32
+ async update(patch) { if (removed || owner !== id) throw new Error("Media session has been removed or replaced"); validateSession(patch); apply(patch); },
33
+ async remove() { if (removed) return; removed = true; if (owner !== id) return; clearActions(); media.metadata = null; media.playbackState = "none"; media.setPositionState?.(); owner = undefined; explicit = false; },
34
+ };
35
+ }
@@ -0,0 +1,32 @@
1
+ export type AudioMetadata = { title?: string; artist?: string; albumTitle?: string; artworkUrl?: string };
2
+ export type MediaCommandName = "play" | "pause" | "nextTrack" | "previousTrack" | "seekTo";
3
+ export type MediaCommand = { command: MediaCommandName; position?: number };
4
+ export type MediaSessionOptions = {
5
+ metadata?: AudioMetadata;
6
+ playbackState?: "playing" | "paused" | "stopped";
7
+ position?: number;
8
+ duration?: number;
9
+ playbackRate?: number;
10
+ commands?: MediaCommandName[];
11
+ };
12
+ export interface MediaSession {
13
+ update(options: MediaSessionOptions): Promise<void>;
14
+ remove(): Promise<void>;
15
+ }
16
+ export function validateVolume(value: number) {
17
+ if (!Number.isFinite(value) || value < 0 || value > 1) throw new TypeError("Volume must be between 0 and 1");
18
+ }
19
+ export function validateMetadata(metadata: AudioMetadata) {
20
+ for (const [key, value] of Object.entries(metadata)) {
21
+ if (!["title", "artist", "albumTitle", "artworkUrl"].includes(key) || typeof value !== "string") throw new TypeError("Invalid audio metadata");
22
+ }
23
+ if (metadata.artworkUrl && !/^(https?:\/\/|file:\/\/|\/)/.test(metadata.artworkUrl)) throw new TypeError("Artwork requires an HTTP URL, file URL or absolute path");
24
+ }
25
+ export function validateSession(options: MediaSessionOptions) {
26
+ if (options.metadata) validateMetadata(options.metadata);
27
+ for (const key of ["position", "duration", "playbackRate"] as const) {
28
+ const value = options[key]; if (value !== undefined && (!Number.isFinite(value) || value < 0)) throw new TypeError(`Invalid media ${key}`);
29
+ }
30
+ if (options.playbackState !== undefined && !["playing", "paused", "stopped"].includes(options.playbackState)) throw new TypeError("Invalid playback state");
31
+ if (options.commands !== undefined && (!Array.isArray(options.commands) || options.commands.some(command => !["play", "pause", "nextTrack", "previousTrack", "seekTo"].includes(command)) || new Set(options.commands).size !== options.commands.length)) throw new TypeError("Invalid media commands");
32
+ }
@@ -0,0 +1,38 @@
1
+ import { validateVolume, validateMetadata } from "./media-types";
2
+ import { statusListeners } from "./status-listeners";
3
+ export type * from "./media-types";
4
+ export { createMediaSession } from "./media-session-unavailable";
5
+ import { createAudioPlayer as createExpoPlayer, setAudioModeAsync } from "expo-audio";
6
+ import { validateSource, validateTime, type AudioPlayer, type AudioSource } from "./types";
7
+ export type { AudioPlayer, AudioSource, AudioStatus } from "./types";
8
+ export async function createAudioPlayer(source: AudioSource): Promise<AudioPlayer> {
9
+ validateSource(source);
10
+ await setAudioModeAsync({ playsInSilentMode: true, shouldPlayInBackground: true, interruptionMode: "doNotMix" });
11
+ const player = createExpoPlayer(source.uri);
12
+ let removed = false;
13
+ let ended = false;
14
+ let failed = false;
15
+ const subscription = player.addListener("playbackStatusUpdate", status => { if (status.didJustFinish) ended = true; failed = status.playbackState === "error"; });
16
+ const alive = () => { if (removed) throw new Error("Audio player has been removed"); };
17
+ try {
18
+ if (!player.isLoaded) await new Promise<void>((resolve, reject) => {
19
+ const timer = setTimeout(() => { loaded.remove(); reject(new Error("Audio loading timed out")); }, 15_000);
20
+ const loaded = player.addListener("playbackStatusUpdate", status => {
21
+ if (status.isLoaded || status.playbackState === "error") { clearTimeout(timer); loaded.remove(); if (status.isLoaded) resolve(); else reject(new Error("Audio could not be loaded")); }
22
+ });
23
+ });
24
+ player.setActiveForLockScreen(true, { title: source.title ?? "Music" });
25
+ } catch (error) { subscription.remove(); player.remove(); throw error; }
26
+ const read = async () => { alive(); const status = player.currentStatus; return { playing: status.playing, currentTime: status.currentTime, duration: status.duration, didJustFinish: ended, error: failed ? "Audio could not be decoded or loaded" : null, volume: player.volume }; };
27
+ const listeners = statusListeners(read);
28
+ return {
29
+ async setVolume(volume) { alive(); validateVolume(volume); player.volume = volume; },
30
+ async setMetadata(metadata) { alive(); validateMetadata(metadata); player.updateLockScreenMetadata(metadata); },
31
+ addListener(event, listener) { if (event !== "playbackStatusUpdate") throw new TypeError("Unknown audio event"); return listeners.add(listener); },
32
+ async play() { alive(); ended = false; player.play(); },
33
+ async pause() { alive(); player.pause(); },
34
+ async seekTo(seconds) { alive(); validateTime(seconds); ended = false; await player.seekTo(seconds); },
35
+ getStatus: read,
36
+ async remove() { if (!removed) { removed = true; listeners.close(); subscription.remove(); player.clearLockScreenControls(); player.remove(); } },
37
+ };
38
+ }
@@ -0,0 +1,22 @@
1
+ import type { AudioStatus } from "./types";
2
+ /** Sample status only while observed. No React state or render is involved. */
3
+ export function statusListeners(read: () => Promise<AudioStatus>) {
4
+ const listeners = new Set<(status: AudioStatus) => void>();
5
+ let timer: ReturnType<typeof setTimeout> | undefined, closed = false, running = false;
6
+ async function tick() {
7
+ running = true;
8
+ try {
9
+ const status = await read();
10
+ if (!closed) for (const listener of [...listeners]) { try { listener(status); } catch (error) { console.error(error); } }
11
+ } catch (error) { if (!closed) console.error(error); }
12
+ finally { running = false; if (!closed && listeners.size) timer = setTimeout(tick, 250); }
13
+ }
14
+ return {
15
+ add(listener: (status: AudioStatus) => void) {
16
+ if (closed) throw new Error("Audio player has been removed");
17
+ listeners.add(listener); if (!running && !timer) void tick();
18
+ return { remove() { listeners.delete(listener); if (!listeners.size) { clearTimeout(timer); timer = undefined; } } };
19
+ },
20
+ close() { closed = true; clearTimeout(timer); listeners.clear(); },
21
+ };
22
+ }
@@ -0,0 +1,21 @@
1
+ import type { AudioMetadata } from "./media-types";
2
+ export * from "./media-types";
3
+ /** Seconds throughout. Commands reject when the backend cannot complete them. */
4
+ export type AudioStatus = { playing: boolean; currentTime: number; duration: number; didJustFinish: boolean; error: string | null; volume: number };
5
+ export type AudioSource = { uri: string; title?: string };
6
+ export interface AudioPlayer {
7
+ setVolume(volume: number): Promise<void>;
8
+ setMetadata(metadata: AudioMetadata): Promise<void>;
9
+ addListener(event: "playbackStatusUpdate", listener: (status: AudioStatus) => void): { remove(): void };
10
+ play(): Promise<void>;
11
+ pause(): Promise<void>;
12
+ seekTo(seconds: number): Promise<void>;
13
+ getStatus(): Promise<AudioStatus>;
14
+ remove(): Promise<void>;
15
+ }
16
+ export function validateSource(source: AudioSource) {
17
+ if (!source || typeof source.uri !== "string" || !source.uri || source.uri.includes("\0")) throw new Error("Audio requires a URI or absolute desktop file path");
18
+ }
19
+ export function validateTime(seconds: number) {
20
+ if (!Number.isFinite(seconds) || seconds < 0) throw new Error("Seek position must be a finite, nonnegative number of seconds");
21
+ }
@@ -0,0 +1,33 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+
4
+ <PropertyGroup Label="Microsoft.ReactNative Experimental Features">
5
+ <!--
6
+ Required for building a New Architecture project.
7
+
8
+ Library projects can change this value to test against Old and New
9
+ Architectures when building the library project's local sln file.
10
+
11
+ Otherwise this value will be decided by the consuming RNW app.
12
+
13
+ See https://microsoft.github.io/react-native-windows/docs/new-architecture
14
+ -->
15
+ <RnwNewArch>true</RnwNewArch>
16
+
17
+ <!--
18
+ Changes compilation to assume use of Microsoft.ReactNative NuGet packages
19
+ instead of building the framework from source. Defaults to true.
20
+
21
+ This is set during library project creation and is used when building
22
+ the library project's local sln file.
23
+
24
+ Otherwise this value will be decided by the consuming RNW app.
25
+
26
+ See https://microsoft.github.io/react-native-windows/docs/nuget
27
+ -->
28
+ <UseExperimentalNuget>true</UseExperimentalNuget>
29
+
30
+ <ReactExperimentalFeaturesSet>true</ReactExperimentalFeaturesSet>
31
+ </PropertyGroup>
32
+
33
+ </Project>
@@ -0,0 +1,25 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+
5
+ Portions derived from React Native:
6
+
7
+ Copyright (c) 2015-present, Facebook, Inc.
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
@@ -0,0 +1,20 @@
1
+ #include "pch.h"
2
+
3
+ #include "ReactPackageProvider.h"
4
+ #if __has_include("ReactPackageProvider.g.cpp")
5
+ #include "ReactPackageProvider.g.cpp"
6
+ #endif
7
+
8
+ #include "SparkAudio.h"
9
+
10
+ using namespace winrt::Microsoft::ReactNative;
11
+
12
+ namespace winrt::SparkAudio::implementation
13
+ {
14
+
15
+ void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept
16
+ {
17
+ AddAttributedModules(packageBuilder, true);
18
+ }
19
+
20
+ } // namespace winrt::SparkAudio::implementation
@@ -0,0 +1,24 @@
1
+ #pragma once
2
+
3
+ #include "ReactPackageProvider.g.h"
4
+
5
+ using namespace winrt::Microsoft::ReactNative;
6
+
7
+ namespace winrt::SparkAudio::implementation
8
+ {
9
+
10
+ struct ReactPackageProvider : ReactPackageProviderT<ReactPackageProvider>
11
+ {
12
+ ReactPackageProvider() = default;
13
+
14
+ void CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept;
15
+ };
16
+
17
+ } // namespace winrt::SparkAudio::implementation
18
+
19
+ namespace winrt::SparkAudio::factory_implementation
20
+ {
21
+
22
+ struct ReactPackageProvider : ReactPackageProviderT<ReactPackageProvider, implementation::ReactPackageProvider> {};
23
+
24
+ } // namespace winrt::SparkAudio::factory_implementation
@@ -0,0 +1,9 @@
1
+ namespace SparkAudio
2
+ {
3
+ [webhosthidden]
4
+ [default_interface]
5
+ runtimeclass ReactPackageProvider : Microsoft.ReactNative.IReactPackageProvider
6
+ {
7
+ ReactPackageProvider();
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ #include "pch.h"
2
+ #include "SparkAudio.h"
@@ -0,0 +1,3 @@
1
+ EXPORTS
2
+ DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE
3
+ DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE