@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 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.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 3 composables (useToast, useDialog, etc.)",
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 component for displaying content in overlays that bypass overflow constraints of parent elements
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 component for selecting countries or languages with built-in internationalization support and customizable display options
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 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.
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 3.
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 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 3 applications.
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 3 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 3 applications.
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 composable that provides an easy way to track user inactivity on your website and execute a callback function when the user becomes idle.
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 composable that simplifies the management of "swipe" interactions on HTML elements.
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 3 components to handle timeouts in a flexible and reactive manner.
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 directive to trigger a function when the user clicks outside an element
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 directive to lazy load images with many options. The image will be loaded on user's scroll
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: vTooltip
3
- description: vTooltip is a Vue 3 directive to display a text when the user hovers an element
3
+ description: vTooltip is a Vue directive to display a text when the user hovers an element
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 directive to enlarge an image like a modal on click, if you have several images, you can pass them like a carousel
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 3 components
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 }}
@@ -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 3 optimized with `defineAsyncComponent`
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 3 module | New |
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 3 setup
907
- - **[Nuxt Installation Guide](/guide/nuxt)** - Nuxt 3 setup
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
 
@@ -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="lg"
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 3 composable designed to simplify form validation using Valibot as the validation library. Offers a flexible and typed approach to handle form validation.
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 3 composable that provides functions to work with localized display names based on ISO codes, leveraging the Intl.DisplayNames API.
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 './demo/DemoAuthPage.vue'
518
- import DemoDashboardPage from './demo/DemoDashboardPage.vue'
519
- import DemoProductPage from './demo/DemoProductPage.vue'
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.2",
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.2",
62
- "@maz-ui/utils": "4.1.2",
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.2",
67
- "@modelcontextprotocol/inspector": "^0.16.2",
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.3",
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": "7be37c69c61b31f83699a61039b407ff196facc4"
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>