@brumaombra/ui-vintage 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/AGENTS.md +1 -1
  2. package/COMPONENTS.md +1 -1
  3. package/README.md +3 -3
  4. package/module.mjs +43 -43
  5. package/package.json +175 -175
  6. package/src/components/background-grid/BackgroundGrid.vue +4 -4
  7. package/src/components/blog/AllPostsSection.vue +33 -33
  8. package/src/components/blog/BlogContentRenderer.vue +111 -111
  9. package/src/components/blog/BlogFAQSection.vue +20 -20
  10. package/src/components/blog/BlogHeaderSection.vue +81 -81
  11. package/src/components/blog/BlogInfoSection.vue +50 -48
  12. package/src/components/blog/BlogPostHeader.vue +135 -135
  13. package/src/components/blog/BlogProgressBar.vue +33 -33
  14. package/src/components/blog/BlogSectionTitle.vue +22 -22
  15. package/src/components/blog/BlogTagsSection.vue +25 -25
  16. package/src/components/blog/CategoriesList.vue +14 -14
  17. package/src/components/blog/CategoriesSection.vue +11 -11
  18. package/src/components/blog/CategoryCard.vue +27 -26
  19. package/src/components/blog/HeaderCarousel.vue +99 -98
  20. package/src/components/blog/PostCard.vue +34 -34
  21. package/src/components/blog/PostsList.vue +15 -15
  22. package/src/components/blog/SocialShareSidebar.vue +92 -85
  23. package/src/components/blog/TableOfContents.vue +310 -308
  24. package/src/components/busy-indicator/BusyIndicator.vue +7 -7
  25. package/src/components/busy-indicator/busy-indicator-state.ts +56 -56
  26. package/src/components/card-grid/CardGrid.vue +35 -35
  27. package/src/components/chip/Chip.vue +16 -16
  28. package/src/components/confirm-dialog/ConfirmDialog.vue +51 -51
  29. package/src/components/confirm-dialog/confirm-dialog-state.ts +131 -131
  30. package/src/components/content/BlogList.vue +32 -31
  31. package/src/components/content/BlogTable.vue +36 -36
  32. package/src/components/content/CodeBlock.vue +139 -137
  33. package/src/components/content/Flow.vue +60 -60
  34. package/src/components/content/ProseHr.vue +16 -16
  35. package/src/components/content/ProsePre.vue +12 -12
  36. package/src/components/content/Terminal.vue +62 -60
  37. package/src/components/cookie-consent/CookieConsent.vue +36 -36
  38. package/src/components/cookie-consent/useCookieConsent.ts +37 -37
  39. package/src/components/dashboard-shell/DashboardShell.vue +171 -171
  40. package/src/components/data-list/DataList.vue +6 -6
  41. package/src/components/data-list/DataListItem.vue +4 -4
  42. package/src/components/data-list/DataListLabel.vue +4 -4
  43. package/src/components/data-list/DataListText.vue +4 -4
  44. package/src/components/data-list/DataListValue.vue +4 -4
  45. package/src/components/empty-state-card/EmptyStateCard.vue +41 -41
  46. package/src/components/error-page/ErrorPage.vue +73 -73
  47. package/src/components/info-card/InfoCard.vue +31 -31
  48. package/src/components/landing/landing-content/LandingContent.vue +4 -4
  49. package/src/components/landing/landing-footer/LandingFooter.vue +129 -129
  50. package/src/components/landing/landing-navbar/LandingNavbar.vue +50 -50
  51. package/src/components/landing/landing-shell/LandingShell.vue +36 -36
  52. package/src/components/language-flag/LanguageFlag.vue +25 -25
  53. package/src/components/language-flag/flags/ChineseFlag.vue +8 -8
  54. package/src/components/language-flag/flags/EnglishFlag.vue +7 -7
  55. package/src/components/language-flag/flags/FrenchFlag.vue +5 -5
  56. package/src/components/language-flag/flags/GermanFlag.vue +5 -5
  57. package/src/components/language-flag/flags/ItalianFlag.vue +7 -7
  58. package/src/components/language-flag/flags/JapaneseFlag.vue +4 -4
  59. package/src/components/language-flag/flags/PortugueseFlag.vue +57 -57
  60. package/src/components/language-flag/flags/RussianFlag.vue +5 -5
  61. package/src/components/language-flag/flags/SpanishFlag.vue +4 -4
  62. package/src/components/language-selector/LanguageSelector.vue +77 -77
  63. package/src/components/load-more-button/LoadMoreButton.vue +19 -18
  64. package/src/components/loading-state-card/LoadingStateCard.vue +29 -29
  65. package/src/components/message-dialog/MessageDialog.vue +62 -60
  66. package/src/components/message-dialog/message-dialog-state.ts +105 -105
  67. package/src/components/message-toast/MessageToast.vue +153 -150
  68. package/src/components/message-toast/message-toast-state.ts +146 -146
  69. package/src/components/page-header/PageHeader.vue +34 -34
  70. package/src/components/progress-component/ProgressComponent.vue +33 -33
  71. package/src/components/single-value-card/SingleValueCard.vue +59 -58
  72. package/src/components/slider-form-component/SliderFormComponent.vue +36 -36
  73. package/src/components/stat-strip/StatStrip.vue +22 -22
  74. package/src/components/switch-form-component/SwitchFormComponent.vue +20 -20
  75. package/src/components/text-link/TextLink.vue +14 -14
  76. package/src/components/theme-selector/ThemeSelector.vue +65 -62
  77. package/src/components/theme-selector/theme-transition.ts +63 -63
  78. package/src/components/ui/accordion/Accordion.vue +39 -39
  79. package/src/components/ui/alert/Alert.vue +5 -5
  80. package/src/components/ui/alert/AlertDescription.vue +4 -4
  81. package/src/components/ui/alert/AlertTitle.vue +4 -4
  82. package/src/components/ui/alert/index.ts +2 -2
  83. package/src/components/ui/alert-dialog/AlertDialog.vue +3 -3
  84. package/src/components/ui/alert-dialog/AlertDialogAction.vue +3 -3
  85. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +3 -3
  86. package/src/components/ui/alert-dialog/AlertDialogContent.vue +7 -7
  87. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +3 -3
  88. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +4 -4
  89. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +4 -4
  90. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +3 -3
  91. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +3 -3
  92. package/src/components/ui/animated-number/AnimatedNumber.vue +49 -48
  93. package/src/components/ui/avatar/Avatar.vue +28 -28
  94. package/src/components/ui/avatar/AvatarFallback.vue +6 -6
  95. package/src/components/ui/avatar/AvatarGroup.vue +40 -40
  96. package/src/components/ui/avatar/AvatarImage.vue +3 -3
  97. package/src/components/ui/avatar/index.ts +17 -17
  98. package/src/components/ui/badge/Badge.vue +20 -20
  99. package/src/components/ui/breadcrumb/Breadcrumb.vue +4 -4
  100. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +10 -10
  101. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +4 -4
  102. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +4 -4
  103. package/src/components/ui/breadcrumb/BreadcrumbList.vue +4 -4
  104. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +4 -4
  105. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +4 -4
  106. package/src/components/ui/busy/Busy.vue +33 -33
  107. package/src/components/ui/button/Button.vue +23 -23
  108. package/src/components/ui/button/index.ts +56 -56
  109. package/src/components/ui/calendar/Calendar.vue +138 -138
  110. package/src/components/ui/calendar/CalendarCell.vue +7 -7
  111. package/src/components/ui/calendar/CalendarCellTrigger.vue +18 -18
  112. package/src/components/ui/calendar/CalendarGrid.vue +3 -3
  113. package/src/components/ui/calendar/CalendarGridBody.vue +3 -3
  114. package/src/components/ui/calendar/CalendarGridHead.vue +3 -3
  115. package/src/components/ui/calendar/CalendarGridRow.vue +3 -3
  116. package/src/components/ui/calendar/CalendarHeadCell.vue +7 -7
  117. package/src/components/ui/calendar/CalendarHeader.vue +7 -7
  118. package/src/components/ui/calendar/CalendarHeading.vue +6 -6
  119. package/src/components/ui/calendar/CalendarNextButton.vue +16 -16
  120. package/src/components/ui/calendar/CalendarPrevButton.vue +16 -16
  121. package/src/components/ui/calendar/index.ts +4 -4
  122. package/src/components/ui/card/Card.vue +20 -20
  123. package/src/components/ui/card/CardAction.vue +8 -8
  124. package/src/components/ui/card/CardContent.vue +4 -4
  125. package/src/components/ui/card/CardDescription.vue +12 -12
  126. package/src/components/ui/card/CardFooter.vue +4 -4
  127. package/src/components/ui/card/CardHeader.vue +8 -8
  128. package/src/components/ui/card/CardText.vue +8 -8
  129. package/src/components/ui/card/CardTitle.vue +8 -8
  130. package/src/components/ui/checkbox/Checkbox.vue +27 -27
  131. package/src/components/ui/collapsible/Collapsible.vue +3 -3
  132. package/src/components/ui/collapsible/CollapsibleContent.vue +3 -3
  133. package/src/components/ui/collapsible/CollapsibleTrigger.vue +3 -3
  134. package/src/components/ui/combobox/Combobox.vue +4 -4
  135. package/src/components/ui/combobox/ComboboxAnchor.vue +16 -16
  136. package/src/components/ui/combobox/ComboboxEmpty.vue +3 -3
  137. package/src/components/ui/combobox/ComboboxGroup.vue +9 -9
  138. package/src/components/ui/combobox/ComboboxInput.vue +6 -6
  139. package/src/components/ui/combobox/ComboboxItem.vue +18 -18
  140. package/src/components/ui/combobox/ComboboxList.vue +19 -19
  141. package/src/components/ui/combobox/ComboboxSelect.vue +79 -78
  142. package/src/components/ui/combobox/ComboboxSeparator.vue +1 -1
  143. package/src/components/ui/combobox/ComboboxTrigger.vue +11 -11
  144. package/src/components/ui/combobox/types.ts +5 -5
  145. package/src/components/ui/command/Command.vue +48 -48
  146. package/src/components/ui/command/CommandDialog.vue +14 -14
  147. package/src/components/ui/command/CommandEmpty.vue +4 -4
  148. package/src/components/ui/command/CommandGroup.vue +23 -23
  149. package/src/components/ui/command/CommandInput.vue +10 -10
  150. package/src/components/ui/command/CommandItem.vue +40 -40
  151. package/src/components/ui/command/CommandList.vue +9 -9
  152. package/src/components/ui/command/CommandSeparator.vue +3 -3
  153. package/src/components/ui/command/CommandShortcut.vue +8 -8
  154. package/src/components/ui/command/index.ts +11 -11
  155. package/src/components/ui/data-table/DataTable.vue +147 -146
  156. package/src/components/ui/data-table/index.ts +11 -11
  157. package/src/components/ui/date-picker/DatePicker.vue +32 -32
  158. package/src/components/ui/date-time-picker/DateTimePicker.vue +97 -97
  159. package/src/components/ui/dialog/Dialog.vue +3 -3
  160. package/src/components/ui/dialog/DialogClose.vue +3 -3
  161. package/src/components/ui/dialog/DialogContent.vue +22 -22
  162. package/src/components/ui/dialog/DialogDescription.vue +7 -7
  163. package/src/components/ui/dialog/DialogFooter.vue +8 -8
  164. package/src/components/ui/dialog/DialogHeader.vue +4 -4
  165. package/src/components/ui/dialog/DialogOverlay.vue +7 -7
  166. package/src/components/ui/dialog/DialogScrollContent.vue +33 -33
  167. package/src/components/ui/dialog/DialogTitle.vue +3 -3
  168. package/src/components/ui/dialog/DialogTrigger.vue +3 -3
  169. package/src/components/ui/dropdown-menu/DropdownMenu.vue +3 -3
  170. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +12 -12
  171. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +15 -15
  172. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +3 -3
  173. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +12 -12
  174. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +9 -9
  175. package/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +3 -3
  176. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +3 -3
  177. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +11 -11
  178. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +1 -1
  179. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +4 -4
  180. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +3 -3
  181. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +15 -15
  182. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +16 -16
  183. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +3 -3
  184. package/src/components/ui/dropdown-menu/classes.ts +16 -16
  185. package/src/components/ui/field/Field.vue +5 -5
  186. package/src/components/ui/field/FieldContent.vue +8 -8
  187. package/src/components/ui/field/FieldDescription.vue +10 -10
  188. package/src/components/ui/field/FieldError.vue +39 -39
  189. package/src/components/ui/field/FieldGroup.vue +8 -8
  190. package/src/components/ui/field/FieldLabel.vue +10 -10
  191. package/src/components/ui/field/FieldLegend.vue +11 -11
  192. package/src/components/ui/field/FieldSeparator.vue +11 -11
  193. package/src/components/ui/field/FieldSet.vue +9 -9
  194. package/src/components/ui/field/FieldTitle.vue +8 -8
  195. package/src/components/ui/field/field-context.ts +36 -36
  196. package/src/components/ui/field/index.ts +22 -22
  197. package/src/components/ui/file-dropzone/FileDropzone.vue +163 -154
  198. package/src/components/ui/file-dropzone/index.ts +19 -19
  199. package/src/components/ui/hover-card/HoverCard.vue +5 -5
  200. package/src/components/ui/hover-card/HoverCardContent.vue +13 -13
  201. package/src/components/ui/hover-card/HoverCardTrigger.vue +3 -3
  202. package/src/components/ui/input/Input.vue +13 -13
  203. package/src/components/ui/kbd/Kbd.vue +10 -10
  204. package/src/components/ui/kbd/KbdGroup.vue +49 -49
  205. package/src/components/ui/label/Label.vue +7 -7
  206. package/src/components/ui/native-select/NativeSelect.vue +17 -17
  207. package/src/components/ui/native-select/NativeSelectOptGroup.vue +3 -3
  208. package/src/components/ui/native-select/NativeSelectOption.vue +3 -3
  209. package/src/components/ui/number-field/NumberField.vue +90 -89
  210. package/src/components/ui/pagination/Pagination.vue +4 -4
  211. package/src/components/ui/pagination/PaginationContent.vue +4 -4
  212. package/src/components/ui/pagination/PaginationEllipsis.vue +10 -10
  213. package/src/components/ui/pagination/PaginationFirst.vue +9 -9
  214. package/src/components/ui/pagination/PaginationItem.vue +14 -14
  215. package/src/components/ui/pagination/PaginationLast.vue +9 -9
  216. package/src/components/ui/pagination/PaginationNext.vue +9 -9
  217. package/src/components/ui/pagination/PaginationPrevious.vue +9 -9
  218. package/src/components/ui/pagination/SimplePagination.vue +25 -25
  219. package/src/components/ui/pin-input/PinInput.vue +20 -20
  220. package/src/components/ui/pin-input/PinInputInput.vue +17 -17
  221. package/src/components/ui/pin-input/context.ts +1 -1
  222. package/src/components/ui/popover/Popover.vue +3 -3
  223. package/src/components/ui/popover/PopoverAnchor.vue +3 -3
  224. package/src/components/ui/popover/PopoverContent.vue +12 -12
  225. package/src/components/ui/popover/PopoverTrigger.vue +3 -3
  226. package/src/components/ui/progress/Progress.vue +16 -16
  227. package/src/components/ui/radio-group/RadioGroup.vue +7 -7
  228. package/src/components/ui/radio-group/RadioGroupCard.vue +39 -39
  229. package/src/components/ui/radio-group/RadioGroupItem.vue +20 -20
  230. package/src/components/ui/scroll-area/ScrollArea.vue +14 -14
  231. package/src/components/ui/scroll-area/ScrollBar.vue +12 -12
  232. package/src/components/ui/select/Select.vue +3 -3
  233. package/src/components/ui/select/SelectContent.vue +25 -25
  234. package/src/components/ui/select/SelectGroup.vue +3 -3
  235. package/src/components/ui/select/SelectItem.vue +25 -25
  236. package/src/components/ui/select/SelectItemContent.vue +32 -32
  237. package/src/components/ui/select/SelectItemText.vue +3 -3
  238. package/src/components/ui/select/SelectLabel.vue +3 -3
  239. package/src/components/ui/select/SelectScrollDownButton.vue +10 -10
  240. package/src/components/ui/select/SelectScrollUpButton.vue +10 -10
  241. package/src/components/ui/select/SelectSeparator.vue +2 -2
  242. package/src/components/ui/select/SelectTrigger.vue +15 -15
  243. package/src/components/ui/select/SelectValue.vue +3 -3
  244. package/src/components/ui/select/SelectValueContent.vue +39 -39
  245. package/src/components/ui/separator/Separator.vue +7 -7
  246. package/src/components/ui/sheet/Sheet.vue +3 -3
  247. package/src/components/ui/sheet/SheetClose.vue +3 -3
  248. package/src/components/ui/sheet/SheetContent.vue +22 -22
  249. package/src/components/ui/sheet/SheetDescription.vue +3 -3
  250. package/src/components/ui/sheet/SheetFooter.vue +3 -3
  251. package/src/components/ui/sheet/SheetHeader.vue +3 -3
  252. package/src/components/ui/sheet/SheetOverlay.vue +7 -7
  253. package/src/components/ui/sheet/SheetTitle.vue +3 -3
  254. package/src/components/ui/sheet/SheetTrigger.vue +3 -3
  255. package/src/components/ui/sidebar/Sidebar.vue +57 -57
  256. package/src/components/ui/sidebar/SidebarContent.vue +8 -8
  257. package/src/components/ui/sidebar/SidebarFooter.vue +8 -8
  258. package/src/components/ui/sidebar/SidebarGroup.vue +8 -8
  259. package/src/components/ui/sidebar/SidebarGroupAction.vue +9 -9
  260. package/src/components/ui/sidebar/SidebarGroupContent.vue +4 -4
  261. package/src/components/ui/sidebar/SidebarGroupLabel.vue +8 -8
  262. package/src/components/ui/sidebar/SidebarHeader.vue +8 -8
  263. package/src/components/ui/sidebar/SidebarInput.vue +8 -8
  264. package/src/components/ui/sidebar/SidebarInset.vue +9 -9
  265. package/src/components/ui/sidebar/SidebarMenu.vue +4 -4
  266. package/src/components/ui/sidebar/SidebarMenuAction.vue +18 -18
  267. package/src/components/ui/sidebar/SidebarMenuBadge.vue +14 -14
  268. package/src/components/ui/sidebar/SidebarMenuButton.vue +21 -21
  269. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +10 -10
  270. package/src/components/ui/sidebar/SidebarMenuItem.vue +4 -4
  271. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +10 -10
  272. package/src/components/ui/sidebar/SidebarMenuSub.vue +9 -9
  273. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +17 -17
  274. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +4 -4
  275. package/src/components/ui/sidebar/SidebarProvider.vue +46 -46
  276. package/src/components/ui/sidebar/SidebarRail.vue +13 -13
  277. package/src/components/ui/sidebar/SidebarSeparator.vue +4 -4
  278. package/src/components/ui/sidebar/SidebarTrigger.vue +6 -6
  279. package/src/components/ui/sidebar/index.ts +29 -29
  280. package/src/components/ui/sidebar/utils.ts +7 -7
  281. package/src/components/ui/skeleton/Skeleton.vue +6 -6
  282. package/src/components/ui/slider/Slider.vue +14 -14
  283. package/src/components/ui/spinner/Spinner.vue +21 -21
  284. package/src/components/ui/stepper/SimpleStepper.vue +27 -27
  285. package/src/components/ui/stepper/Stepper.vue +6 -6
  286. package/src/components/ui/stepper/StepperDescription.vue +5 -5
  287. package/src/components/ui/stepper/StepperIndicator.vue +18 -18
  288. package/src/components/ui/stepper/StepperItem.vue +4 -4
  289. package/src/components/ui/stepper/StepperSeparator.vue +7 -7
  290. package/src/components/ui/stepper/StepperTitle.vue +5 -5
  291. package/src/components/ui/stepper/StepperTrigger.vue +4 -4
  292. package/src/components/ui/stepper/index.ts +3 -3
  293. package/src/components/ui/switch/Switch.vue +15 -15
  294. package/src/components/ui/table/Table.vue +6 -6
  295. package/src/components/ui/table/TableBody.vue +4 -4
  296. package/src/components/ui/table/TableCaption.vue +4 -4
  297. package/src/components/ui/table/TableCell.vue +8 -8
  298. package/src/components/ui/table/TableEmpty.vue +14 -14
  299. package/src/components/ui/table/TableFooter.vue +8 -8
  300. package/src/components/ui/table/TableHead.vue +8 -8
  301. package/src/components/ui/table/TableHeader.vue +4 -4
  302. package/src/components/ui/table/TableRow.vue +8 -8
  303. package/src/components/ui/tabs/Tabs.vue +4 -4
  304. package/src/components/ui/tabs/TabsContent.vue +4 -4
  305. package/src/components/ui/tabs/TabsList.vue +15 -15
  306. package/src/components/ui/tabs/TabsTrigger.vue +10 -10
  307. package/src/components/ui/tags-input/TagsInput.vue +17 -17
  308. package/src/components/ui/tags-input/TagsInputInput.vue +6 -6
  309. package/src/components/ui/tags-input/TagsInputItem.vue +15 -15
  310. package/src/components/ui/tags-input/TagsInputItemDelete.vue +13 -13
  311. package/src/components/ui/tags-input/TagsInputItemText.vue +4 -4
  312. package/src/components/ui/textarea/Textarea.vue +12 -12
  313. package/src/components/ui/time-picker/TimePicker.vue +25 -25
  314. package/src/components/ui/toggle-group/Toggle.vue +10 -10
  315. package/src/components/ui/toggle-group/ToggleGroup.vue +38 -38
  316. package/src/components/ui/toggle-group/ToggleGroupItem.vue +9 -9
  317. package/src/components/ui/toggle-group/index.ts +46 -46
  318. package/src/components/ui/tooltip/Tooltip.vue +3 -3
  319. package/src/components/ui/tooltip/TooltipContent.vue +13 -13
  320. package/src/components/ui/tooltip/TooltipProvider.vue +4 -4
  321. package/src/components/ui/tooltip/TooltipTrigger.vue +3 -3
  322. package/src/i18n/de.json +185 -185
  323. package/src/i18n/en.json +185 -185
  324. package/src/i18n/es.json +185 -185
  325. package/src/i18n/fr.json +185 -185
  326. package/src/i18n/it.json +185 -185
  327. package/src/i18n/ja.json +185 -185
  328. package/src/i18n/pt.json +185 -185
  329. package/src/i18n/ru.json +185 -185
  330. package/src/i18n/zh.json +185 -185
  331. package/src/lib/color-tokens.ts +24 -24
  332. package/src/lib/i18n.ts +65 -65
  333. package/src/lib/utils.ts +33 -33
  334. package/src/nuxt-components.d.ts +2 -2
  335. package/src/runtime/ui-vintage-i18n-plugin.ts +49 -49
  336. package/src/shims-vue.d.ts +3 -3
  337. package/src/styles.css +377 -377
