@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,498 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
definePageMeta({
|
|
3
|
+
title: 'Base Components'
|
|
4
|
+
})
|
|
5
|
+
|
|
6
|
+
// Mock data for components
|
|
7
|
+
const navItems = [
|
|
8
|
+
{ label: 'Overview', to: '/playground/base', icon: 'i-lucide-home', exact: true },
|
|
9
|
+
{ label: 'Details', to: '/playground/base/details', icon: 'i-lucide-info' },
|
|
10
|
+
{ label: 'Settings', to: '/playground/base/settings', icon: 'i-lucide-settings' }
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
const quickActions = [
|
|
14
|
+
{ id: '1', label: 'Create New', description: 'Add a new record', icon: 'i-lucide-plus', color: 'coral' as const },
|
|
15
|
+
{ id: '2', label: 'View Report', description: 'View analytics', icon: 'i-lucide-bar-chart-2', color: 'teal' as const },
|
|
16
|
+
{ id: '3', label: 'Export Data', description: 'Download CSV', icon: 'i-lucide-download', color: 'amber' as const }
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
// Mock data for new components
|
|
20
|
+
const userMenuUser = {
|
|
21
|
+
name: 'John Doe',
|
|
22
|
+
avatar: {
|
|
23
|
+
src: 'https://i.pravatar.cc/150?img=1',
|
|
24
|
+
alt: 'John Doe'
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const companies = [
|
|
29
|
+
{
|
|
30
|
+
label: 'Acme Corp',
|
|
31
|
+
avatar: {
|
|
32
|
+
src: 'https://api.dicebear.com/7.x/initials/svg?seed=AC&backgroundColor=3b82f6',
|
|
33
|
+
alt: 'Acme Corp'
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
label: 'Tech Inc',
|
|
38
|
+
avatar: {
|
|
39
|
+
src: 'https://api.dicebear.com/7.x/initials/svg?seed=TI&backgroundColor=10b981',
|
|
40
|
+
alt: 'Tech Inc'
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
label: 'Veristone Capital',
|
|
45
|
+
avatar: {
|
|
46
|
+
src: 'https://api.dicebear.com/7.x/initials/svg?seed=VC&backgroundColor=84cc16',
|
|
47
|
+
alt: 'Veristone Capital'
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<template>
|
|
54
|
+
<UDashboardPanel grow>
|
|
55
|
+
<UContainer>
|
|
56
|
+
<div class="py-8">
|
|
57
|
+
<h1 class="text-3xl font-bold mb-4">Base Components Showcase</h1>
|
|
58
|
+
<p class="text-gray-600 dark:text-gray-400 mb-8">
|
|
59
|
+
Core V/A components including cards, stats, badges, navigation, and data display components.
|
|
60
|
+
</p>
|
|
61
|
+
|
|
62
|
+
<!-- VACard Section -->
|
|
63
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACard</h2>
|
|
64
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Flexible card component with variants, accents, and interactive states.</p>
|
|
65
|
+
<div class="mb-8">
|
|
66
|
+
<UCard>
|
|
67
|
+
<template #header>
|
|
68
|
+
<h3 class="font-semibold">Card Variants & States</h3>
|
|
69
|
+
</template>
|
|
70
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
71
|
+
<ClientOnly>
|
|
72
|
+
<VACard title="Default Card" description="Basic card with title and description">
|
|
73
|
+
<p class="text-gray-600 dark:text-gray-400">This is the default card variant with standard styling.</p>
|
|
74
|
+
</VACard>
|
|
75
|
+
</ClientOnly>
|
|
76
|
+
|
|
77
|
+
<ClientOnly>
|
|
78
|
+
<VACard title="Success Card" variant="success" icon="i-lucide-check-circle">
|
|
79
|
+
<p class="text-gray-600 dark:text-gray-400">Card with success variant for positive states.</p>
|
|
80
|
+
</VACard>
|
|
81
|
+
</ClientOnly>
|
|
82
|
+
|
|
83
|
+
<ClientOnly>
|
|
84
|
+
<VACard title="Warning Card" variant="warning" icon="i-lucide-alert-triangle">
|
|
85
|
+
<p class="text-gray-600 dark:text-gray-400">Card with warning variant for attention states.</p>
|
|
86
|
+
</VACard>
|
|
87
|
+
</ClientOnly>
|
|
88
|
+
|
|
89
|
+
<ClientOnly>
|
|
90
|
+
<VACard title="Error Card" variant="error" icon="i-lucide-alert-circle">
|
|
91
|
+
<p class="text-gray-600 dark:text-gray-400">Card with error variant for critical states.</p>
|
|
92
|
+
</VACard>
|
|
93
|
+
</ClientOnly>
|
|
94
|
+
|
|
95
|
+
<ClientOnly>
|
|
96
|
+
<VACard title="Collapsible Card" collapsible icon="i-lucide-chevrons-down">
|
|
97
|
+
<p class="text-gray-600 dark:text-gray-400">Click the chevron to collapse this card content.</p>
|
|
98
|
+
</VACard>
|
|
99
|
+
</ClientOnly>
|
|
100
|
+
|
|
101
|
+
<ClientOnly>
|
|
102
|
+
<VACard title="Accent Card" accent-color="coral" icon="i-lucide-flame">
|
|
103
|
+
<p class="text-gray-600 dark:text-gray-400">Card with coral accent bar on the left side.</p>
|
|
104
|
+
</VACard>
|
|
105
|
+
</ClientOnly>
|
|
106
|
+
|
|
107
|
+
<ClientOnly>
|
|
108
|
+
<VACard title="Teal Accent" accent-color="teal" icon="i-lucide-droplet">
|
|
109
|
+
<p class="text-gray-600 dark:text-gray-400">Card with teal accent bar styling.</p>
|
|
110
|
+
</VACard>
|
|
111
|
+
</ClientOnly>
|
|
112
|
+
|
|
113
|
+
<ClientOnly>
|
|
114
|
+
<VACard title="Loading Card" :loading="true">
|
|
115
|
+
<p class="text-gray-600 dark:text-gray-400">This content is hidden during loading.</p>
|
|
116
|
+
</VACard>
|
|
117
|
+
</ClientOnly>
|
|
118
|
+
|
|
119
|
+
<ClientOnly>
|
|
120
|
+
<VACard title="Clickable Card" clickable accent-color="navy" @click="() => {}">
|
|
121
|
+
<p class="text-gray-600 dark:text-gray-400">Click anywhere on this card to trigger an action.</p>
|
|
122
|
+
</VACard>
|
|
123
|
+
</ClientOnly>
|
|
124
|
+
</div>
|
|
125
|
+
</UCard>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<!-- VAStatsCard Section -->
|
|
129
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAStatsCard</h2>
|
|
130
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Statistics cards with trend indicators and multiple format options.</p>
|
|
131
|
+
<div class="mb-8">
|
|
132
|
+
<UCard>
|
|
133
|
+
<template #header>
|
|
134
|
+
<h3 class="font-semibold">Stats with Trends & Formats</h3>
|
|
135
|
+
</template>
|
|
136
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
137
|
+
<ClientOnly>
|
|
138
|
+
<VAStatsCard
|
|
139
|
+
label="Total Revenue"
|
|
140
|
+
:value="125000"
|
|
141
|
+
:previous-value="110000"
|
|
142
|
+
format="currency"
|
|
143
|
+
icon="i-lucide-dollar-sign"
|
|
144
|
+
accent-color="coral"
|
|
145
|
+
/>
|
|
146
|
+
</ClientOnly>
|
|
147
|
+
|
|
148
|
+
<ClientOnly>
|
|
149
|
+
<VAStatsCard
|
|
150
|
+
label="Conversion Rate"
|
|
151
|
+
:value="45.8"
|
|
152
|
+
:previous-value="42.3"
|
|
153
|
+
format="percentage"
|
|
154
|
+
icon="i-lucide-percent"
|
|
155
|
+
accent-color="teal"
|
|
156
|
+
/>
|
|
157
|
+
</ClientOnly>
|
|
158
|
+
|
|
159
|
+
<ClientOnly>
|
|
160
|
+
<VAStatsCard
|
|
161
|
+
label="Active Users"
|
|
162
|
+
:value="8432"
|
|
163
|
+
:previous-value="9200"
|
|
164
|
+
format="number"
|
|
165
|
+
icon="i-lucide-users"
|
|
166
|
+
accent-color="amber"
|
|
167
|
+
/>
|
|
168
|
+
</ClientOnly>
|
|
169
|
+
|
|
170
|
+
<ClientOnly>
|
|
171
|
+
<VAStatsCard
|
|
172
|
+
label="Orders"
|
|
173
|
+
:value="1523"
|
|
174
|
+
:previous-value="1400"
|
|
175
|
+
format="number"
|
|
176
|
+
icon="i-lucide-shopping-cart"
|
|
177
|
+
accent-color="navy"
|
|
178
|
+
trend-display="inline"
|
|
179
|
+
/>
|
|
180
|
+
</ClientOnly>
|
|
181
|
+
|
|
182
|
+
<ClientOnly>
|
|
183
|
+
<VAStatsCard
|
|
184
|
+
label="Error Rate"
|
|
185
|
+
:value="2.3"
|
|
186
|
+
:previous-value="3.5"
|
|
187
|
+
format="percentage"
|
|
188
|
+
icon="i-lucide-alert-circle"
|
|
189
|
+
accent-color="coral"
|
|
190
|
+
:invert-trend="true"
|
|
191
|
+
/>
|
|
192
|
+
</ClientOnly>
|
|
193
|
+
|
|
194
|
+
<ClientOnly>
|
|
195
|
+
<VAStatsCard
|
|
196
|
+
label="Compact Stat"
|
|
197
|
+
:value="542"
|
|
198
|
+
format="number"
|
|
199
|
+
icon="i-lucide-box"
|
|
200
|
+
accent-color="teal"
|
|
201
|
+
:compact="true"
|
|
202
|
+
/>
|
|
203
|
+
</ClientOnly>
|
|
204
|
+
|
|
205
|
+
<ClientOnly>
|
|
206
|
+
<VAStatsCard
|
|
207
|
+
label="Loading State"
|
|
208
|
+
:loading="true"
|
|
209
|
+
icon="i-lucide-loader"
|
|
210
|
+
/>
|
|
211
|
+
</ClientOnly>
|
|
212
|
+
|
|
213
|
+
<ClientOnly>
|
|
214
|
+
<VAStatsCard
|
|
215
|
+
label="Gold Accent"
|
|
216
|
+
:value="99.9"
|
|
217
|
+
format="percentage"
|
|
218
|
+
icon="i-lucide-star"
|
|
219
|
+
accent-color="gold"
|
|
220
|
+
trend-display="minimal"
|
|
221
|
+
/>
|
|
222
|
+
</ClientOnly>
|
|
223
|
+
</div>
|
|
224
|
+
</UCard>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
<!-- VABadge Section -->
|
|
228
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VABadge</h2>
|
|
229
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Status badges with animated dots and customizable labels.</p>
|
|
230
|
+
<div class="mb-8">
|
|
231
|
+
<UCard>
|
|
232
|
+
<template #header>
|
|
233
|
+
<h3 class="font-semibold">Badge Variants</h3>
|
|
234
|
+
</template>
|
|
235
|
+
<div class="flex flex-wrap gap-4">
|
|
236
|
+
<ClientOnly>
|
|
237
|
+
<VABadge label="Premium" />
|
|
238
|
+
</ClientOnly>
|
|
239
|
+
<ClientOnly>
|
|
240
|
+
<VABadge label="Active" status="active" />
|
|
241
|
+
</ClientOnly>
|
|
242
|
+
<ClientOnly>
|
|
243
|
+
<VABadge label="Pending" status="pending" />
|
|
244
|
+
</ClientOnly>
|
|
245
|
+
<ClientOnly>
|
|
246
|
+
<VABadge label="No Dot" :show-dot="false" />
|
|
247
|
+
</ClientOnly>
|
|
248
|
+
</div>
|
|
249
|
+
</UCard>
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
<!-- VAMetricCard Section -->
|
|
253
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAMetricCard</h2>
|
|
254
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Animated metric cards with staggered entrance animations.</p>
|
|
255
|
+
<div class="mb-8">
|
|
256
|
+
<UCard>
|
|
257
|
+
<template #header>
|
|
258
|
+
<h3 class="font-semibold">Metrics with Animations</h3>
|
|
259
|
+
</template>
|
|
260
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
261
|
+
<ClientOnly>
|
|
262
|
+
<VAMetricCard label="Total Value" value="$2.4M" animation-delay="0ms" />
|
|
263
|
+
</ClientOnly>
|
|
264
|
+
<ClientOnly>
|
|
265
|
+
<VAMetricCard label="Growth" value="127" unit="%" animation-delay="100ms" />
|
|
266
|
+
</ClientOnly>
|
|
267
|
+
<ClientOnly>
|
|
268
|
+
<VAMetricCard label="Founded" value="Jan 2024" :is-date="true" animation-delay="200ms" />
|
|
269
|
+
</ClientOnly>
|
|
270
|
+
<ClientOnly>
|
|
271
|
+
<VAMetricCard label="Team Size" value="48" unit="members" animation-delay="300ms" />
|
|
272
|
+
</ClientOnly>
|
|
273
|
+
</div>
|
|
274
|
+
</UCard>
|
|
275
|
+
</div>
|
|
276
|
+
|
|
277
|
+
<!-- VAWelcomeHeader Section -->
|
|
278
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAWelcomeHeader</h2>
|
|
279
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Personalized welcome header with user greeting.</p>
|
|
280
|
+
<div class="mb-8">
|
|
281
|
+
<UCard>
|
|
282
|
+
<template #header>
|
|
283
|
+
<h3 class="font-semibold">Welcome Message</h3>
|
|
284
|
+
</template>
|
|
285
|
+
<ClientOnly>
|
|
286
|
+
<VAWelcomeHeader user-name="John" />
|
|
287
|
+
</ClientOnly>
|
|
288
|
+
</UCard>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<!-- VANavigation Section -->
|
|
292
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VANavigation</h2>
|
|
293
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Navigation component with icon support and active states.</p>
|
|
294
|
+
<div class="mb-8">
|
|
295
|
+
<UCard>
|
|
296
|
+
<template #header>
|
|
297
|
+
<h3 class="font-semibold">Navigation Items</h3>
|
|
298
|
+
</template>
|
|
299
|
+
<ClientOnly>
|
|
300
|
+
<VANavigation :items="navItems" />
|
|
301
|
+
</ClientOnly>
|
|
302
|
+
</UCard>
|
|
303
|
+
</div>
|
|
304
|
+
|
|
305
|
+
<!-- VAQuickActions Section -->
|
|
306
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAQuickActions</h2>
|
|
307
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Quick action buttons with icons and descriptions.</p>
|
|
308
|
+
<div class="mb-8">
|
|
309
|
+
<UCard>
|
|
310
|
+
<template #header>
|
|
311
|
+
<h3 class="font-semibold">Action Buttons</h3>
|
|
312
|
+
</template>
|
|
313
|
+
<div class="max-w-md">
|
|
314
|
+
<ClientOnly>
|
|
315
|
+
<VAQuickActions :actions="quickActions" title="Quick Actions" />
|
|
316
|
+
</ClientOnly>
|
|
317
|
+
</div>
|
|
318
|
+
</UCard>
|
|
319
|
+
</div>
|
|
320
|
+
|
|
321
|
+
<!-- VADataField & VADataGrid Section -->
|
|
322
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VADataField & VADataGrid</h2>
|
|
323
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Data display fields with grid layout and multiple variants.</p>
|
|
324
|
+
<div class="mb-8">
|
|
325
|
+
<UCard>
|
|
326
|
+
<template #header>
|
|
327
|
+
<h3 class="font-semibold">Data Grid Layout</h3>
|
|
328
|
+
</template>
|
|
329
|
+
<ClientOnly>
|
|
330
|
+
<VADataGrid :columns="3">
|
|
331
|
+
<VADataField label="Company Name" value="Veristone Capital" size="lg" />
|
|
332
|
+
<VADataField label="Total Assets" value="24500000" variant="currency" size="lg" />
|
|
333
|
+
<VADataField label="Growth Rate" value="27.5" unit="%" variant="percentage" size="lg" />
|
|
334
|
+
<VADataField label="Founded" value="2024" />
|
|
335
|
+
<VADataField label="Headquarters" value="New York, NY" />
|
|
336
|
+
<VADataField label="Employees" value="150" />
|
|
337
|
+
</VADataGrid>
|
|
338
|
+
</ClientOnly>
|
|
339
|
+
</UCard>
|
|
340
|
+
</div>
|
|
341
|
+
|
|
342
|
+
<!-- Highlighted DataField -->
|
|
343
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">Highlighted DataField</h2>
|
|
344
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Emphasized data field for key metrics.</p>
|
|
345
|
+
<div class="mb-8">
|
|
346
|
+
<UCard>
|
|
347
|
+
<template #header>
|
|
348
|
+
<h3 class="font-semibold">Highlighted Metric</h3>
|
|
349
|
+
</template>
|
|
350
|
+
<div class="max-w-md">
|
|
351
|
+
<ClientOnly>
|
|
352
|
+
<VADataField
|
|
353
|
+
label="Net Profit"
|
|
354
|
+
value="5200000"
|
|
355
|
+
variant="currency"
|
|
356
|
+
size="xl"
|
|
357
|
+
:highlight="true"
|
|
358
|
+
description="Year-to-date performance"
|
|
359
|
+
/>
|
|
360
|
+
</ClientOnly>
|
|
361
|
+
</div>
|
|
362
|
+
</UCard>
|
|
363
|
+
</div>
|
|
364
|
+
|
|
365
|
+
<!-- VAUserMenu Section -->
|
|
366
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAUserMenu</h2>
|
|
367
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">User dropdown menu with profile, settings, and logout options.</p>
|
|
368
|
+
<div class="mb-8">
|
|
369
|
+
<UCard>
|
|
370
|
+
<template #header>
|
|
371
|
+
<h3 class="font-semibold">User Menu Dropdown</h3>
|
|
372
|
+
</template>
|
|
373
|
+
<div class="flex items-center gap-4">
|
|
374
|
+
<ClientOnly>
|
|
375
|
+
<VAUserMenu :user="userMenuUser" />
|
|
376
|
+
</ClientOnly>
|
|
377
|
+
<p class="text-sm text-gray-500">Click the user button to open menu</p>
|
|
378
|
+
</div>
|
|
379
|
+
</UCard>
|
|
380
|
+
</div>
|
|
381
|
+
|
|
382
|
+
<!-- VACompanyMenu Section -->
|
|
383
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACompanyMenu</h2>
|
|
384
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Company switcher dropdown for multi-tenant applications.</p>
|
|
385
|
+
<div class="mb-8">
|
|
386
|
+
<UCard>
|
|
387
|
+
<template #header>
|
|
388
|
+
<h3 class="font-semibold">Company Selection</h3>
|
|
389
|
+
</template>
|
|
390
|
+
<div class="flex items-center gap-4">
|
|
391
|
+
<ClientOnly>
|
|
392
|
+
<VACompanyMenu :companies="companies" />
|
|
393
|
+
</ClientOnly>
|
|
394
|
+
<p class="text-sm text-gray-500">Click to switch between companies</p>
|
|
395
|
+
</div>
|
|
396
|
+
</UCard>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<!-- VAStatusBadge Section -->
|
|
400
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VAStatusBadge</h2>
|
|
401
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Status badges with animated dots and multiple color variants.</p>
|
|
402
|
+
<div class="mb-8">
|
|
403
|
+
<UCard>
|
|
404
|
+
<template #header>
|
|
405
|
+
<h3 class="font-semibold">Status Badge Variants</h3>
|
|
406
|
+
</template>
|
|
407
|
+
<div class="space-y-6">
|
|
408
|
+
<div>
|
|
409
|
+
<p class="text-sm font-semibold mb-3">Subtle Variant</p>
|
|
410
|
+
<div class="flex flex-wrap gap-3">
|
|
411
|
+
<ClientOnly>
|
|
412
|
+
<VAStatusBadge label="Success" status="success" variant="subtle" />
|
|
413
|
+
</ClientOnly>
|
|
414
|
+
<ClientOnly>
|
|
415
|
+
<VAStatusBadge label="Warning" status="warning" variant="subtle" />
|
|
416
|
+
</ClientOnly>
|
|
417
|
+
<ClientOnly>
|
|
418
|
+
<VAStatusBadge label="Error" status="error" variant="subtle" />
|
|
419
|
+
</ClientOnly>
|
|
420
|
+
<ClientOnly>
|
|
421
|
+
<VAStatusBadge label="Info" status="info" variant="subtle" />
|
|
422
|
+
</ClientOnly>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
<div>
|
|
426
|
+
<p class="text-sm font-semibold mb-3">Solid Variant</p>
|
|
427
|
+
<div class="flex flex-wrap gap-3">
|
|
428
|
+
<ClientOnly>
|
|
429
|
+
<VAStatusBadge label="Success" status="success" variant="solid" />
|
|
430
|
+
</ClientOnly>
|
|
431
|
+
<ClientOnly>
|
|
432
|
+
<VAStatusBadge label="Warning" status="warning" variant="solid" />
|
|
433
|
+
</ClientOnly>
|
|
434
|
+
<ClientOnly>
|
|
435
|
+
<VAStatusBadge label="Error" status="error" variant="solid" />
|
|
436
|
+
</ClientOnly>
|
|
437
|
+
<ClientOnly>
|
|
438
|
+
<VAStatusBadge label="Info" status="info" variant="solid" />
|
|
439
|
+
</ClientOnly>
|
|
440
|
+
</div>
|
|
441
|
+
</div>
|
|
442
|
+
<div>
|
|
443
|
+
<p class="text-sm font-semibold mb-3">Outline Variant</p>
|
|
444
|
+
<div class="flex flex-wrap gap-3">
|
|
445
|
+
<ClientOnly>
|
|
446
|
+
<VAStatusBadge label="Success" status="success" variant="outline" />
|
|
447
|
+
</ClientOnly>
|
|
448
|
+
<ClientOnly>
|
|
449
|
+
<VAStatusBadge label="Warning" status="warning" variant="outline" />
|
|
450
|
+
</ClientOnly>
|
|
451
|
+
<ClientOnly>
|
|
452
|
+
<VAStatusBadge label="Error" status="error" variant="outline" />
|
|
453
|
+
</ClientOnly>
|
|
454
|
+
<ClientOnly>
|
|
455
|
+
<VAStatusBadge label="Info" status="info" variant="outline" />
|
|
456
|
+
</ClientOnly>
|
|
457
|
+
</div>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
</UCard>
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
<!-- VACardLegacy Section -->
|
|
464
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardLegacy</h2>
|
|
465
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Legacy card component with classic styling and layout.</p>
|
|
466
|
+
<div class="mb-8">
|
|
467
|
+
<UCard>
|
|
468
|
+
<template #header>
|
|
469
|
+
<h3 class="font-semibold">Legacy Card Variants</h3>
|
|
470
|
+
</template>
|
|
471
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
472
|
+
<ClientOnly>
|
|
473
|
+
<VACardLegacy title="Default Legacy Card" subtitle="Classic card styling">
|
|
474
|
+
<p class="text-gray-600 dark:text-gray-400">This is a legacy card component with traditional design patterns.</p>
|
|
475
|
+
</VACardLegacy>
|
|
476
|
+
</ClientOnly>
|
|
477
|
+
<ClientOnly>
|
|
478
|
+
<VACardLegacy title="Elevated Legacy Card" subtitle="With shadow effect" variant="elevated">
|
|
479
|
+
<p class="text-gray-600 dark:text-gray-400">Legacy card with elevated styling and shadow effects.</p>
|
|
480
|
+
</VACardLegacy>
|
|
481
|
+
</ClientOnly>
|
|
482
|
+
<ClientOnly>
|
|
483
|
+
<VACardLegacy title="Outlined Legacy Card" subtitle="Border only" variant="outlined">
|
|
484
|
+
<p class="text-gray-600 dark:text-gray-400">Legacy card with outline variant for minimal styling.</p>
|
|
485
|
+
</VACardLegacy>
|
|
486
|
+
</ClientOnly>
|
|
487
|
+
<ClientOnly>
|
|
488
|
+
<VACardLegacy title="Glass Legacy Card" subtitle="Frosted effect" variant="glass">
|
|
489
|
+
<p class="text-gray-600 dark:text-gray-400">Legacy card with glass morphism effect and backdrop blur.</p>
|
|
490
|
+
</VACardLegacy>
|
|
491
|
+
</ClientOnly>
|
|
492
|
+
</div>
|
|
493
|
+
</UCard>
|
|
494
|
+
</div>
|
|
495
|
+
</div>
|
|
496
|
+
</UContainer>
|
|
497
|
+
</UDashboardPanel>
|
|
498
|
+
</template>
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<UDashboardPanel grow>
|
|
3
|
+
<UContainer>
|
|
4
|
+
<div class="py-8">
|
|
5
|
+
<h1 class="text-3xl font-bold mb-4">Block Components Showcase</h1>
|
|
6
|
+
<p class="text-gray-600 dark:text-gray-400 mb-8">
|
|
7
|
+
Block components are larger, composite components that combine multiple elements into organized layouts.
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<!-- VaBlockKpiGrid Section -->
|
|
11
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VaBlockKpiGrid</h2>
|
|
12
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">KPI grid layout block displaying key performance indicators.</p>
|
|
13
|
+
<div class="mb-8">
|
|
14
|
+
<UCard>
|
|
15
|
+
<template #header>
|
|
16
|
+
<h3 class="font-semibold">KPI Grid Layout</h3>
|
|
17
|
+
</template>
|
|
18
|
+
<ClientOnly>
|
|
19
|
+
<VaBlockKpiGrid :items="kpiGridItems" />
|
|
20
|
+
</ClientOnly>
|
|
21
|
+
</UCard>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<!-- VaBlockSessionFilterBar Section -->
|
|
25
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VaBlockSessionFilterBar</h2>
|
|
26
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Session filter bar for filtering data by date range, status, and category.</p>
|
|
27
|
+
<div class="mb-8">
|
|
28
|
+
<UCard>
|
|
29
|
+
<template #header>
|
|
30
|
+
<h3 class="font-semibold">Session Filter Bar</h3>
|
|
31
|
+
</template>
|
|
32
|
+
<ClientOnly>
|
|
33
|
+
<VaBlockSessionFilterBar
|
|
34
|
+
:filters="mockFilters"
|
|
35
|
+
@update:filters="handleFilterUpdate"
|
|
36
|
+
/>
|
|
37
|
+
</ClientOnly>
|
|
38
|
+
</UCard>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<!-- VaBlockGridKPI Section -->
|
|
42
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VaBlockGridKPI</h2>
|
|
43
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">KPI cards grid layout block with sales, revenue, and returns data.</p>
|
|
44
|
+
<div class="mb-8">
|
|
45
|
+
<UCard>
|
|
46
|
+
<template #header>
|
|
47
|
+
<h3 class="font-semibold">KPI Cards Grid</h3>
|
|
48
|
+
</template>
|
|
49
|
+
<ClientOnly>
|
|
50
|
+
<VaBlockGridKPI />
|
|
51
|
+
</ClientOnly>
|
|
52
|
+
</UCard>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<!-- VaBlockGridCharts Section -->
|
|
56
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VaBlockGridCharts</h2>
|
|
57
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Charts grid layout block with revenue bar chart and donut chart visualization.</p>
|
|
58
|
+
<div class="mb-8">
|
|
59
|
+
<UCard>
|
|
60
|
+
<template #header>
|
|
61
|
+
<h3 class="font-semibold">Charts Grid Layout</h3>
|
|
62
|
+
</template>
|
|
63
|
+
<ClientOnly>
|
|
64
|
+
<VaBlockGridCharts :child-order="[0, 1]" />
|
|
65
|
+
</ClientOnly>
|
|
66
|
+
</UCard>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<!-- VaBlockGridTables Section -->
|
|
70
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VaBlockGridTables</h2>
|
|
71
|
+
<p class="text-gray-600 dark:text-gray-400 mb-4">Tables grid layout block with latest orders and popular products data.</p>
|
|
72
|
+
<div class="mb-8">
|
|
73
|
+
<UCard>
|
|
74
|
+
<template #header>
|
|
75
|
+
<h3 class="font-semibold">Tables Grid Layout</h3>
|
|
76
|
+
</template>
|
|
77
|
+
<ClientOnly>
|
|
78
|
+
<VaBlockGridTables :child-order="[0, 1]" />
|
|
79
|
+
</ClientOnly>
|
|
80
|
+
</UCard>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</UContainer>
|
|
84
|
+
</UDashboardPanel>
|
|
85
|
+
</template>
|
|
86
|
+
|
|
87
|
+
<script setup lang="ts">
|
|
88
|
+
definePageMeta({
|
|
89
|
+
title: 'Block Components'
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
const kpiGridItems = [
|
|
93
|
+
{ label: 'Total Sales', value: 45231, unit: 'USD' },
|
|
94
|
+
{ label: 'New Customers', value: 234, unit: '' },
|
|
95
|
+
{ label: 'Conversion Rate', value: 3.45, unit: '%' },
|
|
96
|
+
{ label: 'Avg Session', value: 4.2, unit: 'min' }
|
|
97
|
+
]
|
|
98
|
+
|
|
99
|
+
const mockFilters = {
|
|
100
|
+
dateRange: { start: '2024-01-01', end: '2024-01-31' },
|
|
101
|
+
status: 'all',
|
|
102
|
+
category: 'all'
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const handleFilterUpdate = (filters: any) => {
|
|
106
|
+
console.log('Filters updated:', filters)
|
|
107
|
+
}
|
|
108
|
+
</script>
|