@edenapp/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/apps/com/eden/editor/dist/assets/css-DQU6DXDx.js +3 -0
  2. package/apps/com/eden/editor/dist/assets/editor-BRA9licV.css +1 -0
  3. package/apps/com/eden/editor/dist/assets/editor.main-DAsyVptA.js +677 -0
  4. package/apps/com/eden/editor/dist/assets/editor.worker-B4pQIWZD.js +12 -0
  5. package/apps/com/eden/editor/dist/assets/html-CTBLac3N.js +1 -0
  6. package/apps/com/eden/editor/dist/assets/index-B7GgDQ9I.css +1 -0
  7. package/apps/com/eden/editor/dist/assets/index-BWJI9cyM.js +2 -0
  8. package/apps/com/eden/editor/dist/assets/ini-BvajGCUy.js +1 -0
  9. package/apps/com/eden/editor/dist/assets/javascript-DJ6Ya8pi.js +1 -0
  10. package/apps/com/eden/editor/dist/assets/jsonMode-BA0kYRDI.js +10 -0
  11. package/apps/com/eden/editor/dist/assets/less-GGFNNJHn.js +2 -0
  12. package/apps/com/eden/editor/dist/assets/markdown-B811l8j2.js +1 -0
  13. package/apps/com/eden/editor/dist/assets/shell-CsDZo4DB.js +1 -0
  14. package/apps/com/eden/editor/dist/assets/typescript-C7BsmV0J.js +1 -0
  15. package/apps/com/eden/editor/dist/assets/yaml-QL02lm_B.js +1 -0
  16. package/apps/com/eden/editor/dist/index.html +13 -0
  17. package/apps/com/eden/editor/icon.svg +22 -0
  18. package/apps/com/eden/editor/index.html +12 -0
  19. package/apps/com/eden/editor/manifest.json +58 -0
  20. package/apps/com/eden/editor/node_modules/.bin/browserslist +21 -0
  21. package/apps/com/eden/editor/node_modules/.bin/tsc +21 -0
  22. package/apps/com/eden/editor/node_modules/.bin/tsserver +21 -0
  23. package/apps/com/eden/editor/node_modules/.bin/vite +21 -0
  24. package/apps/com/eden/editor/package.json +21 -0
  25. package/apps/com/eden/editor/src/App.tsx +212 -0
  26. package/apps/com/eden/editor/src/components/ErrorBanner.tsx +13 -0
  27. package/apps/com/eden/editor/src/components/LazyMonacoEditor.tsx +154 -0
  28. package/apps/com/eden/editor/src/components/TabBar.tsx +36 -0
  29. package/apps/com/eden/editor/src/components/Toolbar.tsx +39 -0
  30. package/apps/com/eden/editor/src/components/WelcomeScreen.tsx +49 -0
  31. package/apps/com/eden/editor/src/components/index.ts +11 -0
  32. package/apps/com/eden/editor/src/index.tsx +10 -0
  33. package/apps/com/eden/editor/src/styles.css +319 -0
  34. package/apps/com/eden/editor/src/types.ts +69 -0
  35. package/apps/com/eden/editor/tsconfig.json +24 -0
  36. package/apps/com/eden/editor/vite.config.mts +67 -0
  37. package/apps/com/eden/eveshell/assets/apps-grid-icon.svg +17 -0
  38. package/apps/com/eden/eveshell/assets/default-icon.svg +17 -0
  39. package/apps/com/eden/eveshell/dist/assets/index-BS2yCXxK.css +1 -0
  40. package/apps/com/eden/eveshell/dist/assets/index-De0NEh_d.js +1 -0
  41. package/apps/com/eden/eveshell/dist/index.html +13 -0
  42. package/apps/com/eden/eveshell/index.html +12 -0
  43. package/apps/com/eden/eveshell/manifest.json +28 -0
  44. package/apps/com/eden/eveshell/node_modules/.bin/tsc +21 -0
  45. package/apps/com/eden/eveshell/node_modules/.bin/tsserver +21 -0
  46. package/apps/com/eden/eveshell/node_modules/.bin/vite +21 -0
  47. package/apps/com/eden/eveshell/package.json +20 -0
  48. package/apps/com/eden/eveshell/src/components/AllApps.tsx +228 -0
  49. package/apps/com/eden/eveshell/src/components/AppContextMenu.tsx +125 -0
  50. package/apps/com/eden/eveshell/src/components/AppIcon.tsx +40 -0
  51. package/apps/com/eden/eveshell/src/components/Clock.tsx +35 -0
  52. package/apps/com/eden/eveshell/src/components/Dock.tsx +147 -0
  53. package/apps/com/eden/eveshell/src/components/ShellOverlay.tsx +343 -0
  54. package/apps/com/eden/eveshell/src/icon-cache.ts +38 -0
  55. package/apps/com/eden/eveshell/src/index.tsx +11 -0
  56. package/apps/com/eden/eveshell/src/styles.css +409 -0
  57. package/apps/com/eden/eveshell/src/types.ts +5 -0
  58. package/apps/com/eden/eveshell/tsconfig.json +37 -0
  59. package/apps/com/eden/eveshell/vite.config.mts +23 -0
  60. package/apps/com/eden/example/appbus/client-a/app.js +239 -0
  61. package/apps/com/eden/example/appbus/client-a/index.html +48 -0
  62. package/apps/com/eden/example/appbus/client-a/manifest.json +27 -0
  63. package/apps/com/eden/example/appbus/client-a/styles.css +52 -0
  64. package/apps/com/eden/example/appbus/client-b/app.js +130 -0
  65. package/apps/com/eden/example/appbus/client-b/index.html +35 -0
  66. package/apps/com/eden/example/appbus/client-b/manifest.json +27 -0
  67. package/apps/com/eden/example/appbus/client-b/styles.css +48 -0
  68. package/apps/com/eden/example/appbus/hub/README.md +18 -0
  69. package/apps/com/eden/example/appbus/hub/backend.js +121 -0
  70. package/apps/com/eden/example/appbus/hub/manifest.json +17 -0
  71. package/apps/com/eden/example/appbus/isolated/app.js +107 -0
  72. package/apps/com/eden/example/appbus/isolated/index.html +35 -0
  73. package/apps/com/eden/example/appbus/isolated/manifest.json +27 -0
  74. package/apps/com/eden/example/appbus/isolated/styles.css +52 -0
  75. package/apps/com/eden/example/calculator/.dev-manifest.json +5 -0
  76. package/apps/com/eden/example/calculator/app.js +95 -0
  77. package/apps/com/eden/example/calculator/icon.svg +19 -0
  78. package/apps/com/eden/example/calculator/index.html +39 -0
  79. package/apps/com/eden/example/calculator/manifest.json +30 -0
  80. package/apps/com/eden/example/calculator/styles.css +83 -0
  81. package/apps/com/eden/example/hello/README.md +3 -0
  82. package/apps/com/eden/example/hello/backend/dist/backend.js +47 -0
  83. package/apps/com/eden/example/hello/backend/node_modules/.bin/tsc +21 -0
  84. package/apps/com/eden/example/hello/backend/node_modules/.bin/tsserver +21 -0
  85. package/apps/com/eden/example/hello/backend/package.json +13 -0
  86. package/apps/com/eden/example/hello/backend/src/backend.ts +58 -0
  87. package/apps/com/eden/example/hello/backend/tsconfig.json +19 -0
  88. package/apps/com/eden/example/hello/frontend/dist/assets/index-D2WAwW3g.css +1 -0
  89. package/apps/com/eden/example/hello/frontend/dist/assets/index-D4bTq3-Q.js +1 -0
  90. package/apps/com/eden/example/hello/frontend/dist/index.html +59 -0
  91. package/apps/com/eden/example/hello/frontend/index.html +59 -0
  92. package/apps/com/eden/example/hello/frontend/node_modules/.bin/tsc +21 -0
  93. package/apps/com/eden/example/hello/frontend/node_modules/.bin/tsserver +21 -0
  94. package/apps/com/eden/example/hello/frontend/node_modules/.bin/vite +21 -0
  95. package/apps/com/eden/example/hello/frontend/package.json +15 -0
  96. package/apps/com/eden/example/hello/frontend/src/App.ts +191 -0
  97. package/apps/com/eden/example/hello/frontend/styles.css +96 -0
  98. package/apps/com/eden/example/hello/frontend/tsconfig.json +16 -0
  99. package/apps/com/eden/example/hello/frontend/vite.config.mts +21 -0
  100. package/apps/com/eden/example/hello/manifest.json +34 -0
  101. package/apps/com/eden/example/hello/shared/protocol.d.ts +38 -0
  102. package/apps/com/eden/example/showcase/app.js +186 -0
  103. package/apps/com/eden/example/showcase/index.html +637 -0
  104. package/apps/com/eden/example/showcase/manifest.json +24 -0
  105. package/apps/com/eden/example/showcase/styles.css +195 -0
  106. package/apps/com/eden/files/.dev-manifest.json +5 -0
  107. package/apps/com/eden/files/dist/assets/index-BOw4ESi3.js +1 -0
  108. package/apps/com/eden/files/dist/assets/index-BPH5FvSW.css +1 -0
  109. package/apps/com/eden/files/dist/index.html +13 -0
  110. package/apps/com/eden/files/icon.svg +15 -0
  111. package/apps/com/eden/files/index.html +12 -0
  112. package/apps/com/eden/files/manifest.json +28 -0
  113. package/apps/com/eden/files/node_modules/.bin/tsc +21 -0
  114. package/apps/com/eden/files/node_modules/.bin/tsserver +21 -0
  115. package/apps/com/eden/files/node_modules/.bin/vite +21 -0
  116. package/apps/com/eden/files/node_modules/.vite/deps/_metadata.json +46 -0
  117. package/apps/com/eden/files/node_modules/.vite/deps/chunk-5W77UGHT.js +1253 -0
  118. package/apps/com/eden/files/node_modules/.vite/deps/chunk-5W77UGHT.js.map +7 -0
  119. package/apps/com/eden/files/node_modules/.vite/deps/chunk-K4SCX2FD.js +1809 -0
  120. package/apps/com/eden/files/node_modules/.vite/deps/chunk-K4SCX2FD.js.map +7 -0
  121. package/apps/com/eden/files/node_modules/.vite/deps/package.json +3 -0
  122. package/apps/com/eden/files/node_modules/.vite/deps/solid-js.js +112 -0
  123. package/apps/com/eden/files/node_modules/.vite/deps/solid-js.js.map +7 -0
  124. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_h.js +122 -0
  125. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_h.js.map +7 -0
  126. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_html.js +606 -0
  127. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_html.js.map +7 -0
  128. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_store.js +455 -0
  129. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_store.js.map +7 -0
  130. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_web.js +147 -0
  131. package/apps/com/eden/files/node_modules/.vite/deps/solid-js_web.js.map +7 -0
  132. package/apps/com/eden/files/package-lock.json +1754 -0
  133. package/apps/com/eden/files/package.json +20 -0
  134. package/apps/com/eden/files/src/App.tsx +387 -0
  135. package/apps/com/eden/files/src/components/FileExplorerHeader.tsx +90 -0
  136. package/apps/com/eden/files/src/components/FileItem.tsx +70 -0
  137. package/apps/com/eden/files/src/components/FileList.tsx +77 -0
  138. package/apps/com/eden/files/src/components/Modal.tsx +48 -0
  139. package/apps/com/eden/files/src/components/Omnibox.tsx +241 -0
  140. package/apps/com/eden/files/src/dialogs/CreateFileDialog.tsx +71 -0
  141. package/apps/com/eden/files/src/dialogs/CreateFolderDialog.tsx +68 -0
  142. package/apps/com/eden/files/src/dialogs/DeleteConfirmDialog.tsx +35 -0
  143. package/apps/com/eden/files/src/dialogs/DisplayOptionsModal.tsx +122 -0
  144. package/apps/com/eden/files/src/dialogs/ErrorDialog.tsx +28 -0
  145. package/apps/com/eden/files/src/index.tsx +9 -0
  146. package/apps/com/eden/files/src/styles.css +595 -0
  147. package/apps/com/eden/files/src/types.ts +20 -0
  148. package/apps/com/eden/files/src/utils.ts +44 -0
  149. package/apps/com/eden/files/tsconfig.json +27 -0
  150. package/apps/com/eden/files/vite.config.mts +23 -0
  151. package/apps/com/eden/settings/dist/assets/index-CTkJneTg.js +1 -0
  152. package/apps/com/eden/settings/dist/assets/index-GIMJANTM.css +1 -0
  153. package/apps/com/eden/settings/dist/index.html +13 -0
  154. package/apps/com/eden/settings/icon.svg +15 -0
  155. package/apps/com/eden/settings/index.html +12 -0
  156. package/apps/com/eden/settings/manifest.json +28 -0
  157. package/apps/com/eden/settings/node_modules/.bin/tsc +21 -0
  158. package/apps/com/eden/settings/node_modules/.bin/tsserver +21 -0
  159. package/apps/com/eden/settings/node_modules/.bin/vite +21 -0
  160. package/apps/com/eden/settings/package.json +21 -0
  161. package/apps/com/eden/settings/src/App.css +168 -0
  162. package/apps/com/eden/settings/src/App.tsx +301 -0
  163. package/apps/com/eden/settings/src/components/SettingInput.tsx +131 -0
  164. package/apps/com/eden/settings/src/index.tsx +9 -0
  165. package/apps/com/eden/settings/tsconfig.json +21 -0
  166. package/apps/com/eden/settings/vite.config.mts +22 -0
  167. package/apps/com/eden/toaster/README.md +89 -0
  168. package/apps/com/eden/toaster/dist/assets/index-8JMcmBCJ.css +1 -0
  169. package/apps/com/eden/toaster/dist/assets/index-C4cVyh7j.js +16 -0
  170. package/apps/com/eden/toaster/dist/index.html +16 -0
  171. package/apps/com/eden/toaster/index.html +16 -0
  172. package/apps/com/eden/toaster/manifest.json +28 -0
  173. package/apps/com/eden/toaster/node_modules/.bin/vite +21 -0
  174. package/apps/com/eden/toaster/package.json +15 -0
  175. package/apps/com/eden/toaster/src/styles.css +159 -0
  176. package/apps/com/eden/toaster/src/toaster.ts +470 -0
  177. package/apps/com/eden/toaster/tsconfig.json +28 -0
  178. package/apps/com/eden/toaster/vite.config.mts +18 -0
  179. package/apps/com/eden/webbrowser/.dev-manifest.json +5 -0
  180. package/apps/com/eden/webbrowser/icon.svg +20 -0
  181. package/apps/com/eden/webbrowser/index.html +141 -0
  182. package/apps/com/eden/webbrowser/manifest.json +23 -0
  183. package/apps/com/eden/webbrowser/node_modules/.bin/vite +21 -0
  184. package/apps/com/eden/webbrowser/node_modules/.vite/deps/_metadata.json +8 -0
  185. package/apps/com/eden/webbrowser/node_modules/.vite/deps/package.json +3 -0
  186. package/apps/com/eden/webbrowser/package.json +13 -0
  187. package/apps/com/eden/webbrowser/vite.config.mts +11 -0
  188. package/dist/Eden.d.ts +40 -0
  189. package/dist/Eden.d.ts.map +1 -0
  190. package/dist/Eden.js +186 -0
  191. package/dist/Eden.js.map +1 -0
  192. package/dist/SystemHandler.d.ts +11 -0
  193. package/dist/SystemHandler.d.ts.map +1 -0
  194. package/dist/SystemHandler.js +53 -0
  195. package/dist/SystemHandler.js.map +1 -0
  196. package/dist/app-frame/frame-injector.js +19 -0
  197. package/dist/app-frame/frame-injector.js.map +7 -0
  198. package/dist/app-frame/frame.css +186 -0
  199. package/dist/app-runtime/app-preload.js +2 -0
  200. package/dist/app-runtime/app-preload.js.map +7 -0
  201. package/dist/app-runtime/backend-preload.js +2 -0
  202. package/dist/app-runtime/backend-preload.js.map +7 -0
  203. package/dist/appbus/AppChannelHandler.d.ts +65 -0
  204. package/dist/appbus/AppChannelHandler.d.ts.map +1 -0
  205. package/dist/appbus/AppChannelHandler.js +120 -0
  206. package/dist/appbus/AppChannelHandler.js.map +1 -0
  207. package/dist/appbus/AppChannelManager.d.ts +80 -0
  208. package/dist/appbus/AppChannelManager.d.ts.map +1 -0
  209. package/dist/appbus/AppChannelManager.js +312 -0
  210. package/dist/appbus/AppChannelManager.js.map +1 -0
  211. package/dist/appbus/index.d.ts +2 -0
  212. package/dist/appbus/index.d.ts.map +1 -0
  213. package/dist/appbus/index.js +18 -0
  214. package/dist/appbus/index.js.map +1 -0
  215. package/dist/db/DbHandler.d.ts +119 -0
  216. package/dist/db/DbHandler.d.ts.map +1 -0
  217. package/dist/db/DbHandler.js +204 -0
  218. package/dist/db/DbHandler.js.map +1 -0
  219. package/dist/db/DbManager.d.ts +49 -0
  220. package/dist/db/DbManager.d.ts.map +1 -0
  221. package/dist/db/DbManager.js +172 -0
  222. package/dist/db/DbManager.js.map +1 -0
  223. package/dist/db/index.d.ts +3 -0
  224. package/dist/db/index.d.ts.map +1 -0
  225. package/dist/db/index.js +8 -0
  226. package/dist/db/index.js.map +1 -0
  227. package/dist/edencss/eden-tokens.css +1 -0
  228. package/dist/edencss/eden.css +1 -0
  229. package/dist/file-open/FileOpenHandler.d.ts +59 -0
  230. package/dist/file-open/FileOpenHandler.d.ts.map +1 -0
  231. package/dist/file-open/FileOpenHandler.js +122 -0
  232. package/dist/file-open/FileOpenHandler.js.map +1 -0
  233. package/dist/file-open/FileOpenManager.d.ts +91 -0
  234. package/dist/file-open/FileOpenManager.d.ts.map +1 -0
  235. package/dist/file-open/FileOpenManager.js +411 -0
  236. package/dist/file-open/FileOpenManager.js.map +1 -0
  237. package/dist/file-open/index.d.ts +3 -0
  238. package/dist/file-open/index.d.ts.map +1 -0
  239. package/dist/file-open/index.js +8 -0
  240. package/dist/file-open/index.js.map +1 -0
  241. package/dist/filesystem/FilesystemHandler.d.ts +65 -0
  242. package/dist/filesystem/FilesystemHandler.d.ts.map +1 -0
  243. package/dist/filesystem/FilesystemHandler.js +134 -0
  244. package/dist/filesystem/FilesystemHandler.js.map +1 -0
  245. package/dist/filesystem/FilesystemManager.d.ts +70 -0
  246. package/dist/filesystem/FilesystemManager.d.ts.map +1 -0
  247. package/dist/filesystem/FilesystemManager.js +236 -0
  248. package/dist/filesystem/FilesystemManager.js.map +1 -0
  249. package/dist/filesystem/index.d.ts +3 -0
  250. package/dist/filesystem/index.d.ts.map +1 -0
  251. package/dist/filesystem/index.js +8 -0
  252. package/dist/filesystem/index.js.map +1 -0
  253. package/dist/foundation/foundation-preload.js +15 -0
  254. package/dist/foundation/foundation.css +40 -0
  255. package/dist/foundation/foundation.html +22 -0
  256. package/dist/foundation/foundation.js +69 -0
  257. package/dist/hotreload-config.d.ts +8 -0
  258. package/dist/hotreload-config.d.ts.map +1 -0
  259. package/dist/hotreload-config.js +73 -0
  260. package/dist/hotreload-config.js.map +1 -0
  261. package/dist/index.d.ts +7 -0
  262. package/dist/index.d.ts.map +1 -0
  263. package/dist/index.js +20 -0
  264. package/dist/index.js.map +1 -0
  265. package/dist/ipc/CommandDecorators.d.ts +72 -0
  266. package/dist/ipc/CommandDecorators.d.ts.map +1 -0
  267. package/dist/ipc/CommandDecorators.js +49 -0
  268. package/dist/ipc/CommandDecorators.js.map +1 -0
  269. package/dist/ipc/CommandRegistry.d.ts +77 -0
  270. package/dist/ipc/CommandRegistry.d.ts.map +1 -0
  271. package/dist/ipc/CommandRegistry.js +175 -0
  272. package/dist/ipc/CommandRegistry.js.map +1 -0
  273. package/dist/ipc/EdenEmitter.d.ts +54 -0
  274. package/dist/ipc/EdenEmitter.d.ts.map +1 -0
  275. package/dist/ipc/EdenEmitter.js +81 -0
  276. package/dist/ipc/EdenEmitter.js.map +1 -0
  277. package/dist/ipc/EventHandler.d.ts +21 -0
  278. package/dist/ipc/EventHandler.d.ts.map +1 -0
  279. package/dist/ipc/EventHandler.js +87 -0
  280. package/dist/ipc/EventHandler.js.map +1 -0
  281. package/dist/ipc/EventSubscriberManager.d.ts +67 -0
  282. package/dist/ipc/EventSubscriberManager.d.ts.map +1 -0
  283. package/dist/ipc/EventSubscriberManager.js +204 -0
  284. package/dist/ipc/EventSubscriberManager.js.map +1 -0
  285. package/dist/ipc/IPCBridge.d.ts +60 -0
  286. package/dist/ipc/IPCBridge.d.ts.map +1 -0
  287. package/dist/ipc/IPCBridge.js +186 -0
  288. package/dist/ipc/IPCBridge.js.map +1 -0
  289. package/dist/ipc/PermissionRegistry.d.ts +52 -0
  290. package/dist/ipc/PermissionRegistry.d.ts.map +1 -0
  291. package/dist/ipc/PermissionRegistry.js +120 -0
  292. package/dist/ipc/PermissionRegistry.js.map +1 -0
  293. package/dist/ipc/index.d.ts +7 -0
  294. package/dist/ipc/index.d.ts.map +1 -0
  295. package/dist/ipc/index.js +23 -0
  296. package/dist/ipc/index.js.map +1 -0
  297. package/dist/main.d.ts +2 -0
  298. package/dist/main.d.ts.map +1 -0
  299. package/dist/main.js +15 -0
  300. package/dist/main.js.map +1 -0
  301. package/dist/notification/NotificationHandler.d.ts +16 -0
  302. package/dist/notification/NotificationHandler.d.ts.map +1 -0
  303. package/dist/notification/NotificationHandler.js +39 -0
  304. package/dist/notification/NotificationHandler.js.map +1 -0
  305. package/dist/notification/NotificationManager.d.ts +32 -0
  306. package/dist/notification/NotificationManager.d.ts.map +1 -0
  307. package/dist/notification/NotificationManager.js +66 -0
  308. package/dist/notification/NotificationManager.js.map +1 -0
  309. package/dist/notification/index.d.ts +3 -0
  310. package/dist/notification/index.d.ts.map +1 -0
  311. package/dist/notification/index.js +19 -0
  312. package/dist/notification/index.js.map +1 -0
  313. package/dist/package-manager/PackageHandler.d.ts +50 -0
  314. package/dist/package-manager/PackageHandler.d.ts.map +1 -0
  315. package/dist/package-manager/PackageHandler.js +107 -0
  316. package/dist/package-manager/PackageHandler.js.map +1 -0
  317. package/dist/package-manager/PackageManager.d.ts +73 -0
  318. package/dist/package-manager/PackageManager.d.ts.map +1 -0
  319. package/dist/package-manager/PackageManager.js +373 -0
  320. package/dist/package-manager/PackageManager.js.map +1 -0
  321. package/dist/package-manager/index.d.ts +3 -0
  322. package/dist/package-manager/index.d.ts.map +1 -0
  323. package/dist/package-manager/index.js +8 -0
  324. package/dist/package-manager/index.js.map +1 -0
  325. package/dist/process-manager/AutostartManager.d.ts +15 -0
  326. package/dist/process-manager/AutostartManager.d.ts.map +1 -0
  327. package/dist/process-manager/AutostartManager.js +56 -0
  328. package/dist/process-manager/AutostartManager.js.map +1 -0
  329. package/dist/process-manager/BackendManager.d.ts +63 -0
  330. package/dist/process-manager/BackendManager.d.ts.map +1 -0
  331. package/dist/process-manager/BackendManager.js +272 -0
  332. package/dist/process-manager/BackendManager.js.map +1 -0
  333. package/dist/process-manager/ProcessHandler.d.ts +29 -0
  334. package/dist/process-manager/ProcessHandler.d.ts.map +1 -0
  335. package/dist/process-manager/ProcessHandler.js +66 -0
  336. package/dist/process-manager/ProcessHandler.js.map +1 -0
  337. package/dist/process-manager/ProcessManager.d.ts +94 -0
  338. package/dist/process-manager/ProcessManager.d.ts.map +1 -0
  339. package/dist/process-manager/ProcessManager.js +286 -0
  340. package/dist/process-manager/ProcessManager.js.map +1 -0
  341. package/dist/process-manager/index.d.ts +5 -0
  342. package/dist/process-manager/index.d.ts.map +1 -0
  343. package/dist/process-manager/index.js +12 -0
  344. package/dist/process-manager/index.js.map +1 -0
  345. package/dist/settings/EdenSettings.d.ts +8 -0
  346. package/dist/settings/EdenSettings.d.ts.map +1 -0
  347. package/dist/settings/EdenSettings.js +148 -0
  348. package/dist/settings/EdenSettings.js.map +1 -0
  349. package/dist/settings/SettingsHandler.d.ts +117 -0
  350. package/dist/settings/SettingsHandler.d.ts.map +1 -0
  351. package/dist/settings/SettingsHandler.js +199 -0
  352. package/dist/settings/SettingsHandler.js.map +1 -0
  353. package/dist/settings/SettingsManager.d.ts +64 -0
  354. package/dist/settings/SettingsManager.d.ts.map +1 -0
  355. package/dist/settings/SettingsManager.js +221 -0
  356. package/dist/settings/SettingsManager.js.map +1 -0
  357. package/dist/settings/index.d.ts +4 -0
  358. package/dist/settings/index.d.ts.map +1 -0
  359. package/dist/settings/index.js +11 -0
  360. package/dist/settings/index.js.map +1 -0
  361. package/dist/utils/cachedFileReader.d.ts +46 -0
  362. package/dist/utils/cachedFileReader.d.ts.map +1 -0
  363. package/dist/utils/cachedFileReader.js +100 -0
  364. package/dist/utils/cachedFileReader.js.map +1 -0
  365. package/dist/view-manager/DevToolsManager.d.ts +29 -0
  366. package/dist/view-manager/DevToolsManager.d.ts.map +1 -0
  367. package/dist/view-manager/DevToolsManager.js +88 -0
  368. package/dist/view-manager/DevToolsManager.js.map +1 -0
  369. package/dist/view-manager/FloatingWindowController.d.ts +44 -0
  370. package/dist/view-manager/FloatingWindowController.d.ts.map +1 -0
  371. package/dist/view-manager/FloatingWindowController.js +124 -0
  372. package/dist/view-manager/FloatingWindowController.js.map +1 -0
  373. package/dist/view-manager/LayoutCalculator.d.ts +49 -0
  374. package/dist/view-manager/LayoutCalculator.d.ts.map +1 -0
  375. package/dist/view-manager/LayoutCalculator.js +94 -0
  376. package/dist/view-manager/LayoutCalculator.js.map +1 -0
  377. package/dist/view-manager/MouseTracker.d.ts +65 -0
  378. package/dist/view-manager/MouseTracker.d.ts.map +1 -0
  379. package/dist/view-manager/MouseTracker.js +114 -0
  380. package/dist/view-manager/MouseTracker.js.map +1 -0
  381. package/dist/view-manager/TilingManager.d.ts +61 -0
  382. package/dist/view-manager/TilingManager.d.ts.map +1 -0
  383. package/dist/view-manager/TilingManager.js +142 -0
  384. package/dist/view-manager/TilingManager.js.map +1 -0
  385. package/dist/view-manager/ViewCreator.d.ts +72 -0
  386. package/dist/view-manager/ViewCreator.d.ts.map +1 -0
  387. package/dist/view-manager/ViewCreator.js +277 -0
  388. package/dist/view-manager/ViewCreator.js.map +1 -0
  389. package/dist/view-manager/ViewHandler.d.ts +112 -0
  390. package/dist/view-manager/ViewHandler.d.ts.map +1 -0
  391. package/dist/view-manager/ViewHandler.js +307 -0
  392. package/dist/view-manager/ViewHandler.js.map +1 -0
  393. package/dist/view-manager/ViewLifecycle.d.ts +66 -0
  394. package/dist/view-manager/ViewLifecycle.d.ts.map +1 -0
  395. package/dist/view-manager/ViewLifecycle.js +142 -0
  396. package/dist/view-manager/ViewLifecycle.js.map +1 -0
  397. package/dist/view-manager/ViewManager.d.ts +112 -0
  398. package/dist/view-manager/ViewManager.d.ts.map +1 -0
  399. package/dist/view-manager/ViewManager.js +422 -0
  400. package/dist/view-manager/ViewManager.js.map +1 -0
  401. package/dist/view-manager/index.d.ts +11 -0
  402. package/dist/view-manager/index.d.ts.map +1 -0
  403. package/dist/view-manager/index.js +23 -0
  404. package/dist/view-manager/index.js.map +1 -0
  405. package/dist/view-manager/types.d.ts +24 -0
  406. package/dist/view-manager/types.d.ts.map +1 -0
  407. package/dist/view-manager/types.js +11 -0
  408. package/dist/view-manager/types.js.map +1 -0
  409. package/edencss/README.md +214 -0
  410. package/edencss/components/badges.css +180 -0
  411. package/edencss/components/buttons.css +221 -0
  412. package/edencss/components/cards.css +201 -0
  413. package/edencss/components/inputs.css +424 -0
  414. package/edencss/components/lists.css +242 -0
  415. package/edencss/components/modals.css +207 -0
  416. package/edencss/components/progress.css +186 -0
  417. package/edencss/components/sidebar.css +232 -0
  418. package/edencss/components/tabs.css +189 -0
  419. package/edencss/eden.css +16 -0
  420. package/edencss/index.ts +11 -0
  421. package/edencss/style-dictionary.config.mjs +75 -0
  422. package/edencss/tokens-pink.json +163 -0
  423. package/edencss/tokens.css +121 -0
  424. package/edencss/tokens.d.ts +111 -0
  425. package/edencss/tokens.json +369 -0
  426. package/edencss/tokens.ts +125 -0
  427. package/edencss/utilities.css +423 -0
  428. package/foundation/foundation-preload.js +15 -0
  429. package/foundation/foundation.css +40 -0
  430. package/foundation/foundation.html +22 -0
  431. package/foundation/foundation.js +69 -0
  432. package/package.json +55 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "com.eden.files",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "vite",
