@brumaombra/ui-vintage 0.7.8 → 0.7.10

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 (275) 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/BlogContentRenderer.vue +133 -0
  8. package/src/components/blog/BlogFAQSection.vue +8 -3
  9. package/src/components/blog/BlogHeaderSection.vue +14 -11
  10. package/src/components/blog/BlogInfoSection.vue +13 -11
  11. package/src/components/blog/BlogProgressBar.vue +77 -0
  12. package/src/components/blog/BlogSectionTitle.vue +5 -5
  13. package/src/components/blog/CategoriesList.vue +11 -3
  14. package/src/components/blog/CategoriesSection.vue +11 -3
  15. package/src/components/blog/CategoryCard.vue +10 -8
  16. package/src/components/blog/HeaderCarousel.vue +24 -15
  17. package/src/components/blog/PostCard.vue +16 -11
  18. package/src/components/blog/PostsList.vue +12 -3
  19. package/src/components/blog/SocialShareSidebar.vue +43 -41
  20. package/src/components/blog/TableOfContents.vue +29 -13
  21. package/src/components/blog/index.ts +1 -0
  22. package/src/components/busy-indicator/BusyIndicator.vue +2 -2
  23. package/src/components/busy-indicator/busy-indicator-state.ts +11 -12
  24. package/src/components/busy-indicator/index.ts +3 -3
  25. package/src/components/card-grid/CardGrid.vue +25 -11
  26. package/src/components/chip/Chip.vue +15 -15
  27. package/src/components/chip/index.ts +2 -2
  28. package/src/components/confirm-dialog/ConfirmDialog.vue +9 -9
  29. package/src/components/confirm-dialog/confirm-dialog-state.ts +15 -14
  30. package/src/components/confirm-dialog/index.ts +3 -12
  31. package/src/components/content/BlogList.vue +11 -8
  32. package/src/components/content/BlogTable.vue +18 -14
  33. package/src/components/content/ProseHr.vue +10 -7
  34. package/src/components/content/Terminal.vue +70 -0
  35. package/src/components/content/index.ts +2 -1
  36. package/src/components/dashboard-shell/DashboardShell.vue +43 -64
  37. package/src/components/dashboard-shell/index.ts +2 -2
  38. package/src/components/data-list/DataList.vue +11 -13
  39. package/src/components/data-list/DataListItem.vue +9 -11
  40. package/src/components/data-list/DataListLabel.vue +9 -11
  41. package/src/components/data-list/DataListText.vue +9 -11
  42. package/src/components/data-list/DataListValue.vue +9 -11
  43. package/src/components/data-list/index.ts +5 -5
  44. package/src/components/empty-state-card/EmptyStateCard.vue +21 -11
  45. package/src/components/error-page/ErrorPage.vue +24 -27
  46. package/src/components/error-page/index.ts +2 -2
  47. package/src/components/info-card/InfoCard.vue +17 -11
  48. package/src/components/landing/index.ts +6 -6
  49. package/src/components/landing/landing-content/LandingContent.vue +5 -7
  50. package/src/components/landing/landing-content/index.ts +2 -2
  51. package/src/components/landing/landing-footer/LandingFooter.vue +26 -29
  52. package/src/components/landing/landing-footer/index.ts +3 -3
  53. package/src/components/landing/landing-navbar/LandingNavbar.vue +51 -19
  54. package/src/components/landing/landing-navbar/index.ts +2 -2
  55. package/src/components/landing/landing-shell/LandingShell.vue +12 -15
  56. package/src/components/landing/landing-shell/index.ts +2 -2
  57. package/src/components/language-flag/LanguageFlag.vue +6 -5
  58. package/src/components/language-flag/index.ts +1 -0
  59. package/src/components/language-selector/LanguageSelector.vue +20 -21
  60. package/src/components/load-more-button/LoadMoreButton.vue +18 -14
  61. package/src/components/loading-state-card/LoadingStateCard.vue +13 -9
  62. package/src/components/message-dialog/MessageDialog.vue +19 -19
  63. package/src/components/message-dialog/index.ts +3 -11
  64. package/src/components/message-dialog/message-dialog-state.ts +12 -11
  65. package/src/components/message-toast/MessageToast.vue +16 -16
  66. package/src/components/message-toast/index.ts +2 -9
  67. package/src/components/message-toast/message-toast-state.ts +9 -9
  68. package/src/components/page-header/PageHeader.vue +8 -5
  69. package/src/components/progress-component/ProgressComponent.vue +13 -10
  70. package/src/components/single-value-card/SingleValueCard.vue +22 -19
  71. package/src/components/slider-form-component/SliderFormComponent.vue +11 -20
  72. package/src/components/slider-form-component/index.ts +2 -2
  73. package/src/components/switch-form-component/SwitchFormComponent.vue +7 -9
  74. package/src/components/switch-form-component/index.ts +2 -2
  75. package/src/components/text-link/TextLink.vue +11 -7
  76. package/src/components/ui/accordion/Accordion.vue +10 -13
  77. package/src/components/ui/accordion/index.ts +1 -1
  78. package/src/components/ui/alert/Alert.vue +11 -10
  79. package/src/components/ui/alert/AlertDescription.vue +9 -8
  80. package/src/components/ui/alert/AlertTitle.vue +9 -8
  81. package/src/components/ui/alert/index.ts +10 -10
  82. package/src/components/ui/alert-dialog/AlertDialog.vue +13 -9
  83. package/src/components/ui/alert-dialog/AlertDialogAction.vue +14 -12
  84. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +14 -16
  85. package/src/components/ui/alert-dialog/AlertDialogContent.vue +24 -27
  86. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +13 -13
  87. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +9 -12
  88. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +9 -8
  89. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +13 -11
  90. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +8 -7
  91. package/src/components/ui/alert-dialog/index.ts +9 -9
  92. package/src/components/ui/badge/Badge.vue +11 -12
  93. package/src/components/ui/badge/index.ts +1 -1
  94. package/src/components/ui/breadcrumb/Breadcrumb.vue +9 -12
  95. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +15 -19
  96. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +10 -12
  97. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +13 -17
  98. package/src/components/ui/breadcrumb/BreadcrumbList.vue +10 -12
  99. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +10 -15
  100. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +14 -18
  101. package/src/components/ui/breadcrumb/index.ts +7 -7
  102. package/src/components/ui/busy/Busy.vue +36 -29
  103. package/src/components/ui/busy/index.ts +1 -1
  104. package/src/components/ui/button/Button.vue +18 -19
  105. package/src/components/ui/button/index.ts +54 -35
  106. package/src/components/ui/calendar/Calendar.vue +167 -121
  107. package/src/components/ui/calendar/CalendarCell.vue +18 -17
  108. package/src/components/ui/calendar/CalendarCellTrigger.vue +31 -33
  109. package/src/components/ui/calendar/CalendarGrid.vue +14 -17
  110. package/src/components/ui/calendar/CalendarGridBody.vue +9 -11
  111. package/src/components/ui/calendar/CalendarGridHead.vue +10 -12
  112. package/src/components/ui/calendar/CalendarGridRow.vue +14 -16
  113. package/src/components/ui/calendar/CalendarHeadCell.vue +18 -17
  114. package/src/components/ui/calendar/CalendarHeader.vue +18 -17
  115. package/src/components/ui/calendar/CalendarHeading.vue +18 -22
  116. package/src/components/ui/calendar/CalendarNextButton.vue +29 -26
  117. package/src/components/ui/calendar/CalendarPrevButton.vue +29 -26
  118. package/src/components/ui/calendar/index.ts +17 -13
  119. package/src/components/ui/card/Card.vue +21 -13
  120. package/src/components/ui/card/CardAction.vue +12 -7
  121. package/src/components/ui/card/CardContent.vue +8 -7
  122. package/src/components/ui/card/CardDescription.vue +16 -7
  123. package/src/components/ui/card/CardFooter.vue +8 -7
  124. package/src/components/ui/card/CardHeader.vue +12 -7
  125. package/src/components/ui/card/CardText.vue +12 -7
  126. package/src/components/ui/card/CardTitle.vue +9 -7
  127. package/src/components/ui/card/index.ts +8 -8
  128. package/src/components/ui/command/Command.vue +71 -61
  129. package/src/components/ui/command/CommandDialog.vue +33 -23
  130. package/src/components/ui/command/CommandEmpty.vue +19 -20
  131. package/src/components/ui/command/CommandGroup.vue +32 -35
  132. package/src/components/ui/command/CommandInput.vue +25 -21
  133. package/src/components/ui/command/CommandItem.vue +62 -59
  134. package/src/components/ui/command/CommandList.vue +21 -18
  135. package/src/components/ui/command/CommandSeparator.vue +13 -11
  136. package/src/components/ui/command/CommandShortcut.vue +13 -8
  137. package/src/components/ui/command/index.ts +24 -20
  138. package/src/components/ui/date-picker/DatePicker.vue +46 -37
  139. package/src/components/ui/date-picker/index.ts +2 -2
  140. package/src/components/ui/date-time-picker/DateTimePicker.vue +99 -95
  141. package/src/components/ui/date-time-picker/index.ts +2 -2
  142. package/src/components/ui/dialog/Dialog.vue +12 -9
  143. package/src/components/ui/dialog/DialogClose.vue +8 -10
  144. package/src/components/ui/dialog/DialogContent.vue +36 -42
  145. package/src/components/ui/dialog/DialogDescription.vue +16 -11
  146. package/src/components/ui/dialog/DialogFooter.vue +13 -12
  147. package/src/components/ui/dialog/DialogHeader.vue +9 -8
  148. package/src/components/ui/dialog/DialogOverlay.vue +16 -11
  149. package/src/components/ui/dialog/DialogScrollContent.vue +47 -45
  150. package/src/components/ui/dialog/DialogTitle.vue +13 -12
  151. package/src/components/ui/dialog/DialogTrigger.vue +8 -7
  152. package/src/components/ui/dialog/index.ts +10 -10
  153. package/src/components/ui/field/Field.vue +12 -14
  154. package/src/components/ui/field/FieldContent.vue +13 -11
  155. package/src/components/ui/field/FieldDescription.vue +15 -13
  156. package/src/components/ui/field/FieldError.vue +43 -40
  157. package/src/components/ui/field/FieldGroup.vue +13 -11
  158. package/src/components/ui/field/FieldLabel.vue +16 -14
  159. package/src/components/ui/field/FieldLegend.vue +16 -14
  160. package/src/components/ui/field/FieldSeparator.vue +17 -15
  161. package/src/components/ui/field/FieldSet.vue +14 -12
  162. package/src/components/ui/field/FieldTitle.vue +13 -11
  163. package/src/components/ui/field/index.ts +36 -36
  164. package/src/components/ui/input/Input.vue +23 -20
  165. package/src/components/ui/input/index.ts +1 -1
  166. package/src/components/ui/label/Label.vue +16 -15
  167. package/src/components/ui/label/index.ts +1 -1
  168. package/src/components/ui/native-select/NativeSelect.vue +31 -41
  169. package/src/components/ui/native-select/NativeSelectOptGroup.vue +8 -7
  170. package/src/components/ui/native-select/NativeSelectOption.vue +8 -7
  171. package/src/components/ui/native-select/index.ts +3 -3
  172. package/src/components/ui/popover/Popover.vue +12 -9
  173. package/src/components/ui/popover/PopoverAnchor.vue +8 -7
  174. package/src/components/ui/popover/PopoverContent.vue +27 -31
  175. package/src/components/ui/popover/PopoverTrigger.vue +8 -7
  176. package/src/components/ui/popover/index.ts +4 -4
  177. package/src/components/ui/progress/Progress.vue +18 -32
  178. package/src/components/ui/progress/index.ts +1 -1
  179. package/src/components/ui/scroll-area/ScrollArea.vue +23 -26
  180. package/src/components/ui/scroll-area/ScrollBar.vue +22 -26
  181. package/src/components/ui/scroll-area/index.ts +2 -2
  182. package/src/components/ui/select/Select.vue +12 -9
  183. package/src/components/ui/select/SelectContent.vue +39 -40
  184. package/src/components/ui/select/SelectGroup.vue +8 -7
  185. package/src/components/ui/select/SelectItem.vue +36 -41
  186. package/src/components/ui/select/SelectItemContent.vue +22 -15
  187. package/src/components/ui/select/SelectItemText.vue +8 -7
  188. package/src/components/ui/select/SelectLabel.vue +10 -9
  189. package/src/components/ui/select/SelectScrollDownButton.vue +21 -17
  190. package/src/components/ui/select/SelectScrollUpButton.vue +21 -17
  191. package/src/components/ui/select/SelectSeparator.vue +11 -9
  192. package/src/components/ui/select/SelectTrigger.vue +27 -25
  193. package/src/components/ui/select/SelectValue.vue +8 -7
  194. package/src/components/ui/select/SelectValueContent.vue +30 -18
  195. package/src/components/ui/select/index.ts +13 -13
  196. package/src/components/ui/separator/Separator.vue +17 -18
  197. package/src/components/ui/separator/index.ts +1 -1
  198. package/src/components/ui/sheet/Sheet.vue +12 -9
  199. package/src/components/ui/sheet/SheetClose.vue +8 -7
  200. package/src/components/ui/sheet/SheetContent.vue +36 -37
  201. package/src/components/ui/sheet/SheetDescription.vue +12 -11
  202. package/src/components/ui/sheet/SheetFooter.vue +8 -7
  203. package/src/components/ui/sheet/SheetHeader.vue +8 -7
  204. package/src/components/ui/sheet/SheetOverlay.vue +16 -11
  205. package/src/components/ui/sheet/SheetTitle.vue +12 -11
  206. package/src/components/ui/sheet/SheetTrigger.vue +8 -7
  207. package/src/components/ui/sheet/index.ts +8 -8
  208. package/src/components/ui/sidebar/Sidebar.vue +68 -61
  209. package/src/components/ui/sidebar/SidebarContent.vue +13 -8
  210. package/src/components/ui/sidebar/SidebarFooter.vue +13 -8
  211. package/src/components/ui/sidebar/SidebarGroup.vue +13 -8
  212. package/src/components/ui/sidebar/SidebarGroupAction.vue +16 -16
  213. package/src/components/ui/sidebar/SidebarGroupContent.vue +9 -8
  214. package/src/components/ui/sidebar/SidebarGroupLabel.vue +15 -14
  215. package/src/components/ui/sidebar/SidebarHeader.vue +13 -8
  216. package/src/components/ui/sidebar/SidebarInput.vue +14 -12
  217. package/src/components/ui/sidebar/SidebarInset.vue +14 -12
  218. package/src/components/ui/sidebar/SidebarMenu.vue +9 -8
  219. package/src/components/ui/sidebar/SidebarMenuAction.vue +25 -23
  220. package/src/components/ui/sidebar/SidebarMenuBadge.vue +19 -17
  221. package/src/components/ui/sidebar/SidebarMenuButton.vue +33 -32
  222. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +19 -18
  223. package/src/components/ui/sidebar/SidebarMenuItem.vue +9 -8
  224. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +17 -12
  225. package/src/components/ui/sidebar/SidebarMenuSub.vue +14 -12
  226. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +24 -21
  227. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +9 -8
  228. package/src/components/ui/sidebar/SidebarProvider.vue +63 -53
  229. package/src/components/ui/sidebar/SidebarRail.vue +20 -18
  230. package/src/components/ui/sidebar/SidebarSeparator.vue +10 -9
  231. package/src/components/ui/sidebar/SidebarTrigger.vue +15 -14
  232. package/src/components/ui/sidebar/index.ts +62 -58
  233. package/src/components/ui/sidebar/utils.ts +16 -16
  234. package/src/components/ui/skeleton/Skeleton.vue +12 -9
  235. package/src/components/ui/skeleton/index.ts +1 -1
  236. package/src/components/ui/slider/Slider.vue +24 -19
  237. package/src/components/ui/slider/index.ts +1 -1
  238. package/src/components/ui/switch/Switch.vue +26 -23
  239. package/src/components/ui/switch/index.ts +1 -1
  240. package/src/components/ui/table/Table.vue +11 -10
  241. package/src/components/ui/table/TableBody.vue +9 -11
  242. package/src/components/ui/table/TableCaption.vue +9 -11
  243. package/src/components/ui/table/TableCell.vue +13 -16
  244. package/src/components/ui/table/TableEmpty.vue +22 -25
  245. package/src/components/ui/table/TableFooter.vue +13 -11
  246. package/src/components/ui/table/TableHead.vue +13 -11
  247. package/src/components/ui/table/TableHeader.vue +9 -11
  248. package/src/components/ui/table/TableRow.vue +13 -11
  249. package/src/components/ui/table/index.ts +9 -9
  250. package/src/components/ui/tabs/Tabs.vue +18 -18
  251. package/src/components/ui/tabs/TabsContent.vue +14 -15
  252. package/src/components/ui/tabs/TabsList.vue +18 -18
  253. package/src/components/ui/tabs/TabsTrigger.vue +19 -20
  254. package/src/components/ui/tabs/index.ts +4 -4
  255. package/src/components/ui/textarea/Textarea.vue +23 -20
  256. package/src/components/ui/textarea/index.ts +1 -1
  257. package/src/components/ui/time-picker/TimePicker.vue +33 -38
  258. package/src/components/ui/time-picker/index.ts +2 -2
  259. package/src/components/ui/tooltip/Tooltip.vue +12 -9
  260. package/src/components/ui/tooltip/TooltipContent.vue +28 -20
  261. package/src/components/ui/tooltip/TooltipProvider.vue +9 -8
  262. package/src/components/ui/tooltip/TooltipTrigger.vue +8 -7
  263. package/src/components/ui/tooltip/index.ts +4 -4
  264. package/src/i18n/de.json +5 -0
  265. package/src/i18n/en.json +5 -0
  266. package/src/i18n/es.json +5 -0
  267. package/src/i18n/fr.json +5 -0
  268. package/src/i18n/it.json +5 -0
  269. package/src/i18n/ja.json +5 -0
  270. package/src/i18n/pt.json +5 -0
  271. package/src/i18n/ru.json +5 -0
  272. package/src/i18n/zh.json +5 -0
  273. package/src/lib/common-types.ts +2 -0
  274. package/src/lib/i18n.ts +0 -5
  275. package/src/runtime/{ui-vintage-i18n-plugin.js → ui-vintage-i18n-plugin.ts} +30 -8
