@brumaombra/ui-vintage 0.9.1 → 0.9.3

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 (344) hide show
  1. package/COMPONENTS.md +102 -2
  2. package/module.mjs +43 -43
  3. package/package.json +175 -175
  4. package/src/components/background-grid/BackgroundGrid.vue +4 -4
  5. package/src/components/blog/AllPostsSection.vue +33 -33
  6. package/src/components/blog/BlogCategoriesPage.vue +46 -0
  7. package/src/components/blog/BlogContentRenderer.vue +111 -111
  8. package/src/components/blog/BlogFAQSection.vue +19 -19
  9. package/src/components/blog/BlogHeaderSection.vue +80 -80
  10. package/src/components/blog/BlogIndexPage.vue +118 -0
  11. package/src/components/blog/BlogInfoSection.vue +47 -47
  12. package/src/components/blog/BlogPageBreadcrumbs.vue +43 -0
  13. package/src/components/blog/BlogPostHeader.vue +135 -135
  14. package/src/components/blog/BlogPostPage.vue +116 -0
  15. package/src/components/blog/BlogPostsPage.vue +74 -0
  16. package/src/components/blog/BlogProgressBar.vue +33 -33
  17. package/src/components/blog/BlogSectionTitle.vue +22 -22
  18. package/src/components/blog/BlogTagsPage.vue +46 -0
  19. package/src/components/blog/BlogTagsSection.vue +25 -25
  20. package/src/components/blog/BlogViewAllLink.vue +18 -0
  21. package/src/components/blog/CategoriesList.vue +14 -14
  22. package/src/components/blog/CategoriesSection.vue +11 -11
  23. package/src/components/blog/CategoryCard.vue +25 -25
  24. package/src/components/blog/HeaderCarousel.vue +97 -97
  25. package/src/components/blog/PostCard.vue +33 -33
  26. package/src/components/blog/PostsList.vue +15 -15
  27. package/src/components/blog/SocialShareSidebar.vue +84 -84
  28. package/src/components/blog/TableOfContents.vue +307 -307
  29. package/src/components/blog/blogPageUtils.ts +98 -0
  30. package/src/components/blog/index.ts +12 -1
  31. package/src/components/busy-indicator/BusyIndicator.vue +7 -7
  32. package/src/components/busy-indicator/busy-indicator-state.ts +56 -56
  33. package/src/components/card-grid/CardGrid.vue +34 -34
  34. package/src/components/chip/Chip.vue +15 -15
  35. package/src/components/confirm-dialog/ConfirmDialog.vue +50 -50
  36. package/src/components/confirm-dialog/confirm-dialog-state.ts +131 -131
  37. package/src/components/content/BlogList.vue +30 -30
  38. package/src/components/content/BlogTable.vue +36 -36
  39. package/src/components/content/CodeBlock.vue +136 -136
  40. package/src/components/content/Flow.vue +60 -60
  41. package/src/components/content/ProseHr.vue +15 -15
  42. package/src/components/content/ProsePre.vue +12 -12
  43. package/src/components/content/Terminal.vue +59 -59
  44. package/src/components/cookie-consent/CookieConsent.vue +36 -36
  45. package/src/components/cookie-consent/useCookieConsent.ts +37 -37
  46. package/src/components/dashboard-shell/DashboardShell.vue +171 -171
  47. package/src/components/data-list/DataList.vue +6 -6
  48. package/src/components/data-list/DataListItem.vue +4 -4
  49. package/src/components/data-list/DataListLabel.vue +4 -4
  50. package/src/components/data-list/DataListText.vue +4 -4
  51. package/src/components/data-list/DataListValue.vue +4 -4
  52. package/src/components/empty-state-card/EmptyStateCard.vue +40 -40
  53. package/src/components/error-page/ErrorPage.vue +72 -72
  54. package/src/components/info-card/InfoCard.vue +31 -31
  55. package/src/components/landing/landing-content/LandingContent.vue +4 -4
  56. package/src/components/landing/landing-footer/LandingFooter.vue +128 -128
  57. package/src/components/landing/landing-navbar/LandingNavbar.vue +50 -50
  58. package/src/components/landing/landing-shell/LandingShell.vue +36 -36
  59. package/src/components/language-flag/LanguageFlag.vue +25 -25
  60. package/src/components/language-flag/flags/ChineseFlag.vue +8 -8
  61. package/src/components/language-flag/flags/EnglishFlag.vue +7 -7
  62. package/src/components/language-flag/flags/FrenchFlag.vue +5 -5
  63. package/src/components/language-flag/flags/GermanFlag.vue +5 -5
  64. package/src/components/language-flag/flags/ItalianFlag.vue +7 -7
  65. package/src/components/language-flag/flags/JapaneseFlag.vue +4 -4
  66. package/src/components/language-flag/flags/PortugueseFlag.vue +57 -57
  67. package/src/components/language-flag/flags/RussianFlag.vue +5 -5
  68. package/src/components/language-flag/flags/SpanishFlag.vue +4 -4
  69. package/src/components/language-selector/LanguageSelector.vue +76 -76
  70. package/src/components/load-more-button/LoadMoreButton.vue +17 -17
  71. package/src/components/loading-state-card/LoadingStateCard.vue +28 -28
  72. package/src/components/message-dialog/MessageDialog.vue +59 -59
  73. package/src/components/message-dialog/message-dialog-state.ts +105 -105
  74. package/src/components/message-toast/MessageToast.vue +149 -149
  75. package/src/components/message-toast/message-toast-state.ts +146 -146
  76. package/src/components/page-header/PageHeader.vue +34 -34
  77. package/src/components/progress-component/ProgressComponent.vue +33 -33
  78. package/src/components/single-value-card/SingleValueCard.vue +57 -57
  79. package/src/components/slider-form-component/SliderFormComponent.vue +36 -36
  80. package/src/components/stat-strip/StatStrip.vue +22 -22
  81. package/src/components/switch-form-component/SwitchFormComponent.vue +20 -20
  82. package/src/components/text-link/TextLink.vue +14 -14
  83. package/src/components/theme-selector/ThemeSelector.vue +61 -61
  84. package/src/components/theme-selector/theme-transition.ts +63 -63
  85. package/src/components/ui/accordion/Accordion.vue +38 -38
  86. package/src/components/ui/alert/Alert.vue +5 -5
  87. package/src/components/ui/alert/AlertDescription.vue +4 -4
  88. package/src/components/ui/alert/AlertTitle.vue +4 -4
  89. package/src/components/ui/alert/index.ts +2 -2
  90. package/src/components/ui/alert-dialog/AlertDialog.vue +3 -3
  91. package/src/components/ui/alert-dialog/AlertDialogAction.vue +3 -3
  92. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +3 -3
  93. package/src/components/ui/alert-dialog/AlertDialogContent.vue +7 -7
  94. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +3 -3
  95. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +4 -4
  96. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +4 -4
  97. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +3 -3
  98. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -3
  99. package/src/components/ui/animated-number/AnimatedNumber.vue +49 -48
  100. package/src/components/ui/avatar/Avatar.vue +28 -28
  101. package/src/components/ui/avatar/AvatarFallback.vue +6 -6
  102. package/src/components/ui/avatar/AvatarGroup.vue +40 -40
  103. package/src/components/ui/avatar/AvatarImage.vue +3 -3
  104. package/src/components/ui/avatar/index.ts +17 -17
  105. package/src/components/ui/badge/Badge.vue +20 -20
  106. package/src/components/ui/breadcrumb/Breadcrumb.vue +4 -4
  107. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +9 -9
  108. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +4 -4
  109. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +4 -4
  110. package/src/components/ui/breadcrumb/BreadcrumbList.vue +4 -4
  111. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +4 -4
  112. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +4 -4
  113. package/src/components/ui/busy/Busy.vue +33 -33
  114. package/src/components/ui/button/Button.vue +23 -23
  115. package/src/components/ui/button/index.ts +56 -56
  116. package/src/components/ui/calendar/Calendar.vue +138 -138
  117. package/src/components/ui/calendar/CalendarCell.vue +7 -7
  118. package/src/components/ui/calendar/CalendarCellTrigger.vue +18 -18
  119. package/src/components/ui/calendar/CalendarGrid.vue +3 -3
  120. package/src/components/ui/calendar/CalendarGridBody.vue +3 -3
  121. package/src/components/ui/calendar/CalendarGridHead.vue +3 -3
  122. package/src/components/ui/calendar/CalendarGridRow.vue +3 -3
  123. package/src/components/ui/calendar/CalendarHeadCell.vue +7 -7
  124. package/src/components/ui/calendar/CalendarHeader.vue +7 -7
  125. package/src/components/ui/calendar/CalendarHeading.vue +6 -6
  126. package/src/components/ui/calendar/CalendarNextButton.vue +15 -15
  127. package/src/components/ui/calendar/CalendarPrevButton.vue +15 -15
  128. package/src/components/ui/calendar/index.ts +4 -4
  129. package/src/components/ui/card/Card.vue +20 -20
  130. package/src/components/ui/card/CardAction.vue +8 -8
  131. package/src/components/ui/card/CardContent.vue +4 -4
  132. package/src/components/ui/card/CardDescription.vue +12 -12
  133. package/src/components/ui/card/CardFooter.vue +4 -4
  134. package/src/components/ui/card/CardHeader.vue +8 -8
  135. package/src/components/ui/card/CardText.vue +8 -8
  136. package/src/components/ui/card/CardTitle.vue +8 -8
  137. package/src/components/ui/checkbox/Checkbox.vue +27 -27
  138. package/src/components/ui/collapsible/Collapsible.vue +3 -3
  139. package/src/components/ui/collapsible/CollapsibleContent.vue +3 -3
  140. package/src/components/ui/collapsible/CollapsibleTrigger.vue +3 -3
  141. package/src/components/ui/combobox/Combobox.vue +4 -4
  142. package/src/components/ui/combobox/ComboboxAnchor.vue +16 -16
  143. package/src/components/ui/combobox/ComboboxEmpty.vue +3 -3
  144. package/src/components/ui/combobox/ComboboxGroup.vue +9 -9
  145. package/src/components/ui/combobox/ComboboxInput.vue +6 -6
  146. package/src/components/ui/combobox/ComboboxItem.vue +17 -17
  147. package/src/components/ui/combobox/ComboboxList.vue +19 -19
  148. package/src/components/ui/combobox/ComboboxSelect.vue +77 -77
  149. package/src/components/ui/combobox/ComboboxSeparator.vue +1 -1
  150. package/src/components/ui/combobox/ComboboxTrigger.vue +10 -10
  151. package/src/components/ui/combobox/types.ts +5 -5
  152. package/src/components/ui/command/Command.vue +48 -48
  153. package/src/components/ui/command/CommandDialog.vue +14 -14
  154. package/src/components/ui/command/CommandEmpty.vue +4 -4
  155. package/src/components/ui/command/CommandGroup.vue +23 -23
  156. package/src/components/ui/command/CommandInput.vue +9 -9
  157. package/src/components/ui/command/CommandItem.vue +40 -40
  158. package/src/components/ui/command/CommandList.vue +9 -9
  159. package/src/components/ui/command/CommandSeparator.vue +3 -3
  160. package/src/components/ui/command/CommandShortcut.vue +8 -8
  161. package/src/components/ui/command/index.ts +11 -11
  162. package/src/components/ui/data-table/DataTable.vue +145 -145
  163. package/src/components/ui/data-table/index.ts +11 -11
  164. package/src/components/ui/date-picker/DatePicker.vue +31 -31
  165. package/src/components/ui/date-time-picker/DateTimePicker.vue +97 -97
  166. package/src/components/ui/dialog/Dialog.vue +3 -3
  167. package/src/components/ui/dialog/DialogClose.vue +3 -3
  168. package/src/components/ui/dialog/DialogContent.vue +21 -21
  169. package/src/components/ui/dialog/DialogDescription.vue +7 -7
  170. package/src/components/ui/dialog/DialogFooter.vue +8 -8
  171. package/src/components/ui/dialog/DialogHeader.vue +4 -4
  172. package/src/components/ui/dialog/DialogOverlay.vue +7 -7
  173. package/src/components/ui/dialog/DialogScrollContent.vue +32 -32
  174. package/src/components/ui/dialog/DialogTitle.vue +3 -3
  175. package/src/components/ui/dialog/DialogTrigger.vue +3 -3
  176. package/src/components/ui/dropdown-menu/DropdownMenu.vue +3 -3
  177. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +11 -11
  178. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +15 -15
  179. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +3 -3
  180. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +12 -12
  181. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +9 -9
  182. package/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +3 -3
  183. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +3 -3
  184. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +11 -11
  185. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -1
  186. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +4 -4
  187. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -3
  188. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +15 -15
  189. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +15 -15
  190. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +3 -3
  191. package/src/components/ui/dropdown-menu/classes.ts +16 -16
  192. package/src/components/ui/field/Field.vue +5 -5
  193. package/src/components/ui/field/FieldContent.vue +8 -8
  194. package/src/components/ui/field/FieldDescription.vue +10 -10
  195. package/src/components/ui/field/FieldError.vue +39 -39
  196. package/src/components/ui/field/FieldGroup.vue +8 -8
  197. package/src/components/ui/field/FieldLabel.vue +10 -10
  198. package/src/components/ui/field/FieldLegend.vue +11 -11
  199. package/src/components/ui/field/FieldSeparator.vue +11 -11
  200. package/src/components/ui/field/FieldSet.vue +9 -9
  201. package/src/components/ui/field/FieldTitle.vue +8 -8
  202. package/src/components/ui/field/field-context.ts +36 -36
  203. package/src/components/ui/field/index.ts +22 -22
  204. package/src/components/ui/file-dropzone/FileDropzone.vue +144 -144
  205. package/src/components/ui/file-dropzone/index.ts +19 -19
  206. package/src/components/ui/hover-card/HoverCard.vue +5 -5
  207. package/src/components/ui/hover-card/HoverCardContent.vue +13 -13
  208. package/src/components/ui/hover-card/HoverCardTrigger.vue +3 -3
  209. package/src/components/ui/input/Input.vue +13 -13
  210. package/src/components/ui/kbd/Kbd.vue +10 -10
  211. package/src/components/ui/kbd/KbdGroup.vue +49 -49
  212. package/src/components/ui/label/Label.vue +7 -7
  213. package/src/components/ui/native-select/NativeSelect.vue +16 -16
  214. package/src/components/ui/native-select/NativeSelectOptGroup.vue +3 -3
  215. package/src/components/ui/native-select/NativeSelectOption.vue +3 -3
  216. package/src/components/ui/number-field/NumberField.vue +88 -88
  217. package/src/components/ui/pagination/Pagination.vue +4 -4
  218. package/src/components/ui/pagination/PaginationContent.vue +4 -4
  219. package/src/components/ui/pagination/PaginationEllipsis.vue +9 -9
  220. package/src/components/ui/pagination/PaginationFirst.vue +8 -8
  221. package/src/components/ui/pagination/PaginationItem.vue +14 -14
  222. package/src/components/ui/pagination/PaginationLast.vue +8 -8
  223. package/src/components/ui/pagination/PaginationNext.vue +8 -8
  224. package/src/components/ui/pagination/PaginationPrevious.vue +8 -8
  225. package/src/components/ui/pagination/SimplePagination.vue +25 -25
  226. package/src/components/ui/pin-input/PinInput.vue +20 -20
  227. package/src/components/ui/pin-input/PinInputInput.vue +17 -17
  228. package/src/components/ui/pin-input/context.ts +1 -1
  229. package/src/components/ui/popover/Popover.vue +3 -3
  230. package/src/components/ui/popover/PopoverAnchor.vue +3 -3
  231. package/src/components/ui/popover/PopoverContent.vue +12 -12
  232. package/src/components/ui/popover/PopoverTrigger.vue +3 -3
  233. package/src/components/ui/progress/Progress.vue +16 -16
  234. package/src/components/ui/radio-group/RadioGroup.vue +7 -7
  235. package/src/components/ui/radio-group/RadioGroupCard.vue +39 -39
  236. package/src/components/ui/radio-group/RadioGroupItem.vue +20 -20
  237. package/src/components/ui/scroll-area/ScrollArea.vue +14 -14
  238. package/src/components/ui/scroll-area/ScrollBar.vue +12 -12
  239. package/src/components/ui/select/Select.vue +3 -3
  240. package/src/components/ui/select/SelectContent.vue +25 -25
  241. package/src/components/ui/select/SelectGroup.vue +3 -3
  242. package/src/components/ui/select/SelectItem.vue +24 -24
  243. package/src/components/ui/select/SelectItemContent.vue +32 -32
  244. package/src/components/ui/select/SelectItemText.vue +3 -3
  245. package/src/components/ui/select/SelectLabel.vue +3 -3
  246. package/src/components/ui/select/SelectScrollDownButton.vue +9 -9
  247. package/src/components/ui/select/SelectScrollUpButton.vue +9 -9
  248. package/src/components/ui/select/SelectSeparator.vue +2 -2
  249. package/src/components/ui/select/SelectTrigger.vue +14 -14
  250. package/src/components/ui/select/SelectValue.vue +3 -3
  251. package/src/components/ui/select/SelectValueContent.vue +39 -39
  252. package/src/components/ui/separator/Separator.vue +7 -7
  253. package/src/components/ui/sheet/Sheet.vue +3 -3
  254. package/src/components/ui/sheet/SheetClose.vue +3 -3
  255. package/src/components/ui/sheet/SheetContent.vue +22 -22
  256. package/src/components/ui/sheet/SheetDescription.vue +3 -3
  257. package/src/components/ui/sheet/SheetFooter.vue +3 -3
  258. package/src/components/ui/sheet/SheetHeader.vue +3 -3
  259. package/src/components/ui/sheet/SheetOverlay.vue +7 -7
  260. package/src/components/ui/sheet/SheetTitle.vue +3 -3
  261. package/src/components/ui/sheet/SheetTrigger.vue +3 -3
  262. package/src/components/ui/sidebar/Sidebar.vue +57 -57
  263. package/src/components/ui/sidebar/SidebarContent.vue +8 -8
  264. package/src/components/ui/sidebar/SidebarFooter.vue +8 -8
  265. package/src/components/ui/sidebar/SidebarGroup.vue +8 -8
  266. package/src/components/ui/sidebar/SidebarGroupAction.vue +9 -9
  267. package/src/components/ui/sidebar/SidebarGroupContent.vue +4 -4
  268. package/src/components/ui/sidebar/SidebarGroupLabel.vue +8 -8
  269. package/src/components/ui/sidebar/SidebarHeader.vue +8 -8
  270. package/src/components/ui/sidebar/SidebarInput.vue +8 -8
  271. package/src/components/ui/sidebar/SidebarInset.vue +9 -9
  272. package/src/components/ui/sidebar/SidebarMenu.vue +4 -4
  273. package/src/components/ui/sidebar/SidebarMenuAction.vue +18 -18
  274. package/src/components/ui/sidebar/SidebarMenuBadge.vue +14 -14
  275. package/src/components/ui/sidebar/SidebarMenuButton.vue +21 -21
  276. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +10 -10
  277. package/src/components/ui/sidebar/SidebarMenuItem.vue +4 -4
  278. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +10 -10
  279. package/src/components/ui/sidebar/SidebarMenuSub.vue +9 -9
  280. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +17 -17
  281. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +4 -4
  282. package/src/components/ui/sidebar/SidebarProvider.vue +46 -46
  283. package/src/components/ui/sidebar/SidebarRail.vue +13 -13
  284. package/src/components/ui/sidebar/SidebarSeparator.vue +4 -4
  285. package/src/components/ui/sidebar/SidebarTrigger.vue +5 -5
  286. package/src/components/ui/sidebar/index.ts +29 -29
  287. package/src/components/ui/sidebar/utils.ts +7 -7
  288. package/src/components/ui/skeleton/Skeleton.vue +6 -6
  289. package/src/components/ui/slider/Slider.vue +14 -14
  290. package/src/components/ui/spinner/Spinner.vue +21 -21
  291. package/src/components/ui/stepper/SimpleStepper.vue +26 -26
  292. package/src/components/ui/stepper/Stepper.vue +6 -6
  293. package/src/components/ui/stepper/StepperDescription.vue +5 -5
  294. package/src/components/ui/stepper/StepperIndicator.vue +17 -17
  295. package/src/components/ui/stepper/StepperItem.vue +4 -4
  296. package/src/components/ui/stepper/StepperSeparator.vue +7 -7
  297. package/src/components/ui/stepper/StepperTitle.vue +5 -5
  298. package/src/components/ui/stepper/StepperTrigger.vue +4 -4
  299. package/src/components/ui/stepper/index.ts +3 -3
  300. package/src/components/ui/switch/Switch.vue +15 -15
  301. package/src/components/ui/table/Table.vue +6 -6
  302. package/src/components/ui/table/TableBody.vue +4 -4
  303. package/src/components/ui/table/TableCaption.vue +4 -4
  304. package/src/components/ui/table/TableCell.vue +8 -8
  305. package/src/components/ui/table/TableEmpty.vue +14 -14
  306. package/src/components/ui/table/TableFooter.vue +8 -8
  307. package/src/components/ui/table/TableHead.vue +8 -8
  308. package/src/components/ui/table/TableHeader.vue +4 -4
  309. package/src/components/ui/table/TableRow.vue +8 -8
  310. package/src/components/ui/tabs/Tabs.vue +4 -4
  311. package/src/components/ui/tabs/TabsContent.vue +4 -4
  312. package/src/components/ui/tabs/TabsList.vue +15 -15
  313. package/src/components/ui/tabs/TabsTrigger.vue +10 -10
  314. package/src/components/ui/tags-input/TagsInput.vue +17 -17
  315. package/src/components/ui/tags-input/TagsInputInput.vue +6 -6
  316. package/src/components/ui/tags-input/TagsInputItem.vue +15 -15
  317. package/src/components/ui/tags-input/TagsInputItemDelete.vue +12 -12
  318. package/src/components/ui/tags-input/TagsInputItemText.vue +4 -4
  319. package/src/components/ui/textarea/Textarea.vue +12 -12
  320. package/src/components/ui/time-picker/TimePicker.vue +25 -25
  321. package/src/components/ui/toggle-group/Toggle.vue +10 -10
  322. package/src/components/ui/toggle-group/ToggleGroup.vue +38 -38
  323. package/src/components/ui/toggle-group/ToggleGroupItem.vue +9 -9
  324. package/src/components/ui/toggle-group/index.ts +46 -46
  325. package/src/components/ui/tooltip/Tooltip.vue +3 -3
  326. package/src/components/ui/tooltip/TooltipContent.vue +13 -13
  327. package/src/components/ui/tooltip/TooltipProvider.vue +4 -4
  328. package/src/components/ui/tooltip/TooltipTrigger.vue +3 -3
  329. package/src/i18n/de.json +206 -185
  330. package/src/i18n/en.json +206 -185
  331. package/src/i18n/es.json +206 -185
  332. package/src/i18n/fr.json +206 -185
  333. package/src/i18n/it.json +206 -185
  334. package/src/i18n/ja.json +206 -185
  335. package/src/i18n/pt.json +206 -185
  336. package/src/i18n/ru.json +206 -185
  337. package/src/i18n/zh.json +206 -185
  338. package/src/lib/color-tokens.ts +24 -24
  339. package/src/lib/i18n.ts +65 -65
  340. package/src/lib/utils.ts +33 -33
  341. package/src/nuxt-components.d.ts +2 -2
  342. package/src/runtime/ui-vintage-i18n-plugin.ts +49 -49
  343. package/src/shims-vue.d.ts +3 -3
  344. package/src/styles.css +377 -377
