@veristone/nuxt-v-app 0.1.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/README.md +42 -0
- package/app/app.vue +7 -0
- package/app/assets/css/v-app.css +313 -0
- package/app/components/V/A/Badge.vue +75 -0
- package/app/components/V/A/Btn/Add.vue +17 -0
- package/app/components/V/A/Btn/Back.vue +25 -0
- package/app/components/V/A/Btn/ConfirmDelete.vue +45 -0
- package/app/components/V/A/Btn/Edit.vue +35 -0
- package/app/components/V/A/Btn/Export.vue +28 -0
- package/app/components/V/A/Btn/Refresh.vue +21 -0
- package/app/components/V/A/Btn/Submit.vue +45 -0
- package/app/components/V/A/Btn/View.vue +23 -0
- package/app/components/V/A/Card.legacy.vue +291 -0
- package/app/components/V/A/Card.vue +108 -0
- package/app/components/V/A/CompanyMenu.vue +83 -0
- package/app/components/V/A/Data/KeyValue.vue +98 -0
- package/app/components/V/A/Data/StatusBadge.vue +44 -0
- package/app/components/V/A/DataField.vue +140 -0
- package/app/components/V/A/DataGrid.vue +43 -0
- package/app/components/V/A/DataTable.vue +144 -0
- package/app/components/V/A/EmptyState.vue +154 -0
- package/app/components/V/A/Fmt/Currency.vue +36 -0
- package/app/components/V/A/Fmt/DateTime.vue +34 -0
- package/app/components/V/A/Fmt/Percent.vue +47 -0
- package/app/components/V/A/LoadingState.vue +140 -0
- package/app/components/V/A/MetricCard.vue +129 -0
- package/app/components/V/A/Modal/Base.vue +195 -0
- package/app/components/V/A/Modal/Confirm.vue +92 -0
- package/app/components/V/A/Modal/Form.vue +105 -0
- package/app/components/V/A/Navigation.vue +110 -0
- package/app/components/V/A/QuickActions.vue +169 -0
- package/app/components/V/A/Slide.vue +109 -0
- package/app/components/V/A/Slideover.vue +259 -0
- package/app/components/V/A/State/Empty.vue +20 -0
- package/app/components/V/A/State/Error.vue +34 -0
- package/app/components/V/A/State/Loading.vue +33 -0
- package/app/components/V/A/StatsCard.vue +215 -0
- package/app/components/V/A/StatusBadge.vue +215 -0
- package/app/components/V/A/Table.vue +674 -0
- package/app/components/V/A/UserMenu.vue +127 -0
- package/app/components/V/A/WelcomeHeader.vue +96 -0
- package/app/components/V/Modal.vue +36 -0
- package/app/components/Va/Blocks/VaBlockGridCharts.vue +32 -0
- package/app/components/Va/Blocks/VaBlockGridKPI.vue +32 -0
- package/app/components/Va/Blocks/VaBlockGridTables.vue +23 -0
- package/app/components/Va/Blocks/VaBlockKpiGrid.vue +8 -0
- package/app/components/Va/Blocks/VaBlockSessionFilterBar.vue +8 -0
- package/app/components/Va/Cards/VaCardDonutChart.vue +59 -0
- package/app/components/Va/Cards/VaCardHeader.vue +10 -0
- package/app/components/Va/Cards/VaCardKpi.vue +17 -0
- package/app/components/Va/Cards/VaCardKpi2.vue +55 -0
- package/app/components/Va/Cards/VaCardLatestOrders.vue +82 -0
- package/app/components/Va/Cards/VaCardPopularProducts.vue +88 -0
- package/app/components/Va/Cards/VaCardRevenueBarChart.vue +49 -0
- package/app/components/Va/Cards/VaCardSubtitle.vue +5 -0
- package/app/components/Va/Cards/VaCardTitle.vue +5 -0
- package/app/components/Va/Cards/VaCardWithActiveUsers.vue +41 -0
- package/app/components/Va/Cards/VaCardWithChart.vue +135 -0
- package/app/components/Va/Cards/VaCardWithChartBlock.vue +26 -0
- package/app/components/Va/Cards/VaCardWithIndicator.vue +39 -0
- package/app/components/Va/Cards/VaCardWithProgressCircle.vue +34 -0
- package/app/components/Va/Cards/types.ts +11 -0
- package/app/components/Va/Charts/VaChartAppPerformanceBar.vue +118 -0
- package/app/components/Va/Charts/VaChartAppPerformanceBarChart.vue +118 -0
- package/app/components/Va/Charts/VaChartAreaMini.vue +127 -0
- package/app/components/Va/Charts/VaChartBarMini.vue +68 -0
- package/app/components/Va/Charts/VaChartCardinalMulti.vue +108 -0
- package/app/components/Va/Charts/VaChartColorBarChart.vue +78 -0
- package/app/components/Va/Charts/VaChartDonutHalf.vue +35 -0
- package/app/components/Va/Charts/VaChartDonutMini.vue +77 -0
- package/app/components/Va/Charts/VaChartExpensesBar.vue +58 -0
- package/app/components/Va/Charts/VaChartFinanceSummary.vue +96 -0
- package/app/components/Va/Charts/VaChartGoogleSearchConsole.vue +90 -0
- package/app/components/Va/Charts/VaChartIncomeBar.vue +82 -0
- package/app/components/Va/Charts/VaChartLegend.vue +25 -0
- package/app/components/Va/Charts/VaChartLineMini.vue +205 -0
- package/app/components/Va/Charts/VaChartRealtimeTraffic.vue +182 -0
- package/app/components/Va/Charts/VaChartRevenue.vue +43 -0
- package/app/components/Va/Charts/VaChartRevenueLine.vue +42 -0
- package/app/components/Va/Charts/VaChartRevenuevsCost.vue +84 -0
- package/app/components/Va/Charts/VaChartSearchIntent.vue +179 -0
- package/app/components/Va/Charts/VaChartSpendingTrend.vue +127 -0
- package/app/components/Va/Charts/VaChartStackedHorizontal.vue +64 -0
- package/app/components/Va/Charts/VaChartStepMinimal.vue +109 -0
- package/app/components/Va/Charts/VaChartStockComparisonLine.vue +86 -0
- package/app/components/Va/Charts/VaChartStocksPortfolioLine.vue +161 -0
- package/app/components/Va/Charts/VaChartStocksSectorLine.vue +223 -0
- package/app/components/Va/Charts/VaChartTasksCategories.vue +96 -0
- package/app/components/Va/Charts/VaChartTasksProgress.vue +130 -0
- package/app/components/Va/Charts/VaChartTrafficOverview.vue +112 -0
- package/app/components/Va/Charts/VaChartWebPerformanceLineChart.vue +114 -0
- package/app/components/Va/Charts/VaChartWinLostBar.vue +110 -0
- package/app/components/Va/Charts/VaChartWinLostDonut.vue +107 -0
- package/app/components/Va/Charts/VaChartWinLostLine.vue +111 -0
- package/app/components/Va/Charts/types.ts +10 -0
- package/app/components/Va/Dashboard/Navigation/types.ts +8 -0
- package/app/components/Va/Dashboard/VaDashboardKPICard.vue +31 -0
- package/app/components/Va/Dashboard/VaDashboardNavigation.vue +50 -0
- package/app/components/Va/Dashboard/VaDashboardPricePlan.vue +102 -0
- package/app/components/Va/Dashboard/VaDashboardUsageChart.vue +84 -0
- package/app/components/Va/Dashboard/VaDashboardUsageRequestChart.vue +46 -0
- package/app/components/Va/Layout/NotificationsSlideover.vue +169 -0
- package/app/components/Va/Layout/SideNav/types.ts +5 -0
- package/app/components/Va/Layout/SideNav.vue +108 -0
- package/app/components/Va/Layout/TeamsMenu.vue +57 -0
- package/app/components/Va/Layout/UserMenu.vue +57 -0
- package/app/composables/useDashboard.ts +25 -0
- package/app/composables/useVAAnimation.ts +324 -0
- package/app/composables/useVAUtils.ts +118 -0
- package/app/composables/useVCrud.ts +647 -0
- package/app/composables/useVFetch.ts +46 -0
- package/app/composables/useVFileUpload.ts +45 -0
- package/app/composables/useVToast.ts +73 -0
- package/app/composables/useXATableColumns.ts +456 -0
- package/app/data/BillingStats.ts +65 -0
- package/app/data/SearchData.ts +58 -0
- package/app/data/TasksData.ts +101 -0
- package/app/data/dashboardData.ts +113 -0
- package/app/layouts/default.vue +171 -0
- package/app/layouts/legacy.vue +61 -0
- package/app/pages/playground/base.vue +498 -0
- package/app/pages/playground/blocks.vue +108 -0
- package/app/pages/playground/buttons.vue +237 -0
- package/app/pages/playground/cards.vue +326 -0
- package/app/pages/playground/charts.vue +338 -0
- package/app/pages/playground/dashboard.vue +315 -0
- package/app/pages/playground/formatters.vue +329 -0
- package/app/pages/playground/index.vue +109 -0
- package/app/pages/playground/layout.vue +159 -0
- package/app/pages/playground/modals.vue +606 -0
- package/app/pages/playground/states.vue +282 -0
- package/app/pages/playground/tables.vue +618 -0
- package/app/pages/test-layout.vue +10 -0
- package/nuxt.config.ts +12 -0
- package/package.json +71 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
definePageMeta({
|
|
3
|
+
title: 'Modal Components'
|
|
4
|
+
})
|
|
5
|
+
|
|
6
|
+
// Modal states
|
|
7
|
+
const showInfoModal = ref(false)
|
|
8
|
+
const showWarningModal = ref(false)
|
|
9
|
+
const showDangerModal = ref(false)
|
|
10
|
+
const showFormModal = ref(false)
|
|
11
|
+
const isLoading = ref(false)
|
|
12
|
+
|
|
13
|
+
// Custom modal states
|
|
14
|
+
const showSmModal = ref(false)
|
|
15
|
+
const showMdModal = ref(false)
|
|
16
|
+
const showLgModal = ref(false)
|
|
17
|
+
const showXlModal = ref(false)
|
|
18
|
+
const showFullModal = ref(false)
|
|
19
|
+
|
|
20
|
+
// Custom slideover states
|
|
21
|
+
const showSmSlide = ref(false)
|
|
22
|
+
const showMdSlide = ref(false)
|
|
23
|
+
const showLgSlide = ref(false)
|
|
24
|
+
const showLeftSlide = ref(false)
|
|
25
|
+
|
|
26
|
+
// VModal state
|
|
27
|
+
const showVModal = ref(false)
|
|
28
|
+
|
|
29
|
+
const handleConfirm = () => {
|
|
30
|
+
isLoading.value = true
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
isLoading.value = false
|
|
33
|
+
showInfoModal.value = false
|
|
34
|
+
showWarningModal.value = false
|
|
35
|
+
showDangerModal.value = false
|
|
36
|
+
}, 1500)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const handleFormSubmit = (data: any) => {
|
|
40
|
+
console.log('Form submitted:', data)
|
|
41
|
+
}
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<template>
|
|
45
|
+
<UDashboardPanel grow>
|
|
46
|
+
<UContainer>
|
|
47
|
+
<div class="py-8">
|
|
48
|
+
<h1 class="text-3xl font-bold mb-4">Modal Components Showcase</h1>
|
|
49
|
+
<p class="text-gray-600 dark:text-gray-400 mb-8">
|
|
50
|
+
Modal dialogs and slideover panels for confirmations, forms, and detailed views.
|
|
51
|
+
</p>
|
|
52
|
+
|
|
53
|
+
<!-- VAModalConfirm Section -->
|
|
54
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAModalConfirm</h2>
|
|
55
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Confirmation modals with different variants.</p>
|
|
56
|
+
<div class="mb-8">
|
|
57
|
+
<UCard>
|
|
58
|
+
<div class="flex flex-wrap gap-4">
|
|
59
|
+
<UButton label="Info Confirm" color="blue" @click="showInfoModal = true" />
|
|
60
|
+
<UButton label="Warning Confirm" color="orange" @click="showWarningModal = true" />
|
|
61
|
+
<UButton label="Danger Confirm" color="red" @click="showDangerModal = true" />
|
|
62
|
+
</div>
|
|
63
|
+
</UCard>
|
|
64
|
+
|
|
65
|
+
<ClientOnly>
|
|
66
|
+
<VAModalConfirm
|
|
67
|
+
v-model="showInfoModal"
|
|
68
|
+
title="Confirm Action"
|
|
69
|
+
message="Are you sure you want to proceed with this action? This will apply the changes immediately."
|
|
70
|
+
variant="info"
|
|
71
|
+
confirm-text="Proceed"
|
|
72
|
+
:loading="isLoading"
|
|
73
|
+
@confirm="handleConfirm"
|
|
74
|
+
/>
|
|
75
|
+
</ClientOnly>
|
|
76
|
+
|
|
77
|
+
<ClientOnly>
|
|
78
|
+
<VAModalConfirm
|
|
79
|
+
v-model="showWarningModal"
|
|
80
|
+
title="Warning"
|
|
81
|
+
message="This action may have unintended consequences. Please review before proceeding."
|
|
82
|
+
variant="warning"
|
|
83
|
+
confirm-text="Continue Anyway"
|
|
84
|
+
:loading="isLoading"
|
|
85
|
+
@confirm="handleConfirm"
|
|
86
|
+
/>
|
|
87
|
+
</ClientOnly>
|
|
88
|
+
|
|
89
|
+
<ClientOnly>
|
|
90
|
+
<VAModalConfirm
|
|
91
|
+
v-model="showDangerModal"
|
|
92
|
+
title="Delete Item"
|
|
93
|
+
message="Are you sure you want to delete this item? This action cannot be undone."
|
|
94
|
+
variant="danger"
|
|
95
|
+
confirm-text="Delete"
|
|
96
|
+
:loading="isLoading"
|
|
97
|
+
@confirm="handleConfirm"
|
|
98
|
+
/>
|
|
99
|
+
</ClientOnly>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<!-- VAModalForm Section -->
|
|
103
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAModalForm</h2>
|
|
104
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Form modal for creating and editing records.</p>
|
|
105
|
+
<div class="mb-8">
|
|
106
|
+
<UCard>
|
|
107
|
+
<div class="flex flex-wrap gap-4">
|
|
108
|
+
<UButton label="Open Form Modal" color="primary" @click="showFormModal = true" />
|
|
109
|
+
</div>
|
|
110
|
+
</UCard>
|
|
111
|
+
|
|
112
|
+
<ClientOnly>
|
|
113
|
+
<VAModalForm
|
|
114
|
+
v-model="showFormModal"
|
|
115
|
+
title="Create New User"
|
|
116
|
+
@submit="handleFormSubmit"
|
|
117
|
+
>
|
|
118
|
+
<template #default="{ submit }">
|
|
119
|
+
<form @submit.prevent="submit" class="space-y-4">
|
|
120
|
+
<UFormField label="Full Name" required>
|
|
121
|
+
<UInput placeholder="Enter full name" />
|
|
122
|
+
</UFormField>
|
|
123
|
+
<UFormField label="Email Address" required>
|
|
124
|
+
<UInput type="email" placeholder="Enter email" />
|
|
125
|
+
</UFormField>
|
|
126
|
+
<UFormField label="Role">
|
|
127
|
+
<USelect
|
|
128
|
+
placeholder="Select role"
|
|
129
|
+
:items="[
|
|
130
|
+
{ label: 'Admin', value: 'admin' },
|
|
131
|
+
{ label: 'Editor', value: 'editor' },
|
|
132
|
+
{ label: 'Viewer', value: 'viewer' }
|
|
133
|
+
]"
|
|
134
|
+
/>
|
|
135
|
+
</UFormField>
|
|
136
|
+
<UFormField label="Notes">
|
|
137
|
+
<UTextarea placeholder="Any additional notes..." />
|
|
138
|
+
</UFormField>
|
|
139
|
+
<div class="flex justify-end gap-3 pt-4">
|
|
140
|
+
<UButton label="Cancel" color="gray" variant="ghost" @click="showFormModal = false" />
|
|
141
|
+
<UButton type="submit" label="Create User" color="primary" />
|
|
142
|
+
</div>
|
|
143
|
+
</form>
|
|
144
|
+
</template>
|
|
145
|
+
</VAModalForm>
|
|
146
|
+
</ClientOnly>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<!-- VModal Section -->
|
|
150
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VModal</h2>
|
|
151
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Simple modal wrapper using UModal component.</p>
|
|
152
|
+
<div class="mb-8">
|
|
153
|
+
<UCard>
|
|
154
|
+
<template #header>
|
|
155
|
+
<h3 class="font-semibold">Basic Modal</h3>
|
|
156
|
+
</template>
|
|
157
|
+
<div class="flex flex-wrap gap-4">
|
|
158
|
+
<UButton label="Open Modal" color="primary" @click="showVModal = true" />
|
|
159
|
+
</div>
|
|
160
|
+
</UCard>
|
|
161
|
+
|
|
162
|
+
<ClientOnly>
|
|
163
|
+
<VModal v-model="showVModal" title="Simple Modal">
|
|
164
|
+
<p class="text-gray-600 dark:text-gray-400">This is a simple modal using the VModal component.</p>
|
|
165
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">It's a lightweight wrapper around UModal for basic modal functionality.</p>
|
|
166
|
+
<template #footer>
|
|
167
|
+
<div class="flex justify-end gap-3">
|
|
168
|
+
<UButton label="Close" color="gray" variant="ghost" @click="showVModal = false" />
|
|
169
|
+
</div>
|
|
170
|
+
</template>
|
|
171
|
+
</VModal>
|
|
172
|
+
</ClientOnly>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<!-- VAModalBase Section (Custom) -->
|
|
176
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAModalBase (Custom)</h2>
|
|
177
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Custom modal component (not using UModal) with size variants and full accessibility.</p>
|
|
178
|
+
<div class="mb-8">
|
|
179
|
+
<UCard>
|
|
180
|
+
<template #header>
|
|
181
|
+
<h3 class="font-semibold">Size Variants</h3>
|
|
182
|
+
</template>
|
|
183
|
+
<div class="flex flex-wrap gap-4">
|
|
184
|
+
<UButton label="Small" @click="showSmModal = true" />
|
|
185
|
+
<UButton label="Medium" @click="showMdModal = true" />
|
|
186
|
+
<UButton label="Large" @click="showLgModal = true" />
|
|
187
|
+
<UButton label="Extra Large" @click="showXlModal = true" />
|
|
188
|
+
<UButton label="Full" @click="showFullModal = true" />
|
|
189
|
+
</div>
|
|
190
|
+
</UCard>
|
|
191
|
+
|
|
192
|
+
<ClientOnly>
|
|
193
|
+
<VAModalBase v-model="showSmModal" title="Small Modal" size="sm">
|
|
194
|
+
<p class="text-gray-600 dark:text-gray-400">This is a small modal (max-w-sm).</p>
|
|
195
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">Perfect for quick confirmations or simple messages.</p>
|
|
196
|
+
<template #footer>
|
|
197
|
+
<div class="flex justify-end gap-3">
|
|
198
|
+
<UButton label="Cancel" color="gray" variant="ghost" @click="showSmModal = false" />
|
|
199
|
+
<UButton label="Confirm" color="primary" @click="showSmModal = false" />
|
|
200
|
+
</div>
|
|
201
|
+
</template>
|
|
202
|
+
</VAModalBase>
|
|
203
|
+
</ClientOnly>
|
|
204
|
+
|
|
205
|
+
<ClientOnly>
|
|
206
|
+
<VAModalBase v-model="showMdModal" title="Medium Modal" size="md">
|
|
207
|
+
<p class="text-gray-600 dark:text-gray-400">This is a medium modal (max-w-md). The default size.</p>
|
|
208
|
+
<div class="mt-4 space-y-4">
|
|
209
|
+
<UFormField label="Name">
|
|
210
|
+
<UInput placeholder="Enter your name" />
|
|
211
|
+
</UFormField>
|
|
212
|
+
<UFormField label="Email">
|
|
213
|
+
<UInput type="email" placeholder="Enter your email" />
|
|
214
|
+
</UFormField>
|
|
215
|
+
</div>
|
|
216
|
+
<template #footer>
|
|
217
|
+
<div class="flex justify-end gap-3">
|
|
218
|
+
<UButton label="Cancel" color="gray" variant="ghost" @click="showMdModal = false" />
|
|
219
|
+
<UButton label="Save" color="primary" @click="showMdModal = false" />
|
|
220
|
+
</div>
|
|
221
|
+
</template>
|
|
222
|
+
</VAModalBase>
|
|
223
|
+
</ClientOnly>
|
|
224
|
+
|
|
225
|
+
<ClientOnly>
|
|
226
|
+
<VAModalBase v-model="showLgModal" title="Large Modal" size="lg">
|
|
227
|
+
<p class="text-gray-600 dark:text-gray-400">This is a large modal (max-w-lg).</p>
|
|
228
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">Good for forms with more fields or content that needs more space.</p>
|
|
229
|
+
<div class="mt-4 grid grid-cols-2 gap-4">
|
|
230
|
+
<UFormField label="First Name">
|
|
231
|
+
<UInput placeholder="First name" />
|
|
232
|
+
</UFormField>
|
|
233
|
+
<UFormField label="Last Name">
|
|
234
|
+
<UInput placeholder="Last name" />
|
|
235
|
+
</UFormField>
|
|
236
|
+
<UFormField label="Email">
|
|
237
|
+
<UInput type="email" placeholder="Email" />
|
|
238
|
+
</UFormField>
|
|
239
|
+
<UFormField label="Phone">
|
|
240
|
+
<UInput type="tel" placeholder="Phone" />
|
|
241
|
+
</UFormField>
|
|
242
|
+
</div>
|
|
243
|
+
<template #footer>
|
|
244
|
+
<div class="flex justify-end gap-3">
|
|
245
|
+
<UButton label="Cancel" color="gray" variant="ghost" @click="showLgModal = false" />
|
|
246
|
+
<UButton label="Save" color="primary" @click="showLgModal = false" />
|
|
247
|
+
</div>
|
|
248
|
+
</template>
|
|
249
|
+
</VAModalBase>
|
|
250
|
+
</ClientOnly>
|
|
251
|
+
|
|
252
|
+
<ClientOnly>
|
|
253
|
+
<VAModalBase v-model="showXlModal" title="Extra Large Modal" size="xl">
|
|
254
|
+
<p class="text-gray-600 dark:text-gray-400">This is an extra large modal (max-w-2xl).</p>
|
|
255
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">Ideal for complex forms, data displays, or content requiring significant horizontal space.</p>
|
|
256
|
+
<div class="mt-4 grid grid-cols-3 gap-4">
|
|
257
|
+
<UFormField label="Field 1"><UInput placeholder="Value" /></UFormField>
|
|
258
|
+
<UFormField label="Field 2"><UInput placeholder="Value" /></UFormField>
|
|
259
|
+
<UFormField label="Field 3"><UInput placeholder="Value" /></UFormField>
|
|
260
|
+
<UFormField label="Field 4"><UInput placeholder="Value" /></UFormField>
|
|
261
|
+
<UFormField label="Field 5"><UInput placeholder="Value" /></UFormField>
|
|
262
|
+
<UFormField label="Field 6"><UInput placeholder="Value" /></UFormField>
|
|
263
|
+
</div>
|
|
264
|
+
<template #footer>
|
|
265
|
+
<div class="flex justify-end gap-3">
|
|
266
|
+
<UButton label="Cancel" color="gray" variant="ghost" @click="showXlModal = false" />
|
|
267
|
+
<UButton label="Save" color="primary" @click="showXlModal = false" />
|
|
268
|
+
</div>
|
|
269
|
+
</template>
|
|
270
|
+
</VAModalBase>
|
|
271
|
+
</ClientOnly>
|
|
272
|
+
|
|
273
|
+
<ClientOnly>
|
|
274
|
+
<VAModalBase v-model="showFullModal" title="Full Screen Modal" size="full">
|
|
275
|
+
<p class="text-gray-600 dark:text-gray-400">This is a full-width modal that takes up most of the viewport.</p>
|
|
276
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">Use for complex workflows, data tables, or when maximum screen real estate is needed.</p>
|
|
277
|
+
<div class="mt-6 p-4 bg-gray-100 dark:bg-gray-800 rounded-lg">
|
|
278
|
+
<p class="text-sm text-gray-500">Content area - this modal scales to fill the available space.</p>
|
|
279
|
+
</div>
|
|
280
|
+
<template #footer>
|
|
281
|
+
<div class="flex justify-end gap-3">
|
|
282
|
+
<UButton label="Close" color="gray" variant="ghost" @click="showFullModal = false" />
|
|
283
|
+
</div>
|
|
284
|
+
</template>
|
|
285
|
+
</VAModalBase>
|
|
286
|
+
</ClientOnly>
|
|
287
|
+
</div>
|
|
288
|
+
|
|
289
|
+
<!-- VASlideover Section (Custom) -->
|
|
290
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VASlideover (Custom)</h2>
|
|
291
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Custom slideover component (not using USlideover) with custom transitions.</p>
|
|
292
|
+
<div class="mb-8">
|
|
293
|
+
<UCard>
|
|
294
|
+
<template #header>
|
|
295
|
+
<h3 class="font-semibold">Size Variants & Positioning</h3>
|
|
296
|
+
</template>
|
|
297
|
+
<div class="flex flex-wrap gap-4">
|
|
298
|
+
<UButton label="Small Right" @click="showSmSlide = true" />
|
|
299
|
+
<UButton label="Medium Right" @click="showMdSlide = true" />
|
|
300
|
+
<UButton label="Large Right" @click="showLgSlide = true" />
|
|
301
|
+
<UButton label="Medium Left" color="gray" variant="outline" @click="showLeftSlide = true" />
|
|
302
|
+
</div>
|
|
303
|
+
</UCard>
|
|
304
|
+
|
|
305
|
+
<ClientOnly>
|
|
306
|
+
<VASlideover v-model="showSmSlide" title="Small Slideover" size="sm">
|
|
307
|
+
<p class="text-gray-600 dark:text-gray-400">This is a small slideover (w-80).</p>
|
|
308
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">Good for quick settings or filters.</p>
|
|
309
|
+
</VASlideover>
|
|
310
|
+
</ClientOnly>
|
|
311
|
+
|
|
312
|
+
<ClientOnly>
|
|
313
|
+
<VASlideover v-model="showMdSlide" title="Medium Slideover" size="md">
|
|
314
|
+
<p class="text-gray-600 dark:text-gray-400">This is a medium slideover (w-96).</p>
|
|
315
|
+
<div class="mt-4 space-y-4">
|
|
316
|
+
<UFormField label="Name">
|
|
317
|
+
<UInput placeholder="Enter name" />
|
|
318
|
+
</UFormField>
|
|
319
|
+
<UFormField label="Description">
|
|
320
|
+
<UTextarea placeholder="Enter description" />
|
|
321
|
+
</UFormField>
|
|
322
|
+
</div>
|
|
323
|
+
<template #footer>
|
|
324
|
+
<div class="flex justify-end gap-3">
|
|
325
|
+
<UButton label="Cancel" color="gray" variant="ghost" @click="showMdSlide = false" />
|
|
326
|
+
<UButton label="Save" color="primary" @click="showMdSlide = false" />
|
|
327
|
+
</div>
|
|
328
|
+
</template>
|
|
329
|
+
</VASlideover>
|
|
330
|
+
</ClientOnly>
|
|
331
|
+
|
|
332
|
+
<ClientOnly>
|
|
333
|
+
<VASlideover v-model="showLgSlide" title="Large Slideover" size="lg">
|
|
334
|
+
<p class="text-gray-600 dark:text-gray-400">This is a large slideover (w-[32rem]).</p>
|
|
335
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">Ideal for detailed forms or data views.</p>
|
|
336
|
+
<div class="mt-4 grid grid-cols-2 gap-4">
|
|
337
|
+
<UFormField label="First Name">
|
|
338
|
+
<UInput placeholder="First name" />
|
|
339
|
+
</UFormField>
|
|
340
|
+
<UFormField label="Last Name">
|
|
341
|
+
<UInput placeholder="Last name" />
|
|
342
|
+
</UFormField>
|
|
343
|
+
<UFormField label="Email">
|
|
344
|
+
<UInput type="email" placeholder="Email" />
|
|
345
|
+
</UFormField>
|
|
346
|
+
<UFormField label="Phone">
|
|
347
|
+
<UInput type="tel" placeholder="Phone" />
|
|
348
|
+
</UFormField>
|
|
349
|
+
</div>
|
|
350
|
+
<template #footer>
|
|
351
|
+
<div class="flex justify-end gap-3">
|
|
352
|
+
<UButton label="Cancel" color="gray" variant="ghost" @click="showLgSlide = false" />
|
|
353
|
+
<UButton label="Save" color="primary" @click="showLgSlide = false" />
|
|
354
|
+
</div>
|
|
355
|
+
</template>
|
|
356
|
+
</VASlideover>
|
|
357
|
+
</ClientOnly>
|
|
358
|
+
|
|
359
|
+
<ClientOnly>
|
|
360
|
+
<VASlideover v-model="showLeftSlide" title="Left Slideover" size="md" side="left">
|
|
361
|
+
<p class="text-gray-600 dark:text-gray-400">This slideover opens from the left side.</p>
|
|
362
|
+
<p class="mt-2 text-gray-600 dark:text-gray-400">Useful for navigation panels or secondary menus.</p>
|
|
363
|
+
<div class="mt-4 space-y-2">
|
|
364
|
+
<UButton label="Dashboard" color="gray" variant="ghost" block class="justify-start" icon="i-lucide-home" />
|
|
365
|
+
<UButton label="Analytics" color="gray" variant="ghost" block class="justify-start" icon="i-lucide-bar-chart-3" />
|
|
366
|
+
<UButton label="Settings" color="gray" variant="ghost" block class="justify-start" icon="i-lucide-settings" />
|
|
367
|
+
</div>
|
|
368
|
+
</VASlideover>
|
|
369
|
+
</ClientOnly>
|
|
370
|
+
</div>
|
|
371
|
+
|
|
372
|
+
<!-- VASlide Section -->
|
|
373
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VASlide</h2>
|
|
374
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Slideover panels for detailed views and forms.</p>
|
|
375
|
+
<div class="mb-8">
|
|
376
|
+
<UCard>
|
|
377
|
+
<template #header>
|
|
378
|
+
<h3 class="font-semibold">Right Side Slidevers (Default)</h3>
|
|
379
|
+
</template>
|
|
380
|
+
<div class="flex flex-wrap gap-4">
|
|
381
|
+
<ClientOnly>
|
|
382
|
+
<VASlide
|
|
383
|
+
title="Small Slideover"
|
|
384
|
+
size="sm"
|
|
385
|
+
trigger-label="Small"
|
|
386
|
+
trigger-variant="outline"
|
|
387
|
+
>
|
|
388
|
+
<p class="text-gray-600 dark:text-gray-400">This is a small slideover panel.</p>
|
|
389
|
+
<p class="mt-4 text-gray-600 dark:text-gray-400">Perfect for quick actions or minimal content.</p>
|
|
390
|
+
</VASlide>
|
|
391
|
+
</ClientOnly>
|
|
392
|
+
|
|
393
|
+
<ClientOnly>
|
|
394
|
+
<VASlide
|
|
395
|
+
title="Medium Slideover"
|
|
396
|
+
size="md"
|
|
397
|
+
trigger-label="Medium"
|
|
398
|
+
trigger-variant="outline"
|
|
399
|
+
>
|
|
400
|
+
<p class="text-gray-600 dark:text-gray-400">This is a medium slideover panel.</p>
|
|
401
|
+
<p class="mt-4 text-gray-600 dark:text-gray-400">Good for forms and detailed information.</p>
|
|
402
|
+
<div class="mt-6 space-y-4">
|
|
403
|
+
<UFormField label="Name">
|
|
404
|
+
<UInput placeholder="Enter name" />
|
|
405
|
+
</UFormField>
|
|
406
|
+
<UFormField label="Description">
|
|
407
|
+
<UTextarea placeholder="Enter description" />
|
|
408
|
+
</UFormField>
|
|
409
|
+
</div>
|
|
410
|
+
</VASlide>
|
|
411
|
+
</ClientOnly>
|
|
412
|
+
|
|
413
|
+
<ClientOnly>
|
|
414
|
+
<VASlide
|
|
415
|
+
title="Large Slideover"
|
|
416
|
+
size="lg"
|
|
417
|
+
trigger-label="Large"
|
|
418
|
+
trigger-variant="outline"
|
|
419
|
+
>
|
|
420
|
+
<p class="text-gray-600 dark:text-gray-400">This is a large slideover panel.</p>
|
|
421
|
+
<p class="mt-4 text-gray-600 dark:text-gray-400">Ideal for complex forms or data views.</p>
|
|
422
|
+
<div class="mt-6 grid grid-cols-2 gap-4">
|
|
423
|
+
<UFormField label="First Name">
|
|
424
|
+
<UInput placeholder="First name" />
|
|
425
|
+
</UFormField>
|
|
426
|
+
<UFormField label="Last Name">
|
|
427
|
+
<UInput placeholder="Last name" />
|
|
428
|
+
</UFormField>
|
|
429
|
+
<UFormField label="Email">
|
|
430
|
+
<UInput type="email" placeholder="Email" />
|
|
431
|
+
</UFormField>
|
|
432
|
+
<UFormField label="Phone">
|
|
433
|
+
<UInput type="tel" placeholder="Phone" />
|
|
434
|
+
</UFormField>
|
|
435
|
+
</div>
|
|
436
|
+
</VASlide>
|
|
437
|
+
</ClientOnly>
|
|
438
|
+
|
|
439
|
+
<ClientOnly>
|
|
440
|
+
<VASlide
|
|
441
|
+
title="Extra Large Slideover"
|
|
442
|
+
size="xl"
|
|
443
|
+
trigger-label="Extra Large"
|
|
444
|
+
trigger-variant="outline"
|
|
445
|
+
>
|
|
446
|
+
<p class="text-gray-600 dark:text-gray-400">This is an extra large slideover panel.</p>
|
|
447
|
+
<p class="mt-4 text-gray-600 dark:text-gray-400">Best for complex workflows with multiple sections.</p>
|
|
448
|
+
<div class="mt-6">
|
|
449
|
+
<div class="grid grid-cols-3 gap-4">
|
|
450
|
+
<UFormField label="Field 1">
|
|
451
|
+
<UInput placeholder="Value" />
|
|
452
|
+
</UFormField>
|
|
453
|
+
<UFormField label="Field 2">
|
|
454
|
+
<UInput placeholder="Value" />
|
|
455
|
+
</UFormField>
|
|
456
|
+
<UFormField label="Field 3">
|
|
457
|
+
<UInput placeholder="Value" />
|
|
458
|
+
</UFormField>
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
</VASlide>
|
|
462
|
+
</ClientOnly>
|
|
463
|
+
</div>
|
|
464
|
+
</UCard>
|
|
465
|
+
|
|
466
|
+
<UCard class="mt-4">
|
|
467
|
+
<template #header>
|
|
468
|
+
<h3 class="font-semibold">Left Side Slideover</h3>
|
|
469
|
+
</template>
|
|
470
|
+
<div class="flex flex-wrap gap-4">
|
|
471
|
+
<ClientOnly>
|
|
472
|
+
<VASlide
|
|
473
|
+
title="Left Slideover"
|
|
474
|
+
size="md"
|
|
475
|
+
side="left"
|
|
476
|
+
trigger-label="Open Left"
|
|
477
|
+
trigger-variant="soft"
|
|
478
|
+
>
|
|
479
|
+
<p class="text-gray-600 dark:text-gray-400">This slideover opens from the left side.</p>
|
|
480
|
+
<p class="mt-4 text-gray-600 dark:text-gray-400">Useful for navigation or filter panels.</p>
|
|
481
|
+
</VASlide>
|
|
482
|
+
</ClientOnly>
|
|
483
|
+
</div>
|
|
484
|
+
</UCard>
|
|
485
|
+
|
|
486
|
+
<UCard class="mt-4">
|
|
487
|
+
<template #header>
|
|
488
|
+
<h3 class="font-semibold">Slideover with Footer</h3>
|
|
489
|
+
</template>
|
|
490
|
+
<div class="flex flex-wrap gap-4">
|
|
491
|
+
<ClientOnly>
|
|
492
|
+
<VASlide
|
|
493
|
+
title="Form Slideover"
|
|
494
|
+
size="md"
|
|
495
|
+
trigger-label="With Footer"
|
|
496
|
+
trigger-color="green"
|
|
497
|
+
>
|
|
498
|
+
<div class="space-y-4">
|
|
499
|
+
<UFormField label="Project Name" required>
|
|
500
|
+
<UInput placeholder="Enter project name" />
|
|
501
|
+
</UFormField>
|
|
502
|
+
<UFormField label="Description">
|
|
503
|
+
<UTextarea placeholder="Describe your project" />
|
|
504
|
+
</UFormField>
|
|
505
|
+
<UFormField label="Priority">
|
|
506
|
+
<USelect
|
|
507
|
+
placeholder="Select priority"
|
|
508
|
+
:items="[
|
|
509
|
+
{ label: 'High', value: 'high' },
|
|
510
|
+
{ label: 'Medium', value: 'medium' },
|
|
511
|
+
{ label: 'Low', value: 'low' }
|
|
512
|
+
]"
|
|
513
|
+
/>
|
|
514
|
+
</UFormField>
|
|
515
|
+
</div>
|
|
516
|
+
<template #footer>
|
|
517
|
+
<div class="flex justify-end gap-3">
|
|
518
|
+
<UButton label="Cancel" color="gray" variant="ghost" />
|
|
519
|
+
<UButton label="Save Project" color="primary" />
|
|
520
|
+
</div>
|
|
521
|
+
</template>
|
|
522
|
+
</VASlide>
|
|
523
|
+
</ClientOnly>
|
|
524
|
+
</div>
|
|
525
|
+
</UCard>
|
|
526
|
+
|
|
527
|
+
<UCard class="mt-4">
|
|
528
|
+
<template #header>
|
|
529
|
+
<h3 class="font-semibold">Icon-Only Trigger</h3>
|
|
530
|
+
</template>
|
|
531
|
+
<div class="flex flex-wrap gap-4">
|
|
532
|
+
<ClientOnly>
|
|
533
|
+
<VASlide
|
|
534
|
+
title="Settings"
|
|
535
|
+
size="sm"
|
|
536
|
+
trigger-icon="i-lucide-settings"
|
|
537
|
+
trigger-variant="ghost"
|
|
538
|
+
>
|
|
539
|
+
<div class="space-y-4">
|
|
540
|
+
<div class="flex items-center justify-between">
|
|
541
|
+
<span>Dark Mode</span>
|
|
542
|
+
<UToggle />
|
|
543
|
+
</div>
|
|
544
|
+
<div class="flex items-center justify-between">
|
|
545
|
+
<span>Notifications</span>
|
|
546
|
+
<UToggle />
|
|
547
|
+
</div>
|
|
548
|
+
<div class="flex items-center justify-between">
|
|
549
|
+
<span>Auto-save</span>
|
|
550
|
+
<UToggle />
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
553
|
+
</VASlide>
|
|
554
|
+
</ClientOnly>
|
|
555
|
+
|
|
556
|
+
<ClientOnly>
|
|
557
|
+
<VASlide
|
|
558
|
+
title="Filter Options"
|
|
559
|
+
size="sm"
|
|
560
|
+
trigger-icon="i-lucide-filter"
|
|
561
|
+
trigger-variant="outline"
|
|
562
|
+
>
|
|
563
|
+
<div class="space-y-4">
|
|
564
|
+
<UFormField label="Status">
|
|
565
|
+
<USelect
|
|
566
|
+
placeholder="All statuses"
|
|
567
|
+
:items="[
|
|
568
|
+
{ label: 'Active', value: 'active' },
|
|
569
|
+
{ label: 'Pending', value: 'pending' },
|
|
570
|
+
{ label: 'Archived', value: 'archived' }
|
|
571
|
+
]"
|
|
572
|
+
/>
|
|
573
|
+
</UFormField>
|
|
574
|
+
<UFormField label="Date Range">
|
|
575
|
+
<UInput type="date" />
|
|
576
|
+
</UFormField>
|
|
577
|
+
</div>
|
|
578
|
+
</VASlide>
|
|
579
|
+
</ClientOnly>
|
|
580
|
+
|
|
581
|
+
<ClientOnly>
|
|
582
|
+
<VASlide
|
|
583
|
+
title="Help & Support"
|
|
584
|
+
size="md"
|
|
585
|
+
trigger-icon="i-lucide-help-circle"
|
|
586
|
+
trigger-color="neutral"
|
|
587
|
+
trigger-variant="soft"
|
|
588
|
+
>
|
|
589
|
+
<div class="space-y-4">
|
|
590
|
+
<p class="text-gray-600 dark:text-gray-400">Need help? Here are some resources:</p>
|
|
591
|
+
<ul class="list-disc list-inside space-y-2 text-gray-600 dark:text-gray-400">
|
|
592
|
+
<li>Documentation</li>
|
|
593
|
+
<li>Video Tutorials</li>
|
|
594
|
+
<li>Community Forum</li>
|
|
595
|
+
<li>Contact Support</li>
|
|
596
|
+
</ul>
|
|
597
|
+
</div>
|
|
598
|
+
</VASlide>
|
|
599
|
+
</ClientOnly>
|
|
600
|
+
</div>
|
|
601
|
+
</UCard>
|
|
602
|
+
</div>
|
|
603
|
+
</div>
|
|
604
|
+
</UContainer>
|
|
605
|
+
</UDashboardPanel>
|
|
606
|
+
</template>
|