@brumaombra/ui-vintage 0.7.8 → 0.7.9

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 (272) hide show
  1. package/README.md +308 -48
  2. package/module.mjs +1 -1
  3. package/package.json +2 -1
  4. package/src/components/background-grid/BackgroundGrid.vue +11 -2
  5. package/src/components/background-grid/index.ts +2 -2
  6. package/src/components/blog/AllPostsSection.vue +25 -9
  7. package/src/components/blog/BlogFAQSection.vue +8 -3
  8. package/src/components/blog/BlogHeaderSection.vue +14 -11
  9. package/src/components/blog/BlogInfoSection.vue +13 -11
  10. package/src/components/blog/BlogSectionTitle.vue +5 -5
  11. package/src/components/blog/CategoriesList.vue +11 -3
  12. package/src/components/blog/CategoriesSection.vue +11 -3
  13. package/src/components/blog/CategoryCard.vue +10 -8
  14. package/src/components/blog/HeaderCarousel.vue +24 -15
  15. package/src/components/blog/PostCard.vue +16 -11
  16. package/src/components/blog/PostsList.vue +12 -3
  17. package/src/components/blog/SocialShareSidebar.vue +11 -11
  18. package/src/components/blog/TableOfContents.vue +29 -13
  19. package/src/components/busy-indicator/BusyIndicator.vue +2 -2
  20. package/src/components/busy-indicator/busy-indicator-state.ts +11 -12
  21. package/src/components/busy-indicator/index.ts +3 -3
  22. package/src/components/card-grid/CardGrid.vue +25 -11
  23. package/src/components/chip/Chip.vue +15 -15
  24. package/src/components/chip/index.ts +2 -2
  25. package/src/components/confirm-dialog/ConfirmDialog.vue +9 -9
  26. package/src/components/confirm-dialog/confirm-dialog-state.ts +15 -14
  27. package/src/components/confirm-dialog/index.ts +3 -12
  28. package/src/components/content/BlogList.vue +11 -8
  29. package/src/components/content/BlogTable.vue +18 -14
  30. package/src/components/content/ProseHr.vue +10 -7
  31. package/src/components/content/Terminal.vue +70 -0
  32. package/src/components/content/index.ts +2 -1
  33. package/src/components/dashboard-shell/DashboardShell.vue +43 -64
  34. package/src/components/dashboard-shell/index.ts +2 -2
  35. package/src/components/data-list/DataList.vue +11 -13
  36. package/src/components/data-list/DataListItem.vue +9 -11
  37. package/src/components/data-list/DataListLabel.vue +9 -11
  38. package/src/components/data-list/DataListText.vue +9 -11
  39. package/src/components/data-list/DataListValue.vue +9 -11
  40. package/src/components/data-list/index.ts +5 -5
  41. package/src/components/empty-state-card/EmptyStateCard.vue +21 -11
  42. package/src/components/error-page/ErrorPage.vue +24 -27
  43. package/src/components/error-page/index.ts +2 -2
  44. package/src/components/info-card/InfoCard.vue +17 -11
  45. package/src/components/landing/index.ts +6 -6
  46. package/src/components/landing/landing-content/LandingContent.vue +5 -7
  47. package/src/components/landing/landing-content/index.ts +2 -2
  48. package/src/components/landing/landing-footer/LandingFooter.vue +26 -29
  49. package/src/components/landing/landing-footer/index.ts +3 -3
  50. package/src/components/landing/landing-navbar/LandingNavbar.vue +15 -17
  51. package/src/components/landing/landing-navbar/index.ts +2 -2
  52. package/src/components/landing/landing-shell/LandingShell.vue +10 -13
  53. package/src/components/landing/landing-shell/index.ts +2 -2
  54. package/src/components/language-flag/LanguageFlag.vue +6 -5
  55. package/src/components/language-flag/index.ts +1 -0
  56. package/src/components/language-selector/LanguageSelector.vue +20 -21
  57. package/src/components/load-more-button/LoadMoreButton.vue +18 -14
  58. package/src/components/loading-state-card/LoadingStateCard.vue +13 -9
  59. package/src/components/message-dialog/MessageDialog.vue +19 -19
  60. package/src/components/message-dialog/index.ts +3 -11
  61. package/src/components/message-dialog/message-dialog-state.ts +12 -11
  62. package/src/components/message-toast/MessageToast.vue +16 -16
  63. package/src/components/message-toast/index.ts +2 -9
  64. package/src/components/message-toast/message-toast-state.ts +9 -9
  65. package/src/components/page-header/PageHeader.vue +8 -5
  66. package/src/components/progress-component/ProgressComponent.vue +13 -10
  67. package/src/components/single-value-card/SingleValueCard.vue +22 -19
  68. package/src/components/slider-form-component/SliderFormComponent.vue +11 -20
  69. package/src/components/slider-form-component/index.ts +2 -2
  70. package/src/components/switch-form-component/SwitchFormComponent.vue +7 -9
  71. package/src/components/switch-form-component/index.ts +2 -2
  72. package/src/components/text-link/TextLink.vue +11 -7
  73. package/src/components/ui/accordion/Accordion.vue +10 -13
  74. package/src/components/ui/accordion/index.ts +1 -1
  75. package/src/components/ui/alert/Alert.vue +11 -10
  76. package/src/components/ui/alert/AlertDescription.vue +9 -8
  77. package/src/components/ui/alert/AlertTitle.vue +9 -8
  78. package/src/components/ui/alert/index.ts +10 -10
  79. package/src/components/ui/alert-dialog/AlertDialog.vue +13 -9
  80. package/src/components/ui/alert-dialog/AlertDialogAction.vue +14 -12
  81. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +14 -16
  82. package/src/components/ui/alert-dialog/AlertDialogContent.vue +24 -27
  83. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +13 -13
  84. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +9 -12
  85. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +9 -8
  86. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +13 -11
  87. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +8 -7
  88. package/src/components/ui/alert-dialog/index.ts +9 -9
  89. package/src/components/ui/badge/Badge.vue +11 -12
  90. package/src/components/ui/badge/index.ts +1 -1
  91. package/src/components/ui/breadcrumb/Breadcrumb.vue +9 -12
  92. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +15 -19
  93. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +10 -12
  94. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +13 -17
  95. package/src/components/ui/breadcrumb/BreadcrumbList.vue +10 -12
  96. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +10 -15
  97. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +14 -18
  98. package/src/components/ui/breadcrumb/index.ts +7 -7
  99. package/src/components/ui/busy/Busy.vue +36 -29
  100. package/src/components/ui/busy/index.ts +1 -1
  101. package/src/components/ui/button/Button.vue +18 -19
  102. package/src/components/ui/button/index.ts +54 -35
  103. package/src/components/ui/calendar/Calendar.vue +167 -121
  104. package/src/components/ui/calendar/CalendarCell.vue +18 -17
  105. package/src/components/ui/calendar/CalendarCellTrigger.vue +31 -33
  106. package/src/components/ui/calendar/CalendarGrid.vue +14 -17
  107. package/src/components/ui/calendar/CalendarGridBody.vue +9 -11
  108. package/src/components/ui/calendar/CalendarGridHead.vue +10 -12
  109. package/src/components/ui/calendar/CalendarGridRow.vue +14 -16
  110. package/src/components/ui/calendar/CalendarHeadCell.vue +18 -17
  111. package/src/components/ui/calendar/CalendarHeader.vue +18 -17
  112. package/src/components/ui/calendar/CalendarHeading.vue +18 -22
  113. package/src/components/ui/calendar/CalendarNextButton.vue +29 -26
  114. package/src/components/ui/calendar/CalendarPrevButton.vue +29 -26
  115. package/src/components/ui/calendar/index.ts +17 -13
  116. package/src/components/ui/card/Card.vue +21 -13
  117. package/src/components/ui/card/CardAction.vue +12 -7
  118. package/src/components/ui/card/CardContent.vue +8 -7
  119. package/src/components/ui/card/CardDescription.vue +16 -7
  120. package/src/components/ui/card/CardFooter.vue +8 -7
  121. package/src/components/ui/card/CardHeader.vue +12 -7
  122. package/src/components/ui/card/CardText.vue +12 -7
  123. package/src/components/ui/card/CardTitle.vue +9 -7
  124. package/src/components/ui/card/index.ts +8 -8
  125. package/src/components/ui/command/Command.vue +71 -61
  126. package/src/components/ui/command/CommandDialog.vue +33 -23
  127. package/src/components/ui/command/CommandEmpty.vue +19 -20
  128. package/src/components/ui/command/CommandGroup.vue +32 -35
  129. package/src/components/ui/command/CommandInput.vue +25 -21
  130. package/src/components/ui/command/CommandItem.vue +62 -59
  131. package/src/components/ui/command/CommandList.vue +21 -18
  132. package/src/components/ui/command/CommandSeparator.vue +13 -11
  133. package/src/components/ui/command/CommandShortcut.vue +13 -8
  134. package/src/components/ui/command/index.ts +24 -20
  135. package/src/components/ui/date-picker/DatePicker.vue +46 -37
  136. package/src/components/ui/date-picker/index.ts +2 -2
  137. package/src/components/ui/date-time-picker/DateTimePicker.vue +99 -95
  138. package/src/components/ui/date-time-picker/index.ts +2 -2
  139. package/src/components/ui/dialog/Dialog.vue +12 -9
  140. package/src/components/ui/dialog/DialogClose.vue +8 -10
  141. package/src/components/ui/dialog/DialogContent.vue +36 -42
  142. package/src/components/ui/dialog/DialogDescription.vue +16 -11
  143. package/src/components/ui/dialog/DialogFooter.vue +13 -12
  144. package/src/components/ui/dialog/DialogHeader.vue +9 -8
  145. package/src/components/ui/dialog/DialogOverlay.vue +16 -11
  146. package/src/components/ui/dialog/DialogScrollContent.vue +47 -45
  147. package/src/components/ui/dialog/DialogTitle.vue +13 -12
  148. package/src/components/ui/dialog/DialogTrigger.vue +8 -7
  149. package/src/components/ui/dialog/index.ts +10 -10
  150. package/src/components/ui/field/Field.vue +12 -14
  151. package/src/components/ui/field/FieldContent.vue +13 -11
  152. package/src/components/ui/field/FieldDescription.vue +15 -13
  153. package/src/components/ui/field/FieldError.vue +43 -40
  154. package/src/components/ui/field/FieldGroup.vue +13 -11
  155. package/src/components/ui/field/FieldLabel.vue +16 -14
  156. package/src/components/ui/field/FieldLegend.vue +16 -14
  157. package/src/components/ui/field/FieldSeparator.vue +17 -15
  158. package/src/components/ui/field/FieldSet.vue +14 -12
  159. package/src/components/ui/field/FieldTitle.vue +13 -11
  160. package/src/components/ui/field/index.ts +36 -36
  161. package/src/components/ui/input/Input.vue +23 -20
  162. package/src/components/ui/input/index.ts +1 -1
  163. package/src/components/ui/label/Label.vue +16 -15
  164. package/src/components/ui/label/index.ts +1 -1
  165. package/src/components/ui/native-select/NativeSelect.vue +31 -41
  166. package/src/components/ui/native-select/NativeSelectOptGroup.vue +8 -7
  167. package/src/components/ui/native-select/NativeSelectOption.vue +8 -7
  168. package/src/components/ui/native-select/index.ts +3 -3
  169. package/src/components/ui/popover/Popover.vue +12 -9
  170. package/src/components/ui/popover/PopoverAnchor.vue +8 -7
  171. package/src/components/ui/popover/PopoverContent.vue +27 -31
  172. package/src/components/ui/popover/PopoverTrigger.vue +8 -7
  173. package/src/components/ui/popover/index.ts +4 -4
  174. package/src/components/ui/progress/Progress.vue +18 -32
  175. package/src/components/ui/progress/index.ts +1 -1
  176. package/src/components/ui/scroll-area/ScrollArea.vue +23 -26
  177. package/src/components/ui/scroll-area/ScrollBar.vue +22 -26
  178. package/src/components/ui/scroll-area/index.ts +2 -2
  179. package/src/components/ui/select/Select.vue +12 -9
  180. package/src/components/ui/select/SelectContent.vue +39 -40
  181. package/src/components/ui/select/SelectGroup.vue +8 -7
  182. package/src/components/ui/select/SelectItem.vue +36 -41
  183. package/src/components/ui/select/SelectItemContent.vue +22 -15
  184. package/src/components/ui/select/SelectItemText.vue +8 -7
  185. package/src/components/ui/select/SelectLabel.vue +10 -9
  186. package/src/components/ui/select/SelectScrollDownButton.vue +21 -17
  187. package/src/components/ui/select/SelectScrollUpButton.vue +21 -17
  188. package/src/components/ui/select/SelectSeparator.vue +11 -9
  189. package/src/components/ui/select/SelectTrigger.vue +27 -25
  190. package/src/components/ui/select/SelectValue.vue +8 -7
  191. package/src/components/ui/select/SelectValueContent.vue +30 -18
  192. package/src/components/ui/select/index.ts +13 -13
  193. package/src/components/ui/separator/Separator.vue +17 -18
  194. package/src/components/ui/separator/index.ts +1 -1
  195. package/src/components/ui/sheet/Sheet.vue +12 -9
  196. package/src/components/ui/sheet/SheetClose.vue +8 -7
  197. package/src/components/ui/sheet/SheetContent.vue +36 -37
  198. package/src/components/ui/sheet/SheetDescription.vue +12 -11
  199. package/src/components/ui/sheet/SheetFooter.vue +8 -7
  200. package/src/components/ui/sheet/SheetHeader.vue +8 -7
  201. package/src/components/ui/sheet/SheetOverlay.vue +16 -11
  202. package/src/components/ui/sheet/SheetTitle.vue +12 -11
  203. package/src/components/ui/sheet/SheetTrigger.vue +8 -7
  204. package/src/components/ui/sheet/index.ts +8 -8
  205. package/src/components/ui/sidebar/Sidebar.vue +68 -61
  206. package/src/components/ui/sidebar/SidebarContent.vue +13 -8
  207. package/src/components/ui/sidebar/SidebarFooter.vue +13 -8
  208. package/src/components/ui/sidebar/SidebarGroup.vue +13 -8
  209. package/src/components/ui/sidebar/SidebarGroupAction.vue +16 -16
  210. package/src/components/ui/sidebar/SidebarGroupContent.vue +9 -8
  211. package/src/components/ui/sidebar/SidebarGroupLabel.vue +15 -14
  212. package/src/components/ui/sidebar/SidebarHeader.vue +13 -8
  213. package/src/components/ui/sidebar/SidebarInput.vue +14 -12
  214. package/src/components/ui/sidebar/SidebarInset.vue +14 -12
  215. package/src/components/ui/sidebar/SidebarMenu.vue +9 -8
  216. package/src/components/ui/sidebar/SidebarMenuAction.vue +25 -23
  217. package/src/components/ui/sidebar/SidebarMenuBadge.vue +19 -17
  218. package/src/components/ui/sidebar/SidebarMenuButton.vue +33 -32
  219. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +19 -18
  220. package/src/components/ui/sidebar/SidebarMenuItem.vue +9 -8
  221. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +17 -12
  222. package/src/components/ui/sidebar/SidebarMenuSub.vue +14 -12
  223. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +24 -21
  224. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +9 -8
  225. package/src/components/ui/sidebar/SidebarProvider.vue +63 -53
  226. package/src/components/ui/sidebar/SidebarRail.vue +20 -18
  227. package/src/components/ui/sidebar/SidebarSeparator.vue +10 -9
  228. package/src/components/ui/sidebar/SidebarTrigger.vue +15 -14
  229. package/src/components/ui/sidebar/index.ts +62 -58
  230. package/src/components/ui/sidebar/utils.ts +16 -16
  231. package/src/components/ui/skeleton/Skeleton.vue +12 -9
  232. package/src/components/ui/skeleton/index.ts +1 -1
  233. package/src/components/ui/slider/Slider.vue +24 -19
  234. package/src/components/ui/slider/index.ts +1 -1
  235. package/src/components/ui/switch/Switch.vue +26 -23
  236. package/src/components/ui/switch/index.ts +1 -1
  237. package/src/components/ui/table/Table.vue +11 -10
  238. package/src/components/ui/table/TableBody.vue +9 -11
  239. package/src/components/ui/table/TableCaption.vue +9 -11
  240. package/src/components/ui/table/TableCell.vue +13 -16
  241. package/src/components/ui/table/TableEmpty.vue +22 -25
  242. package/src/components/ui/table/TableFooter.vue +13 -11
  243. package/src/components/ui/table/TableHead.vue +13 -11
  244. package/src/components/ui/table/TableHeader.vue +9 -11
  245. package/src/components/ui/table/TableRow.vue +13 -11
  246. package/src/components/ui/table/index.ts +9 -9
  247. package/src/components/ui/tabs/Tabs.vue +18 -18
  248. package/src/components/ui/tabs/TabsContent.vue +14 -15
  249. package/src/components/ui/tabs/TabsList.vue +18 -18
  250. package/src/components/ui/tabs/TabsTrigger.vue +19 -20
  251. package/src/components/ui/tabs/index.ts +4 -4
  252. package/src/components/ui/textarea/Textarea.vue +23 -20
  253. package/src/components/ui/textarea/index.ts +1 -1
  254. package/src/components/ui/time-picker/TimePicker.vue +33 -38
  255. package/src/components/ui/time-picker/index.ts +2 -2
  256. package/src/components/ui/tooltip/Tooltip.vue +12 -9
  257. package/src/components/ui/tooltip/TooltipContent.vue +28 -20
  258. package/src/components/ui/tooltip/TooltipProvider.vue +9 -8
  259. package/src/components/ui/tooltip/TooltipTrigger.vue +8 -7
  260. package/src/components/ui/tooltip/index.ts +4 -4
  261. package/src/i18n/de.json +5 -0
  262. package/src/i18n/en.json +5 -0
  263. package/src/i18n/es.json +5 -0
  264. package/src/i18n/fr.json +5 -0
  265. package/src/i18n/it.json +5 -0
  266. package/src/i18n/ja.json +5 -0
  267. package/src/i18n/pt.json +5 -0
  268. package/src/i18n/ru.json +5 -0
  269. package/src/i18n/zh.json +5 -0
  270. package/src/lib/common-types.ts +2 -0
  271. package/src/lib/i18n.ts +0 -5
  272. package/src/runtime/{ui-vintage-i18n-plugin.js → ui-vintage-i18n-plugin.ts} +30 -8
