@brumaombra/ui-vintage 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/COMPONENTS.md +102 -2
  2. package/module.mjs +43 -43
  3. package/package.json +175 -175
  4. package/src/components/background-grid/BackgroundGrid.vue +4 -4
  5. package/src/components/blog/AllPostsSection.vue +33 -33
  6. package/src/components/blog/BlogCategoriesPage.vue +46 -0
  7. package/src/components/blog/BlogContentRenderer.vue +111 -111
  8. package/src/components/blog/BlogFAQSection.vue +19 -19
  9. package/src/components/blog/BlogHeaderSection.vue +80 -80
  10. package/src/components/blog/BlogIndexPage.vue +118 -0
  11. package/src/components/blog/BlogInfoSection.vue +47 -47
  12. package/src/components/blog/BlogPageBreadcrumbs.vue +43 -0
  13. package/src/components/blog/BlogPostHeader.vue +135 -135
  14. package/src/components/blog/BlogPostPage.vue +116 -0
  15. package/src/components/blog/BlogPostsPage.vue +74 -0
  16. package/src/components/blog/BlogProgressBar.vue +33 -33
  17. package/src/components/blog/BlogSectionTitle.vue +22 -22
  18. package/src/components/blog/BlogTagsPage.vue +46 -0
  19. package/src/components/blog/BlogTagsSection.vue +25 -25
  20. package/src/components/blog/BlogViewAllLink.vue +18 -0
  21. package/src/components/blog/CategoriesList.vue +14 -14
  22. package/src/components/blog/CategoriesSection.vue +11 -11
  23. package/src/components/blog/CategoryCard.vue +25 -25
  24. package/src/components/blog/HeaderCarousel.vue +97 -97
  25. package/src/components/blog/PostCard.vue +33 -33
  26. package/src/components/blog/PostsList.vue +15 -15
  27. package/src/components/blog/SocialShareSidebar.vue +84 -84
  28. package/src/components/blog/TableOfContents.vue +307 -307
  29. package/src/components/blog/blogPageUtils.ts +98 -0
  30. package/src/components/blog/index.ts +12 -1
  31. package/src/components/busy-indicator/BusyIndicator.vue +7 -7
  32. package/src/components/busy-indicator/busy-indicator-state.ts +56 -56
  33. package/src/components/card-grid/CardGrid.vue +34 -34
  34. package/src/components/chip/Chip.vue +15 -15
  35. package/src/components/confirm-dialog/ConfirmDialog.vue +50 -50
  36. package/src/components/confirm-dialog/confirm-dialog-state.ts +131 -131
  37. package/src/components/content/BlogList.vue +30 -30
  38. package/src/components/content/BlogTable.vue +36 -36
  39. package/src/components/content/CodeBlock.vue +136 -136
  40. package/src/components/content/Flow.vue +60 -60
  41. package/src/components/content/ProseHr.vue +15 -15
  42. package/src/components/content/ProsePre.vue +12 -12
  43. package/src/components/content/Terminal.vue +59 -59
  44. package/src/components/cookie-consent/CookieConsent.vue +36 -36
  45. package/src/components/cookie-consent/useCookieConsent.ts +37 -37
  46. package/src/components/dashboard-shell/DashboardShell.vue +171 -171
  47. package/src/components/data-list/DataList.vue +6 -6
  48. package/src/components/data-list/DataListItem.vue +4 -4
  49. package/src/components/data-list/DataListLabel.vue +4 -4
  50. package/src/components/data-list/DataListText.vue +4 -4
  51. package/src/components/data-list/DataListValue.vue +4 -4
  52. package/src/components/empty-state-card/EmptyStateCard.vue +40 -40
  53. package/src/components/error-page/ErrorPage.vue +72 -72
  54. package/src/components/info-card/InfoCard.vue +31 -31
  55. package/src/components/landing/landing-content/LandingContent.vue +4 -4
  56. package/src/components/landing/landing-footer/LandingFooter.vue +128 -128
  57. package/src/components/landing/landing-navbar/LandingNavbar.vue +50 -50
  58. package/src/components/landing/landing-shell/LandingShell.vue +36 -36
  59. package/src/components/language-flag/LanguageFlag.vue +25 -25
  60. package/src/components/language-flag/flags/ChineseFlag.vue +8 -8
  61. package/src/components/language-flag/flags/EnglishFlag.vue +7 -7
  62. package/src/components/language-flag/flags/FrenchFlag.vue +5 -5
  63. package/src/components/language-flag/flags/GermanFlag.vue +5 -5
  64. package/src/components/language-flag/flags/ItalianFlag.vue +7 -7
  65. package/src/components/language-flag/flags/JapaneseFlag.vue +4 -4
  66. package/src/components/language-flag/flags/PortugueseFlag.vue +57 -57
  67. package/src/components/language-flag/flags/RussianFlag.vue +5 -5
  68. package/src/components/language-flag/flags/SpanishFlag.vue +4 -4
  69. package/src/components/language-selector/LanguageSelector.vue +76 -76
  70. package/src/components/load-more-button/LoadMoreButton.vue +17 -17
  71. package/src/components/loading-state-card/LoadingStateCard.vue +28 -28
  72. package/src/components/message-dialog/MessageDialog.vue +59 -59
  73. package/src/components/message-dialog/message-dialog-state.ts +105 -105
  74. package/src/components/message-toast/MessageToast.vue +149 -149
  75. package/src/components/message-toast/message-toast-state.ts +146 -146
  76. package/src/components/page-header/PageHeader.vue +34 -34
  77. package/src/components/progress-component/ProgressComponent.vue +33 -33
  78. package/src/components/single-value-card/SingleValueCard.vue +57 -57
  79. package/src/components/slider-form-component/SliderFormComponent.vue +36 -36
  80. package/src/components/stat-strip/StatStrip.vue +22 -22
  81. package/src/components/switch-form-component/SwitchFormComponent.vue +20 -20
  82. package/src/components/text-link/TextLink.vue +14 -14
  83. package/src/components/theme-selector/ThemeSelector.vue +61 -61
  84. package/src/components/theme-selector/theme-transition.ts +63 -63
  85. package/src/components/ui/accordion/Accordion.vue +38 -38
  86. package/src/components/ui/alert/Alert.vue +5 -5
  87. package/src/components/ui/alert/AlertDescription.vue +4 -4
  88. package/src/components/ui/alert/AlertTitle.vue +4 -4
  89. package/src/components/ui/alert/index.ts +2 -2
  90. package/src/components/ui/alert-dialog/AlertDialog.vue +3 -3
  91. package/src/components/ui/alert-dialog/AlertDialogAction.vue +3 -3
  92. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +3 -3
  93. package/src/components/ui/alert-dialog/AlertDialogContent.vue +7 -7
  94. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +3 -3
  95. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +4 -4
  96. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +4 -4
  97. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +3 -3
  98. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -3
  99. package/src/components/ui/animated-number/AnimatedNumber.vue +49 -48
  100. package/src/components/ui/avatar/Avatar.vue +28 -28
  101. package/src/components/ui/avatar/AvatarFallback.vue +6 -6
  102. package/src/components/ui/avatar/AvatarGroup.vue +40 -40
  103. package/src/components/ui/avatar/AvatarImage.vue +3 -3
  104. package/src/components/ui/avatar/index.ts +17 -17
  105. package/src/components/ui/badge/Badge.vue +20 -20
  106. package/src/components/ui/breadcrumb/Breadcrumb.vue +4 -4
  107. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +9 -9
  108. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +4 -4
  109. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +4 -4
  110. package/src/components/ui/breadcrumb/BreadcrumbList.vue +4 -4
  111. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +4 -4
  112. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +4 -4
  113. package/src/components/ui/busy/Busy.vue +33 -33
  114. package/src/components/ui/button/Button.vue +23 -23
  115. package/src/components/ui/button/index.ts +56 -56
  116. package/src/components/ui/calendar/Calendar.vue +138 -138
  117. package/src/components/ui/calendar/CalendarCell.vue +7 -7
  118. package/src/components/ui/calendar/CalendarCellTrigger.vue +18 -18
  119. package/src/components/ui/calendar/CalendarGrid.vue +3 -3
  120. package/src/components/ui/calendar/CalendarGridBody.vue +3 -3
  121. package/src/components/ui/calendar/CalendarGridHead.vue +3 -3
  122. package/src/components/ui/calendar/CalendarGridRow.vue +3 -3
  123. package/src/components/ui/calendar/CalendarHeadCell.vue +7 -7
  124. package/src/components/ui/calendar/CalendarHeader.vue +7 -7
  125. package/src/components/ui/calendar/CalendarHeading.vue +6 -6
  126. package/src/components/ui/calendar/CalendarNextButton.vue +15 -15
  127. package/src/components/ui/calendar/CalendarPrevButton.vue +15 -15
  128. package/src/components/ui/calendar/index.ts +4 -4
  129. package/src/components/ui/card/Card.vue +20 -20
  130. package/src/components/ui/card/CardAction.vue +8 -8
  131. package/src/components/ui/card/CardContent.vue +4 -4
  132. package/src/components/ui/card/CardDescription.vue +12 -12
  133. package/src/components/ui/card/CardFooter.vue +4 -4
  134. package/src/components/ui/card/CardHeader.vue +8 -8
  135. package/src/components/ui/card/CardText.vue +8 -8
  136. package/src/components/ui/card/CardTitle.vue +8 -8
  137. package/src/components/ui/checkbox/Checkbox.vue +27 -27
  138. package/src/components/ui/collapsible/Collapsible.vue +3 -3
  139. package/src/components/ui/collapsible/CollapsibleContent.vue +3 -3
  140. package/src/components/ui/collapsible/CollapsibleTrigger.vue +3 -3
  141. package/src/components/ui/combobox/Combobox.vue +4 -4
  142. package/src/components/ui/combobox/ComboboxAnchor.vue +16 -16
  143. package/src/components/ui/combobox/ComboboxEmpty.vue +3 -3
  144. package/src/components/ui/combobox/ComboboxGroup.vue +9 -9
  145. package/src/components/ui/combobox/ComboboxInput.vue +6 -6
  146. package/src/components/ui/combobox/ComboboxItem.vue +17 -17
  147. package/src/components/ui/combobox/ComboboxList.vue +19 -19
  148. package/src/components/ui/combobox/ComboboxSelect.vue +77 -77
  149. package/src/components/ui/combobox/ComboboxSeparator.vue +1 -1
  150. package/src/components/ui/combobox/ComboboxTrigger.vue +10 -10
  151. package/src/components/ui/combobox/types.ts +5 -5
  152. package/src/components/ui/command/Command.vue +48 -48
  153. package/src/components/ui/command/CommandDialog.vue +14 -14
  154. package/src/components/ui/command/CommandEmpty.vue +4 -4
  155. package/src/components/ui/command/CommandGroup.vue +23 -23
  156. package/src/components/ui/command/CommandInput.vue +9 -9
  157. package/src/components/ui/command/CommandItem.vue +40 -40
  158. package/src/components/ui/command/CommandList.vue +9 -9
  159. package/src/components/ui/command/CommandSeparator.vue +3 -3
  160. package/src/components/ui/command/CommandShortcut.vue +8 -8
  161. package/src/components/ui/command/index.ts +11 -11
  162. package/src/components/ui/data-table/DataTable.vue +145 -145
  163. package/src/components/ui/data-table/index.ts +11 -11
  164. package/src/components/ui/date-picker/DatePicker.vue +31 -31
  165. package/src/components/ui/date-time-picker/DateTimePicker.vue +97 -97
  166. package/src/components/ui/dialog/Dialog.vue +3 -3
  167. package/src/components/ui/dialog/DialogClose.vue +3 -3
  168. package/src/components/ui/dialog/DialogContent.vue +21 -21
  169. package/src/components/ui/dialog/DialogDescription.vue +7 -7
  170. package/src/components/ui/dialog/DialogFooter.vue +8 -8
  171. package/src/components/ui/dialog/DialogHeader.vue +4 -4
  172. package/src/components/ui/dialog/DialogOverlay.vue +7 -7
  173. package/src/components/ui/dialog/DialogScrollContent.vue +32 -32
  174. package/src/components/ui/dialog/DialogTitle.vue +3 -3
  175. package/src/components/ui/dialog/DialogTrigger.vue +3 -3
  176. package/src/components/ui/dropdown-menu/DropdownMenu.vue +3 -3
  177. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +11 -11
  178. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +15 -15
  179. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +3 -3
  180. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +12 -12
  181. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +9 -9
  182. package/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +3 -3
  183. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +3 -3
  184. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +11 -11
  185. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -1
  186. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +4 -4
  187. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -3
  188. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +15 -15
  189. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +15 -15
  190. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +3 -3
  191. package/src/components/ui/dropdown-menu/classes.ts +16 -16
  192. package/src/components/ui/field/Field.vue +5 -5
  193. package/src/components/ui/field/FieldContent.vue +8 -8
  194. package/src/components/ui/field/FieldDescription.vue +10 -10
  195. package/src/components/ui/field/FieldError.vue +39 -39
  196. package/src/components/ui/field/FieldGroup.vue +8 -8
  197. package/src/components/ui/field/FieldLabel.vue +10 -10
  198. package/src/components/ui/field/FieldLegend.vue +11 -11
  199. package/src/components/ui/field/FieldSeparator.vue +11 -11
  200. package/src/components/ui/field/FieldSet.vue +9 -9
  201. package/src/components/ui/field/FieldTitle.vue +8 -8
  202. package/src/components/ui/field/field-context.ts +36 -36
  203. package/src/components/ui/field/index.ts +22 -22
  204. package/src/components/ui/file-dropzone/FileDropzone.vue +144 -144
  205. package/src/components/ui/file-dropzone/index.ts +19 -19
  206. package/src/components/ui/hover-card/HoverCard.vue +5 -5
  207. package/src/components/ui/hover-card/HoverCardContent.vue +13 -13
  208. package/src/components/ui/hover-card/HoverCardTrigger.vue +3 -3
  209. package/src/components/ui/input/Input.vue +13 -13
  210. package/src/components/ui/kbd/Kbd.vue +10 -10
  211. package/src/components/ui/kbd/KbdGroup.vue +49 -49
  212. package/src/components/ui/label/Label.vue +7 -7
  213. package/src/components/ui/native-select/NativeSelect.vue +16 -16
  214. package/src/components/ui/native-select/NativeSelectOptGroup.vue +3 -3
  215. package/src/components/ui/native-select/NativeSelectOption.vue +3 -3
  216. package/src/components/ui/number-field/NumberField.vue +88 -88
  217. package/src/components/ui/pagination/Pagination.vue +4 -4
  218. package/src/components/ui/pagination/PaginationContent.vue +4 -4
  219. package/src/components/ui/pagination/PaginationEllipsis.vue +9 -9
  220. package/src/components/ui/pagination/PaginationFirst.vue +8 -8
  221. package/src/components/ui/pagination/PaginationItem.vue +14 -14
  222. package/src/components/ui/pagination/PaginationLast.vue +8 -8
  223. package/src/components/ui/pagination/PaginationNext.vue +8 -8
  224. package/src/components/ui/pagination/PaginationPrevious.vue +8 -8
  225. package/src/components/ui/pagination/SimplePagination.vue +25 -25
  226. package/src/components/ui/pin-input/PinInput.vue +20 -20
  227. package/src/components/ui/pin-input/PinInputInput.vue +17 -17
  228. package/src/components/ui/pin-input/context.ts +1 -1
  229. package/src/components/ui/popover/Popover.vue +3 -3
  230. package/src/components/ui/popover/PopoverAnchor.vue +3 -3
  231. package/src/components/ui/popover/PopoverContent.vue +12 -12
  232. package/src/components/ui/popover/PopoverTrigger.vue +3 -3
  233. package/src/components/ui/progress/Progress.vue +16 -16
  234. package/src/components/ui/radio-group/RadioGroup.vue +7 -7
  235. package/src/components/ui/radio-group/RadioGroupCard.vue +39 -39
  236. package/src/components/ui/radio-group/RadioGroupItem.vue +20 -20
  237. package/src/components/ui/scroll-area/ScrollArea.vue +14 -14
  238. package/src/components/ui/scroll-area/ScrollBar.vue +12 -12
  239. package/src/components/ui/select/Select.vue +3 -3
  240. package/src/components/ui/select/SelectContent.vue +25 -25
  241. package/src/components/ui/select/SelectGroup.vue +3 -3
  242. package/src/components/ui/select/SelectItem.vue +24 -24
  243. package/src/components/ui/select/SelectItemContent.vue +32 -32
  244. package/src/components/ui/select/SelectItemText.vue +3 -3
  245. package/src/components/ui/select/SelectLabel.vue +3 -3
  246. package/src/components/ui/select/SelectScrollDownButton.vue +9 -9
  247. package/src/components/ui/select/SelectScrollUpButton.vue +9 -9
  248. package/src/components/ui/select/SelectSeparator.vue +2 -2
  249. package/src/components/ui/select/SelectTrigger.vue +14 -14
  250. package/src/components/ui/select/SelectValue.vue +3 -3
  251. package/src/components/ui/select/SelectValueContent.vue +39 -39
  252. package/src/components/ui/separator/Separator.vue +7 -7
  253. package/src/components/ui/sheet/Sheet.vue +3 -3
  254. package/src/components/ui/sheet/SheetClose.vue +3 -3
  255. package/src/components/ui/sheet/SheetContent.vue +22 -22
  256. package/src/components/ui/sheet/SheetDescription.vue +3 -3
  257. package/src/components/ui/sheet/SheetFooter.vue +3 -3
  258. package/src/components/ui/sheet/SheetHeader.vue +3 -3
  259. package/src/components/ui/sheet/SheetOverlay.vue +7 -7
  260. package/src/components/ui/sheet/SheetTitle.vue +3 -3
  261. package/src/components/ui/sheet/SheetTrigger.vue +3 -3
  262. package/src/components/ui/sidebar/Sidebar.vue +57 -57
  263. package/src/components/ui/sidebar/SidebarContent.vue +8 -8
  264. package/src/components/ui/sidebar/SidebarFooter.vue +8 -8
  265. package/src/components/ui/sidebar/SidebarGroup.vue +8 -8
  266. package/src/components/ui/sidebar/SidebarGroupAction.vue +9 -9
  267. package/src/components/ui/sidebar/SidebarGroupContent.vue +4 -4
  268. package/src/components/ui/sidebar/SidebarGroupLabel.vue +8 -8
  269. package/src/components/ui/sidebar/SidebarHeader.vue +8 -8
  270. package/src/components/ui/sidebar/SidebarInput.vue +8 -8
  271. package/src/components/ui/sidebar/SidebarInset.vue +9 -9
  272. package/src/components/ui/sidebar/SidebarMenu.vue +4 -4
  273. package/src/components/ui/sidebar/SidebarMenuAction.vue +18 -18
  274. package/src/components/ui/sidebar/SidebarMenuBadge.vue +14 -14
  275. package/src/components/ui/sidebar/SidebarMenuButton.vue +21 -21
  276. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +10 -10
  277. package/src/components/ui/sidebar/SidebarMenuItem.vue +4 -4
  278. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +10 -10
  279. package/src/components/ui/sidebar/SidebarMenuSub.vue +9 -9
  280. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +17 -17
  281. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +4 -4
  282. package/src/components/ui/sidebar/SidebarProvider.vue +46 -46
  283. package/src/components/ui/sidebar/SidebarRail.vue +13 -13
  284. package/src/components/ui/sidebar/SidebarSeparator.vue +4 -4
  285. package/src/components/ui/sidebar/SidebarTrigger.vue +5 -5
  286. package/src/components/ui/sidebar/index.ts +29 -29
  287. package/src/components/ui/sidebar/utils.ts +7 -7
  288. package/src/components/ui/skeleton/Skeleton.vue +6 -6
  289. package/src/components/ui/slider/Slider.vue +14 -14
  290. package/src/components/ui/spinner/Spinner.vue +21 -21
  291. package/src/components/ui/stepper/SimpleStepper.vue +26 -26
  292. package/src/components/ui/stepper/Stepper.vue +6 -6
  293. package/src/components/ui/stepper/StepperDescription.vue +5 -5
  294. package/src/components/ui/stepper/StepperIndicator.vue +17 -17
  295. package/src/components/ui/stepper/StepperItem.vue +4 -4
  296. package/src/components/ui/stepper/StepperSeparator.vue +7 -7
  297. package/src/components/ui/stepper/StepperTitle.vue +5 -5
  298. package/src/components/ui/stepper/StepperTrigger.vue +4 -4
  299. package/src/components/ui/stepper/index.ts +3 -3
  300. package/src/components/ui/switch/Switch.vue +15 -15
  301. package/src/components/ui/table/Table.vue +6 -6
  302. package/src/components/ui/table/TableBody.vue +4 -4
  303. package/src/components/ui/table/TableCaption.vue +4 -4
  304. package/src/components/ui/table/TableCell.vue +8 -8
  305. package/src/components/ui/table/TableEmpty.vue +14 -14
  306. package/src/components/ui/table/TableFooter.vue +8 -8
  307. package/src/components/ui/table/TableHead.vue +8 -8
  308. package/src/components/ui/table/TableHeader.vue +4 -4
  309. package/src/components/ui/table/TableRow.vue +8 -8
  310. package/src/components/ui/tabs/Tabs.vue +4 -4
  311. package/src/components/ui/tabs/TabsContent.vue +4 -4
  312. package/src/components/ui/tabs/TabsList.vue +15 -15
  313. package/src/components/ui/tabs/TabsTrigger.vue +10 -10
  314. package/src/components/ui/tags-input/TagsInput.vue +17 -17
  315. package/src/components/ui/tags-input/TagsInputInput.vue +6 -6
  316. package/src/components/ui/tags-input/TagsInputItem.vue +15 -15
  317. package/src/components/ui/tags-input/TagsInputItemDelete.vue +12 -12
  318. package/src/components/ui/tags-input/TagsInputItemText.vue +4 -4
  319. package/src/components/ui/textarea/Textarea.vue +12 -12
  320. package/src/components/ui/time-picker/TimePicker.vue +25 -25
  321. package/src/components/ui/toggle-group/Toggle.vue +10 -10
  322. package/src/components/ui/toggle-group/ToggleGroup.vue +38 -38
  323. package/src/components/ui/toggle-group/ToggleGroupItem.vue +9 -9
  324. package/src/components/ui/toggle-group/index.ts +46 -46
  325. package/src/components/ui/tooltip/Tooltip.vue +3 -3
  326. package/src/components/ui/tooltip/TooltipContent.vue +13 -13
  327. package/src/components/ui/tooltip/TooltipProvider.vue +4 -4
  328. package/src/components/ui/tooltip/TooltipTrigger.vue +3 -3
  329. package/src/i18n/de.json +206 -185
  330. package/src/i18n/en.json +206 -185
  331. package/src/i18n/es.json +206 -185
  332. package/src/i18n/fr.json +206 -185
  333. package/src/i18n/it.json +206 -185
  334. package/src/i18n/ja.json +206 -185
  335. package/src/i18n/pt.json +206 -185
  336. package/src/i18n/ru.json +206 -185
  337. package/src/i18n/zh.json +206 -185
  338. package/src/lib/color-tokens.ts +24 -24
  339. package/src/lib/i18n.ts +65 -65
  340. package/src/lib/utils.ts +33 -33
  341. package/src/nuxt-components.d.ts +2 -2
  342. package/src/runtime/ui-vintage-i18n-plugin.ts +49 -49
  343. package/src/shims-vue.d.ts +3 -3
  344. package/src/styles.css +377 -377
