nuxt-users 1.16.0 → 1.17.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 (31) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/cli.mjs +1 -1
  3. package/dist/module.json +1 -1
  4. package/dist/runtime/assets/nuxt-users.css +1 -1
  5. package/dist/runtime/components/NUsersList.vue +1 -1
  6. package/dist/runtime/components/NUsersList.vue.d.ts +1 -1
  7. package/dist/runtime/components/NUsersLoginForm.vue.d.ts +1 -1
  8. package/dist/runtime/components/NUsersResetPasswordForm.vue.d.ts +1 -1
  9. package/dist/runtime/components/NUsersUserCard.vue +1 -1
  10. package/dist/runtime/components/NUsersUserCard.vue.d.ts +1 -1
  11. package/dist/runtime/components/NUsersUserForm.vue.d.ts +1 -1
  12. package/dist/runtime/composables/useAuthentication.d.ts +1 -1
  13. package/dist/runtime/composables/usePasswordValidation.d.ts +1 -1
  14. package/dist/runtime/server/api/nuxt-users/[id].get.d.ts +1 -1
  15. package/dist/runtime/server/api/nuxt-users/[id].patch.d.ts +1 -1
  16. package/dist/runtime/server/api/nuxt-users/index.post.d.ts +1 -1
  17. package/dist/runtime/server/api/nuxt-users/me.get.d.ts +1 -1
  18. package/dist/runtime/server/api/nuxt-users/me.patch.d.ts +1 -1
  19. package/dist/runtime/server/composables/useNuxtUsersDatabase.d.ts +2 -2
  20. package/dist/runtime/server/composables/useServerAuth.d.ts +1 -1
  21. package/dist/runtime/server/services/password.d.ts +1 -1
  22. package/dist/runtime/server/utils/add-active-to-users.d.ts +1 -1
  23. package/dist/runtime/server/utils/create-migrations-table.d.ts +1 -1
  24. package/dist/runtime/server/utils/create-password-reset-tokens-table.d.ts +1 -1
  25. package/dist/runtime/server/utils/create-personal-access-tokens-table.d.ts +1 -1
  26. package/dist/runtime/server/utils/create-users-table.d.ts +1 -1
  27. package/dist/runtime/server/utils/db.d.ts +1 -1
  28. package/dist/runtime/server/utils/migrate.d.ts +1 -1
  29. package/dist/runtime/server/utils/user.d.ts +1 -1
  30. package/dist/runtime/utils/permissions.d.ts +1 -1
  31. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,6 +1,62 @@
1
1
  # Changelog
2
2
 
3
3
 
