@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
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, defineAsyncComponent, ref, type Component } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { Tick02Icon } from '@hugeicons/core-free-icons';
4
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { Button } from '../ui/button';
7
7
  import { Command, CommandGroup, CommandItem, CommandList } from '../ui/command';
@@ -11,17 +11,17 @@ export type LanguageSelectorCode = string;
11
11
 
12
12
  // Props
13
13
  const props = withDefaults(defineProps<{
14
- modelValue?: string;
15
- languages?: LanguageSelectorCode[];
14
+ modelValue?: string;
15
+ languages?: LanguageSelectorCode[];
16
16
  }>(), {
17
- modelValue: '',
18
- languages: () => ['en', 'it']
17
+ modelValue: '',
18
+ languages: () => ['en', 'it']
19
19
  });
20
20
 
21
21
  // Emits
22
22
  const emits = defineEmits<{
23
- 'update:modelValue': [value: string];
24
- select: [value: string];
23
+ 'update:modelValue': [value: string];
24
+ select: [value: string];
25
25
  }>();
26
26
 
27
27
  const { locale, t } = useI18n();
@@ -29,15 +29,15 @@ const isOpen = ref(false);
29
29
 
30
30
  // Single source of truth for supported language codes, labels, and flag loaders
31
31
  const supportedLanguages = [
32
- { code: 'en', label: 'English', loadFlag: () => import('../language-flag/flags/EnglishFlag.vue') },
33
- { code: 'it', label: 'Italiano', loadFlag: () => import('../language-flag/flags/ItalianFlag.vue') },
34
- { code: 'fr', label: 'Français', loadFlag: () => import('../language-flag/flags/FrenchFlag.vue') },
35
- { code: 'es', label: 'Español', loadFlag: () => import('../language-flag/flags/SpanishFlag.vue') },
36
- { code: 'de', label: 'Deutsch', loadFlag: () => import('../language-flag/flags/GermanFlag.vue') },
37
- { code: 'pt', label: 'Português', loadFlag: () => import('../language-flag/flags/PortugueseFlag.vue') },
38
- { code: 'zh', label: '中文', loadFlag: () => import('../language-flag/flags/ChineseFlag.vue') },
39
- { code: 'ja', label: '日本語', loadFlag: () => import('../language-flag/flags/JapaneseFlag.vue') },
40
- { code: 'ru', label: 'Русский', loadFlag: () => import('../language-flag/flags/RussianFlag.vue') }
32
+ { code: 'en', label: 'English', loadFlag: () => import('../language-flag/flags/EnglishFlag.vue') },
33
+ { code: 'it', label: 'Italiano', loadFlag: () => import('../language-flag/flags/ItalianFlag.vue') },
34
+ { code: 'fr', label: 'Français', loadFlag: () => import('../language-flag/flags/FrenchFlag.vue') },
35
+ { code: 'es', label: 'Español', loadFlag: () => import('../language-flag/flags/SpanishFlag.vue') },
36
+ { code: 'de', label: 'Deutsch', loadFlag: () => import('../language-flag/flags/GermanFlag.vue') },
37
+ { code: 'pt', label: 'Português', loadFlag: () => import('../language-flag/flags/PortugueseFlag.vue') },
38
+ { code: 'zh', label: '中文', loadFlag: () => import('../language-flag/flags/ChineseFlag.vue') },
39
+ { code: 'ja', label: '日本語', loadFlag: () => import('../language-flag/flags/JapaneseFlag.vue') },
40
+ { code: 'ru', label: 'Русский', loadFlag: () => import('../language-flag/flags/RussianFlag.vue') }
41
41
  ] as const;
42
42
 
43
43
  type SupportedLanguage = (typeof supportedLanguages)[number];
@@ -46,31 +46,31 @@ const asyncFlagComponentCache = new Map<SupportedLanguageCode, Component>();
46
46
 
47
47
  // Type guard to ensure a code is one of the supported flag codes
48
48
  const isSupportedLanguageCode = (code: string): code is SupportedLanguageCode => {
49
- return supportedLanguages.some((language) => language.code === code);
49
+ return supportedLanguages.some((language) => language.code === code);
50
50
  };
