@hyunsdev/ui 0.1.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 (340) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +89 -0
  3. package/SKILL.md +38 -0
  4. package/dist/WindowContext-DybYtZJa.d.ts +50 -0
  5. package/dist/_styles-BbTx89aX.d.ts +3 -0
  6. package/dist/chunk-23KUNTRD.js +49 -0
  7. package/dist/chunk-23KUNTRD.js.map +1 -0
  8. package/dist/chunk-3RTSANKB.js +51 -0
  9. package/dist/chunk-3RTSANKB.js.map +1 -0
  10. package/dist/chunk-4QIWBOF4.js +129 -0
  11. package/dist/chunk-4QIWBOF4.js.map +1 -0
  12. package/dist/chunk-5JCWC7IU.js +293 -0
  13. package/dist/chunk-5JCWC7IU.js.map +1 -0
  14. package/dist/chunk-6ANDNGHD.js +33 -0
  15. package/dist/chunk-6ANDNGHD.js.map +1 -0
  16. package/dist/chunk-7W7QZHEZ.js +42 -0
  17. package/dist/chunk-7W7QZHEZ.js.map +1 -0
  18. package/dist/chunk-BHO4WT2N.js +51 -0
  19. package/dist/chunk-BHO4WT2N.js.map +1 -0
  20. package/dist/chunk-BI3KKBIC.js +11 -0
  21. package/dist/chunk-BI3KKBIC.js.map +1 -0
  22. package/dist/chunk-D3SP7GL3.js +55 -0
  23. package/dist/chunk-D3SP7GL3.js.map +1 -0
  24. package/dist/chunk-D7W4RSQX.js +115 -0
  25. package/dist/chunk-D7W4RSQX.js.map +1 -0
  26. package/dist/chunk-DN2AEEA2.js +11 -0
  27. package/dist/chunk-DN2AEEA2.js.map +1 -0
  28. package/dist/chunk-ETTKFCO6.js +84 -0
  29. package/dist/chunk-ETTKFCO6.js.map +1 -0
  30. package/dist/chunk-GJT7TDBS.js +66 -0
  31. package/dist/chunk-GJT7TDBS.js.map +1 -0
  32. package/dist/chunk-HZT6RQYZ.js +109 -0
  33. package/dist/chunk-HZT6RQYZ.js.map +1 -0
  34. package/dist/chunk-JB2QZV7K.js +60 -0
  35. package/dist/chunk-JB2QZV7K.js.map +1 -0
  36. package/dist/chunk-KJJB2PVC.js +21 -0
  37. package/dist/chunk-KJJB2PVC.js.map +1 -0
  38. package/dist/chunk-NE3IVPMO.js +31 -0
  39. package/dist/chunk-NE3IVPMO.js.map +1 -0
  40. package/dist/chunk-O2BG2KSY.js +23 -0
  41. package/dist/chunk-O2BG2KSY.js.map +1 -0
  42. package/dist/chunk-OUFGNJ3V.js +1726 -0
  43. package/dist/chunk-OUFGNJ3V.js.map +1 -0
  44. package/dist/chunk-PLZMCJSL.js +351 -0
  45. package/dist/chunk-PLZMCJSL.js.map +1 -0
  46. package/dist/chunk-POG5DZBT.js +104 -0
  47. package/dist/chunk-POG5DZBT.js.map +1 -0
  48. package/dist/chunk-SECZM6JE.js +170 -0
  49. package/dist/chunk-SECZM6JE.js.map +1 -0
  50. package/dist/chunk-T64WPXSC.js +48 -0
  51. package/dist/chunk-T64WPXSC.js.map +1 -0
  52. package/dist/chunk-TU5CYBB4.js +90 -0
  53. package/dist/chunk-TU5CYBB4.js.map +1 -0
  54. package/dist/chunk-UVAI2U6X.js +153 -0
  55. package/dist/chunk-UVAI2U6X.js.map +1 -0
  56. package/dist/chunk-UXCBLYG6.js +142 -0
  57. package/dist/chunk-UXCBLYG6.js.map +1 -0
  58. package/dist/chunk-VUR4MQMH.js +53 -0
  59. package/dist/chunk-VUR4MQMH.js.map +1 -0
  60. package/dist/chunk-WIEKNG4S.js +26 -0
  61. package/dist/chunk-WIEKNG4S.js.map +1 -0
  62. package/dist/chunk-WIZ4OLOB.js +23 -0
  63. package/dist/chunk-WIZ4OLOB.js.map +1 -0
  64. package/dist/chunk-WJRJBMFN.js +21 -0
  65. package/dist/chunk-WJRJBMFN.js.map +1 -0
  66. package/dist/chunk-YUPLJP3F.js +33 -0
  67. package/dist/chunk-YUPLJP3F.js.map +1 -0
  68. package/dist/chunk-Z7ITPSUF.js +184 -0
  69. package/dist/chunk-Z7ITPSUF.js.map +1 -0
  70. package/dist/chunk-ZC76ALSI.js +75 -0
  71. package/dist/chunk-ZC76ALSI.js.map +1 -0
  72. package/dist/code-block-core-xkE94Rk5.d.ts +30 -0
  73. package/dist/components/accordion.d.ts +9 -0
  74. package/dist/components/accordion.js +98 -0
  75. package/dist/components/accordion.js.map +1 -0
  76. package/dist/components/alert-dialog.d.ts +26 -0
  77. package/dist/components/alert-dialog.js +341 -0
  78. package/dist/components/alert-dialog.js.map +1 -0
  79. package/dist/components/alert.d.ts +13 -0
  80. package/dist/components/alert.js +76 -0
  81. package/dist/components/alert.js.map +1 -0
  82. package/dist/components/aspect-ratio.d.ts +6 -0
  83. package/dist/components/aspect-ratio.js +12 -0
  84. package/dist/components/aspect-ratio.js.map +1 -0
  85. package/dist/components/avatar.d.ts +13 -0
  86. package/dist/components/avatar.js +19 -0
  87. package/dist/components/avatar.js.map +1 -0
  88. package/dist/components/badge.d.ts +12 -0
  89. package/dist/components/badge.js +11 -0
  90. package/dist/components/badge.js.map +1 -0
  91. package/dist/components/breadcrumb.d.ts +13 -0
  92. package/dist/components/breadcrumb.js +102 -0
  93. package/dist/components/breadcrumb.js.map +1 -0
  94. package/dist/components/button-group.d.ts +16 -0
  95. package/dist/components/button-group.js +15 -0
  96. package/dist/components/button-group.js.map +1 -0
  97. package/dist/components/button.d.ts +14 -0
  98. package/dist/components/button.js +11 -0
  99. package/dist/components/button.js.map +1 -0
  100. package/dist/components/calendar.d.ts +14 -0
  101. package/dist/components/calendar.js +13 -0
  102. package/dist/components/calendar.js.map +1 -0
  103. package/dist/components/card.d.ts +13 -0
  104. package/dist/components/card.js +21 -0
  105. package/dist/components/card.js.map +1 -0
  106. package/dist/components/carousel.d.ts +32 -0
  107. package/dist/components/carousel.js +196 -0
  108. package/dist/components/carousel.js.map +1 -0
  109. package/dist/components/chart.d.ts +46 -0
  110. package/dist/components/chart.js +254 -0
  111. package/dist/components/chart.js.map +1 -0
  112. package/dist/components/checkbox.d.ts +6 -0
  113. package/dist/components/checkbox.js +41 -0
  114. package/dist/components/checkbox.js.map +1 -0
  115. package/dist/components/code-block-core.d.ts +3 -0
  116. package/dist/components/code-block-core.js +13 -0
  117. package/dist/components/code-block-core.js.map +1 -0
  118. package/dist/components/code-block-custom.d.ts +20 -0
  119. package/dist/components/code-block-custom.js +16 -0
  120. package/dist/components/code-block-custom.js.map +1 -0
  121. package/dist/components/code-block-shiki.d.ts +13 -0
  122. package/dist/components/code-block-shiki.js +15 -0
  123. package/dist/components/code-block-shiki.js.map +1 -0
  124. package/dist/components/code-block.d.ts +5 -0
  125. package/dist/components/code-block.js +14 -0
  126. package/dist/components/code-block.js.map +1 -0
  127. package/dist/components/collapsible.d.ts +8 -0
  128. package/dist/components/collapsible.js +24 -0
  129. package/dist/components/collapsible.js.map +1 -0
  130. package/dist/components/collection.d.ts +63 -0
  131. package/dist/components/collection.js +598 -0
  132. package/dist/components/collection.js.map +1 -0
  133. package/dist/components/color-dot.d.ts +19 -0
  134. package/dist/components/color-dot.js +41 -0
  135. package/dist/components/color-dot.js.map +1 -0
  136. package/dist/components/color-picker.d.ts +12 -0
  137. package/dist/components/color-picker.js +142 -0
  138. package/dist/components/color-picker.js.map +1 -0
  139. package/dist/components/combobox.d.ts +74 -0
  140. package/dist/components/combobox.js +610 -0
  141. package/dist/components/combobox.js.map +1 -0
  142. package/dist/components/command.d.ts +21 -0
  143. package/dist/components/command.js +31 -0
  144. package/dist/components/command.js.map +1 -0
  145. package/dist/components/date-picker.d.ts +43 -0
  146. package/dist/components/date-picker.js +235 -0
  147. package/dist/components/date-picker.js.map +1 -0
  148. package/dist/components/dialog.d.ts +25 -0
  149. package/dist/components/dialog.js +31 -0
  150. package/dist/components/dialog.js.map +1 -0
  151. package/dist/components/drawer.d.ts +15 -0
  152. package/dist/components/drawer.js +124 -0
  153. package/dist/components/drawer.js.map +1 -0
  154. package/dist/components/dropdown-menu.d.ts +34 -0
  155. package/dist/components/dropdown-menu.js +248 -0
  156. package/dist/components/dropdown-menu.js.map +1 -0
  157. package/dist/components/empty.d.ts +15 -0
  158. package/dist/components/empty.js +104 -0
  159. package/dist/components/empty.js.map +1 -0
  160. package/dist/components/field.d.ts +29 -0
  161. package/dist/components/field.js +214 -0
  162. package/dist/components/field.js.map +1 -0
  163. package/dist/components/format-bytes.d.ts +12 -0
  164. package/dist/components/format-bytes.js +30 -0
  165. package/dist/components/format-bytes.js.map +1 -0
  166. package/dist/components/format-number.d.ts +12 -0
  167. package/dist/components/format-number.js +30 -0
  168. package/dist/components/format-number.js.map +1 -0
  169. package/dist/components/gauge.d.ts +11 -0
  170. package/dist/components/gauge.js +82 -0
  171. package/dist/components/gauge.js.map +1 -0
  172. package/dist/components/hover-card.d.ts +8 -0
  173. package/dist/components/hover-card.js +45 -0
  174. package/dist/components/hover-card.js.map +1 -0
  175. package/dist/components/input-group.d.ts +24 -0
  176. package/dist/components/input-group.js +23 -0
  177. package/dist/components/input-group.js.map +1 -0
  178. package/dist/components/input-otp.d.ts +20 -0
  179. package/dist/components/input-otp.js +95 -0
  180. package/dist/components/input-otp.js.map +1 -0
  181. package/dist/components/input.d.ts +9 -0
  182. package/dist/components/input.js +9 -0
  183. package/dist/components/input.js.map +1 -0
  184. package/dist/components/item.d.ts +27 -0
  185. package/dist/components/item.js +182 -0
  186. package/dist/components/item.js.map +1 -0
  187. package/dist/components/kbd.d.ts +6 -0
  188. package/dist/components/kbd.js +34 -0
  189. package/dist/components/kbd.js.map +1 -0
  190. package/dist/components/label.d.ts +6 -0
  191. package/dist/components/label.js +9 -0
  192. package/dist/components/label.js.map +1 -0
  193. package/dist/components/loading-bar.d.ts +8 -0
  194. package/dist/components/loading-bar.js +127 -0
  195. package/dist/components/loading-bar.js.map +1 -0
  196. package/dist/components/loading-dots.d.ts +5 -0
  197. package/dist/components/loading-dots.js +45 -0
  198. package/dist/components/loading-dots.js.map +1 -0
  199. package/dist/components/main-provider.d.ts +7 -0
  200. package/dist/components/main-provider.js +12 -0
  201. package/dist/components/main-provider.js.map +1 -0
  202. package/dist/components/mark.d.ts +11 -0
  203. package/dist/components/mark.js +44 -0
  204. package/dist/components/mark.js.map +1 -0
  205. package/dist/components/pagination.d.ts +21 -0
  206. package/dist/components/pagination.js +114 -0
  207. package/dist/components/pagination.js.map +1 -0
  208. package/dist/components/popover.d.ts +12 -0
  209. package/dist/components/popover.js +22 -0
  210. package/dist/components/popover.js.map +1 -0
  211. package/dist/components/prev-next-navigation.d.ts +15 -0
  212. package/dist/components/prev-next-navigation.js +85 -0
  213. package/dist/components/prev-next-navigation.js.map +1 -0
  214. package/dist/components/progress.d.ts +6 -0
  215. package/dist/components/progress.js +38 -0
  216. package/dist/components/progress.js.map +1 -0
  217. package/dist/components/radio-group.d.ts +7 -0
  218. package/dist/components/radio-group.js +57 -0
  219. package/dist/components/radio-group.js.map +1 -0
  220. package/dist/components/relative-time.d.ts +16 -0
  221. package/dist/components/relative-time.js +75 -0
  222. package/dist/components/relative-time.js.map +1 -0
  223. package/dist/components/resizable.d.ts +10 -0
  224. package/dist/components/resizable.js +45 -0
  225. package/dist/components/resizable.js.map +1 -0
  226. package/dist/components/scroll-area.d.ts +7 -0
  227. package/dist/components/scroll-area.js +11 -0
  228. package/dist/components/scroll-area.js.map +1 -0
  229. package/dist/components/select.d.ts +20 -0
  230. package/dist/components/select.js +189 -0
  231. package/dist/components/select.js.map +1 -0
  232. package/dist/components/separator.d.ts +6 -0
  233. package/dist/components/separator.js +9 -0
  234. package/dist/components/separator.js.map +1 -0
  235. package/dist/components/sheet.d.ts +16 -0
  236. package/dist/components/sheet.js +25 -0
  237. package/dist/components/sheet.js.map +1 -0
  238. package/dist/components/show-more.d.ts +15 -0
  239. package/dist/components/show-more.js +79 -0
  240. package/dist/components/show-more.js.map +1 -0
  241. package/dist/components/skeleton.d.ts +5 -0
  242. package/dist/components/skeleton.js +8 -0
  243. package/dist/components/skeleton.js.map +1 -0
  244. package/dist/components/slider.d.ts +6 -0
  245. package/dist/components/slider.js +65 -0
  246. package/dist/components/slider.js.map +1 -0
  247. package/dist/components/snippet.d.ts +13 -0
  248. package/dist/components/snippet.js +135 -0
  249. package/dist/components/snippet.js.map +1 -0
  250. package/dist/components/sonner.d.ts +6 -0
  251. package/dist/components/sonner.js +10 -0
  252. package/dist/components/sonner.js.map +1 -0
  253. package/dist/components/spinner.d.ts +5 -0
  254. package/dist/components/spinner.js +8 -0
  255. package/dist/components/spinner.js.map +1 -0
  256. package/dist/components/stat.d.ts +17 -0
  257. package/dist/components/stat.js +71 -0
  258. package/dist/components/stat.js.map +1 -0
  259. package/dist/components/steps.d.ts +17 -0
  260. package/dist/components/steps.js +133 -0
  261. package/dist/components/steps.js.map +1 -0
  262. package/dist/components/switch.d.ts +8 -0
  263. package/dist/components/switch.js +44 -0
  264. package/dist/components/switch.js.map +1 -0
  265. package/dist/components/table.d.ts +12 -0
  266. package/dist/components/table.js +101 -0
  267. package/dist/components/table.js.map +1 -0
  268. package/dist/components/tabs.d.ts +14 -0
  269. package/dist/components/tabs.js +88 -0
  270. package/dist/components/tabs.js.map +1 -0
  271. package/dist/components/textarea.d.ts +5 -0
  272. package/dist/components/textarea.js +9 -0
  273. package/dist/components/textarea.js.map +1 -0
  274. package/dist/components/theme-provider.d.ts +10 -0
  275. package/dist/components/theme-provider.js +14 -0
  276. package/dist/components/theme-provider.js.map +1 -0
  277. package/dist/components/time-picker.d.ts +17 -0
  278. package/dist/components/time-picker.js +219 -0
  279. package/dist/components/time-picker.js.map +1 -0
  280. package/dist/components/timeline.d.ts +17 -0
  281. package/dist/components/timeline.js +138 -0
  282. package/dist/components/timeline.js.map +1 -0
  283. package/dist/components/toggle-group.d.ts +14 -0
  284. package/dist/components/toggle-group.js +82 -0
  285. package/dist/components/toggle-group.js.map +1 -0
  286. package/dist/components/toggle.d.ts +12 -0
  287. package/dist/components/toggle.js +11 -0
  288. package/dist/components/toggle.js.map +1 -0
  289. package/dist/components/tooltip.d.ts +9 -0
  290. package/dist/components/tooltip.js +15 -0
  291. package/dist/components/tooltip.js.map +1 -0
  292. package/dist/components/typography.d.ts +17 -0
  293. package/dist/components/typography.js +91 -0
  294. package/dist/components/typography.js.map +1 -0
  295. package/dist/hooks/use-mobile.d.ts +3 -0
  296. package/dist/hooks/use-mobile.js +7 -0
  297. package/dist/hooks/use-mobile.js.map +1 -0
  298. package/dist/hooks/use-theme.d.ts +3 -0
  299. package/dist/hooks/use-theme.js +8 -0
  300. package/dist/hooks/use-theme.js.map +1 -0
  301. package/dist/index.d.ts +7 -0
  302. package/dist/index.js +27 -0
  303. package/dist/index.js.map +1 -0
  304. package/dist/layouts/center/index.d.ts +18 -0
  305. package/dist/layouts/center/index.js +73 -0
  306. package/dist/layouts/center/index.js.map +1 -0
  307. package/dist/layouts/chat/index.d.ts +42 -0
  308. package/dist/layouts/chat/index.js +191 -0
  309. package/dist/layouts/chat/index.js.map +1 -0
  310. package/dist/layouts/command/index.d.ts +2 -0
  311. package/dist/layouts/command/index.js +1 -0
  312. package/dist/layouts/command/index.js.map +1 -0
  313. package/dist/layouts/panel/index.d.ts +55 -0
  314. package/dist/layouts/panel/index.js +513 -0
  315. package/dist/layouts/panel/index.js.map +1 -0
  316. package/dist/layouts/presentation/index.d.ts +14 -0
  317. package/dist/layouts/presentation/index.js +100 -0
  318. package/dist/layouts/presentation/index.js.map +1 -0
  319. package/dist/layouts/site/index.d.ts +17 -0
  320. package/dist/layouts/site/index.js +82 -0
  321. package/dist/layouts/site/index.js.map +1 -0
  322. package/dist/layouts/window/index.d.ts +223 -0
  323. package/dist/layouts/window/index.js +127 -0
  324. package/dist/layouts/window/index.js.map +1 -0
  325. package/dist/layouts/workbench/index.d.ts +281 -0
  326. package/dist/layouts/workbench/index.js +2457 -0
  327. package/dist/layouts/workbench/index.js.map +1 -0
  328. package/dist/lib/format.d.ts +15 -0
  329. package/dist/lib/format.js +9 -0
  330. package/dist/lib/format.js.map +1 -0
  331. package/dist/lib/theme.d.ts +22 -0
  332. package/dist/lib/theme.js +25 -0
  333. package/dist/lib/theme.js.map +1 -0
  334. package/dist/lib/utils.d.ts +5 -0
  335. package/dist/lib/utils.js +7 -0
  336. package/dist/lib/utils.js.map +1 -0
  337. package/dist/styles/fonts.css +1 -0
  338. package/dist/styles/globals.css +717 -0
  339. package/dist/styles/tokens.css +693 -0
  340. package/package.json +137 -0
