@legendapp/spark 0.0.1-next.2 → 0.0.1-next.3

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 (399) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -4
  3. package/ai-codex.ts +1 -0
  4. package/ai.ts +1 -0
  5. package/app-documents.ts +1 -0
  6. package/config-plugin.d.cts +2 -0
  7. package/contracts.ts +2 -0
  8. package/diagnostics.ts +1 -0
  9. package/expo-config.d.cts +1 -0
  10. package/metro.cjs +4 -1
  11. package/metro.d.cts +12 -0
  12. package/native.cjs +3 -1
  13. package/native.d.cts +6 -0
  14. package/package.json +82 -14
  15. package/schema.json +276 -58
  16. package/settings-observable.ts +1 -0
  17. package/settings-window.ts +1 -0
  18. package/shortcuts-commands.ts +1 -0
  19. package/shortcuts-keyboard.ts +3 -0
  20. package/ui-classnames.ts +1 -0
  21. package/ui-glass.ts +1 -0
  22. package/ui-search.ts +1 -0
  23. package/ui-sidebar.ts +1 -0
  24. package/ui-split-view.ts +1 -0
  25. package/ui-symbol.ts +1 -0
  26. package/vendor/node_modules/@legendapp/spark-ai/package.json +19 -0
  27. package/vendor/node_modules/@legendapp/spark-ai/src/availability.ts +17 -0
  28. package/vendor/node_modules/@legendapp/spark-ai/src/index.ts +15 -0
  29. package/vendor/node_modules/@legendapp/spark-ai/src/invocations.ts +34 -0
  30. package/vendor/node_modules/@legendapp/spark-ai/src/output.ts +62 -0
  31. package/vendor/node_modules/@legendapp/spark-ai/src/run.ts +12 -0
  32. package/vendor/node_modules/@legendapp/spark-ai/src/types.ts +16 -0
  33. package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.h +2 -1
  34. package/vendor/node_modules/@legendapp/spark-audio/macos/RNSparkAudio.mm +126 -24
  35. package/vendor/node_modules/@legendapp/spark-audio/package.json +5 -2
  36. package/vendor/node_modules/@legendapp/spark-audio/src/NativeSparkAudio.ts +5 -1
  37. package/vendor/node_modules/@legendapp/spark-audio/src/desktop.ts +36 -32
  38. package/vendor/node_modules/@legendapp/spark-audio/src/events.ts +11 -0
  39. package/vendor/node_modules/@legendapp/spark-audio/src/hooks.ts +65 -0
  40. package/vendor/node_modules/@legendapp/spark-audio/src/index.web.ts +92 -33
  41. package/vendor/node_modules/@legendapp/spark-audio/src/media-session-unavailable.ts +6 -4
  42. package/vendor/node_modules/@legendapp/spark-audio/src/media-session.ts +52 -19
  43. package/vendor/node_modules/@legendapp/spark-audio/src/media-session.web.ts +18 -10
  44. package/vendor/node_modules/@legendapp/spark-audio/src/media-types.ts +40 -13
  45. package/vendor/node_modules/@legendapp/spark-audio/src/mobile.ts +40 -32
  46. package/vendor/node_modules/@legendapp/spark-audio/src/player.ts +97 -0
  47. package/vendor/node_modules/@legendapp/spark-audio/src/status-listeners.ts +21 -15
  48. package/vendor/node_modules/@legendapp/spark-audio/src/types.ts +9 -4
  49. package/vendor/node_modules/@legendapp/spark-audio/windows/SparkAudio/SparkAudio.h +67 -20
  50. package/vendor/node_modules/@legendapp/spark-auth-session/package.json +4 -3
  51. package/vendor/node_modules/@legendapp/spark-auth-session/src/core.ts +60 -42
  52. package/vendor/node_modules/@legendapp/spark-auth-session/src/index.ts +28 -12
  53. package/vendor/node_modules/@legendapp/spark-auth-session/src/mobile.ts +97 -41
  54. package/vendor/node_modules/@legendapp/spark-auth-session/src/types.ts +20 -9
  55. package/vendor/node_modules/@legendapp/spark-cli/dist/add-desktop.js +50 -7
  56. package/vendor/node_modules/@legendapp/spark-cli/dist/build-mode.js +1 -1
  57. package/vendor/node_modules/@legendapp/spark-cli/dist/build.js +83 -48
  58. package/vendor/node_modules/@legendapp/spark-cli/dist/cli-arguments.js +60 -0
  59. package/vendor/node_modules/@legendapp/spark-cli/dist/commands.js +7 -2
  60. package/vendor/node_modules/@legendapp/spark-cli/dist/create.js +31 -5
  61. package/vendor/node_modules/@legendapp/spark-cli/dist/credentials.js +69 -23
  62. package/vendor/node_modules/@legendapp/spark-cli/dist/dev-command.js +12 -3
  63. package/vendor/node_modules/@legendapp/spark-cli/dist/dev.js +12 -9
  64. package/vendor/node_modules/@legendapp/spark-cli/dist/examples.js +1 -1
  65. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-dev-patch.cjs +4 -2
  66. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-metro.cjs +1 -1
  67. package/vendor/node_modules/@legendapp/spark-cli/dist/expo-node.js +3 -3
  68. package/vendor/node_modules/@legendapp/spark-cli/dist/index.js +10 -38
  69. package/vendor/node_modules/@legendapp/spark-cli/dist/local.js +1 -1
  70. package/vendor/node_modules/@legendapp/spark-cli/dist/metro.cjs +26 -5
  71. package/vendor/node_modules/@legendapp/spark-cli/dist/native-metadata.js +26 -0
  72. package/vendor/node_modules/@legendapp/spark-cli/dist/native-patch-preflight.js +84 -0
  73. package/vendor/node_modules/@legendapp/spark-cli/dist/native-preparation.js +88 -0
  74. package/vendor/node_modules/@legendapp/spark-cli/dist/notary-profiles.js +75 -0
  75. package/vendor/node_modules/@legendapp/spark-cli/dist/package.js +4 -2
  76. package/vendor/node_modules/@legendapp/spark-cli/dist/platform.js +16 -2
  77. package/vendor/node_modules/@legendapp/spark-cli/dist/project.js +66 -13
  78. package/vendor/node_modules/@legendapp/spark-cli/dist/release.js +84 -4
  79. package/vendor/node_modules/@legendapp/spark-cli/dist/release.json +23 -18
  80. package/vendor/node_modules/@legendapp/spark-cli/dist/runner-install.js +145 -31
  81. package/vendor/node_modules/@legendapp/spark-cli/dist/signing.js +4 -3
  82. package/vendor/node_modules/@legendapp/spark-cli/dist/updates.js +41 -4
  83. package/vendor/node_modules/@legendapp/spark-cli/dist/windows.js +4 -1
  84. package/vendor/node_modules/@legendapp/spark-cli/package.json +7 -6
  85. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/App.tsx +6 -12
  86. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/desktop.config.json +5 -3
  87. package/vendor/node_modules/@legendapp/spark-cli/templates/blank-typescript/package.json +11 -9
  88. package/vendor/node_modules/@legendapp/spark-cli/templates/diff-lite/Git.macos.tsx +2 -2
  89. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.macos.tsx +23 -21
  90. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/Integration.windows.tsx +23 -21
  91. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.desktop.ts +11 -8
  92. package/vendor/node_modules/@legendapp/spark-cli/templates/document-editor/io.macos.ts +3 -3
  93. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/Lifecycle.desktop.tsx +8 -14
  94. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/OpenFiles.desktop.tsx +5 -10
  95. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.desktop.ts +11 -8
  96. package/vendor/node_modules/@legendapp/spark-cli/templates/example-shared/io.macos.ts +3 -3
  97. package/vendor/node_modules/@legendapp/spark-cli/templates/music-lite/assets.desktop.ts +2 -2
  98. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Activation.desktop.tsx +2 -2
  99. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/Desktop.desktop.ts +37 -15
  100. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/session.ts +5 -6
  101. package/vendor/node_modules/@legendapp/spark-cli/templates/notes-lite/window-session.ts +5 -4
  102. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/desktop.config.json +5 -3
  103. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/metro.config.js +1 -1
  104. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/package.json +13 -11
  105. package/vendor/node_modules/@legendapp/spark-cli/templates/universal/react-native.config.js +1 -1
  106. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/package.json +13 -11
  107. package/vendor/node_modules/@legendapp/spark-cli/templates/windows/react-native.config.js +1 -1
  108. package/vendor/node_modules/@legendapp/spark-clipboard/macos/RNDesktopClipboard.mm +10 -16
  109. package/vendor/node_modules/@legendapp/spark-clipboard/package.json +2 -2
  110. package/vendor/node_modules/@legendapp/spark-clipboard/src/NativeDesktopClipboard.ts +1 -1
  111. package/vendor/node_modules/@legendapp/spark-clipboard/src/desktop.ts +55 -31
  112. package/vendor/node_modules/@legendapp/spark-clipboard/src/expo.ts +21 -11
  113. package/vendor/node_modules/@legendapp/spark-clipboard/src/options.ts +8 -0
  114. package/vendor/node_modules/@legendapp/spark-clipboard/src/types.ts +10 -0
  115. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.h +38 -15
  116. package/vendor/node_modules/@legendapp/spark-clipboard/windows/SparkClipboard/SparkClipboard.vcxproj +2 -0
  117. package/vendor/node_modules/@legendapp/spark-codex/RNCodex.podspec +22 -0
  118. package/vendor/node_modules/@legendapp/spark-codex/cpp/HybridCodexAppServer.hpp +23 -0
  119. package/vendor/node_modules/@legendapp/spark-codex/cpp/HybridCodexAppServer.mm +1529 -0
  120. package/vendor/node_modules/@legendapp/spark-codex/nitro.json +21 -0
  121. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/.gitattributes +1 -0
  122. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex+autolinking.rb +62 -0
  123. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Bridge.cpp +17 -0
  124. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Bridge.hpp +27 -0
  125. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodex-Swift-Cxx-Umbrella.hpp +38 -0
  126. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodexAutolinking.mm +35 -0
  127. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/ios/RNCodexAutolinking.swift +16 -0
  128. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/CodexAvailability.hpp +95 -0
  129. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/CodexRunResult.hpp +99 -0
  130. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/HybridCodexAppServerSpec.cpp +24 -0
  131. package/vendor/node_modules/@legendapp/spark-codex/nitrogen/generated/shared/c++/HybridCodexAppServerSpec.hpp +71 -0
  132. package/vendor/node_modules/@legendapp/spark-codex/package.json +35 -0
  133. package/vendor/node_modules/@legendapp/spark-codex/react-native.config.js +11 -0
  134. package/vendor/node_modules/@legendapp/spark-codex/src/Codex.nitro.ts +30 -0
  135. package/vendor/node_modules/@legendapp/spark-codex/src/index.ts +65 -0
  136. package/vendor/node_modules/@legendapp/spark-codex/src/native.ts +6 -0
  137. package/vendor/node_modules/@legendapp/spark-commands/package.json +21 -0
  138. package/vendor/node_modules/@legendapp/spark-commands/src/bindings.ts +90 -0
  139. package/vendor/node_modules/@legendapp/spark-commands/src/index.tsx +400 -0
  140. package/vendor/node_modules/@legendapp/spark-commands/src/router.ts +138 -0
  141. package/vendor/node_modules/@legendapp/spark-commands/src/storage.ts +20 -0
  142. package/vendor/node_modules/@legendapp/spark-context-menu/macos/RNContextMenu.mm +7 -8
  143. package/vendor/node_modules/@legendapp/spark-context-menu/package.json +4 -3
  144. package/vendor/node_modules/@legendapp/spark-context-menu/src/NativeContextMenu.ts +1 -1
  145. package/vendor/node_modules/@legendapp/spark-context-menu/src/index.ts +26 -26
  146. package/vendor/node_modules/@legendapp/spark-context-menu/windows/SparkContextMenu/SparkContextMenu.h +3 -2
  147. package/vendor/node_modules/@legendapp/spark-desktop-app/RNDesktopApp.podspec +2 -1
  148. package/vendor/node_modules/@legendapp/spark-desktop-app/cpp/SparkBinaryJSI.hpp +89 -0
  149. package/vendor/node_modules/@legendapp/spark-desktop-app/cpp/SparkBinaryWindows.hpp +22 -0
  150. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/RNDesktopApp.mm +13 -7
  151. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkBinaryJSI.h +48 -0
  152. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.h +4 -0
  153. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktop.mm +33 -33
  154. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkDesktopError.h +20 -0
  155. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkLifecycle.h +26 -0
  156. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkLifecycle.mm +49 -0
  157. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkQuitCoordinator.h +9 -0
  158. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkQuitCoordinator.mm +70 -0
  159. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/SparkWindow.mm +9 -6
  160. package/vendor/node_modules/@legendapp/spark-desktop-app/macos/recent-documents/RNRecentDocumentController.mm +55 -0
  161. package/vendor/node_modules/@legendapp/spark-desktop-app/package.json +5 -3
  162. package/vendor/node_modules/@legendapp/spark-desktop-app/src/NativeDesktopApp.ts +1 -1
  163. package/vendor/node_modules/@legendapp/spark-desktop-app/src/api.ts +86 -40
  164. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/accelerator.ts +40 -0
  165. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/index.ts +56 -0
  166. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/menu.ts +114 -0
  167. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/native-buffer.ts +22 -0
  168. package/vendor/node_modules/@legendapp/spark-desktop-app/src/contracts/path.ts +24 -0
  169. package/vendor/node_modules/@legendapp/spark-desktop-app/src/events.ts +75 -0
  170. package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.ts +2 -0
  171. package/vendor/node_modules/@legendapp/spark-desktop-app/src/index.windows.ts +2 -0
  172. package/vendor/node_modules/@legendapp/spark-desktop-app/src/open-requests.ts +43 -0
  173. package/vendor/node_modules/@legendapp/spark-desktop-app/src/restoration.ts +11 -0
  174. package/vendor/node_modules/@legendapp/spark-desktop-app/src/transport.ts +10 -0
  175. package/vendor/node_modules/@legendapp/spark-desktop-config/app.plugin.cjs +10 -5
  176. package/vendor/node_modules/@legendapp/spark-desktop-config/app.plugin.d.cts +3 -0
  177. package/vendor/node_modules/@legendapp/spark-desktop-config/autolinking.cjs +35 -0
  178. package/vendor/node_modules/@legendapp/spark-desktop-config/config.cjs +16 -3
  179. package/vendor/node_modules/@legendapp/spark-desktop-config/config.d.cts +89 -9
  180. package/vendor/node_modules/@legendapp/spark-desktop-config/expo.d.cts +3 -0
  181. package/vendor/node_modules/@legendapp/spark-desktop-config/identity.cjs +3 -2
  182. package/vendor/node_modules/@legendapp/spark-desktop-config/lifecycle.cjs +20 -0
  183. package/vendor/node_modules/@legendapp/spark-desktop-config/package.json +6 -5
  184. package/vendor/node_modules/@legendapp/spark-desktop-config/schema.json +276 -58
  185. package/vendor/node_modules/@legendapp/spark-desktop-config/updates.cjs +1 -0
  186. package/vendor/node_modules/@legendapp/spark-desktop-config/validation.cjs +35 -0
  187. package/vendor/node_modules/@legendapp/spark-desktop-config/windows.plugin.cjs +2 -1
  188. package/vendor/node_modules/@legendapp/spark-desktop-host/AppDelegate.mm +129 -11
  189. package/vendor/node_modules/@legendapp/spark-desktop-host/package.json +2 -2
  190. package/vendor/node_modules/@legendapp/spark-desktop-host/windows/application.inc +277 -121
  191. package/vendor/node_modules/@legendapp/spark-desktop-links/common/AuthLoopback.h +5 -7
  192. package/vendor/node_modules/@legendapp/spark-desktop-links/macos/RNDesktopLinks.mm +10 -9
  193. package/vendor/node_modules/@legendapp/spark-desktop-links/package.json +2 -2
  194. package/vendor/node_modules/@legendapp/spark-desktop-links/src/NativeDesktopLinks.ts +1 -1
  195. package/vendor/node_modules/@legendapp/spark-desktop-links/src/api.ts +27 -33
  196. package/vendor/node_modules/@legendapp/spark-desktop-links/src/expo.ts +3 -4
  197. package/vendor/node_modules/@legendapp/spark-desktop-links/src/native.ts +9 -0
  198. package/vendor/node_modules/@legendapp/spark-desktop-links/windows/SparkLinks/SparkLinks.h +22 -22
  199. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/RNDesktopShortcuts.podspec +1 -0
  200. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/RNDesktopShortcuts.mm +1 -1
  201. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/keyboard-manager/RNKeyboardManager.h +9 -0
  202. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/macos/keyboard-manager/RNKeyboardManager.mm +307 -0
  203. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/package.json +8 -5
  204. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/NativeDesktopShortcuts.ts +1 -1
  205. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/api.ts +39 -14
  206. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/NativeKeyboardManager.ts +12 -0
  207. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/codes.ts +108 -0
  208. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/keyboard-manager/index.ts +99 -0
  209. package/vendor/node_modules/@legendapp/spark-desktop-windows/RNDesktopWindows.podspec +2 -0
  210. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/RNDesktopWindows.mm +229 -103
  211. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/SparkWindowGeometry.h +63 -0
  212. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/LegendWindowRegistry.h +20 -0
  213. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/LegendWindowRegistry.mm +27 -0
  214. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManager.h +12 -0
  215. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManager.mm +3130 -0
  216. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/RNWindowManagerStartup.mm +31 -0
  217. package/vendor/node_modules/@legendapp/spark-desktop-windows/macos/window-manager/SidebarStartupFallbacks.mm +14 -0
  218. package/vendor/node_modules/@legendapp/spark-desktop-windows/package.json +10 -6
  219. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/NativeDesktopWindowManager.ts +1 -1
  220. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/api.ts +144 -70
  221. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/diagnostics.ts +17 -0
  222. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.ts +3 -1
  223. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/index.windows.ts +3 -1
  224. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/macos-adapter.ts +53 -0
  225. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/macos.ts +51 -0
  226. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/transport.ts +41 -0
  227. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/types.ts +140 -0
  228. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/validation.ts +162 -0
  229. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/window-manager/NativeWindowManager.ts +28 -0
  230. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/WindowProvider.tsx +20 -0
  231. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/createWindowsNavigator.tsx +78 -0
  232. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/index.ts +6 -0
  233. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/primaryWindowLifecycle.ts +34 -0
  234. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/types.ts +11 -0
  235. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/usePrimaryWindowLifecycle.ts +18 -0
  236. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows/useWindowFocusEffect.ts +17 -0
  237. package/vendor/node_modules/@legendapp/spark-documents/package.json +22 -0
  238. package/vendor/node_modules/@legendapp/spark-documents/src/controller.ts +97 -0
  239. package/vendor/node_modules/@legendapp/spark-documents/src/documentTransition.ts +13 -0
  240. package/vendor/node_modules/@legendapp/spark-documents/src/hooks.ts +139 -0
  241. package/vendor/node_modules/@legendapp/spark-documents/src/index.tsx +50 -0
  242. package/vendor/node_modules/@legendapp/spark-documents/src/reload.ts +39 -0
  243. package/vendor/node_modules/@legendapp/spark-documents/src/requests.ts +15 -0
  244. package/vendor/node_modules/@legendapp/spark-drag-drop/package.json +4 -3
  245. package/vendor/node_modules/@legendapp/spark-drag-drop/src/DesktopDragViewNativeComponent.ts +1 -1
  246. package/vendor/node_modules/@legendapp/spark-drag-drop/src/contracts.ts +73 -18
  247. package/vendor/node_modules/@legendapp/spark-drag-drop/src/index.tsx +58 -15
  248. package/vendor/node_modules/@legendapp/spark-drag-drop/windows/SparkDragDrop/SparkDragDrop.h +14 -8
  249. package/vendor/node_modules/@legendapp/spark-file-dialog/ios/RNFileDialog.mm +34 -121
  250. package/vendor/node_modules/@legendapp/spark-file-dialog/package.json +12 -5
  251. package/vendor/node_modules/@legendapp/spark-file-dialog/src/NativeFileDialog.ts +1 -5
  252. package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.ts +19 -84
  253. package/vendor/node_modules/@legendapp/spark-file-dialog/src/native.ts +12 -0
  254. package/vendor/node_modules/@legendapp/spark-file-dialog/src/options.ts +34 -14
  255. package/vendor/node_modules/@legendapp/spark-file-dialog/src/types.ts +26 -0
  256. package/vendor/node_modules/@legendapp/spark-file-dialog/windows/SparkFileDialog/SparkFileDialog.h +42 -58
  257. package/vendor/node_modules/@legendapp/spark-file-system/RNDesktopFileSystem.podspec +1 -0
  258. package/vendor/node_modules/@legendapp/spark-file-system/macos/RNDesktopFileSystem.mm +32 -21
  259. package/vendor/node_modules/@legendapp/spark-file-system/macos/SparkFileMutations.h +24 -0
  260. package/vendor/node_modules/@legendapp/spark-file-system/macos/SparkFileMutations.mm +215 -0
  261. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScanner.h +9 -0
  262. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScanner.mm +82 -0
  263. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScannerCore.h +47 -0
  264. package/vendor/node_modules/@legendapp/spark-file-system/macos/file-scanner/RNFileScannerCore.mm +306 -0
  265. package/vendor/node_modules/@legendapp/spark-file-system/package.json +8 -6
  266. package/vendor/node_modules/@legendapp/spark-file-system/src/NativeDesktopFileSystem.ts +1 -1
  267. package/vendor/node_modules/@legendapp/spark-file-system/src/file-scanner/NativeFileScanner.ts +11 -0
  268. package/vendor/node_modules/@legendapp/spark-file-system/src/file-scanner/index.ts +93 -0
  269. package/vendor/node_modules/@legendapp/spark-file-system/src/handles.ts +48 -14
  270. package/vendor/node_modules/@legendapp/spark-file-system/src/index.ts +134 -45
  271. package/vendor/node_modules/@legendapp/spark-file-system/src/path.ts +1 -9
  272. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.h +102 -26
  273. package/vendor/node_modules/@legendapp/spark-file-system/windows/SparkFileSystem/SparkFileSystem.vcxproj +2 -0
  274. package/vendor/node_modules/@legendapp/spark-global-shortcuts/RNDesktopGlobalShortcuts.podspec +1 -0
  275. package/vendor/node_modules/@legendapp/spark-global-shortcuts/macos/RNDesktopGlobalShortcuts.mm +7 -4
  276. package/vendor/node_modules/@legendapp/spark-global-shortcuts/package.json +4 -3
  277. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/NativeDesktopGlobalShortcuts.ts +1 -1
  278. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/index.ts +39 -10
  279. package/vendor/node_modules/@legendapp/spark-global-shortcuts/windows/SparkGlobalShortcuts/SparkGlobalShortcuts.h +5 -4
  280. package/vendor/node_modules/@legendapp/spark-message-dialog/macos/RNDesktopMessageDialog.mm +2 -2
  281. package/vendor/node_modules/@legendapp/spark-message-dialog/package.json +2 -2
  282. package/vendor/node_modules/@legendapp/spark-message-dialog/src/NativeDesktopMessageDialog.ts +1 -1
  283. package/vendor/node_modules/@legendapp/spark-message-dialog/src/index.ts +48 -11
  284. package/vendor/node_modules/@legendapp/spark-native-menu/ios/RNNativeMenu.mm +141 -609
  285. package/vendor/node_modules/@legendapp/spark-native-menu/package.json +9 -4
  286. package/vendor/node_modules/@legendapp/spark-native-menu/src/NativeMenu.ts +2 -7
  287. package/vendor/node_modules/@legendapp/spark-native-menu/src/api.ts +76 -121
  288. package/vendor/node_modules/@legendapp/spark-native-menu/src/hooks.ts +97 -0
  289. package/vendor/node_modules/@legendapp/spark-native-menu/src/windows-menus.ts +43 -37
  290. package/vendor/node_modules/@legendapp/spark-notifications/macos/RNDesktopNotifications.mm +75 -30
  291. package/vendor/node_modules/@legendapp/spark-notifications/package.json +2 -2
  292. package/vendor/node_modules/@legendapp/spark-notifications/src/NativeDesktopNotifications.ts +1 -1
  293. package/vendor/node_modules/@legendapp/spark-notifications/src/index.ts +130 -42
  294. package/vendor/node_modules/@legendapp/spark-notifications/windows/SparkNotifications/SparkNotifications.h +46 -8
  295. package/vendor/node_modules/@legendapp/spark-processes/macos/RNDesktopProcesses.mm +94 -21
  296. package/vendor/node_modules/@legendapp/spark-processes/package.json +4 -3
  297. package/vendor/node_modules/@legendapp/spark-processes/src/NativeDesktopProcesses.ts +1 -1
  298. package/vendor/node_modules/@legendapp/spark-processes/src/index.ts +124 -28
  299. package/vendor/node_modules/@legendapp/spark-processes/src/types.ts +34 -0
  300. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.h +83 -34
  301. package/vendor/node_modules/@legendapp/spark-processes/windows/SparkProcesses/SparkProcesses.vcxproj +2 -0
  302. package/vendor/node_modules/@legendapp/spark-secure-storage/macos/RNDesktopSecureStorage.mm +49 -40
  303. package/vendor/node_modules/@legendapp/spark-secure-storage/package.json +2 -2
  304. package/vendor/node_modules/@legendapp/spark-secure-storage/src/NativeDesktopSecureStorage.ts +1 -1
  305. package/vendor/node_modules/@legendapp/spark-secure-storage/src/desktop.ts +16 -14
  306. package/vendor/node_modules/@legendapp/spark-secure-storage/src/expo.ts +0 -1
  307. package/vendor/node_modules/@legendapp/spark-secure-storage/src/options.ts +3 -2
  308. package/vendor/node_modules/@legendapp/spark-secure-storage/src/unavailable.ts +6 -3
  309. package/vendor/node_modules/@legendapp/spark-settings/package.json +10 -3
  310. package/vendor/node_modules/@legendapp/spark-settings/src/fileStorage.ts +11 -0
  311. package/vendor/node_modules/@legendapp/spark-settings/src/index.ts +7 -9
  312. package/vendor/node_modules/@legendapp/spark-settings/src/storage/index.ts +142 -0
  313. package/vendor/node_modules/@legendapp/spark-settings/src/store.ts +63 -21
  314. package/vendor/node_modules/@legendapp/spark-settings-ui/package.json +20 -0
  315. package/vendor/node_modules/@legendapp/spark-settings-ui/src/index.tsx +436 -0
  316. package/vendor/node_modules/@legendapp/spark-settings-ui/src/options.ts +10 -0
  317. package/vendor/node_modules/@legendapp/spark-sqlite/package.json +3 -3
  318. package/vendor/node_modules/@legendapp/spark-sqlite/src/database.ts +182 -0
  319. package/vendor/node_modules/@legendapp/spark-sqlite/src/index.ts +19 -6
  320. package/vendor/node_modules/@legendapp/spark-sqlite/src/types.ts +22 -0
  321. package/vendor/node_modules/@legendapp/spark-system/macos/RNDesktopSystem.mm +36 -11
  322. package/vendor/node_modules/@legendapp/spark-system/package.json +2 -2
  323. package/vendor/node_modules/@legendapp/spark-system/src/NativeDesktopSystem.ts +1 -1
  324. package/vendor/node_modules/@legendapp/spark-system/src/index.ts +89 -32
  325. package/vendor/node_modules/@legendapp/spark-system/windows/SparkSystem/SparkSystem.h +8 -4
  326. package/vendor/node_modules/@legendapp/spark-tray/macos/RNDesktopTray.mm +20 -8
  327. package/vendor/node_modules/@legendapp/spark-tray/package.json +2 -2
  328. package/vendor/node_modules/@legendapp/spark-tray/src/NativeDesktopTray.ts +1 -1
  329. package/vendor/node_modules/@legendapp/spark-tray/src/index.ts +91 -34
  330. package/vendor/node_modules/@legendapp/spark-tray/windows/SparkTray/SparkTray.h +45 -15
  331. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkButton.mm +2 -1
  332. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkTextInput.mm +10 -2
  333. package/vendor/node_modules/@legendapp/spark-ui/macos/appkit-split-view/RNSidebarSplitViewComponent.h +15 -0
  334. package/vendor/node_modules/@legendapp/spark-ui/macos/appkit-split-view/RNSidebarSplitViewComponent.mm +1182 -0
  335. package/vendor/node_modules/@legendapp/spark-ui/macos/glass-effect-view/RNGlassEffectView.mm +72 -0
  336. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSegmentedControl.h +15 -0
  337. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSegmentedControl.mm +194 -0
  338. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSelect.h +15 -0
  339. package/vendor/node_modules/@legendapp/spark-ui/macos/native-select/RNNativeSelect.mm +180 -0
  340. package/vendor/node_modules/@legendapp/spark-ui/macos/sf-symbol/RNSFSymbol.h +15 -0
  341. package/vendor/node_modules/@legendapp/spark-ui/macos/sf-symbol/RNSFSymbol.mm +155 -0
  342. package/vendor/node_modules/@legendapp/spark-ui/macos/sidebar/RNSidebar.h +18 -0
  343. package/vendor/node_modules/@legendapp/spark-ui/macos/sidebar/RNSidebar.mm +645 -0
  344. package/vendor/node_modules/@legendapp/spark-ui/macos/text-input-search/RNTextInputSearch.h +15 -0
  345. package/vendor/node_modules/@legendapp/spark-ui/macos/text-input-search/RNTextInputSearch.mm +164 -0
  346. package/vendor/node_modules/@legendapp/spark-ui/package.json +16 -4
  347. package/vendor/node_modules/@legendapp/spark-ui/src/SparkSelectNativeComponent.ts +3 -1
  348. package/vendor/node_modules/@legendapp/spark-ui/src/SparkTextInputNativeComponent.ts +6 -2
  349. package/vendor/node_modules/@legendapp/spark-ui/src/appkit-split-view/SidebarSplitViewNativeComponent.ts +31 -0
  350. package/vendor/node_modules/@legendapp/spark-ui/src/appkit-split-view/index.tsx +77 -0
  351. package/vendor/node_modules/@legendapp/spark-ui/src/availability.ts +10 -0
  352. package/vendor/node_modules/@legendapp/spark-ui/src/classnames/index.ts +8 -0
  353. package/vendor/node_modules/@legendapp/spark-ui/src/control.ts +42 -0
  354. package/vendor/node_modules/@legendapp/spark-ui/src/desktop.tsx +56 -0
  355. package/vendor/node_modules/@legendapp/spark-ui/src/glass-effect-view/index.tsx +15 -0
  356. package/vendor/node_modules/@legendapp/spark-ui/src/index.android.tsx +35 -21
  357. package/vendor/node_modules/@legendapp/spark-ui/src/index.ios.tsx +55 -26
  358. package/vendor/node_modules/@legendapp/spark-ui/src/index.tsx +1 -27
  359. package/vendor/node_modules/@legendapp/spark-ui/src/index.web.tsx +45 -14
  360. package/vendor/node_modules/@legendapp/spark-ui/src/index.windows.tsx +1 -42
  361. package/vendor/node_modules/@legendapp/spark-ui/src/mobile-input.tsx +11 -0
  362. package/vendor/node_modules/@legendapp/spark-ui/src/native-select/NativeSegmentedControlNativeComponent.ts +17 -0
  363. package/vendor/node_modules/@legendapp/spark-ui/src/native-select/NativeSelectNativeComponent.ts +17 -0
  364. package/vendor/node_modules/@legendapp/spark-ui/src/select.ts +5 -3
  365. package/vendor/node_modules/@legendapp/spark-ui/src/sf-symbol/SFSymbolNativeComponent.ts +13 -0
  366. package/vendor/node_modules/@legendapp/spark-ui/src/sf-symbol/index.tsx +27 -0
  367. package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/SidebarItemNativeComponent.ts +25 -0
  368. package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/SidebarNativeComponent.ts +24 -0
  369. package/vendor/node_modules/@legendapp/spark-ui/src/sidebar/index.tsx +104 -0
  370. package/vendor/node_modules/@legendapp/spark-ui/src/specialized.ts +22 -0
  371. package/vendor/node_modules/@legendapp/spark-ui/src/text-input-search/TextInputSearchNativeComponent.ts +33 -0
  372. package/vendor/node_modules/@legendapp/spark-ui/src/text-input-search/index.tsx +34 -0
  373. package/vendor/node_modules/@legendapp/spark-ui/src/types.ts +30 -19
  374. package/vendor/node_modules/@legendapp/spark-ui/uniwind.ts +3 -1
  375. package/vendor/node_modules/@legendapp/spark-ui/uniwind.web.ts +3 -1
  376. package/vendor/node_modules/@legendapp/spark-ui/windows/SparkUI/SparkUI.h +16 -11
  377. package/vendor/node_modules/@legendapp/spark-updates/macos/RNDesktopUpdates.mm +21 -8
  378. package/vendor/node_modules/@legendapp/spark-updates/package.json +2 -2
  379. package/vendor/node_modules/@legendapp/spark-updates/src/NativeDesktopUpdates.ts +3 -2
  380. package/vendor/node_modules/@legendapp/spark-updates/src/index.ts +71 -15
  381. package/vendor/node_modules/@legendapp/spark-webview/package.json +2 -2
  382. package/vendor/node_modules/@legendapp/spark-webview/src/WebView.tsx +11 -0
  383. package/vendor/node_modules/@legendapp/spark-webview/src/adapter.ts +55 -0
  384. package/vendor/node_modules/@legendapp/spark-webview/src/index.ts +2 -2
  385. package/vendor/node_modules/@legendapp/spark-webview/src/types.ts +32 -0
  386. package/vendor/node_modules/@legendapp/spark-webview/src/view-props.ts +28 -0
  387. package/vendor/node_modules/@legendapp/spark-window-options/index.cjs +51 -14
  388. package/vendor/node_modules/@legendapp/spark-window-options/index.d.ts +21 -8
  389. package/vendor/node_modules/@legendapp/spark-window-options/package.json +1 -1
  390. package/windows-macos.ts +1 -0
  391. package/expo-metro.cjs +0 -1
  392. package/message-dialog.ts +0 -1
  393. package/universal.cjs +0 -1
  394. package/vendor/node_modules/@legendapp/spark-desktop-shortcuts/src/accelerator.ts +0 -22
  395. package/vendor/node_modules/@legendapp/spark-desktop-windows/src/windows-options.ts +0 -11
  396. package/vendor/node_modules/@legendapp/spark-file-dialog/src/index.windows.ts +0 -15
  397. package/vendor/node_modules/@legendapp/spark-global-shortcuts/src/accelerator.ts +0 -22
  398. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkSelect.h +0 -4
  399. package/vendor/node_modules/@legendapp/spark-ui/macos/RNSparkSelect.mm +0 -53