@@ -12,10 +12,10 @@ import { buttonVariants } from '../button';
12
12
 
13
13
  // Props
14
14
  const props = withDefaults(defineProps<PaginationPrevProps & {
15
- size?: ButtonVariants['size'];
16
- class?: HTMLAttributes['class'];
15
+ size?: ButtonVariants['size'];
16
+ class?: HTMLAttributes['class'];
17
17
  }>(), {
18
- size: 'icon-sm',
18
+ size: 'icon-sm',
19
19
  });
20
20
 
21
21
  const delegatedProps = reactiveOmit(props, 'class', 'size');
@@ -24,9 +24,9 @@ const { t } = useI18n();
24
24
  </script>
25
25
 
26
26
  <template>
27
- <PaginationPrev data-slot="pagination-previous" :aria-label="t('uiVintage.pagination.previous')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
- <slot>
29
- <HugeiconsIcon :icon="ArrowLeft01Icon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:-translate-x-0.5" aria-hidden="true" />
30
- </slot>
31
- </PaginationPrev>
27
+ <PaginationPrev data-slot="pagination-previous" :aria-label="t('uiVintage.pagination.previous')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
+ <slot>
29
+ <HugeiconsIcon :icon="ArrowLeft01Icon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:-translate-x-0.5" aria-hidden="true" />
30
+ </slot>
31
+ </PaginationPrev>
32
32
  </template>