@@ -6,18 +6,18 @@ import { ComboboxContent, ComboboxPortal, ComboboxViewport, useForwardPropsEmits
6
6
  import { cn } from '../../../lib/utils';
7
7
 
8
8
  defineOptions({
9
- inheritAttrs: false
9
+ inheritAttrs: false
10
10
  });
11
11
 
12
12
  // Props
13
13
  const props = withDefaults(defineProps<ComboboxContentProps & {
14
- class?: HTMLAttributes['class'];
15
- viewportClass?: HTMLAttributes['class'];
14
+ class?: HTMLAttributes['class'];
15
+ viewportClass?: HTMLAttributes['class'];
16
16
  }>(), {
17
- position: 'popper',
18
- align: 'start',
19
- sideOffset: 6,
20
- collisionPadding: 8
17
+ position: 'popper',
18
+ align: 'start',
19
+ sideOffset: 6,
20
+ collisionPadding: 8
21
21
  });
22
22
 
23
23
  // Emits
@@ -28,16 +28,16 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
28
28
  </script>
29
29
 
30
30
  <template>
31
- <ComboboxPortal>
32
- <ComboboxContent data-slot="combobox-list" v-bind="{ ...$attrs, ...forwarded }" :class="cn(
33
- 'uv-floating-motion bg-popover text-popover-foreground z-50 flex w-(--reka-combobox-trigger-width) max-h-[min(var(--reka-combobox-content-available-height),20rem)] flex-col overflow-hidden rounded border border-border shadow-elevated-lg outline-hidden',
34
- props.class
35
- )
36
- ">
37
- <!-- Scrollable viewport -->
38
- <ComboboxViewport data-slot="combobox-viewport" :class="cn('min-h-0 scroll-py-1 p-1', props.viewportClass)">
39
- <slot />
40
- </ComboboxViewport>
41
- </ComboboxContent>
42
- </ComboboxPortal>
31
+ <ComboboxPortal>
32
+ <ComboboxContent data-slot="combobox-list" v-bind="{ ...$attrs, ...forwarded }" :class="cn(
33
+ 'uv-floating-motion bg-popover text-popover-foreground z-50 flex w-(--reka-combobox-trigger-width) max-h-[min(var(--reka-combobox-content-available-height),20rem)] flex-col overflow-hidden rounded border border-border shadow-elevated-lg outline-hidden',
34
+ props.class
35
+ )
36
+ ">
37
+ <!-- Scrollable viewport -->
38
+ <ComboboxViewport data-slot="combobox-viewport" :class="cn('min-h-0 scroll-py-1 p-1', props.viewportClass)">
39
+ <slot />
40
+ </ComboboxViewport>
41
+ </ComboboxContent>
42
+ </ComboboxPortal>
43
43
  </template>
