@brumaombra/ui-vintage 0.9.0 → 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 (337) hide show
  1. package/AGENTS.md +1 -1
  2. package/COMPONENTS.md +1 -1
  3. package/README.md +3 -3
  4. package/module.mjs +43 -43
  5. package/package.json +175 -175
  6. package/src/components/background-grid/BackgroundGrid.vue +4 -4
  7. package/src/components/blog/AllPostsSection.vue +33 -33
  8. package/src/components/blog/BlogContentRenderer.vue +111 -111
  9. package/src/components/blog/BlogFAQSection.vue +20 -20
  10. package/src/components/blog/BlogHeaderSection.vue +81 -81
  11. package/src/components/blog/BlogInfoSection.vue +50 -48
  12. package/src/components/blog/BlogPostHeader.vue +135 -135
  13. package/src/components/blog/BlogProgressBar.vue +33 -33
  14. package/src/components/blog/BlogSectionTitle.vue +22 -22
  15. package/src/components/blog/BlogTagsSection.vue +25 -25
  16. package/src/components/blog/CategoriesList.vue +14 -14
  17. package/src/components/blog/CategoriesSection.vue +11 -11
  18. package/src/components/blog/CategoryCard.vue +27 -26
  19. package/src/components/blog/HeaderCarousel.vue +99 -98
  20. package/src/components/blog/PostCard.vue +34 -34
  21. package/src/components/blog/PostsList.vue +15 -15
  22. package/src/components/blog/SocialShareSidebar.vue +92 -85
  23. package/src/components/blog/TableOfContents.vue +310 -308
  24. package/src/components/busy-indicator/BusyIndicator.vue +7 -7
  25. package/src/components/busy-indicator/busy-indicator-state.ts +56 -56
  26. package/src/components/card-grid/CardGrid.vue +35 -35
  27. package/src/components/chip/Chip.vue +16 -16
  28. package/src/components/confirm-dialog/ConfirmDialog.vue +51 -51
  29. package/src/components/confirm-dialog/confirm-dialog-state.ts +131 -131
  30. package/src/components/content/BlogList.vue +32 -31
  31. package/src/components/content/BlogTable.vue +36 -36
  32. package/src/components/content/CodeBlock.vue +139 -137
  33. package/src/components/content/Flow.vue +60 -60
  34. package/src/components/content/ProseHr.vue +16 -16
  35. package/src/components/content/ProsePre.vue +12 -12
  36. package/src/components/content/Terminal.vue +62 -60
  37. package/src/components/cookie-consent/CookieConsent.vue +36 -36
  38. package/src/components/cookie-consent/useCookieConsent.ts +37 -37
  39. package/src/components/dashboard-shell/DashboardShell.vue +171 -171
  40. package/src/components/data-list/DataList.vue +6 -6
  41. package/src/components/data-list/DataListItem.vue +4 -4
  42. package/src/components/data-list/DataListLabel.vue +4 -4
  43. package/src/components/data-list/DataListText.vue +4 -4
  44. package/src/components/data-list/DataListValue.vue +4 -4
  45. package/src/components/empty-state-card/EmptyStateCard.vue +41 -41
  46. package/src/components/error-page/ErrorPage.vue +73 -73
  47. package/src/components/info-card/InfoCard.vue +31 -31
  48. package/src/components/landing/landing-content/LandingContent.vue +4 -4
  49. package/src/components/landing/landing-footer/LandingFooter.vue +129 -129
  50. package/src/components/landing/landing-navbar/LandingNavbar.vue +50 -50
  51. package/src/components/landing/landing-shell/LandingShell.vue +36 -36
  52. package/src/components/language-flag/LanguageFlag.vue +25 -25
  53. package/src/components/language-flag/flags/ChineseFlag.vue +8 -8
  54. package/src/components/language-flag/flags/EnglishFlag.vue +7 -7
  55. package/src/components/language-flag/flags/FrenchFlag.vue +5 -5
  56. package/src/components/language-flag/flags/GermanFlag.vue +5 -5
  57. package/src/components/language-flag/flags/ItalianFlag.vue +7 -7
  58. package/src/components/language-flag/flags/JapaneseFlag.vue +4 -4
  59. package/src/components/language-flag/flags/PortugueseFlag.vue +57 -57
  60. package/src/components/language-flag/flags/RussianFlag.vue +5 -5
  61. package/src/components/language-flag/flags/SpanishFlag.vue +4 -4
  62. package/src/components/language-selector/LanguageSelector.vue +77 -77
  63. package/src/components/load-more-button/LoadMoreButton.vue +19 -18
  64. package/src/components/loading-state-card/LoadingStateCard.vue +29 -29
  65. package/src/components/message-dialog/MessageDialog.vue +62 -60
  66. package/src/components/message-dialog/message-dialog-state.ts +105 -105
  67. package/src/components/message-toast/MessageToast.vue +153 -150
  68. package/src/components/message-toast/message-toast-state.ts +146 -146
  69. package/src/components/page-header/PageHeader.vue +34 -34
  70. package/src/components/progress-component/ProgressComponent.vue +33 -33
  71. package/src/components/single-value-card/SingleValueCard.vue +59 -58
  72. package/src/components/slider-form-component/SliderFormComponent.vue +36 -36
  73. package/src/components/stat-strip/StatStrip.vue +22 -22
  74. package/src/components/switch-form-component/SwitchFormComponent.vue +20 -20
  75. package/src/components/text-link/TextLink.vue +14 -14
  76. package/src/components/theme-selector/ThemeSelector.vue +65 -62
  77. package/src/components/theme-selector/theme-transition.ts +63 -63
  78. package/src/components/ui/accordion/Accordion.vue +39 -39
  79. package/src/components/ui/alert/Alert.vue +5 -5
  80. package/src/components/ui/alert/AlertDescription.vue +4 -4
  81. package/src/components/ui/alert/AlertTitle.vue +4 -4
  82. package/src/components/ui/alert/index.ts +2 -2
  83. package/src/components/ui/alert-dialog/AlertDialog.vue +3 -3
  84. package/src/components/ui/alert-dialog/AlertDialogAction.vue +3 -3
  85. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +3 -3
  86. package/src/components/ui/alert-dialog/AlertDialogContent.vue +7 -7
  87. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +3 -3
  88. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +4 -4
  89. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +4 -4
  90. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +3 -3
  91. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -3
  92. package/src/components/ui/animated-number/AnimatedNumber.vue +49 -48
  93. package/src/components/ui/avatar/Avatar.vue +28 -28
  94. package/src/components/ui/avatar/AvatarFallback.vue +6 -6
  95. package/src/components/ui/avatar/AvatarGroup.vue +40 -40
  96. package/src/components/ui/avatar/AvatarImage.vue +3 -3
  97. package/src/components/ui/avatar/index.ts +17 -17
  98. package/src/components/ui/badge/Badge.vue +20 -20
  99. package/src/components/ui/breadcrumb/Breadcrumb.vue +4 -4
  100. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +10 -10
  101. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +4 -4
  102. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +4 -4
  103. package/src/components/ui/breadcrumb/BreadcrumbList.vue +4 -4
  104. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +4 -4
  105. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +4 -4
  106. package/src/components/ui/busy/Busy.vue +33 -33
  107. package/src/components/ui/button/Button.vue +23 -23
  108. package/src/components/ui/button/index.ts +56 -56
  109. package/src/components/ui/calendar/Calendar.vue +138 -138
  110. package/src/components/ui/calendar/CalendarCell.vue +7 -7
  111. package/src/components/ui/calendar/CalendarCellTrigger.vue +18 -18
  112. package/src/components/ui/calendar/CalendarGrid.vue +3 -3
  113. package/src/components/ui/calendar/CalendarGridBody.vue +3 -3
  114. package/src/components/ui/calendar/CalendarGridHead.vue +3 -3
  115. package/src/components/ui/calendar/CalendarGridRow.vue +3 -3
  116. package/src/components/ui/calendar/CalendarHeadCell.vue +7 -7
  117. package/src/components/ui/calendar/CalendarHeader.vue +7 -7
  118. package/src/components/ui/calendar/CalendarHeading.vue +6 -6
  119. package/src/components/ui/calendar/CalendarNextButton.vue +16 -16
  120. package/src/components/ui/calendar/CalendarPrevButton.vue +16 -16
  121. package/src/components/ui/calendar/index.ts +4 -4
  122. package/src/components/ui/card/Card.vue +20 -20
  123. package/src/components/ui/card/CardAction.vue +8 -8
  124. package/src/components/ui/card/CardContent.vue +4 -4
  125. package/src/components/ui/card/CardDescription.vue +12 -12
  126. package/src/components/ui/card/CardFooter.vue +4 -4
  127. package/src/components/ui/card/CardHeader.vue +8 -8
  128. package/src/components/ui/card/CardText.vue +8 -8
  129. package/src/components/ui/card/CardTitle.vue +8 -8
  130. package/src/components/ui/checkbox/Checkbox.vue +27 -27
  131. package/src/components/ui/collapsible/Collapsible.vue +3 -3
  132. package/src/components/ui/collapsible/CollapsibleContent.vue +3 -3
  133. package/src/components/ui/collapsible/CollapsibleTrigger.vue +3 -3
  134. package/src/components/ui/combobox/Combobox.vue +4 -4
  135. package/src/components/ui/combobox/ComboboxAnchor.vue +16 -16
  136. package/src/components/ui/combobox/ComboboxEmpty.vue +3 -3
  137. package/src/components/ui/combobox/ComboboxGroup.vue +9 -9
  138. package/src/components/ui/combobox/ComboboxInput.vue +6 -6
  139. package/src/components/ui/combobox/ComboboxItem.vue +18 -18
  140. package/src/components/ui/combobox/ComboboxList.vue +19 -19
  141. package/src/components/ui/combobox/ComboboxSelect.vue +79 -78
  142. package/src/components/ui/combobox/ComboboxSeparator.vue +1 -1
  143. package/src/components/ui/combobox/ComboboxTrigger.vue +11 -11
  144. package/src/components/ui/combobox/types.ts +5 -5
  145. package/src/components/ui/command/Command.vue +48 -48
  146. package/src/components/ui/command/CommandDialog.vue +14 -14
  147. package/src/components/ui/command/CommandEmpty.vue +4 -4
  148. package/src/components/ui/command/CommandGroup.vue +23 -23
  149. package/src/components/ui/command/CommandInput.vue +10 -10
  150. package/src/components/ui/command/CommandItem.vue +40 -40
  151. package/src/components/ui/command/CommandList.vue +9 -9
  152. package/src/components/ui/command/CommandSeparator.vue +3 -3
  153. package/src/components/ui/command/CommandShortcut.vue +8 -8
  154. package/src/components/ui/command/index.ts +11 -11
  155. package/src/components/ui/data-table/DataTable.vue +147 -146
  156. package/src/components/ui/data-table/index.ts +11 -11
  157. package/src/components/ui/date-picker/DatePicker.vue +32 -32
  158. package/src/components/ui/date-time-picker/DateTimePicker.vue +97 -97
  159. package/src/components/ui/dialog/Dialog.vue +3 -3
  160. package/src/components/ui/dialog/DialogClose.vue +3 -3
  161. package/src/components/ui/dialog/DialogContent.vue +22 -22
  162. package/src/components/ui/dialog/DialogDescription.vue +7 -7
  163. package/src/components/ui/dialog/DialogFooter.vue +8 -8
  164. package/src/components/ui/dialog/DialogHeader.vue +4 -4
  165. package/src/components/ui/dialog/DialogOverlay.vue +7 -7
  166. package/src/components/ui/dialog/DialogScrollContent.vue +33 -33
  167. package/src/components/ui/dialog/DialogTitle.vue +3 -3
  168. package/src/components/ui/dialog/DialogTrigger.vue +3 -3
  169. package/src/components/ui/dropdown-menu/DropdownMenu.vue +3 -3
  170. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +12 -12
  171. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +15 -15
  172. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +3 -3
  173. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +12 -12
  174. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +9 -9
  175. package/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +3 -3
  176. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +3 -3
  177. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +11 -11
  178. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -1
  179. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +4 -4
  180. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -3
  181. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +15 -15
  182. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +16 -16
  183. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +3 -3
  184. package/src/components/ui/dropdown-menu/classes.ts +16 -16
  185. package/src/components/ui/field/Field.vue +5 -5
  186. package/src/components/ui/field/FieldContent.vue +8 -8
  187. package/src/components/ui/field/FieldDescription.vue +10 -10
  188. package/src/components/ui/field/FieldError.vue +39 -39
  189. package/src/components/ui/field/FieldGroup.vue +8 -8
  190. package/src/components/ui/field/FieldLabel.vue +10 -10
  191. package/src/components/ui/field/FieldLegend.vue +11 -11
  192. package/src/components/ui/field/FieldSeparator.vue +11 -11
  193. package/src/components/ui/field/FieldSet.vue +9 -9
  194. package/src/components/ui/field/FieldTitle.vue +8 -8
  195. package/src/components/ui/field/field-context.ts +36 -36
  196. package/src/components/ui/field/index.ts +22 -22
  197. package/src/components/ui/file-dropzone/FileDropzone.vue +163 -154
  198. package/src/components/ui/file-dropzone/index.ts +19 -19
  199. package/src/components/ui/hover-card/HoverCard.vue +5 -5
  200. package/src/components/ui/hover-card/HoverCardContent.vue +13 -13
  201. package/src/components/ui/hover-card/HoverCardTrigger.vue +3 -3
  202. package/src/components/ui/input/Input.vue +13 -13
  203. package/src/components/ui/kbd/Kbd.vue +10 -10
  204. package/src/components/ui/kbd/KbdGroup.vue +49 -49
  205. package/src/components/ui/label/Label.vue +7 -7
  206. package/src/components/ui/native-select/NativeSelect.vue +17 -17
  207. package/src/components/ui/native-select/NativeSelectOptGroup.vue +3 -3
  208. package/src/components/ui/native-select/NativeSelectOption.vue +3 -3
  209. package/src/components/ui/number-field/NumberField.vue +90 -89
  210. package/src/components/ui/pagination/Pagination.vue +4 -4
  211. package/src/components/ui/pagination/PaginationContent.vue +4 -4
  212. package/src/components/ui/pagination/PaginationEllipsis.vue +10 -10
  213. package/src/components/ui/pagination/PaginationFirst.vue +9 -9
  214. package/src/components/ui/pagination/PaginationItem.vue +14 -14
  215. package/src/components/ui/pagination/PaginationLast.vue +9 -9
  216. package/src/components/ui/pagination/PaginationNext.vue +9 -9
  217. package/src/components/ui/pagination/PaginationPrevious.vue +9 -9
  218. package/src/components/ui/pagination/SimplePagination.vue +25 -25
  219. package/src/components/ui/pin-input/PinInput.vue +20 -20
  220. package/src/components/ui/pin-input/PinInputInput.vue +17 -17
  221. package/src/components/ui/pin-input/context.ts +1 -1
  222. package/src/components/ui/popover/Popover.vue +3 -3
  223. package/src/components/ui/popover/PopoverAnchor.vue +3 -3
  224. package/src/components/ui/popover/PopoverContent.vue +12 -12
  225. package/src/components/ui/popover/PopoverTrigger.vue +3 -3
  226. package/src/components/ui/progress/Progress.vue +16 -16
  227. package/src/components/ui/radio-group/RadioGroup.vue +7 -7
  228. package/src/components/ui/radio-group/RadioGroupCard.vue +39 -39
  229. package/src/components/ui/radio-group/RadioGroupItem.vue +20 -20
  230. package/src/components/ui/scroll-area/ScrollArea.vue +14 -14
  231. package/src/components/ui/scroll-area/ScrollBar.vue +12 -12
  232. package/src/components/ui/select/Select.vue +3 -3
  233. package/src/components/ui/select/SelectContent.vue +25 -25
  234. package/src/components/ui/select/SelectGroup.vue +3 -3
  235. package/src/components/ui/select/SelectItem.vue +25 -25
  236. package/src/components/ui/select/SelectItemContent.vue +32 -32
  237. package/src/components/ui/select/SelectItemText.vue +3 -3
  238. package/src/components/ui/select/SelectLabel.vue +3 -3
  239. package/src/components/ui/select/SelectScrollDownButton.vue +10 -10
  240. package/src/components/ui/select/SelectScrollUpButton.vue +10 -10
  241. package/src/components/ui/select/SelectSeparator.vue +2 -2
  242. package/src/components/ui/select/SelectTrigger.vue +15 -15
  243. package/src/components/ui/select/SelectValue.vue +3 -3
  244. package/src/components/ui/select/SelectValueContent.vue +39 -39
  245. package/src/components/ui/separator/Separator.vue +7 -7
  246. package/src/components/ui/sheet/Sheet.vue +3 -3
  247. package/src/components/ui/sheet/SheetClose.vue +3 -3
  248. package/src/components/ui/sheet/SheetContent.vue +22 -22
  249. package/src/components/ui/sheet/SheetDescription.vue +3 -3
  250. package/src/components/ui/sheet/SheetFooter.vue +3 -3
  251. package/src/components/ui/sheet/SheetHeader.vue +3 -3
  252. package/src/components/ui/sheet/SheetOverlay.vue +7 -7
  253. package/src/components/ui/sheet/SheetTitle.vue +3 -3
  254. package/src/components/ui/sheet/SheetTrigger.vue +3 -3
  255. package/src/components/ui/sidebar/Sidebar.vue +57 -57
  256. package/src/components/ui/sidebar/SidebarContent.vue +8 -8
  257. package/src/components/ui/sidebar/SidebarFooter.vue +8 -8
  258. package/src/components/ui/sidebar/SidebarGroup.vue +8 -8
  259. package/src/components/ui/sidebar/SidebarGroupAction.vue +9 -9
  260. package/src/components/ui/sidebar/SidebarGroupContent.vue +4 -4
  261. package/src/components/ui/sidebar/SidebarGroupLabel.vue +8 -8
  262. package/src/components/ui/sidebar/SidebarHeader.vue +8 -8
  263. package/src/components/ui/sidebar/SidebarInput.vue +8 -8
  264. package/src/components/ui/sidebar/SidebarInset.vue +9 -9
  265. package/src/components/ui/sidebar/SidebarMenu.vue +4 -4
  266. package/src/components/ui/sidebar/SidebarMenuAction.vue +18 -18
  267. package/src/components/ui/sidebar/SidebarMenuBadge.vue +14 -14
  268. package/src/components/ui/sidebar/SidebarMenuButton.vue +21 -21
  269. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +10 -10
  270. package/src/components/ui/sidebar/SidebarMenuItem.vue +4 -4
  271. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +10 -10
  272. package/src/components/ui/sidebar/SidebarMenuSub.vue +9 -9
  273. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +17 -17
  274. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +4 -4
  275. package/src/components/ui/sidebar/SidebarProvider.vue +46 -46
  276. package/src/components/ui/sidebar/SidebarRail.vue +13 -13
  277. package/src/components/ui/sidebar/SidebarSeparator.vue +4 -4
  278. package/src/components/ui/sidebar/SidebarTrigger.vue +6 -6
  279. package/src/components/ui/sidebar/index.ts +29 -29
  280. package/src/components/ui/sidebar/utils.ts +7 -7
  281. package/src/components/ui/skeleton/Skeleton.vue +6 -6
  282. package/src/components/ui/slider/Slider.vue +14 -14
  283. package/src/components/ui/spinner/Spinner.vue +21 -21
  284. package/src/components/ui/stepper/SimpleStepper.vue +27 -27
  285. package/src/components/ui/stepper/Stepper.vue +6 -6
  286. package/src/components/ui/stepper/StepperDescription.vue +5 -5
  287. package/src/components/ui/stepper/StepperIndicator.vue +18 -18
  288. package/src/components/ui/stepper/StepperItem.vue +4 -4
  289. package/src/components/ui/stepper/StepperSeparator.vue +7 -7
  290. package/src/components/ui/stepper/StepperTitle.vue +5 -5
  291. package/src/components/ui/stepper/StepperTrigger.vue +4 -4
  292. package/src/components/ui/stepper/index.ts +3 -3
  293. package/src/components/ui/switch/Switch.vue +15 -15
  294. package/src/components/ui/table/Table.vue +6 -6
  295. package/src/components/ui/table/TableBody.vue +4 -4
  296. package/src/components/ui/table/TableCaption.vue +4 -4
  297. package/src/components/ui/table/TableCell.vue +8 -8
  298. package/src/components/ui/table/TableEmpty.vue +14 -14
  299. package/src/components/ui/table/TableFooter.vue +8 -8
  300. package/src/components/ui/table/TableHead.vue +8 -8
  301. package/src/components/ui/table/TableHeader.vue +4 -4
  302. package/src/components/ui/table/TableRow.vue +8 -8
  303. package/src/components/ui/tabs/Tabs.vue +4 -4
  304. package/src/components/ui/tabs/TabsContent.vue +4 -4
  305. package/src/components/ui/tabs/TabsList.vue +15 -15
  306. package/src/components/ui/tabs/TabsTrigger.vue +10 -10
  307. package/src/components/ui/tags-input/TagsInput.vue +17 -17
  308. package/src/components/ui/tags-input/TagsInputInput.vue +6 -6
  309. package/src/components/ui/tags-input/TagsInputItem.vue +15 -15
  310. package/src/components/ui/tags-input/TagsInputItemDelete.vue +13 -13
  311. package/src/components/ui/tags-input/TagsInputItemText.vue +4 -4
  312. package/src/components/ui/textarea/Textarea.vue +12 -12
  313. package/src/components/ui/time-picker/TimePicker.vue +25 -25
  314. package/src/components/ui/toggle-group/Toggle.vue +10 -10
  315. package/src/components/ui/toggle-group/ToggleGroup.vue +38 -38
  316. package/src/components/ui/toggle-group/ToggleGroupItem.vue +9 -9
  317. package/src/components/ui/toggle-group/index.ts +46 -46
  318. package/src/components/ui/tooltip/Tooltip.vue +3 -3
  319. package/src/components/ui/tooltip/TooltipContent.vue +13 -13
  320. package/src/components/ui/tooltip/TooltipProvider.vue +4 -4
  321. package/src/components/ui/tooltip/TooltipTrigger.vue +3 -3
  322. package/src/i18n/de.json +185 -185
  323. package/src/i18n/en.json +185 -185
  324. package/src/i18n/es.json +185 -185
  325. package/src/i18n/fr.json +185 -185
  326. package/src/i18n/it.json +185 -185
  327. package/src/i18n/ja.json +185 -185
  328. package/src/i18n/pt.json +185 -185
  329. package/src/i18n/ru.json +185 -185
  330. package/src/i18n/zh.json +185 -185
  331. package/src/lib/color-tokens.ts +24 -24
  332. package/src/lib/i18n.ts +65 -65
  333. package/src/lib/utils.ts +33 -33
  334. package/src/nuxt-components.d.ts +2 -2
  335. package/src/runtime/ui-vintage-i18n-plugin.ts +49 -49
  336. package/src/shims-vue.d.ts +3 -3
  337. package/src/styles.css +377 -377