@@ -11,17 +11,17 @@ import PaginationPrevious from './PaginationPrevious.vue';
11
11
 
12
12
  // Props
13
13
  const props = withDefaults(defineProps<{
14
- total: number;
15
- itemsPerPage?: number;
16
- siblingCount?: number;
17
- showEdges?: boolean;
18
- disabled?: boolean;
19
- class?: HTMLAttributes['class'];
14
+ total: number;
15
+ itemsPerPage?: number;
16
+ siblingCount?: number;
17
+ showEdges?: boolean;
18
+ disabled?: boolean;
19
+ class?: HTMLAttributes['class'];
20
20
  }>(), {
21
- itemsPerPage: 10,
22
- siblingCount: 1,
23
- showEdges: true,
24
- disabled: false,
21
+ itemsPerPage: 10,
22
+ siblingCount: 1,
23
+ showEdges: true,
24
+ disabled: false,
25
25
  });
26
26
 
27
27
  // Current page (1-based, v-model:page)
@@ -29,21 +29,21 @@ const page = defineModel<number>('page', { default: 1 });
29
29
  </script>
30
30
 
31
31
  <template>
32
- <Pagination v-model:page="page" :total="props.total" :items-per-page="props.itemsPerPage" :sibling-count="props.siblingCount" :show-edges="props.showEdges" :disabled="props.disabled" :class="props.class">
33
- <PaginationContent v-slot="{ items }">
34
- <!-- Jump to start / previous -->
35
- <PaginationFirst class="hidden sm:inline-flex" />
36
- <PaginationPrevious />
32
+ <Pagination v-model:page="page" :total="props.total" :items-per-page="props.itemsPerPage" :sibling-count="props.siblingCount" :show-edges="props.showEdges" :disabled="props.disabled" :class="props.class">
33
+ <PaginationContent v-slot="{ items }">
34
+ <!-- Jump to start / previous -->
35
+ <PaginationFirst class="hidden sm:inline-flex" />
36
+ <PaginationPrevious />
37
37
 