@@ -0,0 +1,248 @@
1
+ "use client";
2
+ import {
3
+ floatingItemAccentStateClass,
4
+ floatingItemHighlightClass,
5
+ floatingSurfaceClass
6
+ } from "../chunk-O2BG2KSY.js";
7
+ import {
8
+ cn
9
+ } from "../chunk-DN2AEEA2.js";
10
+
11
+ // src/components/dropdown-menu.tsx
12
+ import "react";
13
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
14
+ import { CheckIcon, ChevronRightIcon } from "lucide-react";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ function DropdownMenu({ ...props }) {
17
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
18
+ }
19
+ function DropdownMenuPortal({
20
+ ...props
21
+ }) {
22
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
23
+ }
24
+ function DropdownMenuTrigger({
25
+ ...props
26
+ }) {
27
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
28
+ }
29
+ function DropdownMenuContent({
30
+ className,
31
+ align = "start",
32
+ sideOffset = 4,
33
+ portalContainer,
34
+ ...props
35
+ }) {
36
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
37
+ DropdownMenuPrimitive.Content,
38
+ {
39
+ "data-slot": "dropdown-menu-content",
40
+ sideOffset,
41
+ align,
42
+ className: cn(
43
+ "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 z-[var(--layer-menu)] max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-[var(--radius-floating)] p-1 duration-100 data-[state=closed]:overflow-hidden",
44
+ floatingSurfaceClass,
45
+ className
46
+ ),
47
+ ...props
48
+ }
49
+ ) });
50
+ }
51
+ function DropdownMenuGroup({ ...props }) {
52
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
53
+ }
54
+ function DropdownMenuItem({
55
+ className,
56
+ inset,
57
+ variant = "default",
58
+ ...props
59
+ }) {
60
+ return /* @__PURE__ */ jsx(
61
+ DropdownMenuPrimitive.Item,
62
+ {
63
+ "data-slot": "dropdown-menu-item",
64
+ "data-inset": inset,
65
+ "data-variant": variant,
66
+ className: cn(
67
+ "group/dropdown-menu-item text-text-normal relative flex cursor-pointer items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4",
68
+ floatingItemHighlightClass,
69
+ "data-[variant=destructive]:text-text-error data-[variant=destructive]:focus:bg-background-error-hover data-[variant=destructive]:focus:text-text-error data-[variant=destructive]:focus:**:text-text-error data-[variant=destructive]:data-[highlighted]:bg-background-error-hover data-[variant=destructive]:data-[highlighted]:text-text-error data-[variant=destructive]:data-[highlighted]:**:text-text-error",
70
+ className
71
+ ),
72
+ ...props
73
+ }
74
+ );
75
+ }
76
+ function DropdownMenuCheckboxItem({
77
+ className,
78
+ children,
79
+ checked,
80
+ inset,
81
+ ...props
82
+ }) {
83
+ return /* @__PURE__ */ jsxs(
84
+ DropdownMenuPrimitive.CheckboxItem,
85
+ {
86
+ "data-slot": "dropdown-menu-checkbox-item",
87
+ "data-inset": inset,
88
+ className: cn(
89
+ "group/dropdown-menu-checkbox-item text-text-normal relative flex cursor-pointer items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4",
90
+ floatingItemHighlightClass,
91
+ className
92
+ ),
93
+ ...checked !== void 0 ? { checked } : {},
94
+ ...props,
95
+ children: [
96
+ /* @__PURE__ */ jsx(
97
+ "span",
98
+ {
99
+ className: "text-text-accent pointer-events-none absolute right-2 flex items-center justify-center",
100
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
101
+ children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
102
+ }
103
+ ),
104
+ children
105
+ ]
106
+ }
107
+ );
108
+ }
109
+ function DropdownMenuRadioGroup({
110
+ ...props
111
+ }) {
112
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props });
113
+ }
114
+ function DropdownMenuRadioItem({
115
+ className,
116
+ children,
117
+ inset,
118
+ ...props
119
+ }) {
120
+ return /* @__PURE__ */ jsxs(
121
+ DropdownMenuPrimitive.RadioItem,
122
+ {
123
+ "data-slot": "dropdown-menu-radio-item",
124
+ "data-inset": inset,
125
+ className: cn(
126
+ "group/dropdown-menu-radio-item text-text-normal relative flex cursor-pointer items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4",
127
+ floatingItemHighlightClass,
128
+ className
129
+ ),
130
+ ...props,
131
+ children: [
132
+ /* @__PURE__ */ jsx(
133
+ "span",
134
+ {
135
+ className: "text-text-accent pointer-events-none absolute right-2 flex items-center justify-center",
136
+ "data-slot": "dropdown-menu-radio-item-indicator",
137
+ children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
138
+ }
139
+ ),
140
+ children
141
+ ]
142
+ }
143
+ );
144
+ }
145
+ function DropdownMenuLabel({
146
+ className,
147
+ inset,
148
+ ...props
149
+ }) {
150
+ return /* @__PURE__ */ jsx(
151
+ DropdownMenuPrimitive.Label,
152
+ {
153
+ "data-slot": "dropdown-menu-label",
154
+ "data-inset": inset,
155
+ className: cn("text-text-muted px-1.5 py-1 text-xs font-medium data-inset:pl-7", className),
156
+ ...props
157
+ }
158
+ );
159
+ }
160
+ function DropdownMenuSeparator({
161
+ className,
162
+ ...props
163
+ }) {
164
+ return /* @__PURE__ */ jsx(
165
+ DropdownMenuPrimitive.Separator,
166
+ {
167
+ "data-slot": "dropdown-menu-separator",
168
+ className: cn("bg-border -mx-1 my-0 h-px min-h-px", className),
169
+ ...props
170
+ }
171
+ );
172
+ }
173
+ function DropdownMenuShortcut({ className, ...props }) {
174
+ return /* @__PURE__ */ jsx(
175
+ "span",
176
+ {
177
+ "data-slot": "dropdown-menu-shortcut",
178
+ className: cn(
179
+ "text-text-muted group-data-[highlighted]/dropdown-menu-item:text-text-normal group-data-[variant=destructive]/dropdown-menu-item:text-text-error group-data-[state=open]/dropdown-menu-sub-trigger:text-text-on-accent ml-auto text-xs tracking-widest",
180
+ className
181
+ ),
182
+ ...props
183
+ }
184
+ );
185
+ }
186
+ function DropdownMenuSub({ ...props }) {
187
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
188
+ }
189
+ function DropdownMenuSubTrigger({
190
+ className,
191
+ inset,
192
+ children,
193
+ ...props
194
+ }) {
195
+ return /* @__PURE__ */ jsxs(
196
+ DropdownMenuPrimitive.SubTrigger,
197
+ {
198
+ "data-slot": "dropdown-menu-sub-trigger",
199
+ "data-inset": inset,
200
+ className: cn(
201
+ "group/dropdown-menu-sub-trigger text-text-normal flex cursor-pointer items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4",
202
+ floatingItemHighlightClass,
203
+ floatingItemAccentStateClass,
204
+ className
205
+ ),
206
+ ...props,
207
+ children: [
208
+ children,
209
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
210
+ ]
211
+ }
212
+ );
213
+ }
214
+ function DropdownMenuSubContent({
215
+ className,
216
+ ...props
217
+ }) {
218
+ return /* @__PURE__ */ jsx(
219
+ DropdownMenuPrimitive.SubContent,
220
+ {
221
+ "data-slot": "dropdown-menu-sub-content",
222
+ className: cn(
223
+ "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 z-[var(--layer-menu)] min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-[var(--radius-floating)] p-1 duration-100",
224
+ floatingSurfaceClass,
225
+ className
226
+ ),
227
+ ...props
228
+ }
229
+ );
230
+ }
231
+ export {
232
+ DropdownMenu,
233
+ DropdownMenuCheckboxItem,
234
+ DropdownMenuContent,
235
+ DropdownMenuGroup,
236
+ DropdownMenuItem,
237
+ DropdownMenuLabel,
238
+ DropdownMenuPortal,
239
+ DropdownMenuRadioGroup,
240
+ DropdownMenuRadioItem,
241
+ DropdownMenuSeparator,
242
+ DropdownMenuShortcut,
243
+ DropdownMenuSub,
244
+ DropdownMenuSubContent,
245
+ DropdownMenuSubTrigger,
246
+ DropdownMenuTrigger
247
+ };
248
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/dropdown-menu.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport {\n floatingItemAccentStateClass,\n floatingItemHighlightClass,\n floatingSurfaceClass,\n} from \"./_styles\"\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\ntype DropdownMenuContentProps = React.ComponentProps<typeof DropdownMenuPrimitive.Content> & {\n portalContainer?: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>[\"container\"]\n}\n\nfunction DropdownMenuContent({\n className,\n align = \"start\",\n sideOffset = 4,\n portalContainer,\n ...props\n}: DropdownMenuContentProps) {\n return (\n <DropdownMenuPrimitive.Portal container={portalContainer}>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\n \"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 z-[var(--layer-menu)] max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-[var(--radius-floating)] p-1 duration-100 data-[state=closed]:overflow-hidden\",\n floatingSurfaceClass,\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item text-text-normal relative flex cursor-pointer items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4\",\n floatingItemHighlightClass,\n \"data-[variant=destructive]:text-text-error data-[variant=destructive]:focus:bg-background-error-hover data-[variant=destructive]:focus:text-text-error data-[variant=destructive]:focus:**:text-text-error data-[variant=destructive]:data-[highlighted]:bg-background-error-hover data-[variant=destructive]:data-[highlighted]:text-text-error data-[variant=destructive]:data-[highlighted]:**:text-text-error\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"group/dropdown-menu-checkbox-item text-text-normal relative flex cursor-pointer items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4\",\n floatingItemHighlightClass,\n className,\n )}\n {...(checked !== undefined ? { checked } : {})}\n {...props}\n >\n <span\n className=\"text-text-accent pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"group/dropdown-menu-radio-item text-text-normal relative flex cursor-pointer items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4\",\n floatingItemHighlightClass,\n className,\n )}\n {...props}\n >\n <span\n className=\"text-text-accent pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"text-text-muted px-1.5 py-1 text-xs font-medium data-inset:pl-7\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-0 h-px min-h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-text-muted group-data-[highlighted]/dropdown-menu-item:text-text-normal group-data-[variant=destructive]/dropdown-menu-item:text-text-error group-data-[state=open]/dropdown-menu-sub-trigger:text-text-on-accent ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"group/dropdown-menu-sub-trigger text-text-normal flex cursor-pointer items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4\",\n floatingItemHighlightClass,\n floatingItemAccentStateClass,\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"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 z-[var(--layer-menu)] min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-[var(--radius-floating)] p-1 duration-100\",\n floatingSurfaceClass,\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"],"mappings":"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","names":[]}
@@ -0,0 +1,15 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React$1 from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare function Empty({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
6
+ declare function EmptyHeader({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
7
+ declare const emptyMediaVariants: (props?: ({
8
+ variant?: "default" | "icon" | null | undefined;
9
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
10
+ declare function EmptyMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof emptyMediaVariants>): React$1.JSX.Element;
11
+ declare function EmptyTitle({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
12
+ declare function EmptyDescription({ className, ...props }: React.ComponentProps<"p">): React$1.JSX.Element;
13
+ declare function EmptyContent({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
14
+
15
+ export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
@@ -0,0 +1,104 @@
1
+ import {
2
+ cn
3
+ } from "../chunk-DN2AEEA2.js";
4
+
5
+ // src/components/empty.tsx
6
+ import { cva } from "class-variance-authority";
7
+ import { jsx } from "react/jsx-runtime";
8
+ function Empty({ className, ...props }) {
9
+ return /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ "data-slot": "empty",
13
+ className: cn(
14
+ "flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance",
15
+ className
16
+ ),
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ function EmptyHeader({ className, ...props }) {
22
+ return /* @__PURE__ */ jsx(
23
+ "div",
24
+ {
25
+ "data-slot": "empty-header",
26
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
27
+ ...props
28
+ }
29
+ );
30
+ }
31
+ var emptyMediaVariants = cva(
32
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
33
+ {
34
+ variants: {
35
+ variant: {
36
+ default: "bg-transparent",
37
+ icon: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-background-secondary text-text-normal [&_svg:not([class*='size-'])]:size-4"
38
+ }
39
+ },
40
+ defaultVariants: {
41
+ variant: "default"
42
+ }
43
+ }
44
+ );
45
+ function EmptyMedia({
46
+ className,
47
+ variant = "default",
48
+ ...props
49
+ }) {
50
+ return /* @__PURE__ */ jsx(
51
+ "div",
52
+ {
53
+ "data-slot": "empty-icon",
54
+ "data-variant": variant,
55
+ className: cn(emptyMediaVariants({ variant, className })),
56
+ ...props
57
+ }
58
+ );
59
+ }
60
+ function EmptyTitle({ className, ...props }) {
61
+ return /* @__PURE__ */ jsx(
62
+ "div",
63
+ {
64
+ "data-slot": "empty-title",
65
+ className: cn("font-heading text-sm font-medium tracking-tight", className),
66
+ ...props
67
+ }
68
+ );
69
+ }
70
+ function EmptyDescription({ className, ...props }) {
71
+ return /* @__PURE__ */ jsx(
72
+ "div",
73
+ {
74
+ "data-slot": "empty-description",
75
+ className: cn(
76
+ "text-text-muted [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",
77
+ className
78
+ ),
79
+ ...props
80
+ }
81
+ );
82
+ }
83
+ function EmptyContent({ className, ...props }) {
84
+ return /* @__PURE__ */ jsx(
85
+ "div",
86
+ {
87
+ "data-slot": "empty-content",
88
+ className: cn(
89
+ "flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance",
90
+ className
91
+ ),
92
+ ...props
93
+ }
94
+ );
95
+ }
96
+ export {
97
+ Empty,
98
+ EmptyContent,
99
+ EmptyDescription,
100
+ EmptyHeader,
101
+ EmptyMedia,
102
+ EmptyTitle
103
+ };
104
+ //# sourceMappingURL=empty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/empty.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\"flex max-w-sm flex-col items-center gap-2\", className)}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"flex size-8 shrink-0 items-center justify-center rounded-lg bg-background-secondary text-text-normal [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"font-heading text-sm font-medium tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"text-text-muted [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Empty, EmptyHeader, EmptyTitle, EmptyDescription, EmptyContent, EmptyMedia }\n"],"mappings":";;;;;AAAA,SAAS,WAA8B;AAMnC;AAFJ,SAAS,MAAM,EAAE,WAAW,GAAG,MAAM,GAAgC;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAgC;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6CAA6C,SAAS;AAAA,MACnE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAA0E;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,mBAAmB,EAAE,SAAS,UAAU,CAAC,CAAC;AAAA,MACvD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,mDAAmD,SAAS;AAAA,MACzE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,EAAE,WAAW,GAAG,MAAM,GAA8B;AAC5E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -0,0 +1,29 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React$1 from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { Label } from './label.js';
5
+ import '@radix-ui/react-label';
6
+
7
+ declare function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">): React$1.JSX.Element;
8
+ declare function FieldLegend({ className, variant, ...props }: React.ComponentProps<"legend"> & {
9
+ variant?: "legend" | "label";
10
+ }): React$1.JSX.Element;
11
+ declare function FieldGroup({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
12
+ declare const fieldVariants: (props?: ({
13
+ orientation?: "horizontal" | "vertical" | "responsive" | null | undefined;
14
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
15
+ declare function Field({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>): React$1.JSX.Element;
16
+ declare function FieldContent({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
17
+ declare function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>): React$1.JSX.Element;
18
+ declare function FieldTitle({ className, ...props }: React.ComponentProps<"div">): React$1.JSX.Element;
19
+ declare function FieldDescription({ className, ...props }: React.ComponentProps<"p">): React$1.JSX.Element;
20
+ declare function FieldSeparator({ children, className, ...props }: React.ComponentProps<"div"> & {
21
+ children?: React.ReactNode;
22
+ }): React$1.JSX.Element;
23
+ declare function FieldError({ className, children, errors, ...props }: React.ComponentProps<"div"> & {
24
+ errors?: Array<{
25
+ message?: string;
26
+ } | undefined>;
27
+ }): React$1.JSX.Element | null;
28
+
29
+ export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle };
@@ -0,0 +1,214 @@
1
+ "use client";
2
+ import {
3
+ Label
4
+ } from "../chunk-WIEKNG4S.js";
5
+ import {
6
+ Separator
7
+ } from "../chunk-6ANDNGHD.js";
8
+ import {
9
+ cn
10
+ } from "../chunk-DN2AEEA2.js";
11
+
12
+ // src/components/field.tsx
13
+ import { useMemo } from "react";
14
+ import { cva } from "class-variance-authority";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ function FieldSet({ className, ...props }) {
17
+ return /* @__PURE__ */ jsx(
18
+ "fieldset",
19
+ {
20
+ "data-slot": "field-set",
21
+ className: cn(
22
+ "flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
23
+ className
24
+ ),
25
+ ...props
26
+ }
27
+ );
28
+ }
29
+ function FieldLegend({
30
+ className,
31
+ variant = "legend",
32
+ ...props
33
+ }) {
34
+ return /* @__PURE__ */ jsx(
35
+ "legend",
36
+ {
37
+ "data-slot": "field-legend",
38
+ "data-variant": variant,
39
+ className: cn(
40
+ "mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base",
41
+ className
42
+ ),
43
+ ...props
44
+ }
45
+ );
46
+ }
47
+ function FieldGroup({ className, ...props }) {
48
+ return /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ "data-slot": "field-group",
52
+ className: cn(
53
+ "group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
54
+ className
55
+ ),
56
+ ...props
57
+ }
58
+ );
59
+ }
60
+ var fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:text-field-error", {
61
+ variants: {
62
+ orientation: {
63
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
64
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
65
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
66
+ }
67
+ },
68
+ defaultVariants: {
69
+ orientation: "vertical"
70
+ }
71
+ });
72
+ function Field({
73
+ className,
74
+ orientation = "vertical",
75
+ ...props
76
+ }) {
77
+ return /* @__PURE__ */ jsx(
78
+ "div",
79
+ {
80
+ role: "group",
81
+ "data-slot": "field",
82
+ "data-orientation": orientation,
83
+ className: cn(fieldVariants({ orientation }), className),
84
+ ...props
85
+ }
86
+ );
87
+ }
88
+ function FieldContent({ className, ...props }) {
89
+ return /* @__PURE__ */ jsx(
90
+ "div",
91
+ {
92
+ "data-slot": "field-content",
93
+ className: cn("group/field-content flex flex-1 flex-col gap-0.5 leading-snug", className),
94
+ ...props
95
+ }
96
+ );
97
+ }
98
+ function FieldLabel({ className, ...props }) {
99
+ return /* @__PURE__ */ jsx(
100
+ Label,
101
+ {
102
+ "data-slot": "field-label",
103
+ className: cn(
104
+ "group/field-label peer/field-label text-field-text has-data-checked:border-interactive-accent/30 has-data-checked:bg-interactive-accent/5 has-[>[data-slot=field]]:border-field-border dark:has-data-checked:border-interactive-accent/20 dark:has-data-checked:bg-interactive-accent/10 flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5",
105
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
106
+ className
107
+ ),
108
+ ...props
109
+ }
110
+ );
111
+ }
112
+ function FieldTitle({ className, ...props }) {
113
+ return /* @__PURE__ */ jsx(
114
+ "div",
115
+ {
116
+ "data-slot": "field-label",
117
+ className: cn(
118
+ "text-text-normal flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50",
119
+ className
120
+ ),
121
+ ...props
122
+ }
123
+ );
124
+ }
125
+ function FieldDescription({ className, ...props }) {
126
+ return /* @__PURE__ */ jsx(
127
+ "p",
128
+ {
129
+ "data-slot": "field-description",
130
+ className: cn(
131
+ "text-field-description text-left text-sm leading-normal font-normal group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5",
132
+ "last:mt-0 nth-last-2:-mt-1",
133
+ "[&>a:hover]:text-text-accent-hover [&>a]:underline [&>a]:underline-offset-4",
134
+ className
135
+ ),
136
+ ...props
137
+ }
138
+ );
139
+ }
140
+ function FieldSeparator({
141
+ children,
142
+ className,
143
+ ...props
144
+ }) {
145
+ return /* @__PURE__ */ jsxs(
146
+ "div",
147
+ {
148
+ "data-slot": "field-separator",
149
+ "data-content": !!children,
150
+ className: cn(
151
+ "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
152
+ className
153
+ ),
154
+ ...props,
155
+ children: [
156
+ /* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }),
157
+ children && /* @__PURE__ */ jsx(
158
+ "span",
159
+ {
160
+ className: "bg-background-primary text-field-description relative mx-auto block w-fit px-2",
161
+ "data-slot": "field-separator-content",
162
+ children
163
+ }
164
+ )
165
+ ]
166
+ }
167
+ );
168
+ }
169
+ function FieldError({
170
+ className,
171
+ children,
172
+ errors,
173
+ ...props
174
+ }) {
175
+ const content = useMemo(() => {
176
+ if (children) {
177
+ return children;
178
+ }
179
+ if (!errors?.length) {
180
+ return null;
181
+ }
182
+ const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
183
+ if (uniqueErrors?.length == 1) {
184
+ return uniqueErrors[0]?.message;
185
+ }
186
+ return /* @__PURE__ */ jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index)) });
187
+ }, [children, errors]);
188
+ if (!content) {
189
+ return null;
190
+ }
191
+ return /* @__PURE__ */ jsx(
192
+ "div",
193
+ {
194
+ role: "alert",
195
+ "data-slot": "field-error",
196
+ className: cn("text-field-error text-sm font-normal", className),
197
+ ...props,
198
+ children: content
199
+ }
200
+ );
201
+ }
202
+ export {
203
+ Field,
204
+ FieldContent,
205
+ FieldDescription,
206
+ FieldError,
207
+ FieldGroup,
208
+ FieldLabel,
209
+ FieldLegend,
210
+ FieldSeparator,
211
+ FieldSet,
212
+ FieldTitle
213
+ };
214
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/field.tsx"],"sourcesContent":["\"use client\"\n\nimport { useMemo } from \"react\"\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { Label } from \"@hyunsdev/ui/components/label\"\nimport { Separator } from \"@hyunsdev/ui/components/separator\"\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\"group/field flex w-full gap-2 data-[invalid=true]:text-field-error\", {\n variants: {\n orientation: {\n vertical: \"flex-col *:w-full [&>.sr-only]:w-auto\",\n horizontal:\n \"flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n responsive:\n \"flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n})\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\"group/field-content flex flex-1 flex-col gap-0.5 leading-snug\", className)}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label text-field-text has-data-checked:border-interactive-accent/30 has-data-checked:bg-interactive-accent/5 has-[>[data-slot=field]]:border-field-border dark:has-data-checked:border-interactive-accent/20 dark:has-data-checked:bg-interactive-accent/10 flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"text-text-normal flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-field-description text-left text-sm leading-normal font-normal group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5\",\n \"last:mt-0 nth-last-2:-mt-1\",\n \"[&>a:hover]:text-text-accent-hover [&>a]:underline [&>a]:underline-offset-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className,\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background-primary text-field-description relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map((error, index) => error?.message && <li key={index}>{error.message}</li>)}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-field-error text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n"],"mappings":"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","names":[]}