From e1ba24d1bf757f69513a1b1a83e673da424aa153 Mon Sep 17 00:00:00 2001 From: lethdat Date: Thu, 5 Mar 2026 01:35:25 +0700 Subject: [PATCH] refactor: update video components to use AppButton and improve UI consistency - Refactored CardPopover.vue to enhance menu positioning and accessibility. - Replaced Button components with AppButton in VideoEditForm.vue and VideoInfoHeader.vue for consistent styling. - Simplified VideoSkeleton.vue by removing unused Skeleton imports and improving loading states. - Updated VideoFilters.vue to replace PrimeVue components with native HTML elements for better performance. - Enhanced VideoGrid.vue and VideoTable.vue with improved selection handling and UI updates. - Removed unused PrimeVue styles and imports in SSR routes and configuration files. --- .claude/settings.local.json | 3 +- bun.lock | 26 - components.d.ts | 18 - package.json | 10 +- src/components/DashboardNav.vue | 8 +- src/components/NotificationDrawer.vue | 10 +- src/components/app/AppDialog.vue | 19 +- src/lib/primePassthrough.ts | 742 ------------------ src/main.ts | 39 +- src/routes/auth/forgot.vue | 71 +- src/routes/auth/login.vue | 110 ++- src/routes/auth/signup.vue | 89 ++- .../overview/components/QuickActions.vue | 15 +- .../overview/components/RecentVideos.vue | 11 +- src/routes/overview/components/Referral.vue | 2 +- .../overview/components/StatsOverview.vue | 8 +- src/routes/upload/Upload.vue | 191 ++--- .../upload/components/RemoteUrlForm.vue | 36 +- src/routes/video/CopyVideoModal.vue | 47 +- src/routes/video/DetailVideo.vue | 14 +- src/routes/video/DetailVideoModal.vue | 146 ++-- src/routes/video/Videos.vue | 4 +- src/routes/video/components/CardPopover.vue | 84 +- .../video/components/Detail/VideoEditForm.vue | 8 +- .../components/Detail/VideoInfoHeader.vue | 34 +- .../video/components/Detail/VideoSkeleton.vue | 45 +- src/routes/video/components/VideoFilters.vue | 93 +-- src/routes/video/components/VideoGrid.vue | 146 ++-- src/routes/video/components/VideoTable.vue | 180 +++-- src/server/routes/ssr.ts | 21 - uno.config.ts | 5 - vite.config.ts | 2 - 32 files changed, 754 insertions(+), 1483 deletions(-) delete mode 100644 src/lib/primePassthrough.ts diff --git a/.claude/settings.local.json b/.claude/settings.local.json index d3e2f42..597150c 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -2,7 +2,8 @@ "permissions": { "allow": [ "Bash(bun run build)", - "mcp__ide__getDiagnostics" + "mcp__ide__getDiagnostics", + "Bash(bun install:*)" ] } } diff --git a/bun.lock b/bun.lock index c0d187d..f7f0305 100644 --- a/bun.lock +++ b/bun.lock @@ -6,8 +6,6 @@ "name": "holistream", "dependencies": { "@pinia/colada": "^0.21.2", - "@primeuix/themes": "^2.0.3", - "@primevue/forms": "^4.5.4", "@unhead/vue": "^2.1.2", "@vueuse/core": "^14.2.0", "aws4fetch": "^1.0.20", @@ -15,7 +13,6 @@ "hono": "^4.11.7", "is-mobile": "^5.0.0", "pinia": "^3.0.4", - "primevue": "^4.5.4", "tailwind-merge": "^3.4.0", "vue": "^3.5.27", "vue-router": "^5.0.2", @@ -23,7 +20,6 @@ }, "devDependencies": { "@cloudflare/vite-plugin": "^1.23.0", - "@primevue/auto-import-resolver": "^4.5.4", "@types/node": "^25.2.0", "@vitejs/plugin-vue": "^6.0.4", "@vitejs/plugin-vue-jsx": "^5.1.4", @@ -237,26 +233,6 @@ "@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="], - "@primeuix/forms": ["@primeuix/forms@0.1.0", "", { "dependencies": { "@primeuix/utils": "^0.6.0" } }, "sha512-LctcQidb+B5PuvAFWH24YH/SIzmHlOabLHpaTeGY/k51iBv1WyCp+5w9JMYuMB/BplSvV0ZGySxQVkN5Azr/aQ=="], - - "@primeuix/styled": ["@primeuix/styled@0.7.4", "", { "dependencies": { "@primeuix/utils": "^0.6.1" } }, "sha512-QSO/NpOQg8e9BONWRBx9y8VGMCMYz0J/uKfNJEya/RGEu7ARx0oYW0ugI1N3/KB1AAvyGxzKBzGImbwg0KUiOQ=="], - - "@primeuix/styles": ["@primeuix/styles@2.0.3", "", { "dependencies": { "@primeuix/styled": "^0.7.4" } }, "sha512-2ykAB6BaHzR/6TwF8ShpJTsZrid6cVIEBVlookSdvOdmlWuevGu5vWOScgIwqWwlZcvkFYAGR/SUV3OHCTBMdw=="], - - "@primeuix/themes": ["@primeuix/themes@2.0.3", "", { "dependencies": { "@primeuix/styled": "^0.7.4" } }, "sha512-3fS1883mtCWhgUgNf/feiaaDSOND4EBIOu9tZnzJlJ8QtYyL6eFLcA6V3ymCWqLVXQ1+lTVEZv1gl47FIdXReg=="], - - "@primeuix/utils": ["@primeuix/utils@0.6.4", "", {}, "sha512-pZ5f+vj7wSzRhC7KoEQRU5fvYAe+RP9+m39CTscZ3UywCD1Y2o6Fe1rRgklMPSkzUcty2jzkA0zMYkiJBD1hgg=="], - - "@primevue/auto-import-resolver": ["@primevue/auto-import-resolver@4.5.4", "", { "dependencies": { "@primevue/metadata": "4.5.4" } }, "sha512-YQHrZ9PQSG/4K2BwthA2Xuna4WyS0JMHajiHD9PljaDyQtBVwCadX5ZpKcrAUWR8E/1gjva8x/si0RYxxYrRJw=="], - - "@primevue/core": ["@primevue/core@4.5.4", "", { "dependencies": { "@primeuix/styled": "^0.7.4", "@primeuix/utils": "^0.6.2" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-lYJJB3wTrDJ8MkLctzHfrPZAqXVxoatjIsswSJzupatf6ZogJHVYADUKcn1JAkLLk8dtV1FA2AxDek663fHO5Q=="], - - "@primevue/forms": ["@primevue/forms@4.5.4", "", { "dependencies": { "@primeuix/forms": "^0.1.0", "@primeuix/utils": "^0.6.2", "@primevue/core": "4.5.4" } }, "sha512-2TlD8oJEtb8vuKzY3jY0W+7NVBC/Qj0m57iWzpMUmGnEKg9sbQ2/ZiU1sTof710/liYgm4FneRTOYHIpVkiJNA=="], - - "@primevue/icons": ["@primevue/icons@4.5.4", "", { "dependencies": { "@primeuix/utils": "^0.6.2", "@primevue/core": "4.5.4" } }, "sha512-DxgryEc7ZmUqcEhYMcxGBRyFzdtLIoy3jLtlH1zsVSRZaG+iSAcjQ88nvfkZxGUZtZBFL7sRjF6KLq3bJZJwUw=="], - - "@primevue/metadata": ["@primevue/metadata@4.5.4", "", {}, "sha512-jJFD0KYm8bPYgFo0JP3Dc2RkyXzrMI1XHQGsEKTysx9Jx2d1XdxtFji/ZsQeoo/RmwUNof5ciZ72URq37rnK+g=="], - "@quansync/fs": ["@quansync/fs@1.0.0", "", { "dependencies": { "quansync": "^1.0.0" } }, "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ=="], "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.2", "", {}, "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw=="], @@ -551,8 +527,6 @@ "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - "primevue": ["primevue@4.5.4", "", { "dependencies": { "@primeuix/styled": "^0.7.4", "@primeuix/styles": "^2.0.2", "@primeuix/utils": "^0.6.2", "@primevue/core": "4.5.4", "@primevue/icons": "4.5.4" } }, "sha512-nTyEohZABFJhVIpeUxgP0EJ8vKcJAhD+Z7DYj95e7ie/MNUCjRNcGjqmE1cXtXi4z54qDfTSI9h2uJ51qz2DIw=="], - "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], diff --git a/components.d.ts b/components.d.ts index 8b553fe..1f4dc24 100644 --- a/components.d.ts +++ b/components.d.ts @@ -28,9 +28,7 @@ declare module 'vue' { ArrowRightIcon: typeof import('./src/components/icons/ArrowRightIcon.vue')['default'] Bell: typeof import('./src/components/icons/Bell.vue')['default'] BellIcon: typeof import('./src/components/icons/BellIcon.vue')['default'] - Button: typeof import('primevue/button')['default'] Chart: typeof import('./src/components/icons/Chart.vue')['default'] - Checkbox: typeof import('primevue/checkbox')['default'] CheckCircleIcon: typeof import('./src/components/icons/CheckCircleIcon.vue')['default'] CheckIcon: typeof import('./src/components/icons/CheckIcon.vue')['default'] CheckMarkIcon: typeof import('./src/components/icons/CheckMarkIcon.vue')['default'] @@ -40,7 +38,6 @@ declare module 'vue' { CreditCardIcon: typeof import('./src/components/icons/CreditCardIcon.vue')['default'] DashboardLayout: typeof import('./src/components/DashboardLayout.vue')['default'] DashboardNav: typeof import('./src/components/DashboardNav.vue')['default'] - Dialog: typeof import('primevue/dialog')['default'] DownloadIcon: typeof import('./src/components/icons/DownloadIcon.vue')['default'] EllipsisVerticalIcon: typeof import('./src/components/icons/EllipsisVerticalIcon.vue')['default'] EmptyState: typeof import('./src/components/dashboard/EmptyState.vue')['default'] @@ -53,19 +50,15 @@ declare module 'vue' { Home: typeof import('./src/components/icons/Home.vue')['default'] ImageIcon: typeof import('./src/components/icons/ImageIcon.vue')['default'] InfoIcon: typeof import('./src/components/icons/InfoIcon.vue')['default'] - InputText: typeof import('primevue/inputtext')['default'] Layout: typeof import('./src/components/icons/Layout.vue')['default'] LayoutDashboard: typeof import('./src/components/icons/LayoutDashboard.vue')['default'] LinkIcon: typeof import('./src/components/icons/LinkIcon.vue')['default'] LockIcon: typeof import('./src/components/icons/LockIcon.vue')['default'] MailIcon: typeof import('./src/components/icons/MailIcon.vue')['default'] - Message: typeof import('primevue/message')['default'] MonitorIcon: typeof import('./src/components/icons/MonitorIcon.vue')['default'] NotificationDrawer: typeof import('./src/components/NotificationDrawer.vue')['default'] PageHeader: typeof import('./src/components/dashboard/PageHeader.vue')['default'] - Paginator: typeof import('primevue/paginator')['default'] PanelLeft: typeof import('./src/components/icons/PanelLeft.vue')['default'] - Password: typeof import('primevue/password')['default'] PencilIcon: typeof import('./src/components/icons/PencilIcon.vue')['default'] PlayIcon: typeof import('./src/components/icons/PlayIcon.vue')['default'] PlusIcon: typeof import('./src/components/icons/PlusIcon.vue')['default'] @@ -76,10 +69,8 @@ declare module 'vue' { RouterView: typeof import('vue-router')['RouterView'] SendIcon: typeof import('./src/components/icons/SendIcon.vue')['default'] SettingsIcon: typeof import('./src/components/icons/SettingsIcon.vue')['default'] - Skeleton: typeof import('primevue/skeleton')['default'] SlidersIcon: typeof import('./src/components/icons/SlidersIcon.vue')['default'] StatsCard: typeof import('./src/components/dashboard/StatsCard.vue')['default'] - Tag: typeof import('primevue/tag')['default'] TelegramIcon: typeof import('./src/components/icons/TelegramIcon.vue')['default'] TestIcon: typeof import('./src/components/icons/TestIcon.vue')['default'] TrashIcon: typeof import('./src/components/icons/TrashIcon.vue')['default'] @@ -116,9 +107,7 @@ declare global { const ArrowRightIcon: typeof import('./src/components/icons/ArrowRightIcon.vue')['default'] const Bell: typeof import('./src/components/icons/Bell.vue')['default'] const BellIcon: typeof import('./src/components/icons/BellIcon.vue')['default'] - const Button: typeof import('primevue/button')['default'] const Chart: typeof import('./src/components/icons/Chart.vue')['default'] - const Checkbox: typeof import('primevue/checkbox')['default'] const CheckCircleIcon: typeof import('./src/components/icons/CheckCircleIcon.vue')['default'] const CheckIcon: typeof import('./src/components/icons/CheckIcon.vue')['default'] const CheckMarkIcon: typeof import('./src/components/icons/CheckMarkIcon.vue')['default'] @@ -128,7 +117,6 @@ declare global { const CreditCardIcon: typeof import('./src/components/icons/CreditCardIcon.vue')['default'] const DashboardLayout: typeof import('./src/components/DashboardLayout.vue')['default'] const DashboardNav: typeof import('./src/components/DashboardNav.vue')['default'] - const Dialog: typeof import('primevue/dialog')['default'] const DownloadIcon: typeof import('./src/components/icons/DownloadIcon.vue')['default'] const EllipsisVerticalIcon: typeof import('./src/components/icons/EllipsisVerticalIcon.vue')['default'] const EmptyState: typeof import('./src/components/dashboard/EmptyState.vue')['default'] @@ -141,19 +129,15 @@ declare global { const Home: typeof import('./src/components/icons/Home.vue')['default'] const ImageIcon: typeof import('./src/components/icons/ImageIcon.vue')['default'] const InfoIcon: typeof import('./src/components/icons/InfoIcon.vue')['default'] - const InputText: typeof import('primevue/inputtext')['default'] const Layout: typeof import('./src/components/icons/Layout.vue')['default'] const LayoutDashboard: typeof import('./src/components/icons/LayoutDashboard.vue')['default'] const LinkIcon: typeof import('./src/components/icons/LinkIcon.vue')['default'] const LockIcon: typeof import('./src/components/icons/LockIcon.vue')['default'] const MailIcon: typeof import('./src/components/icons/MailIcon.vue')['default'] - const Message: typeof import('primevue/message')['default'] const MonitorIcon: typeof import('./src/components/icons/MonitorIcon.vue')['default'] const NotificationDrawer: typeof import('./src/components/NotificationDrawer.vue')['default'] const PageHeader: typeof import('./src/components/dashboard/PageHeader.vue')['default'] - const Paginator: typeof import('primevue/paginator')['default'] const PanelLeft: typeof import('./src/components/icons/PanelLeft.vue')['default'] - const Password: typeof import('primevue/password')['default'] const PencilIcon: typeof import('./src/components/icons/PencilIcon.vue')['default'] const PlayIcon: typeof import('./src/components/icons/PlayIcon.vue')['default'] const PlusIcon: typeof import('./src/components/icons/PlusIcon.vue')['default'] @@ -164,10 +148,8 @@ declare global { const RouterView: typeof import('vue-router')['RouterView'] const SendIcon: typeof import('./src/components/icons/SendIcon.vue')['default'] const SettingsIcon: typeof import('./src/components/icons/SettingsIcon.vue')['default'] - const Skeleton: typeof import('primevue/skeleton')['default'] const SlidersIcon: typeof import('./src/components/icons/SlidersIcon.vue')['default'] const StatsCard: typeof import('./src/components/dashboard/StatsCard.vue')['default'] - const Tag: typeof import('primevue/tag')['default'] const TelegramIcon: typeof import('./src/components/icons/TelegramIcon.vue')['default'] const TestIcon: typeof import('./src/components/icons/TestIcon.vue')['default'] const TrashIcon: typeof import('./src/components/icons/TrashIcon.vue')['default'] diff --git a/package.json b/package.json index 5171b3c..046c3e6 100644 --- a/package.json +++ b/package.json @@ -2,17 +2,15 @@ "name": "holistream", "type": "module", "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", + "dev": "bun vite", + "build": "bun vite build", + "preview": "bun vite preview", "deploy": "wrangler deploy", "cf-typegen": "wrangler types --env-interface CloudflareBindings", "tail": "wrangler tail" }, "dependencies": { "@pinia/colada": "^0.21.2", - "@primeuix/themes": "^2.0.3", - "@primevue/forms": "^4.5.4", "@unhead/vue": "^2.1.2", "@vueuse/core": "^14.2.0", "aws4fetch": "^1.0.20", @@ -20,7 +18,6 @@ "hono": "^4.11.7", "is-mobile": "^5.0.0", "pinia": "^3.0.4", - "primevue": "^4.5.4", "tailwind-merge": "^3.4.0", "vue": "^3.5.27", "vue-router": "^5.0.2", @@ -28,7 +25,6 @@ }, "devDependencies": { "@cloudflare/vite-plugin": "^1.23.0", - "@primevue/auto-import-resolver": "^4.5.4", "@types/node": "^25.2.0", "@vitejs/plugin-vue": "^6.0.4", "@vitejs/plugin-vue-jsx": "^5.1.4", diff --git a/src/components/DashboardNav.vue b/src/components/DashboardNav.vue index 1e7211c..3d5d763 100644 --- a/src/components/DashboardNav.vue +++ b/src/components/DashboardNav.vue @@ -27,6 +27,7 @@ const links = [ ]; +//v-tooltip="i.label"