@@ -1,18 +1,19 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <div
12
- data-slot="dialog-footer"
13
- :class="cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', props.class)"
14
- >
15
- <slot />
16
- </div>
17
- </template>
18
-
12
+ <div data-slot="dialog-footer" :class="cn(
13
+ 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',
14
+ props.class
15
+ )
16
+ ">
17
+ <slot />
18
+ </div>
19
+ </template>
@@ -1,14 +1,15 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <div data-slot="dialog-header" :class="cn('flex flex-col gap-1.5', props.class)">
12
- <slot />
13
- </div>
14
- </template>
12
+ <div data-slot="dialog-header" :class="cn('flex flex-col gap-1.5', props.class)">
13
+ <slot />
14
+ </div>
15
+ </template>
@@ -1,17 +1,22 @@
1
1
  <script setup lang="ts">
2
- import type { DialogOverlayProps } from "reka-ui"
3
- import type { HTMLAttributes } from "vue"
4
- import { reactiveOmit } from "@vueuse/core"
5
- import { DialogOverlay } from "reka-ui"
6
- import { cn } from "../../../lib/utils"
2
+ import type { DialogOverlayProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DialogOverlay } from 'reka-ui';
6
+ import { cn } from '../../../lib/utils';
7
7
 
8
- const props = defineProps<DialogOverlayProps & { class?: HTMLAttributes["class"] }>()
8
+ // Props
9
+ const props = defineProps<DialogOverlayProps & { class?: HTMLAttributes['class'] }>();
9
10
 