4
+ ## v1.17.1
5
+
6
+ [compare changes](https://github.com/rrd108/nuxt-users/compare/v1.17.0...v1.17.1)
7
+
8
+ ### 🩹 Fixes
9
+
10
+ - Component type import errors ([b1e7329](https://github.com/rrd108/nuxt-users/commit/b1e7329))
11
+ - Import errors ([3e7f99a](https://github.com/rrd108/nuxt-users/commit/3e7f99a))
12
+
13
+ ### 💅 Refactors
14
+
15
+ - Prefix css variables ([556bd1e](https://github.com/rrd108/nuxt-users/commit/556bd1e))
16
+
17
+ ### 🏡 Chore
18
+
19
+ - Remove unused css vars ([4add3c4](https://github.com/rrd108/nuxt-users/commit/4add3c4))
20
+ - **release:** V1.17.0 ([c06f70d](https://github.com/rrd108/nuxt-users/commit/c06f70d))
21
+ - Bump version number ([7d48235](https://github.com/rrd108/nuxt-users/commit/7d48235))
22
+
23
+ ### ✅ Tests
24
+
25
+ - Fix for postgres ([2d60019](https://github.com/rrd108/nuxt-users/commit/2d60019))
26
+
27
+ ### ❤️ Contributors
28
+
29
+ - Rrd108 ([@rrd108](https://github.com/rrd108))
30
+
31
+ ## v1.17.0
32
+
33
+ [compare changes](https://github.com/rrd108/nuxt-users/compare/v1.16.0...v1.17.0)
34
+
35
+ ### 🚀 Enhancements
36
+
37
+ - Add inactive user functionality ([67f8fbe](https://github.com/rrd108/nuxt-users/commit/67f8fbe))
38
+
39
+ ### 💅 Refactors
40
+
41
+ - Prefix css variables ([556bd1e](https://github.com/rrd108/nuxt-users/commit/556bd1e))
42
+
43
+ ### 🏡 Chore
44
+
45
+ - Fixes formatting issue in test file ([bfdc4d2](https://github.com/rrd108/nuxt-users/commit/bfdc4d2))
46
+ - **release:** V1.16.0 ([aceb56d](https://github.com/rrd108/nuxt-users/commit/aceb56d))
47
+ - Bump version number ([8f726d4](https://github.com/rrd108/nuxt-users/commit/8f726d4))
48
+ - Remove unused css vars ([4add3c4](https://github.com/rrd108/nuxt-users/commit/4add3c4))
49
+
50
+ ### ✅ Tests
51
+
52
+ - Fix failing test ([4a0f9e4](https://github.com/rrd108/nuxt-users/commit/4a0f9e4))
53
+ - Fix postgres connection error ([eae0b33](https://github.com/rrd108/nuxt-users/commit/eae0b33))
54
+ - Fix for postgres ([2d60019](https://github.com/rrd108/nuxt-users/commit/2d60019))
55
+
56
+ ### ❤️ Contributors
57
+
58
+ - Rrd108 ([@rrd108](https://github.com/rrd108))
59
+
4
60
  ## v1.16.0
5
61
 
6
62
  [compare changes](https://github.com/rrd108/nuxt-users/compare/v1.15.5...v1.16.0)
package/dist/cli.mjs CHANGED
@@ -267,7 +267,7 @@ const main = defineCommand({
267
267
  meta: {
268
268
  name: "nuxt-users",
269
269
  description: "CLI for Nuxt Users Module - Manage users, migrations, and database operations",
270
- version: "1.15.5"
270
+ version: "1.17.0"
271
271
  },
272
272
  subCommands: {
273
273
  migrate,
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-users",
3
3
  "configKey": "nuxtUsers",
4
- "version": "1.16.0",
4
+ "version": "1.17.1",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.0"
@@ -1 +1 @@
1
- :root{--color-primary:#3b82f6;--color-primary-dark:#2563eb;--color-primary-light:#60a5fa;--color-secondary:#059669;--color-secondary-dark:#047857;--color-secondary-light:#10b981;--color-white:#fff;--color-black:#000;--color-gray-50:#f9fafb;--color-gray-100:#f3f4f6;--color-gray-200:#e5e7eb;--color-gray-300:#d1d5db;--color-gray-400:#9ca3af;--color-gray-500:#6b7280;--color-gray-600:#4b5563;--color-gray-700:#374151;--color-gray-800:#1f2937;--color-gray-900:#111827;--color-success:#059669;--color-success-light:#f0fdf4;--color-success-border:#9ae6b4;--color-warning:#f59e0b;--color-warning-light:#fef3c7;--color-warning-text:#92400e;--color-error:#dc2626;--color-error-light:#fef2f2;--color-error-border:#fecaca;--color-error-alt:#db5050;--color-error-dark:#b91c1c;--color-border:#e5e7eb;--color-border-light:#d1d5db;--color-border-dark:#ccc;--color-bg-primary:#fff;--color-bg-secondary:#f9fafb;--color-bg-tertiary:#f3f4f6;--color-text-primary:#000;--color-text-secondary:#6b7280;--color-strength-weak:#dc3545;--color-strength-medium:#ffc107;--color-strength-strong:#28a745;--color-strength-unknown:#6c757d;--color-strength-bg:#e9ecef;--color-validation-passed:#28a745;--color-validation-failed:#dc3545;--color-validation-hint:#6c757d}@media (prefers-color-scheme:dark){.dark,:root{--color-primary:#60a5fa;--color-primary-dark:#3b82f6;--color-primary-light:#93c5fd;--color-secondary:#10b981;--color-secondary-dark:#059669;--color-secondary-light:#34d399;--color-white:#000;--color-black:#fff;--color-gray-50:#111827;--color-gray-100:#1f2937;--color-gray-200:#374151;--color-gray-300:#4b5563;--color-gray-400:#6b7280;--color-gray-500:#9ca3af;--color-gray-600:#d1d5db;--color-gray-700:#e5e7eb;--color-gray-800:#f3f4f6;--color-gray-900:#f9fafb;--color-success:#10b981;--color-success-light:#064e3b;--color-success-border:#065f46;--color-warning:#fbbf24;--color-warning-light:#451a03;--color-warning-text:#fef3c7;--color-error:#ef4444;--color-error-light:#450a0a;--color-error-border:#7f1d1d;--color-error-alt:#f87171;--color-error-dark:#dc2626;--color-border:#374151;--color-border-light:#4b5563;--color-border-dark:#6b7280;--color-bg-primary:#111827;--color-bg-secondary:#1f2937;--color-bg-tertiary:#374151;--color-text-primary:#fff;--color-text-secondary:#9ca3af;--color-strength-weak:#ef4444;--color-strength-medium:#fbbf24;--color-strength-strong:#22c55e;--color-strength-unknown:#9ca3af;--color-strength-bg:#374151;--color-validation-passed:#22c55e;--color-validation-failed:#ef4444;--color-validation-hint:#9ca3af}}.n-users-form-group{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;width:100%}.n-users-form-group.n-users-form-group-narrow{width:90%}.n-users-form-group label,.n-users-form-label{color:var(--color-text-primary,#000);display:block;font-size:1rem;font-weight:500;margin-bottom:.5rem}.n-users-form-group input,.n-users-form-group select,.n-users-form-input{border:1px solid var(--color-border,#ccc);border-radius:.25rem;font-size:1rem;padding:.5rem;transition:border-color .2s,box-shadow .2s;width:100%}.n-users-form-group input:focus,.n-users-form-group select:focus,.n-users-form-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 .1rem rgba(59,130,246,.1);outline:none}.n-users-form-group input:disabled,.n-users-form-input:disabled{background-color:var(--color-bg-secondary,#f9fafb);cursor:not-allowed}.n-users-form-group input.error,.n-users-form-input.error{border-color:var(--color-error,#dc3545)}.n-users-form-group input[type=email],.n-users-form-group input[type=password],.n-users-form-group input[type=text]{background-color:var(--color-bg-secondary);border:1px solid var(--color-border-light);border-radius:.5em;box-sizing:border-box;color:var(--color-gray-700);font-size:.875rem;padding:.75em 1em;transition:all .2s ease-in-out;width:100%}.n-users-form-group input[type=email]:focus,.n-users-form-group input[type=password]:focus,.n-users-form-group input[type=text]:focus{background-color:var(--color-bg-primary);border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(59,130,246,.1);outline:none}.n-users-form-group input[type=checkbox]{margin:0;width:auto}.n-users-btn,.n-users-cancel-btn,.n-users-delete-btn,.n-users-edit-btn,.n-users-submit-btn{align-self:flex-start;border:none;border-radius:.25rem;cursor:pointer;display:inline-block;font-size:1rem;font-weight:500;padding:.5rem 1rem;text-decoration:none;transition:background-color .2s,transform .1s}.n-users-btn:hover,.n-users-edit-btn:hover,.n-users-submit-btn:hover{background-color:var(--color-primary-dark,#2563eb);transform:translateY(-1px)}.n-users-btn:disabled,.n-users-submit-btn:disabled{cursor:not-allowed;opacity:.6;transform:none}.n-users-btn-primary,.n-users-edit-btn,.n-users-submit-btn{background-color:var(--color-primary,#3b82f6);color:#fff}.n-users-btn-secondary,.n-users-cancel-btn{background-color:var(--color-gray-500,#6b7280);color:#fff}.n-users-cancel-btn:hover{background-color:var(--color-gray-600,#4b5563)}.n-users-delete-btn{background-color:var(--color-error,#ef4444);color:#fff}.n-users-delete-btn:hover{background-color:var(--color-error-alt,#dc2626)}button[type=submit]{align-items:center;background-color:var(--color-primary);border:1px solid var(--color-primary);border-radius:.5em;color:var(--color-white);cursor:pointer;display:flex;font-size:.875rem;font-weight:500;gap:.5rem;justify-content:center;min-height:44px;padding:.75em 1em;transition:all .2s ease-in-out;width:100%}button[type=submit]:hover:not(:disabled){background-color:var(--color-primary-dark);border-color:var(--color-primary-dark)}button[type=submit]:disabled{cursor:not-allowed;opacity:.6}.n-users-error-message,.n-users-error-text{background-color:var(--color-error-light,#fef2f2);border:1px solid var(--color-error-border,#fecaca);border-radius:.5rem;color:var(--color-error,#dc3545);font-size:.875rem;margin-top:.5rem;padding:.75rem 1rem}.n-users-success-message{background-color:var(--color-success-light,#f0fff4);border:1px solid var(--color-success-border,#9ae6b4);border-radius:.5rem;color:var(--color-success,#10b981);font-size:.875rem;margin-top:.5rem;padding:.75rem 1rem}.n-users-grid{display:grid;gap:1rem}.n-users-grid-2{grid-template-columns:1fr 5fr}.n-users-grid-auto{grid-template-columns:repeat(auto-fill,minmax(12em,1fr))}.n-users-form-actions{align-items:center;display:flex;gap:1rem;margin-top:1.5rem}.n-users-loading-spinner{animation:n-users-spin 1s linear infinite;border:2px solid var(--color-white,#fff);border-radius:50%;border-top:2px solid transparent;height:16px;width:16px}@keyframes n-users-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.n-users-card{background-color:var(--color-bg-primary,#fff);border:1px solid var(--color-border,#e5e7eb);border-radius:.5rem;padding:1rem}.n-users-section{margin:0 auto;max-width:42em;padding:1em}.n-users-section-header{border-bottom:.1em solid var(--color-border,#e5e7eb);margin-bottom:1rem;padding-bottom:.5rem}.n-users-form-help{color:var(--color-text-secondary,#6b7280);font-size:.75rem;margin-top:.25rem}.n-users-strength-bar{background-color:var(--color-strength-bg,#e9ecef);border-radius:2px;height:4px;margin-bottom:4px;overflow:hidden;width:100%}.n-users-strength-fill{height:100%;transition:width .3s ease,background-color .3s ease}.n-users-strength-text{font-size:.75rem;font-weight:500}.n-users-validation-container{background-color:#f8f9fa;border:1px solid #e9ecef;border-radius:4px;margin-top:12px;padding:12px}.n-users-container-title{color:#495057;font-size:.875rem;font-weight:600;margin-bottom:8px}.n-users-list-unstyled{list-style:none;margin:0;padding-left:0}.n-users-list-item{align-items:center;display:flex;font-size:.875rem;margin-bottom:6px;transition:color .2s ease}.n-users-list-item:last-child{margin-bottom:0}.n-users-icon{font-weight:700;margin-right:8px;min-width:16px;text-align:center}.n-users-text{flex:1}.n-users-list ul{list-style:none}form{display:flex;flex-direction:column;gap:1.5rem}.n-users-login-section{background:linear-gradient(135deg,var(--color-bg-primary) 0,var(--color-bg-secondary) 100%);border:1px solid var(--color-border);border-radius:.75em;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);max-width:25rem}.n-users-login-header{margin-bottom:1em;text-align:center}.n-users-login-title{color:var(--color-gray-800);font-size:1.875rem;font-weight:700;line-height:1.2;margin:0 0 .5em}.n-users-login-subtitle{color:var(--color-gray-700);font-size:.875rem;line-height:1.5;margin:0}.n-users-remember-me{align-items:center;display:flex;gap:.5rem}.n-users-remember-me label{color:var(--color-gray-700);font-size:.875rem;margin:0}.n-users-login-footer{margin-top:1em;text-align:center}.n-users-forgot-password{margin:0}.n-users-forgot-link{align-items:center;color:var(--color-primary);display:inline-flex;font-size:.875rem;gap:.5rem;text-decoration:none;transition:color .2s ease-in-out}.n-users-forgot-link:hover:not(.loading){color:var(--color-primary-dark);text-decoration:underline}.n-users-forgot-link.loading{cursor:not-allowed;opacity:.6;pointer-events:none}.n-users-password-strength{margin-top:8px}.n-users-validation-rules{margin-top:12px}.n-users-rules-title{margin-bottom:8px}.n-users-rules-list{padding-left:0}.n-users-rule-item{margin-bottom:6px}.n-users-rule-item:last-child{margin-bottom:0}.n-users-rule-passed{color:var(--color-validation-passed,#28a745)}.n-users-rule-failed{color:var(--color-validation-failed,#dc3545)}.n-users-rule-icon{margin-right:8px}.n-users-rule-text{flex:1}.n-users-validation-errors{margin-top:8px}.n-users-error-text:last-child{margin-bottom:0}.n-users-password-hints{margin-top:8px}.n-users-hint-title{margin-bottom:8px}.n-users-hint-list{padding-left:16px}.n-users-hint-item{color:var(--color-validation-hint,#6c757d);margin-bottom:4px}.n-users-hint-item:last-child{margin-bottom:0}.n-users-logout-link{background:var(--color-error);border:2px solid transparent;border-color:var(--color-error-dark);border-radius:.5em;color:#fff;padding:.5em 1em;text-decoration:none}.n-users-logout-link:hover{border-color:var(--color-primary)}.n-users-user-card dd{margin:0}.n-users-user-card-actions{display:flex;gap:.5rem;margin-top:1rem}.n-users-user-form{margin:0 auto;max-width:500px}.n-users-form-group input.error{border-color:#dc3545}.n-users-profile-info{background-color:var(--color-bg-primary);border-top-left-radius:.5em;border-top-right-radius:.5em}.n-users-profile-details{font-size:1rem;list-style:none;margin:0;padding:0}.n-users-reset-password-container{background-color:var(--color-bg-primary);border-bottom-left-radius:.5em;border-bottom-right-radius:.5em}@media (max-width:480px){.n-users-login-title{font-size:1.5rem}}
1
+ :root{--nu-color-primary:#3b82f6;--nu-color-primary-dark:#2563eb;--nu-color-primary-light:#60a5fa;--nu-color-white:#fff;--nu-color-gray-50:#f9fafb;--nu-color-gray-500:#6b7280;--nu-color-gray-600:#4b5563;--nu-color-gray-700:#374151;--nu-color-gray-900:#111827;--nu-color-success:#059669;--nu-color-success-light:#f0fdf4;--nu-color-success-border:#9ae6b4;--nu-color-error:#dc2626;--nu-color-error-light:#fef2f2;--nu-color-error-border:#fecaca;--nu-color-error-alt:#db5050;--nu-color-error-dark:#b91c1c;--nu-color-border:#e5e7eb;--nu-color-border-light:#d1d5db;--nu-color-border-dark:#ccc;--nu-color-bg-primary:#fff;--nu-color-bg-secondary:#f9fafb;--nu-color-bg-tertiary:#f3f4f6;--nu-color-text-primary:#000;--nu-color-text-secondary:#6b7280;--nu-color-strength-bg:#e9ecef;--nu-color-validation-passed:#28a745;--nu-color-validation-failed:#dc3545;--nu-color-validation-hint:#6c757d}.dark :root{--nu-color-primary:#60a5fa;--nu-color-primary-dark:#3b82f6;--nu-color-primary-light:#93c5fd;--nu-color-white:#000;--nu-color-gray-50:#111827;--nu-color-gray-500:#9ca3af;--nu-color-gray-600:#d1d5db;--nu-color-gray-700:#e5e7eb;--nu-color-gray-900:#f9fafb;--nu-color-success:#10b981;--nu-color-success-light:#064e3b;--nu-color-success-border:#065f46;--nu-color-error:#ef4444;--nu-color-error-light:#450a0a;--nu-color-error-border:#7f1d1d;--nu-color-error-alt:#f87171;--nu-color-error-dark:#dc2626;--nu-color-border:#374151;--nu-color-border-light:#4b5563;--nu-color-border-dark:#6b7280;--nu-color-bg-primary:#111827;--nu-color-bg-secondary:#1f2937;--nu-color-bg-tertiary:#374151;--nu-color-text-primary:#fff;--nu-color-text-secondary:#9ca3af;--nu-color-strength-bg:#374151;--nu-color-validation-passed:#22c55e;--nu-color-validation-failed:#ef4444;--nu-color-validation-hint:#9ca3af}.n-users-form-group{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;width:100%}.n-users-form-group.n-users-form-group-narrow{width:90%}.n-users-form-group label,.n-users-form-label{color:var(--nu-color-text-primary,#000);display:block;font-size:1rem;font-weight:500;margin-bottom:.5rem}.n-users-form-group input,.n-users-form-group select,.n-users-form-input{border:1px solid var(--nu-color-border,#ccc);border-radius:.25rem;font-size:1rem;padding:.5rem;transition:border-color .2s,box-shadow .2s;width:100%}.n-users-form-group input:focus,.n-users-form-group select:focus,.n-users-form-input:focus{border-color:var(--nu-color-primary);box-shadow:0 0 0 .1rem rgba(59,130,246,.1);outline:none}.n-users-form-group input:disabled,.n-users-form-input:disabled{background-color:var(--nu-color-bg-secondary,#f9fafb);cursor:not-allowed}.n-users-form-group input.error,.n-users-form-input.error{border-color:var(--nu-color-error,#dc3545)}.n-users-form-group input[type=email],.n-users-form-group input[type=password],.n-users-form-group input[type=text]{background-color:var(--nu-color-bg-secondary);border:1px solid var(--nu-color-border-light);border-radius:.5em;box-sizing:border-box;color:var(--nu-color-gray-700);font-size:.875rem;padding:.75em 1em;transition:all .2s ease-in-out;width:100%}.n-users-form-group input[type=email]:focus,.n-users-form-group input[type=password]:focus,.n-users-form-group input[type=text]:focus{background-color:var(--nu-color-bg-primary);border-color:var(--nu-color-primary);box-shadow:0 0 0 3px rgba(59,130,246,.1);outline:none}.n-users-form-group input[type=checkbox]{margin:0;width:auto}.n-users-btn,.n-users-cancel-btn,.n-users-delete-btn,.n-users-edit-btn,.n-users-submit-btn{align-self:flex-start;border:none;border-radius:.25rem;cursor:pointer;display:inline-block;font-size:1rem;font-weight:500;padding:.5rem 1rem;text-decoration:none;transition:background-color .2s,transform .1s}.n-users-btn:hover,.n-users-edit-btn:hover,.n-users-submit-btn:hover{background-color:var(--nu-color-primary-dark,#2563eb);transform:translateY(-1px)}.n-users-btn:disabled,.n-users-submit-btn:disabled{cursor:not-allowed;opacity:.6;transform:none}.n-users-btn-primary,.n-users-edit-btn,.n-users-submit-btn{background-color:var(--nu-color-primary,#3b82f6);color:#fff}.n-users-btn-secondary,.n-users-cancel-btn{background-color:var(--nu-color-gray-500,#6b7280);color:#fff}.n-users-cancel-btn:hover{background-color:var(--nu-color-gray-600,#4b5563)}.n-users-delete-btn{background-color:var(--nu-color-error,#ef4444);color:#fff}.n-users-delete-btn:hover{background-color:var(--nu-color-error-alt,#dc2626)}button[type=submit]{align-items:center;background-color:var(--nu-color-primary);border:1px solid var(--nu-color-primary);border-radius:.5em;color:var(--nu-color-white);cursor:pointer;display:flex;font-size:.875rem;font-weight:500;gap:.5rem;justify-content:center;min-height:44px;padding:.75em 1em;transition:all .2s ease-in-out;width:100%}button[type=submit]:hover:not(:disabled){background-color:var(--nu-color-primary-dark);border-color:var(--nu-color-primary-dark)}button[type=submit]:disabled{cursor:not-allowed;opacity:.6}.n-users-error-message,.n-users-error-text{background-color:var(--nu-color-error-light,#fef2f2);border:1px solid var(--nu-color-error-border,#fecaca);border-radius:.5rem;color:var(--nu-color-error,#dc3545);font-size:.875rem;margin-top:.5rem;padding:.75rem 1rem}.n-users-success-message{background-color:var(--nu-color-success-light,#f0fff4);border:1px solid var(--nu-color-success-border,#9ae6b4);border-radius:.5rem;color:var(--nu-color-success,#10b981);font-size:.875rem;margin-top:.5rem;padding:.75rem 1rem}.n-users-grid{display:grid;gap:1rem}.n-users-grid-2{grid-template-columns:1fr 5fr}.n-users-grid-auto{grid-template-columns:repeat(auto-fill,minmax(12em,1fr))}.n-users-form-actions{align-items:center;display:flex;gap:1rem;margin-top:1.5rem}.n-users-loading-spinner{animation:n-users-spin 1s linear infinite;border:2px solid var(--nu-color-white,#fff);border-radius:50%;border-top:2px solid transparent;height:16px;width:16px}@keyframes n-users-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.n-users-card{background-color:var(--nu-color-bg-primary,#fff);border:1px solid var(--nu-color-border,#e5e7eb);border-radius:.5rem;padding:1rem}.n-users-section{margin:0 auto;max-width:42em;padding:1em}.n-users-section-header{border-bottom:.1em solid var(--nu-color-border,#e5e7eb);margin-bottom:1rem;padding-bottom:.5rem}.n-users-form-help{color:var(--nu-color-text-secondary,#6b7280);font-size:.75rem;margin-top:.25rem}.n-users-strength-bar{background-color:var(--nu-color-strength-bg,#e9ecef);border-radius:2px;height:4px;margin-bottom:4px;overflow:hidden;width:100%}.n-users-strength-fill{height:100%;transition:width .3s ease,background-color .3s ease}.n-users-strength-text{font-size:.75rem;font-weight:500}.n-users-validation-container{background-color:#f8f9fa;border:1px solid #e9ecef;border-radius:4px;margin-top:12px;padding:12px}.n-users-container-title{color:#495057;font-size:.875rem;font-weight:600;margin-bottom:8px}.n-users-list-unstyled{list-style:none;margin:0;padding-left:0}.n-users-list-item{align-items:center;display:flex;font-size:.875rem;margin-bottom:6px;transition:color .2s ease}.n-users-list-item:last-child{margin-bottom:0}.n-users-icon{font-weight:700;margin-right:8px;min-width:16px;text-align:center}.n-users-text{flex:1}.n-users-list ul{list-style:none}form{display:flex;flex-direction:column;gap:1.5rem}.n-users-login-section{background:linear-gradient(135deg,var(--nu-color-bg-primary) 0,var(--nu-color-bg-secondary) 100%);border:1px solid var(--nu-color-border);border-radius:.75em;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);max-width:25rem}.n-users-login-header{margin-bottom:1em;text-align:center}.n-users-login-title{color:var(--nu-color-gray-700);font-size:1.875rem;font-weight:700;line-height:1.2;margin:0 0 .5em}.n-users-login-subtitle{color:var(--nu-color-gray-700);font-size:.875rem;line-height:1.5;margin:0}.n-users-remember-me{align-items:center;display:flex;gap:.5rem}.n-users-remember-me label{color:var(--nu-color-gray-700);font-size:.875rem;margin:0}.n-users-login-footer{margin-top:1em;text-align:center}.n-users-forgot-password{margin:0}.n-users-forgot-link{align-items:center;color:var(--nu-color-primary);display:inline-flex;font-size:.875rem;gap:.5rem;text-decoration:none;transition:color .2s ease-in-out}.n-users-forgot-link:hover:not(.loading){color:var(--nu-color-primary-dark);text-decoration:underline}.n-users-forgot-link.loading{cursor:not-allowed;opacity:.6;pointer-events:none}.n-users-password-strength{margin-top:8px}.n-users-validation-rules{margin-top:12px}.n-users-rules-title{margin-bottom:8px}.n-users-rules-list{padding-left:0}.n-users-rule-item{margin-bottom:6px}.n-users-rule-item:last-child{margin-bottom:0}.n-users-rule-passed{color:var(--nu-color-validation-passed,#28a745)}.n-users-rule-failed{color:var(--nu-color-validation-failed,#dc3545)}.n-users-rule-icon{margin-right:8px}.n-users-rule-text{flex:1}.n-users-validation-errors{margin-top:8px}.n-users-error-text:last-child{margin-bottom:0}.n-users-password-hints{margin-top:8px}.n-users-hint-title{margin-bottom:8px}.n-users-hint-list{padding-left:16px}.n-users-hint-item{color:var(--nu-color-validation-hint,#6c757d);margin-bottom:4px}.n-users-hint-item:last-child{margin-bottom:0}.n-users-logout-link{background:var(--nu-color-error);border:2px solid transparent;border-color:var(--nu-color-error-dark);border-radius:.5em;color:#fff;padding:.5em 1em;text-decoration:none}.n-users-logout-link:hover{border-color:var(--nu-color-primary)}.n-users-user-card dd{margin:0}.n-users-user-card-actions{display:flex;gap:.5rem;margin-top:1rem}.n-users-user-form{margin:0 auto;max-width:500px}.n-users-form-group input.error{border-color:#dc3545}.n-users-profile-info{background-color:var(--nu-color-bg-primary);border-top-left-radius:.5em;border-top-right-radius:.5em}.n-users-profile-details{font-size:1rem;list-style:none;margin:0;padding:0}.n-users-reset-password-container{background-color:var(--nu-color-bg-primary);border-bottom-left-radius:.5em;border-bottom-right-radius:.5em}@media (max-width:480px){.n-users-login-title{font-size:1.5rem}}
@@ -1,7 +1,7 @@
1
1
  <script setup>
2
2
  import { ref, onMounted } from "vue";
3
3
  import { useRuntimeConfig } from "#imports";
4
- import { defaultDisplayFields, defaultFieldLabels } from "../../types";
4
+ import { defaultDisplayFields, defaultFieldLabels } from "#nuxt-users/types";
5
5
  defineProps({
6
6
  displayFields: { type: Array, required: false, default: () => defaultDisplayFields },
7
7
  fieldLabels: { type: Object, required: false, default: () => defaultFieldLabels }
@@ -1,4 +1,4 @@
1
- import { type DisplayFieldsProps, type User } from '../../types.js';
1
+ import { type DisplayFieldsProps, type User } from '#nuxt-users/types';
2
2
  declare var __VLS_1: {}, __VLS_3: {
3
3
  loading: boolean;
4
4
  }, __VLS_5: {
@@ -1,4 +1,4 @@
1
- import type { LoginFormData, LoginFormProps, UserWithoutPassword } from '../../types.js';
1
+ import type { LoginFormData, LoginFormProps, UserWithoutPassword } from '#nuxt-users/types';
2
2
  declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_9: {}, __VLS_11: {}, __VLS_13: {
3
3
  message: string;
4
4
  }, __VLS_15: {
@@ -1,4 +1,4 @@
1
- import type { UserWithoutPassword, ResetPasswordFormProps } from '../../types.js';
1
+ import type { UserWithoutPassword, ResetPasswordFormProps } from '#nuxt-users/types';
2
2
  declare const _default: import("vue").DefineComponent<ResetPasswordFormProps, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
3
3
  error: (error: string) => any;
4
4
  success: (user: UserWithoutPassword) => any;
@@ -2,7 +2,7 @@
2
2
  import { computed } from "vue";
3
3
  import { useAuthentication } from "../composables/useAuthentication";
4
4
  import { useRuntimeConfig } from "#imports";
5
- import { defaultDisplayFields, defaultFieldLabels } from "../../types";
5
+ import { defaultDisplayFields, defaultFieldLabels } from "#nuxt-users/types";
6
6
  const props = defineProps({
7
7
  user: { type: Object, required: true },
8
8
  index: { type: Number, required: true },
@@ -1,4 +1,4 @@
1
- import { type DisplayFieldsProps, type User } from '../../types.js';
1
+ import { type DisplayFieldsProps, type User } from '#nuxt-users/types';
2
2
  interface Props extends DisplayFieldsProps {
3
3
  user: User;
4
4
  index: number;
@@ -1,4 +1,4 @@
1
- import type { User } from '../../types.js';
1
+ import type { User } from '#nuxt-users/types';
2
2
  type __VLS_Props = {
3
3
  user?: User | null;
4
4
  };
@@ -1,4 +1,4 @@
1
- import type { User, UserWithoutPassword } from '../../types.js';
1
+ import type { User, UserWithoutPassword } from '#nuxt-users/types';
2
2
  export declare const useAuthentication: () => {
3
3
  user: Readonly<import("vue").Ref<{
4
4
  readonly id: number;
@@ -1,5 +1,5 @@
1
1
  import { type PasswordValidationResult, type PasswordValidationOptions } from '../../utils/index.js';
2
- import type { RuntimeModuleOptions } from '../../types.js';
2
+ import type { RuntimeModuleOptions } from '#nuxt-users/types';
3
3
  export declare const usePasswordValidation: (moduleOptions?: RuntimeModuleOptions, options?: PasswordValidationOptions) => {
4
4
  password: import("vue").Ref<string, string>;
5
5
  validationResult: import("vue").Ref<{
@@ -1,4 +1,4 @@
1
1
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
- user: import("../../../../types.js").UserWithoutPassword;
2
+ user: import("#nuxt-users/types").UserWithoutPassword;
3
3
  }>>;
4
4
  export default _default;
@@ -1,4 +1,4 @@
1
1
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
- user: import("../../../../types.js").UserWithoutPassword;
2
+ user: import("#nuxt-users/types").UserWithoutPassword;
3
3
  }>>;
4
4
  export default _default;
@@ -1,4 +1,4 @@
1
1
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
- user: Omit<import("../../../../types.js").User, "password">;
2
+ user: Omit<import("#nuxt-users/types").User, "password">;
3
3
  }>>;
4
4
  export default _default;
@@ -1,4 +1,4 @@
1
1
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
- user: import("../../../../types.js").UserWithoutPassword;
2
+ user: import("#nuxt-users/types").UserWithoutPassword;
3
3
  }>>;
4
4
  export default _default;
@@ -1,4 +1,4 @@
1
1
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
- user: import("../../../../types.js").UserWithoutPassword;
2
+ user: import("#nuxt-users/types").UserWithoutPassword;
3
3
  }>>;
4
4
  export default _default;
@@ -8,8 +8,8 @@ export declare const useNuxtUsersDatabase: () => Promise<{
8
8
  passwordResetTokens: string;
9
9
  };
10
10
  connector: {
11
- name: import("../../../types.js").DatabaseType;
12
- options: import("../../../types.js").DatabaseConfig;
11
+ name: import("#nuxt-users/types").DatabaseType;
12
+ options: import("#nuxt-users/types").DatabaseConfig;
13
13
  };
14
14
  };
15
15
  }>;
@@ -1,4 +1,4 @@
1
- import type { UserWithoutPassword } from '../../../types.js';
1
+ import type { UserWithoutPassword } from '#nuxt-users/types';
2
2
  /**
3
3
  * Server-side composable for authentication utilities
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  /**
3
3
  * Generates a password reset link and sends it to the user's email.
4
4
  */
@@ -1,2 +1,2 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  export declare const addActiveToUsers: (options: ModuleOptions) => Promise<void>;
@@ -1,2 +1,2 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  export declare const createMigrationsTable: (options: ModuleOptions) => Promise<void>;
@@ -1,2 +1,2 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  export declare const createPasswordResetTokensTable: (options: ModuleOptions) => Promise<void>;
@@ -1,2 +1,2 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  export declare const createPersonalAccessTokensTable: (options: ModuleOptions) => Promise<void>;
@@ -1,2 +1,2 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  export declare const createUsersTable: (options: ModuleOptions) => Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  export declare const getConnector: (name: string) => Promise<typeof import("db0/connectors/mysql2").default | typeof import("db0/connectors/postgresql").default | typeof import("db0/connectors/better-sqlite3").default>;
3
3
  export declare const useDb: (options: ModuleOptions) => Promise<import("db0").Database<import("db0").Connector<Database.Database>>>;
4
4
  export declare const checkTableExists: (options: ModuleOptions, tableName: string) => Promise<boolean>;
@@ -1,4 +1,4 @@
1
- import type { ModuleOptions } from '../../../types.js';
1
+ import type { ModuleOptions } from '#nuxt-users/types';
2
2
  export declare const getAppliedMigrations: (options: ModuleOptions) => Promise<string[]>;
3
3
  export declare const markMigrationAsApplied: (options: ModuleOptions, migrationName: string) => Promise<void>;
4
4
  export declare const runMigrations: (options: ModuleOptions) => Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { ModuleOptions, User, UserWithoutPassword } from '../../../types.js';
1
+ import type { ModuleOptions, User, UserWithoutPassword } from '#nuxt-users/types';
2
2
  interface CreateUserParams {
3
3
  email: string;
4
4
  name: string;
@@ -1,4 +1,4 @@
1
- import type { Permission } from '../../types.js';
1
+ import type { Permission } from '#nuxt-users/types';
2
2
  /**
3
3
  * Checks if a path matches a pattern (supports wildcards)
4
4
  * @param path - The path to check
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-users",
3
- "version": "1.16.0",
3
+ "version": "1.17.1",
4
4
  "description": "A comprehensive user management module for Nuxt 3 and Nuxt 4 applications with authentication, authorization, database support, and CLI tools",
5
5
  "keywords": [
6
6
  "nuxt",