@brumaombra/ui-vintage 0.9.1 → 0.9.2

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 (334) hide show
  1. package/module.mjs +43 -43
  2. package/package.json +175 -175
  3. package/src/components/background-grid/BackgroundGrid.vue +4 -4
  4. package/src/components/blog/AllPostsSection.vue +33 -33
  5. package/src/components/blog/BlogContentRenderer.vue +111 -111
  6. package/src/components/blog/BlogFAQSection.vue +19 -19
  7. package/src/components/blog/BlogHeaderSection.vue +80 -80
  8. package/src/components/blog/BlogInfoSection.vue +47 -47
  9. package/src/components/blog/BlogPostHeader.vue +135 -135
  10. package/src/components/blog/BlogProgressBar.vue +33 -33
  11. package/src/components/blog/BlogSectionTitle.vue +22 -22
  12. package/src/components/blog/BlogTagsSection.vue +25 -25
  13. package/src/components/blog/CategoriesList.vue +14 -14
  14. package/src/components/blog/CategoriesSection.vue +11 -11
  15. package/src/components/blog/CategoryCard.vue +25 -25
  16. package/src/components/blog/HeaderCarousel.vue +97 -97
  17. package/src/components/blog/PostCard.vue +33 -33
  18. package/src/components/blog/PostsList.vue +15 -15
  19. package/src/components/blog/SocialShareSidebar.vue +84 -84
  20. package/src/components/blog/TableOfContents.vue +307 -307
  21. package/src/components/busy-indicator/BusyIndicator.vue +7 -7
  22. package/src/components/busy-indicator/busy-indicator-state.ts +56 -56
  23. package/src/components/card-grid/CardGrid.vue +34 -34
  24. package/src/components/chip/Chip.vue +15 -15
  25. package/src/components/confirm-dialog/ConfirmDialog.vue +50 -50
  26. package/src/components/confirm-dialog/confirm-dialog-state.ts +131 -131
  27. package/src/components/content/BlogList.vue +30 -30
  28. package/src/components/content/BlogTable.vue +36 -36
  29. package/src/components/content/CodeBlock.vue +136 -136
  30. package/src/components/content/Flow.vue +60 -60
  31. package/src/components/content/ProseHr.vue +15 -15
  32. package/src/components/content/ProsePre.vue +12 -12
  33. package/src/components/content/Terminal.vue +59 -59
  34. package/src/components/cookie-consent/CookieConsent.vue +36 -36
  35. package/src/components/cookie-consent/useCookieConsent.ts +37 -37
  36. package/src/components/dashboard-shell/DashboardShell.vue +171 -171
  37. package/src/components/data-list/DataList.vue +6 -6
  38. package/src/components/data-list/DataListItem.vue +4 -4
  39. package/src/components/data-list/DataListLabel.vue +4 -4
  40. package/src/components/data-list/DataListText.vue +4 -4
  41. package/src/components/data-list/DataListValue.vue +4 -4
  42. package/src/components/empty-state-card/EmptyStateCard.vue +40 -40
  43. package/src/components/error-page/ErrorPage.vue +72 -72
  44. package/src/components/info-card/InfoCard.vue +31 -31
  45. package/src/components/landing/landing-content/LandingContent.vue +4 -4
  46. package/src/components/landing/landing-footer/LandingFooter.vue +128 -128
  47. package/src/components/landing/landing-navbar/LandingNavbar.vue +50 -50
  48. package/src/components/landing/landing-shell/LandingShell.vue +36 -36
  49. package/src/components/language-flag/LanguageFlag.vue +25 -25
  50. package/src/components/language-flag/flags/ChineseFlag.vue +8 -8
  51. package/src/components/language-flag/flags/EnglishFlag.vue +7 -7
  52. package/src/components/language-flag/flags/FrenchFlag.vue +5 -5
  53. package/src/components/language-flag/flags/GermanFlag.vue +5 -5
  54. package/src/components/language-flag/flags/ItalianFlag.vue +7 -7
  55. package/src/components/language-flag/flags/JapaneseFlag.vue +4 -4
  56. package/src/components/language-flag/flags/PortugueseFlag.vue +57 -57
  57. package/src/components/language-flag/flags/RussianFlag.vue +5 -5
  58. package/src/components/language-flag/flags/SpanishFlag.vue +4 -4
  59. package/src/components/language-selector/LanguageSelector.vue +76 -76
  60. package/src/components/load-more-button/LoadMoreButton.vue +17 -17
  61. package/src/components/loading-state-card/LoadingStateCard.vue +28 -28
  62. package/src/components/message-dialog/MessageDialog.vue +59 -59
  63. package/src/components/message-dialog/message-dialog-state.ts +105 -105
  64. package/src/components/message-toast/MessageToast.vue +149 -149
  65. package/src/components/message-toast/message-toast-state.ts +146 -146
  66. package/src/components/page-header/PageHeader.vue +34 -34
  67. package/src/components/progress-component/ProgressComponent.vue +33 -33
  68. package/src/components/single-value-card/SingleValueCard.vue +57 -57
  69. package/src/components/slider-form-component/SliderFormComponent.vue +36 -36
  70. package/src/components/stat-strip/StatStrip.vue +22 -22
  71. package/src/components/switch-form-component/SwitchFormComponent.vue +20 -20
  72. package/src/components/text-link/TextLink.vue +14 -14
  73. package/src/components/theme-selector/ThemeSelector.vue +61 -61
  74. package/src/components/theme-selector/theme-transition.ts +63 -63
  75. package/src/components/ui/accordion/Accordion.vue +38 -38
  76. package/src/components/ui/alert/Alert.vue +5 -5
  77. package/src/components/ui/alert/AlertDescription.vue +4 -4
  78. package/src/components/ui/alert/AlertTitle.vue +4 -4
  79. package/src/components/ui/alert/index.ts +2 -2
  80. package/src/components/ui/alert-dialog/AlertDialog.vue +3 -3
  81. package/src/components/ui/alert-dialog/AlertDialogAction.vue +3 -3
  82. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +3 -3
  83. package/src/components/ui/alert-dialog/AlertDialogContent.vue +7 -7
  84. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +3 -3
  85. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +4 -4
  86. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +4 -4
  87. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +3 -3
  88. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -3
  89. package/src/components/ui/animated-number/AnimatedNumber.vue +49 -48
  90. package/src/components/ui/avatar/Avatar.vue +28 -28
  91. package/src/components/ui/avatar/AvatarFallback.vue +6 -6
  92. package/src/components/ui/avatar/AvatarGroup.vue +40 -40
  93. package/src/components/ui/avatar/AvatarImage.vue +3 -3
  94. package/src/components/ui/avatar/index.ts +17 -17
  95. package/src/components/ui/badge/Badge.vue +20 -20
  96. package/src/components/ui/breadcrumb/Breadcrumb.vue +4 -4
  97. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +9 -9
  98. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +4 -4
  99. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +4 -4
  100. package/src/components/ui/breadcrumb/BreadcrumbList.vue +4 -4
  101. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +4 -4
  102. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +4 -4
  103. package/src/components/ui/busy/Busy.vue +33 -33
  104. package/src/components/ui/button/Button.vue +23 -23
  105. package/src/components/ui/button/index.ts +56 -56
  106. package/src/components/ui/calendar/Calendar.vue +138 -138
  107. package/src/components/ui/calendar/CalendarCell.vue +7 -7
  108. package/src/components/ui/calendar/CalendarCellTrigger.vue +18 -18
  109. package/src/components/ui/calendar/CalendarGrid.vue +3 -3
  110. package/src/components/ui/calendar/CalendarGridBody.vue +3 -3
  111. package/src/components/ui/calendar/CalendarGridHead.vue +3 -3
  112. package/src/components/ui/calendar/CalendarGridRow.vue +3 -3
  113. package/src/components/ui/calendar/CalendarHeadCell.vue +7 -7
  114. package/src/components/ui/calendar/CalendarHeader.vue +7 -7
  115. package/src/components/ui/calendar/CalendarHeading.vue +6 -6
  116. package/src/components/ui/calendar/CalendarNextButton.vue +15 -15
  117. package/src/components/ui/calendar/CalendarPrevButton.vue +15 -15
  118. package/src/components/ui/calendar/index.ts +4 -4
  119. package/src/components/ui/card/Card.vue +20 -20
  120. package/src/components/ui/card/CardAction.vue +8 -8
  121. package/src/components/ui/card/CardContent.vue +4 -4
  122. package/src/components/ui/card/CardDescription.vue +12 -12
  123. package/src/components/ui/card/CardFooter.vue +4 -4
  124. package/src/components/ui/card/CardHeader.vue +8 -8
  125. package/src/components/ui/card/CardText.vue +8 -8
  126. package/src/components/ui/card/CardTitle.vue +8 -8
  127. package/src/components/ui/checkbox/Checkbox.vue +27 -27
  128. package/src/components/ui/collapsible/Collapsible.vue +3 -3
  129. package/src/components/ui/collapsible/CollapsibleContent.vue +3 -3
  130. package/src/components/ui/collapsible/CollapsibleTrigger.vue +3 -3
  131. package/src/components/ui/combobox/Combobox.vue +4 -4
  132. package/src/components/ui/combobox/ComboboxAnchor.vue +16 -16
  133. package/src/components/ui/combobox/ComboboxEmpty.vue +3 -3
  134. package/src/components/ui/combobox/ComboboxGroup.vue +9 -9
  135. package/src/components/ui/combobox/ComboboxInput.vue +6 -6
  136. package/src/components/ui/combobox/ComboboxItem.vue +17 -17
  137. package/src/components/ui/combobox/ComboboxList.vue +19 -19
  138. package/src/components/ui/combobox/ComboboxSelect.vue +77 -77
  139. package/src/components/ui/combobox/ComboboxSeparator.vue +1 -1
  140. package/src/components/ui/combobox/ComboboxTrigger.vue +10 -10
  141. package/src/components/ui/combobox/types.ts +5 -5
  142. package/src/components/ui/command/Command.vue +48 -48
  143. package/src/components/ui/command/CommandDialog.vue +14 -14
  144. package/src/components/ui/command/CommandEmpty.vue +4 -4
  145. package/src/components/ui/command/CommandGroup.vue +23 -23
  146. package/src/components/ui/command/CommandInput.vue +9 -9
  147. package/src/components/ui/command/CommandItem.vue +40 -40
  148. package/src/components/ui/command/CommandList.vue +9 -9
  149. package/src/components/ui/command/CommandSeparator.vue +3 -3
  150. package/src/components/ui/command/CommandShortcut.vue +8 -8
  151. package/src/components/ui/command/index.ts +11 -11
  152. package/src/components/ui/data-table/DataTable.vue +145 -145
  153. package/src/components/ui/data-table/index.ts +11 -11
  154. package/src/components/ui/date-picker/DatePicker.vue +31 -31
  155. package/src/components/ui/date-time-picker/DateTimePicker.vue +97 -97
  156. package/src/components/ui/dialog/Dialog.vue +3 -3
  157. package/src/components/ui/dialog/DialogClose.vue +3 -3
  158. package/src/components/ui/dialog/DialogContent.vue +21 -21
  159. package/src/components/ui/dialog/DialogDescription.vue +7 -7
  160. package/src/components/ui/dialog/DialogFooter.vue +8 -8
  161. package/src/components/ui/dialog/DialogHeader.vue +4 -4
  162. package/src/components/ui/dialog/DialogOverlay.vue +7 -7
  163. package/src/components/ui/dialog/DialogScrollContent.vue +32 -32
  164. package/src/components/ui/dialog/DialogTitle.vue +3 -3
  165. package/src/components/ui/dialog/DialogTrigger.vue +3 -3
  166. package/src/components/ui/dropdown-menu/DropdownMenu.vue +3 -3
  167. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +11 -11
  168. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +15 -15
  169. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +3 -3
  170. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +12 -12
  171. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +9 -9
  172. package/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +3 -3
  173. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +3 -3
  174. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +11 -11
  175. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -1
  176. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +4 -4
  177. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -3
  178. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +15 -15
  179. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +15 -15
  180. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +3 -3
  181. package/src/components/ui/dropdown-menu/classes.ts +16 -16
  182. package/src/components/ui/field/Field.vue +5 -5
  183. package/src/components/ui/field/FieldContent.vue +8 -8
  184. package/src/components/ui/field/FieldDescription.vue +10 -10
  185. package/src/components/ui/field/FieldError.vue +39 -39
  186. package/src/components/ui/field/FieldGroup.vue +8 -8
  187. package/src/components/ui/field/FieldLabel.vue +10 -10
  188. package/src/components/ui/field/FieldLegend.vue +11 -11
  189. package/src/components/ui/field/FieldSeparator.vue +11 -11
  190. package/src/components/ui/field/FieldSet.vue +9 -9
  191. package/src/components/ui/field/FieldTitle.vue +8 -8
  192. package/src/components/ui/field/field-context.ts +36 -36
  193. package/src/components/ui/field/index.ts +22 -22
  194. package/src/components/ui/file-dropzone/FileDropzone.vue +144 -144
  195. package/src/components/ui/file-dropzone/index.ts +19 -19
  196. package/src/components/ui/hover-card/HoverCard.vue +5 -5
  197. package/src/components/ui/hover-card/HoverCardContent.vue +13 -13
  198. package/src/components/ui/hover-card/HoverCardTrigger.vue +3 -3
  199. package/src/components/ui/input/Input.vue +13 -13
  200. package/src/components/ui/kbd/Kbd.vue +10 -10
  201. package/src/components/ui/kbd/KbdGroup.vue +49 -49
  202. package/src/components/ui/label/Label.vue +7 -7
  203. package/src/components/ui/native-select/NativeSelect.vue +16 -16
  204. package/src/components/ui/native-select/NativeSelectOptGroup.vue +3 -3
  205. package/src/components/ui/native-select/NativeSelectOption.vue +3 -3
  206. package/src/components/ui/number-field/NumberField.vue +88 -88
  207. package/src/components/ui/pagination/Pagination.vue +4 -4
  208. package/src/components/ui/pagination/PaginationContent.vue +4 -4
  209. package/src/components/ui/pagination/PaginationEllipsis.vue +9 -9
  210. package/src/components/ui/pagination/PaginationFirst.vue +8 -8
  211. package/src/components/ui/pagination/PaginationItem.vue +14 -14
  212. package/src/components/ui/pagination/PaginationLast.vue +8 -8
  213. package/src/components/ui/pagination/PaginationNext.vue +8 -8
  214. package/src/components/ui/pagination/PaginationPrevious.vue +8 -8
  215. package/src/components/ui/pagination/SimplePagination.vue +25 -25
  216. package/src/components/ui/pin-input/PinInput.vue +20 -20
  217. package/src/components/ui/pin-input/PinInputInput.vue +17 -17
  218. package/src/components/ui/pin-input/context.ts +1 -1
  219. package/src/components/ui/popover/Popover.vue +3 -3
  220. package/src/components/ui/popover/PopoverAnchor.vue +3 -3
  221. package/src/components/ui/popover/PopoverContent.vue +12 -12
  222. package/src/components/ui/popover/PopoverTrigger.vue +3 -3
  223. package/src/components/ui/progress/Progress.vue +16 -16
  224. package/src/components/ui/radio-group/RadioGroup.vue +7 -7
  225. package/src/components/ui/radio-group/RadioGroupCard.vue +39 -39
  226. package/src/components/ui/radio-group/RadioGroupItem.vue +20 -20
  227. package/src/components/ui/scroll-area/ScrollArea.vue +14 -14
  228. package/src/components/ui/scroll-area/ScrollBar.vue +12 -12
  229. package/src/components/ui/select/Select.vue +3 -3
  230. package/src/components/ui/select/SelectContent.vue +25 -25
  231. package/src/components/ui/select/SelectGroup.vue +3 -3
  232. package/src/components/ui/select/SelectItem.vue +24 -24
  233. package/src/components/ui/select/SelectItemContent.vue +32 -32
  234. package/src/components/ui/select/SelectItemText.vue +3 -3
  235. package/src/components/ui/select/SelectLabel.vue +3 -3
  236. package/src/components/ui/select/SelectScrollDownButton.vue +9 -9
  237. package/src/components/ui/select/SelectScrollUpButton.vue +9 -9
  238. package/src/components/ui/select/SelectSeparator.vue +2 -2
  239. package/src/components/ui/select/SelectTrigger.vue +14 -14
  240. package/src/components/ui/select/SelectValue.vue +3 -3
  241. package/src/components/ui/select/SelectValueContent.vue +39 -39
  242. package/src/components/ui/separator/Separator.vue +7 -7
  243. package/src/components/ui/sheet/Sheet.vue +3 -3
  244. package/src/components/ui/sheet/SheetClose.vue +3 -3
  245. package/src/components/ui/sheet/SheetContent.vue +22 -22
  246. package/src/components/ui/sheet/SheetDescription.vue +3 -3
  247. package/src/components/ui/sheet/SheetFooter.vue +3 -3
  248. package/src/components/ui/sheet/SheetHeader.vue +3 -3
  249. package/src/components/ui/sheet/SheetOverlay.vue +7 -7
  250. package/src/components/ui/sheet/SheetTitle.vue +3 -3
  251. package/src/components/ui/sheet/SheetTrigger.vue +3 -3
  252. package/src/components/ui/sidebar/Sidebar.vue +57 -57
  253. package/src/components/ui/sidebar/SidebarContent.vue +8 -8
  254. package/src/components/ui/sidebar/SidebarFooter.vue +8 -8
  255. package/src/components/ui/sidebar/SidebarGroup.vue +8 -8
  256. package/src/components/ui/sidebar/SidebarGroupAction.vue +9 -9
  257. package/src/components/ui/sidebar/SidebarGroupContent.vue +4 -4
  258. package/src/components/ui/sidebar/SidebarGroupLabel.vue +8 -8
  259. package/src/components/ui/sidebar/SidebarHeader.vue +8 -8
  260. package/src/components/ui/sidebar/SidebarInput.vue +8 -8
  261. package/src/components/ui/sidebar/SidebarInset.vue +9 -9
  262. package/src/components/ui/sidebar/SidebarMenu.vue +4 -4
  263. package/src/components/ui/sidebar/SidebarMenuAction.vue +18 -18
  264. package/src/components/ui/sidebar/SidebarMenuBadge.vue +14 -14
  265. package/src/components/ui/sidebar/SidebarMenuButton.vue +21 -21
  266. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +10 -10
  267. package/src/components/ui/sidebar/SidebarMenuItem.vue +4 -4
  268. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +10 -10
  269. package/src/components/ui/sidebar/SidebarMenuSub.vue +9 -9
  270. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +17 -17
  271. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +4 -4
  272. package/src/components/ui/sidebar/SidebarProvider.vue +46 -46
  273. package/src/components/ui/sidebar/SidebarRail.vue +13 -13
  274. package/src/components/ui/sidebar/SidebarSeparator.vue +4 -4
  275. package/src/components/ui/sidebar/SidebarTrigger.vue +5 -5
  276. package/src/components/ui/sidebar/index.ts +29 -29
  277. package/src/components/ui/sidebar/utils.ts +7 -7
  278. package/src/components/ui/skeleton/Skeleton.vue +6 -6
  279. package/src/components/ui/slider/Slider.vue +14 -14
  280. package/src/components/ui/spinner/Spinner.vue +21 -21
  281. package/src/components/ui/stepper/SimpleStepper.vue +26 -26
  282. package/src/components/ui/stepper/Stepper.vue +6 -6
  283. package/src/components/ui/stepper/StepperDescription.vue +5 -5
  284. package/src/components/ui/stepper/StepperIndicator.vue +17 -17
  285. package/src/components/ui/stepper/StepperItem.vue +4 -4
  286. package/src/components/ui/stepper/StepperSeparator.vue +7 -7
  287. package/src/components/ui/stepper/StepperTitle.vue +5 -5
  288. package/src/components/ui/stepper/StepperTrigger.vue +4 -4
  289. package/src/components/ui/stepper/index.ts +3 -3
  290. package/src/components/ui/switch/Switch.vue +15 -15
  291. package/src/components/ui/table/Table.vue +6 -6
  292. package/src/components/ui/table/TableBody.vue +4 -4
  293. package/src/components/ui/table/TableCaption.vue +4 -4
  294. package/src/components/ui/table/TableCell.vue +8 -8
  295. package/src/components/ui/table/TableEmpty.vue +14 -14
  296. package/src/components/ui/table/TableFooter.vue +8 -8
  297. package/src/components/ui/table/TableHead.vue +8 -8
  298. package/src/components/ui/table/TableHeader.vue +4 -4
  299. package/src/components/ui/table/TableRow.vue +8 -8
  300. package/src/components/ui/tabs/Tabs.vue +4 -4
  301. package/src/components/ui/tabs/TabsContent.vue +4 -4
  302. package/src/components/ui/tabs/TabsList.vue +15 -15
  303. package/src/components/ui/tabs/TabsTrigger.vue +10 -10
  304. package/src/components/ui/tags-input/TagsInput.vue +17 -17
  305. package/src/components/ui/tags-input/TagsInputInput.vue +6 -6
  306. package/src/components/ui/tags-input/TagsInputItem.vue +15 -15
  307. package/src/components/ui/tags-input/TagsInputItemDelete.vue +12 -12
  308. package/src/components/ui/tags-input/TagsInputItemText.vue +4 -4
  309. package/src/components/ui/textarea/Textarea.vue +12 -12
  310. package/src/components/ui/time-picker/TimePicker.vue +25 -25
  311. package/src/components/ui/toggle-group/Toggle.vue +10 -10
  312. package/src/components/ui/toggle-group/ToggleGroup.vue +38 -38
  313. package/src/components/ui/toggle-group/ToggleGroupItem.vue +9 -9
  314. package/src/components/ui/toggle-group/index.ts +46 -46
  315. package/src/components/ui/tooltip/Tooltip.vue +3 -3
  316. package/src/components/ui/tooltip/TooltipContent.vue +13 -13
  317. package/src/components/ui/tooltip/TooltipProvider.vue +4 -4
  318. package/src/components/ui/tooltip/TooltipTrigger.vue +3 -3
  319. package/src/i18n/de.json +185 -185
  320. package/src/i18n/en.json +185 -185
  321. package/src/i18n/es.json +185 -185
  322. package/src/i18n/fr.json +185 -185
  323. package/src/i18n/it.json +185 -185
  324. package/src/i18n/ja.json +185 -185
  325. package/src/i18n/pt.json +185 -185
  326. package/src/i18n/ru.json +185 -185
  327. package/src/i18n/zh.json +185 -185
  328. package/src/lib/color-tokens.ts +24 -24
  329. package/src/lib/i18n.ts +65 -65
  330. package/src/lib/utils.ts +33 -33
  331. package/src/nuxt-components.d.ts +2 -2
  332. package/src/runtime/ui-vintage-i18n-plugin.ts +49 -49
  333. package/src/shims-vue.d.ts +3 -3
  334. package/src/styles.css +377 -377