@@ -19,26 +19,26 @@ import type { ComboboxSelectModelValue, ComboboxSelectOption, ComboboxSelectValu
19
19
 
20
20
  // Props
21
21
  const props = withDefaults(defineProps<{
22
- modelValue?: ComboboxSelectModelValue;
23
- options: ComboboxSelectOption[];
24
- placeholder?: string;
25
- searchPlaceholder?: string;
26
- emptyText?: string;
27
- multiple?: boolean;
28
- disabled?: boolean;
29
- size?: 'sm' | 'default';
30
- class?: HTMLAttributes['class'];
31
- contentClass?: HTMLAttributes['class'];
22
+ modelValue?: ComboboxSelectModelValue;
23
+ options: ComboboxSelectOption[];
24
+ placeholder?: string;
25
+ searchPlaceholder?: string;
26
+ emptyText?: string;
27
+ multiple?: boolean;
28
+ disabled?: boolean;
29
+ size?: 'sm' | 'default';
30
+ class?: HTMLAttributes['class'];
31
+ contentClass?: HTMLAttributes['class'];
32
32
  }>(), {
33
- modelValue: undefined,
34
- multiple: false,
35
- disabled: false,
36
- size: 'default'
33
+ modelValue: undefined,
34
+ multiple: false,
35
+ disabled: false,
36
+ size: 'default'
37
37
  });
38
38
 
39
39
  // Emits
40
40
  const emits = defineEmits<{
41
- 'update:modelValue': [value: ComboboxSelectModelValue];
41
+ 'update:modelValue': [value: ComboboxSelectModelValue];
42
42
  }>();
43
43
 
44
44
  const { t } = useI18n();
@@ -56,39 +56,39 @@ const emptyLabel = computed(() => props.emptyText ?? t('uiVintage.combobox.empty
56
56
 
57
57
  // Normalized selection
58
58
  const selectedValues = computed<ComboboxSelectValue[]>(() => {
59
- if (Array.isArray(props.modelValue)) return props.modelValue;
60
- return props.modelValue == null ? [] : [props.modelValue];
59
+ if (Array.isArray(props.modelValue)) return props.modelValue;
60
+ return props.modelValue == null ? [] : [props.modelValue];
61
61
  });
62
62
 
63
63
  // Lookup options by value
64
64
  const optionMap = computed(() => new Map(props.options.map(option => [option.value, option])));
65
65
 
66
66
  const selectedOptions = computed(() => selectedValues.value
67
- .map(value => optionMap.value.get(value))
68
- .filter((option): option is ComboboxSelectOption => !!option));
67
+ .map(value => optionMap.value.get(value))
68
+ .filter((option): option is ComboboxSelectOption => !!option));
69
69
 
70
70
  const selectedOption = computed(() => (props.multiple ? undefined : selectedOptions.value[0]));
71
71
 
72
72
  // Value handed to reka (array in multiple mode)
73
73
  const rootValue = computed<AcceptableValue | AcceptableValue[] | undefined>(() => {
74
- if (props.multiple) return selectedValues.value;
75
- return selectedValues.value[0];
74
+ if (props.multiple) return selectedValues.value;
75
+ return selectedValues.value[0];
76
76
  });
77
77
 
78
78
  // Label shown inside the input for single selection
79
79
  const displayValue = (value: unknown) => {
80
- if (props.multiple || value == null || Array.isArray(value)) return '';
81
- return optionMap.value.get(value as ComboboxSelectValue)?.label ?? '';
80
+ if (props.multiple || value == null || Array.isArray(value)) return '';
81
+ return optionMap.value.get(value as ComboboxSelectValue)?.label ?? '';
82
82
  };
83
83
 
84
84
  // Placeholder switches to a search prompt (or the current label) while open
85
85
  const inputPlaceholder = computed(() => {
86
- if (props.multiple) {
87
- if (open.value || selectedOptions.value.length) return searchPlaceholderText.value;
88
- return placeholderText.value;
89
- }
90
- if (open.value) return selectedOption.value?.label ?? searchPlaceholderText.value;
91
- return placeholderText.value;
86
+ if (props.multiple) {
87
+ if (open.value || selectedOptions.value.length) return searchPlaceholderText.value;
88
+ return placeholderText.value;
89
+ }
90
+ if (open.value) return selectedOption.value?.label ?? searchPlaceholderText.value;
91
+ return placeholderText.value;
92
92
  });
93
93
 
94
94
  // Leading icon mirrors the selected option icon when closed
@@ -96,68 +96,68 @@ const showsOptionIcon = computed(() => !open.value && !!selectedOption.value?.ic
96
96
  const leadingIcon = computed(() => (showsOptionIcon.value && selectedOption.value?.icon) || Search01Icon);
97
97
 
98
98
  const handleUpdate = (value: unknown) => {
99
- if (props.multiple) {
100
- emits('update:modelValue', Array.isArray(value) ? [...value] as ComboboxSelectValue[] : []);
101
- return;
102
- }
103
- emits('update:modelValue', (value ?? null) as ComboboxSelectModelValue);
99
+ if (props.multiple) {
100
+ emits('update:modelValue', Array.isArray(value) ? [...value] as ComboboxSelectValue[] : []);
101
+ return;
102
+ }
103
+ emits('update:modelValue', (value ?? null) as ComboboxSelectModelValue);
104
104
  };
105
105
 
106
106
  // Clear the text on open so the whole list is visible (single mode keeps the label as placeholder)
107
107
  const handleOpenChange = (value: boolean) => {
108
- open.value = value;
109
- interacted.value = true;
110
- if (value) searchTerm.value = '';
108
+ open.value = value;
109
+ interacted.value = true;
110
+ if (value) searchTerm.value = '';
111
111
  };
112
112
 
113
113
  // Remove a tag in multiple mode
114
114
  const removeValue = (value: ComboboxSelectValue) => {
115
- if (props.disabled) return;
116
- emits('update:modelValue', selectedValues.value.filter(item => item !== value));
115
+ if (props.disabled) return;
116
+ emits('update:modelValue', selectedValues.value.filter(item => item !== value));
117
117
  };
118
118
 
119
119
  // Backspace on an empty input removes the last tag
120
120
  const handleKeydown = (event: KeyboardEvent) => {
121
- if (!props.multiple || event.key !== 'Backspace' || searchTerm.value) return;
122
- const last = selectedValues.value[selectedValues.value.length - 1];
123
- if (last !== undefined) removeValue(last);
121
+ if (!props.multiple || event.key !== 'Backspace' || searchTerm.value) return;
122
+ const last = selectedValues.value[selectedValues.value.length - 1];
123
+ if (last !== undefined) removeValue(last);
124
124
  };
125
125
  </script>
126
126
 
127
127
  <template>
128
- <Combobox :model-value="rootValue" :multiple="props.multiple" :disabled="props.disabled" :open="open" data-slot="combobox-select" :class="cn('w-full', props.class)" @update:model-value="handleUpdate" @update:open="handleOpenChange">
129
- <!-- Field -->
130
- <ComboboxAnchor :size="props.size" :class="props.multiple && selectedOptions.length ? 'py-2' : undefined">
131
- <!-- Leading icon -->
132
- <HugeiconsIcon :key="showsOptionIcon ? `option-${selectedOption?.value}` : 'search'" :icon="leadingIcon" :class="cn('size-4', interacted && 'animate-uv-pop')" />
133
-
134
- <div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5">
135
- <!-- Selected tags (multiple mode) -->
136
- <TransitionGroup v-if="props.multiple" leave-active-class="transition-[opacity,scale] duration-150 ease-snappy" leave-to-class="scale-75 opacity-0">
137
- <span v-for="option in selectedOptions" :key="option.value" data-slot="combobox-select-tag" class="inline-flex h-7 max-w-full animate-uv-pop items-center gap-1 rounded-sm border border-border bg-surface pr-1 pl-2 text-[11px] font-semibold text-foreground sm:text-xs">
138
- <HugeiconsIcon v-if="option.icon" :icon="option.icon" class="size-3" />
139
- <span class="truncate">{{ option.label }}</span>
140
- <button type="button" :disabled="props.disabled" :aria-label="`${t('uiVintage.buttons.remove')} ${option.label}`" class="flex size-5 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none transition-[color,background-color,scale] duration-150 ease-spring hover:bg-accent hover:text-destructive focus-visible:ring-[3px] focus-visible:ring-ring/45 active:scale-90 disabled:pointer-events-none" @click.stop="removeValue(option.value)">
141
- <HugeiconsIcon :icon="Cancel01Icon" class="size-3" />
142
- </button>
143
- </span>
144
- </TransitionGroup>
145
-
146
- <!-- Search input -->
147
- <ComboboxInput v-model="searchTerm" :display-value="displayValue" :placeholder="inputPlaceholder" :disabled="props.disabled" @keydown="handleKeydown" />
148
- </div>
149
-
150
- <!-- Chevron trigger -->
151
- <ComboboxTrigger />
152
- </ComboboxAnchor>
153
-
154
- <!-- Options list -->
155
- <ComboboxList :class="props.contentClass">
156
- <ComboboxEmpty>{{ emptyLabel }}</ComboboxEmpty>
157
-
158
- <ComboboxItem v-for="option in props.options" :key="option.value" :value="option.value" :text-value="option.label" :disabled="option.disabled">
159
- <SelectItemContent :icon="option.icon" :label="option.label" :description="option.description" />
160
- </ComboboxItem>
161
- </ComboboxList>
162
- </Combobox>
128
+ <Combobox :model-value="rootValue" :multiple="props.multiple" :disabled="props.disabled" :open="open" data-slot="combobox-select" :class="cn('w-full', props.class)" @update:model-value="handleUpdate" @update:open="handleOpenChange">
129
+ <!-- Field -->
130
+ <ComboboxAnchor :size="props.size" :class="props.multiple && selectedOptions.length ? 'py-2' : undefined">
131
+ <!-- Leading icon -->
132
+ <HugeiconsIcon :key="showsOptionIcon ? `option-${selectedOption?.value}` : 'search'" :icon="leadingIcon" :class="cn('size-4', interacted && 'animate-uv-pop')" />
133
+
134
+ <div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5">
135
+ <!-- Selected tags (multiple mode) -->
136
+ <TransitionGroup v-if="props.multiple" leave-active-class="transition-[opacity,scale] duration-150 ease-snappy" leave-to-class="scale-75 opacity-0">
137
+ <span v-for="option in selectedOptions" :key="option.value" data-slot="combobox-select-tag" class="inline-flex h-7 max-w-full animate-uv-pop items-center gap-1 rounded-sm border border-border bg-surface pr-1 pl-2 text-[11px] font-semibold text-foreground sm:text-xs">
138
+ <HugeiconsIcon v-if="option.icon" :icon="option.icon" class="size-3" />
139
+ <span class="truncate">{{ option.label }}</span>
140
+ <button type="button" :disabled="props.disabled" :aria-label="`${t('uiVintage.buttons.remove')} ${option.label}`" class="flex size-5 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none transition-[color,background-color,scale] duration-150 ease-spring hover:bg-accent hover:text-destructive focus-visible:ring-[3px] focus-visible:ring-ring/45 active:scale-90 disabled:pointer-events-none" @click.stop="removeValue(option.value)">
141
+ <HugeiconsIcon :icon="Cancel01Icon" class="size-3" />
142
+ </button>
143
+ </span>
144
+ </TransitionGroup>
145
+
146
+ <!-- Search input -->
147
+ <ComboboxInput v-model="searchTerm" :display-value="displayValue" :placeholder="inputPlaceholder" :disabled="props.disabled" @keydown="handleKeydown" />
148
+ </div>
149
+
150
+ <!-- Chevron trigger -->
151
+ <ComboboxTrigger />
152
+ </ComboboxAnchor>
153
+
154
+ <!-- Options list -->
155
+ <ComboboxList :class="props.contentClass">
156
+ <ComboboxEmpty>{{ emptyLabel }}</ComboboxEmpty>
157
+
158
+ <ComboboxItem v-for="option in props.options" :key="option.value" :value="option.value" :text-value="option.label" :disabled="option.disabled">
159
+ <SelectItemContent :icon="option.icon" :label="option.label" :description="option.description" />
160
+ </ComboboxItem>
161
+ </ComboboxList>
162
+ </Combobox>
163
163
  </template>
@@ -12,5 +12,5 @@ const delegatedProps = reactiveOmit(props, 'class');
12
12
  </script>
13
13
 
14
14
  <template>
15
- <ComboboxSeparator data-slot="combobox-separator" v-bind="delegatedProps" :class="cn('-mx-1 my-1 h-px bg-border', props.class)" />
15
+ <ComboboxSeparator data-slot="combobox-separator" v-bind="delegatedProps" :class="cn('-mx-1 my-1 h-px bg-border', props.class)" />
16
16
  </template>
@@ -15,14 +15,14 @@ const forwardedProps = useForwardProps(delegatedProps);
15
15
  </script>
16
16
 
17
17
  <template>
18
- <ComboboxTrigger data-slot="combobox-trigger" v-bind="forwardedProps" :class="cn(
19
- 'group/combobox-trigger -mr-1 flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none transition-colors duration-150 hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-60',
20
- props.class
21
- )
22
- ">
23
- <slot>
24
- <!-- Chevron rotates with a spring while open -->
25
- <HugeiconsIcon :icon="ArrowDown01Icon" class="size-4 text-current transition-transform duration-300 ease-spring group-data-[state=open]/combobox-trigger:rotate-180" />
26
- </slot>
27
- </ComboboxTrigger>
18
+ <ComboboxTrigger data-slot="combobox-trigger" v-bind="forwardedProps" :class="cn(
19
+ 'group/combobox-trigger -mr-1 flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-sm text-muted-foreground outline-none transition-colors duration-150 hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-60',
20
+ props.class
21
+ )
22
+ ">
23
+ <slot>
24
+ <!-- Chevron rotates with a spring while open -->
25
+ <HugeiconsIcon :icon="ArrowDown01Icon" class="size-4 text-current transition-transform duration-300 ease-spring group-data-[state=open]/combobox-trigger:rotate-180" />
26
+ </slot>
27
+ </ComboboxTrigger>
28
28
  </template>
@@ -5,11 +5,11 @@ export type ComboboxSelectValue = string | number;
5
5
 
6
6
  // Option rendered by ComboboxSelect
7
7
  export interface ComboboxSelectOption {
8
- value: ComboboxSelectValue;
9
- label: string;
10
- description?: string;
11
- icon?: HugeiconsIconDefinition;
12
- disabled?: boolean;
8
+ value: ComboboxSelectValue;
9
+ label: string;
10
+ description?: string;
11
+ icon?: HugeiconsIconDefinition;
12
+ disabled?: boolean;
13
13
  }
14
14
 
15
15
  // v-model shape of ComboboxSelect (array when `multiple`)
@@ -9,7 +9,7 @@ import { provideCommandContext } from '.';
9
9
 
10
10
  // Props
11
11
  const props = withDefaults(defineProps<ListboxRootProps & { class?: HTMLAttributes['class'] }>(), {
12
- modelValue: ''
12
+ modelValue: ''
13
13
  });
14
14
 
15
15
  // Emits
@@ -26,68 +26,68 @@ const allGroups = ref<Map<string, Set<string>>>(new Map());
26
26
 
27
27
  const { contains } = useFilter({ sensitivity: 'base' });
28
28
  const filterState = reactive({
29
- search: '',
30
- filtered: {
31
- /** The count of all visible items. */
32
- count: 0,
33
- /** Map from visible item id to its search score. */
34
- items: new Map() as Map<string, number>,
35
- /** Set of groups with at least one visible item. */
36
- groups: new Set() as Set<string>,
37
- },
29
+ search: '',
30
+ filtered: {
31
+ /** The count of all visible items. */
32
+ count: 0,
33
+ /** Map from visible item id to its search score. */
34
+ items: new Map() as Map<string, number>,
35
+ /** Set of groups with at least one visible item. */
36
+ groups: new Set() as Set<string>,
37
+ },
38
38
  });
39
39
 
40
40
  function filterItems() {
41
- if (!filterState.search) {
42
- filterState.filtered.count = allItems.value.size;
43
- // Do nothing, each item will know to show itself because search is empty
44
- return;
45
- }
41
+ if (!filterState.search) {
42
+ filterState.filtered.count = allItems.value.size;
43
+ // Do nothing, each item will know to show itself because search is empty
44
+ return;
45
+ }
46
46
 
47
- // Reset the groups
48
- filterState.filtered.groups = new Set();
49
- let itemCount = 0;
47
+ // Reset the groups
48
+ filterState.filtered.groups = new Set();
49
+ let itemCount = 0;
50
50
 
51
- // Check which items should be included
52
- for (const [id, value] of allItems.value) {
53
- const score = contains(value, filterState.search);
54
- filterState.filtered.items.set(id, score ? 1 : 0);
55
- if (score) itemCount++;
56
- }
51
+ // Check which items should be included
52
+ for (const [id, value] of allItems.value) {
53
+ const score = contains(value, filterState.search);
54
+ filterState.filtered.items.set(id, score ? 1 : 0);
55
+ if (score) itemCount++;
56
+ }
57
57
 
58
- // Check which groups have at least 1 item shown
59
- for (const [groupId, group] of allGroups.value) {
60
- for (const itemId of group) {
61
- if (filterState.filtered.items.get(itemId)! > 0) {
62
- filterState.filtered.groups.add(groupId);
63
- break;
64
- }
65
- }
66
- }
58
+ // Check which groups have at least 1 item shown
59
+ for (const [groupId, group] of allGroups.value) {
60
+ for (const itemId of group) {
61
+ if (filterState.filtered.items.get(itemId)! > 0) {
62
+ filterState.filtered.groups.add(groupId);
63
+ break;
64
+ }
65
+ }
66
+ }
67
67
 
68
- filterState.filtered.count = itemCount;
68
+ filterState.filtered.count = itemCount;
69
69
  }
70
70
 
71
71
  watch(
72
- () => filterState.search,
73
- () => {
74
- filterItems();
75
- },
72
+ () => filterState.search,
73
+ () => {
74
+ filterItems();
75
+ },
76
76
  );
77
77
 
78
78
  provideCommandContext({
79
- allItems,
80
- allGroups,
81
- filterState,
79
+ allItems,
80
+ allGroups,
81
+ filterState,
82
82
  });
83
83
  </script>
84
84
 
85
85
  <template>
86
- <ListboxRoot data-slot="command" v-bind="forwarded" :class="cn(
87
- 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded transition-colors duration-300 ease-in-out',
88
- props.class,
89
- )
90
- ">
91
- <slot />
92
- </ListboxRoot>
86
+ <ListboxRoot data-slot="command" v-bind="forwarded" :class="cn(
87
+ 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded transition-colors duration-300 ease-in-out',
88
+ props.class,
89
+ )
90
+ ">
91
+ <slot />
92
+ </ListboxRoot>
93
93
  </template>
