@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
@@ -6,67 +6,67 @@ import Kbd from './Kbd.vue';
6
6
 
7
7
  // Props
8
8
  const props = defineProps<{
9
- class?: HTMLAttributes['class'];
10
- keys?: string[];
11
- pressed?: boolean;
9
+ class?: HTMLAttributes['class'];
10
+ keys?: string[];
11
+ pressed?: boolean;
12
12
  }>();
13
13
 
14
14
  // Default to non-Mac glyphs so SSR output is stable, then refine on the client
15
15
  const isMac = ref(false);
16
16
 
17
17
  onMounted(() => {
18
- isMac.value = /mac|iphone|ipad|ipod/i.test(navigator.platform || navigator.userAgent);
18
+ isMac.value = /mac|iphone|ipad|ipod/i.test(navigator.platform || navigator.userAgent);
19
19
  });
20
20
 
21
21
  // Map special key names to their display glyph
22
22
  const formatKey = (key: string) => {
23
- switch (key.toLowerCase()) {
24
- case 'mod':
25
- return isMac.value ? '⌘' : 'Ctrl';
26
- case 'cmd':
27
- case 'meta':
28
- return isMac.value ? '⌘' : 'Win';
29
- case 'ctrl':
30
- case 'control':
31
- return isMac.value ? '⌃' : 'Ctrl';
32
- case 'shift':
33
- return '⇧';
34
- case 'alt':
35
- case 'option':
36
- return isMac.value ? '⌥' : 'Alt';
37
- case 'enter':
38
- case 'return':
39
- return '↵';
40
- case 'esc':
41
- case 'escape':
42
- return 'Esc';
43
- case 'tab':
44
- return 'Tab';
45
- case 'backspace':
46
- return '⌫';
47
- case 'up':
48
- return '↑';
49
- case 'down':
50
- return '↓';
51
- case 'left':
52
- return '←';
53
- case 'right':
54
- return '→';
55
- case 'space':
56
- return 'Space';
57
- default:
58
- return key.length === 1 ? key.toUpperCase() : key;
59
- }
23
+ switch (key.toLowerCase()) {
24
+ case 'mod':
25
+ return isMac.value ? '⌘' : 'Ctrl';
26
+ case 'cmd':
27
+ case 'meta':
28
+ return isMac.value ? '⌘' : 'Win';
29
+ case 'ctrl':
30
+ case 'control':
31
+ return isMac.value ? '⌃' : 'Ctrl';
32
+ case 'shift':
33
+ return '⇧';
34
+ case 'alt':
35
+ case 'option':
36
+ return isMac.value ? '⌥' : 'Alt';
37
+ case 'enter':
38
+ case 'return':
39
+ return '↵';
40
+ case 'esc':
41
+ case 'escape':
42
+ return 'Esc';
43
+ case 'tab':
44
+ return 'Tab';
45
+ case 'backspace':
46
+ return '⌫';
47
+ case 'up':
48
+ return '↑';
49
+ case 'down':
50
+ return '↓';
51
+ case 'left':
52
+ return '←';
53
+ case 'right':
54
+ return '→';
55
+ case 'space':
56
+ return 'Space';
57
+ default:
58
+ return key.length === 1 ? key.toUpperCase() : key;
59
+ }
60
60
  };
61
61
  </script>
62
62
 
63
63
  <template>
64
- <span data-slot="kbd-group" :class="cn('inline-flex items-center gap-1', props.class)">
65
- <slot>
66
- <!-- Keys rendered from the keys prop -->
67
- <Kbd v-for="(key, index) in props.keys ?? []" :key="`${key}-${index}`" :pressed="props.pressed">
68
- {{ formatKey(key) }}
69
- </Kbd>
70
- </slot>
71
- </span>
64
+ <span data-slot="kbd-group" :class="cn('inline-flex items-center gap-1', props.class)">
65
+ <slot>
66
+ <!-- Keys rendered from the keys prop -->
67
+ <Kbd v-for="(key, index) in props.keys ?? []" :key="`${key}-${index}`" :pressed="props.pressed">
68
+ {{ formatKey(key) }}
69
+ </Kbd>
70
+ </slot>
71
+ </span>
72
72
  </template>