38
- <!-- Page numbers and gaps -->
39
- <template v-for="(item, index) in items" :key="item.type === 'page' ? `page-${item.value}` : `ellipsis-${index}`">
40
- <PaginationItem v-if="item.type === 'page'" :value="item.value" />
41
- <PaginationEllipsis v-else />
42
- </template>
38
+ <!-- Page numbers and gaps -->
39
+ <template v-for="(item, index) in items" :key="item.type === 'page' ? `page-${item.value}` : `ellipsis-${index}`">
40
+ <PaginationItem v-if="item.type === 'page'" :value="item.value" />
41
+ <PaginationEllipsis v-else />
42
+ </template>
43
43
 
44
- <!-- Next / jump to end -->
45
- <PaginationNext />
46
- <PaginationLast class="hidden sm:inline-flex" />
47
- </PaginationContent>
48
- </Pagination>
44
+ <!-- Next / jump to end -->
45
+ <PaginationNext />
46
+ <PaginationLast class="hidden sm:inline-flex" />
47
+ </PaginationContent>
48
+ </Pagination>
49
49
  </template>
@@ -10,11 +10,11 @@ import PinInputInput from './PinInputInput.vue';
10
10
 
11
11
  // Props
12
12
  const props = defineProps<PinInputRootProps<Type> & {
13
- length?: number;
14
- invalid?: boolean;
15
- separatorAfter?: number;
16
- class?: HTMLAttributes['class'];
17
- inputClass?: HTMLAttributes['class'];
13
+ length?: number;
14
+ invalid?: boolean;
15
+ separatorAfter?: number;
16
+ class?: HTMLAttributes['class'];
17
+ inputClass?: HTMLAttributes['class'];
18
18
  }>();