51
51
 
52
52
  // Get the supported language object for a given code
53
53
  const getSupportedLanguage = (code: SupportedLanguageCode) => {
54
- return supportedLanguages.find((language) => language.code === code)!;
54
+ return supportedLanguages.find((language) => language.code === code)!;
55
55
  };
56
56
 
57
57
  // Load and cache the async component for a given supported language code
58
58
  const getAsyncFlagComponent = (code: SupportedLanguageCode) => {
59
- // Check cache first
60
- const cachedComponent = asyncFlagComponentCache.get(code);
61
- if (cachedComponent) {
62
- return cachedComponent;
63
- }
64
-
65
- // Load the async component and cache it
66
- const asyncComponent = defineAsyncComponent(getSupportedLanguage(code).loadFlag);
67
- asyncFlagComponentCache.set(code, asyncComponent);
68
- return asyncComponent;
59
+ // Check cache first
60
+ const cachedComponent = asyncFlagComponentCache.get(code);
61
+ if (cachedComponent) {
62
+ return cachedComponent;
63
+ }
64
+
65
+ // Load the async component and cache it
66
+ const asyncComponent = defineAsyncComponent(getSupportedLanguage(code).loadFlag);
67
+ asyncFlagComponentCache.set(code, asyncComponent);
68
+ return asyncComponent;
69
69
  };
70
70
 
71
71
  // Build localized language labels from the provided language codes
72
72
  const languageDisplayNames = computed(() => {
73
- return typeof Intl.DisplayNames === 'function' ? new Intl.DisplayNames([locale.value], { type: 'language' }) : null;
73
+ return typeof Intl.DisplayNames === 'function' ? new Intl.DisplayNames([locale.value], { type: 'language' }) : null;
74
74
  });
75
75
 
76
76
  // Base language of a code ('it-IT' and 'it_IT' become 'it')