@@ -12,11 +12,11 @@ const delegatedProps = reactiveOmit(props, 'class');
12
12
  </script>
13
13
 
14
14
  <template>
15
- <Label data-slot="label" v-bind="delegatedProps" :class="cn(
16
- 'flex items-center gap-2 text-sm leading-none font-semibold select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
17
- props.class
18
- )
19
- ">
20
- <slot />
21
- </Label>
15
+ <Label data-slot="label" v-bind="delegatedProps" :class="cn(
16
+ 'flex items-center gap-2 text-sm leading-none font-semibold select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
17
+ props.class
18
+ )
19
+ ">
20
+ <slot />
21
+ </Label>
22
22
  </template>
@@ -8,7 +8,7 @@ import { cn } from '../../../lib/utils';
8
8
  import { useFieldControlId } from '../field/field-context';
9
9
 
10
10
  defineOptions({
11
- inheritAttrs: false
11
+ inheritAttrs: false
12
12
  });
13
13
 
14
14
  // Props
@@ -16,12 +16,12 @@ const props = defineProps<{ modelValue?: AcceptableValue | AcceptableValue[]; cl
16
16
 
17
17
  // Emits
18
18
  const emit = defineEmits<{
19
- 'update:modelValue': AcceptableValue;
19
+ 'update:modelValue': AcceptableValue;
20
20
  }>();
21
21
 
22
22
  const modelValue = useVModel(props, 'modelValue', emit, {
23
- passive: true,
24
- defaultValue: ''
23
+ passive: true,
24
+ defaultValue: ''
25
25
  });
26
26
 
27
27
  const delegatedProps = reactiveOmit(props, 'class');
@@ -31,16 +31,16 @@ const fieldControlId = useFieldControlId();
31
31
  </script>
32
32
 
33
33
  <template>
34
- <div class="group/native-select relative w-fit has-[select:disabled]:opacity-50" data-slot="native-select-wrapper">
35
- <select :id="fieldControlId" v-bind="{ ...$attrs, ...delegatedProps }" v-model="modelValue" data-slot="native-select" :class="cn(
36
- 'border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 appearance-none rounded border bg-transparent px-3 py-2 pr-9 text-sm shadow-elevated-sm transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed',
37
- 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',
38
- 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
39
- props.class
40
- )
41
- ">
42
- <slot />
43
- </select>
44
- <HugeiconsIcon :icon="ArrowDown01Icon" class="text-muted-foreground pointer-events-none absolute top-1/2 right-3.5 size-4 -translate-y-1/2 opacity-50 select-none" aria-hidden="true" data-slot="native-select-icon" />
45
- </div>
34
+ <div class="group/native-select relative w-fit has-[select:disabled]:opacity-50" data-slot="native-select-wrapper">
35
+ <select :id="fieldControlId" v-bind="{ ...$attrs, ...delegatedProps }" v-model="modelValue" data-slot="native-select" :class="cn(
36
+ 'border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 appearance-none rounded border bg-transparent px-3 py-2 pr-9 text-sm shadow-elevated-sm transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed',
37
+ 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',
38
+ 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
39
+ props.class
40
+ )
41
+ ">
42
+ <slot />
43
+ </select>
44
+ <HugeiconsIcon :icon="ArrowDown01Icon" class="text-muted-foreground pointer-events-none absolute top-1/2 right-3.5 size-4 -translate-y-1/2 opacity-50 select-none" aria-hidden="true" data-slot="native-select-icon" />
45
+ </div>
46
46
  </template>
@@ -7,7 +7,7 @@ const props = defineProps<{ class?: HTMLAttributes['class'] }>();
7
7
  </script>
8
8
 
9
9
  <template>
10
- <optgroup data-slot="native-select-optgroup" :class="cn('bg-popover text-popover-foreground', props.class)">
11
- <slot />
12
- </optgroup>
10
+ <optgroup data-slot="native-select-optgroup" :class="cn('bg-popover text-popover-foreground', props.class)">
11
+ <slot />
12
+ </optgroup>
13
13
  </template>
@@ -7,7 +7,7 @@ const props = defineProps<{ class?: HTMLAttributes['class'] }>();
7
7
  </script>
