@veristone/nuxt-v-app 0.2.8 → 0.2.10
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/app/components/{Va/Blocks/VaBlockGridCharts.vue → V/A/Block/GridCharts.vue} +2 -3
- package/app/components/{Va/Blocks/VaBlockGridKPI.vue → V/A/Block/GridKPI.vue} +3 -3
- package/app/components/{Va/Blocks/VaBlockGridTables.vue → V/A/Block/GridTables.vue} +3 -3
- package/app/components/{Va/Cards/VaCardWithActiveUsers.vue → V/A/Card/WithActiveUsers.vue} +5 -5
- package/app/components/{Va/Cards/VaCardWithChart.vue → V/A/Card/WithChart.vue} +7 -7
- package/app/components/{Va/Charts/VaChartAreaMini.vue → V/A/Chart/AreaMini.vue} +2 -2
- package/app/components/V/A/Table/index.vue +1 -0
- package/app/layouts/default.vue +3 -3
- package/app/layouts/legacy.vue +4 -4
- package/app/pages/playground/blocks.vue +15 -15
- package/app/pages/playground/cards.vue +43 -43
- package/app/pages/playground/charts.vue +64 -64
- package/app/pages/playground/dashboard.vue +22 -22
- package/app/pages/playground/layout.vue +19 -19
- package/package.json +2 -2
- /package/app/components/{Va/Blocks/VaBlockKpiGrid.vue → V/A/Block/KpiGrid.vue} +0 -0
- /package/app/components/{Va/Blocks/VaBlockSessionFilterBar.vue → V/A/Block/SessionFilterBar.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardDonutChart.vue → V/A/Card/DonutChart.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardHeader.vue → V/A/Card/Header.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardKpi.vue → V/A/Card/Kpi.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardKpi2.vue → V/A/Card/Kpi2.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardLatestOrders.vue → V/A/Card/LatestOrders.vue} +0 -0
- /package/app/components/V/A/{Card.legacy.vue → Card/Legacy.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardPopularProducts.vue → V/A/Card/PopularProducts.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardRevenueBarChart.vue → V/A/Card/RevenueBarChart.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardSubtitle.vue → V/A/Card/Subtitle.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardTitle.vue → V/A/Card/Title.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardWithChartBlock.vue → V/A/Card/WithChartBlock.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardWithIndicator.vue → V/A/Card/WithIndicator.vue} +0 -0
- /package/app/components/{Va/Cards/VaCardWithProgressCircle.vue → V/A/Card/WithProgressCircle.vue} +0 -0
- /package/app/components/{Va/Cards/types.ts → V/A/Card/card-types.ts} +0 -0
- /package/app/components/V/A/{Card.vue → Card/index.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartAppPerformanceBar.vue → V/A/Chart/AppPerformanceBar.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartAppPerformanceBarChart.vue → V/A/Chart/AppPerformanceBarChart.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartBarMini.vue → V/A/Chart/BarMini.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartCardinalMulti.vue → V/A/Chart/CardinalMulti.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartColorBarChart.vue → V/A/Chart/ColorBarChart.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartDonutHalf.vue → V/A/Chart/DonutHalf.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartDonutMini.vue → V/A/Chart/DonutMini.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartExpensesBar.vue → V/A/Chart/ExpensesBar.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartFinanceSummary.vue → V/A/Chart/FinanceSummary.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartGoogleSearchConsole.vue → V/A/Chart/GoogleSearchConsole.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartIncomeBar.vue → V/A/Chart/IncomeBar.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartLegend.vue → V/A/Chart/Legend.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartLineMini.vue → V/A/Chart/LineMini.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartRealtimeTraffic.vue → V/A/Chart/RealtimeTraffic.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartRevenue.vue → V/A/Chart/Revenue.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartRevenueLine.vue → V/A/Chart/RevenueLine.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartRevenuevsCost.vue → V/A/Chart/RevenuevsCost.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartSearchIntent.vue → V/A/Chart/SearchIntent.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartSpendingTrend.vue → V/A/Chart/SpendingTrend.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartStackedHorizontal.vue → V/A/Chart/StackedHorizontal.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartStepMinimal.vue → V/A/Chart/StepMinimal.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartStockComparisonLine.vue → V/A/Chart/StockComparisonLine.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartStocksPortfolioLine.vue → V/A/Chart/StocksPortfolioLine.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartStocksSectorLine.vue → V/A/Chart/StocksSectorLine.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartTasksCategories.vue → V/A/Chart/TasksCategories.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartTasksProgress.vue → V/A/Chart/TasksProgress.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartTrafficOverview.vue → V/A/Chart/TrafficOverview.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartWebPerformanceLineChart.vue → V/A/Chart/WebPerformanceLineChart.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartWinLostBar.vue → V/A/Chart/WinLostBar.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartWinLostDonut.vue → V/A/Chart/WinLostDonut.vue} +0 -0
- /package/app/components/{Va/Charts/VaChartWinLostLine.vue → V/A/Chart/WinLostLine.vue} +0 -0
- /package/app/components/{Va/Charts/types.ts → V/A/Chart/chart-types.ts} +0 -0
- /package/app/components/{Va/Dashboard/VaDashboardKPICard.vue → V/A/Dashboard/KPICard.vue} +0 -0
- /package/app/components/{Va → V/A}/Dashboard/Navigation/types.ts +0 -0
- /package/app/components/{Va/Dashboard/VaDashboardNavigation.vue → V/A/Dashboard/Navigation.vue} +0 -0
- /package/app/components/{Va/Dashboard/VaDashboardPricePlan.vue → V/A/Dashboard/PricePlan.vue} +0 -0
- /package/app/components/{Va/Dashboard/VaDashboardUsageChart.vue → V/A/Dashboard/UsageChart.vue} +0 -0
- /package/app/components/{Va/Dashboard/VaDashboardUsageRequestChart.vue → V/A/Dashboard/UsageRequestChart.vue} +0 -0
- /package/app/components/{Va → V/A}/Layout/NotificationsSlideover.vue +0 -0
- /package/app/components/{Va → V/A}/Layout/SideNav/types.ts +0 -0
- /package/app/components/{Va → V/A}/Layout/SideNav.vue +0 -0
- /package/app/components/{Va → V/A}/Layout/TeamsMenu.vue +0 -0
- /package/app/components/{Va → V/A}/Layout/UserMenu.vue +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { RevenueData, RevenueCategoriesMultiple, xFormatter, yFormatter, DonutData } from '~/data/dashboardData';
|
|
3
|
-
import { computed } from 'vue';
|
|
4
3
|
|
|
5
4
|
const props = defineProps<{ childOrder: [0 | 1, 0 | 1] }>();
|
|
6
5
|
|
|
@@ -11,7 +10,7 @@ const flexDirection = computed(() =>
|
|
|
11
10
|
<template>
|
|
12
11
|
<div :class="`flex flex-col ${flexDirection} w-full px-4 md:px-8 mb-6 gap-6`">
|
|
13
12
|
<div class="w-full md:w-8/12">
|
|
14
|
-
<
|
|
13
|
+
<VACardRevenueBarChart
|
|
15
14
|
title="Revenue"
|
|
16
15
|
total-value="$4589.00"
|
|
17
16
|
:data="RevenueData"
|
|
@@ -22,7 +21,7 @@ const flexDirection = computed(() =>
|
|
|
22
21
|
/>
|
|
23
22
|
</div>
|
|
24
23
|
<div class="w-full md:w-4/12 relative">
|
|
25
|
-
<
|
|
24
|
+
<VACardDonutChart
|
|
26
25
|
title="Revenue"
|
|
27
26
|
total-value="$4589.00"
|
|
28
27
|
:data="DonutData"
|
|
@@ -5,7 +5,7 @@ import { SalesData, RevenueDataCard, ReturnsData } from '~/data/dashboardData';
|
|
|
5
5
|
<template>
|
|
6
6
|
<div class="grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-6 w-full px-4 md:px-8 mb-6">
|
|
7
7
|
<div class="w-full md:col-span-1 xl:col-span-2">
|
|
8
|
-
<
|
|
8
|
+
<VACardSalesCard
|
|
9
9
|
title="Sales"
|
|
10
10
|
value="1,245"
|
|
11
11
|
:chart-data="SalesData.chartData"
|
|
@@ -13,7 +13,7 @@ import { SalesData, RevenueDataCard, ReturnsData } from '~/data/dashboardData';
|
|
|
13
13
|
/>
|
|
14
14
|
</div>
|
|
15
15
|
<div class="w-full md:col-span-1 xl:col-span-2">
|
|
16
|
-
<
|
|
16
|
+
<VACardRevenueCard
|
|
17
17
|
title="Revenue"
|
|
18
18
|
value="$58,981.00"
|
|
19
19
|
:chart-data="RevenueDataCard.chartData"
|
|
@@ -21,7 +21,7 @@ import { SalesData, RevenueDataCard, ReturnsData } from '~/data/dashboardData';
|
|
|
21
21
|
/>
|
|
22
22
|
</div>
|
|
23
23
|
<div class="w-full md:col-span-2">
|
|
24
|
-
<
|
|
24
|
+
<VACardReturnsCard
|
|
25
25
|
title="Returns"
|
|
26
26
|
value="32"
|
|
27
27
|
:chart-data="ReturnsData.chartData"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import VACardLatestOrders from '../Card/LatestOrders.vue';
|
|
3
|
+
import VACardPopularProducts from '../Card/PopularProducts.vue';
|
|
4
4
|
import { orders, products } from '~/data/dashboardData';
|
|
5
5
|
|
|
6
6
|
defineProps<{ childOrder: [0 | 1, 0 | 1] }>();
|
|
7
7
|
|
|
8
|
-
const cardComponents = [
|
|
8
|
+
const cardComponents = [VACardLatestOrders, VACardPopularProducts] as const;
|
|
9
9
|
</script>
|
|
10
10
|
<template>
|
|
11
11
|
<div class="grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-6 w-full px-4 md:px-8 mb-6">
|
|
@@ -9,16 +9,16 @@ defineProps<{
|
|
|
9
9
|
<template>
|
|
10
10
|
<UCard>
|
|
11
11
|
<div class="space-y-2">
|
|
12
|
-
<
|
|
12
|
+
<VACardSubtitle>
|
|
13
13
|
{{ metric }}
|
|
14
|
-
</
|
|
14
|
+
</VACardSubtitle>
|
|
15
15
|
|
|
16
16
|
<div class="flex items-center justify-start gap-4">
|
|
17
|
-
<
|
|
17
|
+
<VACardTitle>
|
|
18
18
|
{{ current }}
|
|
19
|
-
</
|
|
19
|
+
</VACardTitle>
|
|
20
20
|
|
|
21
|
-
<div class="flex
|
|
21
|
+
<div class="flex flex-col items-start text-sm">
|
|
22
22
|
<div class="flex items-center gap-1">
|
|
23
23
|
<UIcon
|
|
24
24
|
:name="
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import type { BulletLegendItemInterface, ChartData } from './types'
|
|
2
|
+
import type { BulletLegendItemInterface, ChartData } from './card-types'
|
|
3
3
|
|
|
4
4
|
defineProps<{
|
|
5
5
|
name: string
|
|
@@ -91,10 +91,10 @@ const data: ChartData[] = [
|
|
|
91
91
|
|
|
92
92
|
<template>
|
|
93
93
|
<UCard>
|
|
94
|
-
<
|
|
95
|
-
<
|
|
94
|
+
<VACardHeader>
|
|
95
|
+
<VACardSubtitle>
|
|
96
96
|
{{ name }}
|
|
97
|
-
</
|
|
97
|
+
</VACardSubtitle>
|
|
98
98
|
<template #action>
|
|
99
99
|
<UButton
|
|
100
100
|
icon="i-lucide-ellipsis-vertical"
|
|
@@ -102,11 +102,11 @@ const data: ChartData[] = [
|
|
|
102
102
|
variant="subtle"
|
|
103
103
|
/>
|
|
104
104
|
</template>
|
|
105
|
-
</
|
|
105
|
+
</VACardHeader>
|
|
106
106
|
<div class="space-y-2">
|
|
107
|
-
<
|
|
107
|
+
<VACardTitle>
|
|
108
108
|
{{ value }}
|
|
109
|
-
</
|
|
109
|
+
</VACardTitle>
|
|
110
110
|
<h5 class="text-sm text-muted">
|
|
111
111
|
{{ name }}
|
|
112
112
|
</h5>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import type { SpendingData, BulletLegendItemInterface } from './types'
|
|
2
|
+
import type { SpendingData, BulletLegendItemInterface } from './chart-types'
|
|
3
3
|
|
|
4
4
|
const chartData = ref<SpendingData[]>([
|
|
5
5
|
{
|
|
@@ -70,7 +70,7 @@ const categories: Record<string, BulletLegendItemInterface> = {
|
|
|
70
70
|
color: '#22c55e'
|
|
71
71
|
},
|
|
72
72
|
previous: {
|
|
73
|
-
name: 'Last
|
|
73
|
+
name: 'Last Year',
|
|
74
74
|
color: '#00BCFF'
|
|
75
75
|
}
|
|
76
76
|
}
|
package/app/layouts/default.vue
CHANGED
|
@@ -134,7 +134,7 @@ const groups = computed(() => [
|
|
|
134
134
|
</template>
|
|
135
135
|
|
|
136
136
|
<template #default="{ collapsed }">
|
|
137
|
-
<
|
|
137
|
+
<VALayoutSideNav :items="links[0]!" :collapsed="collapsed" />
|
|
138
138
|
|
|
139
139
|
<!-- Accounts section commented out - requires /analytics.svg asset
|
|
140
140
|
<div class="space-y-1 mt-4">
|
|
@@ -167,7 +167,7 @@ const groups = computed(() => [
|
|
|
167
167
|
</template>
|
|
168
168
|
|
|
169
169
|
<template #footer="{ collapsed }">
|
|
170
|
-
<
|
|
170
|
+
<VALayoutUserMenu :collapsed="collapsed" />
|
|
171
171
|
</template>
|
|
172
172
|
</UDashboardSidebar>
|
|
173
173
|
|
|
@@ -176,6 +176,6 @@ const groups = computed(() => [
|
|
|
176
176
|
<div class="flex-1 overflow-y-auto">
|
|
177
177
|
<slot />
|
|
178
178
|
</div>
|
|
179
|
-
<
|
|
179
|
+
<VALayoutNotificationsSlideover />
|
|
180
180
|
</UDashboardGroup>
|
|
181
181
|
</template>
|
package/app/layouts/legacy.vue
CHANGED
|
@@ -29,11 +29,11 @@ const links: NavigationMenuItem[][] = [
|
|
|
29
29
|
:max-size="18"
|
|
30
30
|
>
|
|
31
31
|
<template #header="{ collapsed }">
|
|
32
|
-
<
|
|
32
|
+
<VALayoutTeamsMenu :collapsed="collapsed" />
|
|
33
33
|
</template>
|
|
34
34
|
|
|
35
35
|
<template #default="{ collapsed }">
|
|
36
|
-
<
|
|
36
|
+
<VALayoutSideNav
|
|
37
37
|
:items="links[0]!"
|
|
38
38
|
:collapsed="collapsed"
|
|
39
39
|
/>
|
|
@@ -49,13 +49,13 @@ const links: NavigationMenuItem[][] = [
|
|
|
49
49
|
</template>
|
|
50
50
|
|
|
51
51
|
<template #footer="{ collapsed }">
|
|
52
|
-
<
|
|
52
|
+
<VALayoutUserMenu :collapsed="collapsed" />
|
|
53
53
|
</template>
|
|
54
54
|
</UDashboardSidebar>
|
|
55
55
|
|
|
56
56
|
<slot name="header" />
|
|
57
57
|
<slot name="header-actions" />
|
|
58
58
|
<slot />
|
|
59
|
-
<
|
|
59
|
+
<VALayoutNotificationsSlideover />
|
|
60
60
|
</UDashboardGroup>
|
|
61
61
|
</template>
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
Block components are larger, composite components that combine multiple elements into organized layouts.
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
|
-
<!--
|
|
11
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
10
|
+
<!-- VABlockKpiGrid Section -->
|
|
11
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VABlockKpiGrid</h2>
|
|
12
12
|
<p class="text-gray-600 dark:text-gray-400 mb-4">KPI grid layout block displaying key performance indicators.</p>
|
|
13
13
|
<div class="mb-8">
|
|
14
14
|
<UCard>
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
<h3 class="font-semibold">KPI Grid Layout</h3>
|
|
17
17
|
</template>
|
|
18
18
|
<ClientOnly>
|
|
19
|
-
<
|
|
19
|
+
<VABlockKpiGrid :items="kpiGridItems" />
|
|
20
20
|
</ClientOnly>
|
|
21
21
|
</UCard>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
|
-
<!--
|
|
25
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
24
|
+
<!-- VABlockSessionFilterBar Section -->
|
|
25
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VABlockSessionFilterBar</h2>
|
|
26
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
27
|
<div class="mb-8">
|
|
28
28
|
<UCard>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<h3 class="font-semibold">Session Filter Bar</h3>
|
|
31
31
|
</template>
|
|
32
32
|
<ClientOnly>
|
|
33
|
-
<
|
|
33
|
+
<VABlockSessionFilterBar
|
|
34
34
|
:filters="mockFilters"
|
|
35
35
|
@update:filters="handleFilterUpdate"
|
|
36
36
|
/>
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
</UCard>
|
|
39
39
|
</div>
|
|
40
40
|
|
|
41
|
-
<!--
|
|
42
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
41
|
+
<!-- VABlockGridKPI Section -->
|
|
42
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VABlockGridKPI</h2>
|
|
43
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
44
|
<div class="mb-8">
|
|
45
45
|
<UCard>
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
<h3 class="font-semibold">KPI Cards Grid</h3>
|
|
48
48
|
</template>
|
|
49
49
|
<ClientOnly>
|
|
50
|
-
<
|
|
50
|
+
<VABlockGridKPI />
|
|
51
51
|
</ClientOnly>
|
|
52
52
|
</UCard>
|
|
53
53
|
</div>
|
|
54
54
|
|
|
55
|
-
<!--
|
|
56
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
55
|
+
<!-- VABlockGridCharts Section -->
|
|
56
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VABlockGridCharts</h2>
|
|
57
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
58
|
<div class="mb-8">
|
|
59
59
|
<UCard>
|
|
@@ -61,13 +61,13 @@
|
|
|
61
61
|
<h3 class="font-semibold">Charts Grid Layout</h3>
|
|
62
62
|
</template>
|
|
63
63
|
<ClientOnly>
|
|
64
|
-
<
|
|
64
|
+
<VABlockGridCharts :child-order="[0, 1]" />
|
|
65
65
|
</ClientOnly>
|
|
66
66
|
</UCard>
|
|
67
67
|
</div>
|
|
68
68
|
|
|
69
|
-
<!--
|
|
70
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
69
|
+
<!-- VABlockGridTables Section -->
|
|
70
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VABlockGridTables</h2>
|
|
71
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
72
|
<div class="mb-8">
|
|
73
73
|
<UCard>
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
<h3 class="font-semibold">Tables Grid Layout</h3>
|
|
76
76
|
</template>
|
|
77
77
|
<ClientOnly>
|
|
78
|
-
<
|
|
78
|
+
<VABlockGridTables :child-order="[0, 1]" />
|
|
79
79
|
</ClientOnly>
|
|
80
80
|
</UCard>
|
|
81
81
|
</div>
|
|
@@ -73,8 +73,8 @@ const handleClick = () => {
|
|
|
73
73
|
Complete showcase of all card components with standardized UCard format.
|
|
74
74
|
</p>
|
|
75
75
|
|
|
76
|
-
<!--
|
|
77
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
76
|
+
<!-- VACardHeader Section -->
|
|
77
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardHeader</h2>
|
|
78
78
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card header component with title, subtitle, and action slot.</p>
|
|
79
79
|
<div class="mb-8">
|
|
80
80
|
<UCard>
|
|
@@ -82,7 +82,7 @@ const handleClick = () => {
|
|
|
82
82
|
<h3 class="font-semibold">Header Example</h3>
|
|
83
83
|
</template>
|
|
84
84
|
<ClientOnly>
|
|
85
|
-
<
|
|
85
|
+
<VACardHeader
|
|
86
86
|
title="Card Header"
|
|
87
87
|
subtitle="With subtitle text"
|
|
88
88
|
icon="i-heroicons-chart-bar"
|
|
@@ -91,8 +91,8 @@ const handleClick = () => {
|
|
|
91
91
|
</UCard>
|
|
92
92
|
</div>
|
|
93
93
|
|
|
94
|
-
<!--
|
|
95
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
94
|
+
<!-- VACardTitle Section -->
|
|
95
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardTitle</h2>
|
|
96
96
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Large title component for card content.</p>
|
|
97
97
|
<div class="mb-8">
|
|
98
98
|
<UCard>
|
|
@@ -100,13 +100,13 @@ const handleClick = () => {
|
|
|
100
100
|
<h3 class="font-semibold">Title Example</h3>
|
|
101
101
|
</template>
|
|
102
102
|
<ClientOnly>
|
|
103
|
-
<
|
|
103
|
+
<VACardTitle title="Card Title Component" />
|
|
104
104
|
</ClientOnly>
|
|
105
105
|
</UCard>
|
|
106
106
|
</div>
|
|
107
107
|
|
|
108
|
-
<!--
|
|
109
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
108
|
+
<!-- VACardSubtitle Section -->
|
|
109
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardSubtitle</h2>
|
|
110
110
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Subtitle component for secondary text in cards.</p>
|
|
111
111
|
<div class="mb-8">
|
|
112
112
|
<UCard>
|
|
@@ -114,13 +114,13 @@ const handleClick = () => {
|
|
|
114
114
|
<h3 class="font-semibold">Subtitle Example</h3>
|
|
115
115
|
</template>
|
|
116
116
|
<ClientOnly>
|
|
117
|
-
<
|
|
117
|
+
<VACardSubtitle subtitle="This is a card subtitle component" />
|
|
118
118
|
</ClientOnly>
|
|
119
119
|
</UCard>
|
|
120
120
|
</div>
|
|
121
121
|
|
|
122
|
-
<!--
|
|
123
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
122
|
+
<!-- VACardKpi Section -->
|
|
123
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardKpi</h2>
|
|
124
124
|
<p class="text-gray-600 dark:text-gray-400 mb-4">KPI card with value and trend indicator.</p>
|
|
125
125
|
<div class="mb-8">
|
|
126
126
|
<UCard>
|
|
@@ -128,7 +128,7 @@ const handleClick = () => {
|
|
|
128
128
|
<h3 class="font-semibold">KPI Example</h3>
|
|
129
129
|
</template>
|
|
130
130
|
<ClientOnly>
|
|
131
|
-
<
|
|
131
|
+
<VACardKpi
|
|
132
132
|
title="Total Revenue"
|
|
133
133
|
:value="45231"
|
|
134
134
|
:change="12.5"
|
|
@@ -139,8 +139,8 @@ const handleClick = () => {
|
|
|
139
139
|
</UCard>
|
|
140
140
|
</div>
|
|
141
141
|
|
|
142
|
-
<!--
|
|
143
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
142
|
+
<!-- VACardKpi2 Section -->
|
|
143
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardKpi2</h2>
|
|
144
144
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Alternative KPI card with percentage change display.</p>
|
|
145
145
|
<div class="mb-8">
|
|
146
146
|
<UCard>
|
|
@@ -148,7 +148,7 @@ const handleClick = () => {
|
|
|
148
148
|
<h3 class="font-semibold">KPI2 Example</h3>
|
|
149
149
|
</template>
|
|
150
150
|
<ClientOnly>
|
|
151
|
-
<
|
|
151
|
+
<VACardKpi2
|
|
152
152
|
title="Active Users"
|
|
153
153
|
:value="8432"
|
|
154
154
|
:change="-3.2"
|
|
@@ -159,8 +159,8 @@ const handleClick = () => {
|
|
|
159
159
|
</UCard>
|
|
160
160
|
</div>
|
|
161
161
|
|
|
162
|
-
<!--
|
|
163
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
162
|
+
<!-- VACardWithIndicator Section -->
|
|
163
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardWithIndicator</h2>
|
|
164
164
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card with status indicator dot.</p>
|
|
165
165
|
<div class="mb-8">
|
|
166
166
|
<UCard>
|
|
@@ -168,7 +168,7 @@ const handleClick = () => {
|
|
|
168
168
|
<h3 class="font-semibold">Indicator Example</h3>
|
|
169
169
|
</template>
|
|
170
170
|
<ClientOnly>
|
|
171
|
-
<
|
|
171
|
+
<VACardWithIndicator
|
|
172
172
|
title="Status"
|
|
173
173
|
value="Active"
|
|
174
174
|
indicator="success"
|
|
@@ -177,8 +177,8 @@ const handleClick = () => {
|
|
|
177
177
|
</UCard>
|
|
178
178
|
</div>
|
|
179
179
|
|
|
180
|
-
<!--
|
|
181
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
180
|
+
<!-- VACardWithProgressCircle Section -->
|
|
181
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardWithProgressCircle</h2>
|
|
182
182
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card with circular progress indicator.</p>
|
|
183
183
|
<div class="mb-8">
|
|
184
184
|
<UCard>
|
|
@@ -186,7 +186,7 @@ const handleClick = () => {
|
|
|
186
186
|
<h3 class="font-semibold">Progress Circle Example</h3>
|
|
187
187
|
</template>
|
|
188
188
|
<ClientOnly>
|
|
189
|
-
<
|
|
189
|
+
<VACardWithProgressCircle
|
|
190
190
|
title="Completion"
|
|
191
191
|
:progress="75"
|
|
192
192
|
:total="100"
|
|
@@ -195,8 +195,8 @@ const handleClick = () => {
|
|
|
195
195
|
</UCard>
|
|
196
196
|
</div>
|
|
197
197
|
|
|
198
|
-
<!--
|
|
199
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
198
|
+
<!-- VACardWithChart Section -->
|
|
199
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardWithChart</h2>
|
|
200
200
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card with embedded area chart showing trends over time.</p>
|
|
201
201
|
<div class="mb-8">
|
|
202
202
|
<UCard>
|
|
@@ -204,7 +204,7 @@ const handleClick = () => {
|
|
|
204
204
|
<h3 class="font-semibold">Chart Example</h3>
|
|
205
205
|
</template>
|
|
206
206
|
<ClientOnly>
|
|
207
|
-
<
|
|
207
|
+
<VACardWithChart
|
|
208
208
|
name="User Growth"
|
|
209
209
|
value="582"
|
|
210
210
|
/>
|
|
@@ -212,8 +212,8 @@ const handleClick = () => {
|
|
|
212
212
|
</UCard>
|
|
213
213
|
</div>
|
|
214
214
|
|
|
215
|
-
<!--
|
|
216
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
215
|
+
<!-- VACardWithChartBlock Section -->
|
|
216
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardWithChartBlock</h2>
|
|
217
217
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card with chart block layout and title overlay.</p>
|
|
218
218
|
<div class="mb-8">
|
|
219
219
|
<UCard>
|
|
@@ -221,20 +221,20 @@ const handleClick = () => {
|
|
|
221
221
|
<h3 class="font-semibold">Chart Block Example</h3>
|
|
222
222
|
</template>
|
|
223
223
|
<ClientOnly>
|
|
224
|
-
<
|
|
224
|
+
<VACardWithChartBlock
|
|
225
225
|
title="Performance Metrics"
|
|
226
226
|
text="Last 30 days"
|
|
227
227
|
>
|
|
228
228
|
<div class="h-32 bg-gradient-to-r from-blue-400 to-blue-600 rounded flex items-center justify-center">
|
|
229
229
|
<span class="text-white font-semibold">Chart Visualization</span>
|
|
230
230
|
</div>
|
|
231
|
-
</
|
|
231
|
+
</VACardWithChartBlock>
|
|
232
232
|
</ClientOnly>
|
|
233
233
|
</UCard>
|
|
234
234
|
</div>
|
|
235
235
|
|
|
236
|
-
<!--
|
|
237
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
236
|
+
<!-- VACardWithActiveUsers Section -->
|
|
237
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardWithActiveUsers</h2>
|
|
238
238
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card displaying active user metrics with percentage changes.</p>
|
|
239
239
|
<div class="mb-8">
|
|
240
240
|
<UCard>
|
|
@@ -243,7 +243,7 @@ const handleClick = () => {
|
|
|
243
243
|
</template>
|
|
244
244
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
245
245
|
<ClientOnly v-for="user in activeUsers" :key="user.metric">
|
|
246
|
-
<
|
|
246
|
+
<VACardWithActiveUsers
|
|
247
247
|
:metric="user.metric"
|
|
248
248
|
:current="user.current"
|
|
249
249
|
:percent-change="user.percentChange"
|
|
@@ -253,8 +253,8 @@ const handleClick = () => {
|
|
|
253
253
|
</UCard>
|
|
254
254
|
</div>
|
|
255
255
|
|
|
256
|
-
<!--
|
|
257
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
256
|
+
<!-- VACardDonutChart Section -->
|
|
257
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardDonutChart</h2>
|
|
258
258
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card with donut chart and category breakdown.</p>
|
|
259
259
|
<div class="mb-8">
|
|
260
260
|
<UCard>
|
|
@@ -262,7 +262,7 @@ const handleClick = () => {
|
|
|
262
262
|
<h3 class="font-semibold">Donut Chart Example</h3>
|
|
263
263
|
</template>
|
|
264
264
|
<ClientOnly>
|
|
265
|
-
<
|
|
265
|
+
<VACardDonutChart
|
|
266
266
|
:data="donutChartData"
|
|
267
267
|
title="Traffic Sources"
|
|
268
268
|
total-value="100%"
|
|
@@ -271,8 +271,8 @@ const handleClick = () => {
|
|
|
271
271
|
</UCard>
|
|
272
272
|
</div>
|
|
273
273
|
|
|
274
|
-
<!--
|
|
275
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
274
|
+
<!-- VACardLatestOrders Section -->
|
|
275
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardLatestOrders</h2>
|
|
276
276
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card displaying recent orders in a table format.</p>
|
|
277
277
|
<div class="mb-8">
|
|
278
278
|
<UCard>
|
|
@@ -280,13 +280,13 @@ const handleClick = () => {
|
|
|
280
280
|
<h3 class="font-semibold">Orders Table Example</h3>
|
|
281
281
|
</template>
|
|
282
282
|
<ClientOnly>
|
|
283
|
-
<
|
|
283
|
+
<VACardLatestOrders :orders="orders" />
|
|
284
284
|
</ClientOnly>
|
|
285
285
|
</UCard>
|
|
286
286
|
</div>
|
|
287
287
|
|
|
288
|
-
<!--
|
|
289
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
288
|
+
<!-- VACardPopularProducts Section -->
|
|
289
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardPopularProducts</h2>
|
|
290
290
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card showing popular products with stock status.</p>
|
|
291
291
|
<div class="mb-8">
|
|
292
292
|
<UCard>
|
|
@@ -294,13 +294,13 @@ const handleClick = () => {
|
|
|
294
294
|
<h3 class="font-semibold">Products Table Example</h3>
|
|
295
295
|
</template>
|
|
296
296
|
<ClientOnly>
|
|
297
|
-
<
|
|
297
|
+
<VACardPopularProducts :products="products" />
|
|
298
298
|
</ClientOnly>
|
|
299
299
|
</UCard>
|
|
300
300
|
</div>
|
|
301
301
|
|
|
302
|
-
<!--
|
|
303
|
-
<h2 class="text-2xl font-semibold mb-4 mt-8">
|
|
302
|
+
<!-- VACardRevenueBarChart Section -->
|
|
303
|
+
<h2 class="text-2xl font-semibold mb-4 mt-8">VACardRevenueBarChart</h2>
|
|
304
304
|
<p class="text-gray-600 dark:text-gray-400 mb-4">Card with bar chart comparing revenue and expenses.</p>
|
|
305
305
|
<div class="mb-8">
|
|
306
306
|
<UCard>
|
|
@@ -308,7 +308,7 @@ const handleClick = () => {
|
|
|
308
308
|
<h3 class="font-semibold">Revenue Bar Chart Example</h3>
|
|
309
309
|
</template>
|
|
310
310
|
<ClientOnly>
|
|
311
|
-
<
|
|
311
|
+
<VACardRevenueBarChart
|
|
312
312
|
title="Revenue vs Expenses"
|
|
313
313
|
total-value="$328,000"
|
|
314
314
|
:data="revenueData"
|