10
- const delegatedProps = reactiveOmit(props, "class")
11
+ const delegatedProps = reactiveOmit(props, 'class');
11
12
  </script>
12
13
 
13
14
  <template>
14
- <DialogOverlay data-slot="dialog-overlay" v-bind="delegatedProps" :class="cn('fixed inset-0 isolate z-50 bg-black/45 backdrop-blur-[2px] transition-[opacity,backdrop-filter] ease-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', props.class)">
15
- <slot />
16
- </DialogOverlay>
17
- </template>
15
+ <DialogOverlay data-slot="dialog-overlay" v-bind="delegatedProps" :class="cn(
16
+ 'fixed inset-0 isolate z-50 bg-black/45 backdrop-blur-[2px] transition-[opacity,backdrop-filter] ease-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
17
+ props.class
18
+ )
19
+ ">
20
+ <slot />
21
+ </DialogOverlay>
22
+ </template>
@@ -1,57 +1,59 @@
1
1
  <script setup lang="ts">
2
- import type { DialogContentEmits, DialogContentProps } from "reka-ui"
3
- import type { HTMLAttributes } from "vue"
4
- import { reactiveOmit } from "@vueuse/core"
5
- import {
6
- DialogClose,
7
- DialogContent,
8
- DialogOverlay,
9
- DialogPortal,
10
- useForwardPropsEmits,
11
- } from "reka-ui"
12
- import { cn } from "../../../lib/utils"
13
- import { Button } from "../button"
2
+ import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DialogClose, DialogContent, DialogOverlay, DialogPortal, useForwardPropsEmits } from 'reka-ui';
6
+ import { cn } from '../../../lib/utils';
7
+ import { Button } from '../button';
14
8
 