@@ -11,9 +11,9 @@ import Command from './Command.vue';
11
11
 
12
12
  // Props
13
13
  const props = defineProps<DialogRootProps & {
14
- title?: string;
15
- description?: string;
16
- contentClass?: HTMLAttributes['class'];
14
+ title?: string;
15
+ description?: string;
16
+ contentClass?: HTMLAttributes['class'];
17
17
  }>();
18
18
 
19
19
  const { t } = useI18n();
@@ -29,15 +29,15 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);
29
29
  </script>
30
30
 
31
31
  <template>
32
- <Dialog v-slot="slotProps" v-bind="forwarded">
33
- <DialogContent :class="cn('top-[12vh] translate-y-0 gap-0 overflow-hidden p-0 sm:max-w-xl', props.contentClass)">
34
- <DialogHeader class="sr-only">
35
- <DialogTitle>{{ resolvedTitle }}</DialogTitle>
36
- <DialogDescription>{{ resolvedDescription }}</DialogDescription>
37
- </DialogHeader>
38
- <Command>
39
- <slot v-bind="slotProps" />
40
- </Command>
41
- </DialogContent>
42
- </Dialog>
32
+ <Dialog v-slot="slotProps" v-bind="forwarded">
33
+ <DialogContent :class="cn('top-[12vh] translate-y-0 gap-0 overflow-hidden p-0 sm:max-w-xl', props.contentClass)">
34
+ <DialogHeader class="sr-only">
35
+ <DialogTitle>{{ resolvedTitle }}</DialogTitle>
36
+ <DialogDescription>{{ resolvedDescription }}</DialogDescription>
37
+ </DialogHeader>
38
+ <Command>
39
+ <slot v-bind="slotProps" />
40
+ </Command>
41
+ </DialogContent>
42
+ </Dialog>
43
43
  </template>