@@ -3,7 +3,8 @@ import type { NumberFieldRootEmits, NumberFieldRootProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { computed, nextTick, ref, watch } from 'vue';
5
5
  import { reactiveOmit } from '@vueuse/core';
6
- import { MinusSignIcon, PlusSignIcon } from '@hugeicons/core-free-icons';
6
+ import MinusSignIcon from '@hugeicons/core-free-icons/MinusSignIcon';
7
+ import PlusSignIcon from '@hugeicons/core-free-icons/PlusSignIcon';
7
8
  import { HugeiconsIcon } from '@hugeicons/vue';
8
9
  import { NumberFieldDecrement, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, useForwardPropsEmits } from 'reka-ui';
9
10
  import { useI18n } from 'vue-i18n';
@@ -12,11 +13,11 @@ import { useFieldControlId } from '../field/field-context';
12
13
 
13
14
  // Props
14
15
  const props = defineProps<NumberFieldRootProps & {
15
- placeholder?: string;
16
- decrementLabel?: string;
17
- incrementLabel?: string;
18
- class?: HTMLAttributes['class'];
19
- inputClass?: HTMLAttributes['class'];
16
+ placeholder?: string;
17
+ decrementLabel?: string;
18
+ incrementLabel?: string;
19
+ class?: HTMLAttributes['class'];
20
+ inputClass?: HTMLAttributes['class'];
20
21
  }>();
21
22
 
22
23
  // Emits
@@ -37,46 +38,46 @@ let ghostAnimation: Animation | null = null;
37
38
 
38
39
  // Keep the reference value in sync with external model updates
39
40
  watch(() => props.modelValue, (value) => {
40
- lastValue.value = value;
41
+ lastValue.value = value;
41
42
  });
42
43
 
43
44
  // Slide the new digits in (and the old ones out) in the direction of the change
44
45
  const animateChange = async (value: number) => {
45
- const previous = lastValue.value;
46
- lastValue.value = value;
47
-
48
- const input = viewportRef.value?.querySelector('input');
49
- if (!input || typeof window === 'undefined' || previous === null || previous === undefined || Number.isNaN(previous) || Number.isNaN(value)) return;
50
- if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
51
-
52
- // The DOM still shows the previous text at this point
53
- const previousText = input.value;
54
- const direction = value > previous ? 1 : -1;
55
- ghostAnimation?.cancel();
56
- ghostText.value = previousText;
57
- await nextTick();
58
-
59
- // Skip when the text did not visibly change (e.g. a typed value committed on blur)
60
- if (input.value === previousText) {
61
- ghostText.value = '';
62
- return;
63
- }
64
-
65
- const options: KeyframeAnimationOptions = { duration: 320, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' };
66
- input.animate([
67
- { transform: `translateY(${direction * 60}%)`, opacity: 0, filter: 'blur(2px)' },
68
- { transform: 'translateY(0)', opacity: 1, filter: 'blur(0)' }
69
- ], options);
70
-
71
- if (ghostRef.value) {
72
- ghostAnimation = ghostRef.value.animate([
73
- { transform: 'translateY(0)', opacity: 1, filter: 'blur(0)' },
74
- { transform: `translateY(${direction * -60}%)`, opacity: 0, filter: 'blur(2px)' }
75
- ], { ...options, duration: 220, fill: 'forwards' });
76
- ghostAnimation.onfinish = () => {
77
- ghostText.value = '';
78
- };
79
- }
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
+ }
80
81
  };
81
82
 
82
83
  // Let a surrounding Field label point to this control
@@ -84,51 +85,51 @@ const fieldControlId = useFieldControlId(() => props.id);
84
85
  </script>
85
86
 
86
87
  <template>
87
- <NumberFieldRoot v-slot="slotProps" data-slot="number-field" v-bind="forwarded" :id="fieldControlId" :class="cn(
88
- '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',
89
- 'data-disabled:cursor-not-allowed data-disabled:opacity-60 aria-invalid:animate-uv-shake',
90
- props.class
91
- )" @update:model-value="animateChange">
92
- <!-- Decrement button -->
93
- <NumberFieldDecrement data-slot="number-field-decrement" :aria-label="resolvedDecrementLabel" :class="cn(
94
- 'inline-flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none',
95
- '[transition:scale_320ms_var(--ease-spring),background-color_150ms_var(--ease-snappy),color_150ms_var(--ease-snappy),opacity_150ms_var(--ease-snappy)]',
96
- 'hover:bg-accent hover:text-foreground active:scale-[0.84] data-pressed:scale-[0.84] focus-visible:ring-[3px] focus-visible:ring-ring/45',
97
- 'disabled:pointer-events-none disabled:opacity-35 data-disabled:pointer-events-none data-disabled:opacity-35'
98
- )">
99
- <slot name="decrement-icon">
100
- <HugeiconsIcon :icon="MinusSignIcon" class="size-4" />
101
- </slot>
102
- </NumberFieldDecrement>
103
-
104
- <!-- Value viewport (clips the sliding digits) -->
105
- <div ref="viewportRef" class="relative flex h-full min-w-0 flex-1 items-center overflow-hidden">
106
- <NumberFieldInput data-slot="number-field-input" :placeholder="props.placeholder" :class="cn(
107
- 'h-full w-full min-w-0 bg-transparent text-center text-xs font-semibold tabular-nums text-foreground outline-none sm:text-sm',
108
- 'selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground placeholder:opacity-60 disabled:cursor-not-allowed',
109
- props.inputClass
110
- )" />
111
-
112
- <!-- Outgoing value ghost (decorative) -->
113
- <span v-if="ghostText" ref="ghostRef" aria-hidden="true" :class="cn(
114
- 'pointer-events-none absolute inset-0 flex items-center justify-center text-xs font-semibold tabular-nums text-foreground sm:text-sm',
115
- props.inputClass
116
- )">{{ ghostText }}</span>
117
- </div>
118
-
119
- <!-- Increment button -->
120
- <NumberFieldIncrement data-slot="number-field-increment" :aria-label="resolvedIncrementLabel" :class="cn(
121
- 'inline-flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none',
122
- '[transition:scale_320ms_var(--ease-spring),background-color_150ms_var(--ease-snappy),color_150ms_var(--ease-snappy),opacity_150ms_var(--ease-snappy)]',
123
- 'hover:bg-accent hover:text-foreground active:scale-[0.84] data-pressed:scale-[0.84] focus-visible:ring-[3px] focus-visible:ring-ring/45',
124
- 'disabled:pointer-events-none disabled:opacity-35 data-disabled:pointer-events-none data-disabled:opacity-35'
125
- )">
126
- <slot name="increment-icon">
127
- <HugeiconsIcon :icon="PlusSignIcon" class="size-4" />
128
- </slot>
129
- </NumberFieldIncrement>
130
-
131
- <!-- Extra content (e.g. hidden inputs) -->
132
- <slot v-bind="slotProps" />
133
- </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>
134
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>
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { PaginationEllipsisProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
- import { MoreHorizontalIcon } from '@hugeicons/core-free-icons';
4
+ import MoreHorizontalIcon from '@hugeicons/core-free-icons/MoreHorizontalIcon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { reactiveOmit } from '@vueuse/core';
7
7
  import { PaginationEllipsis } from 'reka-ui';
@@ -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>
@@ -2,7 +2,7 @@
2
2
  import type { PaginationFirstProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowLeftDoubleIcon } from '@hugeicons/core-free-icons';
5
+ import ArrowLeftDoubleIcon from '@hugeicons/core-free-icons/ArrowLeftDoubleIcon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationFirst } from 'reka-ui';
@@ -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>
@@ -2,7 +2,7 @@
2
2
  import type { PaginationLastProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowRightDoubleIcon } from '@hugeicons/core-free-icons';
5
+ import ArrowRightDoubleIcon from '@hugeicons/core-free-icons/ArrowRightDoubleIcon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationLast } from 'reka-ui';
@@ -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>
@@ -2,7 +2,7 @@
2
2
  import type { PaginationNextProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowRight01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationNext } from 'reka-ui';
@@ -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>
@@ -2,7 +2,7 @@
2
2
  import type { PaginationPrevProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowLeft01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowLeft01Icon from '@hugeicons/core-free-icons/ArrowLeft01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationPrev } from 'reka-ui';
@@ -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>