8
8
 
9
9
  <template>
10
- <option data-slot="native-select-option" :class="cn('bg-popover text-popover-foreground', props.class)">
11
- <slot />
12
- </option>
10
+ <option data-slot="native-select-option" :class="cn('bg-popover text-popover-foreground', props.class)">
11
+ <slot />
12
+ </option>
13
13
  </template>
@@ -13,11 +13,11 @@ import { useFieldControlId } from '../field/field-context';
13
13
 
14
14
  // Props
15
15
  const props = defineProps<NumberFieldRootProps & {
16
- placeholder?: string;
17
- decrementLabel?: string;
18
- incrementLabel?: string;
19
- class?: HTMLAttributes['class'];
20
- inputClass?: HTMLAttributes['class'];
16
+ placeholder?: string;
17
+ decrementLabel?: string;
18
+ incrementLabel?: string;
19
+ class?: HTMLAttributes['class'];
20
+ inputClass?: HTMLAttributes['class'];
21
21
  }>();
22
22
 
23
23
  // Emits
@@ -38,46 +38,46 @@ let ghostAnimation: Animation | null = null;
38
38
 
39
39
  // Keep the reference value in sync with external model updates
40
40
  watch(() => props.modelValue, (value) => {
41
- lastValue.value = value;
41
+ lastValue.value = value;
42
42
  });
43
43
 
44
44
  // Slide the new digits in (and the old ones out) in the direction of the change