@@ -4,11 +4,11 @@ import { busyIndicatorState } from './busy-indicator-state';
4
4
  </script>
5
5
 
6
6
  <template>
7
- <!-- Busy overlay -->
8
- <Busy
9
- :show="busyIndicatorState.show"
10
- :label="busyIndicatorState.label"
11
- :class="busyIndicatorState.class"
12
- :overlay-class="busyIndicatorState.overlayClass"
13
- />
7
+ <!-- Busy overlay -->
8
+ <Busy
9
+ :show="busyIndicatorState.show"
10
+ :label="busyIndicatorState.label"
11
+ :class="busyIndicatorState.class"
12
+ :overlay-class="busyIndicatorState.overlayClass"
13
+ />
14
14
  </template>
@@ -2,16 +2,16 @@ import { h, reactive, render, type HTMLAttributes } from 'vue';
2
2
  import { getUiVintageRuntimeMessage } from '../../lib/i18n';
3
3
 
4
4
  export interface SetBusyOptions {
5
- label?: string;
6
- class?: HTMLAttributes['class'];
7
- overlayClass?: HTMLAttributes['class'];
5
+ label?: string;
6
+ class?: HTMLAttributes['class'];
7
+ overlayClass?: HTMLAttributes['class'];
8
8
  }
9
9
 