@@ -0,0 +1,645 @@
1
+ #import "RNSidebar.h"
2
+
3
+ #import <react/renderer/components/RNSparkUISpec/ComponentDescriptors.h>
4
+ #import <react/renderer/components/RNSparkUISpec/EventEmitters.h>
5
+ #import <react/renderer/components/RNSparkUISpec/Props.h>
6
+ #import <react/renderer/components/RNSparkUISpec/RCTComponentViewHelpers.h>
7
+
8
+ using namespace facebook::react;
9
+
10
+ #if TARGET_OS_OSX
11
+ static NSUserInterfaceItemIdentifier const RNSidebarColumnIdentifier = @"RNSidebarColumn";
12
+ static NSUserInterfaceItemIdentifier const RNSidebarDataCellIdentifier = @"RNSidebarDataCell";
13
+
14
+ @class RNSidebar;
15
+
16
+ @interface RNSidebarDataItem : NSObject
17
+ @property (nonatomic, copy) NSString *itemId;
18
+ @property (nonatomic, copy) NSString *title;
19
+ @property (nonatomic, assign) BOOL selectable;
20
+ @end
21
+
22
+ @implementation RNSidebarDataItem
23
+ @end
24
+
25
+ @interface RNSidebarRowView : NSTableRowView
26
+ @property (nonatomic, assign) BOOL contextHighlighted;
27
+ @end
28
+
29
+ @implementation RNSidebarRowView
30
+ - (void)setContextHighlighted:(BOOL)contextHighlighted
31
+ {
32
+ _contextHighlighted = contextHighlighted;
33
+ self.needsDisplay = YES;
34
+ }
35
+
36
+ - (void)drawRect:(NSRect)dirtyRect
37
+ {
38
+ [super drawRect:dirtyRect];
39
+
40
+ if (!_contextHighlighted) {
41
+ return;
42
+ }
43
+
44
+ NSRect borderRect = NSInsetRect(self.bounds, 8, 1);
45
+ NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:borderRect xRadius:6 yRadius:6];
46
+ [[NSColor.controlAccentColor colorWithAlphaComponent:0.8] setStroke];
47
+ path.lineWidth = 2;
48
+ [path stroke];
49
+ }
50
+ @end
51
+
52
+ @interface RNSidebarTableView : NSTableView
53
+ @property (nonatomic, assign) BOOL rightMouseDown;
54
+ @end
55
+
56
+ @implementation RNSidebarTableView
57
+ - (BOOL)validateProposedFirstResponder:(NSResponder *)responder forEvent:(NSEvent *)event
58
+ {
59
+ return YES;
60
+ }
61
+
62
+ - (void)rightMouseDown:(NSEvent *)event
63
+ {
64
+ _rightMouseDown = YES;
65
+ [self.window makeFirstResponder:self];
66
+ [super rightMouseDown:event];
67
+ }
68
+
69
+ - (void)rightMouseUp:(NSEvent *)event
70
+ {
71
+ [super rightMouseUp:event];
72
+ _rightMouseDown = NO;
73
+ }
74
+ @end
75
+
76
+ @interface RNSidebarItem () <RCTSidebarItemViewProtocol>
77
+ @property (nonatomic, copy) NSString *itemId;
78
+ @property (nonatomic, assign) BOOL selectable;
79
+ @property (nonatomic, assign) CGFloat rowHeight;
80
+ @property (nonatomic, assign) BOOL autoHeight;
81
+ @property (nonatomic, assign) CGFloat measuredHeight;
82
+ @property (nonatomic, weak) RNSidebar *sidebar;
83
+ @end
84
+
85
+ @interface RNSidebar () <NSTableViewDataSource, NSTableViewDelegate, RCTSidebarViewProtocol>
86
+ - (void)sidebarItemDidChange:(RNSidebarItem *)item;
87
+ - (void)setContextHighlightedItem:(nullable RNSidebarItem *)item;
88
+ @end
89
+
90
+ #else
91
+ @interface RNSidebar () <RCTSidebarViewProtocol>
92
+ @end
93
+
94
+ @interface RNSidebarItem () <RCTSidebarItemViewProtocol>
95
+ @end
96
+ #endif
97
+
98
+ @implementation RNSidebarItem
99
+
100
+ - (instancetype)init
101
+ {
102
+ if (self = [super init]) {
103
+ _props = std::make_shared<const SidebarItemProps>();
104
+ #if TARGET_OS_OSX
105
+ _itemId = @"";
106
+ _selectable = YES;
107
+ _rowHeight = 0;
108
+ _autoHeight = NO;
109
+ _measuredHeight = 0;
110
+ self.wantsLayer = YES;
111
+ #endif
112
+ }
113
+ return self;
114
+ }
115
+
116
+ #if TARGET_OS_OSX
117
+ - (BOOL)isFlipped
118
+ {
119
+ return YES;
120
+ }
121
+
122
+ - (void)rightMouseDown:(NSEvent *)event
123
+ {
124
+ [_sidebar setContextHighlightedItem:_selectable ? self : nil];
125
+ [super rightMouseDown:event];
126
+ }
127
+
128
+ - (void)rightMouseUp:(NSEvent *)event
129
+ {
130
+ const auto eventEmitter = std::static_pointer_cast<const SidebarItemEventEmitter>(_eventEmitter);
131
+ if (eventEmitter) {
132
+ NSPoint locationInWindow = event.locationInWindow;
133
+ NSPoint locationInView = [self convertPoint:locationInWindow fromView:nil];
134
+ CGFloat contentViewHeight = self.window.contentView.bounds.size.height;
135
+ CGFloat pageY = contentViewHeight > 0 ? contentViewHeight - locationInWindow.y : locationInWindow.y;
136
+ NSEventModifierFlags modifierFlags = event.modifierFlags;
137
+
138
+ eventEmitter->onRightClick(SidebarItemEventEmitter::OnRightClick{
139
+ .altKey = (modifierFlags & NSEventModifierFlagOption) != 0,
140
+ .button = 2,
141
+ .ctrlKey = (modifierFlags & NSEventModifierFlagControl) != 0,
142
+ .metaKey = (modifierFlags & NSEventModifierFlagCommand) != 0,
143
+ .pageX = locationInWindow.x,
144
+ .pageY = pageY,
145
+ .shiftKey = (modifierFlags & NSEventModifierFlagShift) != 0,
146
+ .x = locationInView.x,
147
+ .y = locationInView.y,
148
+ });
149
+ }
150
+
151
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
152
+ [self.sidebar setContextHighlightedItem:nil];
153
+ });
154
+
155
+ [super rightMouseUp:event];
156
+ }
157
+ #endif
158
+
159
+ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps
160
+ {
161
+ const auto &newProps = *std::static_pointer_cast<SidebarItemProps const>(props);
162
+
163
+ #if TARGET_OS_OSX
164
+ _itemId = [NSString stringWithUTF8String:newProps.itemId.c_str()];
165
+ _selectable = newProps.selectable;
166
+ _rowHeight = newProps.rowHeight;
167
+ _autoHeight = newProps.autoHeight;
168
+ [_sidebar sidebarItemDidChange:self];
169
+ #endif
170
+
171
+ [super updateProps:props oldProps:oldProps];
172
+ }
173
+
174
+ - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics
175
+ oldLayoutMetrics:(const LayoutMetrics &)oldLayoutMetrics
176
+ {
177
+ [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
178
+
179
+ #if TARGET_OS_OSX
180
+ CGFloat height = layoutMetrics.frame.size.height;
181
+ if (height > 0 && fabs(height - _measuredHeight) > 0.5) {
182
+ _measuredHeight = height;
183
+ if (_autoHeight) {
184
+ [_sidebar sidebarItemDidChange:self];
185
+ }
186
+ }
187
+
188
+ if (_sidebar && [self.superview isKindOfClass:NSTableCellView.class]) {
189
+ self.frame = self.superview.bounds;
190
+ }
191
+ #endif
192
+ }
193
+
194
+ - (void)prepareForRecycle
195
+ {
196
+ [super prepareForRecycle];
197
+
198
+ #if TARGET_OS_OSX
199
+ _itemId = @"";
200
+ _selectable = YES;
201
+ _rowHeight = 0;
202
+ _autoHeight = NO;
203
+ _measuredHeight = 0;
204
+ _sidebar = nil;
205
+ #endif
206
+ }
207
+
208
+ + (ComponentDescriptorProvider)componentDescriptorProvider
209
+ {
210
+ return concreteComponentDescriptorProvider<SidebarItemComponentDescriptor>();
211
+ }
212
+
213
+ @end
214
+
215
+ @implementation RNSidebar {
216
+ #if TARGET_OS_OSX
217
+ NSScrollView *_scrollView;
218
+ RNSidebarTableView *_tableView;
219
+ NSTableColumn *_tableColumn;
220
+ NSMutableArray<RNSidebarItem *> *_itemViews;
221
+ NSArray<RNSidebarDataItem *> *_dataItems;
222
+ NSString *_selectedId;
223
+ CGFloat _contentInsetTop;
224
+ CGFloat _defaultRowHeight;
225
+ NSSize _lastReportedSize;
226
+ NSInteger _contextHighlightedRow;
227
+ BOOL _updatingSelection;
228
+ #else
229
+ RCTPlatformView *_placeholderView;
230
+ #endif
231
+ }
232
+
233
+ - (instancetype)init
234
+ {
235
+ if (self = [super init]) {
236
+ _props = std::make_shared<const SidebarProps>();
237
+
238
+ #if TARGET_OS_OSX
239
+ _itemViews = [NSMutableArray new];
240
+ _dataItems = @[];
241
+ _selectedId = @"";
242
+ _contentInsetTop = 0;
243
+ _defaultRowHeight = 28;
244
+ _lastReportedSize = NSZeroSize;
245
+ _contextHighlightedRow = -1;
246
+ self.wantsLayer = YES;
247
+ [self setupSidebar];
248
+ #else
249
+ _placeholderView = [RCTPlatformView new];
250
+ self.contentView = _placeholderView;
251
+ #endif
252
+ }
253
+ return self;
254
+ }
255
+
256
+ #if TARGET_OS_OSX
257
+ - (BOOL)isFlipped
258
+ {
259
+ return YES;
260
+ }
261
+
262
+ - (void)setupSidebar
263
+ {
264
+ _tableView = [RNSidebarTableView new];
265
+ _tableView.allowsEmptySelection = YES;
266
+ _tableView.allowsMultipleSelection = NO;
267
+ _tableView.backgroundColor = NSColor.clearColor;
268
+ _tableView.columnAutoresizingStyle = NSTableViewUniformColumnAutoresizingStyle;
269
+ _tableView.dataSource = self;
270
+ _tableView.delegate = self;
271
+ _tableView.focusRingType = NSFocusRingTypeNone;
272
+ _tableView.gridStyleMask = NSTableViewGridNone;
273
+ _tableView.headerView = nil;
274
+ _tableView.intercellSpacing = NSMakeSize(0, 0);
275
+ _tableView.rowHeight = _defaultRowHeight;
276
+ _tableView.usesAlternatingRowBackgroundColors = NO;
277
+
278
+ if (@available(macOS 11.0, *)) {
279
+ _tableView.style = NSTableViewStyleSourceList;
280
+ }
281
+
282
+ _tableColumn = [[NSTableColumn alloc] initWithIdentifier:RNSidebarColumnIdentifier];
283
+ _tableColumn.resizingMask = NSTableColumnAutoresizingMask;
284
+ [_tableView addTableColumn:_tableColumn];
285
+
286
+ _scrollView = [NSScrollView new];
287
+ _scrollView.autohidesScrollers = YES;
288
+ _scrollView.backgroundColor = NSColor.clearColor;
289
+ _scrollView.borderType = NSNoBorder;
290
+ _scrollView.documentView = _tableView;
291
+ _scrollView.drawsBackground = NO;
292
+ _scrollView.hasHorizontalScroller = NO;
293
+ _scrollView.hasVerticalScroller = YES;
294
+
295
+ [self addSubview:_scrollView];
296
+ }
297
+
298
+ - (NSArray<RNSidebarDataItem *> *)itemsFromJson:(std::string const &)json
299
+ {
300
+ NSString *jsonString = [NSString stringWithUTF8String:json.c_str()];
301
+ if (jsonString.length == 0) {
302
+ return @[];
303
+ }
304
+
305
+ NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
306
+ id parsed = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
307
+ if (![parsed isKindOfClass:NSArray.class]) {
308
+ return @[];
309
+ }
310
+
311
+ NSMutableArray<RNSidebarDataItem *> *items = [NSMutableArray new];
312
+ for (id rawItem in (NSArray *)parsed) {
313
+ if (![rawItem isKindOfClass:NSDictionary.class]) {
314
+ continue;
315
+ }
316
+
317
+ NSDictionary *dictionary = (NSDictionary *)rawItem;
318
+ NSString *itemId = [dictionary[@"id"] isKindOfClass:NSString.class] ? dictionary[@"id"] : nil;
319
+ NSString *title = [dictionary[@"title"] isKindOfClass:NSString.class] ? dictionary[@"title"] : nil;
320
+ if (itemId.length == 0 || title.length == 0) {
321
+ continue;
322
+ }
323
+
324
+ RNSidebarDataItem *item = [RNSidebarDataItem new];
325
+ item.itemId = itemId;
326
+ item.title = title;
327
+ item.selectable = ![dictionary[@"selectable"] isKindOfClass:NSNumber.class] || [dictionary[@"selectable"] boolValue];
328
+ [items addObject:item];
329
+ }
330
+
331
+ return items;
332
+ }
333
+
334
+ - (BOOL)usesReactChildren
335
+ {
336
+ return _itemViews.count > 0;
337
+ }
338
+
339
+ - (NSUInteger)itemCount
340
+ {
341
+ return self.usesReactChildren ? _itemViews.count : _dataItems.count;
342
+ }
343
+
344
+ - (NSString *)itemIdAtRow:(NSInteger)row
345
+ {
346
+ if (row < 0 || row >= (NSInteger)self.itemCount) {
347
+ return @"";
348
+ }
349
+
350
+ return self.usesReactChildren ? _itemViews[row].itemId : _dataItems[row].itemId;
351
+ }
352
+
353
+ - (BOOL)isRowSelectable:(NSInteger)row
354
+ {
355
+ if (row < 0 || row >= (NSInteger)self.itemCount) {
356
+ return NO;
357
+ }
358
+
359
+ return self.usesReactChildren ? _itemViews[row].selectable : _dataItems[row].selectable;
360
+ }
361
+
362
+ - (void)reloadRows
363
+ {
364
+ _tableView.rowHeight = _defaultRowHeight;
365
+ [_tableView reloadData];
366
+ [self updateSelection];
367
+ [self setNeedsLayout:YES];
368
+ }
369
+
370
+ - (void)sidebarItemDidChange:(RNSidebarItem *)item
371
+ {
372
+ if (![_itemViews containsObject:item]) {
373
+ return;
374
+ }
375
+
376
+ [self reloadRows];
377
+ }
378
+
379
+ - (void)setContextHighlightedItem:(RNSidebarItem *)item
380
+ {
381
+ NSInteger row = item ? [_itemViews indexOfObject:item] : NSNotFound;
382
+ NSInteger nextRow = row == NSNotFound ? -1 : row;
383
+ NSInteger previousRow = _contextHighlightedRow;
384
+ _contextHighlightedRow = nextRow;
385
+
386
+ if (previousRow >= 0) {
387
+ RNSidebarRowView *previousRowView = (RNSidebarRowView *)[_tableView rowViewAtRow:previousRow makeIfNecessary:NO];
388
+ if ([previousRowView isKindOfClass:RNSidebarRowView.class]) {
389
+ previousRowView.contextHighlighted = NO;
390
+ }
391
+ }
392
+
393
+ if (nextRow >= 0) {
394
+ RNSidebarRowView *nextRowView = (RNSidebarRowView *)[_tableView rowViewAtRow:nextRow makeIfNecessary:NO];
395
+ if ([nextRowView isKindOfClass:RNSidebarRowView.class]) {
396
+ nextRowView.contextHighlighted = YES;
397
+ }
398
+ }
399
+ }
400
+
401
+ - (void)updateSelection
402
+ {
403
+ if (_updatingSelection) {
404
+ return;
405
+ }
406
+
407
+ NSInteger selectedRow = -1;
408
+ for (NSUInteger index = 0; index < self.itemCount; index += 1) {
409
+ if ([[self itemIdAtRow:(NSInteger)index] isEqualToString:_selectedId]) {
410
+ selectedRow = (NSInteger)index;
411
+ break;
412
+ }
413
+ }
414
+
415
+ _updatingSelection = YES;
416
+ if (selectedRow >= 0) {
417
+ [_tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow] byExtendingSelection:NO];
418
+ [_tableView scrollRowToVisible:selectedRow];
419
+ } else {
420
+ [_tableView deselectAll:nil];
421
+ }
422
+ _updatingSelection = NO;
423
+ }
424
+
425
+ - (void)reportLayoutIfNeeded
426
+ {
427
+ if (self.bounds.size.width <= 0 || self.bounds.size.height <= 0) {
428
+ return;
429
+ }
430
+
431
+ if (NSEqualSizes(_lastReportedSize, self.bounds.size)) {
432
+ return;
433
+ }
434
+
435
+ _lastReportedSize = self.bounds.size;
436
+ const auto eventEmitter = std::static_pointer_cast<const SidebarEventEmitter>(_eventEmitter);
437
+ if (eventEmitter) {
438
+ eventEmitter->onSidebarLayout(SidebarEventEmitter::OnSidebarLayout{
439
+ .height = self.bounds.size.height,
440
+ .width = self.bounds.size.width,
441
+ });
442
+ }
443
+ }
444
+
445
+ - (void)mountChildComponentView:(RCTUIView<RCTComponentViewProtocol> *)childComponentView
446
+ index:(NSInteger)index
447
+ {
448
+ if ([childComponentView isKindOfClass:RNSidebarItem.class]) {
449
+ RNSidebarItem *item = (RNSidebarItem *)childComponentView;
450
+ item.sidebar = self;
451
+ NSUInteger safeIndex = MIN((NSUInteger)MAX(index, 0), _itemViews.count);
452
+ [_itemViews insertObject:item atIndex:safeIndex];
453
+ [self reloadRows];
454
+ return;
455
+ }
456
+
457
+ [super mountChildComponentView:childComponentView index:index];
458
+ }
459
+
460
+ - (void)unmountChildComponentView:(RCTUIView<RCTComponentViewProtocol> *)childComponentView
461
+ index:(NSInteger)index
462
+ {
463
+ if ([childComponentView isKindOfClass:RNSidebarItem.class]) {
464
+ RNSidebarItem *item = (RNSidebarItem *)childComponentView;
465
+ [item removeFromSuperview];
466
+ item.sidebar = nil;
467
+ [_itemViews removeObject:item];
468
+ [self reloadRows];
469
+ return;
470
+ }
471
+
472
+ [super unmountChildComponentView:childComponentView index:index];
473
+ }
474
+
475
+ - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
476
+ {
477
+ return (NSInteger)self.itemCount;
478
+ }
479
+
480
+ - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
481
+ {
482
+ if (!self.usesReactChildren || row < 0 || row >= (NSInteger)_itemViews.count) {
483
+ return _defaultRowHeight;
484
+ }
485
+
486
+ RNSidebarItem *item = _itemViews[row];
487
+ if (item.rowHeight > 0) {
488
+ return item.rowHeight;
489
+ }
490
+
491
+ if (item.autoHeight) {
492
+ if (item.measuredHeight > 0) {
493
+ return item.measuredHeight;
494
+ }
495
+
496
+ if (item.frame.size.height > 0) {
497
+ return item.frame.size.height;
498
+ }
499
+ }
500
+
501
+ return _defaultRowHeight;
502
+ }
503
+
504
+ - (NSView *)tableView:(NSTableView *)tableView
505
+ viewForTableColumn:(NSTableColumn *)tableColumn
506
+ row:(NSInteger)row
507
+ {
508
+ if (row < 0 || row >= (NSInteger)self.itemCount) {
509
+ return nil;
510
+ }
511
+
512
+ if (self.usesReactChildren) {
513
+ NSTableCellView *cell = [NSTableCellView new];
514
+ RNSidebarItem *item = _itemViews[row];
515
+ [item removeFromSuperview];
516
+ item.frame = cell.bounds;
517
+ item.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
518
+ [cell addSubview:item];
519
+ return cell;
520
+ }
521
+
522
+ NSTableCellView *cell = [tableView makeViewWithIdentifier:RNSidebarDataCellIdentifier owner:self];
523
+ if (!cell) {
524
+ cell = [NSTableCellView new];
525
+ cell.identifier = RNSidebarDataCellIdentifier;
526
+
527
+ NSTextField *textField = [NSTextField labelWithString:@""];
528
+ textField.autoresizingMask = NSViewWidthSizable;
529
+ textField.font = [NSFont systemFontOfSize:13 weight:NSFontWeightRegular];
530
+ textField.frame = NSMakeRect(12, 4, 180, MAX(0, _defaultRowHeight - 8));
531
+ textField.lineBreakMode = NSLineBreakByTruncatingTail;
532
+ textField.textColor = NSColor.labelColor;
533
+
534
+ cell.textField = textField;
535
+ [cell addSubview:textField];
536
+ }
537
+
538
+ RNSidebarDataItem *item = _dataItems[row];
539
+ cell.textField.stringValue = item.title;
540
+ cell.textField.frame = NSMakeRect(12, 4, MAX(0, tableView.bounds.size.width - 20), MAX(0, _defaultRowHeight - 8));
541
+ return cell;
542
+ }
543
+
544
+ - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row
545
+ {
546
+ if (_tableView.rightMouseDown) {
547
+ return NO;
548
+ }
549
+
550
+ return [self isRowSelectable:row];
551
+ }
552
+
553
+ - (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
554
+ {
555
+ RNSidebarRowView *rowView = [RNSidebarRowView new];
556
+ rowView.contextHighlighted = row == _contextHighlightedRow;
557
+ return rowView;
558
+ }
559
+
560
+ - (void)tableViewSelectionDidChange:(NSNotification *)notification
561
+ {
562
+ if (_updatingSelection) {
563
+ return;
564
+ }
565
+
566
+ NSInteger row = _tableView.selectedRow;
567
+ _selectedId = row >= 0 && row < (NSInteger)self.itemCount ? [self itemIdAtRow:row] : @"";
568
+ const auto eventEmitter = std::static_pointer_cast<const SidebarEventEmitter>(_eventEmitter);
569
+ if (eventEmitter) {
570
+ eventEmitter->onSidebarSelectionChange(SidebarEventEmitter::OnSidebarSelectionChange{
571
+ .id = std::string(_selectedId.UTF8String),
572
+ });
573
+ }
574
+ }
575
+ #endif
576
+
577
+ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps
578
+ {
579
+ const auto &newProps = *std::static_pointer_cast<SidebarProps const>(props);
580
+ const auto &previous = *std::static_pointer_cast<SidebarProps const>(oldProps);
581
+
582
+ #if TARGET_OS_OSX
583
+ _contentInsetTop = newProps.contentInsetTop;
584
+ _defaultRowHeight = newProps.defaultRowHeight > 0 ? newProps.defaultRowHeight : 28;
585
+ const BOOL rowsChanged = newProps.itemsJson != previous.itemsJson || newProps.defaultRowHeight != previous.defaultRowHeight;
586
+ if (newProps.itemsJson != previous.itemsJson) _dataItems = [self itemsFromJson:newProps.itemsJson];
587
+ _selectedId = [NSString stringWithUTF8String:newProps.selectedId.c_str()];
588
+ _scrollView.contentInsets = NSEdgeInsetsMake(_contentInsetTop, 0, 0, 0);
589
+ if (rowsChanged) [self reloadRows];
590
+ else if (newProps.selectedId != previous.selectedId || newProps.selectionRevision != previous.selectionRevision) [self updateSelection];
591
+ if (newProps.contentInsetTop != previous.contentInsetTop) [self setNeedsLayout:YES];
592
+ #endif
593
+
594
+ [super updateProps:props oldProps:oldProps];
595
+ }
596
+
597
+ - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics
598
+ oldLayoutMetrics:(const LayoutMetrics &)oldLayoutMetrics
599
+ {
600
+ [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
601
+ [self layoutSubviews];
602
+ }
603
+
604
+ - (void)layoutSubviews
605
+ {
606
+ [super layoutSubviews];
607
+
608
+ #if TARGET_OS_OSX
609
+ _scrollView.frame = self.bounds;
610
+ _tableColumn.width = self.bounds.size.width;
611
+ [_tableView tile];
612
+ [self reportLayoutIfNeeded];
613
+ #else
614
+ _placeholderView.frame = self.bounds;
615
+ #endif
616
+ }
617
+
618
+ - (void)prepareForRecycle
619
+ {
620
+ [super prepareForRecycle];
621
+
622
+ #if TARGET_OS_OSX
623
+ for (RNSidebarItem *item in _itemViews) {
624
+ [item removeFromSuperview];
625
+ item.sidebar = nil;
626
+ }
627
+ [_itemViews removeAllObjects];
628
+ _dataItems = @[];
629
+ _selectedId = @"";
630
+ _contentInsetTop = 0;
631
+ _defaultRowHeight = 28;
632
+ _lastReportedSize = NSZeroSize;
633
+ _contextHighlightedRow = -1;
634
+ _updatingSelection = NO;
635
+ _scrollView.contentInsets = NSEdgeInsetsZero;
636
+ [self reloadRows];
637
+ #endif
638
+ }
639
+
640
+ + (ComponentDescriptorProvider)componentDescriptorProvider
641
+ {
642
+ return concreteComponentDescriptorProvider<SidebarComponentDescriptor>();
643
+ }
644
+
645
+ @end
@@ -0,0 +1,15 @@
1
+ #import <React/RCTViewComponentView.h>
2
+ #import <TargetConditionals.h>
3
+
4
+ #if TARGET_OS_OSX
5
+ #import <AppKit/AppKit.h>
6
+ #else
7
+ #import <UIKit/UIKit.h>
8
+ #endif
9
+
10
+ NS_ASSUME_NONNULL_BEGIN
11
+
12
+ @interface RNTextInputSearch : RCTViewComponentView
13
+ @end
14
+
15
+ NS_ASSUME_NONNULL_END