@@ -15,12 +15,12 @@ const delegatedProps = reactiveOmit(props, 'class');
15
15
 
16
16
  const { filterState } = useCommand();
17
17
  const isRender = computed(
18
- () => !!filterState.search && filterState.filtered.count === 0,
18
+ () => !!filterState.search && filterState.filtered.count === 0,
19
19
  );
20
20
  </script>
21
21
 
22
22
  <template>
23
- <Primitive v-if="isRender" data-slot="command-empty" v-bind="delegatedProps" :class="cn('py-6 text-center text-sm', props.class)">
24
- <slot />
25
- </Primitive>
23
+ <Primitive v-if="isRender" data-slot="command-empty" v-bind="delegatedProps" :class="cn('py-6 text-center text-sm', props.class)">
24
+ <slot />
25
+ </Primitive>
26
26
  </template>
@@ -9,9 +9,9 @@ import { provideCommandGroupContext, useCommand } from '.';
9
9
 
10
10
  // Props
11
11
  const props = defineProps<ListboxGroupProps & {
12
- class?: HTMLAttributes['class'];
13
- heading?: string;
14
- stagger?: boolean;
12
+ class?: HTMLAttributes['class'];
13
+ heading?: string;
14
+ stagger?: boolean;
15
15
  }>();
16
16
 
