From 099011a177e13fe465df49a5ecfbfa9c807e2fe5 Mon Sep 17 00:00:00 2001 From: "Calum H." Date: Tue, 6 Jan 2026 00:35:51 +0000 Subject: [PATCH] feat: modrinth hosting - files tab refactor (#4912) * feat: api-client module for content v0 * feat: delete unused components + modules + setting * feat: xhr uploading * feat: fs module -> api-client * feat: migrate files.vue to use tanstack * fix: mem leak + other issues * fix: build * feat: switch to monaco * fix: go back to using ace, but improve preloading + theme * fix: styling + dead attrs * feat: match figma * fix: padding * feat: files-new for ui page structure * feat: finalize files.vue * fix: lint * fix: qa * fix: dep * fix: lint * fix: lockfile merge * feat: icons on navtab * fix: surface alternating on table * fix: hover surface color --------- Signed-off-by: Calum H. Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com> --- apps/frontend/package.json | 2 +- .../src/components/ui/charts/ChartDisplay.vue | 3 +- .../ui/servers/BackupSettingsModal.vue | 172 --- .../src/components/ui/servers/FileItem.vue | 112 +- .../ui/servers/FileManagerError.vue | 2 +- .../components/ui/servers/FileVirtualList.vue | 19 +- .../ui/servers/FilesBrowseNavbar.vue | 126 +- .../ui/servers/FilesDeleteItemModal.vue | 4 +- .../ui/servers/FilesEditingNavbar.vue | 16 +- .../src/components/ui/servers/FilesEditor.vue | 260 ++++ .../ui/servers/FilesImageViewer.vue | 2 +- .../components/ui/servers/FilesLabelBar.vue | 73 +- .../ui/servers/FilesUploadDragAndDrop.vue | 8 +- .../ui/servers/FilesUploadDropdown.vue | 22 +- .../ui/servers/FilesUploadZipUrlModal.vue | 22 +- .../composables/servers/modrinth-servers.ts | 48 +- .../src/composables/servers/modules/fs.ts | 248 ---- .../composables/servers/modules/general.ts | 30 - .../src/composables/servers/modules/index.ts | 1 - apps/frontend/src/helpers/api.ts | 12 + .../src/pages/hosting/manage/[id].vue | 105 +- .../hosting/manage/[id]/content/index.vue | 8 +- .../src/pages/hosting/manage/[id]/files.vue | 1180 +-------------- .../src/pages/hosting/manage/[id]/index.vue | 9 +- .../hosting/manage/[id]/options/index.vue | 16 +- .../manage/[id]/options/preferences.vue | 6 - .../manage/[id]/options/properties.vue | 79 +- .../api-client/src/core/abstract-client.ts | 81 +- .../src/core/abstract-upload-client.ts | 21 + packages/api-client/src/features/node-auth.ts | 149 ++ packages/api-client/src/index.ts | 5 + .../src/modules/archon/content/v0.ts | 56 + .../api-client/src/modules/archon/index.ts | 1 + .../src/modules/archon/servers/v0.ts | 16 + .../api-client/src/modules/archon/types.ts | 41 + packages/api-client/src/modules/index.ts | 2 + .../api-client/src/modules/kyros/files/v0.ts | 198 ++- .../api-client/src/modules/kyros/types.ts | 22 +- packages/api-client/src/platform/generic.ts | 4 +- packages/api-client/src/platform/nuxt.ts | 23 +- packages/api-client/src/platform/tauri.ts | 8 +- .../src/platform/xhr-upload-client.ts | 142 ++ packages/api-client/src/state/node-auth.ts | 45 + packages/api-client/src/types/index.ts | 1 + packages/api-client/src/types/request.ts | 14 + packages/api-client/src/types/upload.ts | 51 + packages/api-client/src/utils/jwt-retry.ts | 20 + packages/assets/generated-icons.ts | 12 + packages/assets/icons/boxes.svg | 26 + packages/assets/icons/chevron-up.svg | 5 + packages/assets/icons/database-backup.svg | 20 + packages/assets/icons/folder-cog.svg | 14 + packages/assets/icons/layout-template.svg | 17 + .../src => packages}/assets/icons/palette.svg | 0 packages/assets/styles/ace.css | 211 +++ packages/ui/package.json | 2 + .../src/components/base/FloatingActionBar.vue | 55 + .../components/base/UnsavedChangesPopup.vue | 76 +- packages/ui/src/components/base/index.ts | 1 + .../components/servers/files/FileNavbar.vue | 232 +++ .../servers/files/editor/FileEditor.vue | 236 +++ .../servers/files/editor/FileImageViewer.vue | 178 +++ .../components/servers/files/editor/index.ts | 2 + .../servers/files/explorer/FileItem.vue | 346 +++++ .../servers/files/explorer/FileLabelBar.vue | 100 ++ .../files/explorer/FileManagerError.vue | 40 + .../files/explorer/FileVirtualList.vue | 133 ++ .../files/explorer/TeleportOverflowMenu.vue | 418 ++++++ .../servers/files/explorer/index.ts | 5 + .../ui/src/components/servers/files/index.ts | 5 + .../files/modals/FileCreateItemModal.vue | 96 ++ .../files/modals/FileDeleteItemModal.vue | 78 + .../files/modals/FileMoveItemModal.vue | 82 + .../files/modals/FileRenameItemModal.vue | 94 ++ .../files/modals/FileUploadConflictModal.vue | 56 + .../components/servers/files/modals/index.ts | 5 + .../files/upload/FileUploadDragAndDrop.vue | 75 + .../files/upload/FileUploadDropdown.vue | 333 +++++ .../components/servers/files/upload/index.ts | 2 + packages/ui/src/components/servers/index.ts | 1 + .../ui/src/pages/hosting/manage/backups.vue | 5 - .../ui/src/pages/hosting/manage/files.vue | 1320 +++++++++++++++++ packages/ui/src/pages/index.ts | 1 + packages/ui/src/providers/server-context.ts | 11 + packages/ui/src/utils/ace-theme.ts | 15 + packages/ui/src/utils/file-extensions.ts | 152 ++ packages/ui/src/utils/index.ts | 1 + packages/utils/servers/types/api.ts | 2 +- pnpm-lock.yaml | 6 + 89 files changed, 5863 insertions(+), 2091 deletions(-) delete mode 100644 apps/frontend/src/components/ui/servers/BackupSettingsModal.vue create mode 100644 apps/frontend/src/components/ui/servers/FilesEditor.vue delete mode 100644 apps/frontend/src/composables/servers/modules/fs.ts create mode 100644 packages/api-client/src/core/abstract-upload-client.ts create mode 100644 packages/api-client/src/features/node-auth.ts create mode 100644 packages/api-client/src/modules/archon/content/v0.ts create mode 100644 packages/api-client/src/platform/xhr-upload-client.ts create mode 100644 packages/api-client/src/state/node-auth.ts create mode 100644 packages/api-client/src/types/upload.ts create mode 100644 packages/api-client/src/utils/jwt-retry.ts create mode 100644 packages/assets/icons/boxes.svg create mode 100644 packages/assets/icons/chevron-up.svg create mode 100644 packages/assets/icons/database-backup.svg create mode 100644 packages/assets/icons/folder-cog.svg create mode 100644 packages/assets/icons/layout-template.svg rename {apps/frontend/src => packages}/assets/icons/palette.svg (100%) create mode 100644 packages/assets/styles/ace.css create mode 100644 packages/ui/src/components/base/FloatingActionBar.vue create mode 100644 packages/ui/src/components/servers/files/FileNavbar.vue create mode 100644 packages/ui/src/components/servers/files/editor/FileEditor.vue create mode 100644 packages/ui/src/components/servers/files/editor/FileImageViewer.vue create mode 100644 packages/ui/src/components/servers/files/editor/index.ts create mode 100644 packages/ui/src/components/servers/files/explorer/FileItem.vue create mode 100644 packages/ui/src/components/servers/files/explorer/FileLabelBar.vue create mode 100644 packages/ui/src/components/servers/files/explorer/FileManagerError.vue create mode 100644 packages/ui/src/components/servers/files/explorer/FileVirtualList.vue create mode 100644 packages/ui/src/components/servers/files/explorer/TeleportOverflowMenu.vue create mode 100644 packages/ui/src/components/servers/files/explorer/index.ts create mode 100644 packages/ui/src/components/servers/files/index.ts create mode 100644 packages/ui/src/components/servers/files/modals/FileCreateItemModal.vue create mode 100644 packages/ui/src/components/servers/files/modals/FileDeleteItemModal.vue create mode 100644 packages/ui/src/components/servers/files/modals/FileMoveItemModal.vue create mode 100644 packages/ui/src/components/servers/files/modals/FileRenameItemModal.vue create mode 100644 packages/ui/src/components/servers/files/modals/FileUploadConflictModal.vue create mode 100644 packages/ui/src/components/servers/files/modals/index.ts create mode 100644 packages/ui/src/components/servers/files/upload/FileUploadDragAndDrop.vue create mode 100644 packages/ui/src/components/servers/files/upload/FileUploadDropdown.vue create mode 100644 packages/ui/src/components/servers/files/upload/index.ts create mode 100644 packages/ui/src/pages/hosting/manage/files.vue create mode 100644 packages/ui/src/utils/ace-theme.ts create mode 100644 packages/ui/src/utils/file-extensions.ts diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 2e90cdf98..62f153d73 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -49,7 +49,6 @@ "@vue-email/components": "^0.0.21", "@vue-email/render": "^0.0.9", "@vueuse/core": "^11.1.0", - "ace-builds": "^1.36.2", "ansi-to-html": "^0.7.2", "dayjs": "^1.11.7", "dompurify": "^3.1.7", @@ -61,6 +60,7 @@ "js-yaml": "^4.1.0", "jszip": "^3.10.1", "markdown-it": "14.1.0", + "ace-builds": "^1.36.2", "pathe": "^1.1.2", "pinia": "^3.0.0", "pinia-plugin-persistedstate": "^4.4.1", diff --git a/apps/frontend/src/components/ui/charts/ChartDisplay.vue b/apps/frontend/src/components/ui/charts/ChartDisplay.vue index b725a096e..24676e213 100644 --- a/apps/frontend/src/components/ui/charts/ChartDisplay.vue +++ b/apps/frontend/src/components/ui/charts/ChartDisplay.vue @@ -309,14 +309,13 @@ - - diff --git a/apps/frontend/src/components/ui/servers/FileItem.vue b/apps/frontend/src/components/ui/servers/FileItem.vue index 78a7408f1..f9f545351 100644 --- a/apps/frontend/src/components/ui/servers/FileItem.vue +++ b/apps/frontend/src/components/ui/servers/FileItem.vue @@ -1,7 +1,6 @@