@@ -1,18 +1,20 @@
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
- <ul data-slot="sidebar-menu-sub" data-sidebar="menu-badge" :class="cn(
12
- 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',
13
- 'group-data-[collapsible=icon]:hidden',
14
- props.class,
15
- )">
16
- <slot />
17
- </ul>
18
- </template>
12
+ <ul data-slot="sidebar-menu-sub" data-sidebar="menu-badge" :class="cn(
13
+ 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',
14
+ 'group-data-[collapsible=icon]:hidden',
15
+ props.class
16
+ )
17
+ ">
18
+ <slot />
19
+ </ul>
20
+ </template>
@@ -1,28 +1,31 @@
1
1
  <script setup lang="ts">
2
- import type { PrimitiveProps } from "reka-ui"
3
- import type { HTMLAttributes } from "vue"
4
- import { Primitive } from "reka-ui"
5
- import { cn } from "../../../lib/utils"
2
+ import type { PrimitiveProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { Primitive } from 'reka-ui';
5
+ import { cn } from '../../../lib/utils';
6
6
 
7
+ // Props
7
8
  const props = withDefaults(defineProps<PrimitiveProps & {
8
- size?: "sm" | "md"
9
- isActive?: boolean
10
- class?: HTMLAttributes["class"]
9
+ size?: 'sm' | 'md';
10
+ isActive?: boolean;
11
+ class?: HTMLAttributes['class'];
11
12
  }>(), {
12
- as: "a",
13
- size: "md",
14
- })
13
+ as: 'a',
14
+ size: 'md'
15
+ });
15
16
  </script>
