@maz-ui/mcp 4.0.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +264 -0
  3. package/bin/maz-ui-mcp.mjs +7 -0
  4. package/dist/mcp.d.mts +13 -0
  5. package/dist/mcp.d.ts +13 -0
  6. package/dist/mcp.mjs +586 -0
  7. package/docs/generated-docs/maz-accordion.doc.md +21 -0
  8. package/docs/generated-docs/maz-animated-counter.doc.md +17 -0
  9. package/docs/generated-docs/maz-animated-element.doc.md +14 -0
  10. package/docs/generated-docs/maz-animated-text.doc.md +14 -0
  11. package/docs/generated-docs/maz-avatar.doc.md +44 -0
  12. package/docs/generated-docs/maz-backdrop.doc.md +61 -0
  13. package/docs/generated-docs/maz-badge.doc.md +16 -0
  14. package/docs/generated-docs/maz-bottom-sheet.doc.md +21 -0
  15. package/docs/generated-docs/maz-btn.doc.md +30 -0
  16. package/docs/generated-docs/maz-card-spotlight.doc.md +16 -0
  17. package/docs/generated-docs/maz-card.doc.md +39 -0
  18. package/docs/generated-docs/maz-carousel.doc.md +16 -0
  19. package/docs/generated-docs/maz-chart.doc.md +10 -0
  20. package/docs/generated-docs/maz-checkbox.doc.md +34 -0
  21. package/docs/generated-docs/maz-checklist.doc.md +30 -0
  22. package/docs/generated-docs/maz-circular-progress-bar.doc.md +27 -0
  23. package/docs/generated-docs/maz-date-picker.doc.md +52 -0
  24. package/docs/generated-docs/maz-dialog-confirm.doc.md +24 -0
  25. package/docs/generated-docs/maz-dialog.doc.md +22 -0
  26. package/docs/generated-docs/maz-drawer.doc.md +26 -0
  27. package/docs/generated-docs/maz-dropdown.doc.md +42 -0
  28. package/docs/generated-docs/maz-dropzone.doc.md +82 -0
  29. package/docs/generated-docs/maz-expand-animation.doc.md +12 -0
  30. package/docs/generated-docs/maz-fullscreen-loader.doc.md +13 -0
  31. package/docs/generated-docs/maz-gallery.doc.md +17 -0
  32. package/docs/generated-docs/maz-icon.doc.md +18 -0
  33. package/docs/generated-docs/maz-input-code.doc.md +25 -0
  34. package/docs/generated-docs/maz-input-number.doc.md +31 -0
  35. package/docs/generated-docs/maz-input-phone-number.doc.md +56 -0
  36. package/docs/generated-docs/maz-input-price.doc.md +26 -0
  37. package/docs/generated-docs/maz-input-tags.doc.md +24 -0
  38. package/docs/generated-docs/maz-input.doc.md +54 -0
  39. package/docs/generated-docs/maz-lazy-img.doc.md +31 -0
  40. package/docs/generated-docs/maz-link.doc.md +31 -0
  41. package/docs/generated-docs/maz-loading-bar.doc.md +6 -0
  42. package/docs/generated-docs/maz-pagination.doc.md +22 -0
  43. package/docs/generated-docs/maz-popover.doc.md +70 -0
  44. package/docs/generated-docs/maz-pull-to-refresh.doc.md +31 -0
  45. package/docs/generated-docs/maz-radio-buttons.doc.md +33 -0
  46. package/docs/generated-docs/maz-radio.doc.md +33 -0
  47. package/docs/generated-docs/maz-reading-progress-bar.doc.md +18 -0
  48. package/docs/generated-docs/maz-select-country.doc.md +44 -0
  49. package/docs/generated-docs/maz-select.doc.md +65 -0
  50. package/docs/generated-docs/maz-slider.doc.md +20 -0
  51. package/docs/generated-docs/maz-spinner.doc.md +6 -0
  52. package/docs/generated-docs/maz-stepper.doc.md +29 -0
  53. package/docs/generated-docs/maz-switch.doc.md +31 -0
  54. package/docs/generated-docs/maz-table-cell.doc.md +5 -0
  55. package/docs/generated-docs/maz-table-row.doc.md +11 -0
  56. package/docs/generated-docs/maz-table-title.doc.md +5 -0
  57. package/docs/generated-docs/maz-table.doc.md +66 -0
  58. package/docs/generated-docs/maz-tabs-bar.doc.md +18 -0
  59. package/docs/generated-docs/maz-tabs-content-item.doc.md +11 -0
  60. package/docs/generated-docs/maz-tabs-content.doc.md +5 -0
  61. package/docs/generated-docs/maz-tabs.doc.md +17 -0
  62. package/docs/generated-docs/maz-textarea.doc.md +41 -0
  63. package/docs/src/components/index.md +8 -0
  64. package/docs/src/components/maz-accordion.md +80 -0
  65. package/docs/src/components/maz-animated-counter.md +124 -0
  66. package/docs/src/components/maz-animated-element.md +36 -0
  67. package/docs/src/components/maz-animated-text.md +36 -0
  68. package/docs/src/components/maz-avatar.md +179 -0
  69. package/docs/src/components/maz-backdrop.md +16 -0
  70. package/docs/src/components/maz-badge.md +222 -0
  71. package/docs/src/components/maz-bottom-sheet.md +398 -0
  72. package/docs/src/components/maz-btn.md +526 -0
  73. package/docs/src/components/maz-card-spotlight.md +163 -0
  74. package/docs/src/components/maz-card.md +447 -0
  75. package/docs/src/components/maz-carousel.md +127 -0
  76. package/docs/src/components/maz-chart.md +346 -0
  77. package/docs/src/components/maz-checkbox.md +168 -0
  78. package/docs/src/components/maz-checklist.md +414 -0
  79. package/docs/src/components/maz-circular-progress-bar.md +147 -0
  80. package/docs/src/components/maz-date-picker.md +1078 -0
  81. package/docs/src/components/maz-dialog-confirm.md +240 -0
  82. package/docs/src/components/maz-dialog.md +208 -0
  83. package/docs/src/components/maz-drawer.md +177 -0
  84. package/docs/src/components/maz-dropdown.md +650 -0
  85. package/docs/src/components/maz-dropzone.md +442 -0
  86. package/docs/src/components/maz-expand-animation.md +99 -0
  87. package/docs/src/components/maz-fullscreen-loader.md +58 -0
  88. package/docs/src/components/maz-gallery.md +85 -0
  89. package/docs/src/components/maz-icon.md +85 -0
  90. package/docs/src/components/maz-input-code.md +61 -0
  91. package/docs/src/components/maz-input-number.md +81 -0
  92. package/docs/src/components/maz-input-phone-number.md +867 -0
  93. package/docs/src/components/maz-input-price.md +58 -0
  94. package/docs/src/components/maz-input-tags.md +114 -0
  95. package/docs/src/components/maz-input.md +453 -0
  96. package/docs/src/components/maz-lazy-img.md +24 -0
  97. package/docs/src/components/maz-link.md +156 -0
  98. package/docs/src/components/maz-loading-bar.md +26 -0
  99. package/docs/src/components/maz-pagination.md +81 -0
  100. package/docs/src/components/maz-popover.md +1414 -0
  101. package/docs/src/components/maz-pull-to-refresh.md +49 -0
  102. package/docs/src/components/maz-radio-buttons.md +456 -0
  103. package/docs/src/components/maz-radio.md +141 -0
  104. package/docs/src/components/maz-reading-progress-bar.md +74 -0
  105. package/docs/src/components/maz-select-country.md +636 -0
  106. package/docs/src/components/maz-select.md +439 -0
  107. package/docs/src/components/maz-slider.md +191 -0
  108. package/docs/src/components/maz-spinner.md +93 -0
  109. package/docs/src/components/maz-stepper.md +418 -0
  110. package/docs/src/components/maz-switch.md +92 -0
  111. package/docs/src/components/maz-table.md +571 -0
  112. package/docs/src/components/maz-tabs.md +231 -0
  113. package/docs/src/components/maz-textarea.md +218 -0
  114. package/docs/src/composables/use-aos.md +34 -0
  115. package/docs/src/composables/use-breakpoints.md +35 -0
  116. package/docs/src/composables/use-dialog.md +88 -0
  117. package/docs/src/composables/use-display-names.md +174 -0
  118. package/docs/src/composables/use-form-validator.md +1149 -0
  119. package/docs/src/composables/use-idle-timeout.md +256 -0
  120. package/docs/src/composables/use-reading-time.md +168 -0
  121. package/docs/src/composables/use-string-matching.md +63 -0
  122. package/docs/src/composables/use-swipe.md +223 -0
  123. package/docs/src/composables/use-timer.md +130 -0
  124. package/docs/src/composables/use-toast.md +71 -0
  125. package/docs/src/composables/use-user-visibility.md +169 -0
  126. package/docs/src/composables/use-wait.md +62 -0
  127. package/docs/src/composables/use-window-size.md +18 -0
  128. package/docs/src/demo/DemoAuthPage.vue +178 -0
  129. package/docs/src/demo/DemoDashboardPage.vue +298 -0
  130. package/docs/src/demo/DemoProductPage.vue +135 -0
  131. package/docs/src/directives/click-outside.md +275 -0
  132. package/docs/src/directives/fullscreen-img.md +101 -0
  133. package/docs/src/directives/lazy-img.md +184 -0
  134. package/docs/src/directives/tooltip.md +458 -0
  135. package/docs/src/directives/zoom-img.md +127 -0
  136. package/docs/src/guide/cli.md +144 -0
  137. package/docs/src/guide/getting-started.md +284 -0
  138. package/docs/src/guide/icon-set.md +60 -0
  139. package/docs/src/guide/icons.md +481 -0
  140. package/docs/src/guide/mcp.md +210 -0
  141. package/docs/src/guide/migration-v4.md +898 -0
  142. package/docs/src/guide/nuxt.md +411 -0
  143. package/docs/src/guide/resolvers.md +697 -0
  144. package/docs/src/guide/themes.md +789 -0
  145. package/docs/src/guide/translations.md +1173 -0
  146. package/docs/src/guide/vue.md +243 -0
  147. package/docs/src/helpers/camel-case.md +14 -0
  148. package/docs/src/helpers/capitalize.md +51 -0
  149. package/docs/src/helpers/check-availability.md +14 -0
  150. package/docs/src/helpers/country-code-to-unicode-flag.md +213 -0
  151. package/docs/src/helpers/currency.md +67 -0
  152. package/docs/src/helpers/date.md +67 -0
  153. package/docs/src/helpers/debounce-callback.md +14 -0
  154. package/docs/src/helpers/debounce-id.md +14 -0
  155. package/docs/src/helpers/debounce.md +14 -0
  156. package/docs/src/helpers/get-country-flag-url.md +156 -0
  157. package/docs/src/helpers/is-client.md +14 -0
  158. package/docs/src/helpers/is-equal.md +14 -0
  159. package/docs/src/helpers/is-standalone-mode.md +14 -0
  160. package/docs/src/helpers/kebab-case.md +14 -0
  161. package/docs/src/helpers/normalize-string.md +14 -0
  162. package/docs/src/helpers/number.md +65 -0
  163. package/docs/src/helpers/pascal-case.md +14 -0
  164. package/docs/src/helpers/script-loader.md +14 -0
  165. package/docs/src/helpers/sleep.md +14 -0
  166. package/docs/src/helpers/snake-case.md +14 -0
  167. package/docs/src/helpers/throttle-id.md +14 -0
  168. package/docs/src/helpers/throttle.md +14 -0
  169. package/docs/src/index.md +555 -0
  170. package/docs/src/made-with-maz-ui.md +58 -0
  171. package/docs/src/plugins/aos.md +347 -0
  172. package/docs/src/plugins/dialog.md +411 -0
  173. package/docs/src/plugins/toast.md +349 -0
  174. package/docs/src/plugins/wait.md +109 -0
  175. package/package.json +84 -0
@@ -0,0 +1,178 @@
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>
@@ -0,0 +1,298 @@
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>
@@ -0,0 +1,135 @@
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>