@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,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>