10
10
  interface BusyIndicatorState {
11
- show: boolean;
12
- label: string;
13
- class: HTMLAttributes['class'];
14
- overlayClass: HTMLAttributes['class'];
11
+ show: boolean;
12
+ label: string;
13
+ class: HTMLAttributes['class'];
14
+ overlayClass: HTMLAttributes['class'];
15
15
  }
16
16
 
17
17
  const BUSY_INDICATOR_ROOT_ID = 'ui-vintage-busy-indicator-root';
@@ -20,69 +20,69 @@ let busyIndicatorMountPromise: Promise<void> | null = null;
20
20
 
21
21
  // Shared busy state
22
22
  export const busyIndicatorState: BusyIndicatorState = reactive({
23
- show: false,
24
- label: getUiVintageRuntimeMessage('uiVintage.common.loading.title', 'Loading...'),
25
- class: undefined,
26
- overlayClass: undefined
23
+ show: false,
24
+ label: getUiVintageRuntimeMessage('uiVintage.common.loading.title', 'Loading...'),
25
+ class: undefined,
26
+ overlayClass: undefined
27
27
  });
28
28
 
29
29
  // Mount the busy indicator once on demand
30
30
  const ensureBusyIndicatorMounted = () => {
31
- // Skip mounting during SSR
32
- if (typeof document === 'undefined') {
33
- return Promise.resolve();
34
- }
31
+ // Skip mounting during SSR
32
+ if (typeof document === 'undefined') {
33
+ return Promise.resolve();
34
+ }
35
35
 
36
- // Reuse the existing mount root
37
- const existingRoot = document.getElementById(BUSY_INDICATOR_ROOT_ID);
38
- if (existingRoot) {
39
- return Promise.resolve();
40
- }
36
+ // Reuse the existing mount root
37
+ const existingRoot = document.getElementById(BUSY_INDICATOR_ROOT_ID);
38
+ if (existingRoot) {
39
+ return Promise.resolve();
40
+ }
41
41
 
42
- // Reuse the in-flight mount
43
- if (busyIndicatorMountPromise) {
44
- return busyIndicatorMountPromise;
45
- }
42
+ // Reuse the in-flight mount
43
+ if (busyIndicatorMountPromise) {
44
+ return busyIndicatorMountPromise;
45
+ }
46
46
 
47
- // Start the lazy mount
48
- busyIndicatorMountPromise = (async () => {
49
- // Load the component only when needed
50
- const { default: BusyIndicator } = await import('./BusyIndicator.vue');
47
+ // Start the lazy mount
48
+ busyIndicatorMountPromise = (async () => {
49
+ // Load the component only when needed
50
+ const { default: BusyIndicator } = await import('./BusyIndicator.vue');
51
51
 
52
- // Guard against a concurrent mount
53
- if (document.getElementById(BUSY_INDICATOR_ROOT_ID)) {
54
- return;
55
- }
52
+ // Guard against a concurrent mount
53
+ if (document.getElementById(BUSY_INDICATOR_ROOT_ID)) {
54
+ return;
55
+ }
56
56
 
57
- // Create the host element and render the component
58
- const container = document.createElement('div');
59
- container.id = BUSY_INDICATOR_ROOT_ID;
60
- document.body.appendChild(container);
61
- render(h(BusyIndicator), container);
62
- })().finally(() => {
63
- busyIndicatorMountPromise = null;
64
- });
57
+ // Create the host element and render the component
58
+ const container = document.createElement('div');
59
+ container.id = BUSY_INDICATOR_ROOT_ID;
60
+ document.body.appendChild(container);
61
+ render(h(BusyIndicator), container);
62
+ })().finally(() => {
63
+ busyIndicatorMountPromise = null;
64
+ });
65
65
 
66
- // Let callers await the mount
67
- return busyIndicatorMountPromise;
66
+ // Let callers await the mount
67
+ return busyIndicatorMountPromise;
68
68
  };