45
45
  const animateChange = async (value: number) => {
46
- const previous = lastValue.value;
47
- lastValue.value = value;
48
-
49
- const input = viewportRef.value?.querySelector('input');
50
- if (!input || typeof window === 'undefined' || previous === null || previous === undefined || Number.isNaN(previous) || Number.isNaN(value)) return;
51
- if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
52
-
53
- // The DOM still shows the previous text at this point
54
- const previousText = input.value;
55
- const direction = value > previous ? 1 : -1;
56
- ghostAnimation?.cancel();
57
- ghostText.value = previousText;
58
- await nextTick();
59
-
60
- // Skip when the text did not visibly change (e.g. a typed value committed on blur)
61
- if (input.value === previousText) {
62
- ghostText.value = '';
63
- return;
64
- }
65
-
66
- const options: KeyframeAnimationOptions = { duration: 320, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' };
67
- input.animate([
68
- { transform: `translateY(${direction * 60}%)`, opacity: 0, filter: 'blur(2px)' },
69
- { transform: 'translateY(0)', opacity: 1, filter: 'blur(0)' }
70
- ], options);
71
-
72
- if (ghostRef.value) {
73
- ghostAnimation = ghostRef.value.animate([
74
- { transform: 'translateY(0)', opacity: 1, filter: 'blur(0)' },
75
- { transform: `translateY(${direction * -60}%)`, opacity: 0, filter: 'blur(2px)' }
76
- ], { ...options, duration: 220, fill: 'forwards' });
77
- ghostAnimation.onfinish = () => {
78
- ghostText.value = '';
79
- };
80
- }
46
+ const previous = lastValue.value;
47
+ lastValue.value = value;
48
+
49
+ const input = viewportRef.value?.querySelector('input');
50
+ if (!input || typeof window === 'undefined' || previous === null || previous === undefined || Number.isNaN(previous) || Number.isNaN(value)) return;
51
+ if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
52
+
53
+ // The DOM still shows the previous text at this point
54
+ const previousText = input.value;
55
+ const direction = value > previous ? 1 : -1;
56
+ ghostAnimation?.cancel();
57
+ ghostText.value = previousText;
58
+ await nextTick();
59
+
60
+ // Skip when the text did not visibly change (e.g. a typed value committed on blur)
61
+ if (input.value === previousText) {
62
+ ghostText.value = '';
63
+ return;
64
+ }
65
+
66
+ const options: KeyframeAnimationOptions = { duration: 320, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' };
67
+ input.animate([
68
+ { transform: `translateY(${direction * 60}%)`, opacity: 0, filter: 'blur(2px)' },
69
+ { transform: 'translateY(0)', opacity: 1, filter: 'blur(0)' }
70
+ ], options);
71
+
72
+ if (ghostRef.value) {
73
+ ghostAnimation = ghostRef.value.animate([
74
+ { transform: 'translateY(0)', opacity: 1, filter: 'blur(0)' },
75
+ { transform: `translateY(${direction * -60}%)`, opacity: 0, filter: 'blur(2px)' }
76
+ ], { ...options, duration: 220, fill: 'forwards' });
77
+ ghostAnimation.onfinish = () => {
78
+ ghostText.value = '';
79
+ };
80
+ }
81
81
  };
82
82
 
83
83
  // Let a surrounding Field label point to this control
@@ -85,51 +85,51 @@ const fieldControlId = useFieldControlId(() => props.id);
85
85
  </script>
86
86
 
87
87
  <template>
88
- <NumberFieldRoot v-slot="slotProps" data-slot="number-field" v-bind="forwarded" :id="fieldControlId" :class="cn(
89
- 'uv-field flex h-13 w-full items-center gap-1 rounded border border-input bg-secondary px-1.5 text-foreground shadow-elevated-sm',
90
- 'data-disabled:cursor-not-allowed data-disabled:opacity-60 aria-invalid:animate-uv-shake',
91
- props.class
92
- )" @update:model-value="animateChange">
93
- <!-- Decrement button -->
94
- <NumberFieldDecrement data-slot="number-field-decrement" :aria-label="resolvedDecrementLabel" :class="cn(
95
- 'inline-flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none',
96
- '[transition:scale_320ms_var(--ease-spring),background-color_150ms_var(--ease-snappy),color_150ms_var(--ease-snappy),opacity_150ms_var(--ease-snappy)]',
97
- 'hover:bg-accent hover:text-foreground active:scale-[0.84] data-pressed:scale-[0.84] focus-visible:ring-[3px] focus-visible:ring-ring/45',
98
- 'disabled:pointer-events-none disabled:opacity-35 data-disabled:pointer-events-none data-disabled:opacity-35'
99
- )">
100
- <slot name="decrement-icon">
101
- <HugeiconsIcon :icon="MinusSignIcon" class="size-4" />
102
- </slot>
103
- </NumberFieldDecrement>
104
-
105
- <!-- Value viewport (clips the sliding digits) -->
106
- <div ref="viewportRef" class="relative flex h-full min-w-0 flex-1 items-center overflow-hidden">
107
- <NumberFieldInput data-slot="number-field-input" :placeholder="props.placeholder" :class="cn(
108
- 'h-full w-full min-w-0 bg-transparent text-center text-xs font-semibold tabular-nums text-foreground outline-none sm:text-sm',
109
- 'selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground placeholder:opacity-60 disabled:cursor-not-allowed',
110
- props.inputClass
111
- )" />
112
-
113
- <!-- Outgoing value ghost (decorative) -->
114
- <span v-if="ghostText" ref="ghostRef" aria-hidden="true" :class="cn(
115
- 'pointer-events-none absolute inset-0 flex items-center justify-center text-xs font-semibold tabular-nums text-foreground sm:text-sm',
116
- props.inputClass
117
- )">{{ ghostText }}</span>
118
- </div>
119
-
120
- <!-- Increment button -->
121
- <NumberFieldIncrement data-slot="number-field-increment" :aria-label="resolvedIncrementLabel" :class="cn(
122
- 'inline-flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none',
123
- '[transition:scale_320ms_var(--ease-spring),background-color_150ms_var(--ease-snappy),color_150ms_var(--ease-snappy),opacity_150ms_var(--ease-snappy)]',
124
- 'hover:bg-accent hover:text-foreground active:scale-[0.84] data-pressed:scale-[0.84] focus-visible:ring-[3px] focus-visible:ring-ring/45',
125
- 'disabled:pointer-events-none disabled:opacity-35 data-disabled:pointer-events-none data-disabled:opacity-35'
126
- )">
127
- <slot name="increment-icon">
128
- <HugeiconsIcon :icon="PlusSignIcon" class="size-4" />
129
- </slot>
130
- </NumberFieldIncrement>
131
-
132
- <!-- Extra content (e.g. hidden inputs) -->
133
- <slot v-bind="slotProps" />
134
- </NumberFieldRoot>
88
+ <NumberFieldRoot v-slot="slotProps" data-slot="number-field" v-bind="forwarded" :id="fieldControlId" :class="cn(
89
+ 'uv-field flex h-13 w-full items-center gap-1 rounded border border-input bg-secondary px-1.5 text-foreground shadow-elevated-sm',
90
+ 'data-disabled:cursor-not-allowed data-disabled:opacity-60 aria-invalid:animate-uv-shake',
91
+ props.class
92
+ )" @update:model-value="animateChange">
93
+ <!-- Decrement button -->
94
+ <NumberFieldDecrement data-slot="number-field-decrement" :aria-label="resolvedDecrementLabel" :class="cn(
95
+ 'inline-flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none',
96
+ '[transition:scale_320ms_var(--ease-spring),background-color_150ms_var(--ease-snappy),color_150ms_var(--ease-snappy),opacity_150ms_var(--ease-snappy)]',
97
+ 'hover:bg-accent hover:text-foreground active:scale-[0.84] data-pressed:scale-[0.84] focus-visible:ring-[3px] focus-visible:ring-ring/45',
98
+ 'disabled:pointer-events-none disabled:opacity-35 data-disabled:pointer-events-none data-disabled:opacity-35'
99
+ )">
100
+ <slot name="decrement-icon">
101
+ <HugeiconsIcon :icon="MinusSignIcon" class="size-4" />
102
+ </slot>
103
+ </NumberFieldDecrement>
104
+
105
+ <!-- Value viewport (clips the sliding digits) -->
106
+ <div ref="viewportRef" class="relative flex h-full min-w-0 flex-1 items-center overflow-hidden">
107
+ <NumberFieldInput data-slot="number-field-input" :placeholder="props.placeholder" :class="cn(
108
+ 'h-full w-full min-w-0 bg-transparent text-center text-xs font-semibold tabular-nums text-foreground outline-none sm:text-sm',
109
+ 'selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground placeholder:opacity-60 disabled:cursor-not-allowed',
110
+ props.inputClass
111
+ )" />
112
+
113
+ <!-- Outgoing value ghost (decorative) -->
114
+ <span v-if="ghostText" ref="ghostRef" aria-hidden="true" :class="cn(
115
+ 'pointer-events-none absolute inset-0 flex items-center justify-center text-xs font-semibold tabular-nums text-foreground sm:text-sm',
116
+ props.inputClass
117
+ )">{{ ghostText }}</span>
118
+ </div>
119
+
120
+ <!-- Increment button -->
121
+ <NumberFieldIncrement data-slot="number-field-increment" :aria-label="resolvedIncrementLabel" :class="cn(
122
+ 'inline-flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none',
123
+ '[transition:scale_320ms_var(--ease-spring),background-color_150ms_var(--ease-snappy),color_150ms_var(--ease-snappy),opacity_150ms_var(--ease-snappy)]',
124
+ 'hover:bg-accent hover:text-foreground active:scale-[0.84] data-pressed:scale-[0.84] focus-visible:ring-[3px] focus-visible:ring-ring/45',
125
+ 'disabled:pointer-events-none disabled:opacity-35 data-disabled:pointer-events-none data-disabled:opacity-35'
126
+ )">
127
+ <slot name="increment-icon">
128
+ <HugeiconsIcon :icon="PlusSignIcon" class="size-4" />
129
+ </slot>
130
+ </NumberFieldIncrement>
131
+
132
+ <!-- Extra content (e.g. hidden inputs) -->
133
+ <slot v-bind="slotProps" />
134
+ </NumberFieldRoot>
135
135
  </template>
