@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.
- package/LICENSE +21 -0
- package/README.md +264 -0
- package/bin/maz-ui-mcp.mjs +7 -0
- package/dist/mcp.d.mts +13 -0
- package/dist/mcp.d.ts +13 -0
- package/dist/mcp.mjs +586 -0
- package/docs/generated-docs/maz-accordion.doc.md +21 -0
- package/docs/generated-docs/maz-animated-counter.doc.md +17 -0
- package/docs/generated-docs/maz-animated-element.doc.md +14 -0
- package/docs/generated-docs/maz-animated-text.doc.md +14 -0
- package/docs/generated-docs/maz-avatar.doc.md +44 -0
- package/docs/generated-docs/maz-backdrop.doc.md +61 -0
- package/docs/generated-docs/maz-badge.doc.md +16 -0
- package/docs/generated-docs/maz-bottom-sheet.doc.md +21 -0
- package/docs/generated-docs/maz-btn.doc.md +30 -0
- package/docs/generated-docs/maz-card-spotlight.doc.md +16 -0
- package/docs/generated-docs/maz-card.doc.md +39 -0
- package/docs/generated-docs/maz-carousel.doc.md +16 -0
- package/docs/generated-docs/maz-chart.doc.md +10 -0
- package/docs/generated-docs/maz-checkbox.doc.md +34 -0
- package/docs/generated-docs/maz-checklist.doc.md +30 -0
- package/docs/generated-docs/maz-circular-progress-bar.doc.md +27 -0
- package/docs/generated-docs/maz-date-picker.doc.md +52 -0
- package/docs/generated-docs/maz-dialog-confirm.doc.md +24 -0
- package/docs/generated-docs/maz-dialog.doc.md +22 -0
- package/docs/generated-docs/maz-drawer.doc.md +26 -0
- package/docs/generated-docs/maz-dropdown.doc.md +42 -0
- package/docs/generated-docs/maz-dropzone.doc.md +82 -0
- package/docs/generated-docs/maz-expand-animation.doc.md +12 -0
- package/docs/generated-docs/maz-fullscreen-loader.doc.md +13 -0
- package/docs/generated-docs/maz-gallery.doc.md +17 -0
- package/docs/generated-docs/maz-icon.doc.md +18 -0
- package/docs/generated-docs/maz-input-code.doc.md +25 -0
- package/docs/generated-docs/maz-input-number.doc.md +31 -0
- package/docs/generated-docs/maz-input-phone-number.doc.md +56 -0
- package/docs/generated-docs/maz-input-price.doc.md +26 -0
- package/docs/generated-docs/maz-input-tags.doc.md +24 -0
- package/docs/generated-docs/maz-input.doc.md +54 -0
- package/docs/generated-docs/maz-lazy-img.doc.md +31 -0
- package/docs/generated-docs/maz-link.doc.md +31 -0
- package/docs/generated-docs/maz-loading-bar.doc.md +6 -0
- package/docs/generated-docs/maz-pagination.doc.md +22 -0
- package/docs/generated-docs/maz-popover.doc.md +70 -0
- package/docs/generated-docs/maz-pull-to-refresh.doc.md +31 -0
- package/docs/generated-docs/maz-radio-buttons.doc.md +33 -0
- package/docs/generated-docs/maz-radio.doc.md +33 -0
- package/docs/generated-docs/maz-reading-progress-bar.doc.md +18 -0
- package/docs/generated-docs/maz-select-country.doc.md +44 -0
- package/docs/generated-docs/maz-select.doc.md +65 -0
- package/docs/generated-docs/maz-slider.doc.md +20 -0
- package/docs/generated-docs/maz-spinner.doc.md +6 -0
- package/docs/generated-docs/maz-stepper.doc.md +29 -0
- package/docs/generated-docs/maz-switch.doc.md +31 -0
- package/docs/generated-docs/maz-table-cell.doc.md +5 -0
- package/docs/generated-docs/maz-table-row.doc.md +11 -0
- package/docs/generated-docs/maz-table-title.doc.md +5 -0
- package/docs/generated-docs/maz-table.doc.md +66 -0
- package/docs/generated-docs/maz-tabs-bar.doc.md +18 -0
- package/docs/generated-docs/maz-tabs-content-item.doc.md +11 -0
- package/docs/generated-docs/maz-tabs-content.doc.md +5 -0
- package/docs/generated-docs/maz-tabs.doc.md +17 -0
- package/docs/generated-docs/maz-textarea.doc.md +41 -0
- package/docs/src/components/index.md +8 -0
- package/docs/src/components/maz-accordion.md +80 -0
- package/docs/src/components/maz-animated-counter.md +124 -0
- package/docs/src/components/maz-animated-element.md +36 -0
- package/docs/src/components/maz-animated-text.md +36 -0
- package/docs/src/components/maz-avatar.md +179 -0
- package/docs/src/components/maz-backdrop.md +16 -0
- package/docs/src/components/maz-badge.md +222 -0
- package/docs/src/components/maz-bottom-sheet.md +398 -0
- package/docs/src/components/maz-btn.md +526 -0
- package/docs/src/components/maz-card-spotlight.md +163 -0
- package/docs/src/components/maz-card.md +447 -0
- package/docs/src/components/maz-carousel.md +127 -0
- package/docs/src/components/maz-chart.md +346 -0
- package/docs/src/components/maz-checkbox.md +168 -0
- package/docs/src/components/maz-checklist.md +414 -0
- package/docs/src/components/maz-circular-progress-bar.md +147 -0
- package/docs/src/components/maz-date-picker.md +1078 -0
- package/docs/src/components/maz-dialog-confirm.md +240 -0
- package/docs/src/components/maz-dialog.md +208 -0
- package/docs/src/components/maz-drawer.md +177 -0
- package/docs/src/components/maz-dropdown.md +650 -0
- package/docs/src/components/maz-dropzone.md +442 -0
- package/docs/src/components/maz-expand-animation.md +99 -0
- package/docs/src/components/maz-fullscreen-loader.md +58 -0
- package/docs/src/components/maz-gallery.md +85 -0
- package/docs/src/components/maz-icon.md +85 -0
- package/docs/src/components/maz-input-code.md +61 -0
- package/docs/src/components/maz-input-number.md +81 -0
- package/docs/src/components/maz-input-phone-number.md +867 -0
- package/docs/src/components/maz-input-price.md +58 -0
- package/docs/src/components/maz-input-tags.md +114 -0
- package/docs/src/components/maz-input.md +453 -0
- package/docs/src/components/maz-lazy-img.md +24 -0
- package/docs/src/components/maz-link.md +156 -0
- package/docs/src/components/maz-loading-bar.md +26 -0
- package/docs/src/components/maz-pagination.md +81 -0
- package/docs/src/components/maz-popover.md +1414 -0
- package/docs/src/components/maz-pull-to-refresh.md +49 -0
- package/docs/src/components/maz-radio-buttons.md +456 -0
- package/docs/src/components/maz-radio.md +141 -0
- package/docs/src/components/maz-reading-progress-bar.md +74 -0
- package/docs/src/components/maz-select-country.md +636 -0
- package/docs/src/components/maz-select.md +439 -0
- package/docs/src/components/maz-slider.md +191 -0
- package/docs/src/components/maz-spinner.md +93 -0
- package/docs/src/components/maz-stepper.md +418 -0
- package/docs/src/components/maz-switch.md +92 -0
- package/docs/src/components/maz-table.md +571 -0
- package/docs/src/components/maz-tabs.md +231 -0
- package/docs/src/components/maz-textarea.md +218 -0
- package/docs/src/composables/use-aos.md +34 -0
- package/docs/src/composables/use-breakpoints.md +35 -0
- package/docs/src/composables/use-dialog.md +88 -0
- package/docs/src/composables/use-display-names.md +174 -0
- package/docs/src/composables/use-form-validator.md +1149 -0
- package/docs/src/composables/use-idle-timeout.md +256 -0
- package/docs/src/composables/use-reading-time.md +168 -0
- package/docs/src/composables/use-string-matching.md +63 -0
- package/docs/src/composables/use-swipe.md +223 -0
- package/docs/src/composables/use-timer.md +130 -0
- package/docs/src/composables/use-toast.md +71 -0
- package/docs/src/composables/use-user-visibility.md +169 -0
- package/docs/src/composables/use-wait.md +62 -0
- package/docs/src/composables/use-window-size.md +18 -0
- package/docs/src/demo/DemoAuthPage.vue +178 -0
- package/docs/src/demo/DemoDashboardPage.vue +298 -0
- package/docs/src/demo/DemoProductPage.vue +135 -0
- package/docs/src/directives/click-outside.md +275 -0
- package/docs/src/directives/fullscreen-img.md +101 -0
- package/docs/src/directives/lazy-img.md +184 -0
- package/docs/src/directives/tooltip.md +458 -0
- package/docs/src/directives/zoom-img.md +127 -0
- package/docs/src/guide/cli.md +144 -0
- package/docs/src/guide/getting-started.md +284 -0
- package/docs/src/guide/icon-set.md +60 -0
- package/docs/src/guide/icons.md +481 -0
- package/docs/src/guide/mcp.md +210 -0
- package/docs/src/guide/migration-v4.md +898 -0
- package/docs/src/guide/nuxt.md +411 -0
- package/docs/src/guide/resolvers.md +697 -0
- package/docs/src/guide/themes.md +789 -0
- package/docs/src/guide/translations.md +1173 -0
- package/docs/src/guide/vue.md +243 -0
- package/docs/src/helpers/camel-case.md +14 -0
- package/docs/src/helpers/capitalize.md +51 -0
- package/docs/src/helpers/check-availability.md +14 -0
- package/docs/src/helpers/country-code-to-unicode-flag.md +213 -0
- package/docs/src/helpers/currency.md +67 -0
- package/docs/src/helpers/date.md +67 -0
- package/docs/src/helpers/debounce-callback.md +14 -0
- package/docs/src/helpers/debounce-id.md +14 -0
- package/docs/src/helpers/debounce.md +14 -0
- package/docs/src/helpers/get-country-flag-url.md +156 -0
- package/docs/src/helpers/is-client.md +14 -0
- package/docs/src/helpers/is-equal.md +14 -0
- package/docs/src/helpers/is-standalone-mode.md +14 -0
- package/docs/src/helpers/kebab-case.md +14 -0
- package/docs/src/helpers/normalize-string.md +14 -0
- package/docs/src/helpers/number.md +65 -0
- package/docs/src/helpers/pascal-case.md +14 -0
- package/docs/src/helpers/script-loader.md +14 -0
- package/docs/src/helpers/sleep.md +14 -0
- package/docs/src/helpers/snake-case.md +14 -0
- package/docs/src/helpers/throttle-id.md +14 -0
- package/docs/src/helpers/throttle.md +14 -0
- package/docs/src/index.md +555 -0
- package/docs/src/made-with-maz-ui.md +58 -0
- package/docs/src/plugins/aos.md +347 -0
- package/docs/src/plugins/dialog.md +411 -0
- package/docs/src/plugins/toast.md +349 -0
- package/docs/src/plugins/wait.md +109 -0
- 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>
|