@@ -13,64 +13,64 @@ import type { HugeiconsIconDefinition } from '../../lib/common-types';
13
13
 
14
14
  // Props
15
15
  const props = withDefaults(defineProps<{
16
- appName?: string;
17
- appLogo?: string;
18
- appLogoDark?: string;
19
- appLinkTo?: string;
20
- title?: string;
21
- description?: string;
22
- collapsible?: 'offcanvas' | 'icon' | 'none';
23
- compact?: boolean;
24
- sidebarSections?: Array<{
25
- id: string;
26
- label?: string;
27
- items: Array<{
28
- id: string;
29
- label: string;
30
- description?: string;
31
- icon?: HugeiconsIconDefinition | null;
32
- href?: string;
33
- to?: unknown;
34
- active?: boolean;
35
- newTab?: boolean;
36
- }>;
37
- }>;
38
- sidebarLinkComponent?: Component | string;
39
- showBackground?: boolean;
40
- insetClass?: HTMLAttributes['class'];
41
- topbarClass?: HTMLAttributes['class'];
42
- contentContainerClass?: HTMLAttributes['class'];
16
+ appName?: string;
17
+ appLogo?: string;
18
+ appLogoDark?: string;
19
+ appLinkTo?: string;
20
+ title?: string;
21
+ description?: string;
22
+ collapsible?: 'offcanvas' | 'icon' | 'none';
23
+ compact?: boolean;
24
+ sidebarSections?: Array<{
25
+ id: string;
26
+ label?: string;
27
+ items: Array<{
28
+ id: string;
29
+ label: string;
30
+ description?: string;
31
+ icon?: HugeiconsIconDefinition | null;
32
+ href?: string;
33
+ to?: unknown;
34
+ active?: boolean;
35
+ newTab?: boolean;
36
+ }>;
37
+ }>;
38
+ sidebarLinkComponent?: Component | string;
39
+ showBackground?: boolean;
40
+ insetClass?: HTMLAttributes['class'];
41
+ topbarClass?: HTMLAttributes['class'];
42
+ contentContainerClass?: HTMLAttributes['class'];
43
43
  }>(), {
44
- appName: '',
45
- appLogo: '',
46
- appLogoDark: '',
47
- appLinkTo: '/',
48
- title: '',
49
- description: '',
50
- collapsible: 'offcanvas',
51
- compact: false,
52
- sidebarSections: () => [],
53
- sidebarLinkComponent: 'a',
54
- showBackground: true
44
+ appName: '',
45
+ appLogo: '',
46
+ appLogoDark: '',
47
+ appLinkTo: '/',
48
+ title: '',
49
+ description: '',
50
+ collapsible: 'offcanvas',
51
+ compact: false,
52
+ sidebarSections: () => [],
53
+ sidebarLinkComponent: 'a',
54
+ showBackground: true
55
55
  });