17
17
  // Omit local props from delegated props
@@ -19,40 +19,40 @@ const delegatedProps = reactiveOmit(props, 'class', 'stagger');
19
19
 
20
20
  // Items float in one after another when the group mounts (same timing as the dropdown menu)
21
21
  const staggerClass = [
22
- '[&>*]:animate-[uv-float-in_240ms_var(--ease-out-expo)_both] [&>*]:[--uv-float-offset:-3px]',
23
- '[&>*:nth-child(2)]:[animation-delay:16ms]',
24
- '[&>*:nth-child(3)]:[animation-delay:32ms]',
25
- '[&>*:nth-child(4)]:[animation-delay:48ms]',
26
- '[&>*:nth-child(5)]:[animation-delay:64ms]',
27
- '[&>*:nth-child(6)]:[animation-delay:80ms]',
28
- '[&>*:nth-child(7)]:[animation-delay:96ms]',
29
- '[&>*:nth-child(8)]:[animation-delay:112ms]',
30
- '[&>*:nth-child(n+9)]:[animation-delay:128ms]'
22
+ '[&>*]:animate-[uv-float-in_240ms_var(--ease-out-expo)_both] [&>*]:[--uv-float-offset:-3px]',
23
+ '[&>*:nth-child(2)]:[animation-delay:16ms]',
24
+ '[&>*:nth-child(3)]:[animation-delay:32ms]',
25
+ '[&>*:nth-child(4)]:[animation-delay:48ms]',
26
+ '[&>*:nth-child(5)]:[animation-delay:64ms]',
27
+ '[&>*:nth-child(6)]:[animation-delay:80ms]',
28
+ '[&>*:nth-child(7)]:[animation-delay:96ms]',
29
+ '[&>*:nth-child(8)]:[animation-delay:112ms]',
30
+ '[&>*:nth-child(n+9)]:[animation-delay:128ms]'
31
31
  ].join(' ');