16
17
 
17
18
  <template>
18
- <Primitive data-slot="sidebar-menu-sub-button" data-sidebar="menu-sub-button" :as="as" :as-child="asChild" :data-size="size" :data-active="isActive" :class="cn(
19
- 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex min-h-7 min-w-0 -translate-x-px items-center gap-2 rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[compact=true]/sidebar-wrapper:min-h-6 group-data-[compact=true]/sidebar-wrapper:gap-1.5 group-data-[compact=true]/sidebar-wrapper:px-1.5 group-data-[compact=true]/sidebar-wrapper:[&>svg]:size-3.5 [&>svg]:size-4 [&>svg]:shrink-0',
20
- 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',
21
- size === 'sm' && 'text-xs',
22
- size === 'md' && 'text-sm group-data-[compact=true]/sidebar-wrapper:text-xs',
23
- 'group-data-[collapsible=icon]:hidden',
24
- props.class,
25
- )">
26
- <slot />
27
- </Primitive>
28
- </template>
19
+ <Primitive data-slot="sidebar-menu-sub-button" data-sidebar="menu-sub-button" :as="as" :as-child="asChild" :data-size="size" :data-active="isActive" :class="cn(
20
+ 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex min-h-7 min-w-0 -translate-x-px items-center gap-2 rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[compact=true]/sidebar-wrapper:min-h-6 group-data-[compact=true]/sidebar-wrapper:gap-1.5 group-data-[compact=true]/sidebar-wrapper:px-1.5 group-data-[compact=true]/sidebar-wrapper:[&>svg]:size-3.5 [&>svg]:size-4 [&>svg]:shrink-0',
21
+ 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',
22
+ size === 'sm' && 'text-xs',
23
+ size === 'md' &&
24
+ 'text-sm group-data-[compact=true]/sidebar-wrapper:text-xs',
25
+ 'group-data-[collapsible=icon]:hidden',
26
+ props.class
27
+ )
28
+ ">
29
+ <slot />
30
+ </Primitive>
31
+ </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
- <li data-slot="sidebar-menu-sub-item" data-sidebar="menu-sub-item" :class="cn('group/menu-sub-item relative', props.class)">
12
- <slot />
13
- </li>
14
- </template>
12
+ <li data-slot="sidebar-menu-sub-item" data-sidebar="menu-sub-item" :class="cn('group/menu-sub-item relative', props.class)">
13
+ <slot />
14
+ </li>
15
+ </template>
@@ -1,79 +1,89 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes, Ref } from "vue"
3
- import { defaultDocument, useEventListener, useMediaQuery, useVModel } from "@vueuse/core"
4
- import { TooltipProvider } from "reka-ui"
5
- import { computed, ref } from "vue"
6
- import { cn } from "../../../lib/utils"
7
- import { provideSidebarContext, SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON } from "./utils"
2
+ import type { HTMLAttributes, Ref } from 'vue';
3
+ import { defaultDocument, useEventListener, useMediaQuery, useVModel } from '@vueuse/core';
4
+ import { TooltipProvider } from 'reka-ui';
5
+ import { computed, ref } from 'vue';
6
+ import { cn } from '../../../lib/utils';
7
+ import { provideSidebarContext, SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON } from './utils';
8
8
 