15
9
  defineOptions({
16
- inheritAttrs: false,
17
- })
10
+ inheritAttrs: false
11
+ });
18
12
 
13
+ // Props
19
14
  const props = withDefaults(defineProps<DialogContentProps & {
20
- class?: HTMLAttributes["class"]
21
- showCloseButton?: boolean
15
+ class?: HTMLAttributes['class'];
16
+ showCloseButton?: boolean;
22
17
  }>(), {
23
- showCloseButton: false,
24
- })
25
- const emits = defineEmits<DialogContentEmits>()
18
+ showCloseButton: false
19
+ });
26
20
 
27
- const delegatedProps = reactiveOmit(props, "class")
21
+ // Emits
22
+ const emits = defineEmits<DialogContentEmits>();
28
23
 
29
- const forwarded = useForwardPropsEmits(delegatedProps, emits)
24
+ const delegatedProps = reactiveOmit(props, 'class');
25
+
26
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
30
27
  </script>
31
28
 
32
29
  <template>
33
- <DialogPortal>
34
- <DialogOverlay class="fixed inset-0 isolate z-50 grid place-items-center overflow-y-auto bg-black/45 backdrop-blur-[2px] transition-[opacity,backdrop-filter] ease-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0">
35
- <DialogContent :class="cn(
36
- 'relative z-50 my-6 grid w-full max-w-[calc(100%-2rem)] gap-4 rounded border border-border bg-card p-6 text-card-foreground outline-none duration-200 sm:max-w-[425px]',
37
- props.class,
38
- )
39
- " v-bind="{ ...$attrs, ...forwarded }" @pointer-down-outside="(event) => {
40
- const originalEvent = event.detail.originalEvent;
41
- const target = originalEvent.target as HTMLElement;
42
- if (originalEvent.offsetX > target.clientWidth || originalEvent.offsetY > target.clientHeight) {
43
- event.preventDefault();
44
- }
45
- }">
46
- <slot />
30
+ <DialogPortal>
31
+ <DialogOverlay class="fixed inset-0 isolate z-50 grid place-items-center overflow-y-auto bg-black/45 backdrop-blur-[2px] transition-[opacity,backdrop-filter] ease-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0">
32
+ <DialogContent :class="cn(
33
+ 'relative z-50 my-6 grid w-full max-w-[calc(100%-2rem)] gap-4 rounded border border-border bg-card p-6 text-card-foreground outline-none duration-200 sm:max-w-106.25',
34
+ props.class
35
+ )
36
+ " v-bind="{ ...$attrs, ...forwarded }" @pointer-down-outside="
37
+ (event) => {
38
+ const originalEvent = event.detail.originalEvent;
39
+ const target = originalEvent.target as HTMLElement;
40
+ if (
41
+ originalEvent.offsetX > target.clientWidth ||
42
+ originalEvent.offsetY > target.clientHeight
43
+ ) {
44
+ event.preventDefault();
45
+ }
46
+ }
47
+ ">
48
+ <slot />
47
49
 