@@ -8,7 +8,7 @@ import { cn } from '../../../lib/utils';
8
8
 
9
9
  // Props
10
10
  const props = defineProps<PaginationRootProps & {
11
- class?: HTMLAttributes['class'];
11
+ class?: HTMLAttributes['class'];
12
12
  }>();
13
13
 
14
14
  // Emits
@@ -21,7 +21,7 @@ const { t } = useI18n();
21
21
  </script>
22
22
 
23
23
  <template>
24
- <PaginationRoot v-slot="slotProps" data-slot="pagination" :aria-label="t('uiVintage.pagination.label')" v-bind="forwarded" :class="cn('mx-auto flex w-full justify-center', props.class)">
25
- <slot v-bind="slotProps" />
26
- </PaginationRoot>
24
+ <PaginationRoot v-slot="slotProps" data-slot="pagination" :aria-label="t('uiVintage.pagination.label')" v-bind="forwarded" :class="cn('mx-auto flex w-full justify-center', props.class)">
25
+ <slot v-bind="slotProps" />
26
+ </PaginationRoot>
27
27
  </template>
@@ -7,14 +7,14 @@ import { cn } from '../../../lib/utils';
7
7
 
8
8
  // Props
9
9
  const props = defineProps<PaginationListProps & {
10
- class?: HTMLAttributes['class'];
10
+ class?: HTMLAttributes['class'];
11
11
  }>();