9
+ // Props
9
10
  const props = withDefaults(defineProps<{
10
- defaultOpen?: boolean
11
- open?: boolean
12
- compact?: boolean
13
- class?: HTMLAttributes["class"]
11
+ defaultOpen?: boolean;
12
+ open?: boolean;
13
+ compact?: boolean;
14
+ class?: HTMLAttributes['class'];
14
15
  }>(), {
15
- defaultOpen: !defaultDocument?.cookie.includes(`${SIDEBAR_COOKIE_NAME}=false`),
16
- open: undefined,
17
- compact: false,
18
- })
16
+ defaultOpen: !defaultDocument?.cookie.includes(`${SIDEBAR_COOKIE_NAME}=false`),
17
+ open: undefined,
18
+ compact: false
19
+ });
19
20
 
21
+ // Emits
20
22
  const emits = defineEmits<{
21
- "update:open": [open: boolean]
22
- }>()
23
+ 'update:open': [open: boolean];
24
+ }>();
23
25
 
24
- const isMobile = useMediaQuery("(max-width: 768px)")
25
- const openMobile = ref(false)
26
+ const isMobile = useMediaQuery('(max-width: 768px)');
27
+ const openMobile = ref(false);
26
28
 
27
- const open = useVModel(props, "open", emits, {
28
- defaultValue: props.defaultOpen ?? false,
29
- passive: (props.open === undefined) as false,
30
- }) as Ref<boolean>
29
+ const open = useVModel(props, 'open', emits, {
30
+ defaultValue: props.defaultOpen ?? false,
31
+ passive: (props.open === undefined) as false
32
+ }) as Ref<boolean>;
31
33
 