48
- <DialogClose v-if="props.showCloseButton" data-slot="dialog-close" as-child>
49
- <Button variant="ghost" size="icon-sm" class="absolute top-4 right-4 p-0.5">
50
- <span aria-hidden="true">X</span>
51
- <span class="sr-only">Close</span>
52
- </Button>
53
- </DialogClose>
54
- </DialogContent>
55
- </DialogOverlay>
56
- </DialogPortal>
57
- </template>
50
+ <DialogClose v-if="props.showCloseButton" data-slot="dialog-close" as-child>
51
+ <Button variant="ghost" size="icon-sm" class="absolute top-4 right-4 p-0.5">
52
+ <span aria-hidden="true">X</span>
53
+ <span class="sr-only">Close</span>
54
+ </Button>
55
+ </DialogClose>
56
+ </DialogContent>
57
+ </DialogOverlay>
58
+ </DialogPortal>
59
+ </template>
@@ -1,19 +1,20 @@
1
1
  <script setup lang="ts">
2
- import type { DialogTitleProps } from "reka-ui"
3
- import type { HTMLAttributes } from "vue"
4
- import { reactiveOmit } from "@vueuse/core"
5
- import { DialogTitle, useForwardProps } from "reka-ui"
6
- import { cn } from "../../../lib/utils"
2
+ import type { DialogTitleProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DialogTitle, useForwardProps } from 'reka-ui';
6
+ import { cn } from '../../../lib/utils';
7
7
 
