@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,101 @@
|
|
|
1
|
+
// Tasks data for dashboard components
|
|
2
|
+
|
|
3
|
+
export interface Task {
|
|
4
|
+
project: string
|
|
5
|
+
title: string
|
|
6
|
+
files: number
|
|
7
|
+
comments: number
|
|
8
|
+
deadline: Date
|
|
9
|
+
priority: 'Urgent' | 'Normal' | 'Low'
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface TaskColumn {
|
|
13
|
+
id: string
|
|
14
|
+
title: string
|
|
15
|
+
tasks: Task[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const TasksData: TaskColumn[] = [
|
|
19
|
+
{
|
|
20
|
+
id: '1',
|
|
21
|
+
title: 'Backlog',
|
|
22
|
+
tasks: [
|
|
23
|
+
{
|
|
24
|
+
project: 'website',
|
|
25
|
+
title: 'Implement user authentication',
|
|
26
|
+
files: 2,
|
|
27
|
+
comments: 5,
|
|
28
|
+
deadline: new Date('2025-05-13'),
|
|
29
|
+
priority: 'Urgent' as const
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
project: 'mobile-app',
|
|
33
|
+
title: 'Design onboarding flow',
|
|
34
|
+
files: 3,
|
|
35
|
+
comments: 8,
|
|
36
|
+
deadline: new Date('2026-01-01'),
|
|
37
|
+
priority: 'Normal' as const
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
project: 'api',
|
|
41
|
+
title: 'Write documentation for endpoints',
|
|
42
|
+
files: 1,
|
|
43
|
+
comments: 3,
|
|
44
|
+
deadline: new Date('2026-01-01'),
|
|
45
|
+
priority: 'Low' as const
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: '2',
|
|
51
|
+
title: 'In Progress',
|
|
52
|
+
tasks: [
|
|
53
|
+
{
|
|
54
|
+
project: 'dashboard',
|
|
55
|
+
title: 'Integrate payment gateway',
|
|
56
|
+
files: 5,
|
|
57
|
+
comments: 12,
|
|
58
|
+
deadline: new Date('2026-01-01'),
|
|
59
|
+
priority: 'Urgent' as const
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
project: 'e-commerce',
|
|
63
|
+
title: 'Optimize product search',
|
|
64
|
+
files: 2,
|
|
65
|
+
comments: 7,
|
|
66
|
+
deadline: new Date('2026-01-01'),
|
|
67
|
+
priority: 'Normal' as const
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: '3',
|
|
73
|
+
title: 'In Review',
|
|
74
|
+
tasks: [
|
|
75
|
+
{
|
|
76
|
+
project: 'marketing',
|
|
77
|
+
title: 'Finalize social media campaign',
|
|
78
|
+
files: 3,
|
|
79
|
+
comments: 9,
|
|
80
|
+
deadline: new Date('2026-01-01'),
|
|
81
|
+
priority: 'Normal' as const
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
project: 'website',
|
|
85
|
+
title: 'Test contact form',
|
|
86
|
+
files: 1,
|
|
87
|
+
comments: 4,
|
|
88
|
+
deadline: new Date('2026-01-01'),
|
|
89
|
+
priority: 'Urgent' as const
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
project: 'mobile-app',
|
|
93
|
+
title: 'Review push notification implementation',
|
|
94
|
+
files: 2,
|
|
95
|
+
comments: 6,
|
|
96
|
+
deadline: new Date('2026-01-01'),
|
|
97
|
+
priority: 'Normal' as const
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// Dashboard data for playground components
|
|
2
|
+
|
|
3
|
+
export const RevenueData = [
|
|
4
|
+
{ month: 'July 2023', total: 180 },
|
|
5
|
+
{ month: 'August 2023', total: 195 },
|
|
6
|
+
{ month: 'September 2023', total: 210 },
|
|
7
|
+
{ month: 'October 2023', total: 225 },
|
|
8
|
+
{ month: 'November 2023', total: 240 },
|
|
9
|
+
{ month: 'December 2023', total: 260 },
|
|
10
|
+
{ month: 'January 2024', total: 205 },
|
|
11
|
+
{ month: 'February 2024', total: 220 },
|
|
12
|
+
{ month: 'March 2024', total: 235 },
|
|
13
|
+
{ month: 'April 2024', total: 250 },
|
|
14
|
+
{ month: 'May 2024', total: 265 },
|
|
15
|
+
{ month: 'June 2024', total: 280 }
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
export const RevenueCategoriesMultiple = {
|
|
19
|
+
total: { name: 'Total', color: '#3b82f6' }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const xFormatter = (i: number): string => `${RevenueData[i]?.month}`
|
|
23
|
+
export const yFormatter = (i: number) => `${i}`
|
|
24
|
+
|
|
25
|
+
export interface Order {
|
|
26
|
+
id: number
|
|
27
|
+
customer: string
|
|
28
|
+
date: string
|
|
29
|
+
total: number
|
|
30
|
+
status: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const orders: Order[] = [
|
|
34
|
+
{ id: 1001, customer: 'Alice Johnson', date: '2025-06-18', total: 120.50, status: 'Paid' },
|
|
35
|
+
{ id: 1002, customer: 'Bob Smith', date: '2025-06-17', total: 89.99, status: 'Pending' },
|
|
36
|
+
{ id: 1003, customer: 'Charlie Brown', date: '2025-06-16', total: 45.00, status: 'Paid' },
|
|
37
|
+
{ id: 1004, customer: 'Diana Ross', date: '2025-06-15', total: 210.00, status: 'Failed' },
|
|
38
|
+
{ id: 1005, customer: 'Eve Wilson', date: '2025-06-14', total: 67.25, status: 'Paid' }
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
export const DonutData = [
|
|
42
|
+
{ color: '#3b82f6', name: 'Laptops', value: 38 },
|
|
43
|
+
{ color: '#a855f7', name: 'Smartphones', value: 27 },
|
|
44
|
+
{ color: '#22c55e', name: 'PC Components', value: 18 },
|
|
45
|
+
{ color: '#f59e42', name: 'Monitors', value: 9 }
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
export const products = [
|
|
49
|
+
{ id: 1, name: 'MacBook Pro 16"', category: 'Laptops', stock: 8, image: '/images/products/laptop.png' },
|
|
50
|
+
{ id: 2, name: 'iPhone 15 Pro', category: 'Smartphones', stock: 0, image: '/images/products/phone.webp' },
|
|
51
|
+
{ id: 3, name: 'Dell UltraSharp 27', category: 'Monitors', stock: 15, image: '/images/products/monitor.webp' },
|
|
52
|
+
{ id: 4, name: 'Logitech MX Master 3S', category: 'Accessories', stock: 4, image: '/images/products/mouse.webp' }
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
export const ReturnsData = {
|
|
56
|
+
chartData: [
|
|
57
|
+
{ date: 'Jan 23', returns: 45 },
|
|
58
|
+
{ date: 'Feb 23', returns: 38 },
|
|
59
|
+
{ date: 'Mar 23', returns: 52 },
|
|
60
|
+
{ date: 'Apr 23', returns: 41 },
|
|
61
|
+
{ date: 'May 23', returns: 36 },
|
|
62
|
+
{ date: 'Jun 23', returns: 29 },
|
|
63
|
+
{ date: 'Jul 23', returns: 33 },
|
|
64
|
+
{ date: 'Aug 23', returns: 27 },
|
|
65
|
+
{ date: 'Sep 23', returns: 31 },
|
|
66
|
+
{ date: 'Oct 23', returns: 25 },
|
|
67
|
+
{ date: 'Nov 23', returns: 22 },
|
|
68
|
+
{ date: 'Dec 23', returns: 19 }
|
|
69
|
+
],
|
|
70
|
+
categories: {
|
|
71
|
+
returns: { name: 'Returns', color: '#a1a1aa' }
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export const RevenueDataCard = {
|
|
76
|
+
chartData: [
|
|
77
|
+
{ date: 'Jan 23', subscriptions: 2890, downloads: 2338 },
|
|
78
|
+
{ date: 'Feb 23', subscriptions: 2756, downloads: 2103 },
|
|
79
|
+
{ date: 'Mar 23', subscriptions: 3322, downloads: 2194 },
|
|
80
|
+
{ date: 'Apr 23', subscriptions: 3470, downloads: 2108 },
|
|
81
|
+
{ date: 'May 23', subscriptions: 3475, downloads: 1812 },
|
|
82
|
+
{ date: 'Jun 23', subscriptions: 3129, downloads: 1726 },
|
|
83
|
+
{ date: 'Jul 23', subscriptions: 3490, downloads: 1982 },
|
|
84
|
+
{ date: 'Aug 23', subscriptions: 2903, downloads: 2012 },
|
|
85
|
+
{ date: 'Sep 23', subscriptions: 2643, downloads: 2342 },
|
|
86
|
+
{ date: 'Oct 23', subscriptions: 2837, downloads: 2473 },
|
|
87
|
+
{ date: 'Nov 23', subscriptions: 2954, downloads: 3848 },
|
|
88
|
+
{ date: 'Dec 23', subscriptions: 3239, downloads: 3736 }
|
|
89
|
+
],
|
|
90
|
+
categories: {
|
|
91
|
+
subscriptions: { name: 'Subscriptions', color: '#3b82f6' }
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export const SalesData = {
|
|
96
|
+
chartData: [
|
|
97
|
+
{ date: 'Jan 23', sales: 1245 },
|
|
98
|
+
{ date: 'Feb 23', sales: 1390 },
|
|
99
|
+
{ date: 'Mar 23', sales: 1512 },
|
|
100
|
+
{ date: 'Apr 23', sales: 1620 },
|
|
101
|
+
{ date: 'May 23', sales: 1750 },
|
|
102
|
+
{ date: 'Jun 23', sales: 1688 },
|
|
103
|
+
{ date: 'Jul 23', sales: 1823 },
|
|
104
|
+
{ date: 'Aug 23', sales: 1940 },
|
|
105
|
+
{ date: 'Sep 23', sales: 2012 },
|
|
106
|
+
{ date: 'Oct 23', sales: 2105 },
|
|
107
|
+
{ date: 'Nov 23', sales: 2250 },
|
|
108
|
+
{ date: 'Dec 23', sales: 2398 }
|
|
109
|
+
],
|
|
110
|
+
categories: {
|
|
111
|
+
sales: { name: 'Sales', color: '#3b82f6' }
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { NavigationMenuItem } from '@nuxt/ui'
|
|
3
|
+
|
|
4
|
+
const route = useRoute()
|
|
5
|
+
|
|
6
|
+
const links = ref<NavigationMenuItem[][]>([
|
|
7
|
+
[
|
|
8
|
+
{
|
|
9
|
+
to: '/',
|
|
10
|
+
icon: 'i-lucide-home',
|
|
11
|
+
label: 'Overview'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
to: '/playground',
|
|
15
|
+
icon: 'i-lucide-blocks',
|
|
16
|
+
label: 'Playground',
|
|
17
|
+
open: true,
|
|
18
|
+
children: [
|
|
19
|
+
{
|
|
20
|
+
to: '/playground',
|
|
21
|
+
icon: 'i-lucide-layout-grid',
|
|
22
|
+
label: 'Components'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
to: '/playground/cards',
|
|
26
|
+
icon: 'i-lucide-credit-card',
|
|
27
|
+
label: 'Cards'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
to: '/playground/charts',
|
|
31
|
+
icon: 'i-lucide-bar-chart-3',
|
|
32
|
+
label: 'Charts'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
to: '/playground/blocks',
|
|
36
|
+
icon: 'i-lucide-layout-template',
|
|
37
|
+
label: 'Blocks'
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
to: '/playground/dashboard',
|
|
41
|
+
icon: 'i-lucide-layout-dashboard',
|
|
42
|
+
label: 'Dashboard'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
to: '/playground/tables',
|
|
46
|
+
icon: 'i-lucide-table-2',
|
|
47
|
+
label: 'Tables'
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
to: '/playground/base',
|
|
51
|
+
icon: 'i-lucide-box',
|
|
52
|
+
label: 'Base Components'
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
to: '/playground/buttons',
|
|
56
|
+
icon: 'i-lucide-mouse-pointer-click',
|
|
57
|
+
label: 'Buttons'
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
to: '/playground/formatters',
|
|
61
|
+
icon: 'i-lucide-text-cursor-input',
|
|
62
|
+
label: 'Formatters'
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
to: '/playground/states',
|
|
66
|
+
icon: 'i-lucide-loader',
|
|
67
|
+
label: 'States'
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
to: '/playground/modals',
|
|
71
|
+
icon: 'i-lucide-panel-right',
|
|
72
|
+
label: 'Modals'
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
])
|
|
78
|
+
|
|
79
|
+
const groups = computed(() => [
|
|
80
|
+
{
|
|
81
|
+
id: 'links',
|
|
82
|
+
label: 'Go to',
|
|
83
|
+
items: links.value.flat()
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: 'code',
|
|
87
|
+
label: 'Code',
|
|
88
|
+
items: [
|
|
89
|
+
{
|
|
90
|
+
id: 'source',
|
|
91
|
+
label: 'View page source',
|
|
92
|
+
icon: 'i-simple-icons-github',
|
|
93
|
+
to: `https://github.com/nuxt-ui-templates/dashboard/blob/main/app/pages${
|
|
94
|
+
route.path === '/' ? '/index' : route.path
|
|
95
|
+
}.vue`,
|
|
96
|
+
target: '_blank'
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
])
|
|
101
|
+
</script>
|
|
102
|
+
|
|
103
|
+
<template>
|
|
104
|
+
<UDashboardGroup unit="rem">
|
|
105
|
+
<UDashboardSidebar
|
|
106
|
+
resizable
|
|
107
|
+
collapsible
|
|
108
|
+
:min-size="14"
|
|
109
|
+
:default-size="16"
|
|
110
|
+
:max-size="18"
|
|
111
|
+
>
|
|
112
|
+
<template #header="{ collapsed }">
|
|
113
|
+
<div
|
|
114
|
+
class="flex items-center gap-2 px-3 py-2"
|
|
115
|
+
:class="collapsed ? 'justify-center' : ''"
|
|
116
|
+
>
|
|
117
|
+
<div class="size-8 rounded-lg bg-primary-500/10 flex items-center justify-center shrink-0">
|
|
118
|
+
<UIcon name="i-lucide-layout-dashboard" class="size-5 text-primary-500" />
|
|
119
|
+
</div>
|
|
120
|
+
<span v-if="!collapsed" class="font-semibold text-lg truncate">VA Playground</span>
|
|
121
|
+
</div>
|
|
122
|
+
</template>
|
|
123
|
+
|
|
124
|
+
<template #default="{ collapsed }">
|
|
125
|
+
<VaLayoutSideNav
|
|
126
|
+
:items="links[0]!"
|
|
127
|
+
:collapsed="collapsed"
|
|
128
|
+
/>
|
|
129
|
+
|
|
130
|
+
<!-- Accounts section commented out - requires /analytics.svg asset
|
|
131
|
+
<div class="space-y-1 mt-4">
|
|
132
|
+
<div
|
|
133
|
+
v-if="!collapsed"
|
|
134
|
+
class="mb-2 text-xs font-bold tracking-wide text-dimmed uppercase"
|
|
135
|
+
>
|
|
136
|
+
Accounts
|
|
137
|
+
</div>
|
|
138
|
+
<div>
|
|
139
|
+
<div
|
|
140
|
+
class="flex items-center gap-2"
|
|
141
|
+
:class="collapsed ? 'p-0 justify-center' : 'px-3 py-2'"
|
|
142
|
+
>
|
|
143
|
+
<img
|
|
144
|
+
class="w-4"
|
|
145
|
+
src="/analytics.svg"
|
|
146
|
+
alt=""
|
|
147
|
+
>
|
|
148
|
+
<div
|
|
149
|
+
v-if="!collapsed"
|
|
150
|
+
class="text-muted font-medium"
|
|
151
|
+
>
|
|
152
|
+
Google Analytics
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
-->
|
|
158
|
+
|
|
159
|
+
</template>
|
|
160
|
+
|
|
161
|
+
<template #footer="{ collapsed }">
|
|
162
|
+
<VaLayoutUserMenu :collapsed="collapsed" />
|
|
163
|
+
</template>
|
|
164
|
+
</UDashboardSidebar>
|
|
165
|
+
|
|
166
|
+
<UDashboardSearch :groups="groups" />
|
|
167
|
+
|
|
168
|
+
<slot />
|
|
169
|
+
<VaLayoutNotificationsSlideover />
|
|
170
|
+
</UDashboardGroup>
|
|
171
|
+
</template>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { NavigationMenuItem } from '@nuxt/ui'
|
|
3
|
+
|
|
4
|
+
// Convert navigation to new format
|
|
5
|
+
const links: NavigationMenuItem[][] = [
|
|
6
|
+
[
|
|
7
|
+
{ label: 'Home', icon: 'i-lucide-home', to: '/' },
|
|
8
|
+
{ label: 'Loans', icon: 'i-lucide-landmark', to: '/loans' },
|
|
9
|
+
{ label: 'Tapes', icon: 'i-lucide-layers', to: '/tapes' },
|
|
10
|
+
{ label: 'Contacts', icon: 'i-lucide-users', to: '/contacts' },
|
|
11
|
+
{ label: 'Companies', icon: 'i-lucide-building-2', to: '/companies' },
|
|
12
|
+
{ label: 'Deals', icon: 'i-lucide-handshake', to: '/deals', badge: 8 },
|
|
13
|
+
{ label: 'Tasks', icon: 'i-lucide-check-square', to: '/tasks', badge: 12 }
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
{ label: 'Settings', icon: 'i-lucide-settings', to: '/settings' },
|
|
17
|
+
{ label: 'Help', icon: 'i-lucide-circle-help', to: '/help' }
|
|
18
|
+
]
|
|
19
|
+
]
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<UDashboardGroup unit="rem">
|
|
24
|
+
<UDashboardSidebar
|
|
25
|
+
resizable
|
|
26
|
+
collapsible
|
|
27
|
+
:min-size="14"
|
|
28
|
+
:default-size="16"
|
|
29
|
+
:max-size="18"
|
|
30
|
+
>
|
|
31
|
+
<template #header="{ collapsed }">
|
|
32
|
+
<VaLayoutTeamsMenu :collapsed="collapsed" />
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<template #default="{ collapsed }">
|
|
36
|
+
<VaLayoutSideNav
|
|
37
|
+
:items="links[0]!"
|
|
38
|
+
:collapsed="collapsed"
|
|
39
|
+
/>
|
|
40
|
+
|
|
41
|
+
<div class="mt-auto">
|
|
42
|
+
<UNavigationMenu
|
|
43
|
+
:collapsed="collapsed"
|
|
44
|
+
:items="links[1]"
|
|
45
|
+
orientation="vertical"
|
|
46
|
+
tooltip
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
</template>
|
|
50
|
+
|
|
51
|
+
<template #footer="{ collapsed }">
|
|
52
|
+
<VaLayoutUserMenu :collapsed="collapsed" />
|
|
53
|
+
</template>
|
|
54
|
+
</UDashboardSidebar>
|
|
55
|
+
|
|
56
|
+
<slot name="header" />
|
|
57
|
+
<slot name="header-actions" />
|
|
58
|
+
<slot />
|
|
59
|
+
<VaLayoutNotificationsSlideover />
|
|
60
|
+
</UDashboardGroup>
|
|
61
|
+
</template>
|