69
69
 
70
70
  // Toggle the global busy overlay
71
71
  export const setBusy = (show: boolean, options: SetBusyOptions = {}) => {
72
- // Prepare the overlay before showing it
73
- if (show) {
74
- busyIndicatorState.label = options.label ?? getUiVintageRuntimeMessage('uiVintage.common.loading.title', 'Loading...');
75
- busyIndicatorState.class = options.class;
76
- busyIndicatorState.overlayClass = options.overlayClass;
77
- void ensureBusyIndicatorMounted();
78
- }
72
+ // Prepare the overlay before showing it
73
+ if (show) {
74
+ busyIndicatorState.label = options.label ?? getUiVintageRuntimeMessage('uiVintage.common.loading.title', 'Loading...');
75
+ busyIndicatorState.class = options.class;
76
+ busyIndicatorState.overlayClass = options.overlayClass;
77
+ void ensureBusyIndicatorMounted();
78
+ }
79
79
 
80
- // Toggle the overlay visibility
81
- busyIndicatorState.show = show;
80
+ // Toggle the overlay visibility
81
+ busyIndicatorState.show = show;
82
82
 
83
- // Reset transient styling after hiding
84
- if (!show) {
85
- busyIndicatorState.class = undefined;
86
- busyIndicatorState.overlayClass = undefined;
87
- }
83
+ // Reset transient styling after hiding
84
+ if (!show) {
85
+ busyIndicatorState.class = undefined;
86
+ busyIndicatorState.overlayClass = undefined;
87
+ }
88
88
  };
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts" generic="T extends { id: PropertyKey }">
2
- import { PackageIcon } from '@hugeicons/core-free-icons';
2
+ import PackageIcon from '@hugeicons/core-free-icons/PackageIcon';
3
3
  import { EmptyStateCard } from '../empty-state-card';