8
- const props = defineProps<DialogTitleProps & { class?: HTMLAttributes["class"] }>()
8
+ // Props
9
+ const props = defineProps<DialogTitleProps & { class?: HTMLAttributes['class'] }>();
9
10
 
10
- const delegatedProps = reactiveOmit(props, "class")
11
+ const delegatedProps = reactiveOmit(props, 'class');
11
12
 
12
- const forwardedProps = useForwardProps(delegatedProps)
13
+ const forwardedProps = useForwardProps(delegatedProps);
13
14
  </script>
14
15
 
15
16
  <template>
16
- <DialogTitle data-slot="dialog-title" v-bind="forwardedProps" :class="cn('text-base font-semibold', props.class)">
17
- <slot />
18
- </DialogTitle>
19
- </template>
17
+ <DialogTitle data-slot="dialog-title" v-bind="forwardedProps" :class="cn('text-base font-semibold', props.class)">
18
+ <slot />
19
+ </DialogTitle>
20
+ </template>
@@ -1,12 +1,13 @@
1
1
  <script setup lang="ts">
2
- import type { DialogTriggerProps } from "reka-ui"
3
- import { DialogTrigger } from "reka-ui"
2
+ import type { DialogTriggerProps } from 'reka-ui';
3
+ import { DialogTrigger } from 'reka-ui';
4
4
 
5
- const props = defineProps<DialogTriggerProps>()
5
+ // Props
6
+ const props = defineProps<DialogTriggerProps>();
6
7
  </script>
7
8
 
8
9
  <template>
9
- <DialogTrigger data-slot="dialog-trigger" v-bind="props">
10
- <slot />
11
- </DialogTrigger>
12
- </template>
10
+ <DialogTrigger data-slot="dialog-trigger" v-bind="props">
11
+ <slot />
12
+ </DialogTrigger>
13
+ </template>
@@ -1,10 +1,10 @@
1
- export { default as Dialog } from "./Dialog.vue"
2
- export { default as DialogClose } from "./DialogClose.vue"
3
- export { default as DialogContent } from "./DialogContent.vue"
4
- export { default as DialogDescription } from "./DialogDescription.vue"
5
- export { default as DialogFooter } from "./DialogFooter.vue"
6
- export { default as DialogHeader } from "./DialogHeader.vue"
7
- export { default as DialogOverlay } from "./DialogOverlay.vue"
8
- export { default as DialogScrollContent } from "./DialogScrollContent.vue"
9
- export { default as DialogTitle } from "./DialogTitle.vue"
10
- export { default as DialogTrigger } from "./DialogTrigger.vue"
1
+ export { default as Dialog } from './Dialog.vue';
2
+ export { default as DialogClose } from './DialogClose.vue';
3
+ export { default as DialogContent } from './DialogContent.vue';
4
+ export { default as DialogDescription } from './DialogDescription.vue';
5
+ export { default as DialogFooter } from './DialogFooter.vue';
6
+ export { default as DialogHeader } from './DialogHeader.vue';
7
+ export { default as DialogOverlay } from './DialogOverlay.vue';
8
+ export { default as DialogScrollContent } from './DialogScrollContent.vue';
9
+ export { default as DialogTitle } from './DialogTitle.vue';
10
+ export { default as DialogTrigger } from './DialogTrigger.vue';
@@ -1,20 +1,18 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import type { FieldVariants } from "."
4
- import { cn } from "../../../lib/utils"
5
- import { fieldVariants } from "."
2
+ import type { HTMLAttributes } from 'vue';
3
+ import type { FieldVariants } from '.';
4
+ import { cn } from '../../../lib/utils';
5
+ import { fieldVariants } from '.';
6
6
 