19
19
 
20
20
  // Emits
@@ -25,24 +25,24 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
25
25
 
26
26
  // Share the invalid state with the cells (also when they are passed through the slot)
27
27
  provide(pinInputContextKey, {
28
- invalid: computed(() => !!props.invalid)
28
+ invalid: computed(() => !!props.invalid)
29
29
  });
30
30
  </script>
31
31
 
32
32
  <template>
33
- <PinInputRoot v-slot="slotProps" data-slot="pin-input" v-bind="forwarded" :aria-invalid="props.invalid || undefined" :class="cn(
34
- 'flex items-center gap-2 has-disabled:opacity-60',
35
- props.invalid && 'animate-uv-shake',
36
- props.class
37
- )">
38
- <slot v-bind="slotProps">
39
- <!-- Auto-rendered cells -->
40
- <template v-for="index in props.length ?? 0" :key="index">
41
- <PinInputInput :index="index - 1" :class="props.inputClass" />
33
+ <PinInputRoot v-slot="slotProps" data-slot="pin-input" v-bind="forwarded" :aria-invalid="props.invalid || undefined" :class="cn(
34
+ 'flex items-center gap-2 has-disabled:opacity-60',
35
+ props.invalid && 'animate-uv-shake',
36
+ props.class
37
+ )">
38
+ <slot v-bind="slotProps">
39
+ <!-- Auto-rendered cells -->
40
+ <template v-for="index in props.length ?? 0" :key="index">
41
+ <PinInputInput :index="index - 1" :class="props.inputClass" />
42
42
 
43
- <!-- Separator -->
44
- <span v-if="props.separatorAfter === index - 1 && index < (props.length ?? 0)" data-slot="pin-input-separator" aria-hidden="true" class="mx-0.5 h-0.5 w-3 shrink-0 rounded-full bg-border-strong" />
45
- </template>
46
- </slot>
47
- </PinInputRoot>
43
+ <!-- Separator -->
44
+ <span v-if="props.separatorAfter === index - 1 && index < (props.length ?? 0)" data-slot="pin-input-separator" aria-hidden="true" class="mx-0.5 h-0.5 w-3 shrink-0 rounded-full bg-border-strong" />
45
+ </template>
46
+ </slot>
47
+ </PinInputRoot>
48
48
  </template>
@@ -11,7 +11,7 @@ defineOptions({ inheritAttrs: false });
11
11
 
12
12
  // Props
13
13
  const props = defineProps<PinInputInputProps & {
14
- class?: HTMLAttributes['class'];
14
+ class?: HTMLAttributes['class'];
15
15
  }>();
16
16
 
17
17
  const delegatedProps = reactiveOmit(props, 'class');
@@ -22,8 +22,8 @@ const pinInputContext = inject(pinInputContextKey, null);
22
22
 
23
23
  // Current character of this cell
24
24
  const cellValue = computed(() => {
25
- const value = rootContext.currentModelValue.value[props.index];
26
- return value === undefined || value === null ? '' : String(value);
25
+ const value = rootContext.currentModelValue.value[props.index];
26
+ return value === undefined || value === null ? '' : String(value);
27
27
  });
28
28
  const isFilled = computed(() => cellValue.value !== '');
29
29
  const displayValue = computed(() => (rootContext.mask.value ? '•' : cellValue.value));
@@ -31,19 +31,19 @@ const isInvalid = computed(() => pinInputContext?.invalid.value || undefined);
31
31
  </script>
32
32
 
33
33
  <template>
34
- <span data-slot="pin-input-cell" class="relative inline-flex shrink-0">
35
- <!-- Native input (text is transparent, the overlay below renders the character) -->
36
- <PinInputInput data-slot="pin-input-input" v-bind="{ ...$attrs, ...forwardedProps }" :aria-invalid="isInvalid" :data-filled="isFilled ? '' : undefined" :class="cn(
37
- 'uv-field size-12 rounded border border-input bg-secondary text-center text-lg font-semibold text-transparent caret-primary shadow-elevated-sm outline-none sm:size-13',
38
- 'placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary/25',
39
- 'data-filled:border-primary/60 data-filled:bg-primary/5',
40
- 'disabled:cursor-not-allowed disabled:opacity-60',
41
- props.class
42
- )" />
34
+ <span data-slot="pin-input-cell" class="relative inline-flex shrink-0">
35
+ <!-- Native input (text is transparent, the overlay below renders the character) -->
36
+ <PinInputInput data-slot="pin-input-input" v-bind="{ ...$attrs, ...forwardedProps }" :aria-invalid="isInvalid" :data-filled="isFilled ? '' : undefined" :class="cn(
37
+ 'uv-field size-12 rounded border border-input bg-secondary text-center text-lg font-semibold text-transparent caret-primary shadow-elevated-sm outline-none sm:size-13',
38
+ 'placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary/25',
39
+ 'data-filled:border-primary/60 data-filled:bg-primary/5',
40
+ 'disabled:cursor-not-allowed disabled:opacity-60',
41
+ props.class
42
+ )" />
43
43
 
44
- <!-- Animated character (re-keyed on every value so it pops) -->
45
- <span v-if="isFilled" :key="cellValue" aria-hidden="true" class="pointer-events-none absolute inset-0 flex animate-uv-pop items-center justify-center text-lg font-semibold text-foreground">
46
- {{ displayValue }}
47
- </span>
48
- </span>
44
+ <!-- Animated character (re-keyed on every value so it pops) -->
45
+ <span v-if="isFilled" :key="cellValue" aria-hidden="true" class="pointer-events-none absolute inset-0 flex animate-uv-pop items-center justify-center text-lg font-semibold text-foreground">
46
+ {{ displayValue }}
47
+ </span>
48
+ </span>
49
49
  </template>
@@ -2,7 +2,7 @@ import type { ComputedRef, InjectionKey } from 'vue';
2
2
 
3
3
  // Shared state provided by PinInput to its cells
4
4
  export interface PinInputContext {
5
- invalid: ComputedRef<boolean>;
5
+ invalid: ComputedRef<boolean>;
6
6
  }
