@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.
Files changed (136) hide show
  1. package/README.md +42 -0
  2. package/app/app.vue +7 -0
  3. package/app/assets/css/v-app.css +313 -0
  4. package/app/components/V/A/Badge.vue +75 -0
  5. package/app/components/V/A/Btn/Add.vue +17 -0
  6. package/app/components/V/A/Btn/Back.vue +25 -0
  7. package/app/components/V/A/Btn/ConfirmDelete.vue +45 -0
  8. package/app/components/V/A/Btn/Edit.vue +35 -0
  9. package/app/components/V/A/Btn/Export.vue +28 -0
  10. package/app/components/V/A/Btn/Refresh.vue +21 -0
  11. package/app/components/V/A/Btn/Submit.vue +45 -0
  12. package/app/components/V/A/Btn/View.vue +23 -0
  13. package/app/components/V/A/Card.legacy.vue +291 -0
  14. package/app/components/V/A/Card.vue +108 -0
  15. package/app/components/V/A/CompanyMenu.vue +83 -0
  16. package/app/components/V/A/Data/KeyValue.vue +98 -0
  17. package/app/components/V/A/Data/StatusBadge.vue +44 -0
  18. package/app/components/V/A/DataField.vue +140 -0
  19. package/app/components/V/A/DataGrid.vue +43 -0
  20. package/app/components/V/A/DataTable.vue +144 -0
  21. package/app/components/V/A/EmptyState.vue +154 -0
  22. package/app/components/V/A/Fmt/Currency.vue +36 -0
  23. package/app/components/V/A/Fmt/DateTime.vue +34 -0
  24. package/app/components/V/A/Fmt/Percent.vue +47 -0
  25. package/app/components/V/A/LoadingState.vue +140 -0
  26. package/app/components/V/A/MetricCard.vue +129 -0
  27. package/app/components/V/A/Modal/Base.vue +195 -0
  28. package/app/components/V/A/Modal/Confirm.vue +92 -0
  29. package/app/components/V/A/Modal/Form.vue +105 -0
  30. package/app/components/V/A/Navigation.vue +110 -0
  31. package/app/components/V/A/QuickActions.vue +169 -0
  32. package/app/components/V/A/Slide.vue +109 -0
  33. package/app/components/V/A/Slideover.vue +259 -0
  34. package/app/components/V/A/State/Empty.vue +20 -0
  35. package/app/components/V/A/State/Error.vue +34 -0
  36. package/app/components/V/A/State/Loading.vue +33 -0
  37. package/app/components/V/A/StatsCard.vue +215 -0
  38. package/app/components/V/A/StatusBadge.vue +215 -0
  39. package/app/components/V/A/Table.vue +674 -0
  40. package/app/components/V/A/UserMenu.vue +127 -0
  41. package/app/components/V/A/WelcomeHeader.vue +96 -0
  42. package/app/components/V/Modal.vue +36 -0
  43. package/app/components/Va/Blocks/VaBlockGridCharts.vue +32 -0
  44. package/app/components/Va/Blocks/VaBlockGridKPI.vue +32 -0
  45. package/app/components/Va/Blocks/VaBlockGridTables.vue +23 -0
  46. package/app/components/Va/Blocks/VaBlockKpiGrid.vue +8 -0
  47. package/app/components/Va/Blocks/VaBlockSessionFilterBar.vue +8 -0
  48. package/app/components/Va/Cards/VaCardDonutChart.vue +59 -0
  49. package/app/components/Va/Cards/VaCardHeader.vue +10 -0
  50. package/app/components/Va/Cards/VaCardKpi.vue +17 -0
  51. package/app/components/Va/Cards/VaCardKpi2.vue +55 -0
  52. package/app/components/Va/Cards/VaCardLatestOrders.vue +82 -0
  53. package/app/components/Va/Cards/VaCardPopularProducts.vue +88 -0
  54. package/app/components/Va/Cards/VaCardRevenueBarChart.vue +49 -0
  55. package/app/components/Va/Cards/VaCardSubtitle.vue +5 -0
  56. package/app/components/Va/Cards/VaCardTitle.vue +5 -0
  57. package/app/components/Va/Cards/VaCardWithActiveUsers.vue +41 -0
  58. package/app/components/Va/Cards/VaCardWithChart.vue +135 -0
  59. package/app/components/Va/Cards/VaCardWithChartBlock.vue +26 -0
  60. package/app/components/Va/Cards/VaCardWithIndicator.vue +39 -0
  61. package/app/components/Va/Cards/VaCardWithProgressCircle.vue +34 -0
  62. package/app/components/Va/Cards/types.ts +11 -0
  63. package/app/components/Va/Charts/VaChartAppPerformanceBar.vue +118 -0
  64. package/app/components/Va/Charts/VaChartAppPerformanceBarChart.vue +118 -0
  65. package/app/components/Va/Charts/VaChartAreaMini.vue +127 -0
  66. package/app/components/Va/Charts/VaChartBarMini.vue +68 -0
  67. package/app/components/Va/Charts/VaChartCardinalMulti.vue +108 -0
  68. package/app/components/Va/Charts/VaChartColorBarChart.vue +78 -0
  69. package/app/components/Va/Charts/VaChartDonutHalf.vue +35 -0
  70. package/app/components/Va/Charts/VaChartDonutMini.vue +77 -0
  71. package/app/components/Va/Charts/VaChartExpensesBar.vue +58 -0
  72. package/app/components/Va/Charts/VaChartFinanceSummary.vue +96 -0
  73. package/app/components/Va/Charts/VaChartGoogleSearchConsole.vue +90 -0
  74. package/app/components/Va/Charts/VaChartIncomeBar.vue +82 -0
  75. package/app/components/Va/Charts/VaChartLegend.vue +25 -0
  76. package/app/components/Va/Charts/VaChartLineMini.vue +205 -0
  77. package/app/components/Va/Charts/VaChartRealtimeTraffic.vue +182 -0
  78. package/app/components/Va/Charts/VaChartRevenue.vue +43 -0
  79. package/app/components/Va/Charts/VaChartRevenueLine.vue +42 -0
  80. package/app/components/Va/Charts/VaChartRevenuevsCost.vue +84 -0
  81. package/app/components/Va/Charts/VaChartSearchIntent.vue +179 -0
  82. package/app/components/Va/Charts/VaChartSpendingTrend.vue +127 -0
  83. package/app/components/Va/Charts/VaChartStackedHorizontal.vue +64 -0
  84. package/app/components/Va/Charts/VaChartStepMinimal.vue +109 -0
  85. package/app/components/Va/Charts/VaChartStockComparisonLine.vue +86 -0
  86. package/app/components/Va/Charts/VaChartStocksPortfolioLine.vue +161 -0
  87. package/app/components/Va/Charts/VaChartStocksSectorLine.vue +223 -0
  88. package/app/components/Va/Charts/VaChartTasksCategories.vue +96 -0
  89. package/app/components/Va/Charts/VaChartTasksProgress.vue +130 -0
  90. package/app/components/Va/Charts/VaChartTrafficOverview.vue +112 -0
  91. package/app/components/Va/Charts/VaChartWebPerformanceLineChart.vue +114 -0
  92. package/app/components/Va/Charts/VaChartWinLostBar.vue +110 -0
  93. package/app/components/Va/Charts/VaChartWinLostDonut.vue +107 -0
  94. package/app/components/Va/Charts/VaChartWinLostLine.vue +111 -0
  95. package/app/components/Va/Charts/types.ts +10 -0
  96. package/app/components/Va/Dashboard/Navigation/types.ts +8 -0
  97. package/app/components/Va/Dashboard/VaDashboardKPICard.vue +31 -0
  98. package/app/components/Va/Dashboard/VaDashboardNavigation.vue +50 -0
  99. package/app/components/Va/Dashboard/VaDashboardPricePlan.vue +102 -0
  100. package/app/components/Va/Dashboard/VaDashboardUsageChart.vue +84 -0
  101. package/app/components/Va/Dashboard/VaDashboardUsageRequestChart.vue +46 -0
  102. package/app/components/Va/Layout/NotificationsSlideover.vue +169 -0
  103. package/app/components/Va/Layout/SideNav/types.ts +5 -0
  104. package/app/components/Va/Layout/SideNav.vue +108 -0
  105. package/app/components/Va/Layout/TeamsMenu.vue +57 -0
  106. package/app/components/Va/Layout/UserMenu.vue +57 -0
  107. package/app/composables/useDashboard.ts +25 -0
  108. package/app/composables/useVAAnimation.ts +324 -0
  109. package/app/composables/useVAUtils.ts +118 -0
  110. package/app/composables/useVCrud.ts +647 -0
  111. package/app/composables/useVFetch.ts +46 -0
  112. package/app/composables/useVFileUpload.ts +45 -0
  113. package/app/composables/useVToast.ts +73 -0
  114. package/app/composables/useXATableColumns.ts +456 -0
  115. package/app/data/BillingStats.ts +65 -0
  116. package/app/data/SearchData.ts +58 -0
  117. package/app/data/TasksData.ts +101 -0
  118. package/app/data/dashboardData.ts +113 -0
  119. package/app/layouts/default.vue +171 -0
  120. package/app/layouts/legacy.vue +61 -0
  121. package/app/pages/playground/base.vue +498 -0
  122. package/app/pages/playground/blocks.vue +108 -0
  123. package/app/pages/playground/buttons.vue +237 -0
  124. package/app/pages/playground/cards.vue +326 -0
  125. package/app/pages/playground/charts.vue +338 -0
  126. package/app/pages/playground/dashboard.vue +315 -0
  127. package/app/pages/playground/formatters.vue +329 -0
  128. package/app/pages/playground/index.vue +109 -0
  129. package/app/pages/playground/layout.vue +159 -0
  130. package/app/pages/playground/modals.vue +606 -0
  131. package/app/pages/playground/states.vue +282 -0
  132. package/app/pages/playground/tables.vue +618 -0
  133. package/app/pages/test-layout.vue +10 -0
  134. package/nuxt.config.ts +12 -0
  135. package/package.json +71 -0
  136. 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>