4
4
  import { LoadMoreButton } from '../load-more-button';
5
5
  import { LoadingStateCard } from '../loading-state-card';
@@ -7,55 +7,55 @@ import type { HugeiconsIconDefinition } from '../../lib/common-types';
7
7
 
8
8
  // Props
9
9
  const props = withDefaults(defineProps<{
10
- items?: T[];
11
- busy?: boolean;
12
- loadMoreBusy?: boolean;
13
- hasMore?: boolean;
14
- emptyMessage: string;
15
- emptyIcon?: HugeiconsIconDefinition;
10
+ items?: T[];
11
+ busy?: boolean;
12
+ loadMoreBusy?: boolean;
13
+ hasMore?: boolean;
14
+ emptyMessage: string;
15
+ emptyIcon?: HugeiconsIconDefinition;
16
16
  }>(), {
17
- items: () => [],
18
- busy: false,
19
- loadMoreBusy: false,
20
- hasMore: false,
21
- emptyIcon: () => PackageIcon
17
+ items: () => [],
18
+ busy: false,
19
+ loadMoreBusy: false,
20
+ hasMore: false,
21
+ emptyIcon: () => PackageIcon
22
22
  });
23
23
 
24
24
  // Emits
25
25
  const emits = defineEmits<{
26
- 'load-more': [];
26
+ 'load-more': [];
27
27
  }>();
