@snow-labs/brutal-ui 0.1.0 → 0.2.0

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 (282) hide show
  1. package/dist/components/brutal/cta-section.d.ts +7 -2
  2. package/dist/components/brutal/cta-section.js +253 -4
  3. package/dist/components/brutal/cta-section.js.map +1 -1
  4. package/dist/components/brutal/faq.d.ts +16 -0
  5. package/dist/components/brutal/faq.js +166 -0
  6. package/dist/components/brutal/faq.js.map +1 -0
  7. package/dist/components/brutal/feature-grid.d.ts +5 -1
  8. package/dist/components/brutal/feature-grid.js +238 -4
  9. package/dist/components/brutal/feature-grid.js.map +1 -1
  10. package/dist/components/brutal/footer.d.ts +14 -1
  11. package/dist/components/brutal/footer.js +215 -2
  12. package/dist/components/brutal/footer.js.map +1 -1
  13. package/dist/components/brutal/hero.d.ts +8 -1
  14. package/dist/components/brutal/hero.js +197 -4
  15. package/dist/components/brutal/hero.js.map +1 -1
  16. package/dist/components/brutal/index.d.ts +7 -2
  17. package/dist/components/brutal/index.js +1393 -12
  18. package/dist/components/brutal/index.js.map +1 -1
  19. package/dist/components/brutal/integration-grid.js +105 -3
  20. package/dist/components/brutal/integration-grid.js.map +1 -1
  21. package/dist/components/brutal/logo-cloud.d.ts +17 -0
  22. package/dist/components/brutal/logo-cloud.js +96 -0
  23. package/dist/components/brutal/logo-cloud.js.map +1 -0
  24. package/dist/components/brutal/nav.d.ts +3 -1
  25. package/dist/components/brutal/nav.js +258 -3
  26. package/dist/components/brutal/nav.js.map +1 -1
  27. package/dist/components/brutal/newsletter.d.ts +14 -0
  28. package/dist/components/brutal/newsletter.js +172 -0
  29. package/dist/components/brutal/newsletter.js.map +1 -0
  30. package/dist/components/brutal/pricing-table.d.ts +27 -0
  31. package/dist/components/brutal/pricing-table.js +254 -0
  32. package/dist/components/brutal/pricing-table.js.map +1 -0
  33. package/dist/components/brutal/section-divider.d.ts +14 -0
  34. package/dist/components/brutal/section-divider.js +70 -0
  35. package/dist/components/brutal/section-divider.js.map +1 -0
  36. package/dist/components/brutal/section.d.ts +6 -2
  37. package/dist/components/brutal/section.js +67 -2
  38. package/dist/components/brutal/section.js.map +1 -1
  39. package/dist/components/brutal/stats-bar.d.ts +16 -0
  40. package/dist/components/brutal/stats-bar.js +130 -0
  41. package/dist/components/brutal/stats-bar.js.map +1 -0
  42. package/dist/components/brutal/testimonials.d.ts +11 -3
  43. package/dist/components/brutal/testimonials.js +192 -3
  44. package/dist/components/brutal/testimonials.js.map +1 -1
  45. package/dist/components/brutal/wave-divider.d.ts +2 -12
  46. package/dist/components/brutal/wave-divider.js +68 -1
  47. package/dist/components/brutal/wave-divider.js.map +1 -1
  48. package/dist/components/dashboard/activity-feed.d.ts +18 -0
  49. package/dist/components/dashboard/activity-feed.js +105 -0
  50. package/dist/components/dashboard/activity-feed.js.map +1 -0
  51. package/dist/components/dashboard/app-shell.d.ts +19 -0
  52. package/dist/components/dashboard/app-shell.js +206 -0
  53. package/dist/components/dashboard/app-shell.js.map +1 -0
  54. package/dist/components/dashboard/empty-state.d.ts +14 -0
  55. package/dist/{chunk-CY2FOBOD.js → components/dashboard/empty-state.js} +36 -5
  56. package/dist/components/dashboard/empty-state.js.map +1 -0
  57. package/dist/components/dashboard/file-upload.d.ts +12 -0
  58. package/dist/components/dashboard/file-upload.js +86 -0
  59. package/dist/components/dashboard/file-upload.js.map +1 -0
  60. package/dist/components/dashboard/index.d.ts +10 -0
  61. package/dist/components/dashboard/index.js +755 -0
  62. package/dist/components/dashboard/index.js.map +1 -0
  63. package/dist/components/dashboard/search-bar.d.ts +12 -0
  64. package/dist/components/dashboard/search-bar.js +49 -0
  65. package/dist/components/dashboard/search-bar.js.map +1 -0
  66. package/dist/components/dashboard/sidebar.d.ts +23 -0
  67. package/dist/components/dashboard/sidebar.js +113 -0
  68. package/dist/components/dashboard/sidebar.js.map +1 -0
  69. package/dist/components/dashboard/stat-card.d.ts +13 -0
  70. package/dist/components/dashboard/stat-card.js +55 -0
  71. package/dist/components/dashboard/stat-card.js.map +1 -0
  72. package/dist/components/dashboard/user-menu.d.ts +16 -0
  73. package/dist/components/dashboard/user-menu.js +179 -0
  74. package/dist/components/dashboard/user-menu.js.map +1 -0
  75. package/dist/components/dashboard/view-switcher.d.ts +12 -0
  76. package/dist/{chunk-OCSYB6YE.js → components/dashboard/view-switcher.js} +57 -5
  77. package/dist/components/dashboard/view-switcher.js.map +1 -0
  78. package/dist/components/ui/accordion.js +78 -2
  79. package/dist/components/ui/accordion.js.map +1 -1
  80. package/dist/components/ui/alert.js +80 -2
  81. package/dist/components/ui/alert.js.map +1 -1
  82. package/dist/components/ui/avatar.js +103 -2
  83. package/dist/components/ui/avatar.js.map +1 -1
  84. package/dist/components/ui/badge.d.ts +1 -1
  85. package/dist/components/ui/badge.js +55 -2
  86. package/dist/components/ui/badge.js.map +1 -1
  87. package/dist/components/ui/breadcrumb.js +122 -2
  88. package/dist/components/ui/breadcrumb.js.map +1 -1
  89. package/dist/components/ui/button.d.ts +1 -1
  90. package/dist/components/ui/button.js +68 -2
  91. package/dist/components/ui/button.js.map +1 -1
  92. package/dist/components/ui/card.js +90 -2
  93. package/dist/components/ui/card.js.map +1 -1
  94. package/dist/components/ui/checkbox.js +36 -2
  95. package/dist/components/ui/checkbox.js.map +1 -1
  96. package/dist/components/ui/collapsible.js +15 -1
  97. package/dist/components/ui/collapsible.js.map +1 -1
  98. package/dist/components/ui/command.js +399 -7
  99. package/dist/components/ui/command.js.map +1 -1
  100. package/dist/components/ui/context-menu.js +232 -2
  101. package/dist/components/ui/context-menu.js.map +1 -1
  102. package/dist/components/ui/dialog.js +201 -3
  103. package/dist/components/ui/dialog.js.map +1 -1
  104. package/dist/components/ui/drawer.js +118 -2
  105. package/dist/components/ui/drawer.js.map +1 -1
  106. package/dist/components/ui/dropdown-menu.js +242 -2
  107. package/dist/components/ui/dropdown-menu.js.map +1 -1
  108. package/dist/components/ui/hover-card.js +47 -2
  109. package/dist/components/ui/hover-card.js.map +1 -1
  110. package/dist/components/ui/input-group.js +226 -5
  111. package/dist/components/ui/input-group.js.map +1 -1
  112. package/dist/components/ui/input.js +26 -2
  113. package/dist/components/ui/input.js.map +1 -1
  114. package/dist/components/ui/label.js +23 -2
  115. package/dist/components/ui/label.js.map +1 -1
  116. package/dist/components/ui/menubar.js +398 -3
  117. package/dist/components/ui/menubar.js.map +1 -1
  118. package/dist/components/ui/navigation-menu.js +160 -2
  119. package/dist/components/ui/navigation-menu.js.map +1 -1
  120. package/dist/components/ui/pagination.js +185 -3
  121. package/dist/components/ui/pagination.js.map +1 -1
  122. package/dist/components/ui/popover.js +80 -2
  123. package/dist/components/ui/popover.js.map +1 -1
  124. package/dist/components/ui/progress.js +80 -2
  125. package/dist/components/ui/progress.js.map +1 -1
  126. package/dist/components/ui/radio-group.js +43 -2
  127. package/dist/components/ui/radio-group.js.map +1 -1
  128. package/dist/components/ui/scroll-area.js +63 -2
  129. package/dist/components/ui/scroll-area.js.map +1 -1
  130. package/dist/components/ui/select.js +190 -2
  131. package/dist/components/ui/select.js.map +1 -1
  132. package/dist/components/ui/separator.js +29 -2
  133. package/dist/components/ui/separator.js.map +1 -1
  134. package/dist/components/ui/sheet.js +185 -3
  135. package/dist/components/ui/sheet.js.map +1 -1
  136. package/dist/components/ui/skeleton.js +21 -2
  137. package/dist/components/ui/skeleton.js.map +1 -1
  138. package/dist/components/ui/slider.js +62 -2
  139. package/dist/components/ui/slider.js.map +1 -1
  140. package/dist/components/ui/switch.js +36 -2
  141. package/dist/components/ui/switch.js.map +1 -1
  142. package/dist/components/ui/tabs.d.ts +1 -1
  143. package/dist/components/ui/tabs.js +85 -2
  144. package/dist/components/ui/tabs.js.map +1 -1
  145. package/dist/components/ui/textarea.js +24 -2
  146. package/dist/components/ui/textarea.js.map +1 -1
  147. package/dist/components/ui/toggle-group.js +101 -3
  148. package/dist/components/ui/toggle-group.js.map +1 -1
  149. package/dist/components/ui/toggle.js +47 -2
  150. package/dist/components/ui/toggle.js.map +1 -1
  151. package/dist/components/ui/tooltip.js +65 -2
  152. package/dist/components/ui/tooltip.js.map +1 -1
  153. package/dist/components/views/calendar-view.d.ts +17 -0
  154. package/dist/components/views/calendar-view.js +182 -0
  155. package/dist/components/views/calendar-view.js.map +1 -0
  156. package/dist/components/views/data-table.d.ts +15 -0
  157. package/dist/components/views/data-table.js +204 -0
  158. package/dist/components/views/data-table.js.map +1 -0
  159. package/dist/components/views/grid-view.d.ts +11 -0
  160. package/dist/components/views/grid-view.js +31 -0
  161. package/dist/components/views/grid-view.js.map +1 -0
  162. package/dist/components/views/index.d.ts +7 -0
  163. package/dist/components/views/index.js +542 -0
  164. package/dist/components/views/index.js.map +1 -0
  165. package/dist/components/views/kanban-board.d.ts +21 -0
  166. package/dist/components/views/kanban-board.js +153 -0
  167. package/dist/components/views/kanban-board.js.map +1 -0
  168. package/dist/components/views/list-view.d.ts +19 -0
  169. package/dist/components/views/list-view.js +96 -0
  170. package/dist/components/views/list-view.js.map +1 -0
  171. package/dist/index.d.ts +27 -3
  172. package/dist/index.js +4957 -46
  173. package/dist/index.js.map +1 -1
  174. package/dist/lib/animations.d.ts +68 -0
  175. package/dist/lib/animations.js +44 -0
  176. package/dist/lib/animations.js.map +1 -0
  177. package/dist/lib/utils.js +10 -1
  178. package/dist/lib/utils.js.map +1 -1
  179. package/dist/templates/dashboard.d.ts +40 -0
  180. package/dist/templates/dashboard.js +658 -0
  181. package/dist/templates/dashboard.js.map +1 -0
  182. package/dist/templates/index.d.ts +4 -0
  183. package/dist/templates/index.js +2031 -0
  184. package/dist/templates/index.js.map +1 -0
  185. package/dist/templates/saas-launch.d.ts +113 -0
  186. package/dist/templates/saas-launch.js +1424 -0
  187. package/dist/templates/saas-launch.js.map +1 -0
  188. package/dist/templates/studio.d.ts +72 -0
  189. package/dist/templates/studio.js +1129 -0
  190. package/dist/templates/studio.js.map +1 -0
  191. package/dist/theme.css +53 -0
  192. package/package.json +48 -2
  193. package/dist/chunk-3HN3QP23.js +0 -44
  194. package/dist/chunk-3HN3QP23.js.map +0 -1
  195. package/dist/chunk-4A3EQV6F.js +0 -76
  196. package/dist/chunk-4A3EQV6F.js.map +0 -1
  197. package/dist/chunk-53KZXLG4.js +0 -100
  198. package/dist/chunk-53KZXLG4.js.map +0 -1
  199. package/dist/chunk-5JCN6EQG.js +0 -60
  200. package/dist/chunk-5JCN6EQG.js.map +0 -1
  201. package/dist/chunk-5JEBZUEI.js +0 -20
  202. package/dist/chunk-5JEBZUEI.js.map +0 -1
  203. package/dist/chunk-6APJMAO7.js +0 -44
  204. package/dist/chunk-6APJMAO7.js.map +0 -1
  205. package/dist/chunk-6UKMYVHC.js +0 -187
  206. package/dist/chunk-6UKMYVHC.js.map +0 -1
  207. package/dist/chunk-7FVJ36BQ.js +0 -239
  208. package/dist/chunk-7FVJ36BQ.js.map +0 -1
  209. package/dist/chunk-7I7XYB7H.js +0 -44
  210. package/dist/chunk-7I7XYB7H.js.map +0 -1
  211. package/dist/chunk-A5KONGTJ.js +0 -49
  212. package/dist/chunk-A5KONGTJ.js.map +0 -1
  213. package/dist/chunk-AHUC5AID.js +0 -40
  214. package/dist/chunk-AHUC5AID.js.map +0 -1
  215. package/dist/chunk-B6UM5GHF.js +0 -20
  216. package/dist/chunk-B6UM5GHF.js.map +0 -1
  217. package/dist/chunk-BAUUM52T.js +0 -234
  218. package/dist/chunk-BAUUM52T.js.map +0 -1
  219. package/dist/chunk-BDWCMMEI.js +0 -82
  220. package/dist/chunk-BDWCMMEI.js.map +0 -1
  221. package/dist/chunk-BSVJVM2L.js +0 -52
  222. package/dist/chunk-BSVJVM2L.js.map +0 -1
  223. package/dist/chunk-CPVH3LD5.js +0 -86
  224. package/dist/chunk-CPVH3LD5.js.map +0 -1
  225. package/dist/chunk-CY2FOBOD.js.map +0 -1
  226. package/dist/chunk-DJTTNICL.js +0 -40
  227. package/dist/chunk-DJTTNICL.js.map +0 -1
  228. package/dist/chunk-F2E32OOJ.js +0 -38
  229. package/dist/chunk-F2E32OOJ.js.map +0 -1
  230. package/dist/chunk-F7YWBVP6.js +0 -141
  231. package/dist/chunk-F7YWBVP6.js.map +0 -1
  232. package/dist/chunk-G7JMADLU.js +0 -167
  233. package/dist/chunk-G7JMADLU.js.map +0 -1
  234. package/dist/chunk-GKCLNHVQ.js +0 -124
  235. package/dist/chunk-GKCLNHVQ.js.map +0 -1
  236. package/dist/chunk-GQBWKH72.js +0 -33
  237. package/dist/chunk-GQBWKH72.js.map +0 -1
  238. package/dist/chunk-H6SOU4UG.js +0 -10
  239. package/dist/chunk-H6SOU4UG.js.map +0 -1
  240. package/dist/chunk-HKJJHYFX.js +0 -115
  241. package/dist/chunk-HKJJHYFX.js.map +0 -1
  242. package/dist/chunk-IQ5WXHRB.js +0 -16
  243. package/dist/chunk-IQ5WXHRB.js.map +0 -1
  244. package/dist/chunk-ISZQ5TSG.js +0 -26
  245. package/dist/chunk-ISZQ5TSG.js.map +0 -1
  246. package/dist/chunk-JSYGVDO6.js +0 -41
  247. package/dist/chunk-JSYGVDO6.js.map +0 -1
  248. package/dist/chunk-KY6GKED2.js +0 -229
  249. package/dist/chunk-KY6GKED2.js.map +0 -1
  250. package/dist/chunk-L5OPCX6F.js +0 -33
  251. package/dist/chunk-L5OPCX6F.js.map +0 -1
  252. package/dist/chunk-LLMBKOKT.js +0 -44
  253. package/dist/chunk-LLMBKOKT.js.map +0 -1
  254. package/dist/chunk-MKBO4S2O.js +0 -48
  255. package/dist/chunk-MKBO4S2O.js.map +0 -1
  256. package/dist/chunk-NMQRI5G5.js +0 -48
  257. package/dist/chunk-NMQRI5G5.js.map +0 -1
  258. package/dist/chunk-OCSYB6YE.js.map +0 -1
  259. package/dist/chunk-OILW3ESA.js +0 -62
  260. package/dist/chunk-OILW3ESA.js.map +0 -1
  261. package/dist/chunk-PCVJLIUU.js +0 -125
  262. package/dist/chunk-PCVJLIUU.js.map +0 -1
  263. package/dist/chunk-RXSDAOF7.js +0 -45
  264. package/dist/chunk-RXSDAOF7.js.map +0 -1
  265. package/dist/chunk-RZD2P2BD.js +0 -77
  266. package/dist/chunk-RZD2P2BD.js.map +0 -1
  267. package/dist/chunk-UL52C2UU.js +0 -22
  268. package/dist/chunk-UL52C2UU.js.map +0 -1
  269. package/dist/chunk-USFQYYSE.js +0 -118
  270. package/dist/chunk-USFQYYSE.js.map +0 -1
  271. package/dist/chunk-UW3CSNPH.js +0 -77
  272. package/dist/chunk-UW3CSNPH.js.map +0 -1
  273. package/dist/chunk-V2ORCFEN.js +0 -156
  274. package/dist/chunk-V2ORCFEN.js.map +0 -1
  275. package/dist/chunk-WQO7NSII.js +0 -141
  276. package/dist/chunk-WQO7NSII.js.map +0 -1
  277. package/dist/chunk-WXHK2EIV.js +0 -75
  278. package/dist/chunk-WXHK2EIV.js.map +0 -1
  279. package/dist/chunk-Y6W3YC3K.js +0 -17
  280. package/dist/chunk-Y6W3YC3K.js.map +0 -1
  281. package/dist/chunk-ZRVEDPQA.js +0 -59
  282. package/dist/chunk-ZRVEDPQA.js.map +0 -1
