@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
@@ -5,26 +5,26 @@ import { Slider } from '../ui/slider';
5
5
 
6
6
  // Props
7
7
  const props = withDefaults(defineProps<{
8
- id?: string;
9
- label: string;
10
- description?: string;
11
- modelValue: number;
12
- min?: number;
13
- max?: number;
14
- step?: number;
15
- valueText?: string;
8
+ id?: string;
9
+ label: string;
10
+ description?: string;
11
+ modelValue: number;
12
+ min?: number;
13
+ max?: number;
14
+ step?: number;
15
+ valueText?: string;
16
16
  }>(), {
17
- id: undefined,
18
- description: '',
19
- min: 0,
20
- max: 100,
21
- step: 1,
22
- valueText: ''
17
+ id: undefined,
18
+ description: '',
19
+ min: 0,
20
+ max: 100,
21
+ step: 1,
22
+ valueText: ''
23
23
  });
24
24
 
25
25
  // Emits
26
26
  const emits = defineEmits<{
27
- (e: 'update:modelValue', value: number): void;
27
+ (e: 'update:modelValue', value: number): void;
28
28
  }>();
29
29
 
30
30
  const sliderValue = computed(() => [props.modelValue]);
@@ -32,31 +32,31 @@ const resolvedValueText = computed(() => props.valueText || String(props.modelVa
32
32
 
33
33
  // Emit the first slider value back to the parent
34
34
  const handleUpdateModelValue = (value?: number[]) => {
35
- emits('update:modelValue', value?.[0] ?? props.min);
35
+ emits('update:modelValue', value?.[0] ?? props.min);
36
36
  };
37
37
  </script>
38
38
 
39
39
  <template>
40
- <Card class="px-4 py-4">
41
- <!-- Slider header -->
42
- <div class="flex items-center justify-between gap-3">
43
- <!-- Label and description block -->
44
- <div class="space-y-2">
45
- <div class="text-sm font-semibold">
46
- {{ props.label }}
47
- </div>
48
- <div v-if="props.description" class="text-xs text-muted-foreground">
49
- {{ props.description }}
50
- </div>
51
- </div>
40
+ <Card class="px-4 py-4">
41
+ <!-- Slider header -->
42
+ <div class="flex items-center justify-between gap-3">
43
+ <!-- Label and description block -->
44
+ <div class="space-y-2">
45
+ <div class="text-sm font-semibold">
46
+ {{ props.label }}
47
+ </div>
48
+ <div v-if="props.description" class="text-xs text-muted-foreground">
49
+ {{ props.description }}
50
+ </div>
51
+ </div>
52
52
 
53
- <!-- Current slider value display -->
54
- <span class="rounded border border-border bg-background px-2 py-1 text-xs font-semibold">
55
- {{ resolvedValueText }}
56
- </span>
57
- </div>
53
+ <!-- Current slider value display -->
54
+ <span class="rounded border border-border bg-background px-2 py-1 text-xs font-semibold">
55
+ {{ resolvedValueText }}
56
+ </span>
57
+ </div>
58
58
 
59
- <!-- Slider control -->
60
- <Slider :id="props.id" :model-value="sliderValue" :min="props.min" :max="props.max" :step="props.step" :thumb-label="props.label" @update:model-value="handleUpdateModelValue" />
61
- </Card>
59
+ <!-- Slider control -->
60
+ <Slider :id="props.id" :model-value="sliderValue" :min="props.min" :max="props.max" :step="props.step" :thumb-label="props.label" @update:model-value="handleUpdateModelValue" />
61
+ </Card>
62
62
  </template>
@@ -7,30 +7,30 @@ import type { HugeiconsIconDefinition } from '../../lib/common-types';
7
7
 
8
8
  // Props
9
9
  const props = withDefaults(defineProps<{
10
- items: Array<{
11
- label: string;
12
- value: string | number;
13
- icon?: HugeiconsIconDefinition;
14
- formatOptions?: Intl.NumberFormatOptions;
15
- }>;
16
- animate?: boolean;
17
- class?: HTMLAttributes['class'];
10
+ items: Array<{
11
+ label: string;
12
+ value: string | number;
13
+ icon?: HugeiconsIconDefinition;
14
+ formatOptions?: Intl.NumberFormatOptions;
15
+ }>;
16
+ animate?: boolean;
17
+ class?: HTMLAttributes['class'];
18
18
  }>(), {
19
- animate: true
19
+ animate: true
20
20
  });
21
21
  </script>
22
22
 
23
23
  <template>
24
- <!-- Compact row of stats in one bordered strip -->
25
- <ul v-if="props.items.length > 0" data-slot="stat-strip" :class="cn('inline-flex max-w-full flex-wrap items-stretch overflow-hidden rounded border border-border bg-card text-xs shadow-elevated-sm', props.class)">
26
- <li v-for="(item, index) in props.items" :key="item.label" :class="['flex items-center gap-2 px-4 py-2.5', index > 0 && 'border-l border-border']">
27
- <HugeiconsIcon v-if="item.icon" :icon="item.icon" class="size-4 shrink-0 text-primary" />
28
- <span class="font-semibold text-foreground tabular-nums">
29
- <AnimatedNumber v-if="props.animate && typeof item.value === 'number'" :value="item.value" :format-options="item.formatOptions" />
30
- <template v-else-if="typeof item.value === 'number'">{{ new Intl.NumberFormat(undefined, item.formatOptions).format(item.value) }}</template>
31
- <template v-else>{{ item.value }}</template>
32
- </span>
33
- <span class="text-muted-foreground">{{ item.label }}</span>
34
- </li>
35
- </ul>
36
- </template>
24
+ <!-- Compact row of stats in one bordered strip -->
25
+ <ul v-if="props.items.length > 0" data-slot="stat-strip" :class="cn('inline-flex max-w-full flex-wrap items-stretch overflow-hidden rounded border border-border bg-card text-xs shadow-elevated-sm', props.class)">
26
+ <li v-for="(item, index) in props.items" :key="item.label" :class="['flex items-center gap-2 px-4 py-2.5', index > 0 && 'border-l border-border']">
27
+ <HugeiconsIcon v-if="item.icon" :icon="item.icon" class="size-4 shrink-0 text-primary" />
28
+ <span class="font-semibold text-foreground tabular-nums">
29
+ <AnimatedNumber v-if="props.animate && typeof item.value === 'number'" :value="item.value" :format-options="item.formatOptions" />
30
+ <template v-else-if="typeof item.value === 'number'">{{ new Intl.NumberFormat(undefined, item.formatOptions).format(item.value) }}</template>
31
+ <template v-else>{{ item.value }}</template>
32
+ </span>
33
+ <span class="text-muted-foreground">{{ item.label }}</span>
34
+ </li>
35
+ </ul>
36
+ </template>
@@ -4,34 +4,34 @@ import { Switch } from '../ui/switch';
4
4
 
5
5
  // Props
6
6
  const props = defineProps<{
7
- id: string;
8
- label: string;
9
- description: string;
10
- modelValue: boolean;
7
+ id: string;
8
+ label: string;
9
+ description: string;
10
+ modelValue: boolean;
11
11
  }>();
12
12
 
13
13
  // Emits
14
14
  const emits = defineEmits<{
15
- (e: 'update:modelValue', value: boolean): void;
15
+ (e: 'update:modelValue', value: boolean): void;
16
16
  }>();
17
17
  </script>
18
18
 
19
19
  <template>
20
- <Card class="flex flex-col gap-2 px-4 py-3 sm:gap-3!">
21
- <!-- Switch label and control -->
22
- <div class="flex items-center justify-between gap-4">
23
- <!-- Switch label (names the switch and toggles it on click) -->
24
- <label :for="props.id" class="cursor-pointer text-sm font-semibold">
25
- {{ props.label }}
26
- </label>
20
+ <Card class="flex flex-col gap-2 px-4 py-3 sm:gap-3!">
21
+ <!-- Switch label and control -->
22
+ <div class="flex items-center justify-between gap-4">
23
+ <!-- Switch label (names the switch and toggles it on click) -->
24
+ <label :for="props.id" class="cursor-pointer text-sm font-semibold">
25
+ {{ props.label }}
26
+ </label>
27
27
 
28
- <!-- Switch control -->
29
- <Switch :id="props.id" :aria-describedby="`${props.id}-description`" :model-value="props.modelValue" @update:model-value="emits('update:modelValue', $event)" />
30
- </div>
28
+ <!-- Switch control -->
29
+ <Switch :id="props.id" :aria-describedby="`${props.id}-description`" :model-value="props.modelValue" @update:model-value="emits('update:modelValue', $event)" />
30
+ </div>
31
31
 
32
- <!-- Description -->
33
- <div :id="`${props.id}-description`" class="text-xs text-muted-foreground">
34
- {{ props.description }}
35
- </div>
36
- </Card>
32
+ <!-- Description -->
33
+ <div :id="`${props.id}-description`" class="text-xs text-muted-foreground">
34
+ {{ props.description }}
35
+ </div>
36
+ </Card>
37
37
  </template>
@@ -3,35 +3,35 @@ import type { Component } from 'vue';
3
3
 
4
4
  // Props
5
5
  const props = withDefaults(defineProps<{
6
- to: string;
7
- text: string;
8
- linkComponent?: Component | string;
6
+ to: string;
7
+ text: string;
8
+ linkComponent?: Component | string;
9
9
  }>(), {
10
- linkComponent: 'a'
10
+ linkComponent: 'a'
11
11
  });
12
12
 
13
13
  // Emits
14
14
  const emits = defineEmits<{
15
- click: [event: MouseEvent];
15
+ click: [event: MouseEvent];
16
16
  }>();
17
17
 
18
18
  // Get link props based on the type of link component
19
19
  const getLinkProps = () => {
20
- if (props.linkComponent === 'a') {
21
- return { href: props.to };
22
- } else {
23
- return { to: props.to };
24
- }
20
+ if (props.linkComponent === 'a') {
21
+ return { href: props.to };
22
+ } else {
23
+ return { to: props.to };
24
+ }
25
25
  };
26
26
 
27
27
  // Handle click
28
28
  const handleClick = (event: MouseEvent) => {
29
- emits('click', event);
29
+ emits('click', event);
30
30
  };
31
31
  </script>
32
32
 
33
33
  <template>
34
- <component :is="props.linkComponent" v-bind="getLinkProps()" class="cursor-pointer font-semibold text-foreground hover:underline" @click="handleClick">
35
- {{ props.text }}
36
- </component>
34
+ <component :is="props.linkComponent" v-bind="getLinkProps()" class="cursor-pointer font-semibold text-foreground hover:underline" @click="handleClick">
35
+ {{ props.text }}
36
+ </component>
37
37
  </template>
@@ -20,97 +20,97 @@ let handleSystemThemeChange: (() => void) | undefined;
20
20
 
21
21
  // Resolve the icon for each theme mode
22
22
  const getThemeIcon = (theme: string) => {
23
- if (theme === 'light') {
24
- return Sun01Icon;
25
- } else if (theme === 'dark') {
26
- return Moon01Icon;
27
- } else {
28
- return LaptopIcon;
29
- }
23
+ if (theme === 'light') {
24
+ return Sun01Icon;
25
+ } else if (theme === 'dark') {
26
+ return Moon01Icon;
27
+ } else {
28
+ return LaptopIcon;
29
+ }
30
30
  };
31
31
 
32
32
  // Available themes
33
33
  const themes = computed(() => [
34
- { id: 'light' as const, label: t('uiVintage.theme.light') },
35
- { id: 'dark' as const, label: t('uiVintage.theme.dark') },
36
- { id: 'auto' as const, label: t('uiVintage.theme.auto') }
34
+ { id: 'light' as const, label: t('uiVintage.theme.light') },
35
+ { id: 'dark' as const, label: t('uiVintage.theme.dark') },
36
+ { id: 'auto' as const, label: t('uiVintage.theme.auto') }
37
37
  ]);
38
38
 
39
39
  // Handle theme selection from the menu
40
40
  const handleSelectTheme = async (theme: ThemeMode) => {
41
- currentTheme.value = theme;
42
- isOpen.value = false;
41
+ currentTheme.value = theme;
42
+ isOpen.value = false;
43
43
 
44
- // Reveal the new theme from the trigger button once the menu has closed
45
- await nextTick();
46
- const triggerElement = (triggerRef.value as { $el?: Element } | null)?.$el ?? null;
47
- await applyThemeWithTransition(theme, triggerElement);
44
+ // Reveal the new theme from the trigger button once the menu has closed
45
+ await nextTick();
46
+ const triggerElement = (triggerRef.value as { $el?: Element } | null)?.$el ?? null;
47
+ await applyThemeWithTransition(theme, triggerElement);
48
48
  };
49
49
 
50
50
  // Compute the icon for the currently selected theme
51
51
  const currentThemeIcon = computed(() => {
52
- return getThemeIcon(currentTheme.value);
52
+ return getThemeIcon(currentTheme.value);
53
53
  });
54
54
 
55
55
  // Theme options for the menu
56
56
  const themeOptions = computed(() => {
57
- return themes.value.map(theme => ({
58
- key: theme.id,
59
- label: theme.label,
60
- icon: getThemeIcon(theme.id)
61
- }));
57
+ return themes.value.map(theme => ({
58
+ key: theme.id,
59
+ label: theme.label,
60
+ icon: getThemeIcon(theme.id)
61
+ }));
62
62
  });
63
63
 
64
64
  // On component mounted
65
65
  onMounted(() => {
66
- const savedTheme = getStoredTheme();
67
- currentTheme.value = savedTheme;
68
- applyTheme(savedTheme);
69
- mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');
66
+ const savedTheme = getStoredTheme();
67
+ currentTheme.value = savedTheme;
68
+ applyTheme(savedTheme);
69
+ mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');
70
70
 
71
- // Handler to update the theme
72
- handleSystemThemeChange = () => {
73
- if (currentTheme.value === 'auto') {
74
- void applyThemeWithTransition('auto');
75
- }
76
- };
71
+ // Handler to update the theme
72
+ handleSystemThemeChange = () => {
73
+ if (currentTheme.value === 'auto') {
74
+ void applyThemeWithTransition('auto');
75
+ }
76
+ };
77
77
 
78
- // Listen for changes in system theme preference
79
- mediaQueryList.addEventListener('change', handleSystemThemeChange);
78
+ // Listen for changes in system theme preference
79
+ mediaQueryList.addEventListener('change', handleSystemThemeChange);
80
80
  });
81
81
 
82
82
  // Cleanup system preference listener
83
83
  onUnmounted(() => {
84
- if (mediaQueryList && handleSystemThemeChange) {
85
- mediaQueryList.removeEventListener('change', handleSystemThemeChange);
86
- }
84
+ if (mediaQueryList && handleSystemThemeChange) {
85
+ mediaQueryList.removeEventListener('change', handleSystemThemeChange);
86
+ }
87
87
  });
88
88
  </script>
89
89
 
90
90
  <template>
91
- <Popover v-model:open="isOpen">
92
- <!-- Trigger button showing the current theme icon -->
93
- <PopoverTrigger as-child>
94
- <Button ref="triggerRef" variant="secondary" size="icon" :aria-label="t('uiVintage.theme.ariaLabel')">
95
- <Transition mode="out-in" enter-active-class="transition-[rotate,scale,opacity] duration-[420ms] ease-bounce" enter-from-class="-rotate-90 scale-50 opacity-0" leave-active-class="transition-[rotate,scale,opacity] duration-150 ease-snappy" leave-to-class="rotate-90 scale-50 opacity-0">
96
- <HugeiconsIcon :key="currentTheme" :icon="currentThemeIcon" class="h-5 w-5" />
97
- </Transition>
98
- </Button>
99
- </PopoverTrigger>
91
+ <Popover v-model:open="isOpen">
92
+ <!-- Trigger button showing the current theme icon -->
93
+ <PopoverTrigger as-child>
94
+ <Button ref="triggerRef" variant="secondary" size="icon" :aria-label="t('uiVintage.theme.ariaLabel')">
95
+ <Transition mode="out-in" enter-active-class="transition-[rotate,scale,opacity] duration-[420ms] ease-bounce" enter-from-class="-rotate-90 scale-50 opacity-0" leave-active-class="transition-[rotate,scale,opacity] duration-150 ease-snappy" leave-to-class="rotate-90 scale-50 opacity-0">
96
+ <HugeiconsIcon :key="currentTheme" :icon="currentThemeIcon" class="h-5 w-5" />
97
+ </Transition>
98
+ </Button>
99
+ </PopoverTrigger>
100
100
 
101
- <!-- Theme options -->
102
- <PopoverContent side="bottom" align="end" :side-offset="8" class="w-44 p-0!">
103
- <Command :model-value="currentTheme">
104
- <CommandList :aria-label="t('uiVintage.theme.title')">
105
- <CommandGroup :heading="t('uiVintage.theme.title')" stagger>
106
- <CommandItem v-for="option in themeOptions" :key="option.key" :value="option.key" @select="handleSelectTheme(option.key)">
107
- <HugeiconsIcon :icon="option.icon" class="size-4" />
108
- <span class="flex-1">{{ option.label }}</span>
109
- <HugeiconsIcon :icon="Tick02Icon" class="ml-auto size-4 shrink-0 text-primary! transition-[opacity,scale] duration-300 ease-bounce" :class="currentTheme === option.key ? 'scale-100 opacity-100' : 'scale-50 opacity-0'" />
110
- </CommandItem>
111
- </CommandGroup>
112
- </CommandList>
113
- </Command>
114
- </PopoverContent>
115
- </Popover>
101
+ <!-- Theme options -->
102
+ <PopoverContent side="bottom" align="end" :side-offset="8" class="w-44 p-0!">
103
+ <Command :model-value="currentTheme">
104
+ <CommandList :aria-label="t('uiVintage.theme.title')">
105
+ <CommandGroup :heading="t('uiVintage.theme.title')" stagger>
106
+ <CommandItem v-for="option in themeOptions" :key="option.key" :value="option.key" @select="handleSelectTheme(option.key)">
107
+ <HugeiconsIcon :icon="option.icon" class="size-4" />
108
+ <span class="flex-1">{{ option.label }}</span>
109
+ <HugeiconsIcon :icon="Tick02Icon" class="ml-auto size-4 shrink-0 text-primary! transition-[opacity,scale] duration-300 ease-bounce" :class="currentTheme === option.key ? 'scale-100 opacity-100' : 'scale-50 opacity-0'" />
110
+ </CommandItem>
111
+ </CommandGroup>
112
+ </CommandList>
113
+ </Command>
114
+ </PopoverContent>
115
+ </Popover>
116
116
  </template>
@@ -1,98 +1,98 @@
1
1
  export type ThemeMode = 'light' | 'dark' | 'auto';
2
2
 
3
3
  export interface ThemeTransitionOrigin {
4
- x: number;
5
- y: number;
4
+ x: number;
5
+ y: number;
6
6
  }
7
7
 
8
8
  const THEME_STORAGE_KEY = 'theme';
9
9
 
10
10
  type DocumentWithViewTransition = Document & {
11
- startViewTransition?: (callback: () => void) => {
12
- ready: Promise<void>;
13
- finished: Promise<void>;
14
- };
11
+ startViewTransition?: (callback: () => void) => {
12
+ ready: Promise<void>;
13
+ finished: Promise<void>;
14
+ };
15
15
  };
16
16
 
17
17
  // Check if the system prefers dark mode
18
18
  const isSystemDarkPreferred = () => {
19
- return typeof window !== 'undefined' && window.matchMedia?.('(prefers-color-scheme: dark)').matches;
19
+ return typeof window !== 'undefined' && window.matchMedia?.('(prefers-color-scheme: dark)').matches;
20
20
  };
21
21
 
22
22
  // Resolve whether a theme mode ends up dark
23
23
  export const isDarkTheme = (theme: ThemeMode) => {
24
- return theme === 'dark' || (theme === 'auto' && isSystemDarkPreferred());
24
+ return theme === 'dark' || (theme === 'auto' && isSystemDarkPreferred());
25
25
  };
26
26
 
27
27
  // Read the persisted theme mode
28
28
  export const getStoredTheme = (): ThemeMode => {
29
- if (typeof localStorage === 'undefined') return 'auto';
29
+ if (typeof localStorage === 'undefined') return 'auto';
30
30
 
31
- // Storage can throw when the browser blocks it (privacy settings, sandboxed frames)
32
- try {
33
- const storedTheme = localStorage.getItem(THEME_STORAGE_KEY);
34
- return storedTheme === 'light' || storedTheme === 'dark' ? storedTheme : 'auto';
35
- } catch {
36
- return 'auto';
37
- }
31
+ // Storage can throw when the browser blocks it (privacy settings, sandboxed frames)
32
+ try {
33
+ const storedTheme = localStorage.getItem(THEME_STORAGE_KEY);
34
+ return storedTheme === 'light' || storedTheme === 'dark' ? storedTheme : 'auto';
35
+ } catch {
36
+ return 'auto';
37
+ }
38
38
  };
39
39
 
40
40
  // Apply the selected theme to the document and persist it
41
41
  export const applyTheme = (theme: ThemeMode) => {
42
- if (typeof document === 'undefined') return;
43
- const root = document.documentElement;
44
- root.classList.remove('light', 'dark');
45
- root.classList.add(isDarkTheme(theme) ? 'dark' : 'light');
42
+ if (typeof document === 'undefined') return;
43
+ const root = document.documentElement;
44
+ root.classList.remove('light', 'dark');
45
+ root.classList.add(isDarkTheme(theme) ? 'dark' : 'light');
46
46
 
47
- // Persisting is best effort: the theme still applies when storage is blocked
48
- try {
49
- localStorage.setItem(THEME_STORAGE_KEY, theme);
50
- } catch {
51
- // Ignore storage errors
52
- }
47
+ // Persisting is best effort: the theme still applies when storage is blocked
48
+ try {
49
+ localStorage.setItem(THEME_STORAGE_KEY, theme);
50
+ } catch {
51
+ // Ignore storage errors
52
+ }
53
53
  };
54
54
 
55
55
  // Apply a theme with a circular reveal that grows from the origin point (View Transitions API)
56
56
  export const applyThemeWithTransition = async (theme: ThemeMode, origin?: ThemeTransitionOrigin | Element | null) => {
57
- const doc = document as DocumentWithViewTransition;
58
- const root = document.documentElement;
59
- const willChange = root.classList.contains('dark') !== isDarkTheme(theme);
60
- const prefersReducedMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
57
+ const doc = document as DocumentWithViewTransition;
58
+ const root = document.documentElement;
59
+ const willChange = root.classList.contains('dark') !== isDarkTheme(theme);
60
+ const prefersReducedMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
61
61
 
62
- // Fall back to an instant switch when the transition is unsupported or pointless
63
- if (!doc.startViewTransition || !willChange || prefersReducedMotion) {
64
- applyTheme(theme);
65
- return;
66
- }
62
+ // Fall back to an instant switch when the transition is unsupported or pointless
63
+ if (!doc.startViewTransition || !willChange || prefersReducedMotion) {
64
+ applyTheme(theme);
65
+ return;
66
+ }
67
67
 
68
- // Resolve the reveal origin (defaults to the top-right corner)
69
- let x = window.innerWidth;
70
- let y = 0;
71
- if (origin instanceof Element) {
72
- const rect = origin.getBoundingClientRect();
73
- x = rect.left + rect.width / 2;
74
- y = rect.top + rect.height / 2;
75
- } else if (origin) {
76
- x = origin.x;
77
- y = origin.y;
78
- }
79
- const radius = Math.hypot(Math.max(x, window.innerWidth - x), Math.max(y, window.innerHeight - y));
68
+ // Resolve the reveal origin (defaults to the top-right corner)
69
+ let x = window.innerWidth;
70
+ let y = 0;
71
+ if (origin instanceof Element) {
72
+ const rect = origin.getBoundingClientRect();
73
+ x = rect.left + rect.width / 2;
74
+ y = rect.top + rect.height / 2;
75
+ } else if (origin) {
76
+ x = origin.x;
77
+ y = origin.y;
78
+ }
79
+ const radius = Math.hypot(Math.max(x, window.innerWidth - x), Math.max(y, window.innerHeight - y));
80
80
 
81
- // Freeze CSS transitions so the snapshots capture the final colors
82
- root.classList.add('uv-theme-switching');
83
- const transition = doc.startViewTransition(() => applyTheme(theme));
81
+ // Freeze CSS transitions so the snapshots capture the final colors
82
+ root.classList.add('uv-theme-switching');
83
+ const transition = doc.startViewTransition(() => applyTheme(theme));
84
84
 
85
- try {
86
- await transition.ready;
87
- root.animate({
88
- clipPath: [`circle(0px at ${x}px ${y}px)`, `circle(${radius}px at ${x}px ${y}px)`]
89
- }, {
90
- duration: 620,
91
- easing: 'cubic-bezier(0.16, 1, 0.3, 1)',
92
- pseudoElement: '::view-transition-new(root)'
93
- });
94
- await transition.finished;
95
- } finally {
96
- root.classList.remove('uv-theme-switching');
97
- }
85
+ try {
86
+ await transition.ready;
87
+ root.animate({
88
+ clipPath: [`circle(0px at ${x}px ${y}px)`, `circle(${radius}px at ${x}px ${y}px)`]
89
+ }, {
90
+ duration: 620,
91
+ easing: 'cubic-bezier(0.16, 1, 0.3, 1)',
92
+ pseudoElement: '::view-transition-new(root)'
93
+ });
94
+ await transition.finished;
95
+ } finally {
96
+ root.classList.remove('uv-theme-switching');
97
+ }
98
98
  };