32
32
 
33
33
  const { allGroups, filterState } = useCommand();
34
34
  const id = useId();
35
35
 
36
36
  const isRender = computed(() =>
37
- !filterState.search ? true : filterState.filtered.groups.has(id),
37
+ !filterState.search ? true : filterState.filtered.groups.has(id),
38
38
  );
39
39
 
40
40
  provideCommandGroupContext({ id });
41
41
  onMounted(() => {
42
- if (!allGroups.value.has(id)) allGroups.value.set(id, new Set());
42
+ if (!allGroups.value.has(id)) allGroups.value.set(id, new Set());
43
43
  });
44
44
  onUnmounted(() => {
45
- allGroups.value.delete(id);
45
+ allGroups.value.delete(id);
46
46
  });
47
47
  </script>
48
48
 
49
49
  <template>
50
- <ListboxGroup v-bind="delegatedProps" :id="id" data-slot="command-group" :class="cn('text-foreground overflow-hidden', props.class)" :hidden="isRender ? undefined : true">
51
- <ListboxGroupLabel v-if="heading" data-slot="command-group-heading" class="border-b border-border px-3 py-2 text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
52
- {{ heading }}
53
- </ListboxGroupLabel>
54
- <div :class="cn('p-2', props.stagger && staggerClass)">
55
- <slot />
56
- </div>
57
- </ListboxGroup>
50
+ <ListboxGroup v-bind="delegatedProps" :id="id" data-slot="command-group" :class="cn('text-foreground overflow-hidden', props.class)" :hidden="isRender ? undefined : true">
51
+ <ListboxGroupLabel v-if="heading" data-slot="command-group-heading" class="border-b border-border px-3 py-2 text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground">
52
+ {{ heading }}
53
+ </ListboxGroupLabel>
54
+ <div :class="cn('p-2', props.stagger && staggerClass)">
55
+ <slot />
56
+ </div>
57
+ </ListboxGroup>
58
58
  </template>
