From 4d243151035ef393736f6564b4fa940629177f86 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 3 Sep 2025 21:04:44 +0200 Subject: [PATCH] Mockups for Designs --- .serena/.gitignore | 1 + .../components/core/NeumorphicCard.vue | 215 +++ .../components/core/ProfessionalButton.vue | 315 ++++ design-mockups/components/core/StatCard.vue | 320 ++++ design-mockups/index.vue | 315 ++++ .../admin/ProfessionalAdminDashboard.vue | 814 +++++++++++ .../pages/auth/ProfessionalLogin.vue | 419 ++++++ .../board/ProfessionalBoardDashboard.vue | 1249 ++++++++++++++++ .../member/ProfessionalMemberDashboard.vue | 1287 +++++++++++++++++ design-mockups/styles/neumorphic-system.scss | 320 ++++ package-lock.json | 160 ++ package.json | 10 + 12 files changed, 5425 insertions(+) create mode 100644 .serena/.gitignore create mode 100644 design-mockups/components/core/NeumorphicCard.vue create mode 100644 design-mockups/components/core/ProfessionalButton.vue create mode 100644 design-mockups/components/core/StatCard.vue create mode 100644 design-mockups/index.vue create mode 100644 design-mockups/pages/admin/ProfessionalAdminDashboard.vue create mode 100644 design-mockups/pages/auth/ProfessionalLogin.vue create mode 100644 design-mockups/pages/board/ProfessionalBoardDashboard.vue create mode 100644 design-mockups/pages/member/ProfessionalMemberDashboard.vue create mode 100644 design-mockups/styles/neumorphic-system.scss diff --git a/.serena/.gitignore b/.serena/.gitignore new file mode 100644 index 0000000..14d86ad --- /dev/null +++ b/.serena/.gitignore @@ -0,0 +1 @@ +/cache diff --git a/design-mockups/components/core/NeumorphicCard.vue b/design-mockups/components/core/NeumorphicCard.vue new file mode 100644 index 0000000..b900f5a --- /dev/null +++ b/design-mockups/components/core/NeumorphicCard.vue @@ -0,0 +1,215 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/components/core/ProfessionalButton.vue b/design-mockups/components/core/ProfessionalButton.vue new file mode 100644 index 0000000..32d4715 --- /dev/null +++ b/design-mockups/components/core/ProfessionalButton.vue @@ -0,0 +1,315 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/components/core/StatCard.vue b/design-mockups/components/core/StatCard.vue new file mode 100644 index 0000000..9298d89 --- /dev/null +++ b/design-mockups/components/core/StatCard.vue @@ -0,0 +1,320 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/index.vue b/design-mockups/index.vue new file mode 100644 index 0000000..ef11615 --- /dev/null +++ b/design-mockups/index.vue @@ -0,0 +1,315 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/pages/admin/ProfessionalAdminDashboard.vue b/design-mockups/pages/admin/ProfessionalAdminDashboard.vue new file mode 100644 index 0000000..d6adeca --- /dev/null +++ b/design-mockups/pages/admin/ProfessionalAdminDashboard.vue @@ -0,0 +1,814 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/pages/auth/ProfessionalLogin.vue b/design-mockups/pages/auth/ProfessionalLogin.vue new file mode 100644 index 0000000..51c3a1b --- /dev/null +++ b/design-mockups/pages/auth/ProfessionalLogin.vue @@ -0,0 +1,419 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/pages/board/ProfessionalBoardDashboard.vue b/design-mockups/pages/board/ProfessionalBoardDashboard.vue new file mode 100644 index 0000000..0f7edf7 --- /dev/null +++ b/design-mockups/pages/board/ProfessionalBoardDashboard.vue @@ -0,0 +1,1249 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/pages/member/ProfessionalMemberDashboard.vue b/design-mockups/pages/member/ProfessionalMemberDashboard.vue new file mode 100644 index 0000000..ef3cf21 --- /dev/null +++ b/design-mockups/pages/member/ProfessionalMemberDashboard.vue @@ -0,0 +1,1287 @@ + + + + + \ No newline at end of file diff --git a/design-mockups/styles/neumorphic-system.scss b/design-mockups/styles/neumorphic-system.scss new file mode 100644 index 0000000..8aa5825 --- /dev/null +++ b/design-mockups/styles/neumorphic-system.scss @@ -0,0 +1,320 @@ +// MonacoUSA Portal - Neumorphic Design System +// Professional, Modern, and Inviting Design Language + +// ============================================ +// 1. Color Palette +// ============================================ + +// Primary - Monaco Red (Sophisticated) +$primary-50: #FEF2F2; +$primary-100: #FEE2E2; +$primary-200: #FECACA; +$primary-300: #FCA5A5; +$primary-400: #F87171; +$primary-500: #DC2626; // Main brand +$primary-600: #B91C1C; // Hover states +$primary-700: #991B1B; +$primary-800: #7F1D1D; +$primary-900: #450A0A; + +// Neutral Grays (Professional Workspace) +$neutral-50: #FAFAFA; +$neutral-100: #F5F5F5; +$neutral-200: #E5E5E5; +$neutral-300: #D4D4D4; +$neutral-400: #A3A3A3; +$neutral-500: #737373; +$neutral-600: #525252; +$neutral-700: #404040; +$neutral-800: #262626; +$neutral-900: #171717; + +// Semantic Colors +$success-500: #10B981; +$success-100: #D1FAE5; +$warning-500: #F59E0B; +$warning-100: #FEF3C7; +$error-500: #EF4444; +$error-100: #FEE2E2; +$info-500: #3B82F6; +$info-100: #DBEAFE; + +// ============================================ +// 2. Neumorphic Shadow System +// ============================================ + +// Light Mode Shadows +$shadow-soft-xs: 2px 2px 4px rgba(0, 0, 0, 0.05), -2px -2px 4px rgba(255, 255, 255, 0.8); +$shadow-soft-sm: 4px 4px 8px rgba(0, 0, 0, 0.08), -4px -4px 8px rgba(255, 255, 255, 0.9); +$shadow-soft-md: 8px 8px 16px rgba(0, 0, 0, 0.1), -8px -8px 16px rgba(255, 255, 255, 0.95); +$shadow-soft-lg: 15px 15px 30px rgba(0, 0, 0, 0.12), -15px -15px 30px rgba(255, 255, 255, 1); +$shadow-soft-xl: 20px 20px 40px rgba(0, 0, 0, 0.15), -20px -20px 40px rgba(255, 255, 255, 1); + +// Inset Shadows (for pressed states) +$shadow-inset-sm: inset 2px 2px 4px rgba(0, 0, 0, 0.08), inset -2px -2px 4px rgba(255, 255, 255, 0.9); +$shadow-inset-md: inset 4px 4px 8px rgba(0, 0, 0, 0.1), inset -4px -4px 8px rgba(255, 255, 255, 0.95); +$shadow-inset-lg: inset 8px 8px 16px rgba(0, 0, 0, 0.12), inset -8px -8px 16px rgba(255, 255, 255, 1); + +// Dark Mode Shadows +$shadow-dark-soft-sm: 4px 4px 8px rgba(0, 0, 0, 0.3), -4px -4px 8px rgba(255, 255, 255, 0.02); +$shadow-dark-soft-md: 8px 8px 16px rgba(0, 0, 0, 0.4), -8px -8px 16px rgba(255, 255, 255, 0.03); +$shadow-dark-soft-lg: 15px 15px 30px rgba(0, 0, 0, 0.5), -15px -15px 30px rgba(255, 255, 255, 0.04); +$shadow-dark-inset-md: inset 4px 4px 8px rgba(0, 0, 0, 0.4), inset -4px -4px 8px rgba(255, 255, 255, 0.03); + +// ============================================ +// 3. Typography System +// ============================================ + +$font-heading: 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; +$font-body: 'Inter', 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; +$font-mono: 'JetBrains Mono', 'Monaco', 'Courier New', monospace; + +// Type Scale (Major Third - 1.25) +$text-xs: 0.75rem; // 12px +$text-sm: 0.875rem; // 14px +$text-base: 1rem; // 16px +$text-lg: 1.25rem; // 20px +$text-xl: 1.563rem; // 25px +$text-2xl: 1.953rem; // 31px +$text-3xl: 2.441rem; // 39px +$text-4xl: 3.052rem; // 49px + +// Font Weights +$font-light: 300; +$font-regular: 400; +$font-medium: 500; +$font-semibold: 600; +$font-bold: 700; + +// Line Heights +$leading-tight: 1.25; +$leading-normal: 1.5; +$leading-relaxed: 1.75; + +// ============================================ +// 4. Spacing System +// ============================================ + +$space-0: 0; +$space-1: 0.25rem; // 4px +$space-2: 0.5rem; // 8px +$space-3: 0.75rem; // 12px +$space-4: 1rem; // 16px +$space-5: 1.25rem; // 20px +$space-6: 1.5rem; // 24px +$space-8: 2rem; // 32px +$space-10: 2.5rem; // 40px +$space-12: 3rem; // 48px +$space-16: 4rem; // 64px +$space-20: 5rem; // 80px +$space-24: 6rem; // 96px + +// ============================================ +// 5. Border Radius +// ============================================ + +$radius-sm: 0.375rem; // 6px +$radius-md: 0.5rem; // 8px +$radius-lg: 0.75rem; // 12px +$radius-xl: 1rem; // 16px +$radius-2xl: 1.5rem; // 24px +$radius-3xl: 2rem; // 32px +$radius-full: 9999px; // Full round + +// ============================================ +// 6. Transitions +// ============================================ + +$transition-fast: 150ms ease-in-out; +$transition-base: 250ms ease-in-out; +$transition-slow: 350ms ease-in-out; +$transition-slower: 500ms ease-in-out; + +// Easing Functions +$ease-in-out-soft: cubic-bezier(0.4, 0, 0.2, 1); +$ease-out-soft: cubic-bezier(0, 0, 0.2, 1); +$ease-in-soft: cubic-bezier(0.4, 0, 1, 1); + +// ============================================ +// 7. Breakpoints +// ============================================ + +$breakpoint-xs: 475px; +$breakpoint-sm: 640px; +$breakpoint-md: 768px; +$breakpoint-lg: 1024px; +$breakpoint-xl: 1280px; +$breakpoint-2xl: 1536px; + +// ============================================ +// 8. Z-Index Scale +// ============================================ + +$z-base: 0; +$z-dropdown: 1000; +$z-sticky: 1020; +$z-fixed: 1030; +$z-modal-backdrop: 1040; +$z-modal: 1050; +$z-popover: 1060; +$z-tooltip: 1070; +$z-notification: 1080; + +// ============================================ +// 9. Component-Specific Variables +// ============================================ + +// Buttons +$button-height-sm: 2rem; // 32px +$button-height-md: 2.5rem; // 40px +$button-height-lg: 3rem; // 48px +$button-padding-x: 1.5rem; // 24px +$button-border-width: 0; + +// Cards +$card-padding: 1.5rem; +$card-background: $neutral-100; +$card-border-radius: $radius-xl; + +// Inputs +$input-height: 2.75rem; // 44px +$input-padding-x: 1rem; // 16px +$input-border-width: 0; +$input-background: $neutral-100; +$input-border-radius: $radius-lg; + +// Sidebar +$sidebar-width: 280px; +$sidebar-width-collapsed: 80px; +$sidebar-background: $neutral-100; + +// ============================================ +// 10. Mixins +// ============================================ + +@mixin neumorphic($size: 'md', $type: 'raised', $dark: false) { + @if $dark { + @if $type == 'raised' { + @if $size == 'sm' { + box-shadow: $shadow-dark-soft-sm; + } @else if $size == 'md' { + box-shadow: $shadow-dark-soft-md; + } @else if $size == 'lg' { + box-shadow: $shadow-dark-soft-lg; + } + } @else if $type == 'pressed' { + box-shadow: $shadow-dark-inset-md; + } + } @else { + @if $type == 'raised' { + @if $size == 'sm' { + box-shadow: $shadow-soft-sm; + } @else if $size == 'md' { + box-shadow: $shadow-soft-md; + } @else if $size == 'lg' { + box-shadow: $shadow-soft-lg; + } @else if $size == 'xl' { + box-shadow: $shadow-soft-xl; + } + } @else if $type == 'pressed' { + @if $size == 'sm' { + box-shadow: $shadow-inset-sm; + } @else if $size == 'md' { + box-shadow: $shadow-inset-md; + } @else if $size == 'lg' { + box-shadow: $shadow-inset-lg; + } + } + } +} + +@mixin hover-lift($amount: 2px) { + transition: transform $transition-base, box-shadow $transition-base; + + &:hover:not(:disabled) { + transform: translateY(-$amount); + } +} + +@mixin focus-ring($color: $primary-500) { + &:focus-visible { + outline: none; + box-shadow: 0 0 0 3px rgba($color, 0.2); + } +} + +@mixin truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +@mixin responsive($breakpoint) { + @if $breakpoint == 'sm' { + @media (min-width: $breakpoint-sm) { @content; } + } @else if $breakpoint == 'md' { + @media (min-width: $breakpoint-md) { @content; } + } @else if $breakpoint == 'lg' { + @media (min-width: $breakpoint-lg) { @content; } + } @else if $breakpoint == 'xl' { + @media (min-width: $breakpoint-xl) { @content; } + } @else if $breakpoint == '2xl' { + @media (min-width: $breakpoint-2xl) { @content; } + } +} + +// ============================================ +// 11. Dark Mode Support +// ============================================ + +@mixin dark-mode { + @media (prefers-color-scheme: dark) { + @content; + } + + .dark & { + @content; + } +} + +// ============================================ +// 12. Utility Classes +// ============================================ + +.neumorphic-raised { + @include neumorphic('md', 'raised'); +} + +.neumorphic-pressed { + @include neumorphic('md', 'pressed'); +} + +.neumorphic-card { + background: $neutral-100; + border-radius: $radius-xl; + padding: $card-padding; + @include neumorphic('md', 'raised'); +} + +.neumorphic-button { + background: $neutral-100; + border-radius: $radius-lg; + padding: $space-3 $space-6; + @include neumorphic('sm', 'raised'); + transition: all $transition-base; + + &:hover { + @include neumorphic('md', 'raised'); + } + + &:active { + @include neumorphic('sm', 'pressed'); + } +} + +.text-gradient { + background: linear-gradient(135deg, $primary-600, $primary-800); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7507cdc..73bf2ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,24 +12,34 @@ "@fullcalendar/interaction": "^6.1.19", "@fullcalendar/list": "^6.1.19", "@fullcalendar/vue3": "^6.1.19", + "@headlessui/vue": "^1.7.23", + "@tailwindcss/forms": "^0.5.10", "@types/handlebars": "^4.0.40", "@types/jsonwebtoken": "^9.0.10", "@types/nodemailer": "^6.4.17", "@vite-pwa/nuxt": "^0.10.8", "@vueuse/core": "^13.8.0", "@vueuse/motion": "^3.0.3", + "autoprefixer": "^10.4.21", + "chart.js": "^4.5.0", "cookie": "^0.6.0", "formidable": "^3.5.4", + "framer-motion": "^12.23.12", + "gsap": "^3.13.0", "handlebars": "^4.7.8", "jsonwebtoken": "^9.0.2", "libphonenumber-js": "^1.12.10", + "lottie-web": "^5.13.0", "lucide-vue-next": "^0.542.0", "mime-types": "^3.0.1", "minio": "^8.0.5", "nodemailer": "^7.0.5", "nuxt": "^3.15.4", + "postcss": "^8.5.6", "sharp": "^0.34.3", + "tailwindcss": "^4.1.12", "vue": "latest", + "vue-chartjs": "^5.3.2", "vue-country-flag-next": "^2.3.2", "vue-router": "latest", "vuetify-nuxt-module": "^0.18.3" @@ -2176,6 +2186,21 @@ "vue": "^3.0.11" } }, + "node_modules/@headlessui/vue": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.23.tgz", + "integrity": "sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==", + "license": "MIT", + "dependencies": { + "@tanstack/vue-virtual": "^3.0.0-beta.60" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.3", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", @@ -2674,6 +2699,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", @@ -5374,6 +5405,44 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", + "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.12.tgz", + "integrity": "sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", @@ -6911,6 +6980,18 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chart.js": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz", + "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -8921,6 +9002,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz", + "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/framesync": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", @@ -9312,6 +9420,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, + "node_modules/gsap": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.13.0.tgz", + "integrity": "sha512-QL7MJ2WMjm1PHWsoFrAQH/J8wUeqZvMtHO58qdekHpCfhvhSL4gSiz6vJf5EeMP0LOn3ZCprL2ki/gjED8ghVw==", + "license": "Standard 'no charge' license: https://gsap.com/standard-license." + }, "node_modules/gzip-size": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", @@ -11528,6 +11642,12 @@ "node": ">= 12.0.0" } }, + "node_modules/lottie-web": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz", + "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==", + "license": "MIT" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -11726,6 +11846,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -11889,6 +12018,21 @@ "node": ">=18" } }, + "node_modules/motion-dom": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -15134,6 +15278,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tailwindcss": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", + "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", + "license": "MIT" + }, "node_modules/tapable": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", @@ -16493,6 +16643,16 @@ "ufo": "^1.6.1" } }, + "node_modules/vue-chartjs": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-5.3.2.tgz", + "integrity": "sha512-NrkbRRoYshbXbWqJkTN6InoDVwVb90C0R7eAVgMWcB9dPikbruaOoTFjFYHE/+tNPdIe6qdLCDjfjPHQ0fw4jw==", + "license": "MIT", + "peerDependencies": { + "chart.js": "^4.1.1", + "vue": "^3.0.0-0 || ^2.7.0" + } + }, "node_modules/vue-country-flag-next": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/vue-country-flag-next/-/vue-country-flag-next-2.3.2.tgz", diff --git a/package.json b/package.json index e70a805..2600348 100644 --- a/package.json +++ b/package.json @@ -15,24 +15,34 @@ "@fullcalendar/interaction": "^6.1.19", "@fullcalendar/list": "^6.1.19", "@fullcalendar/vue3": "^6.1.19", + "@headlessui/vue": "^1.7.23", + "@tailwindcss/forms": "^0.5.10", "@types/handlebars": "^4.0.40", "@types/jsonwebtoken": "^9.0.10", "@types/nodemailer": "^6.4.17", "@vite-pwa/nuxt": "^0.10.8", "@vueuse/core": "^13.8.0", "@vueuse/motion": "^3.0.3", + "autoprefixer": "^10.4.21", + "chart.js": "^4.5.0", "cookie": "^0.6.0", "formidable": "^3.5.4", + "framer-motion": "^12.23.12", + "gsap": "^3.13.0", "handlebars": "^4.7.8", "jsonwebtoken": "^9.0.2", "libphonenumber-js": "^1.12.10", + "lottie-web": "^5.13.0", "lucide-vue-next": "^0.542.0", "mime-types": "^3.0.1", "minio": "^8.0.5", "nodemailer": "^7.0.5", "nuxt": "^3.15.4", + "postcss": "^8.5.6", "sharp": "^0.34.3", + "tailwindcss": "^4.1.12", "vue": "latest", + "vue-chartjs": "^5.3.2", "vue-country-flag-next": "^2.3.2", "vue-router": "latest", "vuetify-nuxt-module": "^0.18.3"