7
+ // Props
7
8
  const props = defineProps<{
8
- class?: HTMLAttributes["class"]
9
- orientation?: FieldVariants["orientation"]
10
- }>()
9
+ class?: HTMLAttributes['class'];
10
+ orientation?: FieldVariants['orientation'];
11
+ }>();
11
12
  </script>
12
13
 
13
14
  <template>
14
- <div role="group" data-slot="field" :data-orientation="orientation" :class="cn(
15
- fieldVariants({ orientation }),
16
- props.class,
17
- )">
18
- <slot />
19
- </div>
20
- </template>
15
+ <div role="group" data-slot="field" :data-orientation="orientation" :class="cn(fieldVariants({ orientation }), props.class)">
16
+ <slot />
17
+ </div>
18
+ </template>
@@ -1,17 +1,19 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <div data-slot="field-content" :class="cn(
12
- 'group/field-content flex flex-1 flex-col gap-1.5 leading-snug',
13
- props.class,
14
- )">
15
- <slot />
16
- </div>
17
- </template>
12
+ <div data-slot="field-content" :class="cn(
13
+ 'group/field-content flex flex-1 flex-col gap-1.5 leading-snug',
14
+ props.class
15
+ )
16
+ ">
17
+ <slot />
18
+ </div>
19
+ </template>
@@ -1,19 +1,21 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <p data-slot="field-description" :class="cn(
12
- 'text-xs leading-5 font-normal text-(--text-secondary-light) dark:text-(--text-secondary-dark) group-has-[[data-orientation=horizontal]]/field:text-balance',
13
- 'last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5',
14
- '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',
15
- props.class,
16
- )">
17
- <slot />
18
- </p>
19
- </template>
12
+ <p data-slot="field-description" :class="cn(
13
+ 'text-xs leading-5 font-normal text-(--text-secondary-light) dark:text-(--text-secondary-dark) group-has-data-[orientation=horizontal]/field:text-balance',
14
+ 'last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5',
15
+ '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',
16
+ props.class
17
+ )
18
+ ">
19
+ <slot />
20
+ </p>
21
+ </template>
@@ -1,48 +1,51 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { computed } from "vue"
4
- import { cn } from "../../../lib/utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { computed } from 'vue';
4
+ import { cn } from '../../../lib/utils';
5
5
 
6
+ // Props
6
7
  const props = defineProps<{
7
- class?: HTMLAttributes["class"]
8
- errors?: Array<string | { message: string | undefined } | undefined>
9
- }>()
8
+ class?: HTMLAttributes['class'];
9
+ errors?: Array<string | { message: string | undefined } | undefined>;
10
+ }>();
10
11
 
11
12
  const content = computed(() => {
12
- if (!props.errors || props.errors.length === 0)
13
- return null
14
-
15
- const uniqueErrors = [
16
- ...new Map(
17
- props.errors
18
- .filter(Boolean)
19
- .map((error) => {
20
- const message = typeof error === "string" ? error : error?.message
21
- return [message, error]
22
- }),
23
- ).values(),
24
- ]
25
-
26
- if (uniqueErrors.length === 1 && uniqueErrors[0]) {
27
- return typeof uniqueErrors[0] === "string" ? uniqueErrors[0] : uniqueErrors[0].message
28
- }
29
-
30
- return uniqueErrors.map(error => typeof error === "string" ? error : error?.message)
31
- })
13
+ if (!props.errors || props.errors.length === 0) return null;
14
+
15
+ const uniqueErrors = [
16
+ ...new Map(
17
+ props.errors.filter(Boolean).map((error) => {
18
+ const message =
19
+ typeof error === 'string' ? error : error?.message;
20
+ return [message, error];
21
+ })
22
+ ).values()
23
+ ];
24
+
25
+ if (uniqueErrors.length === 1 && uniqueErrors[0]) {
26
+ return typeof uniqueErrors[0] === 'string'
27
+ ? uniqueErrors[0]
28
+ : uniqueErrors[0].message;
29
+ }
30
+
31
+ return uniqueErrors.map((error) =>
32
+ typeof error === 'string' ? error : error?.message
33
+ );
34
+ });
32
35
  </script>