@@ -9,7 +9,7 @@ import { cn } from '../../../lib/utils';
9
9
  import { useCommand } from '.';
10
10
 
11
11
  defineOptions({
12
- inheritAttrs: false,
12
+ inheritAttrs: false,
13
13
  });
14
14
 
15
15
  // Props
@@ -24,12 +24,12 @@ const { filterState } = useCommand();
24
24
  </script>
25
25
 
26
26
  <template>
27
- <div data-slot="command-input-wrapper" class="flex h-12 items-center gap-3 border-b border-border px-4">
28
- <HugeiconsIcon :icon="Search01Icon" class="size-4 shrink-0 text-muted-foreground" />
29
- <ListboxFilter v-bind="{ ...forwardedProps, ...$attrs }" v-model="filterState.search" data-slot="command-input" auto-focus :class="cn(
30
- 'placeholder:text-muted-foreground flex h-10 w-full rounded bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',
31
- props.class,
32
- )
33
- " />
34
- </div>
27
+ <div data-slot="command-input-wrapper" class="flex h-12 items-center gap-3 border-b border-border px-4">
28
+ <HugeiconsIcon :icon="Search01Icon" class="size-4 shrink-0 text-muted-foreground" />
29
+ <ListboxFilter v-bind="{ ...forwardedProps, ...$attrs }" v-model="filterState.search" data-slot="command-input" auto-focus :class="cn(
30
+ 'placeholder:text-muted-foreground flex h-10 w-full rounded bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',
31
+ props.class,
32
+ )
33
+ " />
34
+ </div>
35
35
  </template>