56
56
 
57
57
  // Resolve link props for sidebar items
58
58
  const getSidebarItemLinkProps = (item: NonNullable<typeof props.sidebarSections>[number]['items'][number]) => {
59
- const sharedProps = item.newTab ? { target: '_blank', rel: 'noopener noreferrer' } : {};
60
-
61
- // If the link component is an anchor, use href. Otherwise, use to for router links.
62
- if (props.sidebarLinkComponent === 'a') {
63
- return {
64
- href: item.href ?? '#',
65
- ...sharedProps
66
- };
67
- }
68
-
69
- // For non-anchor link components, assume they use a "to" prop (like Vue Router's <RouterLink>).
70
- return {
71
- to: item.to ?? item.href ?? '/',
72
- ...sharedProps
73
- };
59
+ const sharedProps = item.newTab ? { target: '_blank', rel: 'noopener noreferrer' } : {};
60
+
61
+ // If the link component is an anchor, use href. Otherwise, use to for router links.
62
+ if (props.sidebarLinkComponent === 'a') {
63
+ return {
64
+ href: item.href ?? '#',
65
+ ...sharedProps
66
+ };
67
+ }
68
+
69
+ // For non-anchor link components, assume they use a "to" prop (like Vue Router's <RouterLink>).
70
+ return {
71
+ to: item.to ?? item.href ?? '/',
72
+ ...sharedProps
73
+ };
74
74
  };