@@ -78,84 +78,84 @@ const getBaseLanguageCode = (code: string) => code.toLowerCase().split(/[-_]/)[0
78
78
 
79
79
  // Supported flag code for a language code, including regional codes
80
80
  const getFlagCode = (code: string) => {
81
- const languageCode = getBaseLanguageCode(code);
82
- return isSupportedLanguageCode(languageCode) ? languageCode : null;
81
+ const languageCode = getBaseLanguageCode(code);
82
+ return isSupportedLanguageCode(languageCode) ? languageCode : null;
83
83
  };
84
84
 
85
85
  // Get the display label for a given language code
86
86
  const getLanguageLabel = (code: string) => {
87
- const languageCode = getBaseLanguageCode(code);
88
- const supportedLanguage = isSupportedLanguageCode(languageCode) ? getSupportedLanguage(languageCode) : null;
89
- return supportedLanguage?.label || languageDisplayNames.value?.of(languageCode) || code.toUpperCase();
87
+ const languageCode = getBaseLanguageCode(code);
88
+ const supportedLanguage = isSupportedLanguageCode(languageCode) ? getSupportedLanguage(languageCode) : null;
89
+ return supportedLanguage?.label || languageDisplayNames.value?.of(languageCode) || code.toUpperCase();
90
90
  };
91
91
 
92
92
  // Normalize languages to pair each language code with its label
93
93
  const normalizedLanguages = computed(() => {
94
- return props.languages.map(code => ({
95
- code,
96
- label: getLanguageLabel(code)
97
- }));
94
+ return props.languages.map(code => ({
95
+ code,
96
+ label: getLanguageLabel(code)
97
+ }));
98
98
  });
99
99
 
100
100
  // Compute the available flag codes based on the provided language list
101
101
  const availableFlagCodes = computed<SupportedLanguageCode[]>(() => {
102
- // Extract supported language codes from the normalized list
103
- const supportedCodes = normalizedLanguages.value.map(language => getFlagCode(language.code)).filter((code): code is SupportedLanguageCode => code !== null);
104
- if (supportedCodes.length > 0) {
105
- return [...new Set(supportedCodes)];
106
- }
107
-
108
- // If no valid codes are provided, default to English
109
- return ['en'];
102
+ // Extract supported language codes from the normalized list
103
+ const supportedCodes = normalizedLanguages.value.map(language => getFlagCode(language.code)).filter((code): code is SupportedLanguageCode => code !== null);
104
+ if (supportedCodes.length > 0) {
105
+ return [...new Set(supportedCodes)];
106
+ }
107
+
108
+ // If no valid codes are provided, default to English
109
+ return ['en'];
110
110
  });
111
111
 
112
112
  // Resolve the flag component for a specific code, falling back to the first available code
113
113
  const resolveFlagComponent = (code?: string) => {
114
- const flagCode = code ? getFlagCode(code) : null;
115
- const resolvedCode = flagCode && availableFlagCodes.value.includes(flagCode) ? flagCode : availableFlagCodes.value[0];
116
- return getAsyncFlagComponent(resolvedCode);
114
+ const flagCode = code ? getFlagCode(code) : null;
115
+ const resolvedCode = flagCode && availableFlagCodes.value.includes(flagCode) ? flagCode : availableFlagCodes.value[0];
116
+ return getAsyncFlagComponent(resolvedCode);
117
117
  };
118
118
 
119
119
  // Get the currently selected language based on modelValue
120
120
  const currentLanguage = computed(() => {
121
- return normalizedLanguages.value.find(language => language.code === props.modelValue) || normalizedLanguages.value[0] || null;
121
+ return normalizedLanguages.value.find(language => language.code === props.modelValue) || normalizedLanguages.value[0] || null;
122
122
  });
123
123
 
124
124
  // Resolve the async flag component for the currently selected language
125
125
  const currentFlagComponent = computed(() => {
126
- return currentLanguage.value ? resolveFlagComponent(currentLanguage.value.code) : null;
126
+ return currentLanguage.value ? resolveFlagComponent(currentLanguage.value.code) : null;
127
127
  });
128
128
 
129
129
  // Handle language selection
130
130
  const handleSelectLanguage = (language: string) => {
131
- emits('update:modelValue', language);
132
- emits('select', language);
133
- isOpen.value = false;
131
+ emits('update:modelValue', language);
132
+ emits('select', language);
133
+ isOpen.value = false;
134
134
  };
135
135
  </script>
136
136
 
137
137
  <template>
138
- <Popover v-model:open="isOpen">
139
- <!-- Trigger button showing the current language flag -->
140
- <PopoverTrigger as-child>
141
- <Button variant="secondary" size="icon" :aria-label="t('uiVintage.language.ariaLabel')">
142
- <component :is="currentFlagComponent" v-if="currentFlagComponent" class="h-4 w-[1.35rem] rounded-[2px]" />
143
- </Button>
144
- </PopoverTrigger>
145
-
146
- <!-- Popover content with language options -->
147
- <PopoverContent side="bottom" align="end" :side-offset="8" class="w-44 p-0!">
148
- <Command :model-value="props.modelValue">
149
- <CommandList :aria-label="t('uiVintage.language.title')">
150
- <CommandGroup :heading="t('uiVintage.language.title')" stagger>
151
- <CommandItem v-for="option in normalizedLanguages" :key="option.code" :value="option.code" @select="handleSelectLanguage(option.code)">
152
- <component :is="resolveFlagComponent(option.code)" class="h-4 w-[1.35rem] rounded-[2px]" />
153
- <span class="flex-1">{{ option.label }}</span>
154
- <HugeiconsIcon :icon="Tick02Icon" class="ml-auto size-4 shrink-0" :class="props.modelValue === option.code ? 'opacity-100' : 'opacity-0'" />
155
- </CommandItem>
156
- </CommandGroup>
157
- </CommandList>
158
- </Command>
159
- </PopoverContent>
160
- </Popover>
138
+ <Popover v-model:open="isOpen">
139
+ <!-- Trigger button showing the current language flag -->
140
+ <PopoverTrigger as-child>
141
+ <Button variant="secondary" size="icon" :aria-label="t('uiVintage.language.ariaLabel')">
142
+ <component :is="currentFlagComponent" v-if="currentFlagComponent" class="h-4 w-[1.35rem] rounded-[2px]" />
143
+ </Button>
144
+ </PopoverTrigger>
145
+
146
+ <!-- Popover content with language options -->
147
+ <PopoverContent side="bottom" align="end" :side-offset="8" class="w-44 p-0!">
148
+ <Command :model-value="props.modelValue">
149
+ <CommandList :aria-label="t('uiVintage.language.title')">
150
+ <CommandGroup :heading="t('uiVintage.language.title')" stagger>
151
+ <CommandItem v-for="option in normalizedLanguages" :key="option.code" :value="option.code" @select="handleSelectLanguage(option.code)">
152
+ <component :is="resolveFlagComponent(option.code)" class="h-4 w-[1.35rem] rounded-[2px]" />
153
+ <span class="flex-1">{{ option.label }}</span>
154
+ <HugeiconsIcon :icon="Tick02Icon" class="ml-auto size-4 shrink-0" :class="props.modelValue === option.code ? 'opacity-100' : 'opacity-0'" />
155
+ </CommandItem>
156
+ </CommandGroup>
157
+ </CommandList>
158
+ </Command>
159
+ </PopoverContent>
160
+ </Popover>
161
161
  </template>
@@ -1,24 +1,25 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { ArrowDown01Icon, RefreshIcon } from '@hugeicons/core-free-icons';
4
+ import ArrowDown01Icon from '@hugeicons/core-free-icons/ArrowDown01Icon';
5
+ import RefreshIcon from '@hugeicons/core-free-icons/RefreshIcon';
5
6
  import { HugeiconsIcon } from '@hugeicons/vue';
6
7
  import { Button } from '../ui/button';
7
8
 
8
9
  // Props
9
10
  const props = withDefaults(defineProps<{
10
- busy?: boolean;
11
- text?: string;
12
- loadingText?: string;
11
+ busy?: boolean;
12
+ text?: string;
13
+ loadingText?: string;
13
14
  }>(), {
14
- busy: false,
15
- text: '',
16
- loadingText: ''
15
+ busy: false,
16
+ text: '',
17
+ loadingText: ''
17
18
  });
18
19
 
19
20
  // Emits
20
21
  const emits = defineEmits<{
21
- 'load-more': [];
22
+ 'load-more': [];
22
23
  }>();
23
24
 
24
25
  const { t } = useI18n();
@@ -27,17 +28,17 @@ const resolvedLoadingText = computed(() => props.loadingText || t('uiVintage.but
27
28
 
28
29
  // Handle click event (ignored while loading, so the button stays focusable without firing twice)
29
30
  const handleClick = () => {
30
- if (props.busy) return;
31
- emits('load-more');
31
+ if (props.busy) return;
32
+ emits('load-more');
32
33
  };
33
34
  </script>
34
35
 
35
36
  <template>
36
- <div class="flex justify-center">
37
- <!-- A single button for both states keeps keyboard focus on it while the next page loads -->
38
- <Button variant="secondary" :class="['w-full md:w-auto', props.busy && 'cursor-wait']" :aria-disabled="props.busy || undefined" :aria-busy="props.busy || undefined" @click="handleClick">
39
- <HugeiconsIcon :icon="props.busy ? RefreshIcon : ArrowDown01Icon" :class="['size-4', props.busy && 'animate-spin']" />
40
- {{ props.busy ? resolvedLoadingText : resolvedText }}
41
- </Button>
42
- </div>
43
- </template>
37
+ <div class="flex justify-center">
38
+ <!-- A single button for both states keeps keyboard focus on it while the next page loads -->
39
+ <Button variant="secondary" :class="['w-full md:w-auto', props.busy && 'cursor-wait']" :aria-disabled="props.busy || undefined" :aria-busy="props.busy || undefined" @click="handleClick">
40
+ <HugeiconsIcon :icon="props.busy ? RefreshIcon : ArrowDown01Icon" :class="['size-4', props.busy && 'animate-spin']" />
41
+ {{ props.busy ? resolvedLoadingText : resolvedText }}
42
+ </Button>
43
+ </div>
44
+ </template>
@@ -1,22 +1,22 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { Loading03Icon } from '@hugeicons/core-free-icons';
4
+ import Loading03Icon from '@hugeicons/core-free-icons/Loading03Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { Card, CardContent } from '../ui/card';
7
7
  import type { HeadingLevel, HugeiconsIconDefinition } from '../../lib/common-types';
8
8
 
9
9
  // Props
10
10
  const props = withDefaults(defineProps<{
11
- icon?: HugeiconsIconDefinition;
12
- title?: string;
13
- description?: string;
14
- level?: HeadingLevel;
11
+ icon?: HugeiconsIconDefinition;
12
+ title?: string;
13
+ description?: string;
14
+ level?: HeadingLevel;
15
15
  }>(), {
16
- icon: () => Loading03Icon,
17
- title: '',
18
- description: '',
19
- level: 3
16
+ icon: () => Loading03Icon,
17
+ title: '',
18
+ description: '',
19
+ level: 3
20
20
  });
21
21
 
22
22
  const { t } = useI18n();
@@ -25,27 +25,27 @@ const resolvedDescription = computed(() => props.description || t('uiVintage.com
25
25
  </script>
26
26
 
27
27
  <template>
28
- <Card class="flex flex-col items-center justify-center px-4 py-8 text-center md:py-12">
29
- <CardContent class="flex flex-col items-center justify-center p-0! text-center">
30
- <!-- Loading spinner icon -->
31
- <div aria-hidden="true" class="flex items-center justify-center text-4xl text-muted-foreground opacity-60">
32
- <HugeiconsIcon :icon="props.icon" class="size-10 animate-spin" />
33
- </div>
28
+ <Card class="flex flex-col items-center justify-center px-4 py-8 text-center md:py-12">
29
+ <CardContent class="flex flex-col items-center justify-center p-0! text-center">
30
+ <!-- Loading spinner icon -->
31
+ <div aria-hidden="true" class="flex items-center justify-center text-4xl text-muted-foreground opacity-60">
32
+ <HugeiconsIcon :icon="props.icon" class="size-10 animate-spin" />
33
+ </div>
34
34
 
35
- <!-- Title -->
36
- <component :is="`h${props.level}`"
37
- v-if="resolvedTitle"
38
- class="text-sm font-semibold text-foreground md:text-base">
39
- {{ resolvedTitle }}
40
- </component>
35
+ <!-- Title -->
36
+ <component :is="`h${props.level}`"
37
+ v-if="resolvedTitle"
38
+ class="text-sm font-semibold text-foreground md:text-base">
39
+ {{ resolvedTitle }}
40
+ </component>
41
41
 
42
- <!-- Description -->
43
- <p v-if="resolvedDescription" class="max-w-md text-xs text-muted-foreground md:text-sm">
44
- {{ resolvedDescription }}
45
- </p>
42
+ <!-- Description -->
43
+ <p v-if="resolvedDescription" class="max-w-md text-xs text-muted-foreground md:text-sm">
44
+ {{ resolvedDescription }}
45
+ </p>
46
46
 
47
- <!-- Slot for additional content -->
48
- <slot />
49
- </CardContent>
50
- </Card>
47
+ <!-- Slot for additional content -->
48
+ <slot />
49
+ </CardContent>
50
+ </Card>
51
51
  </template>
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
2
  import { HugeiconsIcon } from '@hugeicons/vue';
3
3
  import { computed } from 'vue';
4
- import { AlertCircleIcon, InformationCircleIcon, Tick02Icon } from '@hugeicons/core-free-icons';
4
+ import AlertCircleIcon from '@hugeicons/core-free-icons/AlertCircleIcon';
5
+ import InformationCircleIcon from '@hugeicons/core-free-icons/InformationCircleIcon';
6
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
5
7
  import { AlertDialog, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '../ui/alert-dialog';
6
8
  import { Button } from '../ui/button';
7
9
  import { getUiVintageRuntimeMessage } from '../../lib/i18n';
@@ -12,90 +14,90 @@ const currentDialog = computed(() => messageDialogState.current);
12
14
 
13
15
  // Resolve the title
14
16
  const resolvedTitle = computed(() => {
15
- const current = currentDialog.value;
16
- if (!current) return '';
17
- return current.options.title || getUiVintageRuntimeMessage(`uiVintage.messageDialog.${current.options.type}`, '');
17
+ const current = currentDialog.value;
18
+ if (!current) return '';
19
+ return current.options.title || getUiVintageRuntimeMessage(`uiVintage.messageDialog.${current.options.type}`, '');
18
20
  });
19
21
 
20
22
  // Resolve the close button text
21
23
  const resolvedCloseText = computed(() => {
22
- const current = currentDialog.value;
23
- if (!current) return getUiVintageRuntimeMessage('uiVintage.buttons.close', 'Close');
24
- return current.options.closeText || getUiVintageRuntimeMessage('uiVintage.buttons.close', 'Close');
24
+ const current = currentDialog.value;
25
+ if (!current) return getUiVintageRuntimeMessage('uiVintage.buttons.close', 'Close');
26
+ return current.options.closeText || getUiVintageRuntimeMessage('uiVintage.buttons.close', 'Close');
25
27
  });
26
28
 
27
29
  // Resolved fallback icon for the current message type
28
30
  const defaultMessageIcon = computed(() => {
29
- const current = currentDialog.value;
30
- if (!current) return InformationCircleIcon;
31
- if (current.options.type === 'error' || current.options.type === 'warning') return AlertCircleIcon;
32
- if (current.options.type === 'success') return Tick02Icon;
33
- return InformationCircleIcon;
31
+ const current = currentDialog.value;
32
+ if (!current) return InformationCircleIcon;
33
+ if (current.options.type === 'error' || current.options.type === 'warning') return AlertCircleIcon;
34
+ if (current.options.type === 'success') return Tick02Icon;
35
+ return InformationCircleIcon;
34
36
  });
35
37
 
36
38
  // Resolved container classes for the message icon
37
39
  const messageIconClasses = computed(() => {
38
- const current = currentDialog.value;
39
- if (!current) return 'border-border bg-surface';
40
- if (current.options.type === 'error') return 'border-destructive/25 bg-destructive/10';
41
- if (current.options.type === 'warning') return 'border-warning/25 bg-warning/10';
42
- if (current.options.type === 'success') return 'border-success/25 bg-success/10';
43
- return 'border-border bg-surface';
40
+ const current = currentDialog.value;
41
+ if (!current) return 'border-border bg-surface';
42
+ if (current.options.type === 'error') return 'border-destructive/25 bg-destructive/10';
43
+ if (current.options.type === 'warning') return 'border-warning/25 bg-warning/10';
44
+ if (current.options.type === 'success') return 'border-success/25 bg-success/10';
45
+ return 'border-border bg-surface';
44
46
  });
45
47
 
46
48
  // Resolved glyph color classes
47
49
  const messageGlyphClasses = computed(() => {
48
- const current = currentDialog.value;
49
- if (!current) return 'text-info';
50
- if (current.options.type === 'error') return 'text-destructive';
51
- if (current.options.type === 'warning') return 'text-warning';
52
- if (current.options.type === 'success') return 'text-success';
53
- return 'text-info';
50
+ const current = currentDialog.value;
51
+ if (!current) return 'text-info';
52
+ if (current.options.type === 'error') return 'text-destructive';
53
+ if (current.options.type === 'warning') return 'text-warning';
54
+ if (current.options.type === 'success') return 'text-success';
55
+ return 'text-info';
54
56
  });
55
57
 
56
58
  // Close the dialog when the shell requests it
57
59
  const handleOpenChange = (open: boolean) => {
58
- if (!open) {
59
- closeMessageDialog();
60
- }
60
+ if (!open) {
61
+ closeMessageDialog();
62
+ }
61
63
  };
62
64
  </script>
63
65
 
64
66
  <template>
65
- <!-- Dialog shell -->
66
- <AlertDialog :open="messageDialogState.isOpen" @update:open="handleOpenChange">
67
- <!-- Dialog content -->
68
- <AlertDialogContent v-if="currentDialog">
69
- <div class="px-5 pb-5 pt-5 sm:px-6 sm:pb-4 sm:pt-6">
70
- <div class="flex flex-col gap-4 sm:flex-row sm:items-start">
71
- <!-- Dialog icon -->
72
- <div class="flex size-12 shrink-0 self-center items-center justify-center rounded border sm:size-10 sm:self-start" :class="messageIconClasses">
73
- <HugeiconsIcon v-if="currentDialog.options.icon" :icon="currentDialog.options.icon" :stroke-width="1.8" class="size-6 animate-uv-pop [animation-delay:140ms]" :class="messageGlyphClasses" />
74
- <HugeiconsIcon v-else :icon="defaultMessageIcon" :stroke-width="1.8" class="size-6 animate-uv-pop [animation-delay:140ms]" :class="messageGlyphClasses" />
75
- </div>
67
+ <!-- Dialog shell -->
68
+ <AlertDialog :open="messageDialogState.isOpen" @update:open="handleOpenChange">
69
+ <!-- Dialog content -->
70
+ <AlertDialogContent v-if="currentDialog">
71
+ <div class="px-5 pb-5 pt-5 sm:px-6 sm:pb-4 sm:pt-6">
72
+ <div class="flex flex-col gap-4 sm:flex-row sm:items-start">
73
+ <!-- Dialog icon -->
74
+ <div class="flex size-12 shrink-0 self-center items-center justify-center rounded border sm:size-10 sm:self-start" :class="messageIconClasses">
75
+ <HugeiconsIcon v-if="currentDialog.options.icon" :icon="currentDialog.options.icon" :stroke-width="1.8" class="size-6 animate-uv-pop [animation-delay:140ms]" :class="messageGlyphClasses" />
76
+ <HugeiconsIcon v-else :icon="defaultMessageIcon" :stroke-width="1.8" class="size-6 animate-uv-pop [animation-delay:140ms]" :class="messageGlyphClasses" />
77
+ </div>
76
78
 
77
- <!-- Dialog header -->
78
- <AlertDialogHeader class="sm:pt-0">
79
- <!-- Title -->
80
- <AlertDialogTitle>
81
- {{ resolvedTitle }}
82
- </AlertDialogTitle>
79
+ <!-- Dialog header -->
80
+ <AlertDialogHeader class="sm:pt-0">
81
+ <!-- Title -->
82
+ <AlertDialogTitle>
83
+ {{ resolvedTitle }}
84
+ </AlertDialogTitle>
83
85
 
84
- <!-- Message -->
85
- <AlertDialogDescription>
86
- {{ currentDialog.options.message }}
87
- </AlertDialogDescription>
88
- </AlertDialogHeader>
89
- </div>
90
- </div>
86
+ <!-- Message -->
87
+ <AlertDialogDescription>
88
+ {{ currentDialog.options.message }}
89
+ </AlertDialogDescription>
90
+ </AlertDialogHeader>
91
+ </div>
92
+ </div>
91
93
 
92
- <!-- Dialog actions -->
93
- <AlertDialogFooter class="items-end">
94
- <Button variant="secondary" @click="resolveActiveMessageDialog">
95
- <HugeiconsIcon v-if="currentDialog.options.closeButtonIcon" :icon="currentDialog.options.closeButtonIcon" class="size-4" />
96
- {{ resolvedCloseText }}
97
- </Button>
98
- </AlertDialogFooter>
99
- </AlertDialogContent>
100
- </AlertDialog>
94
+ <!-- Dialog actions -->
95
+ <AlertDialogFooter class="items-end">
96
+ <Button variant="secondary" @click="resolveActiveMessageDialog">
97
+ <HugeiconsIcon v-if="currentDialog.options.closeButtonIcon" :icon="currentDialog.options.closeButtonIcon" class="size-4" />
98
+ {{ resolvedCloseText }}
99
+ </Button>
100
+ </AlertDialogFooter>
101
+ </AlertDialogContent>
102
+ </AlertDialog>
101
103
  </template>