@desktalk/core 0.1.0-alpha.1

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 (281) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cli/index.d.ts +3 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +82 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/frontend/assets/frontend-B3QNYf3p.js +413 -0
  7. package/dist/frontend/assets/frontend-B3QNYf3p.js.map +1 -0
  8. package/dist/frontend/assets/frontend-B4aeXn9d.js +416 -0
  9. package/dist/frontend/assets/frontend-B4aeXn9d.js.map +1 -0
  10. package/dist/frontend/assets/frontend-BwyRSlHp.js +6513 -0
  11. package/dist/frontend/assets/frontend-BwyRSlHp.js.map +1 -0
  12. package/dist/frontend/assets/frontend-Dix2OWTT.js +229 -0
  13. package/dist/frontend/assets/frontend-Dix2OWTT.js.map +1 -0
  14. package/dist/frontend/assets/frontend-Dx41dEM9.js +407 -0
  15. package/dist/frontend/assets/frontend-Dx41dEM9.js.map +1 -0
  16. package/dist/frontend/assets/frontend-WpQng8Mt.js +1991 -0
  17. package/dist/frontend/assets/frontend-WpQng8Mt.js.map +1 -0
  18. package/dist/frontend/assets/frontend-rTwBdJbn.js +2123 -0
  19. package/dist/frontend/assets/frontend-rTwBdJbn.js.map +1 -0
  20. package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js +2 -0
  21. package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js.map +1 -0
  22. package/dist/frontend/assets/index-C5-XUOS7.js +1863 -0
  23. package/dist/frontend/assets/index-C5-XUOS7.js.map +1 -0
  24. package/dist/frontend/assets/index-C_e3_6yE.css +1 -0
  25. package/dist/frontend/index.html +22 -0
  26. package/dist/frontend/pcm-capture-processor.js +65 -0
  27. package/dist/i18n/manifest.json +34 -0
  28. package/dist/i18n/zh-CN.json +7 -0
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +6 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/server/admin-routes.d.ts +14 -0
  34. package/dist/server/admin-routes.d.ts.map +1 -0
  35. package/dist/server/admin-routes.js +118 -0
  36. package/dist/server/admin-routes.js.map +1 -0
  37. package/dist/server/api-routes.d.ts +8 -0
  38. package/dist/server/api-routes.d.ts.map +1 -0
  39. package/dist/server/api-routes.js +203 -0
  40. package/dist/server/api-routes.js.map +1 -0
  41. package/dist/server/auth-routes.d.ts +19 -0
  42. package/dist/server/auth-routes.d.ts.map +1 -0
  43. package/dist/server/auth-routes.js +155 -0
  44. package/dist/server/auth-routes.js.map +1 -0
  45. package/dist/server/dtfs-routes.d.ts +3 -0
  46. package/dist/server/dtfs-routes.d.ts.map +1 -0
  47. package/dist/server/dtfs-routes.js +183 -0
  48. package/dist/server/dtfs-routes.js.map +1 -0
  49. package/dist/server/index.d.ts +15 -0
  50. package/dist/server/index.d.ts.map +1 -0
  51. package/dist/server/index.js +158 -0
  52. package/dist/server/index.js.map +1 -0
  53. package/dist/server/monaco-routes.d.ts +3 -0
  54. package/dist/server/monaco-routes.d.ts.map +1 -0
  55. package/dist/server/monaco-routes.js +45 -0
  56. package/dist/server/monaco-routes.js.map +1 -0
  57. package/dist/server/voice-routes.d.ts +7 -0
  58. package/dist/server/voice-routes.d.ts.map +1 -0
  59. package/dist/server/voice-routes.js +142 -0
  60. package/dist/server/voice-routes.js.map +1 -0
  61. package/dist/server/ws-routes.d.ts +29 -0
  62. package/dist/server/ws-routes.d.ts.map +1 -0
  63. package/dist/server/ws-routes.js +334 -0
  64. package/dist/server/ws-routes.js.map +1 -0
  65. package/dist/services/ai/action-tool.d.ts +9 -0
  66. package/dist/services/ai/action-tool.d.ts.map +1 -0
  67. package/dist/services/ai/action-tool.js +51 -0
  68. package/dist/services/ai/action-tool.js.map +1 -0
  69. package/dist/services/ai/app-tools.d.ts +15 -0
  70. package/dist/services/ai/app-tools.d.ts.map +1 -0
  71. package/dist/services/ai/app-tools.js +119 -0
  72. package/dist/services/ai/app-tools.js.map +1 -0
  73. package/dist/services/ai/chat-service.d.ts +27 -0
  74. package/dist/services/ai/chat-service.d.ts.map +1 -0
  75. package/dist/services/ai/chat-service.js +213 -0
  76. package/dist/services/ai/chat-service.js.map +1 -0
  77. package/dist/services/ai/create-liveapp-tool.d.ts +15 -0
  78. package/dist/services/ai/create-liveapp-tool.d.ts.map +1 -0
  79. package/dist/services/ai/create-liveapp-tool.js +142 -0
  80. package/dist/services/ai/create-liveapp-tool.js.map +1 -0
  81. package/dist/services/ai/desktop-tool.d.ts +27 -0
  82. package/dist/services/ai/desktop-tool.d.ts.map +1 -0
  83. package/dist/services/ai/desktop-tool.js +106 -0
  84. package/dist/services/ai/desktop-tool.js.map +1 -0
  85. package/dist/services/ai/edit-history.d.ts +16 -0
  86. package/dist/services/ai/edit-history.d.ts.map +1 -0
  87. package/dist/services/ai/edit-history.js +137 -0
  88. package/dist/services/ai/edit-history.js.map +1 -0
  89. package/dist/services/ai/edit-tool.d.ts +9 -0
  90. package/dist/services/ai/edit-tool.d.ts.map +1 -0
  91. package/dist/services/ai/edit-tool.js +113 -0
  92. package/dist/services/ai/edit-tool.js.map +1 -0
  93. package/dist/services/ai/generate-html-tool.d.ts +15 -0
  94. package/dist/services/ai/generate-html-tool.d.ts.map +1 -0
  95. package/dist/services/ai/generate-html-tool.js +140 -0
  96. package/dist/services/ai/generate-html-tool.js.map +1 -0
  97. package/dist/services/ai/generate-icon-tool.d.ts +10 -0
  98. package/dist/services/ai/generate-icon-tool.d.ts.map +1 -0
  99. package/dist/services/ai/generate-icon-tool.js +58 -0
  100. package/dist/services/ai/generate-icon-tool.js.map +1 -0
  101. package/dist/services/ai/html-bridge-script.d.ts +2 -0
  102. package/dist/services/ai/html-bridge-script.d.ts.map +1 -0
  103. package/dist/services/ai/html-bridge-script.js +2 -0
  104. package/dist/services/ai/html-bridge-script.js.map +1 -0
  105. package/dist/services/ai/html-guidelines-tool.d.ts +3 -0
  106. package/dist/services/ai/html-guidelines-tool.d.ts.map +1 -0
  107. package/dist/services/ai/html-guidelines-tool.js +157 -0
  108. package/dist/services/ai/html-guidelines-tool.js.map +1 -0
  109. package/dist/services/ai/html-stream-coordinator.d.ts +92 -0
  110. package/dist/services/ai/html-stream-coordinator.d.ts.map +1 -0
  111. package/dist/services/ai/html-stream-coordinator.js +314 -0
  112. package/dist/services/ai/html-stream-coordinator.js.map +1 -0
  113. package/dist/services/ai/html-theme-link.d.ts +9 -0
  114. package/dist/services/ai/html-theme-link.d.ts.map +1 -0
  115. package/dist/services/ai/html-theme-link.js +12 -0
  116. package/dist/services/ai/html-theme-link.js.map +1 -0
  117. package/dist/services/ai/html-ui-script.d.ts +9 -0
  118. package/dist/services/ai/html-ui-script.d.ts.map +1 -0
  119. package/dist/services/ai/html-ui-script.js +9 -0
  120. package/dist/services/ai/html-ui-script.js.map +1 -0
  121. package/dist/services/ai/image-generation-service.d.ts +26 -0
  122. package/dist/services/ai/image-generation-service.d.ts.map +1 -0
  123. package/dist/services/ai/image-generation-service.js +205 -0
  124. package/dist/services/ai/image-generation-service.js.map +1 -0
  125. package/dist/services/ai/manual-pages/desktop-actions.md +36 -0
  126. package/dist/services/ai/manual-pages/desktop-windows.md +24 -0
  127. package/dist/services/ai/manual-pages/dt-badge.md +36 -0
  128. package/dist/services/ai/manual-pages/dt-button.md +38 -0
  129. package/dist/services/ai/manual-pages/dt-card.md +22 -0
  130. package/dist/services/ai/manual-pages/dt-chart.md +261 -0
  131. package/dist/services/ai/manual-pages/dt-divider.md +25 -0
  132. package/dist/services/ai/manual-pages/dt-grid.md +29 -0
  133. package/dist/services/ai/manual-pages/dt-list-view.md +96 -0
  134. package/dist/services/ai/manual-pages/dt-markdown-editor.md +90 -0
  135. package/dist/services/ai/manual-pages/dt-markdown.md +86 -0
  136. package/dist/services/ai/manual-pages/dt-select.md +21 -0
  137. package/dist/services/ai/manual-pages/dt-stack.md +31 -0
  138. package/dist/services/ai/manual-pages/dt-stat.md +43 -0
  139. package/dist/services/ai/manual-pages/dt-table-view.md +120 -0
  140. package/dist/services/ai/manual-pages/dt-tooltip.md +18 -0
  141. package/dist/services/ai/manual-pages/editing-preview.md +25 -0
  142. package/dist/services/ai/manual-pages/html-actions.md +74 -0
  143. package/dist/services/ai/manual-pages/html-bridge.md +187 -0
  144. package/dist/services/ai/manual-pages/html-components.md +66 -0
  145. package/dist/services/ai/manual-pages/html-examples.md +185 -0
  146. package/dist/services/ai/manual-pages/html-layouts.md +128 -0
  147. package/dist/services/ai/manual-pages/html-storage.md +153 -0
  148. package/dist/services/ai/manual-pages/html-tokens.md +26 -0
  149. package/dist/services/ai/manual-pages/index.d.ts +10 -0
  150. package/dist/services/ai/manual-pages/index.d.ts.map +1 -0
  151. package/dist/services/ai/manual-pages/index.js +186 -0
  152. package/dist/services/ai/manual-pages/index.js.map +1 -0
  153. package/dist/services/ai/manual-tool.d.ts +3 -0
  154. package/dist/services/ai/manual-tool.d.ts.map +1 -0
  155. package/dist/services/ai/manual-tool.js +104 -0
  156. package/dist/services/ai/manual-tool.js.map +1 -0
  157. package/dist/services/ai/pi-session-service.d.ts +101 -0
  158. package/dist/services/ai/pi-session-service.d.ts.map +1 -0
  159. package/dist/services/ai/pi-session-service.js +697 -0
  160. package/dist/services/ai/pi-session-service.js.map +1 -0
  161. package/dist/services/ai/providers.d.ts +21 -0
  162. package/dist/services/ai/providers.d.ts.map +1 -0
  163. package/dist/services/ai/providers.js +93 -0
  164. package/dist/services/ai/providers.js.map +1 -0
  165. package/dist/services/ai/redo-edit-tool.d.ts +9 -0
  166. package/dist/services/ai/redo-edit-tool.d.ts.map +1 -0
  167. package/dist/services/ai/redo-edit-tool.js +44 -0
  168. package/dist/services/ai/redo-edit-tool.js.map +1 -0
  169. package/dist/services/ai/system-prompt.d.ts +7 -0
  170. package/dist/services/ai/system-prompt.d.ts.map +1 -0
  171. package/dist/services/ai/system-prompt.js +72 -0
  172. package/dist/services/ai/system-prompt.js.map +1 -0
  173. package/dist/services/ai/undo-edit-tool.d.ts +9 -0
  174. package/dist/services/ai/undo-edit-tool.d.ts.map +1 -0
  175. package/dist/services/ai/undo-edit-tool.js +44 -0
  176. package/dist/services/ai/undo-edit-tool.js.map +1 -0
  177. package/dist/services/ai/window-tools.d.ts +27 -0
  178. package/dist/services/ai/window-tools.d.ts.map +1 -0
  179. package/dist/services/ai/window-tools.js +155 -0
  180. package/dist/services/ai/window-tools.js.map +1 -0
  181. package/dist/services/backend-host.d.ts +10 -0
  182. package/dist/services/backend-host.d.ts.map +1 -0
  183. package/dist/services/backend-host.js +117 -0
  184. package/dist/services/backend-host.js.map +1 -0
  185. package/dist/services/backend-ipc.d.ts +60 -0
  186. package/dist/services/backend-ipc.d.ts.map +1 -0
  187. package/dist/services/backend-ipc.js +2 -0
  188. package/dist/services/backend-ipc.js.map +1 -0
  189. package/dist/services/backend-process-manager.d.ts +60 -0
  190. package/dist/services/backend-process-manager.d.ts.map +1 -0
  191. package/dist/services/backend-process-manager.js +203 -0
  192. package/dist/services/backend-process-manager.js.map +1 -0
  193. package/dist/services/filesystem.d.ts +8 -0
  194. package/dist/services/filesystem.d.ts.map +1 -0
  195. package/dist/services/filesystem.js +94 -0
  196. package/dist/services/filesystem.js.map +1 -0
  197. package/dist/services/i18n.d.ts +28 -0
  198. package/dist/services/i18n.d.ts.map +1 -0
  199. package/dist/services/i18n.js +76 -0
  200. package/dist/services/i18n.js.map +1 -0
  201. package/dist/services/liveapp-icon.d.ts +9 -0
  202. package/dist/services/liveapp-icon.d.ts.map +1 -0
  203. package/dist/services/liveapp-icon.js +28 -0
  204. package/dist/services/liveapp-icon.js.map +1 -0
  205. package/dist/services/liveapps.d.ts +12 -0
  206. package/dist/services/liveapps.d.ts.map +1 -0
  207. package/dist/services/liveapps.js +84 -0
  208. package/dist/services/liveapps.js.map +1 -0
  209. package/dist/services/logger.d.ts +34 -0
  210. package/dist/services/logger.d.ts.map +1 -0
  211. package/dist/services/logger.js +74 -0
  212. package/dist/services/logger.js.map +1 -0
  213. package/dist/services/messaging.d.ts +14 -0
  214. package/dist/services/messaging.d.ts.map +1 -0
  215. package/dist/services/messaging.js +41 -0
  216. package/dist/services/messaging.js.map +1 -0
  217. package/dist/services/miniapp-icon.d.ts +9 -0
  218. package/dist/services/miniapp-icon.d.ts.map +1 -0
  219. package/dist/services/miniapp-icon.js +25 -0
  220. package/dist/services/miniapp-icon.js.map +1 -0
  221. package/dist/services/miniapp-registry.d.ts +73 -0
  222. package/dist/services/miniapp-registry.d.ts.map +1 -0
  223. package/dist/services/miniapp-registry.js +144 -0
  224. package/dist/services/miniapp-registry.js.map +1 -0
  225. package/dist/services/onboarding-config.d.ts +37 -0
  226. package/dist/services/onboarding-config.d.ts.map +1 -0
  227. package/dist/services/onboarding-config.js +76 -0
  228. package/dist/services/onboarding-config.js.map +1 -0
  229. package/dist/services/preferences.d.ts +10 -0
  230. package/dist/services/preferences.d.ts.map +1 -0
  231. package/dist/services/preferences.js +48 -0
  232. package/dist/services/preferences.js.map +1 -0
  233. package/dist/services/proxy-dispatcher.d.ts +18 -0
  234. package/dist/services/proxy-dispatcher.d.ts.map +1 -0
  235. package/dist/services/proxy-dispatcher.js +33 -0
  236. package/dist/services/proxy-dispatcher.js.map +1 -0
  237. package/dist/services/storage.d.ts +7 -0
  238. package/dist/services/storage.d.ts.map +1 -0
  239. package/dist/services/storage.js +55 -0
  240. package/dist/services/storage.js.map +1 -0
  241. package/dist/services/theme-css.d.ts +21 -0
  242. package/dist/services/theme-css.d.ts.map +1 -0
  243. package/dist/services/theme-css.js +213 -0
  244. package/dist/services/theme-css.js.map +1 -0
  245. package/dist/services/user-db.d.ts +69 -0
  246. package/dist/services/user-db.d.ts.map +1 -0
  247. package/dist/services/user-db.js +175 -0
  248. package/dist/services/user-db.js.map +1 -0
  249. package/dist/services/voice/audio-format.d.ts +5 -0
  250. package/dist/services/voice/audio-format.d.ts.map +1 -0
  251. package/dist/services/voice/audio-format.js +27 -0
  252. package/dist/services/voice/audio-format.js.map +1 -0
  253. package/dist/services/voice/azure-openai-whisper-adapter.d.ts +23 -0
  254. package/dist/services/voice/azure-openai-whisper-adapter.d.ts.map +1 -0
  255. package/dist/services/voice/azure-openai-whisper-adapter.js +60 -0
  256. package/dist/services/voice/azure-openai-whisper-adapter.js.map +1 -0
  257. package/dist/services/voice/openai-whisper-adapter.d.ts +22 -0
  258. package/dist/services/voice/openai-whisper-adapter.d.ts.map +1 -0
  259. package/dist/services/voice/openai-whisper-adapter.js +61 -0
  260. package/dist/services/voice/openai-whisper-adapter.js.map +1 -0
  261. package/dist/services/voice/stt-adapter.d.ts +31 -0
  262. package/dist/services/voice/stt-adapter.d.ts.map +1 -0
  263. package/dist/services/voice/stt-adapter.js +8 -0
  264. package/dist/services/voice/stt-adapter.js.map +1 -0
  265. package/dist/services/voice/vad-segmenter.d.ts +68 -0
  266. package/dist/services/voice/vad-segmenter.d.ts.map +1 -0
  267. package/dist/services/voice/vad-segmenter.js +159 -0
  268. package/dist/services/voice/vad-segmenter.js.map +1 -0
  269. package/dist/services/voice/voice-session.d.ts +54 -0
  270. package/dist/services/voice/voice-session.d.ts.map +1 -0
  271. package/dist/services/voice/voice-session.js +137 -0
  272. package/dist/services/voice/voice-session.js.map +1 -0
  273. package/dist/services/window-manager.d.ts +94 -0
  274. package/dist/services/window-manager.d.ts.map +1 -0
  275. package/dist/services/window-manager.js +282 -0
  276. package/dist/services/window-manager.js.map +1 -0
  277. package/dist/services/workspace.d.ts +51 -0
  278. package/dist/services/workspace.d.ts.map +1 -0
  279. package/dist/services/workspace.js +144 -0
  280. package/dist/services/workspace.js.map +1 -0
  281. package/package.json +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend-B3QNYf3p.js","sources":["../../../../miniapp-file-explorer/dist/frontend.js"],"sourcesContent":["(() => {\n if (typeof document === 'undefined') return;\n const styleId = \"desktalk-style-desktalk-miniapp-file-explorer-56nb29\";\n if (document.getElementById(styleId)) return;\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = \"/* src/components/FileBreadcrumb.module.css */\\n.FileBreadcrumb_breadcrumb {\\n display: flex;\\n flex: 1;\\n align-items: center;\\n gap: 2px;\\n overflow: hidden;\\n font-size: 13px;\\n}\\n.FileBreadcrumb_breadcrumbSegment {\\n padding: 2px 6px;\\n border: none;\\n border-radius: 4px;\\n background: none;\\n color: var(--dt-text-muted);\\n cursor: pointer;\\n font-family: inherit;\\n font-size: 13px;\\n transition: background 0.1s, color 0.1s;\\n white-space: nowrap;\\n}\\n.FileBreadcrumb_breadcrumbSegment:hover {\\n background: var(--dt-surface-hover);\\n color: var(--dt-text);\\n}\\n.FileBreadcrumb_breadcrumbSegmentActive {\\n color: var(--dt-text);\\n font-weight: 500;\\n}\\n.FileBreadcrumb_breadcrumbSeparator {\\n color: var(--dt-text-muted);\\n font-size: 11px;\\n opacity: 0.5;\\n}\\n\\n/* src/components/FileList.module.css */\\n.FileList_sortIndicator {\\n margin-left: 4px;\\n font-size: 10px;\\n}\\n.FileList_fileTable {\\n width: 100%;\\n border-collapse: collapse;\\n table-layout: fixed;\\n}\\n.FileList_fileTableHead {\\n position: sticky;\\n top: 0;\\n z-index: 1;\\n background: var(--dt-window-body);\\n}\\n.FileList_fileTableHead th {\\n padding: 8px 12px;\\n border-bottom: 1px solid var(--dt-border);\\n color: var(--dt-text-muted);\\n cursor: pointer;\\n font-size: 11px;\\n font-weight: 600;\\n letter-spacing: 0.03em;\\n text-align: left;\\n text-transform: uppercase;\\n transition: color 0.15s;\\n -webkit-user-select: none;\\n user-select: none;\\n}\\n.FileList_fileTableHead th:hover {\\n color: var(--dt-text);\\n}\\n.FileList_colName {\\n width: auto;\\n}\\n.FileList_colSize {\\n width: 90px;\\n}\\n.FileList_colModified {\\n width: 110px;\\n}\\n.FileList_fileRow {\\n cursor: pointer;\\n transition: background 0.1s;\\n}\\n.FileList_fileRow:hover {\\n background: var(--dt-surface-hover);\\n}\\n.FileList_fileRowSelected {\\n background: var(--dt-surface);\\n}\\n.FileList_fileRow td {\\n padding: 6px 12px;\\n border-bottom: 1px solid var(--dt-border);\\n font-size: 13px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.FileList_fileName {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.FileList_fileIcon {\\n flex-shrink: 0;\\n font-size: 16px;\\n}\\n.FileList_fileNameText {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.FileList_fileSize {\\n color: var(--dt-text-muted);\\n font-size: 12px;\\n}\\n.FileList_fileModified {\\n color: var(--dt-text-muted);\\n font-size: 12px;\\n}\\n.FileList_fileListScroll {\\n flex: 1;\\n overflow-y: auto;\\n}\\n.FileList_emptyState {\\n display: flex;\\n height: 100%;\\n min-height: 220px;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n padding: 48px 16px;\\n color: var(--dt-text-muted);\\n font-size: 13px;\\n text-align: center;\\n}\\n.FileList_emptyStateHint {\\n max-width: 320px;\\n color: var(--dt-text-muted);\\n font-size: 12px;\\n line-height: 1.5;\\n}\\n.FileList_renameInput {\\n width: 100%;\\n padding: 2px 6px;\\n border: 1px solid var(--dt-accent);\\n border-radius: 4px;\\n background: var(--dt-surface);\\n color: var(--dt-text);\\n font-family: inherit;\\n font-size: 13px;\\n outline: none;\\n}\\n\\n/* src/components/FilePreview.module.css */\\n.FilePreview_previewPanel {\\n display: flex;\\n width: 360px;\\n min-width: 280px;\\n flex-direction: column;\\n overflow: hidden;\\n border-left: 1px solid var(--dt-border);\\n}\\n.FilePreview_previewHeader {\\n display: flex;\\n flex-shrink: 0;\\n align-items: center;\\n justify-content: space-between;\\n gap: 8px;\\n padding: 10px 14px;\\n border-bottom: 1px solid var(--dt-border);\\n}\\n.FilePreview_previewTitle {\\n overflow: hidden;\\n font-size: 14px;\\n font-weight: 600;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.FilePreview_previewCloseBtn {\\n display: flex;\\n width: 24px;\\n height: 24px;\\n flex-shrink: 0;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: none;\\n border-radius: 4px;\\n background: none;\\n color: var(--dt-text-muted);\\n cursor: pointer;\\n font-size: 14px;\\n transition: background 0.15s, color 0.15s;\\n}\\n.FilePreview_previewCloseBtn:hover {\\n background: var(--dt-surface-hover);\\n color: var(--dt-text);\\n}\\n.FilePreview_previewBody {\\n flex: 1;\\n overflow-y: auto;\\n padding: 14px;\\n}\\n.FilePreview_previewCode {\\n overflow-x: auto;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: var(--dt-text);\\n font-family: var(--font-mono);\\n font-size: 12px;\\n line-height: 1.6;\\n white-space: pre-wrap;\\n word-break: break-all;\\n}\\n.FilePreview_previewImage {\\n max-width: 100%;\\n border-radius: 6px;\\n}\\n.FilePreview_previewMeta {\\n display: flex;\\n flex-direction: column;\\n gap: 12px;\\n}\\n.FilePreview_previewMetaRow {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n}\\n.FilePreview_previewMetaLabel {\\n color: var(--dt-text-muted);\\n font-size: 11px;\\n font-weight: 600;\\n letter-spacing: 0.03em;\\n text-transform: uppercase;\\n}\\n.FilePreview_previewMetaValue {\\n font-size: 13px;\\n}\\n.FilePreview_previewPlaceholder {\\n display: flex;\\n height: 100%;\\n align-items: center;\\n justify-content: center;\\n color: var(--dt-text-muted);\\n font-size: 13px;\\n}\\n\\n/* src/components/ContextMenu.module.css */\\n.ContextMenu_contextMenu {\\n position: fixed;\\n z-index: 1000;\\n min-width: 160px;\\n border: 1px solid var(--dt-border);\\n border-radius: 8px;\\n background: var(--dt-surface);\\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\\n}\\n.ContextMenu_contextMenuList {\\n padding: 4px 0;\\n}\\n.ContextMenu_contextMenuItem {\\n display: flex;\\n align-items: center;\\n width: 100%;\\n padding: 7px 14px;\\n border: none;\\n background: none;\\n color: var(--dt-text);\\n cursor: pointer;\\n font-family: inherit;\\n font-size: 13px;\\n text-align: left;\\n transition: background 0.1s;\\n}\\n.ContextMenu_contextMenuItem:hover {\\n background: var(--dt-surface-hover);\\n}\\n.ContextMenu_contextMenuSubmenuTrigger {\\n position: relative;\\n}\\n.ContextMenu_contextSubmenu {\\n position: absolute;\\n top: -5px;\\n left: calc(100% - 2px);\\n z-index: 1001;\\n display: none;\\n min-width: 160px;\\n padding: 4px 0;\\n border: 1px solid var(--dt-border);\\n border-radius: 8px;\\n background: var(--dt-surface);\\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\\n}\\n.ContextMenu_contextMenuSubmenuTrigger:hover > .ContextMenu_contextSubmenu {\\n display: block;\\n}\\n.ContextMenu_contextMenuChevron {\\n margin-left: auto;\\n color: var(--dt-text-muted);\\n font-size: 11px;\\n}\\n.ContextMenu_contextMenuSeparator {\\n margin: 4px 0;\\n border: none;\\n border-top: 1px solid var(--dt-border);\\n}\\n.ContextMenu_contextMenuDanger {\\n color: var(--dt-danger, #e55);\\n}\\n\\n/* src/FileExplorerApp.module.css */\\n.FileExplorerApp_root {\\n display: flex;\\n height: 100%;\\n flex-direction: column;\\n overflow: hidden;\\n background: var(--dt-window-body);\\n color: var(--dt-text);\\n font-family: var(--font-sans);\\n}\\n.FileExplorerApp_navBar {\\n display: flex;\\n flex-shrink: 0;\\n align-items: center;\\n gap: 8px;\\n padding: 8px 12px;\\n border-bottom: 1px solid var(--dt-border);\\n}\\n.FileExplorerApp_navBtn {\\n display: flex;\\n width: 28px;\\n height: 28px;\\n flex-shrink: 0;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border: 1px solid var(--dt-border);\\n border-radius: 6px;\\n background: var(--dt-surface);\\n color: var(--dt-text);\\n cursor: pointer;\\n font-size: 14px;\\n line-height: 1;\\n transition:\\n background 0.15s,\\n border-color 0.15s,\\n color 0.15s;\\n}\\n.FileExplorerApp_navBtn:hover:not(:disabled) {\\n border-color: var(--dt-accent);\\n background: var(--dt-surface-hover);\\n color: var(--dt-accent);\\n}\\n.FileExplorerApp_navBtn:disabled {\\n cursor: default;\\n opacity: 0.35;\\n}\\n.FileExplorerApp_body {\\n display: flex;\\n flex: 1;\\n overflow: hidden;\\n}\\n.FileExplorerApp_fileListPanel {\\n display: flex;\\n flex: 1;\\n min-width: 0;\\n flex-direction: column;\\n overflow: hidden;\\n}\\n.FileExplorerApp_fileListDropZone {\\n position: relative;\\n display: flex;\\n flex: 1;\\n min-height: 0;\\n flex-direction: column;\\n}\\n.FileExplorerApp_dropOverlay {\\n position: absolute;\\n inset: 0;\\n z-index: 2;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: color-mix(in srgb, var(--dt-window-body) 76%, transparent);\\n pointer-events: none;\\n}\\n.FileExplorerApp_dropOverlayCard {\\n display: flex;\\n min-width: 260px;\\n max-width: 360px;\\n flex-direction: column;\\n gap: 6px;\\n padding: 18px 20px;\\n border: 1px dashed var(--dt-accent);\\n border-radius: 14px;\\n background: color-mix(in srgb, var(--dt-surface) 92%, white 8%);\\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12);\\n text-align: center;\\n}\\n.FileExplorerApp_dropOverlayTitle {\\n color: var(--dt-text);\\n font-size: 15px;\\n font-weight: 600;\\n}\\n.FileExplorerApp_dropOverlayHint {\\n color: var(--dt-text-muted);\\n font-size: 12px;\\n line-height: 1.5;\\n}\\n/*# sourceMappingURL=frontend.css.map */\\n\";\n document.head.appendChild(style);\n})();\n\n// desktalk-global:react\nvar _mod = window.React;\nvar react_default = _mod;\nvar Children = _mod.Children;\nvar Component = _mod.Component;\nvar Fragment = _mod.Fragment;\nvar Profiler = _mod.Profiler;\nvar PureComponent = _mod.PureComponent;\nvar StrictMode = _mod.StrictMode;\nvar Suspense = _mod.Suspense;\nvar cloneElement = _mod.cloneElement;\nvar createContext = _mod.createContext;\nvar createElement = _mod.createElement;\nvar createRef = _mod.createRef;\nvar forwardRef = _mod.forwardRef;\nvar isValidElement = _mod.isValidElement;\nvar lazy = _mod.lazy;\nvar memo = _mod.memo;\nvar startTransition = _mod.startTransition;\nvar useCallback = _mod.useCallback;\nvar useContext = _mod.useContext;\nvar useDebugValue = _mod.useDebugValue;\nvar useDeferredValue = _mod.useDeferredValue;\nvar useEffect = _mod.useEffect;\nvar useId = _mod.useId;\nvar useImperativeHandle = _mod.useImperativeHandle;\nvar useInsertionEffect = _mod.useInsertionEffect;\nvar useLayoutEffect = _mod.useLayoutEffect;\nvar useMemo = _mod.useMemo;\nvar useReducer = _mod.useReducer;\nvar useRef = _mod.useRef;\nvar useState = _mod.useState;\nvar useSyncExternalStore = _mod.useSyncExternalStore;\nvar useTransition = _mod.useTransition;\nvar version = _mod.version;\n\n// desktalk-global:react-dom/client\nvar _mod2 = window.ReactDOM;\nvar createRoot = _mod2.createRoot;\nvar hydrateRoot = _mod2.hydrateRoot;\n\n// ../../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/utils/index.js\nvar isFunction = function(value) {\n return typeof value === \"function\";\n};\n\n// ../../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/utils/isDev.js\nvar isDev = true;\nvar isDev_default = isDev;\n\n// ../../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/useMemoizedFn/index.js\nvar useMemoizedFn = function(fn) {\n if (isDev_default) {\n if (!isFunction(fn)) {\n console.error(\"useMemoizedFn expected parameter is a function, got \".concat(typeof fn));\n }\n }\n var fnRef = useRef(fn);\n fnRef.current = useMemo(function() {\n return fn;\n }, [fn]);\n var memoizedFn = useRef(void 0);\n if (!memoizedFn.current) {\n memoizedFn.current = function() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fnRef.current.apply(this, args);\n };\n }\n return memoizedFn.current;\n};\nvar useMemoizedFn_default = useMemoizedFn;\n\n// ../../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.14_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/vanilla.mjs\nvar createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nvar createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\n// ../../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.14_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/react.mjs\nvar identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = react_default.useSyncExternalStore(\n api.subscribe,\n react_default.useCallback(() => selector(api.getState()), [api, selector]),\n react_default.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n react_default.useDebugValue(slice);\n return slice;\n}\n\n// src/frontend.tsx\nimport { useCommand as useCommand2, useOpenMiniApp, MiniAppIdProvider, WindowIdProvider } from \"@desktalk/sdk\";\n\n// src/components/FileBreadcrumb.module.css\nvar FileBreadcrumb_default = {\n breadcrumb: \"FileBreadcrumb_breadcrumb\",\n breadcrumbSegment: \"FileBreadcrumb_breadcrumbSegment\",\n breadcrumbSegmentActive: \"FileBreadcrumb_breadcrumbSegment FileBreadcrumb_breadcrumbSegmentActive\",\n breadcrumbSeparator: \"FileBreadcrumb_breadcrumbSeparator\"\n};\n\n// desktalk-global:react/jsx-runtime\nvar _mod3 = window.__desktalk_jsx_runtime;\nvar jsx = _mod3.jsx;\nvar jsxs = _mod3.jsxs;\nvar jsxDEV = _mod3.jsxDEV;\nvar Fragment2 = _mod3.Fragment;\n\n// src/components/FileBreadcrumb.tsx\nfunction FileBreadcrumb({ currentPath, onNavigate }) {\n const segments = currentPath === \".\" ? [] : currentPath.split(\"/\").filter(Boolean);\n return /* @__PURE__ */ jsxs(\"div\", { className: FileBreadcrumb_default.breadcrumb, children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n className: segments.length === 0 ? FileBreadcrumb_default.breadcrumbSegmentActive : FileBreadcrumb_default.breadcrumbSegment,\n onClick: () => onNavigate(\".\"),\n children: \"~\"\n }\n ),\n segments.map((segment, index) => {\n const path = segments.slice(0, index + 1).join(\"/\");\n const isLast = index === segments.length - 1;\n return /* @__PURE__ */ jsxs(react_default.Fragment, { children: [\n /* @__PURE__ */ jsx(\"span\", { className: FileBreadcrumb_default.breadcrumbSeparator, children: \"/\" }),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n className: isLast ? FileBreadcrumb_default.breadcrumbSegmentActive : FileBreadcrumb_default.breadcrumbSegment,\n onClick: () => onNavigate(path),\n children: segment\n }\n )\n ] }, path);\n })\n ] });\n}\n\n// src/components/FileList.module.css\nvar FileList_default = {\n sortIndicator: \"FileList_sortIndicator\",\n fileTable: \"FileList_fileTable\",\n fileTableHead: \"FileList_fileTableHead\",\n colName: \"FileList_colName\",\n colSize: \"FileList_colSize\",\n colModified: \"FileList_colModified\",\n fileRow: \"FileList_fileRow\",\n fileRowSelected: \"FileList_fileRow FileList_fileRowSelected\",\n fileName: \"FileList_fileName\",\n fileIcon: \"FileList_fileIcon\",\n fileNameText: \"FileList_fileNameText\",\n fileSize: \"FileList_fileSize\",\n fileModified: \"FileList_fileModified\",\n fileListScroll: \"FileList_fileListScroll\",\n emptyState: \"FileList_emptyState\",\n emptyStateHint: \"FileList_emptyStateHint\",\n renameInput: \"FileList_renameInput\"\n};\n\n// src/components/FileList.tsx\nfunction formatSize(size) {\n if (size === null) return \"--\";\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\n return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n}\nfunction formatDate(iso) {\n const date = new Date(iso);\n const now = /* @__PURE__ */ new Date();\n const month = date.toLocaleString(\"default\", { month: \"short\" });\n const day = date.getDate();\n if (date.getFullYear() !== now.getFullYear()) {\n return `${month} ${day}, ${date.getFullYear()}`;\n }\n return `${month} ${day}`;\n}\nfunction getFileIcon(entry) {\n if (entry.type === \"directory\") return \"\\u{1F4C1}\";\n const ext = entry.name.includes(\".\") ? entry.name.slice(entry.name.lastIndexOf(\".\")).toLowerCase() : \"\";\n const imageExts = /* @__PURE__ */ new Set([\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".webp\", \".bmp\", \".ico\"]);\n if (imageExts.has(ext)) return \"\\u{1F5BC}\\uFE0F\";\n const codeExts = /* @__PURE__ */ new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".py\",\n \".rb\",\n \".go\",\n \".rs\",\n \".java\",\n \".c\",\n \".cpp\",\n \".h\"\n ]);\n if (codeExts.has(ext)) return \"\\u{1F4DD}\";\n if (ext === \".json\") return \"{}\";\n if (ext === \".md\") return \"\\u{1F4DD}\";\n return \"\\u{1F4C4}\";\n}\nfunction sortEntries(entries, column, direction) {\n const sorted = [...entries];\n sorted.sort((a, b) => {\n if (a.type !== b.type) return a.type === \"directory\" ? -1 : 1;\n let cmp = 0;\n switch (column) {\n case \"name\":\n cmp = a.name.localeCompare(b.name);\n break;\n case \"size\":\n cmp = (a.size ?? -1) - (b.size ?? -1);\n break;\n case \"modifiedAt\":\n cmp = a.modifiedAt.localeCompare(b.modifiedAt);\n break;\n }\n return direction === \"asc\" ? cmp : -cmp;\n });\n return sorted;\n}\nfunction FileList({\n entries,\n sortColumn,\n sortDirection,\n selectedPath,\n renamingPath,\n renameValue,\n isUploading = false,\n onSort,\n onSelect,\n onOpen,\n onContextMenu,\n onRenameChange,\n onRenameSubmit,\n onRenameCancel\n}) {\n const renameInputRef = useRef(null);\n const sorted = sortEntries(entries, sortColumn, sortDirection);\n useEffect(() => {\n if (!renamingPath || !renameInputRef.current) {\n return;\n }\n const entry = entries.find((item) => item.path === renamingPath);\n if (!entry) {\n return;\n }\n const input = renameInputRef.current;\n const dotIndex = entry.type === \"file\" ? entry.name.lastIndexOf(\".\") : -1;\n const selectionEnd = dotIndex > 0 ? dotIndex : entry.name.length;\n input.focus();\n input.setSelectionRange(0, selectionEnd);\n }, [entries, renamingPath]);\n const handleRenameKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n onRenameSubmit();\n } else if (e.key === \"Escape\") {\n onRenameCancel();\n }\n },\n [onRenameSubmit, onRenameCancel]\n );\n function renderSortIndicator(column) {\n if (sortColumn !== column) return null;\n return /* @__PURE__ */ jsx(\"span\", { className: FileList_default.sortIndicator, children: sortDirection === \"asc\" ? \"\\u25B2\" : \"\\u25BC\" });\n }\n if (entries.length === 0) {\n return /* @__PURE__ */ jsxs(\"div\", { className: FileList_default.emptyState, children: [\n /* @__PURE__ */ jsx(\"div\", { children: \"This directory is empty.\" }),\n /* @__PURE__ */ jsx(\"div\", { className: FileList_default.emptyStateHint, children: isUploading ? \"Uploading files...\" : \"Drag files here to upload them to this folder.\" })\n ] });\n }\n return /* @__PURE__ */ jsx(\"div\", { className: FileList_default.fileListScroll, children: /* @__PURE__ */ jsxs(\"table\", { className: FileList_default.fileTable, children: [\n /* @__PURE__ */ jsx(\"thead\", { className: FileList_default.fileTableHead, children: /* @__PURE__ */ jsxs(\"tr\", { children: [\n /* @__PURE__ */ jsxs(\"th\", { className: FileList_default.colName, onClick: () => onSort(\"name\"), children: [\n \"Name\",\n renderSortIndicator(\"name\")\n ] }),\n /* @__PURE__ */ jsxs(\"th\", { className: FileList_default.colSize, onClick: () => onSort(\"size\"), children: [\n \"Size\",\n renderSortIndicator(\"size\")\n ] }),\n /* @__PURE__ */ jsxs(\"th\", { className: FileList_default.colModified, onClick: () => onSort(\"modifiedAt\"), children: [\n \"Modified\",\n renderSortIndicator(\"modifiedAt\")\n ] })\n ] }) }),\n /* @__PURE__ */ jsx(\"tbody\", { children: sorted.map((entry) => /* @__PURE__ */ jsxs(\n \"tr\",\n {\n className: selectedPath === entry.path ? FileList_default.fileRowSelected : FileList_default.fileRow,\n onClick: () => onSelect(entry),\n onDoubleClick: () => onOpen(entry),\n onContextMenu: (e) => onContextMenu(e, entry),\n children: [\n /* @__PURE__ */ jsx(\"td\", { children: /* @__PURE__ */ jsxs(\"div\", { className: FileList_default.fileName, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FileList_default.fileIcon, children: getFileIcon(entry) }),\n renamingPath === entry.path ? /* @__PURE__ */ jsx(\n \"input\",\n {\n ref: renameInputRef,\n className: FileList_default.renameInput,\n type: \"text\",\n value: renameValue,\n onChange: (e) => onRenameChange(e.target.value),\n onKeyDown: handleRenameKeyDown,\n onBlur: () => {\n onRenameSubmit();\n },\n autoFocus: true\n }\n ) : /* @__PURE__ */ jsx(\"span\", { className: FileList_default.fileNameText, children: entry.name })\n ] }) }),\n /* @__PURE__ */ jsx(\"td\", { className: FileList_default.fileSize, children: formatSize(entry.size) }),\n /* @__PURE__ */ jsx(\"td\", { className: FileList_default.fileModified, children: formatDate(entry.modifiedAt) })\n ]\n },\n entry.path\n )) })\n ] }) });\n}\n\n// src/components/FilePreview.module.css\nvar FilePreview_default = {\n previewPanel: \"FilePreview_previewPanel\",\n previewHeader: \"FilePreview_previewHeader\",\n previewTitle: \"FilePreview_previewTitle\",\n previewCloseBtn: \"FilePreview_previewCloseBtn\",\n previewBody: \"FilePreview_previewBody\",\n previewCode: \"FilePreview_previewCode\",\n previewImage: \"FilePreview_previewImage\",\n previewMeta: \"FilePreview_previewMeta\",\n previewMetaRow: \"FilePreview_previewMetaRow\",\n previewMetaLabel: \"FilePreview_previewMetaLabel\",\n previewMetaValue: \"FilePreview_previewMetaValue\",\n previewPlaceholder: \"FilePreview_previewPlaceholder\"\n};\n\n// src/components/FilePreview.tsx\nfunction formatBytes(bytes) {\n if (bytes === null) return \"--\";\n if (bytes < 1024) return `${bytes} bytes`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n}\nfunction isImageMime(mimeType) {\n return mimeType !== null && mimeType.startsWith(\"image/\");\n}\nfunction isTextMime(mimeType) {\n if (mimeType === null) return false;\n return mimeType.startsWith(\"text/\") || mimeType === \"application/json\" || mimeType === \"application/xml\";\n}\nfunction FilePreview({ entry, content, loading, onClose }) {\n if (!entry) {\n return /* @__PURE__ */ jsx(\"div\", { className: FilePreview_default.previewPanel, children: /* @__PURE__ */ jsx(\"div\", { className: FilePreview_default.previewPlaceholder, children: \"Select a file to preview\" }) });\n }\n const renderBody = () => {\n if (loading) {\n return /* @__PURE__ */ jsx(\"div\", { className: FilePreview_default.previewPlaceholder, children: \"Loading...\" });\n }\n if (entry.type === \"directory\") {\n return /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMeta, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Type\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: \"Directory\" })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Path\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: entry.path })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Last Modified\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: new Date(entry.modifiedAt).toLocaleString() })\n ] })\n ] });\n }\n if (isImageMime(entry.mimeType) && content) {\n if (entry.mimeType === \"image/svg+xml\") {\n return /* @__PURE__ */ jsx(\"div\", { className: FilePreview_default.previewBody, dangerouslySetInnerHTML: { __html: content } });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMeta, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Type\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: entry.mimeType })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Size\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: formatBytes(entry.size) })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Last Modified\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: new Date(entry.modifiedAt).toLocaleString() })\n ] })\n ] });\n }\n if (isTextMime(entry.mimeType) && content !== null) {\n return /* @__PURE__ */ jsx(\"pre\", { className: FilePreview_default.previewCode, children: content });\n }\n return /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMeta, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Name\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: entry.name })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Type\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: entry.mimeType ?? \"Unknown\" })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Size\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: formatBytes(entry.size) })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewMetaRow, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaLabel, children: \"Last Modified\" }),\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewMetaValue, children: new Date(entry.modifiedAt).toLocaleString() })\n ] })\n ] });\n };\n return /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewPanel, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: FilePreview_default.previewHeader, children: [\n /* @__PURE__ */ jsx(\"span\", { className: FilePreview_default.previewTitle, children: entry.name }),\n /* @__PURE__ */ jsx(\"button\", { className: FilePreview_default.previewCloseBtn, onClick: onClose, title: \"Close preview\", children: \"\\u2715\" })\n ] }),\n /* @__PURE__ */ jsx(\"div\", { className: FilePreview_default.previewBody, children: renderBody() })\n ] });\n}\n\n// src/components/FileActions.tsx\nimport { ActionsProvider, Action, useCommand } from \"@desktalk/sdk\";\nvar LIST_FILES_DEFAULT_LIMIT = 50;\nvar LIST_FILES_MAX_LIMIT = 200;\nfunction FileActions({\n children,\n currentPath,\n onNavigated,\n onFileCreated,\n onDirectoryCreated,\n onDeleted,\n onRenamed,\n onRefresh: _onRefresh\n}) {\n const createEntry = useCommand(\"files.create\");\n const deleteEntry = useCommand(\"files.delete\");\n const renameEntry = useCommand(\"files.rename\");\n const listFiles = useCommand(\"files.list\");\n const handleListFiles = useCallback(\n async (params) => {\n const rawLimit = params?.limit != null ? Number(params.limit) : LIST_FILES_DEFAULT_LIMIT;\n const limit = Math.max(1, Math.min(rawLimit, LIST_FILES_MAX_LIMIT));\n const entries = await listFiles({ path: currentPath, limit });\n return entries;\n },\n [listFiles, currentPath]\n );\n const handleNavigate = useCallback(\n async (params) => {\n const path = params?.path || \".\";\n onNavigated(path);\n },\n [onNavigated]\n );\n const handleCreateFile = useCallback(\n async (params) => {\n const name = params?.name || \"\";\n if (!name) return;\n const path = currentPath === \".\" ? name : `${currentPath}/${name}`;\n const content = params?.content ?? \"\";\n const entry = await createEntry({ path, type: \"file\", content });\n onFileCreated(entry);\n return entry;\n },\n [createEntry, currentPath, onFileCreated]\n );\n const handleCreateDirectory = useCallback(\n async (params) => {\n const name = params?.name || \"\";\n if (!name) return;\n const path = currentPath === \".\" ? name : `${currentPath}/${name}`;\n const entry = await createEntry({ path, type: \"directory\" });\n onDirectoryCreated(entry);\n return entry;\n },\n [createEntry, currentPath, onDirectoryCreated]\n );\n const handleDelete = useCallback(\n async (params) => {\n const path = params?.path || \"\";\n if (!path) return;\n await deleteEntry({ path });\n onDeleted(path);\n },\n [deleteEntry, onDeleted]\n );\n const handleRename = useCallback(\n async (params) => {\n const path = params?.path || \"\";\n const newName = params?.newName || \"\";\n if (!path || !newName) return;\n const entry = await renameEntry({ path, newName });\n onRenamed(entry);\n return entry;\n },\n [renameEntry, onRenamed]\n );\n return /* @__PURE__ */ jsxs(ActionsProvider, { children: [\n /* @__PURE__ */ jsx(\n Action,\n {\n name: \"List Files\",\n description: \"List files and directories in the current folder. Returns up to limit entries (default 50, max 200).\",\n params: {\n limit: {\n type: \"number\",\n description: \"Maximum number of entries to return (default 50, max 200)\",\n required: false\n }\n },\n handler: handleListFiles\n }\n ),\n /* @__PURE__ */ jsx(\n Action,\n {\n name: \"Navigate\",\n description: \"Navigate to a directory\",\n params: {\n path: { type: \"string\", description: \"Directory path to navigate to\", required: true }\n },\n handler: handleNavigate\n }\n ),\n /* @__PURE__ */ jsx(\n Action,\n {\n name: \"Create File\",\n description: \"Create a new file in the current directory\",\n params: {\n name: { type: \"string\", description: \"File name\", required: true },\n content: { type: \"string\", description: \"File content\", required: false }\n },\n handler: handleCreateFile\n }\n ),\n /* @__PURE__ */ jsx(\n Action,\n {\n name: \"Create Directory\",\n description: \"Create a new directory in the current directory\",\n params: {\n name: { type: \"string\", description: \"Directory name\", required: true }\n },\n handler: handleCreateDirectory\n }\n ),\n /* @__PURE__ */ jsx(\n Action,\n {\n name: \"Delete\",\n description: \"Delete a file or directory\",\n params: {\n path: {\n type: \"string\",\n description: \"Path of file or directory to delete\",\n required: true\n }\n },\n handler: handleDelete\n }\n ),\n /* @__PURE__ */ jsx(\n Action,\n {\n name: \"Rename\",\n description: \"Rename a file or directory\",\n params: {\n path: { type: \"string\", description: \"Current path\", required: true },\n newName: { type: \"string\", description: \"New name\", required: true }\n },\n handler: handleRename\n }\n ),\n children\n ] });\n}\n\n// src/components/ContextMenu.module.css\nvar ContextMenu_default = {\n contextMenu: \"ContextMenu_contextMenu\",\n contextMenuList: \"ContextMenu_contextMenuList\",\n contextMenuItem: \"ContextMenu_contextMenuItem\",\n contextMenuSubmenuTrigger: \"ContextMenu_contextMenuSubmenuTrigger\",\n contextSubmenu: \"ContextMenu_contextSubmenu\",\n contextMenuChevron: \"ContextMenu_contextMenuChevron\",\n contextMenuSeparator: \"ContextMenu_contextMenuSeparator\",\n contextMenuDanger: \"ContextMenu_contextMenuItem ContextMenu_contextMenuDanger\"\n};\n\n// src/components/ContextMenu.tsx\nfunction ContextMenu({ x, y, actions, onClose }) {\n const menuRef = useRef(null);\n const handleClickOutside = useCallback(\n (e) => {\n if (menuRef.current && !menuRef.current.contains(e.target)) {\n onClose();\n }\n },\n [onClose]\n );\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [handleClickOutside]);\n const style = {\n left: x,\n top: y\n };\n const renderActions = (menuActions, nested = false) => /* @__PURE__ */ jsx(\"div\", { className: nested ? ContextMenu_default.contextSubmenu : ContextMenu_default.contextMenuList, children: menuActions.map((action, index) => {\n const className = action.danger ? ContextMenu_default.contextMenuDanger : ContextMenu_default.contextMenuItem;\n if (action.children && action.children.length > 0) {\n return /* @__PURE__ */ jsxs(\"div\", { className: ContextMenu_default.contextMenuSubmenuTrigger, children: [\n /* @__PURE__ */ jsxs(\"button\", { type: \"button\", className, children: [\n /* @__PURE__ */ jsx(\"span\", { children: action.label }),\n /* @__PURE__ */ jsx(\"span\", { className: ContextMenu_default.contextMenuChevron, children: \"\\u25B8\" })\n ] }),\n renderActions(action.children, true)\n ] }, `${action.label}-${index}`);\n }\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n className,\n onClick: () => {\n action.handler?.();\n onClose();\n },\n children: action.label\n },\n `${action.label}-${index}`\n );\n }) });\n return /* @__PURE__ */ jsx(\"div\", { ref: menuRef, className: ContextMenu_default.contextMenu, style, children: renderActions(actions) });\n}\n\n// src/store.ts\nvar INITIAL_STATE = {\n currentPath: \".\",\n history: [\".\"],\n historyIndex: 0,\n entries: [],\n sortColumn: \"name\",\n sortDirection: \"asc\",\n isDragActive: false,\n isUploading: false,\n miniAppManifests: [],\n selectedPath: null,\n previewEntry: null,\n previewContent: null,\n previewLoading: false,\n renamingPath: null,\n renameValue: \"\",\n contextMenu: null\n};\nfunction resetTransientState() {\n return {\n selectedPath: null,\n previewEntry: null,\n previewContent: null,\n previewLoading: false,\n contextMenu: null\n };\n}\nfunction createFileExplorerStore() {\n return createStore((set, get) => ({\n ...INITIAL_STATE,\n setEntries(entries) {\n set({ entries });\n },\n setSortColumn(sortColumn) {\n set({ sortColumn });\n },\n setSortDirection(sortDirection) {\n set({ sortDirection });\n },\n setDragActive(isDragActive) {\n set({ isDragActive });\n },\n setUploading(isUploading) {\n set({ isUploading });\n },\n setMiniAppManifests(miniAppManifests) {\n set({ miniAppManifests });\n },\n setSelectedPath(selectedPath) {\n set({ selectedPath });\n },\n setPreviewEntry(previewEntry) {\n set({ previewEntry });\n },\n setPreviewContent(previewContent) {\n set({ previewContent });\n },\n setPreviewLoading(previewLoading) {\n set({ previewLoading });\n },\n setRenameValue(renameValue) {\n set({ renameValue });\n },\n setContextMenu(contextMenu) {\n set({ contextMenu });\n },\n startRename(renamingPath, renameValue) {\n set({ renamingPath, renameValue });\n },\n stopRename() {\n set({ renamingPath: null, renameValue: \"\" });\n },\n closePreview() {\n set({ previewEntry: null, previewContent: null, previewLoading: false });\n },\n navigateTo(path) {\n const { history, historyIndex } = get();\n const nextHistory = [...history.slice(0, historyIndex + 1), path];\n set({\n currentPath: path,\n history: nextHistory,\n historyIndex: nextHistory.length - 1,\n ...resetTransientState()\n });\n },\n goBack() {\n const { history, historyIndex } = get();\n if (historyIndex <= 0) {\n return;\n }\n const nextIndex = historyIndex - 1;\n set({\n currentPath: history[nextIndex],\n historyIndex: nextIndex,\n ...resetTransientState()\n });\n },\n goForward() {\n const { history, historyIndex } = get();\n if (historyIndex >= history.length - 1) {\n return;\n }\n const nextIndex = historyIndex + 1;\n set({\n currentPath: history[nextIndex],\n historyIndex: nextIndex,\n ...resetTransientState()\n });\n }\n }));\n}\n\n// src/FileExplorerApp.module.css\nvar FileExplorerApp_default = {\n root: \"FileExplorerApp_root\",\n navBar: \"FileExplorerApp_navBar\",\n navBtn: \"FileExplorerApp_navBtn\",\n body: \"FileExplorerApp_body\",\n fileListPanel: \"FileExplorerApp_fileListPanel\",\n fileListDropZone: \"FileExplorerApp_fileListDropZone\",\n dropOverlay: \"FileExplorerApp_dropOverlay\",\n dropOverlayCard: \"FileExplorerApp_dropOverlayCard\",\n dropOverlayTitle: \"FileExplorerApp_dropOverlayTitle\",\n dropOverlayHint: \"FileExplorerApp_dropOverlayHint\"\n};\n\n// src/frontend.tsx\nvar DEFAULT_OPEN_APP_IDS = [\"player\", \"preview\", \"text-edit\"];\nfunction getNextDirectoryName(entries) {\n const names = new Set(\n entries.filter((entry) => entry.type === \"directory\").map((entry) => entry.name.toLowerCase())\n );\n if (!names.has(\"new folder\")) {\n return \"New folder\";\n }\n let suffix = 2;\n while (names.has(`new folder ${suffix}`)) {\n suffix += 1;\n }\n return `New folder ${suffix}`;\n}\nfunction getExtension(name) {\n const lowerName = name.toLowerCase();\n if (lowerName.startsWith(\".\")) {\n return lowerName;\n }\n const dotIndex = lowerName.lastIndexOf(\".\");\n return dotIndex >= 0 ? lowerName.slice(dotIndex) : null;\n}\nfunction matchesManifest(entry, manifest) {\n if (entry.type !== \"file\") {\n return false;\n }\n const association = manifest.fileAssociations;\n if (!association) {\n return false;\n }\n const extension = getExtension(entry.name);\n const extensionMatch = extension !== null && association.extensions?.some((candidate) => candidate.toLowerCase() === extension);\n const mimeTypeMatch = entry.mimeType !== null && association.mimeTypes?.some((candidate) => candidate === entry.mimeType);\n return Boolean(extensionMatch || mimeTypeMatch);\n}\nfunction getCompatibleMiniApps(entry, manifests) {\n return manifests.filter((manifest) => matchesManifest(entry, manifest));\n}\nfunction getDefaultMiniApp(entry, manifests) {\n const compatible = getCompatibleMiniApps(entry, manifests);\n for (const miniAppId of DEFAULT_OPEN_APP_IDS) {\n const match = compatible.find((manifest) => manifest.id === miniAppId);\n if (match) {\n return match;\n }\n }\n return compatible[0] ?? null;\n}\nfunction FileExplorerApp() {\n const storeRef = useRef(null);\n if (!storeRef.current) {\n storeRef.current = createFileExplorerStore();\n }\n const store = storeRef.current;\n const currentPath = useStore(store, (state) => state.currentPath);\n const history = useStore(store, (state) => state.history);\n const historyIndex = useStore(store, (state) => state.historyIndex);\n const entries = useStore(store, (state) => state.entries);\n const sortColumn = useStore(store, (state) => state.sortColumn);\n const sortDirection = useStore(store, (state) => state.sortDirection);\n const isDragActive = useStore(store, (state) => state.isDragActive);\n const isUploading = useStore(store, (state) => state.isUploading);\n const miniAppManifests = useStore(store, (state) => state.miniAppManifests);\n const selectedPath = useStore(store, (state) => state.selectedPath);\n const previewEntry = useStore(store, (state) => state.previewEntry);\n const previewContent = useStore(store, (state) => state.previewContent);\n const previewLoading = useStore(store, (state) => state.previewLoading);\n const renamingPath = useStore(store, (state) => state.renamingPath);\n const renameValue = useStore(store, (state) => state.renameValue);\n const contextMenu = useStore(store, (state) => state.contextMenu);\n const setEntries = useStore(store, (state) => state.setEntries);\n const setSortColumn = useStore(store, (state) => state.setSortColumn);\n const setSortDirection = useStore(store, (state) => state.setSortDirection);\n const setDragActive = useStore(store, (state) => state.setDragActive);\n const setUploading = useStore(store, (state) => state.setUploading);\n const setMiniAppManifests = useStore(store, (state) => state.setMiniAppManifests);\n const setSelectedPath = useStore(store, (state) => state.setSelectedPath);\n const setPreviewEntry = useStore(store, (state) => state.setPreviewEntry);\n const setPreviewContent = useStore(store, (state) => state.setPreviewContent);\n const setPreviewLoading = useStore(store, (state) => state.setPreviewLoading);\n const setRenameValue = useStore(store, (state) => state.setRenameValue);\n const setContextMenu = useStore(store, (state) => state.setContextMenu);\n const startRename = useStore(store, (state) => state.startRename);\n const stopRename = useStore(store, (state) => state.stopRename);\n const closePreview = useStore(store, (state) => state.closePreview);\n const navigateTo = useStore(store, (state) => state.navigateTo);\n const goBackInHistory = useStore(store, (state) => state.goBack);\n const goForwardInHistory = useStore(store, (state) => state.goForward);\n const listFiles = useCommand2(\"files.list\");\n const readFile = useCommand2(\n \"files.read\"\n );\n const deleteEntry = useCommand2(\"files.delete\");\n const renameEntry = useCommand2(\"files.rename\");\n const createEntry = useCommand2(\"files.create\");\n const copyEntry = useCommand2(\"files.copy\");\n const moveEntry = useCommand2(\"files.move\");\n const uploadEntry = useCommand2(\n \"files.upload\"\n );\n const clipboardRef = useRef(null);\n const renameSubmittingRef = useRef(false);\n const openMiniApp = useOpenMiniApp();\n const canGoBack = historyIndex > 0;\n const canGoForward = historyIndex < history.length - 1;\n const fileToBase64 = useCallback((file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = () => reject(new Error(`Failed to read file: ${file.name}`));\n reader.onload = () => {\n const result = reader.result;\n if (typeof result !== \"string\") {\n reject(new Error(`Failed to read file: ${file.name}`));\n return;\n }\n const commaIndex = result.indexOf(\",\");\n resolve(commaIndex >= 0 ? result.slice(commaIndex + 1) : result);\n };\n reader.readAsDataURL(file);\n });\n }, []);\n const fetchEntries = useMemoizedFn_default(async (path) => {\n try {\n const result = await listFiles({ path });\n setEntries(result);\n } catch (err) {\n console.error(\"Failed to list directory:\", err);\n setEntries([]);\n }\n });\n useEffect(() => {\n fetchEntries(currentPath);\n }, [currentPath, fetchEntries]);\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const response = await fetch(\"/api/miniapps\");\n if (!response.ok) {\n throw new Error(`Failed to load MiniApps (${response.status})`);\n }\n const manifests = await response.json();\n if (!cancelled) {\n setMiniAppManifests(manifests);\n }\n } catch (error) {\n console.error(\"Failed to load MiniApps:\", error);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [setMiniAppManifests]);\n const refresh = useMemoizedFn_default(() => {\n fetchEntries(currentPath);\n });\n const handleSort = useCallback(\n (column) => {\n if (sortColumn === column) {\n setSortDirection(sortDirection === \"asc\" ? \"desc\" : \"asc\");\n } else {\n setSortColumn(column);\n setSortDirection(\"asc\");\n }\n },\n [setSortColumn, setSortDirection, sortColumn, sortDirection]\n );\n const handleSelect = useCallback(\n (entry) => {\n setSelectedPath(entry.path);\n setContextMenu(null);\n },\n [setContextMenu, setSelectedPath]\n );\n const openInlinePreview = useCallback(\n async (entry) => {\n setPreviewEntry(entry);\n setPreviewLoading(true);\n setPreviewContent(null);\n try {\n const result = await readFile({ path: entry.path });\n setPreviewContent(result.content);\n } catch (err) {\n console.error(\"Failed to read file:\", err);\n setPreviewContent(null);\n } finally {\n setPreviewLoading(false);\n }\n },\n [readFile, setPreviewContent, setPreviewEntry, setPreviewLoading]\n );\n const handleOpen = useCallback(\n async (entry) => {\n if (entry.type === \"directory\") {\n navigateTo(entry.path);\n return;\n }\n const defaultMiniApp = getDefaultMiniApp(entry, miniAppManifests);\n if (defaultMiniApp) {\n openMiniApp(defaultMiniApp.id, { path: entry.path });\n return;\n }\n await openInlinePreview(entry);\n },\n [miniAppManifests, navigateTo, openInlinePreview, openMiniApp]\n );\n const handleContextMenu = useCallback(\n (e, entry) => {\n e.preventDefault();\n setSelectedPath(entry.path);\n setContextMenu({ x: e.clientX, y: e.clientY, entry });\n },\n [setContextMenu, setSelectedPath]\n );\n const handleBackgroundContextMenu = useCallback(\n (e) => {\n const target = e.target;\n if (target.closest(\"tr\")) {\n return;\n }\n e.preventDefault();\n setSelectedPath(null);\n setContextMenu({ x: e.clientX, y: e.clientY, entry: null });\n },\n [setContextMenu, setSelectedPath]\n );\n const handleCloseContextMenu = useCallback(() => {\n setContextMenu(null);\n }, [setContextMenu]);\n const handleRenameSubmit = useMemoizedFn_default(async () => {\n if (renameSubmittingRef.current) {\n return;\n }\n if (!renamingPath || !renameValue.trim()) {\n stopRename();\n await fetchEntries(currentPath);\n return;\n }\n const originalEntry = entries.find((entry) => entry.path === renamingPath);\n const nextName = renameValue.trim();\n if (originalEntry && originalEntry.name === nextName) {\n stopRename();\n return;\n }\n renameSubmittingRef.current = true;\n try {\n const renamedEntry = await renameEntry({ path: renamingPath, newName: nextName });\n await fetchEntries(currentPath);\n if (selectedPath === renamingPath) {\n setSelectedPath(renamedEntry.path);\n }\n if (previewEntry?.path === renamingPath) {\n setPreviewEntry(renamedEntry);\n }\n } catch (err) {\n console.error(\"Failed to rename:\", err);\n await fetchEntries(currentPath);\n } finally {\n renameSubmittingRef.current = false;\n stopRename();\n }\n });\n const handleRenameCancel = useCallback(() => {\n stopRename();\n }, [stopRename]);\n const handleCreateDirectory = useMemoizedFn_default(async () => {\n const name = getNextDirectoryName(entries);\n const path = currentPath === \".\" ? name : `${currentPath}/${name}`;\n try {\n const entry = await createEntry({ path, type: \"directory\" });\n await fetchEntries(currentPath);\n setSelectedPath(entry.path);\n startRename(entry.path, entry.name);\n } catch (err) {\n console.error(\"Failed to create directory:\", err);\n }\n });\n const handleOpenInTerminal = useCallback(() => {\n openMiniApp(\"terminal\", { cwd: currentPath });\n }, [currentPath, openMiniApp]);\n const handleDelete = useMemoizedFn_default(async (path) => {\n try {\n await deleteEntry({ path });\n if (previewEntry?.path === path) {\n closePreview();\n }\n if (selectedPath === path) {\n setSelectedPath(null);\n }\n refresh();\n } catch (err) {\n console.error(\"Failed to delete:\", err);\n }\n });\n const handleCopy = useCallback((path) => {\n clipboardRef.current = { path, mode: \"copy\" };\n }, []);\n const handleCut = useCallback((path) => {\n clipboardRef.current = { path, mode: \"cut\" };\n }, []);\n const handlePaste = useMemoizedFn_default(async () => {\n if (!clipboardRef.current) return;\n const { path: sourcePath, mode } = clipboardRef.current;\n const sourceName = sourcePath.includes(\"/\") ? sourcePath.split(\"/\").pop() : sourcePath;\n const destination = currentPath === \".\" ? sourceName : `${currentPath}/${sourceName}`;\n try {\n if (mode === \"copy\") {\n await copyEntry({ source: sourcePath, destination });\n } else {\n await moveEntry({ source: sourcePath, destination });\n clipboardRef.current = null;\n }\n refresh();\n } catch (err) {\n console.error(`Failed to ${mode}:`, err);\n }\n });\n const handleDragOver = useCallback(\n (e) => {\n if (!Array.from(e.dataTransfer.types).includes(\"Files\")) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"copy\";\n setDragActive(true);\n },\n [setDragActive]\n );\n const handleDragLeave = useCallback(\n (e) => {\n const nextTarget = e.relatedTarget;\n if (nextTarget && e.currentTarget.contains(nextTarget)) {\n return;\n }\n setDragActive(false);\n },\n [setDragActive]\n );\n const handleDrop = useMemoizedFn_default(async (e) => {\n if (!Array.from(e.dataTransfer.types).includes(\"Files\")) return;\n e.preventDefault();\n setDragActive(false);\n const droppedFiles = Array.from(e.dataTransfer.files).filter((file) => file.size >= 0);\n if (droppedFiles.length === 0) return;\n setUploading(true);\n try {\n await Promise.all(\n droppedFiles.map(async (file) => {\n const contentBase64 = await fileToBase64(file);\n const path = currentPath === \".\" ? file.name : `${currentPath}/${file.name}`;\n await uploadEntry({ path, contentBase64 });\n })\n );\n refresh();\n } catch (err) {\n console.error(\"Failed to upload dropped files:\", err);\n } finally {\n setUploading(false);\n }\n });\n const buildContextMenuActions = useMemoizedFn_default((entry) => {\n if (entry === null) {\n return [\n {\n label: \"New folder\",\n handler: () => {\n void handleCreateDirectory();\n }\n },\n {\n label: \"Open in Terminal\",\n handler: handleOpenInTerminal\n }\n ];\n }\n const actions = [];\n if (entry.type === \"directory\") {\n actions.push({\n label: \"Open\",\n handler: () => navigateTo(entry.path)\n });\n } else {\n const compatibleMiniApps = getCompatibleMiniApps(entry, miniAppManifests);\n const defaultMiniApp = getDefaultMiniApp(entry, miniAppManifests);\n actions.push({\n label: \"Open\",\n handler: () => {\n if (defaultMiniApp) {\n openMiniApp(defaultMiniApp.id, { path: entry.path });\n return;\n }\n void openInlinePreview(entry);\n }\n });\n if (compatibleMiniApps.length > 0) {\n actions.push({\n label: \"Open with\",\n children: compatibleMiniApps.map((manifest) => ({\n label: manifest.name,\n handler: () => openMiniApp(manifest.id, { path: entry.path })\n }))\n });\n }\n }\n actions.push({\n label: \"Rename\",\n handler: () => startRename(entry.path, entry.name)\n });\n actions.push({\n label: \"Copy\",\n handler: () => handleCopy(entry.path)\n });\n actions.push({\n label: \"Cut\",\n handler: () => handleCut(entry.path)\n });\n if (clipboardRef.current) {\n actions.push({\n label: \"Paste here\",\n handler: handlePaste\n });\n }\n actions.push({\n label: \"Delete\",\n danger: true,\n handler: () => handleDelete(entry.path)\n });\n return actions;\n });\n const handleActionNavigated = useCallback(\n (path) => {\n navigateTo(path);\n },\n [navigateTo]\n );\n const handleActionCreated = useCallback(() => {\n refresh();\n }, [refresh]);\n const handleActionDeleted = useCallback(\n (path) => {\n if (previewEntry?.path === path) {\n closePreview();\n }\n refresh();\n },\n [closePreview, previewEntry, refresh]\n );\n const handleActionRenamed = useCallback(() => {\n refresh();\n }, [refresh]);\n return /* @__PURE__ */ jsx(\n FileActions,\n {\n currentPath,\n onNavigated: handleActionNavigated,\n onFileCreated: handleActionCreated,\n onDirectoryCreated: handleActionCreated,\n onDeleted: handleActionDeleted,\n onRenamed: handleActionRenamed,\n onRefresh: refresh,\n children: /* @__PURE__ */ jsxs(\"div\", { className: FileExplorerApp_default.root, children: [\n /* @__PURE__ */ jsxs(\"div\", { className: FileExplorerApp_default.navBar, children: [\n /* @__PURE__ */ jsx(\n \"button\",\n {\n className: FileExplorerApp_default.navBtn,\n onClick: goBackInHistory,\n disabled: !canGoBack,\n title: \"Back\",\n children: \"\\u25C0\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n className: FileExplorerApp_default.navBtn,\n onClick: goForwardInHistory,\n disabled: !canGoForward,\n title: \"Forward\",\n children: \"\\u25B6\"\n }\n ),\n /* @__PURE__ */ jsx(FileBreadcrumb, { currentPath, onNavigate: navigateTo })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: FileExplorerApp_default.body, children: [\n /* @__PURE__ */ jsx(\"div\", { className: FileExplorerApp_default.fileListPanel, children: /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: FileExplorerApp_default.fileListDropZone,\n onContextMenu: handleBackgroundContextMenu,\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n children: [\n /* @__PURE__ */ jsx(\n FileList,\n {\n entries,\n sortColumn,\n sortDirection,\n selectedPath,\n renamingPath,\n renameValue,\n isUploading,\n onSort: handleSort,\n onSelect: handleSelect,\n onOpen: handleOpen,\n onContextMenu: handleContextMenu,\n onRenameChange: setRenameValue,\n onRenameSubmit: handleRenameSubmit,\n onRenameCancel: handleRenameCancel\n }\n ),\n isDragActive && /* @__PURE__ */ jsx(\"div\", { className: FileExplorerApp_default.dropOverlay, children: /* @__PURE__ */ jsxs(\"div\", { className: FileExplorerApp_default.dropOverlayCard, children: [\n /* @__PURE__ */ jsx(\"div\", { className: FileExplorerApp_default.dropOverlayTitle, children: \"Drop files to upload\" }),\n /* @__PURE__ */ jsx(\"div\", { className: FileExplorerApp_default.dropOverlayHint, children: \"Files will be added to this folder.\" })\n ] }) })\n ]\n }\n ) }),\n previewEntry && /* @__PURE__ */ jsx(\n FilePreview,\n {\n entry: previewEntry,\n content: previewContent,\n loading: previewLoading,\n onClose: closePreview\n }\n )\n ] }),\n contextMenu && /* @__PURE__ */ jsx(\n ContextMenu,\n {\n x: contextMenu.x,\n y: contextMenu.y,\n actions: buildContextMenuActions(contextMenu.entry),\n onClose: handleCloseContextMenu\n }\n )\n ] })\n }\n );\n}\nfunction activate(ctx) {\n const root = createRoot(ctx.root);\n root.render(\n /* @__PURE__ */ jsx(WindowIdProvider, { windowId: ctx.windowId, children: /* @__PURE__ */ jsx(MiniAppIdProvider, { miniAppId: ctx.miniAppId, children: /* @__PURE__ */ jsx(FileExplorerApp, {}) }) })\n );\n return {\n deactivate() {\n root.unmount();\n }\n };\n}\nexport {\n activate\n};\n//# sourceMappingURL=frontend.js.map\n"],"names":["styleId","style","_mod","react_default","useCallback","useEffect","useMemo","useRef","_mod2","createRoot","isFunction","value","useMemoizedFn","fn","fnRef","memoizedFn","args","_i","useMemoizedFn_default","createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","FileBreadcrumb_default","_mod3","jsx","jsxs","FileBreadcrumb","currentPath","onNavigate","segments","segment","index","path","isLast","FileList_default","formatSize","size","formatDate","iso","date","now","month","day","getFileIcon","entry","ext","sortEntries","entries","column","direction","sorted","b","cmp","FileList","sortColumn","sortDirection","selectedPath","renamingPath","renameValue","isUploading","onSort","onSelect","onOpen","onContextMenu","onRenameChange","onRenameSubmit","onRenameCancel","renameInputRef","item","input","dotIndex","selectionEnd","handleRenameKeyDown","e","renderSortIndicator","FilePreview_default","formatBytes","bytes","isImageMime","mimeType","isTextMime","FilePreview","content","loading","onClose","renderBody","LIST_FILES_DEFAULT_LIMIT","LIST_FILES_MAX_LIMIT","FileActions","children","onNavigated","onFileCreated","onDirectoryCreated","onDeleted","onRenamed","_onRefresh","createEntry","useCommand","deleteEntry","renameEntry","listFiles","handleListFiles","params","rawLimit","limit","handleNavigate","handleCreateFile","name","handleCreateDirectory","handleDelete","handleRename","newName","ActionsProvider","Action","ContextMenu_default","ContextMenu","x","y","actions","menuRef","handleClickOutside","renderActions","menuActions","nested","action","className","INITIAL_STATE","resetTransientState","createFileExplorerStore","set","get","isDragActive","miniAppManifests","previewEntry","previewContent","previewLoading","contextMenu","history","historyIndex","nextHistory","nextIndex","FileExplorerApp_default","DEFAULT_OPEN_APP_IDS","getNextDirectoryName","names","suffix","getExtension","lowerName","matchesManifest","manifest","association","extension","extensionMatch","candidate","mimeTypeMatch","getCompatibleMiniApps","manifests","getDefaultMiniApp","compatible","miniAppId","match","FileExplorerApp","storeRef","store","setEntries","setSortColumn","setSortDirection","setDragActive","setUploading","setMiniAppManifests","setSelectedPath","setPreviewEntry","setPreviewContent","setPreviewLoading","setRenameValue","setContextMenu","startRename","stopRename","closePreview","navigateTo","goBackInHistory","goForwardInHistory","useCommand2","readFile","copyEntry","moveEntry","uploadEntry","clipboardRef","renameSubmittingRef","openMiniApp","useOpenMiniApp","canGoBack","canGoForward","fileToBase64","file","resolve","reject","reader","result","commaIndex","fetchEntries","err","cancelled","response","error","refresh","handleSort","handleSelect","openInlinePreview","handleOpen","defaultMiniApp","handleContextMenu","handleBackgroundContextMenu","handleCloseContextMenu","handleRenameSubmit","originalEntry","nextName","renamedEntry","handleRenameCancel","handleOpenInTerminal","handleCopy","handleCut","handlePaste","sourcePath","mode","sourceName","destination","handleDragOver","handleDragLeave","nextTarget","handleDrop","droppedFiles","contentBase64","buildContextMenuActions","compatibleMiniApps","handleActionNavigated","handleActionCreated","handleActionDeleted","handleActionRenamed","activate","ctx","root","WindowIdProvider","MiniAppIdProvider"],"mappings":"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"}