7
7
 
8
8
  export const pinInputContextKey: InjectionKey<PinInputContext> = Symbol('uvPinInput');
@@ -12,7 +12,7 @@ const forwarded = useForwardPropsEmits(props, emits);
12
12
  </script>
13
13
 
14
14
  <template>
15
- <PopoverRoot v-slot="slotProps" data-slot="popover" v-bind="forwarded">
16
- <slot v-bind="slotProps" />
17
- </PopoverRoot>
15
+ <PopoverRoot v-slot="slotProps" data-slot="popover" v-bind="forwarded">
16
+ <slot v-bind="slotProps" />
17
+ </PopoverRoot>
18
18
  </template>
@@ -7,7 +7,7 @@ const props = defineProps<PopoverAnchorProps>();
7
7
  </script>
8
8
 
9
9
  <template>
10
- <PopoverAnchor data-slot="popover-anchor" v-bind="props">
11
- <slot />
12
- </PopoverAnchor>
10
+ <PopoverAnchor data-slot="popover-anchor" v-bind="props">
11
+ <slot />
12
+ </PopoverAnchor>
13
13
  </template>
@@ -6,13 +6,13 @@ import { PopoverContent, PopoverPortal, useForwardPropsEmits } from 'reka-ui';
6
6
  import { cn } from '../../../lib/utils';
7
7
 
8
8
  defineOptions({
9
- inheritAttrs: false
9
+ inheritAttrs: false
10
10
  });
11
11
 
12
12
  // Props
13
13
  const props = withDefaults(defineProps<PopoverContentProps & { class?: HTMLAttributes['class'] }>(), {
14
- align: 'center',
15
- sideOffset: 4
14
+ align: 'center',
15
+ sideOffset: 4
16
16
  });
17
17
 
18
18
  // Emits
@@ -24,13 +24,13 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
24
24
  </script>
25
25
 
26
26
  <template>
27
- <PopoverPortal>
28
- <PopoverContent data-slot="popover-content" v-bind="{ ...$attrs, ...forwarded }" :class="cn(
29
- 'uv-floating-motion bg-popover text-popover-foreground z-50 w-72 rounded border border-border p-4 shadow-elevated-lg outline-hidden',
30
- props.class
31
- )
32
- ">
33
- <slot />
34
- </PopoverContent>
35
- </PopoverPortal>
27
+ <PopoverPortal>
28
+ <PopoverContent data-slot="popover-content" v-bind="{ ...$attrs, ...forwarded }" :class="cn(
29
+ 'uv-floating-motion bg-popover text-popover-foreground z-50 w-72 rounded border border-border p-4 shadow-elevated-lg outline-hidden',
30
+ props.class
31
+ )
32
+ ">
33
+ <slot />
34
+ </PopoverContent>
35
+ </PopoverPortal>
36
36
  </template>
@@ -7,7 +7,7 @@ const props = defineProps<PopoverTriggerProps>();
7
7
  </script>
8
8
 
9
9
  <template>
10
- <PopoverTrigger data-slot="popover-trigger" v-bind="props">
11
- <slot />
12
- </PopoverTrigger>
10
+ <PopoverTrigger data-slot="popover-trigger" v-bind="props">
11
+ <slot />
12
+ </PopoverTrigger>
13
13
  </template>
@@ -8,32 +8,32 @@ import { cn } from '../../../lib/utils';
8
8
 
9
9
  // Props
10
10
  const props = withDefaults(defineProps<ProgressRootProps & {
11
- indeterminate?: boolean;
12
- class?: HTMLAttributes['class'];
11
+ indeterminate?: boolean;
12
+ class?: HTMLAttributes['class'];
13
13
  }>(), {
14
- modelValue: 0,
15
- indeterminate: false
14
+ modelValue: 0,
15
+ indeterminate: false
16
16
  });
17
17
 
18
18
  const delegatedProps = reactiveOmit(props, 'class', 'indeterminate');
19
19
 
20
20
  // Resolve the fill percentage against the configured max
21
21
  const percentage = computed(() => {
22
- const max = props.max ?? 100;
23
- if (!max) return 0;
24
- return Math.min(100, Math.max(0, ((props.modelValue ?? 0) / max) * 100));
22
+ const max = props.max ?? 100;
23
+ if (!max) return 0;
24
+ return Math.min(100, Math.max(0, ((props.modelValue ?? 0) / max) * 100));
25
25
  });
26
26
  </script>
27
27
 
28
28
  <template>
29
- <ProgressRoot data-slot="progress" v-bind="delegatedProps" :model-value="props.indeterminate ? null : props.modelValue" :class="cn(
30
- 'relative h-2 w-full overflow-hidden rounded-sm bg-muted',
31
- props.class
32
- )">
33
- <!-- Indeterminate bar -->
34
- <div v-if="props.indeterminate" data-slot="progress-indicator" class="absolute inset-y-0 left-0 w-full origin-left animate-uv-indeterminate rounded-sm bg-primary" />
29
+ <ProgressRoot data-slot="progress" v-bind="delegatedProps" :model-value="props.indeterminate ? null : props.modelValue" :class="cn(
30
+ 'relative h-2 w-full overflow-hidden rounded-sm bg-muted',
31
+ props.class
32
+ )">
33
+ <!-- Indeterminate bar -->
34
+ <div v-if="props.indeterminate" data-slot="progress-indicator" class="absolute inset-y-0 left-0 w-full origin-left animate-uv-indeterminate rounded-sm bg-primary" />
35
35
 
36
- <!-- Determinate bar -->
37
- <ProgressIndicator v-else data-slot="progress-indicator" class="relative h-full w-full flex-1 overflow-hidden rounded-sm bg-primary transition-transform duration-700 ease-out-expo" :style="`transform: translateX(-${100 - percentage}%);`" />
38
- </ProgressRoot>
36
+ <!-- Determinate bar -->
37
+ <ProgressIndicator v-else data-slot="progress-indicator" class="relative h-full w-full flex-1 overflow-hidden rounded-sm bg-primary transition-transform duration-700 ease-out-expo" :style="`transform: translateX(-${100 - percentage}%);`" />
38
+ </ProgressRoot>
39
39
  </template>
@@ -7,7 +7,7 @@ import { cn } from '../../../lib/utils';
7
7
 
8
8
  // Props
9
9
  const props = defineProps<RadioGroupRootProps & {
10
- class?: HTMLAttributes['class'];
10
+ class?: HTMLAttributes['class'];
11
11
  }>();
12
12
 
13
13
  // Emits
@@ -18,10 +18,10 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
18
18
  </script>
19
19
 
20
20
  <template>