@@ -0,0 +1,179 @@
1
+ "use client";
2
+ import { Menu } from '@base-ui/react/menu';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import 'lucide-react';
6
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
+ import { Avatar as Avatar$1 } from '@base-ui/react/avatar';
8
+
9
+ // src/components/ui/dropdown-menu.tsx
10
+ function cn(...inputs) {
11
+ return twMerge(clsx(inputs));
12
+ }
13
+ function DropdownMenu({ ...props }) {
14
+ return /* @__PURE__ */ jsx(Menu.Root, { "data-slot": "dropdown-menu", ...props });
15
+ }
16
+ function DropdownMenuTrigger({ ...props }) {
17
+ return /* @__PURE__ */ jsx(Menu.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
18
+ }
19
+ function DropdownMenuContent({
20
+ align = "start",
21
+ alignOffset = 0,
22
+ side = "bottom",
23
+ sideOffset = 4,
24
+ className,
25
+ ...props
26
+ }) {
27
+ return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(
28
+ Menu.Positioner,
29
+ {
30
+ className: "isolate z-50 outline-none",
31
+ align,
32
+ alignOffset,
33
+ side,
34
+ sideOffset,
35
+ children: /* @__PURE__ */ jsx(
36
+ Menu.Popup,
37
+ {
38
+ "data-slot": "dropdown-menu-content",
39
+ className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border-brutal border-foreground bg-popover p-1 text-popover-foreground shadow-brutal duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
40
+ ...props
41
+ }
42
+ )
43
+ }
44
+ ) });
45
+ }
46
+ function DropdownMenuGroup({ ...props }) {
47
+ return /* @__PURE__ */ jsx(Menu.Group, { "data-slot": "dropdown-menu-group", ...props });
48
+ }
49
+ function DropdownMenuLabel({
50
+ className,
51
+ inset,
52
+ ...props
53
+ }) {
54
+ return /* @__PURE__ */ jsx(
55
+ Menu.GroupLabel,
56
+ {
57
+ "data-slot": "dropdown-menu-label",
58
+ "data-inset": inset,
59
+ className: cn(
60
+ "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
61
+ className
62
+ ),
63
+ ...props
64
+ }
65
+ );
66
+ }
67
+ function DropdownMenuItem({
68
+ className,
69
+ inset,
70
+ variant = "default",
71
+ ...props
72
+ }) {
73
+ return /* @__PURE__ */ jsx(
74
+ Menu.Item,
75
+ {
76
+ "data-slot": "dropdown-menu-item",
77
+ "data-inset": inset,
78
+ "data-variant": variant,
79
+ className: cn(
80
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
81
+ className
82
+ ),
83
+ ...props
84
+ }
85
+ );
86
+ }
87
+ function DropdownMenuSeparator({
88
+ className,
89
+ ...props
90
+ }) {
91
+ return /* @__PURE__ */ jsx(
92
+ Menu.Separator,
93
+ {
94
+ "data-slot": "dropdown-menu-separator",
95
+ className: cn("-mx-1 my-1 h-px bg-border", className),
96
+ ...props
97
+ }
98
+ );
99
+ }
100
+ function Avatar({
101
+ className,
102
+ size = "default",
103
+ ...props
104
+ }) {
105
+ return /* @__PURE__ */ jsx(
106
+ Avatar$1.Root,
107
+ {
108
+ "data-slot": "avatar",
109
+ "data-size": size,
110
+ className: cn(
111
+ "group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",
112
+ className
113
+ ),
114
+ ...props
115
+ }
116
+ );
117
+ }
118
+ function AvatarImage({ className, ...props }) {
119
+ return /* @__PURE__ */ jsx(
120
+ Avatar$1.Image,
121
+ {
122
+ "data-slot": "avatar-image",
123
+ className: cn(
124
+ "aspect-square size-full rounded-full object-cover",
125
+ className
126
+ ),
127
+ ...props
128
+ }
129
+ );
130
+ }
131
+ function AvatarFallback({
132
+ className,
133
+ ...props
134
+ }) {
135
+ return /* @__PURE__ */ jsx(
136
+ Avatar$1.Fallback,
137
+ {
138
+ "data-slot": "avatar-fallback",
139
+ className: cn(
140
+ "flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",
141
+ className
142
+ ),
143
+ ...props
144
+ }
145
+ );
146
+ }
147
+ function UserMenu({ name, email, avatar, items, onSignOut }) {
148
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
149
+ /* @__PURE__ */ jsxs(
150
+ DropdownMenuTrigger,
151
+ {
152
+ className: "inline-flex shrink-0 cursor-pointer items-center gap-2 rounded-lg px-3 py-1.5 text-sm font-medium outline-none hover:bg-secondary",
153
+ children: [
154
+ /* @__PURE__ */ jsxs(Avatar, { className: "size-7", children: [
155
+ avatar && /* @__PURE__ */ jsx(AvatarImage, { src: avatar, alt: name }),
156
+ /* @__PURE__ */ jsx(AvatarFallback, { children: name[0] })
157
+ ] }),
158
+ /* @__PURE__ */ jsx("span", { className: "hidden text-sm font-medium sm:inline", children: name })
159
+ ]
160
+ }
161
+ ),
162
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "w-48", children: [
163
+ /* @__PURE__ */ jsxs(DropdownMenuLabel, { children: [
164
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-bold", children: name }),
165
+ email && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: email })
166
+ ] }),
167
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
168
+ items && /* @__PURE__ */ jsx(DropdownMenuGroup, { children: items.map((item) => /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: item.onClick, children: item.href ? /* @__PURE__ */ jsx("a", { href: item.href, children: item.label }) : item.label }, item.label)) }),
169
+ onSignOut && /* @__PURE__ */ jsxs(Fragment, { children: [
170
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
171
+ /* @__PURE__ */ jsx(DropdownMenuItem, { onClick: onSignOut, children: "Sign out" })
172
+ ] })
173
+ ] })
174
+ ] });
175
+ }
176
+
177
+ export { UserMenu };
178
+ //# sourceMappingURL=user-menu.js.map
179
+ //# sourceMappingURL=user-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/dropdown-menu.tsx","../../../src/components/ui/avatar.tsx","../../../src/components/dashboard/user-menu.tsx"],"names":["MenuPrimitive","jsx","AvatarPrimitive","jsxs"],"mappings":"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","file":"user-menu.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ChevronRightIcon, CheckIcon } from \"lucide-react\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border-brutal border-foreground bg-popover p-1 text-popover-foreground shadow-brutal duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"w-auto min-w-[96px] rounded-lg border-brutal border-foreground bg-popover p-1 text-popover-foreground shadow-brutal duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"@base-ui/react/avatar\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: AvatarPrimitive.Root.Props & {\n size?: \"default\" | \"sm\" | \"lg\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\n \"aspect-square size-full rounded-full object-cover\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: AvatarPrimitive.Fallback.Props) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarBadge,\n}\n","import {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n DropdownMenuGroup,\n} from \"../ui/dropdown-menu\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../ui/avatar\";\n\ninterface UserMenuProps {\n name: string;\n email?: string;\n avatar?: string;\n items?: { label: string; href?: string; onClick?: () => void }[];\n onSignOut?: () => void;\n}\n\nexport function UserMenu({ name, email, avatar, items, onSignOut }: UserMenuProps) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className=\"inline-flex shrink-0 cursor-pointer items-center gap-2 rounded-lg px-3 py-1.5 text-sm font-medium outline-none hover:bg-secondary\"\n >\n <Avatar className=\"size-7\">\n {avatar && <AvatarImage src={avatar} alt={name} />}\n <AvatarFallback>{name[0]}</AvatarFallback>\n </Avatar>\n <span className=\"hidden text-sm font-medium sm:inline\">{name}</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n <DropdownMenuLabel>\n <p className=\"text-sm font-bold\">{name}</p>\n {email && <p className=\"text-xs text-muted-foreground\">{email}</p>}\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {items && (\n <DropdownMenuGroup>\n {items.map((item) => (\n <DropdownMenuItem key={item.label} onClick={item.onClick}>\n {item.href ? <a href={item.href}>{item.label}</a> : item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n )}\n {onSignOut && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={onSignOut}>Sign out</DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type ViewMode = "table" | "kanban" | "grid" | "calendar" | "list";
4
+ interface ViewSwitcherProps {
5
+ value: ViewMode;
6
+ onChange: (value: ViewMode) => void;
7
+ views?: ViewMode[];
8
+ className?: string;
9
+ }
10
+ declare function ViewSwitcher({ value, onChange, views, className, }: ViewSwitcherProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { ViewSwitcher };
@@ -1,10 +1,35 @@
1
- import { toggleVariants } from './chunk-6APJMAO7.js';
2
- import { cn } from './chunk-H6SOU4UG.js';
1
+ "use client";
3
2
  import * as React from 'react';
4
3
  import { Toggle } from '@base-ui/react/toggle';
5
4
  import { ToggleGroup as ToggleGroup$1 } from '@base-ui/react/toggle-group';
5
+ import { clsx } from 'clsx';
6
+ import { twMerge } from 'tailwind-merge';
7
+ import { cva } from 'class-variance-authority';
6
8
  import { jsx } from 'react/jsx-runtime';
7
9
 
10
+ function cn(...inputs) {
11
+ return twMerge(clsx(inputs));
12
+ }
13
+ var toggleVariants = cva(
14
+ "group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:border-brutal aria-pressed:border-foreground aria-pressed:bg-muted aria-pressed:shadow-brutal-sm data-[state=on]:border-brutal data-[state=on]:border-foreground data-[state=on]:bg-muted data-[state=on]:shadow-brutal-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
15
+ {
16
+ variants: {
17
+ variant: {
18
+ default: "bg-transparent",
19
+ outline: "border-brutal border-foreground bg-transparent shadow-brutal-sm hover:bg-muted"
20
+ },
21
+ size: {
22
+ default: "h-8 min-w-8 px-2",
23
+ sm: "h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-1.5 text-[0.8rem]",
24
+ lg: "h-9 min-w-9 px-2.5"
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ variant: "default",
29
+ size: "default"
30
+ }
31
+ }
32
+ );
8
33
  var ToggleGroupContext = React.createContext({
9
34
  size: "default",
10
35
  variant: "default",
@@ -72,7 +97,34 @@ function ToggleGroupItem({
72
97
  }
73
98
  );
74
99
  }
100
+ var viewLabels = {
101
+ table: "Table",
102
+ kanban: "Board",
103
+ grid: "Grid",
104
+ calendar: "Calendar",
105
+ list: "List"
106
+ };
107
+ function ViewSwitcher({
108
+ value,
109
+ onChange,
110
+ views = ["table", "kanban", "grid", "calendar", "list"],
111
+ className
112
+ }) {
113
+ return /* @__PURE__ */ jsx(
114
+ ToggleGroup,
115
+ {
116
+ value: [value],
117
+ onValueChange: (vals) => {
118
+ if (vals.length > 0) {
119
+ onChange(vals[0]);
120
+ }
121
+ },
122
+ className,
123
+ children: views.map((view) => /* @__PURE__ */ jsx(ToggleGroupItem, { value: view, className: "brutal-label text-xs", children: viewLabels[view] }, view))
124
+ }
125
+ );
126
+ }
75
127
 
76
- export { ToggleGroup, ToggleGroupItem };
77
- //# sourceMappingURL=chunk-OCSYB6YE.js.map
78
- //# sourceMappingURL=chunk-OCSYB6YE.js.map
128
+ export { ViewSwitcher };
129
+ //# sourceMappingURL=view-switcher.js.map
130
+ //# sourceMappingURL=view-switcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/toggle.tsx","../../../src/components/ui/toggle-group.tsx","../../../src/components/dashboard/view-switcher.tsx"],"names":["jsx","ToggleGroupPrimitive","TogglePrimitive"],"mappings":"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","file":"view-switcher.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst toggleVariants = cva(\n \"group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:border-brutal aria-pressed:border-foreground aria-pressed:bg-muted aria-pressed:shadow-brutal-sm data-[state=on]:border-brutal data-[state=on]:border-foreground data-[state=on]:bg-muted data-[state=on]:shadow-brutal-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-brutal border-foreground bg-transparent shadow-brutal-sm hover:bg-muted\",\n },\n size: {\n default: \"h-8 min-w-8 px-2\",\n sm: \"h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-1.5 text-[0.8rem]\",\n lg: \"h-9 min-w-9 px-2.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"@base-ui/react/toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n orientation: \"horizontal\",\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = \"horizontal\",\n children,\n ...props\n}: ToggleGroupPrimitive.Props &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }) {\n return (\n <ToggleGroupPrimitive\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"group/toggle-group flex w-fit flex-row items-center gap-[var(--gap)] rounded-lg border-brutal border-foreground data-vertical:flex-col data-vertical:items-stretch\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider\n value={{ variant, size, spacing, orientation }}\n >\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = \"default\",\n size = \"default\",\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <TogglePrimitive\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n \"shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t\",\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </TogglePrimitive>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","\"use client\";\n\nimport { ToggleGroup, ToggleGroupItem } from \"../ui/toggle-group\";\n\ntype ViewMode = \"table\" | \"kanban\" | \"grid\" | \"calendar\" | \"list\";\n\ninterface ViewSwitcherProps {\n value: ViewMode;\n onChange: (value: ViewMode) => void;\n views?: ViewMode[];\n className?: string;\n}\n\nconst viewLabels: Record<ViewMode, string> = {\n table: \"Table\",\n kanban: \"Board\",\n grid: \"Grid\",\n calendar: \"Calendar\",\n list: \"List\",\n};\n\nexport function ViewSwitcher({\n value,\n onChange,\n views = [\"table\", \"kanban\", \"grid\", \"calendar\", \"list\"],\n className,\n}: ViewSwitcherProps) {\n return (\n <ToggleGroup\n value={[value]}\n onValueChange={(vals: string[]) => {\n if (vals.length > 0) {\n onChange(vals[0] as ViewMode);\n }\n }}\n className={className}\n >\n {views.map((view) => (\n <ToggleGroupItem key={view} value={view} className=\"brutal-label text-xs\">\n {viewLabels[view]}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n );\n}\n"]}
@@ -1,4 +1,80 @@
1
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '../../chunk-WXHK2EIV.js';
2
- import '../../chunk-H6SOU4UG.js';
1
+ "use client";
2
+ import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+ function Accordion({ className, ...props }) {
12
+ return /* @__PURE__ */ jsx(
13
+ Accordion$1.Root,
14
+ {
15
+ "data-slot": "accordion",
16
+ className: cn("flex w-full flex-col", className),
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ function AccordionItem({ className, ...props }) {
22
+ return /* @__PURE__ */ jsx(
23
+ Accordion$1.Item,
24
+ {
25
+ "data-slot": "accordion-item",
26
+ className: cn("border-brutal border-foreground rounded-lg mb-2 px-3", className),
27
+ ...props
28
+ }
29
+ );
30
+ }
31
+ function AccordionTrigger({
32
+ className,
33
+ children,
34
+ ...props
35
+ }) {
36
+ return /* @__PURE__ */ jsx(Accordion$1.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
37
+ Accordion$1.Trigger,
38
+ {
39
+ "data-slot": "accordion-trigger",
40
+ className: cn(
41
+ "group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-bold transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground",
42
+ className
43
+ ),
44
+ ...props,
45
+ children: [
46
+ children,
47
+ /* @__PURE__ */ jsx(ChevronDownIcon, { "data-slot": "accordion-trigger-icon", className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden" }),
48
+ /* @__PURE__ */ jsx(ChevronUpIcon, { "data-slot": "accordion-trigger-icon", className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline" })
49
+ ]
50
+ }
51
+ ) });
52
+ }
53
+ function AccordionContent({
54
+ className,
55
+ children,
56
+ ...props
57
+ }) {
58
+ return /* @__PURE__ */ jsx(
59
+ Accordion$1.Panel,
60
+ {
61
+ "data-slot": "accordion-content",
62
+ className: "overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
63
+ ...props,
64
+ children: /* @__PURE__ */ jsx(
65
+ "div",
66
+ {
67
+ className: cn(
68
+ "h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
69
+ className
70
+ ),
71
+ children
72
+ }
73
+ )
74
+ }
75
+ );
76
+ }
77
+
78
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
3
79
  //# sourceMappingURL=accordion.js.map
4
80
  //# sourceMappingURL=accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"accordion.js"}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/accordion.tsx"],"names":["AccordionPrimitive"],"mappings":";;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AACzE,EAAA,uBACE,GAAA;AAAA,IAACA,WAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA;AAAA,MAC9C,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AAC7E,EAAA,uBACE,GAAA;AAAA,IAACA,WAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,MAC9E,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqC;AACnC,EAAA,uBACE,GAAA,CAACA,WAAA,CAAmB,MAAA,EAAnB,EAA0B,WAAU,MAAA,EACnC,QAAA,kBAAA,IAAA;AAAA,IAACA,WAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mfAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA,CAAC,eAAA,EAAA,EAAgB,WAAA,EAAU,wBAAA,EAAyB,WAAU,2EAAA,EAA4E,CAAA;AAAA,wBAC1I,GAAA,CAAC,aAAA,EAAA,EAAc,WAAA,EAAU,wBAAA,EAAyB,WAAU,kFAAA,EAAmF;AAAA;AAAA;AAAA,GACjJ,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmC;AACjC,EAAA,uBACE,GAAA;AAAA,IAACA,WAAA,CAAmB,KAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAU,2FAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,yLAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEC;AAAA;AAAA;AACH;AAAA,GACF;AAEJ","file":"accordion.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-brutal border-foreground rounded-lg mb-2 px-3\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-bold transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon data-slot=\"accordion-trigger-icon\" className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\" />\n <ChevronUpIcon data-slot=\"accordion-trigger-icon\" className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className=\"overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up\"\n {...props}\n >\n <div\n className={cn(\n \"h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n"]}
@@ -1,4 +1,82 @@
1
- export { Alert, AlertAction, AlertDescription, AlertTitle } from '../../chunk-4A3EQV6F.js';
2
- import '../../chunk-H6SOU4UG.js';
1
+ "use client";
2
+ import { cva } from 'class-variance-authority';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ // src/components/ui/alert.tsx
8
+ function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+ var alertVariants = cva(
12
+ "group/alert relative grid w-full gap-0.5 rounded-lg border-brutal border-foreground shadow-brutal-sm px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
13
+ {
14
+ variants: {
15
+ variant: {
16
+ default: "bg-card text-card-foreground",
17
+ destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
18
+ }
19
+ },
20
+ defaultVariants: {
21
+ variant: "default"
22
+ }
23
+ }
24
+ );
25
+ function Alert({
26
+ className,
27
+ variant,
28
+ ...props
29
+ }) {
30
+ return /* @__PURE__ */ jsx(
31
+ "div",
32
+ {
33
+ "data-slot": "alert",
34
+ role: "alert",
35
+ className: cn(alertVariants({ variant }), className),
36
+ ...props
37
+ }
38
+ );
39
+ }
40
+ function AlertTitle({ className, ...props }) {
41
+ return /* @__PURE__ */ jsx(
42
+ "div",
43
+ {
44
+ "data-slot": "alert-title",
45
+ className: cn(
46
+ "font-bold group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",
47
+ className
48
+ ),
49
+ ...props
50
+ }
51
+ );
52
+ }
53
+ function AlertDescription({
54
+ className,
55
+ ...props
56
+ }) {
57
+ return /* @__PURE__ */ jsx(
58
+ "div",
59
+ {
60
+ "data-slot": "alert-description",
61
+ className: cn(
62
+ "text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
63
+ className
64
+ ),
65
+ ...props
66
+ }
67
+ );
68
+ }
69
+ function AlertAction({ className, ...props }) {
70
+ return /* @__PURE__ */ jsx(
71
+ "div",
72
+ {
73
+ "data-slot": "alert-action",
74
+ className: cn("absolute top-2 right-2", className),
75
+ ...props
76
+ }
77
+ );
78
+ }
79
+
80
+ export { Alert, AlertAction, AlertDescription, AlertTitle };
3
81
  //# sourceMappingURL=alert.js.map
4
82
  //# sourceMappingURL=alert.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"alert.js"}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/alert.tsx"],"names":[],"mappings":";;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACAA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,qWAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,8BAAA;AAAA,QACT,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqE;AACnE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mHAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4JAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG;AAAA;AAAA,GACN;AAEJ","file":"alert.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-lg border-brutal border-foreground shadow-brutal-sm px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"font-bold group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n"]}
@@ -1,4 +1,105 @@
1
- export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage } from '../../chunk-53KZXLG4.js';
2
- import '../../chunk-H6SOU4UG.js';
1
+ "use client";
2
+ import { Avatar as Avatar$1 } from '@base-ui/react/avatar';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+ function Avatar({
11
+ className,
12
+ size = "default",
13
+ ...props
14
+ }) {
15
+ return /* @__PURE__ */ jsx(
16
+ Avatar$1.Root,
17
+ {
18
+ "data-slot": "avatar",
19
+ "data-size": size,
20
+ className: cn(
21
+ "group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",
22
+ className
23
+ ),
24
+ ...props
25
+ }
26
+ );
27
+ }
28
+ function AvatarImage({ className, ...props }) {
29
+ return /* @__PURE__ */ jsx(
30
+ Avatar$1.Image,
31
+ {
32
+ "data-slot": "avatar-image",
33
+ className: cn(
34
+ "aspect-square size-full rounded-full object-cover",
35
+ className
36
+ ),
37
+ ...props
38
+ }
39
+ );
40
+ }
41
+ function AvatarFallback({
42
+ className,
43
+ ...props
44
+ }) {
45
+ return /* @__PURE__ */ jsx(
46
+ Avatar$1.Fallback,
47
+ {
48
+ "data-slot": "avatar-fallback",
49
+ className: cn(
50
+ "flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",
51
+ className
52
+ ),
53
+ ...props
54
+ }
55
+ );
56
+ }
57
+ function AvatarBadge({ className, ...props }) {
58
+ return /* @__PURE__ */ jsx(
59
+ "span",
60
+ {
61
+ "data-slot": "avatar-badge",
62
+ className: cn(
63
+ "absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none",
64
+ "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
65
+ "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
66
+ "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
67
+ className
68
+ ),
69
+ ...props
70
+ }
71
+ );
72
+ }
73
+ function AvatarGroup({ className, ...props }) {
74
+ return /* @__PURE__ */ jsx(
75
+ "div",
76
+ {
77
+ "data-slot": "avatar-group",
78
+ className: cn(
79
+ "group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background",
80
+ className
81
+ ),
82
+ ...props
83
+ }
84
+ );
85
+ }
86
+ function AvatarGroupCount({
87
+ className,
88
+ ...props
89
+ }) {
90
+ return /* @__PURE__ */ jsx(
91
+ "div",
92
+ {
93
+ "data-slot": "avatar-group-count",
94
+ className: cn(
95
+ "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
96
+ className
97
+ ),
98
+ ...props
99
+ }
100
+ );
101
+ }
102
+
103
+ export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
3
104
  //# sourceMappingURL=avatar.js.map
4
105
  //# sourceMappingURL=avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"avatar.js"}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/avatar.tsx"],"names":["AvatarPrimitive"],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,uPAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmC;AACjC,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oIAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiC;AAC1E,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0KAAA;AAAA,QACA,+EAAA;AAAA,QACA,2FAAA;AAAA,QACA,+EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0VAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ","file":"avatar.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"@base-ui/react/avatar\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: AvatarPrimitive.Root.Props & {\n size?: \"default\" | \"sm\" | \"lg\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\n \"aspect-square size-full rounded-full object-cover\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: AvatarPrimitive.Fallback.Props) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarBadge,\n}\n"]}