@maz-ui/mcp 4.1.2 → 4.1.6-beta.0
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.
- package/dist/mcp.mjs +2 -2
- package/docs/generated-docs/maz-radio-buttons.doc.md +1 -0
- package/docs/src/components/maz-popover.md +1 -1
- package/docs/src/components/maz-select-country.md +1 -1
- package/docs/src/composables/use-display-names.md +3 -3
- package/docs/src/composables/use-form-validator.md +2 -4
- package/docs/src/composables/use-idle-timeout.md +1 -1
- package/docs/src/composables/use-swipe.md +1 -1
- package/docs/src/composables/use-timer.md +1 -1
- package/docs/src/directives/click-outside.md +1 -1
- package/docs/src/directives/lazy-img.md +1 -1
- package/docs/src/directives/tooltip.md +1 -1
- package/docs/src/directives/zoom-img.md +1 -1
- package/docs/src/guide/getting-started.md +1 -1
- package/docs/src/guide/icons.md +1 -1
- package/docs/src/guide/migration-v4.md +3 -3
- package/docs/src/guide/themes.md +387 -0
- package/docs/src/index.md +7 -7
- package/docs/src/theme-editor.md +21 -0
- package/package.json +7 -7
- package/docs/src/demo/DemoAuthPage.vue +0 -178
- package/docs/src/demo/DemoDashboardPage.vue +0 -298
- package/docs/src/demo/DemoProductPage.vue +0 -135
package/dist/mcp.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
|
7
7
|
import { resolve, dirname, join } from 'node:path';
|
|
8
8
|
import { fileURLToPath } from 'node:url';
|
|
9
9
|
|
|
10
|
-
const version = "4.1.
|
|
10
|
+
const version = "4.1.3";
|
|
11
11
|
|
|
12
12
|
const _dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
13
|
class DocumentationService {
|
|
@@ -404,7 +404,7 @@ class MazUiMcpServer {
|
|
|
404
404
|
},
|
|
405
405
|
{
|
|
406
406
|
name: "list_composables",
|
|
407
|
-
description: "List all Vue
|
|
407
|
+
description: "List all Vue or Nuxt composables (useToast, useDialog, etc.)",
|
|
408
408
|
inputSchema: {
|
|
409
409
|
type: "object",
|
|
410
410
|
properties: {}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
| **success** | Whether the input is successful. | `boolean` | No | `undefined` | - |
|
|
17
17
|
| **warning** | Whether there is a warning with the input. | `boolean` | No | `undefined` | - |
|
|
18
18
|
| **hint** | The hint text to display below the input. | `string` | No | `undefined` | - |
|
|
19
|
+
| **size** | The size of the radio buttons | `MazSize` | No | `'md'` | - |
|
|
19
20
|
|
|
20
21
|
## Events
|
|
21
22
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: MazPopover
|
|
3
|
-
description: MazPopover is a versatile Vue
|
|
3
|
+
description: MazPopover is a versatile Vue component for displaying content in overlays that bypass overflow constraints of parent elements
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: MazSelectCountry
|
|
3
|
-
description: MazSelectCountry is a versatile Vue
|
|
3
|
+
description: MazSelectCountry is a versatile Vue component for selecting countries or languages with built-in internationalization support and customizable display options
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: useDisplayNames
|
|
3
|
-
description: useDisplayNames is a Vue
|
|
3
|
+
description: useDisplayNames is a Vue composable specialized in displaying localized country names (regions) and language names. It supports various code formats including ISO 639-1 (language codes), ISO 3166-1 (country codes), and BCP 47 (language tags), using the Intl.DisplayNames API for internationalization.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -20,7 +20,7 @@ Depending on your environment (client or node server) and the browser you are us
|
|
|
20
20
|
## Key Features
|
|
21
21
|
|
|
22
22
|
- Displays localized country names (regions) and language names
|
|
23
|
-
- Supports multiple code formats: ISO 639-1 (language codes), ISO 3166-1 (country codes), and BCP 47 (language tags)
|
|
23
|
+
- Supports multiple code formats: ISO 639-1 (language codes), ISO 3166-1 (country codes), and BCP 47 (language tags)
|
|
24
24
|
- Works with any locale supported by the browser's Intl.DisplayNames API
|
|
25
25
|
- Provides functions to get individual names or bulk retrieve all available names
|
|
26
26
|
- Handles errors gracefully with fallback values
|
|
@@ -154,7 +154,7 @@ function getAllDisplayNames(options: {
|
|
|
154
154
|
|
|
155
155
|
## Notes
|
|
156
156
|
|
|
157
|
-
- The `useDisplayNames` composable is designed to be used with Vue
|
|
157
|
+
- The `useDisplayNames` composable is designed to be used with Vue.
|
|
158
158
|
- The composable functions return `ComputedRef` values, which are reactive and will update automatically when their dependencies change.
|
|
159
159
|
- Handle errors gracefully by providing fallback values when the display name cannot be fetched.
|
|
160
160
|
- The `Intl.DisplayNames` API is used internally to fetch and format the display names based on the provided locale and code.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: useFormValidator
|
|
3
|
-
description: useFormValidator and useFormField are two Vue
|
|
3
|
+
description: useFormValidator and useFormField are two Vue composables designed to simplify form validation using Valibot as the validation library. These composables offer a flexible and typed approach to handle form validation in your Vue applications.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
7
7
|
|
|
8
|
-
`useFormValidator` and `useFormField` are two Vue
|
|
8
|
+
`useFormValidator` and `useFormField` are two Vue composables designed to simplify form validation using [Valibot](https://valibot.dev/guides/introduction/) as the validation library. These composables offer a flexible and typed approach to handle form validation in your Vue applications.
|
|
9
9
|
|
|
10
10
|
## Introduction
|
|
11
11
|
|
|
@@ -690,7 +690,6 @@ You can use async functions in the validation schema.
|
|
|
690
690
|
minLength(3, 'Name must be at least 3 characters'),
|
|
691
691
|
checkAsync(
|
|
692
692
|
async (name) => {
|
|
693
|
-
console.log('name', name)
|
|
694
693
|
await sleep(2000)
|
|
695
694
|
return false
|
|
696
695
|
},
|
|
@@ -1111,7 +1110,6 @@ interface FormFieldOptions<T> {
|
|
|
1111
1110
|
minLength(3, 'Name must be at least 3 characters'),
|
|
1112
1111
|
checkAsync(
|
|
1113
1112
|
async (name) => {
|
|
1114
|
-
console.log('name', name)
|
|
1115
1113
|
await sleep(2000)
|
|
1116
1114
|
return false
|
|
1117
1115
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: useIdleTimeout
|
|
3
|
-
description: A Vue
|
|
3
|
+
description: A Vue composable that provides an easy way to track user inactivity on your website and execute a callback function when the user becomes idle.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: useSwipe
|
|
3
|
-
description: useSwipe is a Vue
|
|
3
|
+
description: useSwipe is a Vue composable that simplifies the management of "swipe" interactions on HTML elements.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -19,7 +19,7 @@ The composable provides the following functionality:
|
|
|
19
19
|
|
|
20
20
|
The composable also includes cleanup logic using onBeforeUnmount to ensure that the timer is stopped when the component is unmounted.
|
|
21
21
|
|
|
22
|
-
This composable can be used in Vue
|
|
22
|
+
This composable can be used in Vue components to handle timeouts in a flexible and reactive manner.
|
|
23
23
|
|
|
24
24
|
## Usage
|
|
25
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: vClickOutside
|
|
3
|
-
description: vClickOutside is a Vue
|
|
3
|
+
description: vClickOutside is a Vue directive to trigger a function when the user clicks outside an element
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: vLazyImg
|
|
3
|
-
description: vLazyImg is a Vue
|
|
3
|
+
description: vLazyImg is a Vue directive to lazy load images with many options. The image will be loaded on user's scroll
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: vZoomImg
|
|
3
|
-
description: vZoomImg is a Vue
|
|
3
|
+
description: vZoomImg is a Vue directive to enlarge an image like a modal on click, if you have several images, you can pass them like a carousel
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# {{ $frontmatter.title }}
|
|
@@ -4,7 +4,7 @@ description: Build Vue and Nuxt applications faster with Maz-UI v4 - The modern,
|
|
|
4
4
|
head:
|
|
5
5
|
- - meta
|
|
6
6
|
- name: keywords
|
|
7
|
-
content: vue ui library, vue components, nuxt ui, maz-ui installation, vue
|
|
7
|
+
content: vue ui library, vue components, nuxt ui, maz-ui installation, components, nuxt, vue, themes, translations, icons, mcp, maz-ui
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# {{ $frontmatter.title }}
|
package/docs/src/guide/icons.md
CHANGED
|
@@ -73,7 +73,7 @@ import { MazCheck, MazHeart, MazUser } from '@maz-ui/icons'
|
|
|
73
73
|
|
|
74
74
|
- ✅ Tree-shaking - Only bundled icons are included
|
|
75
75
|
- ✅ TypeScript support with full IntelliSense
|
|
76
|
-
- ✅ Vue
|
|
76
|
+
- ✅ Vue optimized with `defineAsyncComponent`
|
|
77
77
|
- ✅ Easy to style with CSS classes
|
|
78
78
|
|
|
79
79
|
### Method 2: Auto-import with Resolver
|
|
@@ -70,7 +70,7 @@ v4.0.0 separates functionality into specialized packages for better modularity:
|
|
|
70
70
|
| **@maz-ui/utils** | JavaScript/TypeScript utilities | New |
|
|
71
71
|
| **@maz-ui/icons** | SVG icons and flags (840+ icons) | New |
|
|
72
72
|
| **@maz-ui/cli** | CLI for theme generation | Renamed |
|
|
73
|
-
| **@maz-ui/nuxt** | Nuxt
|
|
73
|
+
| **@maz-ui/nuxt** | Nuxt module | New |
|
|
74
74
|
| **@maz-ui/mcp** | MCP server for IA agent | New |
|
|
75
75
|
|
|
76
76
|
## Migration Checklist
|
|
@@ -903,8 +903,8 @@ app.use(MazUi)
|
|
|
903
903
|
- **[Official v4 Documentation](https://maz-ui.com)** - Complete documentation
|
|
904
904
|
- **[Theme Guide](/guide/themes)** - Advanced theme system
|
|
905
905
|
- **[Translation Guide](/guide/translations)** - Internationalization
|
|
906
|
-
- **[Vue Installation Guide](/guide/vue)** - Vue
|
|
907
|
-
- **[Nuxt Installation Guide](/guide/nuxt)** - Nuxt
|
|
906
|
+
- **[Vue Installation Guide](/guide/vue)** - Vue setup
|
|
907
|
+
- **[Nuxt Installation Guide](/guide/nuxt)** - Nuxt setup
|
|
908
908
|
- **[Resolvers Guide](/guide/resolvers)** - Smart auto-imports
|
|
909
909
|
- **[Complete Changelog](https://github.com/LouisMazel/maz-ui/blob/master/CHANGELOG.md)** - All changes
|
|
910
910
|
|
package/docs/src/guide/themes.md
CHANGED
|
@@ -19,6 +19,10 @@ description: Modern and performant theme system for Maz-UI with TypeScript, HSL
|
|
|
19
19
|
- **Zero FOUC** - Critical CSS injected inline to avoid flashes
|
|
20
20
|
- **Flexible Presets** - Ready-to-use and customizable configurations
|
|
21
21
|
|
|
22
|
+
## Theme Editor
|
|
23
|
+
|
|
24
|
+
Create your own theme with the [Theme Editor](./../theme-editor.md).
|
|
25
|
+
|
|
22
26
|
## Quick Usage
|
|
23
27
|
|
|
24
28
|
### 1. Plugin Configuration with `MazUi` plugin
|
|
@@ -779,6 +783,389 @@ The system automatically generates all necessary variables:
|
|
|
779
783
|
}
|
|
780
784
|
```
|
|
781
785
|
|
|
786
|
+
::: details View all generated CSS variables (with maz-ui preset)
|
|
787
|
+
|
|
788
|
+
```css
|
|
789
|
+
@layer maz-ui-theme {
|
|
790
|
+
:root {
|
|
791
|
+
--maz-background: 0 0% 100%;
|
|
792
|
+
--maz-foreground: 210 8% 14%;
|
|
793
|
+
--maz-primary: 210 100% 56%;
|
|
794
|
+
--maz-primary-foreground: 0 0% 100%;
|
|
795
|
+
--maz-secondary: 272 99% 54%;
|
|
796
|
+
--maz-secondary-foreground: 0 0% 100%;
|
|
797
|
+
--maz-accent: 164 76% 46%;
|
|
798
|
+
--maz-accent-foreground: 0 0% 100%;
|
|
799
|
+
--maz-destructive: 356.95 95.91% 57.73%;
|
|
800
|
+
--maz-destructive-foreground: 0 0% 100%;
|
|
801
|
+
--maz-success: 80 61% 50%;
|
|
802
|
+
--maz-success-foreground: 210 8% 14%;
|
|
803
|
+
--maz-warning: 40 97% 59%;
|
|
804
|
+
--maz-warning-foreground: 210 8% 14%;
|
|
805
|
+
--maz-info: 188 78% 41%;
|
|
806
|
+
--maz-info-foreground: 0 0% 100%;
|
|
807
|
+
--maz-contrast: 235 16% 15%;
|
|
808
|
+
--maz-contrast-foreground: 255 0% 95%;
|
|
809
|
+
--maz-muted: 0 0% 54%;
|
|
810
|
+
--maz-shadow: 240 5.9% 10%;
|
|
811
|
+
--maz-border: 220 13.04% 90.98%;
|
|
812
|
+
--maz-radius: 0.7rem;
|
|
813
|
+
--maz-font-family: Manrope, sans-serif, system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, oxygen, ubuntu, cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
|
814
|
+
--maz-base-font-size: 14px;
|
|
815
|
+
--maz-border-width: 0.0625rem;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.dark {
|
|
819
|
+
--maz-background: 235 16% 15%;
|
|
820
|
+
--maz-foreground: 0 0% 85%;
|
|
821
|
+
--maz-primary: 210 100% 56%;
|
|
822
|
+
--maz-primary-foreground: 0 0% 100%;
|
|
823
|
+
--maz-secondary: 272 99% 54%;
|
|
824
|
+
--maz-secondary-foreground: 0 0% 100%;
|
|
825
|
+
--maz-accent: 164 76% 46%;
|
|
826
|
+
--maz-accent-foreground: 0 0% 100%;
|
|
827
|
+
--maz-destructive: 1 100% 71%;
|
|
828
|
+
--maz-destructive-foreground: 0 0% 100%;
|
|
829
|
+
--maz-success: 80 61% 50%;
|
|
830
|
+
--maz-success-foreground: 210 8% 14%;
|
|
831
|
+
--maz-warning: 40 97% 59%;
|
|
832
|
+
--maz-warning-foreground: 210 8% 14%;
|
|
833
|
+
--maz-info: 188 78% 41%;
|
|
834
|
+
--maz-info-foreground: 0 0% 100%;
|
|
835
|
+
--maz-contrast: 0 0% 100%;
|
|
836
|
+
--maz-contrast-foreground: 210 8% 14%;
|
|
837
|
+
--maz-muted: 255 0% 54%;
|
|
838
|
+
--maz-shadow: 240 3.7% 15.9%;
|
|
839
|
+
--maz-border: 238 17% 25%;
|
|
840
|
+
--maz-radius: 0.7rem;
|
|
841
|
+
--maz-font-family: Manrope, sans-serif, system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, oxygen, ubuntu, cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
|
842
|
+
--maz-base-font-size: 14px;
|
|
843
|
+
--maz-border-width: 0.0625rem;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
@layer maz-ui-theme {
|
|
848
|
+
|
|
849
|
+
:root {
|
|
850
|
+
--maz-overlay: 0 0% 40%;
|
|
851
|
+
--maz-primary-50: 210 77.5% 93.5%;
|
|
852
|
+
--maz-primary-100: 210 80% 86%;
|
|
853
|
+
--maz-primary-200: 210 85% 78.5%;
|
|
854
|
+
--maz-primary-300: 210 90% 71%;
|
|
855
|
+
--maz-primary-400: 210 95% 63.5%;
|
|
856
|
+
--maz-primary-500: 210 100% 56%;
|
|
857
|
+
--maz-primary-600: 210 100% 48.5%;
|
|
858
|
+
--maz-primary-700: 210 100% 41%;
|
|
859
|
+
--maz-primary-800: 210 100% 33.5%;
|
|
860
|
+
--maz-primary-900: 210 100% 26%;
|
|
861
|
+
--maz-primary-950: 210 100% 18.5%;
|
|
862
|
+
--maz-secondary-50: 272 76.9% 91.5%;
|
|
863
|
+
--maz-secondary-100: 272 79.4% 84%;
|
|
864
|
+
--maz-secondary-200: 272 84.3% 76.5%;
|
|
865
|
+
--maz-secondary-300: 272 89.2% 69%;
|
|
866
|
+
--maz-secondary-400: 272 94.1% 61.5%;
|
|
867
|
+
--maz-secondary-500: 272 99% 54%;
|
|
868
|
+
--maz-secondary-600: 272 100% 46.5%;
|
|
869
|
+
--maz-secondary-700: 272 100% 39%;
|
|
870
|
+
--maz-secondary-800: 272 100% 31.5%;
|
|
871
|
+
--maz-secondary-900: 272 100% 24%;
|
|
872
|
+
--maz-secondary-950: 272 100% 16.5%;
|
|
873
|
+
--maz-accent-50: 164 63% 83.5%;
|
|
874
|
+
--maz-accent-100: 164 64.4% 76%;
|
|
875
|
+
--maz-accent-200: 164 67.3% 68.5%;
|
|
876
|
+
--maz-accent-300: 164 70.2% 61%;
|
|
877
|
+
--maz-accent-400: 164 73.1% 53.5%;
|
|
878
|
+
--maz-accent-500: 164 76% 46%;
|
|
879
|
+
--maz-accent-600: 164 78.2% 38.5%;
|
|
880
|
+
--maz-accent-700: 164 80.3% 31%;
|
|
881
|
+
--maz-accent-800: 164 82.5% 23.5%;
|
|
882
|
+
--maz-accent-900: 164 84.7% 16%;
|
|
883
|
+
--maz-accent-950: 164 85.7% 8.5%;
|
|
884
|
+
--maz-destructive-50: 357 75.2% 95.2%;
|
|
885
|
+
--maz-destructive-100: 357 77.5% 87.7%;
|
|
886
|
+
--maz-destructive-200: 357 82.1% 80.2%;
|
|
887
|
+
--maz-destructive-300: 357 86.7% 72.7%;
|
|
888
|
+
--maz-destructive-400: 357 91.3% 65.2%;
|
|
889
|
+
--maz-destructive-500: 357 95.9% 57.7%;
|
|
890
|
+
--maz-destructive-600: 357 99.4% 50.2%;
|
|
891
|
+
--maz-destructive-700: 357 100% 42.7%;
|
|
892
|
+
--maz-destructive-800: 357 100% 35.2%;
|
|
893
|
+
--maz-destructive-900: 357 100% 27.7%;
|
|
894
|
+
--maz-destructive-950: 357 100% 20.2%;
|
|
895
|
+
--maz-success-50: 80 52.6% 87.5%;
|
|
896
|
+
--maz-success-100: 80 53.6% 80%;
|
|
897
|
+
--maz-success-200: 80 55.4% 72.5%;
|
|
898
|
+
--maz-success-300: 80 57.3% 65%;
|
|
899
|
+
--maz-success-400: 80 59.1% 57.5%;
|
|
900
|
+
--maz-success-500: 80 61% 50%;
|
|
901
|
+
--maz-success-600: 80 62.4% 42.5%;
|
|
902
|
+
--maz-success-700: 80 63.8% 35%;
|
|
903
|
+
--maz-success-800: 80 65.2% 27.5%;
|
|
904
|
+
--maz-success-900: 80 66.6% 20%;
|
|
905
|
+
--maz-success-950: 80 67.3% 12.5%;
|
|
906
|
+
--maz-warning-50: 40 75.8% 96.5%;
|
|
907
|
+
--maz-warning-100: 40 78.2% 89%;
|
|
908
|
+
--maz-warning-200: 40 82.9% 81.5%;
|
|
909
|
+
--maz-warning-300: 40 87.6% 74%;
|
|
910
|
+
--maz-warning-400: 40 92.3% 66.5%;
|
|
911
|
+
--maz-warning-500: 40 97% 59%;
|
|
912
|
+
--maz-warning-600: 40 100% 51.5%;
|
|
913
|
+
--maz-warning-700: 40 100% 44%;
|
|
914
|
+
--maz-warning-800: 40 100% 36.5%;
|
|
915
|
+
--maz-warning-900: 40 100% 29%;
|
|
916
|
+
--maz-warning-950: 40 100% 21.5%;
|
|
917
|
+
--maz-info-50: 188 64.3% 78.5%;
|
|
918
|
+
--maz-info-100: 188 65.8% 71%;
|
|
919
|
+
--maz-info-200: 188 68.9% 63.5%;
|
|
920
|
+
--maz-info-300: 188 71.9% 56%;
|
|
921
|
+
--maz-info-400: 188 75% 48.5%;
|
|
922
|
+
--maz-info-500: 188 78% 41%;
|
|
923
|
+
--maz-info-600: 188 80.3% 33.5%;
|
|
924
|
+
--maz-info-700: 188 82.6% 26%;
|
|
925
|
+
--maz-info-800: 188 84.8% 18.5%;
|
|
926
|
+
--maz-info-900: 188 87.1% 11%;
|
|
927
|
+
--maz-info-950: 188 88.3% 3.5%;
|
|
928
|
+
--maz-contrast-50: 235 15.4% 52.5%;
|
|
929
|
+
--maz-contrast-100: 235 15.5% 45%;
|
|
930
|
+
--maz-contrast-200: 235 15.6% 37.5%;
|
|
931
|
+
--maz-contrast-300: 235 15.7% 30%;
|
|
932
|
+
--maz-contrast-400: 235 15.9% 22.5%;
|
|
933
|
+
--maz-contrast-500: 235 16% 15%;
|
|
934
|
+
--maz-contrast-600: 235 16.1% 7.5%;
|
|
935
|
+
--maz-contrast-700: 235 16.2% 0%;
|
|
936
|
+
--maz-contrast-800: 235 16.3% 0%;
|
|
937
|
+
--maz-contrast-900: 235 16.4% 0%;
|
|
938
|
+
--maz-contrast-950: 235 16.4% 0%;
|
|
939
|
+
--maz-background-50: 0 5% 100%;
|
|
940
|
+
--maz-background-100: 0 5% 100%;
|
|
941
|
+
--maz-background-200: 0 5% 100%;
|
|
942
|
+
--maz-background-300: 0 5% 100%;
|
|
943
|
+
--maz-background-400: 0 5% 100%;
|
|
944
|
+
--maz-background-500: 0 0% 100%;
|
|
945
|
+
--maz-background-600: 0 5% 92.5%;
|
|
946
|
+
--maz-background-700: 0 5% 85%;
|
|
947
|
+
--maz-background-800: 0 5% 77.5%;
|
|
948
|
+
--maz-background-900: 0 5% 70%;
|
|
949
|
+
--maz-background-950: 0 5% 62.5%;
|
|
950
|
+
--maz-foreground-50: 210 7.9% 51.5%;
|
|
951
|
+
--maz-foreground-100: 210 7.9% 44%;
|
|
952
|
+
--maz-foreground-200: 210 7.9% 36.5%;
|
|
953
|
+
--maz-foreground-300: 210 7.9% 29%;
|
|
954
|
+
--maz-foreground-400: 210 8% 21.5%;
|
|
955
|
+
--maz-foreground-500: 210 8% 14%;
|
|
956
|
+
--maz-foreground-600: 210 8% 6.5%;
|
|
957
|
+
--maz-foreground-700: 210 8% 0%;
|
|
958
|
+
--maz-foreground-800: 210 8.1% 0%;
|
|
959
|
+
--maz-foreground-900: 210 8.1% 0%;
|
|
960
|
+
--maz-foreground-950: 210 8.1% 0%;
|
|
961
|
+
--maz-border-50: 220 12.7% 100%;
|
|
962
|
+
--maz-border-100: 220 12.7% 100%;
|
|
963
|
+
--maz-border-200: 220 12.8% 100%;
|
|
964
|
+
--maz-border-300: 220 12.9% 100%;
|
|
965
|
+
--maz-border-400: 220 13% 98.5%;
|
|
966
|
+
--maz-border-500: 220 13% 91%;
|
|
967
|
+
--maz-border-600: 220 13.1% 83.5%;
|
|
968
|
+
--maz-border-700: 220 13.2% 76%;
|
|
969
|
+
--maz-border-800: 220 13.2% 68.5%;
|
|
970
|
+
--maz-border-900: 220 13.3% 61%;
|
|
971
|
+
--maz-border-950: 220 13.3% 53.5%;
|
|
972
|
+
--maz-muted-50: 0 5% 91.5%;
|
|
973
|
+
--maz-muted-100: 0 5% 84%;
|
|
974
|
+
--maz-muted-200: 0 5% 76.5%;
|
|
975
|
+
--maz-muted-300: 0 5% 69%;
|
|
976
|
+
--maz-muted-400: 0 5% 61.5%;
|
|
977
|
+
--maz-muted-500: 0 0% 54%;
|
|
978
|
+
--maz-muted-600: 0 5% 46.5%;
|
|
979
|
+
--maz-muted-700: 0 5% 39%;
|
|
980
|
+
--maz-muted-800: 0 5% 31.5%;
|
|
981
|
+
--maz-muted-900: 0 5% 24%;
|
|
982
|
+
--maz-muted-950: 0 5% 16.5%;
|
|
983
|
+
--maz-overlay-50: 0 5% 77.5%;
|
|
984
|
+
--maz-overlay-100: 0 5% 70%;
|
|
985
|
+
--maz-overlay-200: 0 5% 62.5%;
|
|
986
|
+
--maz-overlay-300: 0 5% 55%;
|
|
987
|
+
--maz-overlay-400: 0 5% 47.5%;
|
|
988
|
+
--maz-overlay-500: 0 0% 40%;
|
|
989
|
+
--maz-overlay-600: 0 5% 32.5%;
|
|
990
|
+
--maz-overlay-700: 0 5% 25%;
|
|
991
|
+
--maz-overlay-800: 0 5% 17.5%;
|
|
992
|
+
--maz-overlay-900: 0 5% 10%;
|
|
993
|
+
--maz-overlay-950: 0 5% 2.5%;
|
|
994
|
+
--maz-shadow-50: 240 5.8% 47.5%;
|
|
995
|
+
--maz-shadow-100: 240 5.8% 40%;
|
|
996
|
+
--maz-shadow-200: 240 5.8% 32.5%;
|
|
997
|
+
--maz-shadow-300: 240 5.9% 25%;
|
|
998
|
+
--maz-shadow-400: 240 5.9% 17.5%;
|
|
999
|
+
--maz-shadow-500: 240 5.9% 10%;
|
|
1000
|
+
--maz-shadow-600: 240 5.9% 2.5%;
|
|
1001
|
+
--maz-shadow-700: 240 5.9% 0%;
|
|
1002
|
+
--maz-shadow-800: 240 5.9% 0%;
|
|
1003
|
+
--maz-shadow-900: 240 6% 0%;
|
|
1004
|
+
--maz-shadow-950: 240 6% 0%;
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
.dark {
|
|
1008
|
+
--maz-overlay: 0 0% 15%;
|
|
1009
|
+
--maz-primary-50: 210 77.5% 93.5%;
|
|
1010
|
+
--maz-primary-100: 210 80% 86%;
|
|
1011
|
+
--maz-primary-200: 210 85% 78.5%;
|
|
1012
|
+
--maz-primary-300: 210 90% 71%;
|
|
1013
|
+
--maz-primary-400: 210 95% 63.5%;
|
|
1014
|
+
--maz-primary-500: 210 100% 56%;
|
|
1015
|
+
--maz-primary-600: 210 100% 48.5%;
|
|
1016
|
+
--maz-primary-700: 210 100% 41%;
|
|
1017
|
+
--maz-primary-800: 210 100% 33.5%;
|
|
1018
|
+
--maz-primary-900: 210 100% 26%;
|
|
1019
|
+
--maz-primary-950: 210 100% 18.5%;
|
|
1020
|
+
--maz-secondary-50: 272 76.9% 91.5%;
|
|
1021
|
+
--maz-secondary-100: 272 79.4% 84%;
|
|
1022
|
+
--maz-secondary-200: 272 84.3% 76.5%;
|
|
1023
|
+
--maz-secondary-300: 272 89.2% 69%;
|
|
1024
|
+
--maz-secondary-400: 272 94.1% 61.5%;
|
|
1025
|
+
--maz-secondary-500: 272 99% 54%;
|
|
1026
|
+
--maz-secondary-600: 272 100% 46.5%;
|
|
1027
|
+
--maz-secondary-700: 272 100% 39%;
|
|
1028
|
+
--maz-secondary-800: 272 100% 31.5%;
|
|
1029
|
+
--maz-secondary-900: 272 100% 24%;
|
|
1030
|
+
--maz-secondary-950: 272 100% 16.5%;
|
|
1031
|
+
--maz-accent-50: 164 63% 83.5%;
|
|
1032
|
+
--maz-accent-100: 164 64.4% 76%;
|
|
1033
|
+
--maz-accent-200: 164 67.3% 68.5%;
|
|
1034
|
+
--maz-accent-300: 164 70.2% 61%;
|
|
1035
|
+
--maz-accent-400: 164 73.1% 53.5%;
|
|
1036
|
+
--maz-accent-500: 164 76% 46%;
|
|
1037
|
+
--maz-accent-600: 164 78.2% 38.5%;
|
|
1038
|
+
--maz-accent-700: 164 80.3% 31%;
|
|
1039
|
+
--maz-accent-800: 164 82.5% 23.5%;
|
|
1040
|
+
--maz-accent-900: 164 84.7% 16%;
|
|
1041
|
+
--maz-accent-950: 164 85.7% 8.5%;
|
|
1042
|
+
--maz-destructive-50: 1 77.5% 100%;
|
|
1043
|
+
--maz-destructive-100: 1 80% 100%;
|
|
1044
|
+
--maz-destructive-200: 1 85% 93.5%;
|
|
1045
|
+
--maz-destructive-300: 1 90% 86%;
|
|
1046
|
+
--maz-destructive-400: 1 95% 78.5%;
|
|
1047
|
+
--maz-destructive-500: 1 100% 71%;
|
|
1048
|
+
--maz-destructive-600: 1 100% 63.5%;
|
|
1049
|
+
--maz-destructive-700: 1 100% 56%;
|
|
1050
|
+
--maz-destructive-800: 1 100% 48.5%;
|
|
1051
|
+
--maz-destructive-900: 1 100% 41%;
|
|
1052
|
+
--maz-destructive-950: 1 100% 33.5%;
|
|
1053
|
+
--maz-success-50: 80 52.6% 87.5%;
|
|
1054
|
+
--maz-success-100: 80 53.6% 80%;
|
|
1055
|
+
--maz-success-200: 80 55.4% 72.5%;
|
|
1056
|
+
--maz-success-300: 80 57.3% 65%;
|
|
1057
|
+
--maz-success-400: 80 59.1% 57.5%;
|
|
1058
|
+
--maz-success-500: 80 61% 50%;
|
|
1059
|
+
--maz-success-600: 80 62.4% 42.5%;
|
|
1060
|
+
--maz-success-700: 80 63.8% 35%;
|
|
1061
|
+
--maz-success-800: 80 65.2% 27.5%;
|
|
1062
|
+
--maz-success-900: 80 66.6% 20%;
|
|
1063
|
+
--maz-success-950: 80 67.3% 12.5%;
|
|
1064
|
+
--maz-warning-50: 40 75.8% 96.5%;
|
|
1065
|
+
--maz-warning-100: 40 78.2% 89%;
|
|
1066
|
+
--maz-warning-200: 40 82.9% 81.5%;
|
|
1067
|
+
--maz-warning-300: 40 87.6% 74%;
|
|
1068
|
+
--maz-warning-400: 40 92.3% 66.5%;
|
|
1069
|
+
--maz-warning-500: 40 97% 59%;
|
|
1070
|
+
--maz-warning-600: 40 100% 51.5%;
|
|
1071
|
+
--maz-warning-700: 40 100% 44%;
|
|
1072
|
+
--maz-warning-800: 40 100% 36.5%;
|
|
1073
|
+
--maz-warning-900: 40 100% 29%;
|
|
1074
|
+
--maz-warning-950: 40 100% 21.5%;
|
|
1075
|
+
--maz-info-50: 188 64.3% 78.5%;
|
|
1076
|
+
--maz-info-100: 188 65.8% 71%;
|
|
1077
|
+
--maz-info-200: 188 68.9% 63.5%;
|
|
1078
|
+
--maz-info-300: 188 71.9% 56%;
|
|
1079
|
+
--maz-info-400: 188 75% 48.5%;
|
|
1080
|
+
--maz-info-500: 188 78% 41%;
|
|
1081
|
+
--maz-info-600: 188 80.3% 33.5%;
|
|
1082
|
+
--maz-info-700: 188 82.6% 26%;
|
|
1083
|
+
--maz-info-800: 188 84.8% 18.5%;
|
|
1084
|
+
--maz-info-900: 188 87.1% 11%;
|
|
1085
|
+
--maz-info-950: 188 88.3% 3.5%;
|
|
1086
|
+
--maz-contrast-50: 0 5% 100%;
|
|
1087
|
+
--maz-contrast-100: 0 5% 100%;
|
|
1088
|
+
--maz-contrast-200: 0 5% 100%;
|
|
1089
|
+
--maz-contrast-300: 0 5% 100%;
|
|
1090
|
+
--maz-contrast-400: 0 5% 100%;
|
|
1091
|
+
--maz-contrast-500: 0 0% 100%;
|
|
1092
|
+
--maz-contrast-600: 0 5% 92.5%;
|
|
1093
|
+
--maz-contrast-700: 0 5% 85%;
|
|
1094
|
+
--maz-contrast-800: 0 5% 77.5%;
|
|
1095
|
+
--maz-contrast-900: 0 5% 70%;
|
|
1096
|
+
--maz-contrast-950: 0 5% 62.5%;
|
|
1097
|
+
--maz-background-50: 235 15.4% 52.5%;
|
|
1098
|
+
--maz-background-100: 235 15.5% 45%;
|
|
1099
|
+
--maz-background-200: 235 15.6% 37.5%;
|
|
1100
|
+
--maz-background-300: 235 15.7% 30%;
|
|
1101
|
+
--maz-background-400: 235 15.9% 22.5%;
|
|
1102
|
+
--maz-background-500: 235 16% 15%;
|
|
1103
|
+
--maz-background-600: 235 16.1% 7.5%;
|
|
1104
|
+
--maz-background-700: 235 16.2% 0%;
|
|
1105
|
+
--maz-background-800: 235 16.3% 0%;
|
|
1106
|
+
--maz-background-900: 235 16.4% 0%;
|
|
1107
|
+
--maz-background-950: 235 16.4% 0%;
|
|
1108
|
+
--maz-foreground-50: 0 5% 100%;
|
|
1109
|
+
--maz-foreground-100: 0 5% 100%;
|
|
1110
|
+
--maz-foreground-200: 0 5% 100%;
|
|
1111
|
+
--maz-foreground-300: 0 5% 100%;
|
|
1112
|
+
--maz-foreground-400: 0 5% 92.5%;
|
|
1113
|
+
--maz-foreground-500: 0 0% 85%;
|
|
1114
|
+
--maz-foreground-600: 0 5% 77.5%;
|
|
1115
|
+
--maz-foreground-700: 0 5% 70%;
|
|
1116
|
+
--maz-foreground-800: 0 5% 62.5%;
|
|
1117
|
+
--maz-foreground-900: 0 5% 55%;
|
|
1118
|
+
--maz-foreground-950: 0 5% 47.5%;
|
|
1119
|
+
--maz-border-50: 238 16.3% 62.5%;
|
|
1120
|
+
--maz-border-100: 238 16.4% 55%;
|
|
1121
|
+
--maz-border-200: 238 16.6% 47.5%;
|
|
1122
|
+
--maz-border-300: 238 16.7% 40%;
|
|
1123
|
+
--maz-border-400: 238 16.9% 32.5%;
|
|
1124
|
+
--maz-border-500: 238 17% 25%;
|
|
1125
|
+
--maz-border-600: 238 17.1% 17.5%;
|
|
1126
|
+
--maz-border-700: 238 17.2% 10%;
|
|
1127
|
+
--maz-border-800: 238 17.3% 2.5%;
|
|
1128
|
+
--maz-border-900: 238 17.4% 0%;
|
|
1129
|
+
--maz-border-950: 238 17.5% 0%;
|
|
1130
|
+
--maz-muted-50: 255 5% 91.5%;
|
|
1131
|
+
--maz-muted-100: 255 5% 84%;
|
|
1132
|
+
--maz-muted-200: 255 5% 76.5%;
|
|
1133
|
+
--maz-muted-300: 255 5% 69%;
|
|
1134
|
+
--maz-muted-400: 255 5% 61.5%;
|
|
1135
|
+
--maz-muted-500: 255 0% 54%;
|
|
1136
|
+
--maz-muted-600: 255 5% 46.5%;
|
|
1137
|
+
--maz-muted-700: 255 5% 39%;
|
|
1138
|
+
--maz-muted-800: 255 5% 31.5%;
|
|
1139
|
+
--maz-muted-900: 255 5% 24%;
|
|
1140
|
+
--maz-muted-950: 255 5% 16.5%;
|
|
1141
|
+
--maz-overlay-50: 0 5% 52.5%;
|
|
1142
|
+
--maz-overlay-100: 0 5% 45%;
|
|
1143
|
+
--maz-overlay-200: 0 5% 37.5%;
|
|
1144
|
+
--maz-overlay-300: 0 5% 30%;
|
|
1145
|
+
--maz-overlay-400: 0 5% 22.5%;
|
|
1146
|
+
--maz-overlay-500: 0 0% 15%;
|
|
1147
|
+
--maz-overlay-600: 0 5% 7.5%;
|
|
1148
|
+
--maz-overlay-700: 0 5% 0%;
|
|
1149
|
+
--maz-overlay-800: 0 5% 0%;
|
|
1150
|
+
--maz-overlay-900: 0 5% 0%;
|
|
1151
|
+
--maz-overlay-950: 0 5% 0%;
|
|
1152
|
+
--maz-shadow-50: 240 5% 53.4%;
|
|
1153
|
+
--maz-shadow-100: 240 5% 45.9%;
|
|
1154
|
+
--maz-shadow-200: 240 5% 38.4%;
|
|
1155
|
+
--maz-shadow-300: 240 5% 30.9%;
|
|
1156
|
+
--maz-shadow-400: 240 5% 23.4%;
|
|
1157
|
+
--maz-shadow-500: 240 3.7% 15.9%;
|
|
1158
|
+
--maz-shadow-600: 240 5% 8.4%;
|
|
1159
|
+
--maz-shadow-700: 240 5% 0.9%;
|
|
1160
|
+
--maz-shadow-800: 240 5% 0%;
|
|
1161
|
+
--maz-shadow-900: 240 5% 0%;
|
|
1162
|
+
--maz-shadow-950: 240 5% 0%;
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1165
|
+
```
|
|
1166
|
+
|
|
1167
|
+
:::
|
|
1168
|
+
|
|
782
1169
|
## Usage with Nuxt
|
|
783
1170
|
|
|
784
1171
|
For Nuxt users, check the [dedicated Nuxt documentation](/guide/nuxt) which covers installation and framework-specific configuration.
|
package/docs/src/index.md
CHANGED
|
@@ -80,10 +80,10 @@ description: Build amazing interfaces with Maz-UI - standalone components & tool
|
|
|
80
80
|
<div class="maz-flex maz-justify-between maz-items-start tab-l:maz-items-center maz-gap-4 maz-mb-4 maz-flex-col-reverse tab-l:maz-flex-row">
|
|
81
81
|
<MazTabsBar :items="['Dashboard', 'Product Page', 'Auth Page']" />
|
|
82
82
|
<div class="maz-flex maz-gap-2 maz-items-center maz-flex-row-reverse tab-l:maz-flex-row">
|
|
83
|
-
<MazBtn fab color="background" :icon="isDark ? MazMoon : MazSun" outlined @click="toggleDarkMode" />
|
|
83
|
+
<MazBtn size="sm" fab color="background" :icon="isDark ? MazMoon : MazSun" outlined @click="toggleDarkMode" />
|
|
84
84
|
<MazRadioButtons
|
|
85
85
|
:model-value="presetName"
|
|
86
|
-
size="
|
|
86
|
+
size="sm"
|
|
87
87
|
:options="[{
|
|
88
88
|
label: 'Pristine',
|
|
89
89
|
value: 'pristine'
|
|
@@ -435,7 +435,7 @@ description: Build amazing interfaces with Maz-UI - standalone components & tool
|
|
|
435
435
|
</div>
|
|
436
436
|
<h3 class="maz-text-base maz-font-semibold">useFormValidator</h3>
|
|
437
437
|
<p class="dark:maz-text-gray-300 maz-text-muted maz-text-sm">
|
|
438
|
-
A Vue
|
|
438
|
+
A Vue composable designed to simplify form validation using Valibot as the validation library. Offers a flexible and typed approach to handle form validation.
|
|
439
439
|
</p>
|
|
440
440
|
<div class="maz-flex-1"></div>
|
|
441
441
|
<MazBtn color="background" outlined size="sm" block href="/composables/use-form-validator">Discover</MazBtn>
|
|
@@ -491,7 +491,7 @@ description: Build amazing interfaces with Maz-UI - standalone components & tool
|
|
|
491
491
|
</div>
|
|
492
492
|
<h3 class="maz-text-base maz-font-semibold">useDisplayNames</h3>
|
|
493
493
|
<p class="dark:maz-text-gray-300 maz-text-muted maz-text-sm">
|
|
494
|
-
A Vue
|
|
494
|
+
A Vue composable that provides functions to work with localized display names based on ISO codes, leveraging the Intl.DisplayNames API.
|
|
495
495
|
</p>
|
|
496
496
|
<div class="maz-flex-1"></div>
|
|
497
497
|
<MazBtn color="background" outlined size="sm" block href="/composables/use-display-names">Discover</MazBtn>
|
|
@@ -514,9 +514,9 @@ description: Build amazing interfaces with Maz-UI - standalone components & tool
|
|
|
514
514
|
</section>
|
|
515
515
|
|
|
516
516
|
<script lang="ts" setup>
|
|
517
|
-
import DemoAuthPage from '
|
|
518
|
-
import DemoDashboardPage from '
|
|
519
|
-
import DemoProductPage from '
|
|
517
|
+
import DemoAuthPage from '../components/DemoAuthPage.vue'
|
|
518
|
+
import DemoDashboardPage from '../components/DemoDashboardPage.vue'
|
|
519
|
+
import DemoProductPage from '../components/DemoProductPage.vue'
|
|
520
520
|
|
|
521
521
|
import { ref, computed } from 'vue'
|
|
522
522
|
import { MazStar, MazPlay, MazGithub, MazSun, MazMoon } from '@maz-ui/icons'
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Theme Editor
|
|
3
|
+
description: Create your own theme for maz-ui and export it to use it in your project
|
|
4
|
+
layout: home
|
|
5
|
+
sidebar: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<br />
|
|
9
|
+
<br />
|
|
10
|
+
|
|
11
|
+
# {{ $frontmatter.title }}
|
|
12
|
+
|
|
13
|
+
{{ $frontmatter.description }}
|
|
14
|
+
|
|
15
|
+
<br />
|
|
16
|
+
|
|
17
|
+
<ThemeEditorPage />
|
|
18
|
+
|
|
19
|
+
<script setup lang="ts">
|
|
20
|
+
import ThemeEditorPage from '../components/ThemeEditorPage.vue'
|
|
21
|
+
</script>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maz-ui/mcp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.1.
|
|
4
|
+
"version": "4.1.6-beta.0",
|
|
5
5
|
"description": "Maz-UI ModelContextProtocol Client",
|
|
6
6
|
"author": "Louis Mazel <me@loicmazuel.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -58,13 +58,13 @@
|
|
|
58
58
|
"test:unit:coverage": "pnpm generate:docs && vitest run --coverage"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@maz-ui/node": "4.1.
|
|
62
|
-
"@maz-ui/utils": "4.1.
|
|
61
|
+
"@maz-ui/node": "4.1.6-beta.0",
|
|
62
|
+
"@maz-ui/utils": "4.1.6-beta.0",
|
|
63
63
|
"@modelcontextprotocol/sdk": "^1.17.2"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@maz-ui/eslint-config": "4.1.
|
|
67
|
-
"@modelcontextprotocol/inspector": "^0.16.
|
|
66
|
+
"@maz-ui/eslint-config": "4.1.6-beta.0",
|
|
67
|
+
"@modelcontextprotocol/inspector": "^0.16.3",
|
|
68
68
|
"@swc/core": "1.13.3",
|
|
69
69
|
"@types/node": "^24.2.1",
|
|
70
70
|
"@vitest/coverage-v8": "^3.2.4",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"lint-staged": "^16.1.5",
|
|
73
73
|
"prettier": "^3.5.3",
|
|
74
74
|
"ts-node-maintained": "^10.9.5",
|
|
75
|
-
"tsx": "^4.20.
|
|
75
|
+
"tsx": "^4.20.4",
|
|
76
76
|
"typescript": "^5.9.2",
|
|
77
77
|
"unbuild": "^3.6.0",
|
|
78
78
|
"vitest": "^3.2.4"
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"lint-staged": {
|
|
81
81
|
"*.{js,ts,mjs,mts,cjs,md,yml,json}": "cross-env NODE_ENV=production eslint --fix"
|
|
82
82
|
},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "fb0c234c2025820e2ba9bda458d36dbb3caf4f0a"
|
|
84
84
|
}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import type { ComponentPublicInstance } from 'vue'
|
|
3
|
-
import { useFormField, useFormValidator, useToast } from 'maz-ui/composables'
|
|
4
|
-
import MazDialog from 'maz-ui/src/components/MazDialog.vue'
|
|
5
|
-
import { boolean, email, nonEmpty, pipe, string } from 'valibot'
|
|
6
|
-
import { ref } from 'vue'
|
|
7
|
-
|
|
8
|
-
const toast = useToast()
|
|
9
|
-
|
|
10
|
-
// Form data
|
|
11
|
-
const twoFactorCode = ref('')
|
|
12
|
-
const isLoading = ref(false)
|
|
13
|
-
const hasError = ref(false)
|
|
14
|
-
const errorMessage = ref('')
|
|
15
|
-
const showSuccessDialog = ref(false)
|
|
16
|
-
const step = ref(1)
|
|
17
|
-
|
|
18
|
-
const { model, errorMessages, handleSubmit } = useFormValidator({
|
|
19
|
-
schema: {
|
|
20
|
-
email: pipe(string('Email is required'), nonEmpty('Email is required'), email('Email is invalid')),
|
|
21
|
-
password: pipe(string('Password is required'), nonEmpty('Password is required')),
|
|
22
|
-
rememberMe: boolean(),
|
|
23
|
-
},
|
|
24
|
-
options: { mode: 'progressive' },
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
const emailRef = ref<ComponentPublicInstance>()
|
|
28
|
-
const passwordRef = ref<ComponentPublicInstance>()
|
|
29
|
-
|
|
30
|
-
useFormField('email', { ref: emailRef })
|
|
31
|
-
useFormField('password', { ref: passwordRef })
|
|
32
|
-
|
|
33
|
-
// Methods
|
|
34
|
-
function forgotPassword() {
|
|
35
|
-
toast.info('Reset password link sent to your email')
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function goToRegister() {
|
|
39
|
-
toast.info('Registration feature coming soon!')
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async function resendCode() {
|
|
43
|
-
isLoading.value = true
|
|
44
|
-
await new Promise(resolve => setTimeout(resolve, 1000))
|
|
45
|
-
isLoading.value = false
|
|
46
|
-
toast.success('New code sent to your email')
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async function verifyCode() {
|
|
50
|
-
if (twoFactorCode.value.length !== 4) {
|
|
51
|
-
hasError.value = true
|
|
52
|
-
errorMessage.value = 'Please enter a valid code'
|
|
53
|
-
return
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
isLoading.value = true
|
|
57
|
-
await new Promise(resolve => setTimeout(resolve, 1000))
|
|
58
|
-
isLoading.value = false
|
|
59
|
-
showSuccessDialog.value = true
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const onSubmit = handleSubmit(() => {
|
|
63
|
-
step.value = 2
|
|
64
|
-
})
|
|
65
|
-
</script>
|
|
66
|
-
|
|
67
|
-
<template>
|
|
68
|
-
<div class="vp-raw maz-flex">
|
|
69
|
-
<div class="maz-hidden maz-flex-1 maz-flex-col maz-gap-2 maz-bg-contrast maz-p-6 maz-flex-center tab-m:maz-flex">
|
|
70
|
-
<MazIcon src="/img/logo.svg" size="6rem" style="width: auto;" />
|
|
71
|
-
|
|
72
|
-
<p class="maz-text-center maz-text-sm maz-text-contrast-foreground">
|
|
73
|
-
Standalone components and tools library for Vue & Nuxt
|
|
74
|
-
</p>
|
|
75
|
-
</div>
|
|
76
|
-
<div class="maz-flex maz-flex-1 maz-items-center maz-py-6 maz-pr-0">
|
|
77
|
-
<MazStepper v-model="step" auto-validate-steps>
|
|
78
|
-
<template #title-1>
|
|
79
|
-
Sign In
|
|
80
|
-
</template>
|
|
81
|
-
<template #subtitle-1>
|
|
82
|
-
Welcome back!
|
|
83
|
-
</template>
|
|
84
|
-
<template #content-1>
|
|
85
|
-
<form novalidate class="maz-space-y-4" @submit.prevent="onSubmit">
|
|
86
|
-
<MazInput
|
|
87
|
-
ref="emailRef"
|
|
88
|
-
v-model="model.email"
|
|
89
|
-
top-label="Email"
|
|
90
|
-
type="email"
|
|
91
|
-
required
|
|
92
|
-
autocomplete="email"
|
|
93
|
-
:error="!!errorMessages.email"
|
|
94
|
-
:hint="errorMessages.email"
|
|
95
|
-
placeholder="john.doe@example.com"
|
|
96
|
-
left-icon="envelope"
|
|
97
|
-
block
|
|
98
|
-
/>
|
|
99
|
-
|
|
100
|
-
<MazInput
|
|
101
|
-
ref="passwordRef"
|
|
102
|
-
v-model="model.password"
|
|
103
|
-
top-label="Password"
|
|
104
|
-
type="password"
|
|
105
|
-
placeholder="********"
|
|
106
|
-
required
|
|
107
|
-
autocomplete="off"
|
|
108
|
-
:error="!!errorMessages.password"
|
|
109
|
-
:hint="errorMessages.password"
|
|
110
|
-
left-icon="lock-closed"
|
|
111
|
-
block
|
|
112
|
-
/>
|
|
113
|
-
|
|
114
|
-
<div class="maz-flex maz-items-center maz-justify-between">
|
|
115
|
-
<MazCheckbox v-model="model.rememberMe" color="contrast">
|
|
116
|
-
Remember me
|
|
117
|
-
</MazCheckbox>
|
|
118
|
-
|
|
119
|
-
<MazLink color="contrast" href="#" @click.prevent="forgotPassword">
|
|
120
|
-
Forgot password?
|
|
121
|
-
</MazLink>
|
|
122
|
-
</div>
|
|
123
|
-
|
|
124
|
-
<MazBtn type="submit" color="contrast" block :loading="isLoading">
|
|
125
|
-
Sign In
|
|
126
|
-
</MazBtn>
|
|
127
|
-
|
|
128
|
-
<div class="maz-text-center maz-text-muted">
|
|
129
|
-
Don't have an account?
|
|
130
|
-
<MazLink color="contrast" href="#" @click.prevent="goToRegister">
|
|
131
|
-
Register
|
|
132
|
-
</MazLink>
|
|
133
|
-
</div>
|
|
134
|
-
</form>
|
|
135
|
-
</template>
|
|
136
|
-
|
|
137
|
-
<template #title-2>
|
|
138
|
-
Two Factor Auth
|
|
139
|
-
</template>
|
|
140
|
-
<template #subtitle-2>
|
|
141
|
-
Enter the code sent to your email
|
|
142
|
-
</template>
|
|
143
|
-
<template #content-2="{ previousStep }">
|
|
144
|
-
<div class="maz-space-y-4">
|
|
145
|
-
<MazInputCode
|
|
146
|
-
v-model="twoFactorCode"
|
|
147
|
-
length="6"
|
|
148
|
-
:error="hasError"
|
|
149
|
-
:hint="errorMessage"
|
|
150
|
-
/>
|
|
151
|
-
|
|
152
|
-
<div class="maz-flex maz-gap-4">
|
|
153
|
-
<MazBtn color="secondary" block @click="previousStep">
|
|
154
|
-
Back
|
|
155
|
-
</MazBtn>
|
|
156
|
-
<MazBtn color="contrast" block :loading="isLoading" @click="verifyCode">
|
|
157
|
-
Verify
|
|
158
|
-
</MazBtn>
|
|
159
|
-
</div>
|
|
160
|
-
|
|
161
|
-
<MazBtn color="contrast" outlined block @click="resendCode">
|
|
162
|
-
Resend code
|
|
163
|
-
</MazBtn>
|
|
164
|
-
</div>
|
|
165
|
-
</template>
|
|
166
|
-
</MazStepper>
|
|
167
|
-
</div>
|
|
168
|
-
|
|
169
|
-
<MazDialog v-model="showSuccessDialog" title="Welcome back!">
|
|
170
|
-
<p>You have successfully signed in.</p>
|
|
171
|
-
<template #footer="{ close }">
|
|
172
|
-
<MazBtn color="contrast" @click="close">
|
|
173
|
-
Continue
|
|
174
|
-
</MazBtn>
|
|
175
|
-
</template>
|
|
176
|
-
</MazDialog>
|
|
177
|
-
</div>
|
|
178
|
-
</template>
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import dataLabels from 'chartjs-plugin-datalabels'
|
|
3
|
-
import { ref } from 'vue'
|
|
4
|
-
|
|
5
|
-
const { delay = 100 } = defineProps<{
|
|
6
|
-
delay?: number
|
|
7
|
-
}>()
|
|
8
|
-
|
|
9
|
-
const selectedPeriod = ref('last_7_days')
|
|
10
|
-
const selectedCategories = ref(['sales', 'customers', 'orders'])
|
|
11
|
-
const dateRange = ref({
|
|
12
|
-
start: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(),
|
|
13
|
-
end: new Date().toISOString(),
|
|
14
|
-
})
|
|
15
|
-
const salesTarget = ref(75)
|
|
16
|
-
|
|
17
|
-
// Chart data
|
|
18
|
-
const salesData = {
|
|
19
|
-
type: 'line',
|
|
20
|
-
plugins: [dataLabels],
|
|
21
|
-
data: {
|
|
22
|
-
labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
|
23
|
-
datasets: [
|
|
24
|
-
{
|
|
25
|
-
label: 'Sales',
|
|
26
|
-
data: [3100, 4200, 2900, 5600, 4900, 6100, 5900],
|
|
27
|
-
borderColor: 'rgb(28 209 161)',
|
|
28
|
-
tension: 0.4,
|
|
29
|
-
fill: false,
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
label: 'Orders',
|
|
33
|
-
data: [410, 520, 340, 690, 590, 780, 710],
|
|
34
|
-
borderColor: '#1e90ff',
|
|
35
|
-
tension: 0.4,
|
|
36
|
-
fill: false,
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
options: {
|
|
41
|
-
plugins: {
|
|
42
|
-
datalabels: {
|
|
43
|
-
display: false,
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Table data
|
|
50
|
-
const orders = ref([
|
|
51
|
-
{ id: 1, customer: 'John Doe', product: 'Premium Headphones', amount: 169.99, status: 'completed', date: '2024-03-18' },
|
|
52
|
-
{ id: 2, customer: 'Jane Smith', product: 'Wireless Speaker', amount: 89.99, status: 'pending', date: '2024-03-18' },
|
|
53
|
-
{ id: 3, customer: 'Mike Johnson', product: 'Smart Watch', amount: 299.99, status: 'processing', date: '2024-03-17' },
|
|
54
|
-
{ id: 4, customer: 'Sarah Wilson', product: 'Laptop Stand', amount: 49.99, status: 'completed', date: '2024-03-17' },
|
|
55
|
-
{ id: 5, customer: 'Tom Brown', product: 'USB-C Hub', amount: 79.99, status: 'completed', date: '2024-03-16' },
|
|
56
|
-
])
|
|
57
|
-
|
|
58
|
-
const tableHeaders = [
|
|
59
|
-
{ label: 'Order ID', key: 'id', sortable: true },
|
|
60
|
-
{ label: 'Customer', key: 'customer', sortable: true },
|
|
61
|
-
{ label: 'Product', key: 'product', sortable: true },
|
|
62
|
-
{ label: 'Amount', key: 'amount', sortable: true },
|
|
63
|
-
{ label: 'Status', key: 'status', sortable: true },
|
|
64
|
-
{ label: 'Date', key: 'date', sortable: true },
|
|
65
|
-
]
|
|
66
|
-
</script>
|
|
67
|
-
|
|
68
|
-
<template>
|
|
69
|
-
<div class="vp-raw maz-p-4">
|
|
70
|
-
<!-- Filters Section -->
|
|
71
|
-
<div class="maz-mb-4 maz-flex maz-flex-wrap maz-gap-4">
|
|
72
|
-
<MazSelect
|
|
73
|
-
v-model="selectedPeriod"
|
|
74
|
-
:options="[
|
|
75
|
-
{ label: 'Last 7 Days', value: 'last_7_days' },
|
|
76
|
-
{ label: 'Last 30 Days', value: 'last_30_days' },
|
|
77
|
-
{ label: 'Last 90 Days', value: 'last_90_days' },
|
|
78
|
-
{ label: 'Custom Range', value: 'custom' },
|
|
79
|
-
]"
|
|
80
|
-
label="Time Period"
|
|
81
|
-
class="maz-w-48"
|
|
82
|
-
/>
|
|
83
|
-
|
|
84
|
-
<MazSelect
|
|
85
|
-
v-model="selectedCategories"
|
|
86
|
-
:options="[
|
|
87
|
-
{ label: 'Sales', value: 'sales' },
|
|
88
|
-
{ label: 'Customers', value: 'customers' },
|
|
89
|
-
{ label: 'Orders', value: 'orders' },
|
|
90
|
-
{ label: 'Products', value: 'products' },
|
|
91
|
-
]"
|
|
92
|
-
label="Categories"
|
|
93
|
-
multiple
|
|
94
|
-
class="maz-w-64"
|
|
95
|
-
/>
|
|
96
|
-
|
|
97
|
-
<MazDatePicker
|
|
98
|
-
v-model="dateRange"
|
|
99
|
-
range
|
|
100
|
-
label="Date Range"
|
|
101
|
-
class="maz-w-64"
|
|
102
|
-
locale="en-US"
|
|
103
|
-
picker-position="bottom-end"
|
|
104
|
-
:input-date-style="{
|
|
105
|
-
dateStyle: 'medium',
|
|
106
|
-
}"
|
|
107
|
-
double
|
|
108
|
-
/>
|
|
109
|
-
</div>
|
|
110
|
-
|
|
111
|
-
<!-- Stats Cards -->
|
|
112
|
-
<div class="maz-mb-4 maz-grid maz-grid-cols-1 maz-gap-4 sm:maz-grid-cols-2 lg:maz-grid-cols-4">
|
|
113
|
-
<MazCard bordered :elevation="false" block>
|
|
114
|
-
<div class="maz-flex maz-items-center maz-gap-4">
|
|
115
|
-
<MazCircularProgressBar
|
|
116
|
-
:percentage="85"
|
|
117
|
-
color="success"
|
|
118
|
-
size="3rem"
|
|
119
|
-
:delay
|
|
120
|
-
:once="false"
|
|
121
|
-
/>
|
|
122
|
-
<div class="maz-truncate">
|
|
123
|
-
<div class="maz-text-xl maz-font-bold">
|
|
124
|
-
<MazAnimatedCounter
|
|
125
|
-
:delay
|
|
126
|
-
:count="28945"
|
|
127
|
-
prefix="$"
|
|
128
|
-
separator=","
|
|
129
|
-
:once="false"
|
|
130
|
-
/>
|
|
131
|
-
</div>
|
|
132
|
-
<div class="maz-truncate maz-text-sm maz-text-muted">
|
|
133
|
-
Total Revenue
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
</div>
|
|
137
|
-
</MazCard>
|
|
138
|
-
|
|
139
|
-
<MazCard bordered :elevation="false" block>
|
|
140
|
-
<div class="maz-flex maz-items-center maz-gap-4">
|
|
141
|
-
<MazCircularProgressBar
|
|
142
|
-
:percentage="65"
|
|
143
|
-
color="info"
|
|
144
|
-
size="3rem"
|
|
145
|
-
:delay
|
|
146
|
-
:once="false"
|
|
147
|
-
/>
|
|
148
|
-
<div class="maz-truncate">
|
|
149
|
-
<div class="maz-text-xl maz-font-bold">
|
|
150
|
-
<MazAnimatedCounter
|
|
151
|
-
:delay
|
|
152
|
-
:count="384"
|
|
153
|
-
separator=","
|
|
154
|
-
:once="false"
|
|
155
|
-
/>
|
|
156
|
-
</div>
|
|
157
|
-
<div class="maz-truncate maz-text-sm maz-text-muted">
|
|
158
|
-
New Orders
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
</div>
|
|
162
|
-
</MazCard>
|
|
163
|
-
|
|
164
|
-
<MazCard bordered :elevation="false" block>
|
|
165
|
-
<div class="maz-flex maz-items-center maz-gap-4">
|
|
166
|
-
<MazCircularProgressBar
|
|
167
|
-
:percentage="92"
|
|
168
|
-
color="warning"
|
|
169
|
-
size="3rem"
|
|
170
|
-
:delay
|
|
171
|
-
:once="false"
|
|
172
|
-
/>
|
|
173
|
-
<div class="maz-truncate">
|
|
174
|
-
<div class="maz-text-xl maz-font-bold">
|
|
175
|
-
<MazAnimatedCounter
|
|
176
|
-
:delay
|
|
177
|
-
:count="1482"
|
|
178
|
-
separator=","
|
|
179
|
-
:once="false"
|
|
180
|
-
/>
|
|
181
|
-
</div>
|
|
182
|
-
<div class="maz-truncate maz-text-sm maz-text-muted">
|
|
183
|
-
Active Customers
|
|
184
|
-
</div>
|
|
185
|
-
</div>
|
|
186
|
-
</div>
|
|
187
|
-
</MazCard>
|
|
188
|
-
|
|
189
|
-
<MazCard bordered :elevation="false" block>
|
|
190
|
-
<div class="maz-flex maz-items-center maz-gap-4">
|
|
191
|
-
<MazCircularProgressBar
|
|
192
|
-
:percentage="78"
|
|
193
|
-
color="destructive"
|
|
194
|
-
size="3rem"
|
|
195
|
-
:delay
|
|
196
|
-
:once="false"
|
|
197
|
-
/>
|
|
198
|
-
<div class="maz-truncate">
|
|
199
|
-
<div class="maz-text-xl maz-font-bold">
|
|
200
|
-
<MazAnimatedCounter
|
|
201
|
-
:delay
|
|
202
|
-
:count="94"
|
|
203
|
-
suffix="%"
|
|
204
|
-
:once="false"
|
|
205
|
-
/>
|
|
206
|
-
</div>
|
|
207
|
-
<div class="maz-truncate maz-text-sm maz-text-muted">
|
|
208
|
-
Customer Satisfaction
|
|
209
|
-
</div>
|
|
210
|
-
</div>
|
|
211
|
-
</div>
|
|
212
|
-
</MazCard>
|
|
213
|
-
</div>
|
|
214
|
-
|
|
215
|
-
<!-- Orders Table -->
|
|
216
|
-
<MazTable
|
|
217
|
-
:headers="tableHeaders"
|
|
218
|
-
:rows="orders"
|
|
219
|
-
search
|
|
220
|
-
title="Recent Orders"
|
|
221
|
-
sortable
|
|
222
|
-
hoverable
|
|
223
|
-
input-size="sm"
|
|
224
|
-
pagination
|
|
225
|
-
selectable
|
|
226
|
-
>
|
|
227
|
-
<template #cell-amount="{ value }">
|
|
228
|
-
<span class="maz-font-semibold">
|
|
229
|
-
${{ value }}
|
|
230
|
-
</span>
|
|
231
|
-
</template>
|
|
232
|
-
<template #cell-status="{ value }">
|
|
233
|
-
<MazBadge
|
|
234
|
-
:color="value === 'completed' ? 'success' : value === 'processing' ? 'warning' : 'info'"
|
|
235
|
-
>
|
|
236
|
-
{{ value }}
|
|
237
|
-
</MazBadge>
|
|
238
|
-
</template>
|
|
239
|
-
</MazTable>
|
|
240
|
-
|
|
241
|
-
<!-- Charts Section -->
|
|
242
|
-
<div class="maz-mt-4 maz-grid maz-grid-cols-1 maz-gap-4 lg:maz-grid-cols-2">
|
|
243
|
-
<MazCard bordered :elevation="false" block>
|
|
244
|
-
<template #title>
|
|
245
|
-
<h3 class="maz-text-lg maz-font-semibold">
|
|
246
|
-
Sales Overview
|
|
247
|
-
</h3>
|
|
248
|
-
</template>
|
|
249
|
-
<MazChart v-bind="salesData" height="125" />
|
|
250
|
-
</MazCard>
|
|
251
|
-
|
|
252
|
-
<MazCard bordered :elevation="false" block>
|
|
253
|
-
<template #title>
|
|
254
|
-
<div class="maz-flex maz-w-full maz-items-center maz-justify-between">
|
|
255
|
-
<h3 class="maz-text-lg maz-font-semibold">
|
|
256
|
-
Sales Target
|
|
257
|
-
</h3>
|
|
258
|
-
<span class="maz-text-xl maz-font-bold maz-text-success">
|
|
259
|
-
{{ salesTarget }}%
|
|
260
|
-
</span>
|
|
261
|
-
</div>
|
|
262
|
-
</template>
|
|
263
|
-
<div class="maz-flex maz-h-full maz-flex-col maz-justify-between maz-gap-4">
|
|
264
|
-
<div>
|
|
265
|
-
<MazSlider
|
|
266
|
-
v-model="salesTarget"
|
|
267
|
-
:min="0"
|
|
268
|
-
:max="100"
|
|
269
|
-
color="success"
|
|
270
|
-
/>
|
|
271
|
-
<div class="maz-mt-4 maz-text-center maz-text-sm maz-text-muted">
|
|
272
|
-
Drag the slider to adjust sales target
|
|
273
|
-
</div>
|
|
274
|
-
</div>
|
|
275
|
-
|
|
276
|
-
<div class="maz-mt-4 maz-flex maz-items-center maz-justify-between">
|
|
277
|
-
<div>
|
|
278
|
-
<p class="maz-font-medium">
|
|
279
|
-
Monthly Target
|
|
280
|
-
</p>
|
|
281
|
-
<p class="maz-text-sm maz-text-muted">
|
|
282
|
-
${{ (1000 * salesTarget).toLocaleString() }}
|
|
283
|
-
</p>
|
|
284
|
-
</div>
|
|
285
|
-
<div>
|
|
286
|
-
<p class="maz-font-medium">
|
|
287
|
-
Achieved
|
|
288
|
-
</p>
|
|
289
|
-
<p class="maz-text-sm maz-text-success">
|
|
290
|
-
$50,000
|
|
291
|
-
</p>
|
|
292
|
-
</div>
|
|
293
|
-
</div>
|
|
294
|
-
</div>
|
|
295
|
-
</MazCard>
|
|
296
|
-
</div>
|
|
297
|
-
</div>
|
|
298
|
-
</template>
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { ref } from 'vue'
|
|
3
|
-
|
|
4
|
-
const selectedColor = ref('black')
|
|
5
|
-
const quantity = ref(1)
|
|
6
|
-
const selectedTasks = ref([])
|
|
7
|
-
const price = ref(100)
|
|
8
|
-
</script>
|
|
9
|
-
|
|
10
|
-
<template>
|
|
11
|
-
<div class="vp-raw maz-mx-auto maz-max-w-7xl maz-p-4">
|
|
12
|
-
<div class="maz-grid maz-grid-cols-1 maz-gap-8 md:maz-grid-cols-2">
|
|
13
|
-
<div>
|
|
14
|
-
<MazGallery
|
|
15
|
-
:images="[
|
|
16
|
-
'https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=800',
|
|
17
|
-
'https://images.unsplash.com/photo-1487215078519-e21cc028cb29?w=800',
|
|
18
|
-
'https://images.unsplash.com/photo-1583394838336-acd977736f90?w=800',
|
|
19
|
-
'https://images.unsplash.com/photo-1607294846590-fd005d7973e8?w=800',
|
|
20
|
-
]"
|
|
21
|
-
:height="false"
|
|
22
|
-
:displayed-count="2"
|
|
23
|
-
class="maz-mb-6 maz-h-64"
|
|
24
|
-
/>
|
|
25
|
-
|
|
26
|
-
<div class="maz-mb-6">
|
|
27
|
-
<h2 class="maz-mb-2 maz-text-xl maz-font-semibold">
|
|
28
|
-
Description
|
|
29
|
-
</h2>
|
|
30
|
-
<p class="maz-text-muted">
|
|
31
|
-
Experience premium sound quality with our wireless headphones. Featuring advanced noise cancellation,
|
|
32
|
-
long battery life and premium materials for ultimate comfort.
|
|
33
|
-
</p>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
<MazCard block :elevation="false" bordered>
|
|
37
|
-
<template #title>
|
|
38
|
-
<h3 class="maz-text-lg maz-font-semibold">
|
|
39
|
-
Technical Specs
|
|
40
|
-
</h3>
|
|
41
|
-
</template>
|
|
42
|
-
<div class="maz-space-y-2">
|
|
43
|
-
<div class="maz-flex maz-justify-between">
|
|
44
|
-
<span>Driver Size</span>
|
|
45
|
-
<span>40mm</span>
|
|
46
|
-
</div>
|
|
47
|
-
<div class="maz-flex maz-justify-between">
|
|
48
|
-
<span>Frequency Response</span>
|
|
49
|
-
<span>20Hz - 20kHz</span>
|
|
50
|
-
</div>
|
|
51
|
-
<div class="maz-flex maz-justify-between">
|
|
52
|
-
<span>Impedance</span>
|
|
53
|
-
<span>32 Ohm</span>
|
|
54
|
-
</div>
|
|
55
|
-
</div>
|
|
56
|
-
</MazCard>
|
|
57
|
-
</div>
|
|
58
|
-
<div class="maz-space-y-6">
|
|
59
|
-
<h1 class="maz-text-3xl maz-font-bold">
|
|
60
|
-
Premium Headphones
|
|
61
|
-
</h1>
|
|
62
|
-
|
|
63
|
-
<div class="maz-text-3xl maz-font-bold">
|
|
64
|
-
169,99€
|
|
65
|
-
</div>
|
|
66
|
-
|
|
67
|
-
<hr class="maz-my-4 maz-border-t maz-border-divider">
|
|
68
|
-
|
|
69
|
-
<div>
|
|
70
|
-
<h2 class="maz-mb-2 maz-text-xl maz-font-semibold">
|
|
71
|
-
Color
|
|
72
|
-
</h2>
|
|
73
|
-
<MazSelect
|
|
74
|
-
v-model="selectedColor"
|
|
75
|
-
:options="[
|
|
76
|
-
{ label: 'Black', value: 'black' },
|
|
77
|
-
{ label: 'White', value: 'white' },
|
|
78
|
-
{ label: 'Rose Gold', value: 'rose-gold' },
|
|
79
|
-
]"
|
|
80
|
-
label="Color"
|
|
81
|
-
class="maz-flex-1"
|
|
82
|
-
block
|
|
83
|
-
/>
|
|
84
|
-
</div>
|
|
85
|
-
|
|
86
|
-
<div>
|
|
87
|
-
<h2 class="maz-mb-2 maz-text-xl maz-font-semibold">
|
|
88
|
-
Choose options
|
|
89
|
-
</h2>
|
|
90
|
-
|
|
91
|
-
<MazChecklist
|
|
92
|
-
v-model="selectedTasks"
|
|
93
|
-
:search="false"
|
|
94
|
-
:items="[
|
|
95
|
-
{ label: 'Active Noise Cancellation', value: 'anc' },
|
|
96
|
-
{ label: '40h Battery Life', value: 'battery' },
|
|
97
|
-
{ label: 'Premium Audio Drivers', value: 'audio' },
|
|
98
|
-
{ label: 'Bluetooth 5.0', value: 'bluetooth' },
|
|
99
|
-
]"
|
|
100
|
-
readonly
|
|
101
|
-
/>
|
|
102
|
-
</div>
|
|
103
|
-
|
|
104
|
-
<div class="maz-flex maz-flex-col maz-gap-4 lap-s:maz-flex-row">
|
|
105
|
-
<MazInputPrice
|
|
106
|
-
v-model="price"
|
|
107
|
-
label="Price"
|
|
108
|
-
:min="1"
|
|
109
|
-
:step="1"
|
|
110
|
-
:text-center="false"
|
|
111
|
-
class="maz-flex-1"
|
|
112
|
-
/>
|
|
113
|
-
|
|
114
|
-
<MazBtn color="contrast" outlined class="maz-flex-1" right-icon="shopping-cart">
|
|
115
|
-
Make an offer
|
|
116
|
-
</MazBtn>
|
|
117
|
-
</div>
|
|
118
|
-
<div class="maz-flex maz-flex-col maz-gap-4 lap-s:maz-flex-row">
|
|
119
|
-
<MazInputNumber
|
|
120
|
-
v-model="quantity"
|
|
121
|
-
label="Quantity"
|
|
122
|
-
:min="1"
|
|
123
|
-
:step="1"
|
|
124
|
-
:text-center="false"
|
|
125
|
-
class="maz-flex-1"
|
|
126
|
-
/>
|
|
127
|
-
|
|
128
|
-
<MazBtn color="contrast" class="maz-flex-1" right-icon="shopping-cart">
|
|
129
|
-
Add to Cart
|
|
130
|
-
</MazBtn>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
</template>
|