21
- <RadioGroupRoot v-slot="slotProps" data-slot="radio-group" v-bind="forwarded" :class="cn(
22
- 'grid gap-3 aria-[orientation=horizontal]:flex aria-[orientation=horizontal]:flex-wrap aria-[orientation=horizontal]:items-center aria-[orientation=horizontal]:gap-x-5',
23
- props.class
24
- )">
25
- <slot v-bind="slotProps" />
26
- </RadioGroupRoot>
21
+ <RadioGroupRoot v-slot="slotProps" data-slot="radio-group" v-bind="forwarded" :class="cn(
22
+ 'grid gap-3 aria-[orientation=horizontal]:flex aria-[orientation=horizontal]:flex-wrap aria-[orientation=horizontal]:items-center aria-[orientation=horizontal]:gap-x-5',
23
+ props.class
24
+ )">
25
+ <slot v-bind="slotProps" />
26
+ </RadioGroupRoot>
27
27
  </template>
@@ -8,49 +8,49 @@ import { cn } from '../../../lib/utils';
8
8
 
9
9
  // Props
10
10
  const props = defineProps<{
11
- value: AcceptableValue;
12
- label: string;
13
- description?: string;
14
- icon?: HugeiconsIconDefinition;
15
- disabled?: boolean;
16
- id?: string;
17
- class?: HTMLAttributes['class'];
11
+ value: AcceptableValue;
12
+ label: string;
13
+ description?: string;
14
+ icon?: HugeiconsIconDefinition;
15
+ disabled?: boolean;
16
+ id?: string;
17
+ class?: HTMLAttributes['class'];
18
18
  }>();
19
19
  </script>
20
20
 
21
21
  <template>
22
- <RadioGroupItem :id="props.id" :value="props.value" :disabled="props.disabled" data-slot="radio-group-card" :class="cn(
23
- 'group/radio-card relative flex w-full cursor-pointer items-center gap-3 rounded border border-border bg-card px-4 py-3 text-left shadow-elevated-sm outline-none',
24
- '[transition:scale_320ms_var(--ease-spring),border-color_150ms_var(--ease-snappy),background-color_150ms_var(--ease-snappy),box-shadow_200ms_var(--ease-snappy)]',
25
- 'hover:border-border-strong active:scale-[0.985] focus-visible:ring-[3px] focus-visible:ring-ring/45',
26
- 'data-[state=checked]:border-primary data-[state=checked]:bg-primary/5 data-[state=checked]:hover:border-primary',
27
- 'disabled:cursor-not-allowed disabled:opacity-60 disabled:active:scale-100',
28
- props.class
29
- )">
30
- <!-- Icon -->
31
- <span v-if="props.icon" class="flex size-9 shrink-0 items-center justify-center rounded border border-border bg-surface text-muted-foreground transition-colors duration-150 group-data-[state=checked]/radio-card:border-primary/40 group-data-[state=checked]/radio-card:bg-primary/10 group-data-[state=checked]/radio-card:text-primary">
32
- <HugeiconsIcon :icon="props.icon" class="size-4.5" />
33
- </span>
22
+ <RadioGroupItem :id="props.id" :value="props.value" :disabled="props.disabled" data-slot="radio-group-card" :class="cn(
23
+ 'group/radio-card relative flex w-full cursor-pointer items-center gap-3 rounded border border-border bg-card px-4 py-3 text-left shadow-elevated-sm outline-none',
24
+ '[transition:scale_320ms_var(--ease-spring),border-color_150ms_var(--ease-snappy),background-color_150ms_var(--ease-snappy),box-shadow_200ms_var(--ease-snappy)]',
25
+ 'hover:border-border-strong active:scale-[0.985] focus-visible:ring-[3px] focus-visible:ring-ring/45',
26
+ 'data-[state=checked]:border-primary data-[state=checked]:bg-primary/5 data-[state=checked]:hover:border-primary',
27
+ 'disabled:cursor-not-allowed disabled:opacity-60 disabled:active:scale-100',
28
+ props.class
29
+ )">
30
+ <!-- Icon -->
31
+ <span v-if="props.icon" class="flex size-9 shrink-0 items-center justify-center rounded border border-border bg-surface text-muted-foreground transition-colors duration-150 group-data-[state=checked]/radio-card:border-primary/40 group-data-[state=checked]/radio-card:bg-primary/10 group-data-[state=checked]/radio-card:text-primary">
32
+ <HugeiconsIcon :icon="props.icon" class="size-4.5" />
33
+ </span>
34
34
 
35
- <!-- Label and description -->
36
- <span class="flex min-w-0 flex-1 flex-col gap-0.5">
37
- <span class="text-xs font-semibold text-foreground sm:text-sm">
38
- <slot name="label">{{ props.label }}</slot>
39
- </span>
40
- <span v-if="props.description || $slots.description" class="text-xs text-muted-foreground">
41
- <slot name="description">{{ props.description }}</slot>
42
- </span>
43
- </span>
35
+ <!-- Label and description -->
36
+ <span class="flex min-w-0 flex-1 flex-col gap-0.5">
37
+ <span class="text-xs font-semibold text-foreground sm:text-sm">
38
+ <slot name="label">{{ props.label }}</slot>
39
+ </span>
40
+ <span v-if="props.description || $slots.description" class="text-xs text-muted-foreground">
41
+ <slot name="description">{{ props.description }}</slot>
42
+ </span>
43
+ </span>
44
44
 
45
- <!-- Radio circle -->
46
- <span aria-hidden="true" class="flex size-5 shrink-0 items-center justify-center rounded-full border border-input bg-secondary shadow-elevated-sm transition-colors duration-150 group-data-[state=checked]/radio-card:border-primary">
47
- <RadioGroupIndicator force-mount data-slot="radio-group-indicator" :class="cn(
48
- 'pointer-events-none flex items-center justify-center opacity-0 scale-0',
49
- '[transition:scale_140ms_var(--ease-snappy),opacity_100ms_var(--ease-snappy)]',
50
- 'data-[state=checked]:opacity-100 data-[state=checked]:scale-100 data-[state=checked]:[transition:scale_420ms_var(--ease-bounce),opacity_80ms_linear]'
51
- )">
52
- <span class="size-2.5 rounded-full bg-primary" />
53
- </RadioGroupIndicator>
54
- </span>
55
- </RadioGroupItem>
45
+ <!-- Radio circle -->
46
+ <span aria-hidden="true" class="flex size-5 shrink-0 items-center justify-center rounded-full border border-input bg-secondary shadow-elevated-sm transition-colors duration-150 group-data-[state=checked]/radio-card:border-primary">
47
+ <RadioGroupIndicator force-mount data-slot="radio-group-indicator" :class="cn(
48
+ 'pointer-events-none flex items-center justify-center opacity-0 scale-0',
49
+ '[transition:scale_140ms_var(--ease-snappy),opacity_100ms_var(--ease-snappy)]',
50
+ 'data-[state=checked]:opacity-100 data-[state=checked]:scale-100 data-[state=checked]:[transition:scale_420ms_var(--ease-bounce),opacity_80ms_linear]'
51
+ )">
52
+ <span class="size-2.5 rounded-full bg-primary" />
53
+ </RadioGroupIndicator>
54
+ </span>
55
+ </RadioGroupItem>
56
56
  </template>
@@ -7,7 +7,7 @@ import { cn } from '../../../lib/utils';
7
7
 
8
8
  // Props
