@brumaombra/ui-vintage 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/module.mjs +43 -43
  2. package/package.json +175 -175
  3. package/src/components/background-grid/BackgroundGrid.vue +4 -4
  4. package/src/components/blog/AllPostsSection.vue +33 -33
  5. package/src/components/blog/BlogContentRenderer.vue +111 -111
  6. package/src/components/blog/BlogFAQSection.vue +19 -19
  7. package/src/components/blog/BlogHeaderSection.vue +80 -80
  8. package/src/components/blog/BlogInfoSection.vue +47 -47
  9. package/src/components/blog/BlogPostHeader.vue +135 -135
  10. package/src/components/blog/BlogProgressBar.vue +33 -33
  11. package/src/components/blog/BlogSectionTitle.vue +22 -22
  12. package/src/components/blog/BlogTagsSection.vue +25 -25
  13. package/src/components/blog/CategoriesList.vue +14 -14
  14. package/src/components/blog/CategoriesSection.vue +11 -11
  15. package/src/components/blog/CategoryCard.vue +25 -25
  16. package/src/components/blog/HeaderCarousel.vue +97 -97
  17. package/src/components/blog/PostCard.vue +33 -33
  18. package/src/components/blog/PostsList.vue +15 -15
  19. package/src/components/blog/SocialShareSidebar.vue +84 -84
  20. package/src/components/blog/TableOfContents.vue +307 -307
  21. package/src/components/busy-indicator/BusyIndicator.vue +7 -7
  22. package/src/components/busy-indicator/busy-indicator-state.ts +56 -56
  23. package/src/components/card-grid/CardGrid.vue +34 -34
  24. package/src/components/chip/Chip.vue +15 -15
  25. package/src/components/confirm-dialog/ConfirmDialog.vue +50 -50
  26. package/src/components/confirm-dialog/confirm-dialog-state.ts +131 -131
  27. package/src/components/content/BlogList.vue +30 -30
  28. package/src/components/content/BlogTable.vue +36 -36
  29. package/src/components/content/CodeBlock.vue +136 -136
  30. package/src/components/content/Flow.vue +60 -60
  31. package/src/components/content/ProseHr.vue +15 -15
  32. package/src/components/content/ProsePre.vue +12 -12
  33. package/src/components/content/Terminal.vue +59 -59
  34. package/src/components/cookie-consent/CookieConsent.vue +36 -36
  35. package/src/components/cookie-consent/useCookieConsent.ts +37 -37
  36. package/src/components/dashboard-shell/DashboardShell.vue +171 -171
  37. package/src/components/data-list/DataList.vue +6 -6
  38. package/src/components/data-list/DataListItem.vue +4 -4
  39. package/src/components/data-list/DataListLabel.vue +4 -4
  40. package/src/components/data-list/DataListText.vue +4 -4
  41. package/src/components/data-list/DataListValue.vue +4 -4
  42. package/src/components/empty-state-card/EmptyStateCard.vue +40 -40
  43. package/src/components/error-page/ErrorPage.vue +72 -72
  44. package/src/components/info-card/InfoCard.vue +31 -31
  45. package/src/components/landing/landing-content/LandingContent.vue +4 -4
  46. package/src/components/landing/landing-footer/LandingFooter.vue +128 -128
  47. package/src/components/landing/landing-navbar/LandingNavbar.vue +50 -50
  48. package/src/components/landing/landing-shell/LandingShell.vue +36 -36
  49. package/src/components/language-flag/LanguageFlag.vue +25 -25
  50. package/src/components/language-flag/flags/ChineseFlag.vue +8 -8
  51. package/src/components/language-flag/flags/EnglishFlag.vue +7 -7
  52. package/src/components/language-flag/flags/FrenchFlag.vue +5 -5
  53. package/src/components/language-flag/flags/GermanFlag.vue +5 -5
  54. package/src/components/language-flag/flags/ItalianFlag.vue +7 -7
  55. package/src/components/language-flag/flags/JapaneseFlag.vue +4 -4
  56. package/src/components/language-flag/flags/PortugueseFlag.vue +57 -57
  57. package/src/components/language-flag/flags/RussianFlag.vue +5 -5
  58. package/src/components/language-flag/flags/SpanishFlag.vue +4 -4
  59. package/src/components/language-selector/LanguageSelector.vue +76 -76
  60. package/src/components/load-more-button/LoadMoreButton.vue +17 -17
  61. package/src/components/loading-state-card/LoadingStateCard.vue +28 -28
  62. package/src/components/message-dialog/MessageDialog.vue +59 -59
  63. package/src/components/message-dialog/message-dialog-state.ts +105 -105
  64. package/src/components/message-toast/MessageToast.vue +149 -149
  65. package/src/components/message-toast/message-toast-state.ts +146 -146
  66. package/src/components/page-header/PageHeader.vue +34 -34
  67. package/src/components/progress-component/ProgressComponent.vue +33 -33
  68. package/src/components/single-value-card/SingleValueCard.vue +57 -57
  69. package/src/components/slider-form-component/SliderFormComponent.vue +36 -36
  70. package/src/components/stat-strip/StatStrip.vue +22 -22
  71. package/src/components/switch-form-component/SwitchFormComponent.vue +20 -20
  72. package/src/components/text-link/TextLink.vue +14 -14
  73. package/src/components/theme-selector/ThemeSelector.vue +61 -61
  74. package/src/components/theme-selector/theme-transition.ts +63 -63
  75. package/src/components/ui/accordion/Accordion.vue +38 -38
  76. package/src/components/ui/alert/Alert.vue +5 -5
  77. package/src/components/ui/alert/AlertDescription.vue +4 -4
  78. package/src/components/ui/alert/AlertTitle.vue +4 -4
  79. package/src/components/ui/alert/index.ts +2 -2
  80. package/src/components/ui/alert-dialog/AlertDialog.vue +3 -3
  81. package/src/components/ui/alert-dialog/AlertDialogAction.vue +3 -3
  82. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +3 -3
  83. package/src/components/ui/alert-dialog/AlertDialogContent.vue +7 -7
  84. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +3 -3
  85. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +4 -4
  86. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +4 -4
  87. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +3 -3
  88. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -3
  89. package/src/components/ui/animated-number/AnimatedNumber.vue +49 -48
  90. package/src/components/ui/avatar/Avatar.vue +28 -28
  91. package/src/components/ui/avatar/AvatarFallback.vue +6 -6
  92. package/src/components/ui/avatar/AvatarGroup.vue +40 -40
  93. package/src/components/ui/avatar/AvatarImage.vue +3 -3
  94. package/src/components/ui/avatar/index.ts +17 -17
  95. package/src/components/ui/badge/Badge.vue +20 -20
  96. package/src/components/ui/breadcrumb/Breadcrumb.vue +4 -4
  97. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +9 -9
  98. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +4 -4
  99. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +4 -4
  100. package/src/components/ui/breadcrumb/BreadcrumbList.vue +4 -4
  101. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +4 -4
  102. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +4 -4
  103. package/src/components/ui/busy/Busy.vue +33 -33
  104. package/src/components/ui/button/Button.vue +23 -23
  105. package/src/components/ui/button/index.ts +56 -56
  106. package/src/components/ui/calendar/Calendar.vue +138 -138
  107. package/src/components/ui/calendar/CalendarCell.vue +7 -7
  108. package/src/components/ui/calendar/CalendarCellTrigger.vue +18 -18
  109. package/src/components/ui/calendar/CalendarGrid.vue +3 -3
  110. package/src/components/ui/calendar/CalendarGridBody.vue +3 -3
  111. package/src/components/ui/calendar/CalendarGridHead.vue +3 -3
  112. package/src/components/ui/calendar/CalendarGridRow.vue +3 -3
  113. package/src/components/ui/calendar/CalendarHeadCell.vue +7 -7
  114. package/src/components/ui/calendar/CalendarHeader.vue +7 -7
  115. package/src/components/ui/calendar/CalendarHeading.vue +6 -6
  116. package/src/components/ui/calendar/CalendarNextButton.vue +15 -15
  117. package/src/components/ui/calendar/CalendarPrevButton.vue +15 -15
  118. package/src/components/ui/calendar/index.ts +4 -4
  119. package/src/components/ui/card/Card.vue +20 -20
  120. package/src/components/ui/card/CardAction.vue +8 -8
  121. package/src/components/ui/card/CardContent.vue +4 -4
  122. package/src/components/ui/card/CardDescription.vue +12 -12
  123. package/src/components/ui/card/CardFooter.vue +4 -4
  124. package/src/components/ui/card/CardHeader.vue +8 -8
  125. package/src/components/ui/card/CardText.vue +8 -8
  126. package/src/components/ui/card/CardTitle.vue +8 -8
  127. package/src/components/ui/checkbox/Checkbox.vue +27 -27
  128. package/src/components/ui/collapsible/Collapsible.vue +3 -3
  129. package/src/components/ui/collapsible/CollapsibleContent.vue +3 -3
  130. package/src/components/ui/collapsible/CollapsibleTrigger.vue +3 -3
  131. package/src/components/ui/combobox/Combobox.vue +4 -4
  132. package/src/components/ui/combobox/ComboboxAnchor.vue +16 -16
  133. package/src/components/ui/combobox/ComboboxEmpty.vue +3 -3
  134. package/src/components/ui/combobox/ComboboxGroup.vue +9 -9
  135. package/src/components/ui/combobox/ComboboxInput.vue +6 -6
  136. package/src/components/ui/combobox/ComboboxItem.vue +17 -17
  137. package/src/components/ui/combobox/ComboboxList.vue +19 -19
  138. package/src/components/ui/combobox/ComboboxSelect.vue +77 -77
  139. package/src/components/ui/combobox/ComboboxSeparator.vue +1 -1
  140. package/src/components/ui/combobox/ComboboxTrigger.vue +10 -10
  141. package/src/components/ui/combobox/types.ts +5 -5
  142. package/src/components/ui/command/Command.vue +48 -48
  143. package/src/components/ui/command/CommandDialog.vue +14 -14
  144. package/src/components/ui/command/CommandEmpty.vue +4 -4
  145. package/src/components/ui/command/CommandGroup.vue +23 -23
  146. package/src/components/ui/command/CommandInput.vue +9 -9
  147. package/src/components/ui/command/CommandItem.vue +40 -40
  148. package/src/components/ui/command/CommandList.vue +9 -9
  149. package/src/components/ui/command/CommandSeparator.vue +3 -3
  150. package/src/components/ui/command/CommandShortcut.vue +8 -8
  151. package/src/components/ui/command/index.ts +11 -11
  152. package/src/components/ui/data-table/DataTable.vue +145 -145
  153. package/src/components/ui/data-table/index.ts +11 -11
  154. package/src/components/ui/date-picker/DatePicker.vue +31 -31
  155. package/src/components/ui/date-time-picker/DateTimePicker.vue +97 -97
  156. package/src/components/ui/dialog/Dialog.vue +3 -3
  157. package/src/components/ui/dialog/DialogClose.vue +3 -3
  158. package/src/components/ui/dialog/DialogContent.vue +21 -21
  159. package/src/components/ui/dialog/DialogDescription.vue +7 -7
  160. package/src/components/ui/dialog/DialogFooter.vue +8 -8
  161. package/src/components/ui/dialog/DialogHeader.vue +4 -4
  162. package/src/components/ui/dialog/DialogOverlay.vue +7 -7
  163. package/src/components/ui/dialog/DialogScrollContent.vue +32 -32
  164. package/src/components/ui/dialog/DialogTitle.vue +3 -3
  165. package/src/components/ui/dialog/DialogTrigger.vue +3 -3
  166. package/src/components/ui/dropdown-menu/DropdownMenu.vue +3 -3
  167. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +11 -11
  168. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +15 -15
  169. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +3 -3
  170. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +12 -12
  171. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +9 -9
  172. package/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +3 -3
  173. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +3 -3
  174. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +11 -11
  175. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -1
  176. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +4 -4
  177. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -3
  178. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +15 -15
  179. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +15 -15
  180. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +3 -3
  181. package/src/components/ui/dropdown-menu/classes.ts +16 -16
  182. package/src/components/ui/field/Field.vue +5 -5
  183. package/src/components/ui/field/FieldContent.vue +8 -8
  184. package/src/components/ui/field/FieldDescription.vue +10 -10
  185. package/src/components/ui/field/FieldError.vue +39 -39
  186. package/src/components/ui/field/FieldGroup.vue +8 -8
  187. package/src/components/ui/field/FieldLabel.vue +10 -10
  188. package/src/components/ui/field/FieldLegend.vue +11 -11
  189. package/src/components/ui/field/FieldSeparator.vue +11 -11
  190. package/src/components/ui/field/FieldSet.vue +9 -9
  191. package/src/components/ui/field/FieldTitle.vue +8 -8
  192. package/src/components/ui/field/field-context.ts +36 -36
  193. package/src/components/ui/field/index.ts +22 -22
  194. package/src/components/ui/file-dropzone/FileDropzone.vue +144 -144
  195. package/src/components/ui/file-dropzone/index.ts +19 -19
  196. package/src/components/ui/hover-card/HoverCard.vue +5 -5
  197. package/src/components/ui/hover-card/HoverCardContent.vue +13 -13
  198. package/src/components/ui/hover-card/HoverCardTrigger.vue +3 -3
  199. package/src/components/ui/input/Input.vue +13 -13
  200. package/src/components/ui/kbd/Kbd.vue +10 -10
  201. package/src/components/ui/kbd/KbdGroup.vue +49 -49
  202. package/src/components/ui/label/Label.vue +7 -7
  203. package/src/components/ui/native-select/NativeSelect.vue +16 -16
  204. package/src/components/ui/native-select/NativeSelectOptGroup.vue +3 -3
  205. package/src/components/ui/native-select/NativeSelectOption.vue +3 -3
  206. package/src/components/ui/number-field/NumberField.vue +88 -88
  207. package/src/components/ui/pagination/Pagination.vue +4 -4
  208. package/src/components/ui/pagination/PaginationContent.vue +4 -4
  209. package/src/components/ui/pagination/PaginationEllipsis.vue +9 -9
  210. package/src/components/ui/pagination/PaginationFirst.vue +8 -8
  211. package/src/components/ui/pagination/PaginationItem.vue +14 -14
  212. package/src/components/ui/pagination/PaginationLast.vue +8 -8
  213. package/src/components/ui/pagination/PaginationNext.vue +8 -8
  214. package/src/components/ui/pagination/PaginationPrevious.vue +8 -8
  215. package/src/components/ui/pagination/SimplePagination.vue +25 -25
  216. package/src/components/ui/pin-input/PinInput.vue +20 -20
  217. package/src/components/ui/pin-input/PinInputInput.vue +17 -17
  218. package/src/components/ui/pin-input/context.ts +1 -1
  219. package/src/components/ui/popover/Popover.vue +3 -3
  220. package/src/components/ui/popover/PopoverAnchor.vue +3 -3
  221. package/src/components/ui/popover/PopoverContent.vue +12 -12
  222. package/src/components/ui/popover/PopoverTrigger.vue +3 -3
  223. package/src/components/ui/progress/Progress.vue +16 -16
  224. package/src/components/ui/radio-group/RadioGroup.vue +7 -7
  225. package/src/components/ui/radio-group/RadioGroupCard.vue +39 -39
  226. package/src/components/ui/radio-group/RadioGroupItem.vue +20 -20
  227. package/src/components/ui/scroll-area/ScrollArea.vue +14 -14
  228. package/src/components/ui/scroll-area/ScrollBar.vue +12 -12
  229. package/src/components/ui/select/Select.vue +3 -3
  230. package/src/components/ui/select/SelectContent.vue +25 -25
  231. package/src/components/ui/select/SelectGroup.vue +3 -3
  232. package/src/components/ui/select/SelectItem.vue +24 -24
  233. package/src/components/ui/select/SelectItemContent.vue +32 -32
  234. package/src/components/ui/select/SelectItemText.vue +3 -3
  235. package/src/components/ui/select/SelectLabel.vue +3 -3
  236. package/src/components/ui/select/SelectScrollDownButton.vue +9 -9
  237. package/src/components/ui/select/SelectScrollUpButton.vue +9 -9
  238. package/src/components/ui/select/SelectSeparator.vue +2 -2
  239. package/src/components/ui/select/SelectTrigger.vue +14 -14
  240. package/src/components/ui/select/SelectValue.vue +3 -3
  241. package/src/components/ui/select/SelectValueContent.vue +39 -39
  242. package/src/components/ui/separator/Separator.vue +7 -7
  243. package/src/components/ui/sheet/Sheet.vue +3 -3
  244. package/src/components/ui/sheet/SheetClose.vue +3 -3
  245. package/src/components/ui/sheet/SheetContent.vue +22 -22
  246. package/src/components/ui/sheet/SheetDescription.vue +3 -3
  247. package/src/components/ui/sheet/SheetFooter.vue +3 -3
  248. package/src/components/ui/sheet/SheetHeader.vue +3 -3
  249. package/src/components/ui/sheet/SheetOverlay.vue +7 -7
  250. package/src/components/ui/sheet/SheetTitle.vue +3 -3
  251. package/src/components/ui/sheet/SheetTrigger.vue +3 -3
  252. package/src/components/ui/sidebar/Sidebar.vue +57 -57
  253. package/src/components/ui/sidebar/SidebarContent.vue +8 -8
  254. package/src/components/ui/sidebar/SidebarFooter.vue +8 -8
  255. package/src/components/ui/sidebar/SidebarGroup.vue +8 -8
  256. package/src/components/ui/sidebar/SidebarGroupAction.vue +9 -9
  257. package/src/components/ui/sidebar/SidebarGroupContent.vue +4 -4
  258. package/src/components/ui/sidebar/SidebarGroupLabel.vue +8 -8
  259. package/src/components/ui/sidebar/SidebarHeader.vue +8 -8
  260. package/src/components/ui/sidebar/SidebarInput.vue +8 -8
  261. package/src/components/ui/sidebar/SidebarInset.vue +9 -9
  262. package/src/components/ui/sidebar/SidebarMenu.vue +4 -4
  263. package/src/components/ui/sidebar/SidebarMenuAction.vue +18 -18
  264. package/src/components/ui/sidebar/SidebarMenuBadge.vue +14 -14
  265. package/src/components/ui/sidebar/SidebarMenuButton.vue +21 -21
  266. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +10 -10
  267. package/src/components/ui/sidebar/SidebarMenuItem.vue +4 -4
  268. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +10 -10
  269. package/src/components/ui/sidebar/SidebarMenuSub.vue +9 -9
  270. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +17 -17
  271. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +4 -4
  272. package/src/components/ui/sidebar/SidebarProvider.vue +46 -46
  273. package/src/components/ui/sidebar/SidebarRail.vue +13 -13
  274. package/src/components/ui/sidebar/SidebarSeparator.vue +4 -4
  275. package/src/components/ui/sidebar/SidebarTrigger.vue +5 -5
  276. package/src/components/ui/sidebar/index.ts +29 -29
  277. package/src/components/ui/sidebar/utils.ts +7 -7
  278. package/src/components/ui/skeleton/Skeleton.vue +6 -6
  279. package/src/components/ui/slider/Slider.vue +14 -14
  280. package/src/components/ui/spinner/Spinner.vue +21 -21
  281. package/src/components/ui/stepper/SimpleStepper.vue +26 -26
  282. package/src/components/ui/stepper/Stepper.vue +6 -6
  283. package/src/components/ui/stepper/StepperDescription.vue +5 -5
  284. package/src/components/ui/stepper/StepperIndicator.vue +17 -17
  285. package/src/components/ui/stepper/StepperItem.vue +4 -4
  286. package/src/components/ui/stepper/StepperSeparator.vue +7 -7
  287. package/src/components/ui/stepper/StepperTitle.vue +5 -5
  288. package/src/components/ui/stepper/StepperTrigger.vue +4 -4
  289. package/src/components/ui/stepper/index.ts +3 -3
  290. package/src/components/ui/switch/Switch.vue +15 -15
  291. package/src/components/ui/table/Table.vue +6 -6
  292. package/src/components/ui/table/TableBody.vue +4 -4
  293. package/src/components/ui/table/TableCaption.vue +4 -4
  294. package/src/components/ui/table/TableCell.vue +8 -8
  295. package/src/components/ui/table/TableEmpty.vue +14 -14
  296. package/src/components/ui/table/TableFooter.vue +8 -8
  297. package/src/components/ui/table/TableHead.vue +8 -8
  298. package/src/components/ui/table/TableHeader.vue +4 -4
  299. package/src/components/ui/table/TableRow.vue +8 -8
  300. package/src/components/ui/tabs/Tabs.vue +4 -4
  301. package/src/components/ui/tabs/TabsContent.vue +4 -4
  302. package/src/components/ui/tabs/TabsList.vue +15 -15
  303. package/src/components/ui/tabs/TabsTrigger.vue +10 -10
  304. package/src/components/ui/tags-input/TagsInput.vue +17 -17
  305. package/src/components/ui/tags-input/TagsInputInput.vue +6 -6
  306. package/src/components/ui/tags-input/TagsInputItem.vue +15 -15
  307. package/src/components/ui/tags-input/TagsInputItemDelete.vue +12 -12
  308. package/src/components/ui/tags-input/TagsInputItemText.vue +4 -4
  309. package/src/components/ui/textarea/Textarea.vue +12 -12
  310. package/src/components/ui/time-picker/TimePicker.vue +25 -25
  311. package/src/components/ui/toggle-group/Toggle.vue +10 -10
  312. package/src/components/ui/toggle-group/ToggleGroup.vue +38 -38
  313. package/src/components/ui/toggle-group/ToggleGroupItem.vue +9 -9
  314. package/src/components/ui/toggle-group/index.ts +46 -46
  315. package/src/components/ui/tooltip/Tooltip.vue +3 -3
  316. package/src/components/ui/tooltip/TooltipContent.vue +13 -13
  317. package/src/components/ui/tooltip/TooltipProvider.vue +4 -4
  318. package/src/components/ui/tooltip/TooltipTrigger.vue +3 -3
  319. package/src/i18n/de.json +185 -185
  320. package/src/i18n/en.json +185 -185
  321. package/src/i18n/es.json +185 -185
  322. package/src/i18n/fr.json +185 -185
  323. package/src/i18n/it.json +185 -185
  324. package/src/i18n/ja.json +185 -185
  325. package/src/i18n/pt.json +185 -185
  326. package/src/i18n/ru.json +185 -185
  327. package/src/i18n/zh.json +185 -185
  328. package/src/lib/color-tokens.ts +24 -24
  329. package/src/lib/i18n.ts +65 -65
  330. package/src/lib/utils.ts +33 -33
  331. package/src/nuxt-components.d.ts +2 -2
  332. package/src/runtime/ui-vintage-i18n-plugin.ts +49 -49
  333. package/src/shims-vue.d.ts +3 -3
  334. package/src/styles.css +377 -377
@@ -6,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>