diff --git a/app/components/UploadPopover.vue b/app/components/UploadPopover.vue
index ee3061e..a08af41 100644
--- a/app/components/UploadPopover.vue
+++ b/app/components/UploadPopover.vue
@@ -11,6 +11,7 @@ import {
PopoverTitle,
PopoverTrigger,
} from '@/components/ui/popover'
+import { Spinner } from '@/components/ui/spinner'
const { user } = useAuth()
const { t } = useI18n()
@@ -82,6 +83,7 @@ async function onSubmit() {
{{ errorMessage }}
diff --git a/app/components/ui/spinner/Spinner.vue b/app/components/ui/spinner/Spinner.vue
new file mode 100644
index 0000000..d9ca2a8
--- /dev/null
+++ b/app/components/ui/spinner/Spinner.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/app/components/ui/spinner/index.ts b/app/components/ui/spinner/index.ts
new file mode 100644
index 0000000..712ee0e
--- /dev/null
+++ b/app/components/ui/spinner/index.ts
@@ -0,0 +1 @@
+export { default as Spinner } from './Spinner.vue'
diff --git a/app/pages/admin.vue b/app/pages/admin.vue
index 25549d4..255bf03 100644
--- a/app/pages/admin.vue
+++ b/app/pages/admin.vue
@@ -15,6 +15,7 @@ import {
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
+import { Spinner } from '@/components/ui/spinner'
import { Textarea } from '@/components/ui/textarea'
definePageMeta({ middleware: 'admin' })
@@ -219,6 +220,7 @@ async function saveMotd() {
:disabled="savingRole === role.id"
@click="savePermissions(role)"
>
+
{{ savingRole === role.id ? $t('common.saving') : $t('common.save') }}
diff --git a/app/pages/login.vue b/app/pages/login.vue
index 88bd2e8..97d423b 100644
--- a/app/pages/login.vue
+++ b/app/pages/login.vue
@@ -3,6 +3,7 @@ import { Button } from '@/components/ui/button'
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
+import { Spinner } from '@/components/ui/spinner'
const { login } = useAuth()
const { t } = useI18n()
@@ -50,6 +51,7 @@ async function onSubmit() {
{{ errorMessage }}
diff --git a/app/pages/register.vue b/app/pages/register.vue
index 8010568..f2fff54 100644
--- a/app/pages/register.vue
+++ b/app/pages/register.vue
@@ -3,6 +3,7 @@ import { Button } from '@/components/ui/button'
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'
import { Input } from '@/components/ui/input'
import { Label } from '@/components/ui/label'
+import { Spinner } from '@/components/ui/spinner'
const { register } = useAuth()
const { t } = useI18n()
@@ -55,6 +56,7 @@ async function onSubmit() {
{{ errorMessage }}
diff --git a/app/pages/settings.vue b/app/pages/settings.vue
index 88be335..1468cc3 100644
--- a/app/pages/settings.vue
+++ b/app/pages/settings.vue
@@ -33,6 +33,7 @@ import {
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
+import { Spinner } from '@/components/ui/spinner'
const { user, refresh } = useAuth()
const { invalidate } = useUserSummaries()
@@ -268,6 +269,7 @@ async function save() {
diff --git a/package-lock.json b/package-lock.json
index 7fb13fa..898ef0f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,7 @@
"@dnd-kit/abstract": "^0.1.21",
"@iconify-json/ph": "^1.2.2",
"@iconify-json/simple-icons": "^1.2.98",
+ "@lucide/vue": "^1.51.0",
"@nuxt/image": "^2.1.0",
"@nuxtjs/i18n": "^10.6.0",
"@tanstack/vue-table": "^9.2.4",
@@ -3575,6 +3576,15 @@
"integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
"license": "MIT"
},
+ "node_modules/@lucide/vue": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/@lucide/vue/-/vue-1.51.0.tgz",
+ "integrity": "sha512-zMkTAMP8OsPESz/GDedsZfr3VUF2IiHlj25mBZG6Pc8A8J8BdygkE8k1HhRFXEUNzytp5DqxiBQNm3RG/U2bVg==",
+ "license": "ISC",
+ "peerDependencies": {
+ "vue": ">=3.0.1"
+ }
+ },
"node_modules/@mapbox/jsonlint-lines-primitives": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.3.tgz",
diff --git a/package.json b/package.json
index 47f5c63..841ac3b 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
"@dnd-kit/abstract": "^0.1.21",
"@iconify-json/ph": "^1.2.2",
"@iconify-json/simple-icons": "^1.2.98",
+ "@lucide/vue": "^1.51.0",
"@nuxt/image": "^2.1.0",
"@nuxtjs/i18n": "^10.6.0",
"@tanstack/vue-table": "^9.2.4",