@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,329 @@
1
+ <script setup lang="ts">
2
+ definePageMeta({
3
+ title: 'Formatter Components'
4
+ })
5
+ </script>
6
+
7
+ <template>
8
+ <UDashboardPanel grow>
9
+ <UContainer>
10
+ <div class="py-8">
11
+ <h1 class="text-3xl font-bold mb-4">Formatter Components Showcase</h1>
12
+ <p class="text-gray-600 dark:text-gray-400 mb-8">
13
+ Data formatting components for currency, dates, percentages, and key-value displays.
14
+ </p>
15
+
16
+ <!-- VAFmtCurrency Section -->
17
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VAFmtCurrency</h2>
18
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Format numbers as currency with locale support.</p>
19
+ <div class="mb-8">
20
+ <UCard>
21
+ <template #header>
22
+ <h3 class="font-semibold">Currency Formatting Examples</h3>
23
+ </template>
24
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-6">
25
+ <div>
26
+ <p class="text-sm text-gray-500 mb-1">Default (USD)</p>
27
+ <p class="text-lg font-semibold">
28
+ <ClientOnly><VAFmtCurrency :value="1234.56" /></ClientOnly>
29
+ </p>
30
+ </div>
31
+ <div>
32
+ <p class="text-sm text-gray-500 mb-1">Large Amount</p>
33
+ <p class="text-lg font-semibold">
34
+ <ClientOnly><VAFmtCurrency :value="1250000" /></ClientOnly>
35
+ </p>
36
+ </div>
37
+ <div>
38
+ <p class="text-sm text-gray-500 mb-1">Euro</p>
39
+ <p class="text-lg font-semibold">
40
+ <ClientOnly><VAFmtCurrency :value="1234.56" currency="EUR" locale="de-DE" /></ClientOnly>
41
+ </p>
42
+ </div>
43
+ <div>
44
+ <p class="text-sm text-gray-500 mb-1">GBP</p>
45
+ <p class="text-lg font-semibold">
46
+ <ClientOnly><VAFmtCurrency :value="1234.56" currency="GBP" locale="en-GB" /></ClientOnly>
47
+ </p>
48
+ </div>
49
+ <div>
50
+ <p class="text-sm text-gray-500 mb-1">With Sign (Positive)</p>
51
+ <p class="text-lg font-semibold">
52
+ <ClientOnly><VAFmtCurrency :value="500" :show-sign="true" :colorize="true" /></ClientOnly>
53
+ </p>
54
+ </div>
55
+ <div>
56
+ <p class="text-sm text-gray-500 mb-1">With Sign (Negative)</p>
57
+ <p class="text-lg font-semibold">
58
+ <ClientOnly><VAFmtCurrency :value="-350.25" :show-sign="true" :colorize="true" /></ClientOnly>
59
+ </p>
60
+ </div>
61
+ <div>
62
+ <p class="text-sm text-gray-500 mb-1">Colorized Positive</p>
63
+ <p class="text-lg font-semibold">
64
+ <ClientOnly><VAFmtCurrency :value="2500" :colorize="true" /></ClientOnly>
65
+ </p>
66
+ </div>
67
+ <div>
68
+ <p class="text-sm text-gray-500 mb-1">Colorized Negative</p>
69
+ <p class="text-lg font-semibold">
70
+ <ClientOnly><VAFmtCurrency :value="-1200" :colorize="true" /></ClientOnly>
71
+ </p>
72
+ </div>
73
+ </div>
74
+ </UCard>
75
+ </div>
76
+
77
+ <!-- VAFmtDateTime Section -->
78
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VAFmtDateTime</h2>
79
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Format dates and times with various display options.</p>
80
+ <div class="mb-8">
81
+ <UCard>
82
+ <template #header>
83
+ <h3 class="font-semibold">Date & Time Formatting Examples</h3>
84
+ </template>
85
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-6">
86
+ <div>
87
+ <p class="text-sm text-gray-500 mb-1">Short Format</p>
88
+ <p class="text-lg font-semibold">
89
+ <ClientOnly><VAFmtDateTime :value="new Date()" format="short" /></ClientOnly>
90
+ </p>
91
+ </div>
92
+ <div>
93
+ <p class="text-sm text-gray-500 mb-1">Long Format</p>
94
+ <p class="text-lg font-semibold">
95
+ <ClientOnly><VAFmtDateTime :value="new Date()" format="long" /></ClientOnly>
96
+ </p>
97
+ </div>
98
+ <div>
99
+ <p class="text-sm text-gray-500 mb-1">Full Format</p>
100
+ <p class="text-lg font-semibold">
101
+ <ClientOnly><VAFmtDateTime :value="new Date()" format="full" /></ClientOnly>
102
+ </p>
103
+ </div>
104
+ <div>
105
+ <p class="text-sm text-gray-500 mb-1">With Time</p>
106
+ <p class="text-lg font-semibold">
107
+ <ClientOnly><VAFmtDateTime :value="new Date()" format="short" :show-time="true" /></ClientOnly>
108
+ </p>
109
+ </div>
110
+ <div>
111
+ <p class="text-sm text-gray-500 mb-1">ISO String Input</p>
112
+ <p class="text-lg font-semibold">
113
+ <ClientOnly><VAFmtDateTime value="2024-06-15T14:30:00Z" format="long" /></ClientOnly>
114
+ </p>
115
+ </div>
116
+ <div>
117
+ <p class="text-sm text-gray-500 mb-1">Timestamp Input</p>
118
+ <p class="text-lg font-semibold">
119
+ <ClientOnly><VAFmtDateTime :value="1718451000000" format="short" /></ClientOnly>
120
+ </p>
121
+ </div>
122
+ <div>
123
+ <p class="text-sm text-gray-500 mb-1">Full with Time</p>
124
+ <p class="text-lg font-semibold">
125
+ <ClientOnly><VAFmtDateTime :value="new Date()" format="full" :show-time="true" /></ClientOnly>
126
+ </p>
127
+ </div>
128
+ <div>
129
+ <p class="text-sm text-gray-500 mb-1">Empty Value</p>
130
+ <p class="text-lg font-semibold">
131
+ <ClientOnly><VAFmtDateTime :value="null" /></ClientOnly>
132
+ </p>
133
+ </div>
134
+ </div>
135
+ </UCard>
136
+ </div>
137
+
138
+ <!-- VAFmtPercent Section -->
139
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VAFmtPercent</h2>
140
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Format decimal values as percentages.</p>
141
+ <div class="mb-8">
142
+ <UCard>
143
+ <template #header>
144
+ <h3 class="font-semibold">Percentage Formatting Examples</h3>
145
+ </template>
146
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-6">
147
+ <div>
148
+ <p class="text-sm text-gray-500 mb-1">Standard (0.5 → 50%)</p>
149
+ <p class="text-lg font-semibold">
150
+ <ClientOnly><VAFmtPercent :value="0.5" /></ClientOnly>
151
+ </p>
152
+ </div>
153
+ <div>
154
+ <p class="text-sm text-gray-500 mb-1">Small Value</p>
155
+ <p class="text-lg font-semibold">
156
+ <ClientOnly><VAFmtPercent :value="0.0234" :decimals="2" /></ClientOnly>
157
+ </p>
158
+ </div>
159
+ <div>
160
+ <p class="text-sm text-gray-500 mb-1">Large Value</p>
161
+ <p class="text-lg font-semibold">
162
+ <ClientOnly><VAFmtPercent :value="1.5" /></ClientOnly>
163
+ </p>
164
+ </div>
165
+ <div>
166
+ <p class="text-sm text-gray-500 mb-1">No Decimals</p>
167
+ <p class="text-lg font-semibold">
168
+ <ClientOnly><VAFmtPercent :value="0.7532" :decimals="0" /></ClientOnly>
169
+ </p>
170
+ </div>
171
+ <div>
172
+ <p class="text-sm text-gray-500 mb-1">Positive with Sign</p>
173
+ <p class="text-lg font-semibold">
174
+ <ClientOnly><VAFmtPercent :value="0.125" :show-sign="true" :colorize="true" /></ClientOnly>
175
+ </p>
176
+ </div>
177
+ <div>
178
+ <p class="text-sm text-gray-500 mb-1">Negative with Sign</p>
179
+ <p class="text-lg font-semibold">
180
+ <ClientOnly><VAFmtPercent :value="-0.08" :show-sign="true" :colorize="true" /></ClientOnly>
181
+ </p>
182
+ </div>
183
+ <div>
184
+ <p class="text-sm text-gray-500 mb-1">Colorized Positive</p>
185
+ <p class="text-lg font-semibold">
186
+ <ClientOnly><VAFmtPercent :value="0.25" :colorize="true" /></ClientOnly>
187
+ </p>
188
+ </div>
189
+ <div>
190
+ <p class="text-sm text-gray-500 mb-1">Colorized Negative</p>
191
+ <p class="text-lg font-semibold">
192
+ <ClientOnly><VAFmtPercent :value="-0.15" :colorize="true" /></ClientOnly>
193
+ </p>
194
+ </div>
195
+ </div>
196
+ </UCard>
197
+ </div>
198
+
199
+ <!-- VADataKeyValue Section -->
200
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VADataKeyValue</h2>
201
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Key-value pair display with various types and layouts.</p>
202
+ <div class="mb-8">
203
+ <UCard>
204
+ <template #header>
205
+ <h3 class="font-semibold">Vertical Layout (Default)</h3>
206
+ </template>
207
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-6">
208
+ <ClientOnly>
209
+ <VADataKeyValue label="Name" value="John Doe" />
210
+ </ClientOnly>
211
+ <ClientOnly>
212
+ <VADataKeyValue label="Email" value="john@example.com" type="text" icon="i-lucide-mail" />
213
+ </ClientOnly>
214
+ <ClientOnly>
215
+ <VADataKeyValue label="Status" value="Active" type="badge" badge-color="green" />
216
+ </ClientOnly>
217
+ <ClientOnly>
218
+ <VADataKeyValue label="Premium" :value="true" type="boolean" />
219
+ </ClientOnly>
220
+ </div>
221
+ </UCard>
222
+
223
+ <UCard class="mt-4">
224
+ <template #header>
225
+ <h3 class="font-semibold">Horizontal Layout</h3>
226
+ </template>
227
+ <div class="space-y-0">
228
+ <ClientOnly>
229
+ <VADataKeyValue label="Company" value="Veristone Capital" layout="horizontal" />
230
+ </ClientOnly>
231
+ <ClientOnly>
232
+ <VADataKeyValue label="Founded" value="2024-01-15" type="date" layout="horizontal" />
233
+ </ClientOnly>
234
+ <ClientOnly>
235
+ <VADataKeyValue label="Revenue" :value="2500000" type="currency" layout="horizontal" />
236
+ </ClientOnly>
237
+ <ClientOnly>
238
+ <VADataKeyValue label="Verified" :value="true" type="boolean" layout="horizontal" />
239
+ </ClientOnly>
240
+ <ClientOnly>
241
+ <VADataKeyValue label="API Key" value="sk_live_abc123..." type="code" layout="horizontal" :no-border="true" />
242
+ </ClientOnly>
243
+ </div>
244
+ </UCard>
245
+
246
+ <UCard class="mt-4">
247
+ <template #header>
248
+ <h3 class="font-semibold">Size Variants</h3>
249
+ </template>
250
+ <div class="grid grid-cols-3 gap-6">
251
+ <ClientOnly>
252
+ <VADataKeyValue label="Small" value="Sample Text" size="sm" />
253
+ </ClientOnly>
254
+ <ClientOnly>
255
+ <VADataKeyValue label="Medium" value="Sample Text" size="md" />
256
+ </ClientOnly>
257
+ <ClientOnly>
258
+ <VADataKeyValue label="Large" value="Sample Text" size="lg" />
259
+ </ClientOnly>
260
+ </div>
261
+ </UCard>
262
+ </div>
263
+
264
+ <!-- VADataStatusBadge Section -->
265
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VADataStatusBadge</h2>
266
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Status badge with automatic color mapping.</p>
267
+ <div class="mb-8">
268
+ <UCard>
269
+ <div class="flex flex-wrap gap-4">
270
+ <ClientOnly>
271
+ <VADataStatusBadge status="active" />
272
+ </ClientOnly>
273
+ <ClientOnly>
274
+ <VADataStatusBadge status="success" />
275
+ </ClientOnly>
276
+ <ClientOnly>
277
+ <VADataStatusBadge status="published" />
278
+ </ClientOnly>
279
+ <ClientOnly>
280
+ <VADataStatusBadge status="completed" />
281
+ </ClientOnly>
282
+ <ClientOnly>
283
+ <VADataStatusBadge status="pending" />
284
+ </ClientOnly>
285
+ <ClientOnly>
286
+ <VADataStatusBadge status="warning" />
287
+ </ClientOnly>
288
+ <ClientOnly>
289
+ <VADataStatusBadge status="error" />
290
+ </ClientOnly>
291
+ <ClientOnly>
292
+ <VADataStatusBadge status="failed" />
293
+ </ClientOnly>
294
+ <ClientOnly>
295
+ <VADataStatusBadge status="deleted" />
296
+ </ClientOnly>
297
+ <ClientOnly>
298
+ <VADataStatusBadge status="inactive" />
299
+ </ClientOnly>
300
+ <ClientOnly>
301
+ <VADataStatusBadge status="draft" />
302
+ </ClientOnly>
303
+ <ClientOnly>
304
+ <VADataStatusBadge status="archived" />
305
+ </ClientOnly>
306
+ </div>
307
+ </UCard>
308
+
309
+ <UCard class="mt-4">
310
+ <template #header>
311
+ <h3 class="font-semibold">Custom Label & Color</h3>
312
+ </template>
313
+ <div class="flex flex-wrap gap-4">
314
+ <ClientOnly>
315
+ <VADataStatusBadge status="custom" label="In Review" color="blue" />
316
+ </ClientOnly>
317
+ <ClientOnly>
318
+ <VADataStatusBadge status="custom" label="Processing" color="purple" />
319
+ </ClientOnly>
320
+ <ClientOnly>
321
+ <VADataStatusBadge status="custom" label="On Hold" color="yellow" />
322
+ </ClientOnly>
323
+ </div>
324
+ </UCard>
325
+ </div>
326
+ </div>
327
+ </UContainer>
328
+ </UDashboardPanel>
329
+ </template>
@@ -0,0 +1,109 @@
1
+ <script setup lang="ts">
2
+ definePageMeta({
3
+ title: 'Component Playground'
4
+ })
5
+
6
+ const categories = [
7
+ {
8
+ title: 'Cards',
9
+ description: '15 card components for data display including KPI cards, chart cards, and table cards.',
10
+ to: '/playground/cards',
11
+ icon: 'i-lucide-credit-card'
12
+ },
13
+ {
14
+ title: 'Charts',
15
+ description: '33 chart components including bar charts, line charts, donut charts, and area charts.',
16
+ to: '/playground/charts',
17
+ icon: 'i-lucide-bar-chart-3'
18
+ },
19
+ {
20
+ title: 'Blocks',
21
+ description: '5 block components for layout composition including grid layouts and filter bars.',
22
+ to: '/playground/blocks',
23
+ icon: 'i-lucide-layout-template'
24
+ },
25
+ {
26
+ title: 'Dashboard Widgets',
27
+ description: '6 dashboard widgets including KPI cards, navigation, pricing plans, and usage charts.',
28
+ to: '/playground/dashboard',
29
+ icon: 'i-lucide-layout-dashboard'
30
+ },
31
+ {
32
+ title: 'Layout',
33
+ description: 'Layout components including side navigation, user menus, and slideovers',
34
+ to: '/playground/layout',
35
+ icon: 'i-lucide-layout'
36
+ },
37
+ {
38
+ title: 'Tables',
39
+ description: 'Full-featured data tables with search, sort, filter, export, selection, and pagination.',
40
+ to: '/playground/tables',
41
+ icon: 'i-lucide-table-2'
42
+ },
43
+ {
44
+ title: 'Base Components',
45
+ description: 'Core V/A components including cards, stats, badges, navigation, and data display.',
46
+ to: '/playground/base',
47
+ icon: 'i-lucide-box'
48
+ },
49
+ {
50
+ title: 'Buttons',
51
+ description: 'Action buttons for CRUD operations, navigation, and data export.',
52
+ to: '/playground/buttons',
53
+ icon: 'i-lucide-mouse-pointer-click'
54
+ },
55
+ {
56
+ title: 'Formatters',
57
+ description: 'Data formatting components for currency, dates, percentages, and key-value displays.',
58
+ to: '/playground/formatters',
59
+ icon: 'i-lucide-text-cursor-input'
60
+ },
61
+ {
62
+ title: 'States',
63
+ description: 'Loading, empty, and error state components for consistent UI feedback.',
64
+ to: '/playground/states',
65
+ icon: 'i-lucide-loader'
66
+ },
67
+ {
68
+ title: 'Modals',
69
+ description: 'Modal dialogs and slideover panels for confirmations, forms, and detailed views.',
70
+ to: '/playground/modals',
71
+ icon: 'i-lucide-panel-right'
72
+ }
73
+ ]
74
+ </script>
75
+
76
+ <template>
77
+ <UDashboardPanel grow>
78
+ <UContainer>
79
+ <div class="py-8">
80
+ <h1 class="text-3xl font-bold mb-4">Component Playground</h1>
81
+ <p class="text-gray-600 dark:text-gray-400 mb-8">
82
+ Explore the Veristone component library. This playground showcases 60+ migrated components
83
+ plus 36 base V/A components across 9 categories.
84
+ </p>
85
+
86
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
87
+ <ClientOnly v-for="category in categories" :key="category.to">
88
+ <UCard class="hover:shadow-lg transition-shadow">
89
+ <template #header>
90
+ <div class="flex items-center gap-3">
91
+ <div class="p-2 rounded-lg bg-primary-50 dark:bg-primary-900/20">
92
+ <UIcon :name="category.icon" class="w-5 h-5 text-primary-500" />
93
+ </div>
94
+ <h2 class="text-xl font-semibold">{{ category.title }}</h2>
95
+ </div>
96
+ </template>
97
+ <p class="mb-4 text-gray-600 dark:text-gray-400">
98
+ {{ category.description }}
99
+ </p>
100
+ <UButton :to="category.to" color="primary" variant="soft">
101
+ View {{ category.title }}
102
+ </UButton>
103
+ </UCard>
104
+ </ClientOnly>
105
+ </div>
106
+ </div>
107
+ </UContainer>
108
+ </UDashboardPanel>
109
+ </template>
@@ -0,0 +1,159 @@
1
+ <script setup lang="ts">
2
+ definePageMeta({
3
+ title: 'Layout Components'
4
+ })
5
+
6
+ const { isNotificationsSlideoverOpen } = useDashboard()
7
+
8
+ // Mock Data for VaLayoutSideNav
9
+ const mockNavItems = [
10
+ {
11
+ label: 'Management',
12
+ open: true,
13
+ children: [
14
+ { label: 'Users', icon: 'i-heroicons-users', to: '/users' },
15
+ { label: 'Teams', icon: 'i-heroicons-user-group', to: '/teams' },
16
+ { label: 'Settings', icon: 'i-heroicons-cog-6-tooth', to: '/settings' }
17
+ ]
18
+ },
19
+ {
20
+ label: 'Resources',
21
+ open: false,
22
+ children: [
23
+ { label: 'Documentation', icon: 'i-heroicons-book-open', to: '/docs' },
24
+ { label: 'Help Center', icon: 'i-heroicons-question-mark-circle', to: '/help' }
25
+ ]
26
+ }
27
+ ]
28
+
29
+ // Mock Data for VaLayoutUserMenu (Note: Component currently uses internal data)
30
+ const mockUser = {
31
+ name: 'Jane Doe',
32
+ email: 'jane@example.com',
33
+ avatar: 'https://i.pravatar.cc/150?img=5'
34
+ }
35
+
36
+ // Mock Data for VaLayoutTeamsMenu (Note: Component currently uses internal data)
37
+ const mockTeams = [
38
+ { label: 'Engineering', avatar: { src: 'https://placehold.co/100', alt: 'Eng' } },
39
+ { label: 'Marketing', avatar: { src: 'https://placehold.co/100', alt: 'Mkt' } }
40
+ ]
41
+
42
+ // Mock Data for VaLayoutNotificationsSlideover (Note: Component currently fetches from API)
43
+ const mockNotifications = [
44
+ { id: 1, title: 'New message', time: '5 min ago', type: 'message' },
45
+ { id: 2, title: 'Task completed', time: '1 hour ago', type: 'success' }
46
+ ]
47
+ </script>
48
+
49
+ <template>
50
+ <UDashboardPanel grow>
51
+ <UContainer>
52
+ <div class="py-8">
53
+ <h1 class="text-3xl font-bold mb-4">Layout Components Showcase</h1>
54
+ <p class="text-gray-600 dark:text-gray-400 mb-8">
55
+ Essential layout building blocks including navigation, menus, and side panels.
56
+ </p>
57
+
58
+ <!-- VaLayoutSideNav -->
59
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VaLayoutSideNav</h2>
60
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Side navigation component for dashboard layouts with collapsible menu items.</p>
61
+ <UCard>
62
+ <template #header>
63
+ <h3 class="font-semibold">Standard Side Navigation</h3>
64
+ </template>
65
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
66
+ <div class="border border-gray-200 dark:border-gray-800 rounded-md bg-white dark:bg-gray-900 p-2 max-w-[250px]">
67
+ <p class="text-xs text-gray-500 mb-2 px-2">Expanded</p>
68
+ <ClientOnly>
69
+ <VaLayoutSideNav :items="mockNavItems" />
70
+ </ClientOnly>
71
+ </div>
72
+ <div class="border border-gray-200 dark:border-gray-800 rounded-md bg-white dark:bg-gray-900 p-2 max-w-[80px]">
73
+ <p class="text-xs text-gray-500 mb-2 text-center">Collapsed</p>
74
+ <ClientOnly>
75
+ <VaLayoutSideNav :items="mockNavItems" collapsed />
76
+ </ClientOnly>
77
+ </div>
78
+ </div>
79
+ </UCard>
80
+
81
+ <!-- VaLayoutUserMenu -->
82
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VaLayoutUserMenu</h2>
83
+ <p class="text-gray-600 dark:text-gray-400 mb-4">User menu dropdown with avatar, profile info, and action items.</p>
84
+ <UCard>
85
+ <template #header>
86
+ <h3 class="font-semibold">User Menu Dropdown</h3>
87
+ </template>
88
+ <div class="flex flex-wrap gap-8 items-start">
89
+ <div>
90
+ <p class="text-sm text-gray-500 mb-2">Standard</p>
91
+ <ClientOnly>
92
+ <div class="w-64">
93
+ <VaLayoutUserMenu />
94
+ </div>
95
+ </ClientOnly>
96
+ </div>
97
+ <div>
98
+ <p class="text-sm text-gray-500 mb-2">Collapsed</p>
99
+ <ClientOnly>
100
+ <div class="w-16">
101
+ <VaLayoutUserMenu collapsed />
102
+ </div>
103
+ </ClientOnly>
104
+ </div>
105
+ </div>
106
+ </UCard>
107
+
108
+ <!-- VaLayoutTeamsMenu -->
109
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VaLayoutTeamsMenu</h2>
110
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Team switching menu for multi-tenant applications.</p>
111
+ <UCard>
112
+ <template #header>
113
+ <h3 class="font-semibold">Team Switcher</h3>
114
+ </template>
115
+ <div class="flex flex-wrap gap-8 items-start">
116
+ <div>
117
+ <p class="text-sm text-gray-500 mb-2">Standard</p>
118
+ <ClientOnly>
119
+ <div class="w-64">
120
+ <VaLayoutTeamsMenu />
121
+ </div>
122
+ </ClientOnly>
123
+ </div>
124
+ <div>
125
+ <p class="text-sm text-gray-500 mb-2">Collapsed</p>
126
+ <ClientOnly>
127
+ <div class="w-16">
128
+ <VaLayoutTeamsMenu collapsed />
129
+ </div>
130
+ </ClientOnly>
131
+ </div>
132
+ </div>
133
+ </UCard>
134
+
135
+ <!-- VaLayoutNotificationsSlideover -->
136
+ <h2 class="text-2xl font-semibold mb-4 mt-8">VaLayoutNotificationsSlideover</h2>
137
+ <p class="text-gray-600 dark:text-gray-400 mb-4">Notifications slideover panel with list of recent activities.</p>
138
+ <UCard>
139
+ <template #header>
140
+ <h3 class="font-semibold">Notifications Panel</h3>
141
+ </template>
142
+ <div class="h-16 flex items-center">
143
+ <UButton
144
+ label="Open Notifications Panel"
145
+ icon="i-heroicons-bell"
146
+ color="primary"
147
+ variant="solid"
148
+ @click="isNotificationsSlideoverOpen = true"
149
+ />
150
+ <ClientOnly>
151
+ <VaLayoutNotificationsSlideover />
152
+ </ClientOnly>
153
+ </div>
154
+ </UCard>
155
+
156
+ </div>
157
+ </UContainer>
158
+ </UDashboardPanel>
159
+ </template>