28
28
 
29
29
  // Slots
30
30
  defineSlots<{
31
- card(props: { item: T; key?: PropertyKey }): unknown;
31
+ card(props: { item: T; key?: PropertyKey }): unknown;
32
32
  }>();
33
33
 
34
34
  // Handle load more
35
35
  const handleLoadMore = () => {
36
- emits('load-more');
36
+ emits('load-more');
37
37
  };
38
38
  </script>
39
39
 
40
40
  <template>
41
- <div>
42
- <!-- Busy state for initial loading -->
43
- <LoadingStateCard v-if="props.busy" />
44
-
45
- <!-- Empty state -->
46
- <EmptyStateCard v-else-if="props.items.length === 0"
47
- :description="props.emptyMessage"
48
- :icon="props.emptyIcon" />
49
-
50
- <!-- Cards grid -->
51
- <div v-else class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6 xl:gap-4">
52
- <slot name="card" v-for="item in props.items" :item="item" :key="item.id" />
53
- </div>
54
-
55
- <!-- Load more button (only under a grid, never under the loading or empty state) -->
56
- <div v-if="!props.busy && props.items.length > 0 && (props.hasMore || props.loadMoreBusy)" class="flex justify-center mt-6">
57
- <LoadMoreButton :busy="props.loadMoreBusy"
58
- @load-more="handleLoadMore" />
59
- </div>
60
- </div>
41
+ <div>
42
+ <!-- Busy state for initial loading -->
43
+ <LoadingStateCard v-if="props.busy" />
44
+
45
+ <!-- Empty state -->
46
+ <EmptyStateCard v-else-if="props.items.length === 0"
47
+ :description="props.emptyMessage"
48
+ :icon="props.emptyIcon" />
49
+
50
+ <!-- Cards grid -->
51
+ <div v-else class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6 xl:gap-4">
52
+ <slot name="card" v-for="item in props.items" :item="item" :key="item.id" />
53
+ </div>
54
+
55
+ <!-- Load more button (only under a grid, never under the loading or empty state) -->
56
+ <div v-if="!props.busy && props.items.length > 0 && (props.hasMore || props.loadMoreBusy)" class="flex justify-center mt-6">
57
+ <LoadMoreButton :busy="props.loadMoreBusy"
58
+ @load-more="handleLoadMore" />
59
+ </div>
60
+ </div>
61
61
  </template>
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Cancel01Icon } from '@hugeicons/core-free-icons';
2
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
3
3
  import { HugeiconsIcon } from '@hugeicons/vue';