12
12
 
13
13
  const delegatedProps = reactiveOmit(props, 'class');
14
14
  </script>
15
15
 
16
16
  <template>
17
- <PaginationList v-slot="slotProps" data-slot="pagination-content" v-bind="delegatedProps" :class="cn('flex flex-row flex-wrap items-center justify-center gap-1.5', props.class)">
18
- <slot v-bind="slotProps" />
19
- </PaginationList>
17
+ <PaginationList v-slot="slotProps" data-slot="pagination-content" v-bind="delegatedProps" :class="cn('flex flex-row flex-wrap items-center justify-center gap-1.5', props.class)">
18
+ <slot v-bind="slotProps" />
19
+ </PaginationList>
20
20
  </template>
@@ -10,7 +10,7 @@ import { cn } from '../../../lib/utils';
10
10
 
11
11
  // Props
12
12
  const props = defineProps<PaginationEllipsisProps & {
13
- class?: HTMLAttributes['class'];
13
+ class?: HTMLAttributes['class'];
14
14
  }>();
15
15
 
16
16
  const delegatedProps = reactiveOmit(props, 'class');
@@ -19,13 +19,13 @@ const { t } = useI18n();
19
19
  </script>
20
20
 
21
21
  <template>
22
- <PaginationEllipsis data-slot="pagination-ellipsis" v-bind="delegatedProps" :class="cn('flex size-10 items-center justify-center text-muted-foreground', props.class)">
23
- <!-- Default slot content -->
24
- <slot>
25
- <HugeiconsIcon :icon="MoreHorizontalIcon" class="size-4" aria-hidden="true" />
26
- </slot>
22
+ <PaginationEllipsis data-slot="pagination-ellipsis" v-bind="delegatedProps" :class="cn('flex size-10 items-center justify-center text-muted-foreground', props.class)">
23
+ <!-- Default slot content -->
24
+ <slot>
25
+ <HugeiconsIcon :icon="MoreHorizontalIcon" class="size-4" aria-hidden="true" />
26
+ </slot>
27
27
 
28
- <!-- Screen reader text for accessibility -->
29
- <span class="sr-only">{{ t('uiVintage.pagination.more') }}</span>
30
- </PaginationEllipsis>
28
+ <!-- Screen reader text for accessibility -->
29
+ <span class="sr-only">{{ t('uiVintage.pagination.more') }}</span>
30
+ </PaginationEllipsis>
31
31
  </template>
@@ -12,10 +12,10 @@ import { buttonVariants } from '../button';
12
12
 
13
13
  // Props