7
+ "build": "vite build",
8
+ "preview": "vite preview"
9
+ },
10
+ "devDependencies": {
11
+ "@edenapp/types": "workspace:*",
12
+ "solid-js": "^1.9.10",
13
+ "typescript": "^5.3.0",
14
+ "vite": "^7.2.4",
15
+ "vite-plugin-solid": "^2.11.10"
16
+ },
17
+ "dependencies": {
18
+ "solid-icons": "^1.1.0"
19
+ }
20
+ }
@@ -0,0 +1,387 @@
1
+ import { createSignal, createEffect, onMount } from "solid-js";
2
+ import type { Component } from "solid-js";
3
+ import type { FileItem, DisplayPreferences } from "./types";
4
+ import { joinPath, getParentPath, isValidName } from "./utils";
5
+ import FileExplorerHeader from "./components/FileExplorerHeader";
6
+ import FileList from "./components/FileList";
7
+ import CreateFolderDialog from "./dialogs/CreateFolderDialog";
8
+ import CreateFileDialog from "./dialogs/CreateFileDialog";
9
+ import DeleteConfirmDialog from "./dialogs/DeleteConfirmDialog";
10
+ import ErrorDialog from "./dialogs/ErrorDialog";
11
+ import DisplayOptionsModal from "./dialogs/DisplayOptionsModal";
12
+
13
+ const App: Component = () => {
14
+ const [currentPath, setCurrentPath] = createSignal("/");
15
+ const [items, setItems] = createSignal<FileItem[]>([]);
16
+ const [loading, setLoading] = createSignal(true);
17
+ const [selectedItem, setSelectedItem] = createSignal<string | null>(null);
18
+ const [scrollToSelected, setScrollToSelected] = createSignal(false);
19
+ const [navigationHistory, setNavigationHistory] = createSignal<string[]>([
20
+ "/",
21
+ ]);
22
+ const [historyIndex, setHistoryIndex] = createSignal(0);
23
+
24
+ // Modal states
25
+ const [showNewFolderDialog, setShowNewFolderDialog] = createSignal(false);
26
+ const [showNewFileDialog, setShowNewFileDialog] = createSignal(false);
27
+ const [showDeleteDialog, setShowDeleteDialog] = createSignal(false);
28
+ const [showErrorDialog, setShowErrorDialog] = createSignal(false);
29
+ const [showDisplayOptionsModal, setShowDisplayOptionsModal] = createSignal(false);
30
+ const [errorMessage, setErrorMessage] = createSignal("");
31
+ const [itemToDelete, setItemToDelete] = createSignal<FileItem | null>(null);
32
+
33
+ // Display preferences
34
+ const [displayPreferences, setDisplayPreferences] = createSignal<DisplayPreferences>({
35
+ viewStyle: 'grid',
36
+ itemSize: 'medium',
37
+ sortBy: 'name',
38
+ sortOrder: 'asc',
39
+ });
40
+
41
+ // Load preferences from database on mount
42
+ onMount(async () => {
43
+ try {
44
+ const result = await window.edenAPI.shellCommand('db/get', { key: 'display-preferences' });
45
+ if (result.value) {
46
+ setDisplayPreferences(JSON.parse(result.value));
47
+ }
48
+ } catch (error) {
49
+ console.error('Failed to load display preferences:', error);
50
+ }
51
+ });
52
+
53
+ const loadDirectory = async (path: string) => {
54
+ try {
55
+ setLoading(true);
56
+ setCurrentPath(path);
57
+
58
+ const dirItems = await window.edenAPI.shellCommand(
59
+ "fs/readdir",
60
+ { path }
61
+ );
62
+ const itemsWithStats = await Promise.all(
63
+ dirItems.map(async (name: string) => {
64
+ const itemPath = joinPath(path, name);
65
+ try {
66
+ const stats = await window.edenAPI.shellCommand(
67
+ "fs/stat",
68
+ { path: itemPath }
69
+ );
70
+ return {
71
+ name,
72
+ path: itemPath,
73
+ isDirectory: stats.isDirectory,
74
+ isFile: stats.isFile,
75
+ size: stats.size,
76
+ modified: new Date(stats.mtime),
77
+ };
78
+ } catch (error) {
79
+ return {
80
+ name,
81
+ path: itemPath,
82
+ isDirectory: false,
83
+ isFile: true,
84
+ size: 0,
85
+ modified: new Date(),
86
+ };
87
+ }
88
+ })
89
+ );
90
+
91
+ const sorted = sortItems(itemsWithStats);
92
+ setItems(sorted);
93
+ } catch (error) {
94
+ console.error("Error loading directory:", error);
95
+ showError("Failed to load directory: " + (error as Error).message);
96
+ } finally {
97
+ setLoading(false);
98
+ }
99
+ };
100
+
101
+ createEffect(() => {
102
+ loadDirectory(currentPath());
103
+ });
104
+
105
+ // Handle mouse button 4/5 for back/forward navigation
106
+ createEffect(() => {
107
+ const handleMouseButton = (e: MouseEvent) => {
108
+ if (e.button === 3) {
109
+ // Mouse button 4 (back)
110
+ e.preventDefault();
111
+ goBack();
112
+ } else if (e.button === 4) {
113
+ // Mouse button 5 (forward)
114
+ e.preventDefault();
115
+ goForward();
116
+ }
117
+ };
118
+
119
+ document.addEventListener("mousedown", handleMouseButton);
120
+
121
+ return () => {
122
+ document.removeEventListener("mousedown", handleMouseButton);
123
+ };
124
+ });
125
+
126
+ const navigateTo = (path: string, selectedItem?: string) => {
127
+ const history = navigationHistory();
128
+ const index = historyIndex();
129
+
130
+ if (index === history.length - 1) {
131
+ setNavigationHistory([...history, path]);
132
+ setHistoryIndex(index + 1);
133
+ } else {
134
+ setNavigationHistory([...history.slice(0, index + 1), path]);
135
+ setHistoryIndex(index + 1);
136
+ }
137
+
138
+ loadDirectory(path);
139
+
140
+ // If a specific item should be selected, set it after navigation and trigger scroll
141
+ if (selectedItem) {
142
+ setScrollToSelected(true);
143
+ setSelectedItem(selectedItem);
144
+ }
145
+ };
146
+
147
+ const goBack = () => {
148
+ const index = historyIndex();
149
+ if (index > 0) {
150
+ setHistoryIndex(index - 1);
151
+ loadDirectory(navigationHistory()[index - 1]);
152
+ }
153
+ };
154
+
155
+ const goForward = () => {
156
+ const history = navigationHistory();
157
+ const index = historyIndex();
158
+ if (index < history.length - 1) {
159
+ setHistoryIndex(index + 1);
160
+ loadDirectory(history[index + 1]);
161
+ }
162
+ };
163
+
164
+ const goUp = () => {
165
+ const parentPath = getParentPath(currentPath());
166
+ if (parentPath !== currentPath()) {
167
+ navigateTo(parentPath);
168
+ }
169
+ };
170
+
171
+ const refresh = () => {
172
+ loadDirectory(currentPath());
173
+ };
174
+
175
+ const sortItems = (items: FileItem[]): FileItem[] => {
176
+ const prefs = displayPreferences();
177
+
178
+ return [...items].sort((a, b) => {
179
+ // Folders always come first
180
+ if (a.isDirectory && !b.isDirectory) return -1;
181
+ if (!a.isDirectory && b.isDirectory) return 1;
182
+
183
+ // Then sort by selected criteria
184
+ let comparison = 0;
185
+ switch (prefs.sortBy) {
186
+ case 'name':
187
+ comparison = a.name.localeCompare(b.name);
188
+ break;
189
+ case 'size':
190
+ comparison = a.size - b.size;
191
+ break;
192
+ case 'modified':
193
+ comparison = a.modified.getTime() - b.modified.getTime();
194
+ break;
195
+ }
196
+
197
+ return prefs.sortOrder === 'asc' ? comparison : -comparison;
198
+ });
199
+ };
200
+
201
+ const handlePreferencesChange = async (newPreferences: DisplayPreferences) => {
202
+ setDisplayPreferences(newPreferences);
203
+ // Re-sort existing items with new preferences
204
+ const currentItems = items();
205
+ if (currentItems.length > 0) {
206
+ setItems(sortItems(currentItems));
207
+ }
208
+
209
+ // Persist preferences to database
210
+ try {
211
+ await window.edenAPI.shellCommand('db/set', {
212
+ key: 'display-preferences',
213
+ value: JSON.stringify(newPreferences)
214
+ });
215
+ } catch (error) {
216
+ console.error('Failed to save display preferences:', error);
217
+ }
218
+ };
219
+
220
+ const createFolder = async (name: string) => {
221
+ const trimmedName = name.trim();
222
+ if (!trimmedName || !isValidName(trimmedName)) {
223
+ showError("Invalid folder name");
224
+ return;
225
+ }
226
+
227
+ const folderPath = joinPath(currentPath(), trimmedName);
228
+
229
+ try {
230
+ await window.edenAPI.shellCommand("fs/mkdir", {
231
+ path: folderPath,
232
+ });
233
+ setShowNewFolderDialog(false);
234
+ refresh();
235
+ } catch (error) {
236
+ showError("Failed to create folder: " + (error as Error).message);
237
+ }
238
+ };
239
+
240
+ const createFile = async (name: string) => {
241
+ const trimmedName = name.trim();
242
+ if (!trimmedName || !isValidName(trimmedName)) {
243
+ showError("Invalid file name");
244
+ return;
245
+ }
246
+
247
+ const filePath = joinPath(currentPath(), trimmedName);
248
+
249
+ try {
250
+ await window.edenAPI.shellCommand("fs/write", {
251
+ path: filePath,
252
+ content: "",
253
+ });
254
+ setShowNewFileDialog(false);
255
+ refresh();
256
+ } catch (error) {
257
+ showError("Failed to create file: " + (error as Error).message);
258
+ }
259
+ };
260
+
261
+ const confirmDelete = async () => {
262
+ const item = itemToDelete();
263
+ if (!item) return;
264
+
265
+ try {
266
+ await window.edenAPI.shellCommand("fs/delete", {
267
+ path: item.path,
268
+ });
269
+ setShowDeleteDialog(false);
270
+ setItemToDelete(null);
271
+ refresh();
272
+ } catch (error) {
273
+ showError("Failed to delete item: " + (error as Error).message);
274
+ }
275
+ };
276
+
277
+ const showError = (message: string) => {
278
+ setErrorMessage(message);
279
+ setShowErrorDialog(true);
280
+ };
281
+
282
+ const handleItemClick = (item: FileItem) => {
283
+ setScrollToSelected(false); // Don't scroll when clicking directly
284
+ setSelectedItem(item.path);
285
+ };
286
+
287
+ const handleItemDoubleClick = async (item: FileItem) => {
288
+ if (item.isDirectory) {
289
+ navigateTo(item.path);
290
+ } else {
291
+ // Open files with their registered handler
292
+ try {
293
+ let result = await window.edenAPI.shellCommand("file/open", { path: item.path });
294
+ if(!result.success) {
295
+ showError("Failed to open file: " + result.error);
296
+ }
297
+ } catch (error) {
298
+ showError("Failed to open file: " + (error as Error).message);
299
+ }
300
+ }
301
+ };
302
+
303
+ const handleDeleteClick = (item: FileItem, e: MouseEvent) => {
304
+ e.stopPropagation();
305
+ setItemToDelete(item);
306
+ setShowDeleteDialog(true);
307
+ };
308
+
309
+ const getBreadcrumbs = () => {
310
+ const path = currentPath();
311
+ const parts = path.split("/").filter((p) => p);
312
+
313
+ const crumbs = [{ name: "/", path: "/" }];
314
+ let accumulatedPath = "";
315
+
316
+ parts.forEach((part) => {
317
+ accumulatedPath += "/" + part;
318
+ crumbs.push({ name: part, path: accumulatedPath });
319
+ });
320
+
321
+ return crumbs;
322
+ };
323
+
324
+ return (
325
+ <div class="file-explorer">
326
+ <FileExplorerHeader
327
+ currentPath={currentPath()}
328
+ historyIndex={historyIndex()}
329
+ historyLength={navigationHistory().length}
330
+ breadcrumbs={getBreadcrumbs()}
331
+ onGoBack={goBack}
332
+ onGoForward={goForward}
333
+ onGoUp={goUp}
334
+ onNavigate={navigateTo}
335
+ onNewFolder={() => setShowNewFolderDialog(true)}
336
+ onNewFile={() => setShowNewFileDialog(true)}
337
+ onOpenDisplayOptions={() => setShowDisplayOptionsModal(true)}
338
+ />
339
+
340
+ <FileList
341
+ loading={loading()}
342
+ items={items()}
343
+ selectedItem={selectedItem()}
344
+ scrollToSelected={scrollToSelected()}
345
+ viewStyle={displayPreferences().viewStyle}
346
+ itemSize={displayPreferences().itemSize}
347
+ onItemClick={handleItemClick}
348
+ onItemDoubleClick={handleItemDoubleClick}
349
+ onItemDelete={handleDeleteClick}
350
+ />
351
+
352
+ <CreateFolderDialog
353
+ show={showNewFolderDialog()}
354
+ onClose={() => setShowNewFolderDialog(false)}
355
+ onCreate={createFolder}
356
+ />
357
+
358
+ <CreateFileDialog
359
+ show={showNewFileDialog()}
360
+ onClose={() => setShowNewFileDialog(false)}
361
+ onCreate={createFile}
362
+ />
363
+
364
+ <DeleteConfirmDialog
365
+ show={showDeleteDialog()}
366
+ onClose={() => setShowDeleteDialog(false)}
367
+ onConfirm={confirmDelete}
368
+ item={itemToDelete()}
369
+ />
370
+
371
+ <ErrorDialog
372
+ show={showErrorDialog()}
373
+ onClose={() => setShowErrorDialog(false)}
374
+ message={errorMessage()}
375
+ />
376
+
377
+ <DisplayOptionsModal
378
+ show={showDisplayOptionsModal()}
379
+ preferences={displayPreferences()}
380
+ onClose={() => setShowDisplayOptionsModal(false)}
381
+ onChange={handlePreferencesChange}
382
+ />
383
+ </div>
384
+ );
385
+ };
386
+
387
+ export default App;
@@ -0,0 +1,90 @@
1
+ import { createSignal } from "solid-js";
2
+ import type { Component } from "solid-js";
3
+ import Omnibox from "./Omnibox";
4
+ import { FaSolidArrowLeft, FaSolidArrowRight, FaSolidArrowUp, FaSolidFolderPlus, FaSolidFileMedical, FaSolidEllipsis } from "solid-icons/fa";
5
+
6
+ interface Breadcrumb {
7
+ name: string;
8
+ path: string;
9
+ }
10
+
11
+ interface FileExplorerHeaderProps {
12
+ currentPath: string;
13
+ historyIndex: number;
14
+ historyLength: number;
15
+ breadcrumbs: Breadcrumb[];
16
+ onGoBack: () => void;
17
+ onGoForward: () => void;
18
+ onGoUp: () => void;
19
+ onNavigate: (path: string) => void;
20
+ onNewFolder: () => void;
21
+ onNewFile: () => void;
22
+ onOpenDisplayOptions: () => void;
23
+ }
24
+
25
+ const FileExplorerHeader: Component<FileExplorerHeaderProps> = (props) => {
26
+ return (
27
+ <header class="explorer-header">
28
+ <div class="header-content">
29
+ <div class="toolbar-left">
30
+ <button
31
+ class="eden-btn eden-btn-sm eden-btn-square"
32
+ onClick={props.onGoBack}
33
+ disabled={props.historyIndex === 0}
34
+ title="Go back"
35
+ >
36
+ <FaSolidArrowLeft />
37
+ </button>
38
+ <button
39
+ class="eden-btn eden-btn-sm eden-btn-square"
40
+ onClick={props.onGoForward}
41
+ disabled={props.historyIndex >= props.historyLength - 1}
42
+ title="Go forward"
43
+ >
44
+ <FaSolidArrowRight />
45
+ </button>
46
+ <button
47
+ class="eden-btn eden-btn-sm eden-btn-square"
48
+ onClick={props.onGoUp}
49
+ disabled={props.currentPath === "/"}
50
+ title="Go up"
51
+ >
52
+ <FaSolidArrowUp />
53
+ </button>
54
+ </div>
55
+
56
+ <Omnibox
57
+ currentPath={props.currentPath}
58
+ breadcrumbs={props.breadcrumbs}
59
+ onNavigate={props.onNavigate}
60
+ />
61
+
62
+ <div class="toolbar-right">
63
+ <button
64
+ class="eden-btn eden-btn-sm eden-btn-square"
65
+ onClick={props.onNewFolder}
66
+ title="New Folder"
67
+ >
68
+ <FaSolidFolderPlus />
69
+ </button>
70
+ <button
71
+ class="eden-btn eden-btn-sm eden-btn-square"
72
+ onClick={props.onNewFile}
73
+ title="New File"
74
+ >
75
+ <FaSolidFileMedical />
76
+ </button>
77
+ <button
78
+ class="eden-btn eden-btn-sm eden-btn-square"
79
+ onClick={props.onOpenDisplayOptions}
80
+ title="Display Options"
81
+ >
82
+ <FaSolidEllipsis />
83
+ </button>
84
+ </div>
85
+ </div>
86
+ </header>
87
+ );
88
+ };
89
+
90
+ export default FileExplorerHeader;
@@ -0,0 +1,70 @@
1
+ import type { Component } from "solid-js";
2
+ import type { FileItem, ViewStyle, ItemSize } from "../types";
3
+ import { getFileIcon, formatFileSize } from "../utils";
4
+
5
+ interface FileItemComponentProps {
6
+ ref?: (el: HTMLDivElement) => void;
7
+ item: FileItem;
8
+ isSelected: boolean;
9
+ viewStyle: ViewStyle;
10
+ itemSize: ItemSize;
11
+ onClick: (item: FileItem) => void;
12
+ onDoubleClick: (item: FileItem) => void;
13
+ onDelete: (item: FileItem, e: MouseEvent) => void;
14
+ }
15
+
16
+ const FileItemComponent: Component<FileItemComponentProps> = (props) => {
17
+ const formatDate = (date: Date) => {
18
+ return new Intl.DateTimeFormat('en-US', {
19
+ month: 'short',
20
+ day: 'numeric',
21
+ year: 'numeric',
22
+ hour: '2-digit',
23
+ minute: '2-digit'
24
+ }).format(date);
25
+ };
26
+
27
+ return (
28
+ <div
29
+ ref={props.ref}
30
+ class="file-item"
31
+ classList={{
32
+ selected: props.isSelected,
33
+ 'list-view': props.viewStyle === 'list',
34
+ [`size-${props.itemSize}`]: true
35
+ }}
36
+ onClick={() => props.onClick(props.item)}
37
+ onDblClick={() => props.onDoubleClick(props.item)}
38
+ >
39
+ <div class="file-icon">{getFileIcon(props.item)}</div>
40
+ <div class="file-name">{props.item.name}</div>
41
+
42
+ {props.viewStyle === 'list' && (
43
+ <>
44
+ <div class="file-size">
45
+ {props.item.isFile ? formatFileSize(props.item.size) : "—"}
46
+ </div>
47
+ <div class="file-modified">{formatDate(props.item.modified)}</div>
48
+ </>
49
+ )}
50
+
51
+ {props.viewStyle === 'grid' && (
52
+ <div class="file-meta">
53
+ {props.item.isFile ? formatFileSize(props.item.size) : "Folder"}
54
+ </div>
55
+ )}
56
+
57
+ <div class="file-item-actions">
58
+ <button
59
+ class="eden-btn eden-btn-danger eden-btn-xs file-action-btn"
60
+ onClick={(e) => props.onDelete(props.item, e)}
61
+ title="Delete"
62
+ >
63
+ ×
64
+ </button>
65
+ </div>
66
+ </div>
67
+ );
68
+ };
69
+
70
+ export default FileItemComponent;
@@ -0,0 +1,77 @@
1
+ import { Show, For, createEffect } from "solid-js";
2
+ import type { Component } from "solid-js";
3
+ import type { FileItem, ViewStyle, ItemSize } from "../types";
4
+ import FileItemComponent from "./FileItem";
5
+
6
+ interface FileListProps {
7
+ loading: boolean;
8
+ items: FileItem[];
9
+ selectedItem: string | null;
10
+ scrollToSelected?: boolean;
11
+ viewStyle: ViewStyle;
12
+ itemSize: ItemSize;
13
+ onItemClick: (item: FileItem) => void;
14
+ onItemDoubleClick: (item: FileItem) => void;
15
+ onItemDelete: (item: FileItem, e: MouseEvent) => void;
16
+ }
17
+
18
+ const FileList: Component<FileListProps> = (props) => {
19
+ let fileRefs: Map<string, HTMLDivElement> = new Map();
20
+
21
+ createEffect(() => {
22
+ // Track items to re-run when list updates
23
+ const items = props.items;
24
+ const shouldScroll = props.scrollToSelected;
25
+ const selected = props.selectedItem;
26
+
27
+ // Only scroll when explicitly requested (e.g., when selecting from omnibox)
28
+ if (shouldScroll && selected && items.length > 0) {
29
+ // Wait for DOM to update with new refs
30
+ requestAnimationFrame(() => {
31
+ const element = fileRefs.get(selected);
32
+ if (element) {
33
+ element.scrollIntoView({ behavior: "smooth", block: "nearest" });
34
+ }
35
+ });
36
+ }
37
+ });
38
+
39
+ return (
40
+ <main class="explorer-content">
41
+ <Show when={props.loading}>
42
+ <div class="loading-message">Loading...</div>
43
+ </Show>
44
+
45
+ <Show when={!props.loading && props.items.length === 0}>
46
+ <div class="empty-state">
47
+ <div class="empty-icon">📂</div>
48
+ <div class="empty-message">This folder is empty</div>
49
+ <div class="empty-hint">
50
+ Create a new file or folder to get started
51
+ </div>
52
+ </div>
53
+ </Show>
54
+
55
+ <Show when={!props.loading && props.items.length > 0}>
56
+ <div class="file-list" classList={{ 'list-view': props.viewStyle === 'list' }}>
57
+ <For each={props.items}>
58
+ {(item) => (
59
+ <FileItemComponent
60
+ ref={(el: HTMLDivElement) => fileRefs.set(item.path, el)}
61
+ item={item}
62
+ isSelected={props.selectedItem === item.path}
63
+ viewStyle={props.viewStyle}
64
+ itemSize={props.itemSize}
65
+ onClick={props.onItemClick}
66
+ onDoubleClick={props.onItemDoubleClick}
67
+ onDelete={props.onItemDelete}
68
+ />
69
+ )}
70
+ </For>
71
+ </div>
72
+ </Show>
73
+ </main>
74
+ );
75
+ };
76
+
77
+ export default FileList;
@@ -0,0 +1,48 @@
1
+ import { Show, JSX } from "solid-js";
2
+ import type { Component } from "solid-js";
3
+
4
+ interface ModalProps {
5
+ show: boolean;
6
+ onClose: () => void;
7
+ title: string;
8
+ size?: "sm" | "md" | "lg";
9
+ children: JSX.Element;
10
+ footer?: JSX.Element;
11
+ }
12
+
13
+ const Modal: Component<ModalProps> = (props) => {
14
+ const sizeClass = () => {
15
+ switch (props.size) {
16
+ case "sm":
17
+ return "eden-modal-sm";
18
+ case "lg":
19
+ return "eden-modal-lg";
20
+ default:
21
+ return "";
22
+ }
23
+ };
24
+
25
+ return (
26
+ <Show when={props.show}>
27
+ <div class="eden-modal-overlay" onClick={props.onClose}>
28
+ <div
29
+ class={`eden-modal ${sizeClass()}`}
30
+ onClick={(e) => e.stopPropagation()}
31
+ >
32
+ <div class="eden-modal-header">
33
+ <h3 class="eden-modal-title">{props.title}</h3>
34
+ <button class="eden-modal-close" onClick={props.onClose}>
35
+ ×
36
+ </button>
37
+ </div>
38
+ <div class="eden-modal-body">{props.children}</div>
39
+ <Show when={props.footer}>
40
+ <div class="eden-modal-footer">{props.footer}</div>
41
+ </Show>
42
+ </div>
43
+ </div>
44
+ </Show>
45
+ );
46
+ };
47
+
48
+ export default Modal;