33
36
 
34
37
  <template>
35
- <div v-if="$slots.default || content" role="alert" data-slot="field-error" :class="cn('text-destructive text-xs font-normal', props.class)">
36
- <slot v-if="$slots.default" />
37
-
38
- <template v-else-if="typeof content === 'string'">
39
- {{ content }}
40
- </template>
41
-
42
- <ul v-else-if="Array.isArray(content)" class="ml-4 flex list-disc flex-col gap-1">
43
- <li v-for="(error, index) in content" :key="index">
44
- {{ error }}
45
- </li>
46
- </ul>
47
- </div>
48
- </template>
38
+ <div v-if="$slots.default || content" role="alert" data-slot="field-error" :class="cn('text-destructive text-xs font-normal', props.class)">
39
+ <slot v-if="$slots.default" />
40
+
41
+ <template v-else-if="typeof content === 'string'">
42
+ {{ content }}
43
+ </template>
44
+
45
+ <ul v-else-if="Array.isArray(content)" class="ml-4 flex list-disc flex-col gap-1">
46
+ <li v-for="(error, index) in content" :key="index">
47
+ {{ error }}
48
+ </li>
49
+ </ul>
50
+ </div>
51
+ </template>
@@ -1,17 +1,19 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <div data-slot="field-group" :class="cn(
12
- 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4',
13
- props.class,
14
- )">
15
- <slot />
16
- </div>
17
- </template>
12
+ <div data-slot="field-group" :class="cn(
13
+ 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4',
14
+ props.class
15
+ )
16
+ ">
17
+ <slot />
18
+ </div>
19
+ </template>
@@ -1,20 +1,22 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
4
- import { Label } from '../label'
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
+ import { Label } from '../label';
5
5
 
6
+ // Props
6
7
  const props = defineProps<{
7
- class?: HTMLAttributes["class"]
8
- }>()
8
+ class?: HTMLAttributes['class'];
9
+ }>();
9
10
  </script>
10
11
 
11
12
  <template>
12
- <Label data-slot="field-label" :class="cn(
13
- 'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50',
14
- 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4',
15
- 'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10',
16
- props.class,
17
- )">
18
- <slot />
19
- </Label>
20
- </template>
13
+ <Label data-slot="field-label" :class="cn(
14
+ 'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50',
15
+ 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-4',
16
+ 'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10',
17
+ props.class
18
+ )
19
+ ">
20
+ <slot />
21
+ </Label>
22
+ </template>
@@ -1,20 +1,22 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- variant?: "legend" | "label"
8
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ variant?: 'legend' | 'label';
9
+ }>();
9
10
  </script>
10
11
 
11
12
  <template>
12
- <legend data-slot="field-legend" :data-variant="variant" :class="cn(
13
- 'mb-3 font-semibold',
14
- 'data-[variant=legend]:text-base',
15
- 'data-[variant=label]:text-sm',
16
- props.class,
17
- )">
18
- <slot />
19
- </legend>
20
- </template>
13
+ <legend data-slot="field-legend" :data-variant="variant" :class="cn(
14
+ 'mb-3 font-semibold',
15
+ 'data-[variant=legend]:text-base',
16
+ 'data-[variant=label]:text-sm',
17
+ props.class
18
+ )
19
+ ">
20
+ <slot />
21
+ </legend>
22
+ </template>
@@ -1,21 +1,23 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
4
- import { Separator } from '../separator'
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
+ import { Separator } from '../separator';
5
5
 
6
+ // Props
6
7
  const props = defineProps<{
7
- class?: HTMLAttributes["class"]
8
- }>()
8
+ class?: HTMLAttributes['class'];
9
+ }>();
9
10
  </script>
10
11
 
11
12
  <template>
12
- <div data-slot="field-separator" :data-content="!!$slots.default" :class="cn(
13
- 'relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2',
14
- props.class,
15
- )">
16
- <Separator class="absolute inset-0 top-1/2" />
17
- <span v-if="$slots.default" class="bg-background text-muted-foreground relative mx-auto block w-fit px-2" data-slot="field-separator-content">
18
- <slot />
19
- </span>
20
- </div>
21
- </template>
13
+ <div data-slot="field-separator" :data-content="!!$slots.default" :class="cn(
14
+ 'relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2',
15
+ props.class
16
+ )
17
+ ">
18
+ <Separator class="absolute inset-0 top-1/2" />
19
+ <span v-if="$slots.default" class="bg-background text-muted-foreground relative mx-auto block w-fit px-2" data-slot="field-separator-content">
20
+ <slot />
21
+ </span>
22
+ </div>
23
+ </template>