9
9
  const props = defineProps<RadioGroupItemProps & {
10
- class?: HTMLAttributes['class'];
10
+ class?: HTMLAttributes['class'];
11
11
  }>();
12
12
 
13
13
  // Emits
@@ -18,23 +18,23 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
18
18
  </script>
19
19
 
20
20
  <template>
21
- <RadioGroupItem v-slot="slotProps" data-slot="radio-group-item" v-bind="forwarded" :class="cn(
22
- 'peer relative inline-flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-full border border-input bg-secondary text-primary shadow-elevated-sm outline-none',
23
- '[transition:scale_320ms_var(--ease-spring),border-color_150ms_var(--ease-snappy),box-shadow_150ms_var(--ease-snappy)]',
24
- 'hover:border-border-strong active:scale-[0.86] focus-visible:ring-[3px] focus-visible:ring-ring/45',
25
- 'data-[state=checked]:border-primary data-[state=checked]:hover:border-primary',
26
- 'disabled:cursor-not-allowed disabled:opacity-60 disabled:active:scale-100 aria-invalid:border-destructive',
27
- props.class
28
- )">
29
- <!-- Indicator (always mounted so the dot can pop in and shrink out) -->
30
- <RadioGroupIndicator force-mount data-slot="radio-group-indicator" :class="cn(
31
- 'pointer-events-none flex items-center justify-center opacity-0 scale-0',
32
- '[transition:scale_140ms_var(--ease-snappy),opacity_100ms_var(--ease-snappy)]',
33
- 'data-[state=checked]:opacity-100 data-[state=checked]:scale-100 data-[state=checked]:[transition:scale_420ms_var(--ease-bounce),opacity_80ms_linear]'
34
- )">
35
- <slot v-bind="slotProps">
36
- <span class="size-2.5 rounded-full bg-primary" />
37
- </slot>
38
- </RadioGroupIndicator>
39
- </RadioGroupItem>
21
+ <RadioGroupItem v-slot="slotProps" data-slot="radio-group-item" v-bind="forwarded" :class="cn(
22
+ 'peer relative inline-flex size-5 shrink-0 cursor-pointer items-center justify-center rounded-full border border-input bg-secondary text-primary shadow-elevated-sm outline-none',
23
+ '[transition:scale_320ms_var(--ease-spring),border-color_150ms_var(--ease-snappy),box-shadow_150ms_var(--ease-snappy)]',
24
+ 'hover:border-border-strong active:scale-[0.86] focus-visible:ring-[3px] focus-visible:ring-ring/45',
25
+ 'data-[state=checked]:border-primary data-[state=checked]:hover:border-primary',
26
+ 'disabled:cursor-not-allowed disabled:opacity-60 disabled:active:scale-100 aria-invalid:border-destructive',
27
+ props.class
28
+ )">
29
+ <!-- Indicator (always mounted so the dot can pop in and shrink out) -->
30
+ <RadioGroupIndicator force-mount data-slot="radio-group-indicator" :class="cn(
31
+ 'pointer-events-none flex items-center justify-center opacity-0 scale-0',
32
+ '[transition:scale_140ms_var(--ease-snappy),opacity_100ms_var(--ease-snappy)]',
33
+ 'data-[state=checked]:opacity-100 data-[state=checked]:scale-100 data-[state=checked]:[transition:scale_420ms_var(--ease-bounce),opacity_80ms_linear]'
34
+ )">
35
+ <slot v-bind="slotProps">
36
+ <span class="size-2.5 rounded-full bg-primary" />
37
+ </slot>
38
+ </RadioGroupIndicator>
39
+ </RadioGroupItem>
40
40
  </template>
@@ -13,18 +13,18 @@ const delegatedProps = reactiveOmit(props, 'class');
13
13
  </script>
14
14
 
15
15
  <template>
16
- <ScrollAreaRoot
17
- data-slot="scroll-area"
18
- v-bind="delegatedProps"
19
- :class="cn('relative', props.class)"
20
- >
21
- <ScrollAreaViewport
22
- data-slot="scroll-area-viewport"
23
- class="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1"
24
- >
25
- <slot />
26
- </ScrollAreaViewport>
27
- <ScrollBar />
28
- <ScrollAreaCorner />
29
- </ScrollAreaRoot>
16
+ <ScrollAreaRoot
17
+ data-slot="scroll-area"
18
+ v-bind="delegatedProps"
19
+ :class="cn('relative', props.class)"
20
+ >
21
+ <ScrollAreaViewport
22
+ data-slot="scroll-area-viewport"
23
+ class="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1"
24
+ >
25
+ <slot />
26
+ </ScrollAreaViewport>
27
+ <ScrollBar />
28
+ <ScrollAreaCorner />
29
+ </ScrollAreaRoot>
30
30
  </template>
@@ -7,22 +7,22 @@ import { cn } from '../../../lib/utils';
7
7
 
8
8
  // Props
9
9
  const props = withDefaults(defineProps<ScrollAreaScrollbarProps & { class?: HTMLAttributes['class'] }>(), {
10
- orientation: 'vertical'
10
+ orientation: 'vertical'
11
11
  });
12
12
 
13
13
  const delegatedProps = reactiveOmit(props, 'class');
14
14
  </script>
15
15
 
16
16
  <template>
17
- <ScrollAreaScrollbar data-slot="scroll-area-scrollbar" v-bind="delegatedProps" :class="cn(
18
- 'flex touch-none p-px transition-colors select-none',
19
- orientation === 'vertical' &&
20
- 'h-full w-2.5 border-l border-l-transparent',
21
- orientation === 'horizontal' &&
22
- 'h-2.5 flex-col border-t border-t-transparent',
23
- props.class
24
- )
25
- ">
26
- <ScrollAreaThumb data-slot="scroll-area-thumb" class="bg-border relative flex-1 rounded-full" />
27
- </ScrollAreaScrollbar>
17
+ <ScrollAreaScrollbar data-slot="scroll-area-scrollbar" v-bind="delegatedProps" :class="cn(
18
+ 'flex touch-none p-px transition-colors select-none',
19
+ orientation === 'vertical' &&
20
+ 'h-full w-2.5 border-l border-l-transparent',
21
+ orientation === 'horizontal' &&
22
+ 'h-2.5 flex-col border-t border-t-transparent',
23
+ props.class
24
+ )
25
+ ">
26
+ <ScrollAreaThumb data-slot="scroll-area-thumb" class="bg-border relative flex-1 rounded-full" />
27
+ </ScrollAreaScrollbar>
28
28
  </template>
@@ -12,7 +12,7 @@ const forwarded = useForwardPropsEmits(props, emits);
12
12
  </script>
13
13
 
14
14
  <template>
15
- <SelectRoot v-slot="slotProps" data-slot="select" v-bind="forwarded">
16
- <slot v-bind="slotProps" />
17
- </SelectRoot>
15
+ <SelectRoot v-slot="slotProps" data-slot="select" v-bind="forwarded">
16
+ <slot v-bind="slotProps" />
17
+ </SelectRoot>
18
18
  </template>