75
75
 
76
76
  const { t } = useI18n();
@@ -85,122 +85,122 @@ const logoAlt = computed(() => props.appName ? t('uiVintage.common.logo', { name
85
85
  </script>
86
86
 
87
87
  <template>
88
- <SidebarProvider>
89
- <!-- Sidebar -->
90
- <Sidebar :collapsible="props.collapsible" :compact="props.compact">
91
- <!-- Sidebar header -->
92
- <SidebarHeader v-if="props.appName || lightLogo || $slots['sidebar-header']" class="h-16 justify-center border-b border-sidebar-border">
93
- <slot name="sidebar-header">
94
- <SidebarMenu>
95
- <SidebarMenuItem>
96
- <SidebarMenuButton as-child size="lg">
97
- <a :href="props.appLinkTo" class="inline-flex items-center gap-2">
98
- <div class="inline-flex items-center gap-2">
99
- <!-- App logo -->
100
- <template v-if="lightLogo">
101
- <NuxtImg :src="lightLogo" :alt="logoAlt" width="32" height="32" :sizes="{ 320: '32px', 1280: '32px' }" loading="eager" :class="['size-8 shrink-0 object-contain', hasDarkLogo && 'dark:hidden']" />
102
- <NuxtImg v-if="hasDarkLogo" :src="darkLogo" :alt="logoAlt" width="32" height="32" :sizes="{ 320: '32px', 1280: '32px' }" loading="eager" class="hidden size-8 shrink-0 object-contain dark:block" />
103
- </template>
104
-
105
- <!-- App name -->
106
- <span v-if="props.appName" class="text-xl font-semibold tracking-tight text-foreground">{{ props.appName }}</span>
107
- </div>
108
- </a>
109
- </SidebarMenuButton>
110
- </SidebarMenuItem>
111
- </SidebarMenu>
112
- </slot>
113
- </SidebarHeader>
114
-
115
- <!-- Sidebar sections -->
116
- <SidebarContent v-if="props.sidebarSections.length">
117
- <SidebarGroup v-for="section in props.sidebarSections" :key="section.id" class="space-y-1">
118
- <!-- Section label -->
119
- <SidebarGroupLabel v-if="section.label">
120
- {{ section.label }}
121
- </SidebarGroupLabel>
122
-
123
- <!-- Section content -->
124
- <SidebarGroupContent>
125
- <SidebarMenu :class="cn('gap-1', props.compact && 'gap-0.5')">
126
- <SidebarMenuItem v-for="item in section.items" :key="item.id">
127
- <SidebarMenuButton as-child :is-active="item.active" :class="cn('group/nav relative h-auto min-h-11 overflow-hidden rounded px-3 py-2.5 text-muted-foreground transition-colors duration-150 hover:bg-accent hover:text-foreground data-[active=true]:bg-primary/10 data-[active=true]:text-foreground sm:px-3.5', 'before:absolute before:inset-y-2 before:left-0 before:w-0.5 before:origin-center before:scale-y-0 before:bg-primary before:transition-transform before:duration-300 before:ease-spring data-[active=true]:before:scale-y-100', item.description ? 'items-start' : 'items-center')">
128
- <component :is="props.sidebarLinkComponent" v-bind="getSidebarItemLinkProps(item)" :aria-current="item.active ? 'page' : undefined">
129
- <!-- Icon -->
130
- <HugeiconsIcon v-if="item.icon" :icon="item.icon" :stroke-width="1.8" :class="cn('shrink-0 opacity-90 transition-[opacity,color] duration-150 group-hover/nav:opacity-100 group-data-[active=true]/nav:text-primary', item.description ? 'mt-0.5 size-5 sm:h-5 sm:w-5' : 'size-5 self-center sm:h-6 sm:w-6')" />
131
-
132
- <!-- Label and optional description -->
133
- <div :class="cn('min-w-0 flex-1 text-left leading-tight', item.description ? 'grid' : 'flex items-center')">
134
- <!-- Label -->
135
- <span class="truncate font-semibold">{{ item.label }}</span>
136
-
137
- <!-- Description -->
138
- <span v-if="item.description" class="mt-0.5 text-[11px] leading-4 text-sidebar-foreground/65">
139
- {{ item.description }}
140
- </span>
141
- </div>
142
- </component>
143
- </SidebarMenuButton>
144
- </SidebarMenuItem>
145
- </SidebarMenu>
146
- </SidebarGroupContent>
147
- </SidebarGroup>
148
- </SidebarContent>
149
-
150
- <!-- Sidebar footer -->
151
- <SidebarFooter class="border-t border-sidebar-border">
152
- <slot name="sidebar-footer">
153
- <div class="flex items-center gap-2">
154
- <ThemeSelector />
155
- </div>
156
- </slot>
157
- </SidebarFooter>
158
- </Sidebar>
159
-
160
- <!-- Main shell -->
161
- <SidebarInset :class="cn('relative min-h-screen min-w-0 bg-background text-foreground', props.insetClass)">
162
- <!-- Background -->
163
- <BackgroundGrid v-if="props.showBackground" />
164
-
165
- <!-- Topbar -->
166
- <header :class="cn('sticky top-0 z-20 flex h-16 shrink-0 items-center gap-2 border-b border-sidebar-border bg-sidebar/80 px-4 backdrop-blur-md backdrop-saturate-150', props.topbarClass)">
167
- <!-- Sidebar trigger -->
168
- <SidebarTrigger class="-ml-1" />
169
-
170
- <!-- Vertical separator -->
171
- <Separator orientation="vertical" class="mr-2 data-[orientation=vertical]:h-4" />
172
-
173
- <!-- Optional custom content on the leading side of the topbar -->
174
- <slot name="topbar-leading" />
175
-
176
- <!-- Title and description -->
177
- <div class="min-w-0 flex-1">
178
- <!-- Title -->
179
- <div class="truncate text-sm font-semibold">
180
- {{ props.title }}
181
- </div>
182
-
183
- <!-- Description -->
184
- <div v-if="props.description" class="truncate text-xs text-muted-foreground">
185
- {{ props.description }}
186
- </div>
187
- </div>
188
-
189
- <!-- Optional custom content on the trailing side of the topbar -->
190
- <slot name="topbar-trailing" />
191
- </header>
192
-
193
- <!-- Main content -->
194
- <main class="relative z-10 min-w-0 flex-1">
195
- <div :class="cn('mx-auto flex w-full min-w-0 max-w-7xl flex-col gap-6 px-3 py-4 sm:px-6 sm:py-6 lg:px-8 lg:py-8', props.contentContainerClass)">
196
- <slot />
197
- </div>
198
- </main>
199
-
200
- <!-- Full-width footer -->
201
- <footer v-if="$slots.footer" class="relative z-10 mt-auto">
202
- <slot name="footer" />
203
- </footer>
204
- </SidebarInset>
205
- </SidebarProvider>
88
+ <SidebarProvider>
89
+ <!-- Sidebar -->
90
+ <Sidebar :collapsible="props.collapsible" :compact="props.compact">
91
+ <!-- Sidebar header -->
92
+ <SidebarHeader v-if="props.appName || lightLogo || $slots['sidebar-header']" class="h-16 justify-center border-b border-sidebar-border">
93
+ <slot name="sidebar-header">
94
+ <SidebarMenu>
95
+ <SidebarMenuItem>
96
+ <SidebarMenuButton as-child size="lg">
97
+ <a :href="props.appLinkTo" class="inline-flex items-center gap-2">
98
+ <div class="inline-flex items-center gap-2">
99
+ <!-- App logo -->
100
+ <template v-if="lightLogo">
101
+ <NuxtImg :src="lightLogo" :alt="logoAlt" width="32" height="32" :sizes="{ 320: '32px', 1280: '32px' }" loading="eager" :class="['size-8 shrink-0 object-contain', hasDarkLogo && 'dark:hidden']" />
102
+ <NuxtImg v-if="hasDarkLogo" :src="darkLogo" :alt="logoAlt" width="32" height="32" :sizes="{ 320: '32px', 1280: '32px' }" loading="eager" class="hidden size-8 shrink-0 object-contain dark:block" />
103
+ </template>
104
+
105
+ <!-- App name -->
106
+ <span v-if="props.appName" class="text-xl font-semibold tracking-tight text-foreground">{{ props.appName }}</span>
107
+ </div>
108
+ </a>
109
+ </SidebarMenuButton>
110
+ </SidebarMenuItem>
111
+ </SidebarMenu>
112
+ </slot>
113
+ </SidebarHeader>
114
+
115
+ <!-- Sidebar sections -->
116
+ <SidebarContent v-if="props.sidebarSections.length">
117
+ <SidebarGroup v-for="section in props.sidebarSections" :key="section.id" class="space-y-1">
118
+ <!-- Section label -->
119
+ <SidebarGroupLabel v-if="section.label">
120
+ {{ section.label }}
121
+ </SidebarGroupLabel>
122
+
123
+ <!-- Section content -->
124
+ <SidebarGroupContent>
125
+ <SidebarMenu :class="cn('gap-1', props.compact && 'gap-0.5')">
126
+ <SidebarMenuItem v-for="item in section.items" :key="item.id">
127
+ <SidebarMenuButton as-child :is-active="item.active" :class="cn('group/nav relative h-auto min-h-11 overflow-hidden rounded px-3 py-2.5 text-muted-foreground transition-colors duration-150 hover:bg-accent hover:text-foreground data-[active=true]:bg-primary/10 data-[active=true]:text-foreground sm:px-3.5', 'before:absolute before:inset-y-2 before:left-0 before:w-0.5 before:origin-center before:scale-y-0 before:bg-primary before:transition-transform before:duration-300 before:ease-spring data-[active=true]:before:scale-y-100', item.description ? 'items-start' : 'items-center')">
128
+ <component :is="props.sidebarLinkComponent" v-bind="getSidebarItemLinkProps(item)" :aria-current="item.active ? 'page' : undefined">
129
+ <!-- Icon -->
130
+ <HugeiconsIcon v-if="item.icon" :icon="item.icon" :stroke-width="1.8" :class="cn('shrink-0 opacity-90 transition-[opacity,color] duration-150 group-hover/nav:opacity-100 group-data-[active=true]/nav:text-primary', item.description ? 'mt-0.5 size-5 sm:h-5 sm:w-5' : 'size-5 self-center sm:h-6 sm:w-6')" />
131
+
132
+ <!-- Label and optional description -->
133
+ <div :class="cn('min-w-0 flex-1 text-left leading-tight', item.description ? 'grid' : 'flex items-center')">
134
+ <!-- Label -->
135
+ <span class="truncate font-semibold">{{ item.label }}</span>
136
+
137
+ <!-- Description -->
138
+ <span v-if="item.description" class="mt-0.5 text-[11px] leading-4 text-sidebar-foreground/65">
139
+ {{ item.description }}
140
+ </span>
141
+ </div>
142
+ </component>
143
+ </SidebarMenuButton>
144
+ </SidebarMenuItem>
145
+ </SidebarMenu>
146
+ </SidebarGroupContent>
147
+ </SidebarGroup>
148
+ </SidebarContent>
149
+
150
+ <!-- Sidebar footer -->
151
+ <SidebarFooter class="border-t border-sidebar-border">
152
+ <slot name="sidebar-footer">
153
+ <div class="flex items-center gap-2">
154
+ <ThemeSelector />
155
+ </div>
156
+ </slot>
157
+ </SidebarFooter>
158
+ </Sidebar>
159
+
160
+ <!-- Main shell -->
161
+ <SidebarInset :class="cn('relative min-h-screen min-w-0 bg-background text-foreground', props.insetClass)">
162
+ <!-- Background -->
163
+ <BackgroundGrid v-if="props.showBackground" />
164
+
165
+ <!-- Topbar -->
166
+ <header :class="cn('sticky top-0 z-20 flex h-16 shrink-0 items-center gap-2 border-b border-sidebar-border bg-sidebar/80 px-4 backdrop-blur-md backdrop-saturate-150', props.topbarClass)">
167
+ <!-- Sidebar trigger -->
168
+ <SidebarTrigger class="-ml-1" />
169
+
170
+ <!-- Vertical separator -->
171
+ <Separator orientation="vertical" class="mr-2 data-[orientation=vertical]:h-4" />
172
+
173
+ <!-- Optional custom content on the leading side of the topbar -->
174
+ <slot name="topbar-leading" />
175
+
176
+ <!-- Title and description -->
177
+ <div class="min-w-0 flex-1">
178
+ <!-- Title -->
179
+ <div class="truncate text-sm font-semibold">
180
+ {{ props.title }}
181
+ </div>
182
+
183
+ <!-- Description -->
184
+ <div v-if="props.description" class="truncate text-xs text-muted-foreground">
185
+ {{ props.description }}
186
+ </div>
187
+ </div>
188
+
189
+ <!-- Optional custom content on the trailing side of the topbar -->
190
+ <slot name="topbar-trailing" />
191
+ </header>
192
+
193
+ <!-- Main content -->
194
+ <main class="relative z-10 min-w-0 flex-1">
195
+ <div :class="cn('mx-auto flex w-full min-w-0 max-w-7xl flex-col gap-6 px-3 py-4 sm:px-6 sm:py-6 lg:px-8 lg:py-8', props.contentContainerClass)">
196
+ <slot />
197
+ </div>
198
+ </main>
199
+
200
+ <!-- Full-width footer -->
201
+ <footer v-if="$slots.footer" class="relative z-10 mt-auto">
202
+ <slot name="footer" />
203
+ </footer>
204
+ </SidebarInset>
205
+ </SidebarProvider>
206
206
  </template>
@@ -4,14 +4,14 @@ import { cn } from '../../lib/utils';
4
4
 
5
5
  // Props
6
6
  const props = defineProps<{
7
- class?: HTMLAttributes['class'];
7
+ class?: HTMLAttributes['class'];
8
8
  }>();
9
9
  </script>
10
10
 
11
11
  <template>
12
- <table data-slot="data-list" :class="cn('w-full text-left text-xs md:text-sm', props.class)">
13
- <tbody class="border-y border-border">
14
- <slot />
15
- </tbody>
16
- </table>
12
+ <table data-slot="data-list" :class="cn('w-full text-left text-xs md:text-sm', props.class)">
13
+ <tbody class="border-y border-border">
14
+ <slot />
15
+ </tbody>
16
+ </table>
17
17
  </template>
@@ -4,12 +4,12 @@ import { cn } from '../../lib/utils';
4
4
 
5
5
  // Props
6
6
  const props = defineProps<{
7
- class?: HTMLAttributes['class'];
7
+ class?: HTMLAttributes['class'];
8
8
  }>();
9
9
  </script>
10
10
 
11
11
  <template>
12
- <tr data-slot="data-list-item" :class="cn('border-b border-border last:border-b-0', props.class)">
13
- <slot />
14
- </tr>
12
+ <tr data-slot="data-list-item" :class="cn('border-b border-border last:border-b-0', props.class)">
13
+ <slot />
14
+ </tr>
15
15
  </template>
@@ -4,12 +4,12 @@ import { cn } from '../../lib/utils';
4
4
 
5
5
  // Props
6
6
  const props = defineProps<{
7
- class?: HTMLAttributes['class'];
7
+ class?: HTMLAttributes['class'];
8
8
  }>();
9
9
  </script>
10
10
 
11
11
  <template>
12
- <td data-slot="data-list-label" :class="cn('py-3 align-top text-muted-foreground', props.class)">
13
- <slot />
14
- </td>
12
+ <td data-slot="data-list-label" :class="cn('py-3 align-top text-muted-foreground', props.class)">
13
+ <slot />
14
+ </td>
15
15
  </template>
@@ -4,12 +4,12 @@ import { cn } from '../../lib/utils';
4
4
 
5
5
  // Props
6
6
  const props = defineProps<{
7
- class?: HTMLAttributes['class'];
7
+ class?: HTMLAttributes['class'];
8
8
  }>();
9
9
  </script>
10
10
 
11
11
  <template>
12
- <div data-slot="data-list-text" :class="cn('line-clamp-3', props.class)">
13
- <slot />
14
- </div>
12
+ <div data-slot="data-list-text" :class="cn('line-clamp-3', props.class)">
13
+ <slot />
14
+ </div>
15
15
  </template>
@@ -4,12 +4,12 @@ import { cn } from '../../lib/utils';
4
4
 
5
5
  // Props
6
6
  const props = defineProps<{
7
- class?: HTMLAttributes['class'];
7
+ class?: HTMLAttributes['class'];
8
8
  }>();
9
9
  </script>
10
10
 
11
11
  <template>
12
- <td data-slot="data-list-value" :class="cn('py-3 pl-2 align-top text-right font-semibold text-foreground', props.class)">
13
- <slot />
14
- </td>
12
+ <td data-slot="data-list-value" :class="cn('py-3 pl-2 align-top text-right font-semibold text-foreground', props.class)">
13
+ <slot />
14
+ </td>
15
15
  </template>
@@ -8,19 +8,19 @@ import type { HeadingLevel, HugeiconsIconDefinition } from '../../lib/common-typ
8
8
 
9
9
  // Props
10
10
  const props = withDefaults(defineProps<{
11
- icon?: HugeiconsIconDefinition;
12
- title?: string;
13
- description?: string;
14
- titleKey?: string;
15
- descriptionKey?: string;
16
- level?: HeadingLevel;
11
+ icon?: HugeiconsIconDefinition;
12
+ title?: string;
13
+ description?: string;
14
+ titleKey?: string;
15
+ descriptionKey?: string;
16
+ level?: HeadingLevel;
17
17
  }>(), {
18
- icon: () => PackageIcon,
19
- title: '',
20
- description: '',
21
- titleKey: '',
22
- descriptionKey: '',
23
- level: 3
18
+ icon: () => PackageIcon,
19
+ title: '',
20
+ description: '',
21
+ titleKey: '',
22
+ descriptionKey: '',
23
+ level: 3
24
24
  });
25
25
 
26
26
  const { t } = useI18n();
@@ -28,41 +28,41 @@ const hasCustomCopy = computed(() => Boolean(props.title || props.description ||
28
28
 
29
29
  // Title
30
30
  const resolvedTitle = computed(() => props.title
31
- || (props.titleKey ? t(props.titleKey) : '')
32
- || (!hasCustomCopy.value ? t('uiVintage.common.empty.title') : '')
33
- || (!hasCustomCopy.value ? 'Nothing here yet' : ''));
31
+ || (props.titleKey ? t(props.titleKey) : '')
32
+ || (!hasCustomCopy.value ? t('uiVintage.common.empty.title') : '')
33
+ || (!hasCustomCopy.value ? 'Nothing here yet' : ''));
34
34
 
35
35
  // Description
36
36
  const resolvedDescription = computed(() => props.description
37
- || (props.descriptionKey ? t(props.descriptionKey) : '')
38
- || (!hasCustomCopy.value ? t('uiVintage.common.empty.description') : '')
39
- || (!hasCustomCopy.value ? 'There is no content to show right now.' : ''));
37
+ || (props.descriptionKey ? t(props.descriptionKey) : '')
38
+ || (!hasCustomCopy.value ? t('uiVintage.common.empty.description') : '')
39
+ || (!hasCustomCopy.value ? 'There is no content to show right now.' : ''));
40
40
  </script>
41
41
 
42
42
  <template>
43
- <Card class="flex flex-col items-center justify-center px-4 py-8 text-center md:py-12">
44
- <CardContent class="flex flex-col items-center justify-center p-0! text-center">
45
- <!-- Icon -->
46
- <div aria-hidden="true" class="flex items-center justify-center text-4xl text-muted-foreground opacity-40">
47
- <HugeiconsIcon :icon="props.icon" class="size-10 animate-uv-float" />
48
- </div>
43
+ <Card class="flex flex-col items-center justify-center px-4 py-8 text-center md:py-12">
44
+ <CardContent class="flex flex-col items-center justify-center p-0! text-center">
45
+ <!-- Icon -->
46
+ <div aria-hidden="true" class="flex items-center justify-center text-4xl text-muted-foreground opacity-40">
47
+ <HugeiconsIcon :icon="props.icon" class="size-10 animate-uv-float" />
48
+ </div>
49
49
 
50
- <!-- Title -->
51
- <component :is="`h${props.level}`"
52
- v-if="resolvedTitle"
53
- class="text-sm font-semibold text-foreground md:text-base">
54
- {{ resolvedTitle }}
55
- </component>
50
+ <!-- Title -->
51
+ <component :is="`h${props.level}`"
52
+ v-if="resolvedTitle"
53
+ class="text-sm font-semibold text-foreground md:text-base">
54
+ {{ resolvedTitle }}
55
+ </component>
56
56
 
57
- <!-- Description -->
58
- <p v-if="resolvedDescription" class="max-w-md text-xs text-muted-foreground md:text-sm">
59
- {{ resolvedDescription }}
60
- </p>
57
+ <!-- Description -->
58
+ <p v-if="resolvedDescription" class="max-w-md text-xs text-muted-foreground md:text-sm">
59
+ {{ resolvedDescription }}
60
+ </p>
61
61
 
62
- <!-- Action slot -->
63
- <div v-if="$slots.action">
64
- <slot name="action" />
65
- </div>
66
- </CardContent>
67
- </Card>
62
+ <!-- Action slot -->
63
+ <div v-if="$slots.action">
64
+ <slot name="action" />
65
+ </div>
66
+ </CardContent>
67
+ </Card>
68
68
  </template>