14
14
  const props = withDefaults(defineProps<PaginationFirstProps & {
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
- <PaginationFirst data-slot="pagination-first" :aria-label="t('uiVintage.pagination.first')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
- <slot>
29
- <HugeiconsIcon :icon="ArrowLeftDoubleIcon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:-translate-x-0.5" aria-hidden="true" />
30
- </slot>
31
- </PaginationFirst>
27
+ <PaginationFirst data-slot="pagination-first" :aria-label="t('uiVintage.pagination.first')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
+ <slot>
29
+ <HugeiconsIcon :icon="ArrowLeftDoubleIcon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:-translate-x-0.5" aria-hidden="true" />
30
+ </slot>
31
+ </PaginationFirst>
32
32
  </template>
@@ -10,10 +10,10 @@ import { buttonVariants } from '../button';
10
10
 
11
11
  // Props
12
12
  const props = withDefaults(defineProps<PaginationListItemProps & {
13
- size?: ButtonVariants['size'];
14
- class?: HTMLAttributes['class'];
13
+ size?: ButtonVariants['size'];
14
+ class?: HTMLAttributes['class'];
15
15
  }>(), {
16
- size: 'icon-sm',
16
+ size: 'icon-sm',
17
17
  });
18
18
 
19
19
  const delegatedProps = reactiveOmit(props, 'class', 'size');
@@ -22,20 +22,20 @@ const { t } = useI18n();
22
22
  </script>
23
23
 
24
24
  <template>
25
- <PaginationListItem data-slot="pagination-item" :aria-label="t('uiVintage.pagination.page', { page: props.value })" v-bind="delegatedProps" :class="cn(
26
- buttonVariants({ variant: 'secondary', size: props.size }),
27
- 'tabular-nums',
28
- 'data-selected:border-primary data-selected:bg-primary data-selected:text-primary-foreground data-selected:hover:border-primary data-selected:hover:bg-primary-hover',
29
- 'data-selected:animate-[uv-pagination-pop_380ms_var(--ease-bounce)]',
30
- props.class
31
- )">
32
- <slot>{{ props.value }}</slot>
33
- </PaginationListItem>
25
+ <PaginationListItem data-slot="pagination-item" :aria-label="t('uiVintage.pagination.page', { page: props.value })" v-bind="delegatedProps" :class="cn(
26
+ buttonVariants({ variant: 'secondary', size: props.size }),
27
+ 'tabular-nums',
28
+ 'data-selected:border-primary data-selected:bg-primary data-selected:text-primary-foreground data-selected:hover:border-primary data-selected:hover:bg-primary-hover',
29
+ 'data-selected:animate-[uv-pagination-pop_380ms_var(--ease-bounce)]',
30
+ props.class
31
+ )">
32
+ <slot>{{ props.value }}</slot>
33
+ </PaginationListItem>
34
34
  </template>
35
35
 
36
36
  <style>
37
37
  @keyframes uv-pagination-pop {
38
- 0% { transform: scale(0.82); }
39
- 100% { transform: scale(1); }
38
+ 0% { transform: scale(0.82); }
39
+ 100% { transform: scale(1); }
40
40
  }
41
41
  </style>
@@ -12,10 +12,10 @@ import { buttonVariants } from '../button';
12
12
 
13
13
  // Props
14
14
  const props = withDefaults(defineProps<PaginationLastProps & {
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
- <PaginationLast data-slot="pagination-last" :aria-label="t('uiVintage.pagination.last')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
- <slot>
29
- <HugeiconsIcon :icon="ArrowRightDoubleIcon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:translate-x-0.5" aria-hidden="true" />
30
- </slot>
31
- </PaginationLast>
27
+ <PaginationLast data-slot="pagination-last" :aria-label="t('uiVintage.pagination.last')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
+ <slot>
29
+ <HugeiconsIcon :icon="ArrowRightDoubleIcon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:translate-x-0.5" aria-hidden="true" />
30
+ </slot>
31
+ </PaginationLast>
32
32
  </template>
@@ -12,10 +12,10 @@ import { buttonVariants } from '../button';
12
12
 
13
13
  // Props
14
14
  const props = withDefaults(defineProps<PaginationNextProps & {
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
- <PaginationNext data-slot="pagination-next" :aria-label="t('uiVintage.pagination.next')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
- <slot>
29
- <HugeiconsIcon :icon="ArrowRight01Icon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:translate-x-0.5" aria-hidden="true" />
30
- </slot>
31
- </PaginationNext>
27
+ <PaginationNext data-slot="pagination-next" :aria-label="t('uiVintage.pagination.next')" v-bind="delegatedProps" :class="cn(buttonVariants({ variant: 'secondary', size: props.size }), 'group/pagination-nav', props.class)">
28
+ <slot>
29
+ <HugeiconsIcon :icon="ArrowRight01Icon" class="size-4 transition-transform duration-220 ease-spring group-hover/pagination-nav:translate-x-0.5" aria-hidden="true" />
30
+ </slot>
31
+ </PaginationNext>
32
32
  </template>