32
34
  function setOpen(value: boolean) {
33
- open.value = value // emits('update:open', value)
35
+ open.value = value; // emits('update:open', value)
34
36
 
35
- // This sets the cookie to keep the sidebar state.
36
- document.cookie = `${SIDEBAR_COOKIE_NAME}=${open.value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
37
+ // This sets the cookie to keep the sidebar state.
38
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${open.value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
37
39
  }
38
40
 
39
41
  function setOpenMobile(value: boolean) {
40
- openMobile.value = value
42
+ openMobile.value = value;
41
43
  }
42
44
 
43
45
  // Helper to toggle the sidebar.
44
46
  function toggleSidebar() {
45
- return isMobile.value ? setOpenMobile(!openMobile.value) : setOpen(!open.value)
47
+ return isMobile.value
48
+ ? setOpenMobile(!openMobile.value)
49
+ : setOpen(!open.value);
46
50
  }
47
51
 
48
- useEventListener("keydown", (event: KeyboardEvent) => {
49
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
50
- event.preventDefault()
51
- toggleSidebar()
52
- }
53
- })
52
+ useEventListener('keydown', (event: KeyboardEvent) => {
53
+ if (
54
+ event.key === SIDEBAR_KEYBOARD_SHORTCUT &&
55
+ (event.metaKey || event.ctrlKey)
56
+ ) {
57
+ event.preventDefault();
58
+ toggleSidebar();
59
+ }
60
+ });
54
61
 
55
- // We add a state so that we can do data-state="expanded" or "collapsed".
56
- // This makes it easier to style the sidebar with Tailwind classes.
57
- const state = computed(() => open.value ? "expanded" : "collapsed")
62
+ // We add a state so that we can do data-state="expanded" or "collapsed"
63
+ const state = computed(() => (open.value ? 'expanded' : 'collapsed'));
58
64
 
59
65
  provideSidebarContext({
60
- state,
61
- open,
62
- setOpen,
63
- isMobile,
64
- openMobile,
65
- setOpenMobile,
66
- toggleSidebar,
67
- })
66
+ state,
67
+ open,
68
+ setOpen,
69
+ isMobile,
70
+ openMobile,
71
+ setOpenMobile,
72
+ toggleSidebar
73
+ });
68
74
  </script>
69
75
 
70
76
  <template>
71
- <TooltipProvider :delay-duration="0">
72
- <div data-slot="sidebar-wrapper" :style="{
73
- '--sidebar-width': SIDEBAR_WIDTH,
74
- '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,
75
- }" :data-compact="props.compact ? 'true' : 'false'" :class="cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', props.class)" v-bind="$attrs">
76
- <slot />
77
- </div>
78
- </TooltipProvider>
79
- </template>
77
+ <TooltipProvider :delay-duration="0">
78
+ <div data-slot="sidebar-wrapper" :style="{
79
+ '--sidebar-width': SIDEBAR_WIDTH,
80
+ '--sidebar-width-icon': SIDEBAR_WIDTH_ICON
81
+ }" :data-compact="props.compact ? 'true' : 'false'" :class="cn(
82
+ 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',
83
+ props.class
84
+ )
85
+ " v-bind="$attrs">
86
+ <slot />
87
+ </div>
88
+ </TooltipProvider>
89
+ </template>
@@ -1,25 +1,27 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../../lib/utils"
4
- import { useSidebar } from "./utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../../lib/utils';
4
+ import { useSidebar } from './utils';
5
5
 
6
+ // Props
6
7
  const props = defineProps<{
7
- class?: HTMLAttributes["class"]
8
- }>()
8
+ class?: HTMLAttributes['class'];
9
+ }>();
9
10
 
10
- const { toggleSidebar } = useSidebar()
11
+ const { toggleSidebar } = useSidebar();
11
12
  </script>
12
13
 
13
14
  <template>
14
- <button data-sidebar="rail" data-slot="sidebar-rail" aria-label="Toggle Sidebar" :tabindex="-1" title="Toggle Sidebar" :class="cn(
15
- 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',
16
- 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',
17
- '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',
18
- 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',
19
- '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',
20
- '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',
21
- props.class,
22
- )" @click="toggleSidebar">
23
- <slot />
24
- </button>
25
- </template>
15
+ <button data-sidebar="rail" data-slot="sidebar-rail" aria-label="Toggle Sidebar" :tabindex="-1" title="Toggle Sidebar" :class="cn(
16
+ 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 sm:flex',
17
+ 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',
18
+ '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',
19
+ 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',
20
+ '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',
21
+ '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',
22
+ props.class
23
+ )
24
+ " @click="toggleSidebar">
25
+ <slot />
26
+ </button>
27
+ </template>
@@ -1,15 +1,16 @@
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
- <Separator data-slot="sidebar-separator" data-sidebar="separator" :class="cn('bg-sidebar-border mx-2 w-auto', props.class)">
13
- <slot />
14
- </Separator>
15
- </template>
13
+ <Separator data-slot="sidebar-separator" data-sidebar="separator" :class="cn('bg-sidebar-border mx-2 w-auto', props.class)">
14
+ <slot />
15
+ </Separator>
16
+ </template>
@@ -1,21 +1,22 @@
1
1
  <script setup lang="ts">
2
- import type { HTMLAttributes } from "vue"
3
- import { PanelLeftIcon } from "@hugeicons/core-free-icons"
4
- import { HugeiconsIcon } from "@hugeicons/vue"
5
- import { cn } from "../../../lib/utils"
6
- import { Button } from '../button'
7
- import { useSidebar } from "./utils"
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { PanelLeftIcon } from '@hugeicons/core-free-icons';
4
+ import { HugeiconsIcon } from '@hugeicons/vue';
5
+ import { cn } from '../../../lib/utils';
6
+ import { Button } from '../button';
7
+ import { useSidebar } from './utils';
8
8
 
9
+ // Props
9
10
  const props = defineProps<{
10
- class?: HTMLAttributes["class"]
11
- }>()
11
+ class?: HTMLAttributes['class'];
12
+ }>();
12
13
 
13
- const { toggleSidebar } = useSidebar()
14
+ const { toggleSidebar } = useSidebar();
14
15
  </script>
15
16
 
16
17
  <template>
17
- <Button data-sidebar="trigger" data-slot="sidebar-trigger" variant="secondary" size="icon" :class="cn(props.class)" @click="toggleSidebar">
18
- <HugeiconsIcon :icon="PanelLeftIcon" />
19
- <span class="sr-only">Toggle Sidebar</span>
20
- </Button>
21
- </template>
18
+ <Button data-sidebar="trigger" data-slot="sidebar-trigger" variant="secondary" size="icon" :class="cn(props.class)" @click="toggleSidebar">
19
+ <HugeiconsIcon :icon="PanelLeftIcon" />
20
+ <span class="sr-only">Toggle Sidebar</span>
21
+ </Button>
22
+ </template>
@@ -1,64 +1,68 @@
1
- import type { ClassProp } from "class-variance-authority/types"
2
- import type { HTMLAttributes } from "vue"
3
- import { cva } from "class-variance-authority"
1
+ import type { ClassProp } from 'class-variance-authority/types';
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cva } from 'class-variance-authority';
4
4
 
5
- export interface SidebarProps {
6
- side?: "left" | "right"
7
- variant?: "sidebar" | "floating" | "inset"
8
- collapsible?: "offcanvas" | "icon" | "none"
9
- compact?: boolean
10
- class?: HTMLAttributes["class"]
11
- }
5
+ export { default as Sidebar } from './Sidebar.vue';
6
+ export { default as SidebarContent } from './SidebarContent.vue';
7
+ export { default as SidebarFooter } from './SidebarFooter.vue';
8
+ export { default as SidebarGroup } from './SidebarGroup.vue';
9
+ export { default as SidebarGroupAction } from './SidebarGroupAction.vue';
10
+ export { default as SidebarGroupContent } from './SidebarGroupContent.vue';
11
+ export { default as SidebarGroupLabel } from './SidebarGroupLabel.vue';
12
+ export { default as SidebarHeader } from './SidebarHeader.vue';
13
+ export { default as SidebarInput } from './SidebarInput.vue';
14
+ export { default as SidebarInset } from './SidebarInset.vue';
15
+ export { default as SidebarMenu } from './SidebarMenu.vue';
16
+ export { default as SidebarMenuAction } from './SidebarMenuAction.vue';
17
+ export { default as SidebarMenuBadge } from './SidebarMenuBadge.vue';
18
+ export { default as SidebarMenuButton } from './SidebarMenuButton.vue';
19
+ export { default as SidebarMenuItem } from './SidebarMenuItem.vue';
20
+ export { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue';
21
+ export { default as SidebarMenuSub } from './SidebarMenuSub.vue';
22
+ export { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue';
23
+ export { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue';
24
+ export { default as SidebarProvider } from './SidebarProvider.vue';
25
+ export { default as SidebarRail } from './SidebarRail.vue';
26
+ export { default as SidebarSeparator } from './SidebarSeparator.vue';
27
+ export { default as SidebarTrigger } from './SidebarTrigger.vue';
12
28
 
13
- export { default as Sidebar } from "./Sidebar.vue"
14
- export { default as SidebarContent } from "./SidebarContent.vue"
15
- export { default as SidebarFooter } from "./SidebarFooter.vue"
16
- export { default as SidebarGroup } from "./SidebarGroup.vue"
17
- export { default as SidebarGroupAction } from "./SidebarGroupAction.vue"
18
- export { default as SidebarGroupContent } from "./SidebarGroupContent.vue"
19
- export { default as SidebarGroupLabel } from "./SidebarGroupLabel.vue"
20
- export { default as SidebarHeader } from "./SidebarHeader.vue"
21
- export { default as SidebarInput } from "./SidebarInput.vue"
22
- export { default as SidebarInset } from "./SidebarInset.vue"
23
- export { default as SidebarMenu } from "./SidebarMenu.vue"
24
- export { default as SidebarMenuAction } from "./SidebarMenuAction.vue"
25
- export { default as SidebarMenuBadge } from "./SidebarMenuBadge.vue"
26
- export { default as SidebarMenuButton } from "./SidebarMenuButton.vue"
27
- export { default as SidebarMenuItem } from "./SidebarMenuItem.vue"
28
- export { default as SidebarMenuSkeleton } from "./SidebarMenuSkeleton.vue"
29
- export { default as SidebarMenuSub } from "./SidebarMenuSub.vue"
30
- export { default as SidebarMenuSubButton } from "./SidebarMenuSubButton.vue"
31
- export { default as SidebarMenuSubItem } from "./SidebarMenuSubItem.vue"
32
- export { default as SidebarProvider } from "./SidebarProvider.vue"
33
- export { default as SidebarRail } from "./SidebarRail.vue"
34
- export { default as SidebarSeparator } from "./SidebarSeparator.vue"
35
- export { default as SidebarTrigger } from "./SidebarTrigger.vue"
29
+ export { useSidebar } from './utils';
36
30
 
37
- export { useSidebar } from "./utils"
31
+ export interface SidebarProps {
32
+ side?: 'left' | 'right';
33
+ variant?: 'sidebar' | 'floating' | 'inset';
34
+ collapsible?: 'offcanvas' | 'icon' | 'none';
35
+ compact?: boolean;
36
+ class?: HTMLAttributes['class'];
37
+ }
38
38
 
39
39
  export type SidebarMenuButtonVariants = {
40
- variant?: "default" | "outline" | null | undefined
41
- size?: "default" | "sm" | "lg" | null | undefined
42
- }
40
+ variant?: 'default' | 'outline' | null | undefined;
41
+ size?: 'default' | 'sm' | 'lg' | null | undefined;
42
+ };
43
43
 
44
- export const sidebarMenuButtonVariants: (props?: SidebarMenuButtonVariants & ClassProp) => string = cva(
45
- "peer/menu-button flex w-full items-center gap-2 rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,min-height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-semibold data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! group-data-[compact=true]/sidebar-wrapper:gap-1.5 group-data-[compact=true]/sidebar-wrapper:p-2.5 group-data-[compact=true]/sidebar-wrapper:[&>svg]:size-3.5 [&>svg]:size-4 [&>svg]:shrink-0",
46
- {
47
- variants: {
48
- variant: {
49
- default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
50
- outline:
51
- "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
52
- },
53
- size: {
54
- default: "min-h-8 text-sm group-data-[compact=true]/sidebar-wrapper:min-h-7 group-data-[compact=true]/sidebar-wrapper:text-xs group-data-[compact=true]/sidebar-wrapper:py-3",
55
- sm: "min-h-7 text-xs group-data-[compact=true]/sidebar-wrapper:min-h-6 group-data-[compact=true]/sidebar-wrapper:py-2.5",
56
- lg: "min-h-12 text-sm group-data-[compact=true]/sidebar-wrapper:min-h-10 group-data-[collapsible=icon]:p-0!",
57
- },
58
- },
59
- defaultVariants: {
60
- variant: "default",
61
- size: "default",
62
- },
63
- },
64
- )
44
+ export const sidebarMenuButtonVariants: (
45
+ props?: SidebarMenuButtonVariants & ClassProp
46
+ ) => string = cva(
47
+ 'peer/menu-button flex w-full items-center gap-2 rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,min-height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-semibold data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! group-data-[compact=true]/sidebar-wrapper:gap-1.5 group-data-[compact=true]/sidebar-wrapper:p-2.5 group-data-[compact=true]/sidebar-wrapper:[&>svg]:size-3.5 [&>svg]:size-4 [&>svg]:shrink-0',
48
+ {
49
+ variants: {
50
+ variant: {
51
+ default:
52
+ 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
53
+ outline:
54
+ 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]'
55
+ },
56
+ size: {
57
+ default:
58
+ 'min-h-8 text-sm group-data-[compact=true]/sidebar-wrapper:min-h-7 group-data-[compact=true]/sidebar-wrapper:text-xs group-data-[compact=true]/sidebar-wrapper:py-3',
59
+ sm: 'min-h-7 text-xs group-data-[compact=true]/sidebar-wrapper:min-h-6 group-data-[compact=true]/sidebar-wrapper:py-2.5',
60
+ lg: 'min-h-12 text-sm group-data-[compact=true]/sidebar-wrapper:min-h-10 group-data-[collapsible=icon]:p-0!'
61
+ }
62
+ },
63
+ defaultVariants: {
64
+ variant: 'default',
65
+ size: 'default'
66
+ }
67
+ }
68
+ );
@@ -1,19 +1,19 @@
1
- import type { ComputedRef, Ref } from "vue"
2
- import { createContext } from "reka-ui"
1
+ import type { ComputedRef, Ref } from 'vue';
2
+ import { createContext } from 'reka-ui';
3
3
 
4
- export const SIDEBAR_COOKIE_NAME = "sidebar_state"
5
- export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
6
- export const SIDEBAR_WIDTH = "16rem"
7
- export const SIDEBAR_WIDTH_MOBILE = "18rem"
8
- export const SIDEBAR_WIDTH_ICON = "3rem"
9
- export const SIDEBAR_KEYBOARD_SHORTCUT = "b"
4
+ export const SIDEBAR_COOKIE_NAME = 'sidebar_state';
5
+ export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
6
+ export const SIDEBAR_WIDTH = '16rem';
7
+ export const SIDEBAR_WIDTH_MOBILE = '18rem';
8
+ export const SIDEBAR_WIDTH_ICON = '3rem';
9
+ export const SIDEBAR_KEYBOARD_SHORTCUT = 'b';
10
10
 
11
11
  export const [useSidebar, provideSidebarContext] = createContext<{
12
- state: ComputedRef<"expanded" | "collapsed">
13
- open: Ref<boolean>
14
- setOpen: (value: boolean) => void
15
- isMobile: Ref<boolean>
16
- openMobile: Ref<boolean>
17
- setOpenMobile: (value: boolean) => void
18
- toggleSidebar: () => void
19
- }>("Sidebar")
12
+ state: ComputedRef<'expanded' | 'collapsed'>;
13
+ open: Ref<boolean>;
14
+ setOpen: (value: boolean) => void;
15
+ isMobile: Ref<boolean>;
16
+ openMobile: Ref<boolean>;
17
+ setOpenMobile: (value: boolean) => void;
18
+ toggleSidebar: () => void;
19
+ }>('Sidebar');
@@ -1,14 +1,17 @@
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
- interface SkeletonProps {
6
- class?: HTMLAttributes["class"]
7
- }
8
-
9
- const props = defineProps<SkeletonProps>()
5
+ // Props
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes['class'];
8
+ }>();
10
9
  </script>
11
10
 
12
11
  <template>
13
- <div data-slot="skeleton" :class="cn(props.class, 'animate-pulse rounded border border-(--border-light) bg-(--bg-surface-light) transition-colors duration-300 ease-in-out dark:border-(--border-dark) dark:bg-(--bg-surface-dark)',)" />
14
- </template>
12
+ <div data-slot="skeleton" :class="cn(
13
+ props.class,
14
+ 'animate-pulse rounded border border-(--border-light) bg-(--bg-surface-light) transition-colors duration-300 ease-in-out dark:border-(--border-dark) dark:bg-(--bg-surface-dark)'
15
+ )
16
+ " />
17
+ </template>
@@ -1 +1 @@
1
- export { default as Skeleton } from "./Skeleton.vue"
1
+ export { default as Skeleton } from './Skeleton.vue';
@@ -1,27 +1,32 @@
1
1
  <script setup lang="ts">
2
- import type { SliderRootEmits, SliderRootProps } from "reka-ui"
3
- import type { HTMLAttributes } from "vue"
4
- import { reactiveOmit } from "@vueuse/core"
5
- import { SliderRange, SliderRoot, SliderThumb, SliderTrack, useForwardPropsEmits } from "reka-ui"
6
- import { cn } from "../../../lib/utils"
2
+ import type { SliderRootEmits, SliderRootProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { SliderRange, SliderRoot, SliderThumb, SliderTrack, useForwardPropsEmits } from 'reka-ui';
6
+ import { cn } from '../../../lib/utils';
7
7
 
8
- const props = defineProps<SliderRootProps & { class?: HTMLAttributes["class"] }>()
9
- const emits = defineEmits<SliderRootEmits>()
8
+ // Props
9
+ const props = defineProps<SliderRootProps & {
10
+ class?: HTMLAttributes['class'];
11
+ }>();
10
12
 
11
- const delegatedProps = reactiveOmit(props, "class")
13
+ // Emits
14
+ const emits = defineEmits<SliderRootEmits>();
12
15
 
13
- const forwarded = useForwardPropsEmits(delegatedProps, emits)
16
+ const delegatedProps = reactiveOmit(props, 'class');
17
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
14
18
  </script>
15
19
 
16
20
  <template>
17
- <SliderRoot v-slot="{ modelValue }" data-slot="slider" :class="cn(
18
- 'relative flex w-full cursor-pointer touch-none items-center select-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col',
19
- props.class,
20
- )" v-bind="forwarded">
21
- <SliderTrack data-slot="slider-track" class="bg-muted relative grow overflow-hidden rounded data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2">
22
- <SliderRange data-slot="slider-range" class="bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full" />
23
- </SliderTrack>
21
+ <SliderRoot v-slot="{ modelValue }" data-slot="slider" :class="cn(
22
+ 'relative flex w-full cursor-pointer touch-none items-center select-none data-disabled:cursor-not-allowed data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col',
23
+ props.class
24
+ )
25
+ " v-bind="forwarded">
26
+ <SliderTrack data-slot="slider-track" class="bg-muted relative grow overflow-hidden rounded data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2">
27
+ <SliderRange data-slot="slider-range" class="bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full" />
28
+ </SliderTrack>
24
29
 
25
- <SliderThumb v-for="(_, key) in modelValue" :key="key" data-slot="slider-thumb" class="bg-white border-primary ring-ring/50 block size-5 shrink-0 rounded border shadow-sm transition-[color,box-shadow,transform] hover:scale-105 hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50" />
26
- </SliderRoot>
27
- </template>
30
+ <SliderThumb v-for="(_, key) in modelValue" :key="key" data-slot="slider-thumb" class="bg-white border-primary ring-ring/50 block size-5 shrink-0 rounded border shadow-sm transition-[color,box-shadow,transform] hover:scale-105 hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50" />
31
+ </SliderRoot>
32
+ </template>