4
4
  import { computed } from 'vue';
5
5
  import type { HTMLAttributes } from 'vue';
@@ -9,12 +9,12 @@ import { cn } from '../../lib/utils';
9
9
 
10
10
  // Props
11
11
  const props = withDefaults(defineProps<{
12
- text: string;
13
- color?: ToneColor;
14
- removeLabel?: string;
15
- class?: HTMLAttributes['class'];
12
+ text: string;
13
+ color?: ToneColor;
14
+ removeLabel?: string;
15
+ class?: HTMLAttributes['class'];
16
16
  }>(), {
17
- color: 'gray'
17
+ color: 'gray'
18
18
  });
19
19
 
20
20
  const { t } = useI18n();
@@ -22,23 +22,23 @@ const resolvedRemoveLabel = computed(() => props.removeLabel || t('uiVintage.but
22
22
 
23
23
  // Emits
24
24
  const emits = defineEmits<{
25
- remove: []
25
+ remove: []
26
26
  }>();
27
27
 
28
28
  // Handle remove button click
29
29
  const handleRemove = () => {
30
- emits('remove');
30
+ emits('remove');
31
31
  };
32
32
  </script>
33
33
 
34
34
  <template>
35
- <div data-slot="chip" :class="cn('inline-flex items-center gap-2 rounded border px-3 py-2 text-sm font-semibold transition-colors duration-150', getSurfaceToneClasses(props.color), props.class)">
36
- <!-- Text content -->
37
- <span class="leading-none">{{ props.text }}</span>
35
+ <div data-slot="chip" :class="cn('inline-flex items-center gap-2 rounded border px-3 py-2 text-sm font-semibold transition-colors duration-150', getSurfaceToneClasses(props.color), props.class)">
36
+ <!-- Text content -->
37
+ <span class="leading-none">{{ props.text }}</span>
38
38
 
39
- <!-- Remove button -->
40
- <button type="button" :aria-label="resolvedRemoveLabel" class="group/remove inline-flex size-4 cursor-pointer items-center justify-center rounded-sm opacity-70 [transition:opacity_150ms,background-color_150ms,scale_300ms_var(--ease-spring)] hover:bg-black/5 hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/20 active:scale-75 dark:hover:bg-white/10" @click="handleRemove">
41
- <HugeiconsIcon :icon="Cancel01Icon" class="size-3 transition-transform duration-300 ease-spring group-hover/remove:rotate-90" />
42
- </button>
43
- </div>
39
+ <!-- Remove button -->
40
+ <button type="button" :aria-label="resolvedRemoveLabel" class="group/remove inline-flex size-4 cursor-pointer items-center justify-center rounded-sm opacity-70 [transition:opacity_150ms,background-color_150ms,scale_300ms_var(--ease-spring)] hover:bg-black/5 hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/20 active:scale-75 dark:hover:bg-white/10" @click="handleRemove">
41
+ <HugeiconsIcon :icon="Cancel01Icon" class="size-3 transition-transform duration-300 ease-spring group-hover/remove:rotate-90" />
42
+ </button>
43
+ </div>
44
44
  </template>
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { HugeiconsIcon } from '@hugeicons/vue';
3
3
  import { computed, ref } from 'vue';
4
- import { InformationCircleIcon } from '@hugeicons/core-free-icons';
4
+ import InformationCircleIcon from '@hugeicons/core-free-icons/InformationCircleIcon';
5
5
  import { AlertDialog, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '../ui/alert-dialog';
6
6
  import { Button } from '../ui/button';
7
7
  import { cancelActiveConfirmDialog, closeConfirmDialog, confirmActiveDialog, confirmDialogState } from './confirm-dialog-state';
@@ -11,66 +11,66 @@ const pendingAction = ref<'confirm' | 'cancel' | null>(null);
11
11
 
12
12
  // Run an action while showing a spinner on the button that triggered it
13
13
  const runAction = async (action: 'confirm' | 'cancel') => {
14
- // Ignore clicks while another action is still running
15
- if (pendingAction.value) {
16
- return;
17
- }
14
+ // Ignore clicks while another action is still running
15
+ if (pendingAction.value) {
16
+ return;
17
+ }
18
18
 
19
- pendingAction.value = action;
20
- try {
21
- await (action === 'confirm' ? confirmActiveDialog() : cancelActiveConfirmDialog());
22
- } finally {
23
- pendingAction.value = null;
24
- }
19
+ pendingAction.value = action;
20
+ try {
21
+ await (action === 'confirm' ? confirmActiveDialog() : cancelActiveConfirmDialog());
22
+ } finally {
23
+ pendingAction.value = null;
24
+ }
25
25
  };
26
26
 
27
27
  // Close the dialog when the shell requests it
28
28
  const handleOpenChange = (open: boolean) => {
29
- if (!open) {
30
- closeConfirmDialog();
31
- }
29
+ if (!open) {
30
+ closeConfirmDialog();
31
+ }
32
32
  };
33
33
  </script>
34
34
 
35
35
  <template>
36
- <!-- Dialog shell -->
37
- <AlertDialog :open="confirmDialogState.isOpen" @update:open="handleOpenChange">
38
- <!-- Dialog content -->
39
- <AlertDialogContent v-if="currentDialog">
40
- <div class="px-5 pb-5 pt-5 sm:px-6 sm:pb-4 sm:pt-6">
41
- <div class="flex flex-col gap-4 sm:flex-row sm:items-start">
42
- <!-- Dialog icon -->
43
- <div class="flex size-12 shrink-0 self-center items-center justify-center rounded border border-primary/30 bg-primary/10 sm:size-10 sm:self-start">
44
- <HugeiconsIcon v-if="currentDialog.options.icon" :icon="currentDialog.options.icon" :stroke-width="1.8" class="size-6 animate-uv-pop text-primary [animation-delay:140ms]" />
45
- <HugeiconsIcon v-else :icon="InformationCircleIcon" :stroke-width="1.8" class="size-6 animate-uv-pop text-primary [animation-delay:140ms]" />
46
- </div>
36
+ <!-- Dialog shell -->
37
+ <AlertDialog :open="confirmDialogState.isOpen" @update:open="handleOpenChange">
38
+ <!-- Dialog content -->
39
+ <AlertDialogContent v-if="currentDialog">
40
+ <div class="px-5 pb-5 pt-5 sm:px-6 sm:pb-4 sm:pt-6">
41
+ <div class="flex flex-col gap-4 sm:flex-row sm:items-start">
42
+ <!-- Dialog icon -->
43
+ <div class="flex size-12 shrink-0 self-center items-center justify-center rounded border border-primary/30 bg-primary/10 sm:size-10 sm:self-start">
44
+ <HugeiconsIcon v-if="currentDialog.options.icon" :icon="currentDialog.options.icon" :stroke-width="1.8" class="size-6 animate-uv-pop text-primary [animation-delay:140ms]" />
45
+ <HugeiconsIcon v-else :icon="InformationCircleIcon" :stroke-width="1.8" class="size-6 animate-uv-pop text-primary [animation-delay:140ms]" />
46
+ </div>
47
47
 
48
- <!-- Dialog header -->
49
- <AlertDialogHeader class="sm:pt-0">
50
- <AlertDialogTitle>
51
- {{ currentDialog.options.title }}
52
- </AlertDialogTitle>
53
- <AlertDialogDescription>
54
- {{ currentDialog.options.message }}
55
- </AlertDialogDescription>
56
- </AlertDialogHeader>
57
- </div>
58
- </div>
48
+ <!-- Dialog header -->
49
+ <AlertDialogHeader class="sm:pt-0">
50
+ <AlertDialogTitle>
51
+ {{ currentDialog.options.title }}
52
+ </AlertDialogTitle>
53
+ <AlertDialogDescription>
54
+ {{ currentDialog.options.message }}
55
+ </AlertDialogDescription>
56
+ </AlertDialogHeader>
57
+ </div>
58
+ </div>
59
59
 
60
- <!-- Dialog actions -->
61
- <AlertDialogFooter>
62
- <!-- Cancel button -->
63
- <Button :variant="currentDialog.options.cancelButtonType" :disabled="confirmDialogState.busy && pendingAction !== 'cancel'" :loading="pendingAction === 'cancel'" @click="runAction('cancel')">
64
- <HugeiconsIcon v-if="currentDialog.options.cancelButtonIcon" :icon="currentDialog.options.cancelButtonIcon" class="size-4" />
65
- {{ currentDialog.options.cancelText }}
66
- </Button>
60
+ <!-- Dialog actions -->
61
+ <AlertDialogFooter>
62
+ <!-- Cancel button -->
63
+ <Button :variant="currentDialog.options.cancelButtonType" :disabled="confirmDialogState.busy && pendingAction !== 'cancel'" :loading="pendingAction === 'cancel'" @click="runAction('cancel')">
64
+ <HugeiconsIcon v-if="currentDialog.options.cancelButtonIcon" :icon="currentDialog.options.cancelButtonIcon" class="size-4" />
65
+ {{ currentDialog.options.cancelText }}
66
+ </Button>
67
67
 
68
- <!-- Confirm button -->
69
- <Button :variant="currentDialog.options.confirmButtonType" :disabled="confirmDialogState.busy && pendingAction !== 'confirm'" :loading="pendingAction === 'confirm'" @click="runAction('confirm')">
70
- <HugeiconsIcon v-if="currentDialog.options.confirmButtonIcon" :icon="currentDialog.options.confirmButtonIcon" class="size-4" />
71
- {{ currentDialog.options.confirmText }}
72
- </Button>
73
- </AlertDialogFooter>
74
- </AlertDialogContent>
75
- </AlertDialog>
68
+ <!-- Confirm button -->
69
+ <Button :variant="currentDialog.options.confirmButtonType" :disabled="confirmDialogState.busy && pendingAction !== 'confirm'" :loading="pendingAction === 'confirm'" @click="runAction('confirm')">
70
+ <HugeiconsIcon v-if="currentDialog.options.confirmButtonIcon" :icon="currentDialog.options.confirmButtonIcon" class="size-4" />
71
+ {{ currentDialog.options.confirmText }}
72
+ </Button>
73
+ </AlertDialogFooter>
74
+ </AlertDialogContent>
75
+ </AlertDialog>
76
76
  </template>