@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,104 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-DN2AEEA2.js";
4
+
5
+ // src/components/avatar.tsx
6
+ import "react";
7
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
8
+ import { jsx } from "react/jsx-runtime";
9
+ function Avatar({
10
+ className,
11
+ size = "default",
12
+ ...props
13
+ }) {
14
+ return /* @__PURE__ */ jsx(
15
+ AvatarPrimitive.Root,
16
+ {
17
+ "data-slot": "avatar",
18
+ "data-size": size,
19
+ className: cn(
20
+ "group/avatar after:border-border relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",
21
+ className
22
+ ),
23
+ ...props
24
+ }
25
+ );
26
+ }
27
+ function AvatarImage({ className, ...props }) {
28
+ return /* @__PURE__ */ jsx(
29
+ AvatarPrimitive.Image,
30
+ {
31
+ "data-slot": "avatar-image",
32
+ className: cn("aspect-square size-full rounded-full object-cover", className),
33
+ ...props
34
+ }
35
+ );
36
+ }
37
+ function AvatarFallback({
38
+ className,
39
+ ...props
40
+ }) {
41
+ return /* @__PURE__ */ jsx(
42
+ AvatarPrimitive.Fallback,
43
+ {
44
+ "data-slot": "avatar-fallback",
45
+ className: cn(
46
+ "bg-background-secondary text-text-muted flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs",
47
+ className
48
+ ),
49
+ ...props
50
+ }
51
+ );
52
+ }
53
+ function AvatarBadge({ className, ...props }) {
54
+ return /* @__PURE__ */ jsx(
55
+ "span",
56
+ {
57
+ "data-slot": "avatar-badge",
58
+ className: cn(
59
+ "bg-interactive-accent text-text-on-accent ring-background-primary absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none",
60
+ "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
61
+ "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
62
+ "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
63
+ className
64
+ ),
65
+ ...props
66
+ }
67
+ );
68
+ }
69
+ function AvatarGroup({ className, ...props }) {
70
+ return /* @__PURE__ */ jsx(
71
+ "div",
72
+ {
73
+ "data-slot": "avatar-group",
74
+ className: cn(
75
+ "group/avatar-group *:data-[slot=avatar]:ring-background-primary flex -space-x-2 *:data-[slot=avatar]:ring-2",
76
+ className
77
+ ),
78
+ ...props
79
+ }
80
+ );
81
+ }
82
+ function AvatarGroupCount({ className, ...props }) {
83
+ return /* @__PURE__ */ jsx(
84
+ "div",
85
+ {
86
+ "data-slot": "avatar-group-count",
87
+ className: cn(
88
+ "bg-background-secondary text-text-muted ring-background-primary relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 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",
89
+ className
90
+ ),
91
+ ...props
92
+ }
93
+ );
94
+ }
95
+
96
+ export {
97
+ Avatar,
98
+ AvatarImage,
99
+ AvatarFallback,
100
+ AvatarBadge,
101
+ AvatarGroup,
102
+ AvatarGroupCount
103
+ };
104
+ //# sourceMappingURL=chunk-POG5DZBT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/avatar.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\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 after:border-border relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after: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 }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full rounded-full object-cover\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-background-secondary text-text-muted flex size-full items-center justify-center rounded-full text-sm 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 \"bg-interactive-accent text-text-on-accent ring-background-primary absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 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 *:data-[slot=avatar]:ring-background-primary flex -space-x-2 *:data-[slot=avatar]:ring-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"bg-background-secondary text-text-muted ring-background-primary relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 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 { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge }\n"],"mappings":";;;;;AAEA,OAAuB;AAEvB,YAAY,qBAAqB;AAY7B;AARJ,SAAS,OAAO;AAAA,EACd;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAEG;AACD,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAuD;AAChG,SACE;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qDAAqD,SAAS;AAAA,MAC3E,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,GAAG;AACL,GAA0D;AACxD,SACE;AAAA,IAAiB;AAAA,IAAhB;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,GAAiC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;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;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC9E,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,170 @@
1
+ import {
2
+ Button,
3
+ buttonVariants
4
+ } from "./chunk-TU5CYBB4.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-DN2AEEA2.js";
8
+
9
+ // src/components/calendar.tsx
10
+ import * as React from "react";
11
+ import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
12
+ import { DayPicker, getDefaultClassNames } from "react-day-picker";
13
+ import { jsx } from "react/jsx-runtime";
14
+ function Calendar({
15
+ className,
16
+ classNames,
17
+ showOutsideDays = true,
18
+ captionLayout = "label",
19
+ buttonVariant = "ghost",
20
+ locale,
21
+ formatters,
22
+ components,
23
+ ...props
24
+ }) {
25
+ const defaultClassNames = getDefaultClassNames();
26
+ return /* @__PURE__ */ jsx(
27
+ DayPicker,
28
+ {
29
+ showOutsideDays,
30
+ className: cn(
31
+ "group/calendar bg-background-primary p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
32
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
33
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
34
+ className
35
+ ),
36
+ captionLayout,
37
+ locale,
38
+ formatters: {
39
+ formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
40
+ ...formatters
41
+ },
42
+ classNames: {
43
+ root: cn("w-fit", defaultClassNames.root),
44
+ months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
45
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
46
+ nav: cn(
47
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
48
+ defaultClassNames.nav
49
+ ),
50
+ button_previous: cn(
51
+ buttonVariants({ variant: buttonVariant }),
52
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
53
+ defaultClassNames.button_previous
54
+ ),
55
+ button_next: cn(
56
+ buttonVariants({ variant: buttonVariant }),
57
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
58
+ defaultClassNames.button_next
59
+ ),
60
+ month_caption: cn(
61
+ "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",
62
+ defaultClassNames.month_caption
63
+ ),
64
+ dropdowns: cn(
65
+ "flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",
66
+ defaultClassNames.dropdowns
67
+ ),
68
+ dropdown_root: cn(
69
+ "cn-calendar-dropdown-root relative rounded-(--cell-radius)",
70
+ defaultClassNames.dropdown_root
71
+ ),
72
+ dropdown: cn("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
73
+ caption_label: cn(
74
+ "font-medium select-none",
75
+ captionLayout === "label" ? "cn-calendar-caption text-sm" : "cn-calendar-caption-label flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-text-muted",
76
+ defaultClassNames.caption_label
77
+ ),
78
+ table: "w-full border-collapse",
79
+ weekdays: cn("flex", defaultClassNames.weekdays),
80
+ weekday: cn(
81
+ "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-text-muted select-none",
82
+ defaultClassNames.weekday
83
+ ),
84
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
85
+ week_number_header: cn("w-(--cell-size) select-none", defaultClassNames.week_number_header),
86
+ week_number: cn("text-[0.8rem] text-text-muted select-none", defaultClassNames.week_number),
87
+ day: cn(
88
+ "group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
89
+ props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
90
+ defaultClassNames.day
91
+ ),
92
+ range_start: cn(
93
+ "relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",
94
+ defaultClassNames.range_start
95
+ ),
96
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
97
+ range_end: cn(
98
+ "relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",
99
+ defaultClassNames.range_end
100
+ ),
101
+ today: cn(
102
+ "rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",
103
+ defaultClassNames.today
104
+ ),
105
+ outside: cn("text-text-muted aria-selected:text-text-muted", defaultClassNames.outside),
106
+ disabled: cn("text-text-muted opacity-50", defaultClassNames.disabled),
107
+ hidden: cn("invisible", defaultClassNames.hidden),
108
+ ...classNames
109
+ },
110
+ components: {
111
+ Root: ({ className: className2, rootRef, ...props2 }) => {
112
+ return /* @__PURE__ */ jsx("div", { "data-slot": "calendar", ref: rootRef, className: cn(className2), ...props2 });
113
+ },
114
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
115
+ if (orientation === "left") {
116
+ return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("cn-rtl-flip size-4", className2), ...props2 });
117
+ }
118
+ if (orientation === "right") {
119
+ return /* @__PURE__ */ jsx(ChevronRightIcon, { className: cn("cn-rtl-flip size-4", className2), ...props2 });
120
+ }
121
+ return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
122
+ },
123
+ DayButton: ({ ...props2 }) => /* @__PURE__ */ jsx(CalendarDayButton, { ...locale !== void 0 ? { locale } : {}, ...props2 }),
124
+ WeekNumber: ({ children, ...props2 }) => {
125
+ return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
126
+ },
127
+ ...components
128
+ },
129
+ ...props
130
+ }
131
+ );
132
+ }
133
+ function CalendarDayButton({
134
+ className,
135
+ day,
136
+ modifiers,
137
+ locale,
138
+ ...props
139
+ }) {
140
+ const defaultClassNames = getDefaultClassNames();
141
+ const ref = React.useRef(null);
142
+ React.useEffect(() => {
143
+ if (modifiers["focused"]) ref.current?.focus();
144
+ }, [modifiers]);
145
+ return /* @__PURE__ */ jsx(
146
+ Button,
147
+ {
148
+ ref,
149
+ variant: "ghost",
150
+ size: "icon",
151
+ "data-day": day.date.toLocaleDateString(locale?.code),
152
+ "data-selected-single": modifiers["selected"] && !modifiers["range_start"] && !modifiers["range_end"] && !modifiers["range_middle"],
153
+ "data-range-start": modifiers["range_start"],
154
+ "data-range-end": modifiers["range_end"],
155
+ "data-range-middle": modifiers["range_middle"],
156
+ className: cn(
157
+ "group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:bg-primary data-[range-end=true]:text-text-accent data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-text-accent data-[selected-single=true]:bg-primary data-[selected-single=true]:text-text-accent dark:hover:text-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) [&>span]:text-xs [&>span]:opacity-70",
158
+ defaultClassNames.day,
159
+ className
160
+ ),
161
+ ...props
162
+ }
163
+ );
164
+ }
165
+
166
+ export {
167
+ Calendar,
168
+ CalendarDayButton
169
+ };
170
+ //# sourceMappingURL=chunk-SECZM6JE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/calendar.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\nimport { DayPicker, getDefaultClassNames, type DayButton, type Locale } from \"react-day-picker\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { Button, buttonVariants } from \"./button\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n locale,\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"group/calendar bg-background-primary p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\"relative flex flex-col gap-4 md:flex-row\", defaultClassNames.months),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n \"flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)\",\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n \"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium\",\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n \"cn-calendar-dropdown-root relative rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn(\"absolute inset-0 bg-popover opacity-0\", defaultClassNames.dropdown),\n caption_label: cn(\n \"font-medium select-none\",\n captionLayout === \"label\"\n ? \"cn-calendar-caption text-sm\"\n : \"cn-calendar-caption-label flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-text-muted\",\n defaultClassNames.caption_label,\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-text-muted select-none\",\n defaultClassNames.weekday,\n ),\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\n week_number_header: cn(\"w-(--cell-size) select-none\", defaultClassNames.week_number_header),\n week_number: cn(\"text-[0.8rem] text-text-muted select-none\", defaultClassNames.week_number),\n day: cn(\n \"group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day,\n ),\n range_start: cn(\n \"relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted\",\n defaultClassNames.range_start,\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted\",\n defaultClassNames.range_end,\n ),\n today: cn(\n \"rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none\",\n defaultClassNames.today,\n ),\n outside: cn(\"text-text-muted aria-selected:text-text-muted\", defaultClassNames.outside),\n disabled: cn(\"text-text-muted opacity-50\", defaultClassNames.disabled),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return <ChevronLeftIcon className={cn(\"cn-rtl-flip size-4\", className)} {...props} />\n }\n\n if (orientation === \"right\") {\n return <ChevronRightIcon className={cn(\"cn-rtl-flip size-4\", className)} {...props} />\n }\n\n return <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n },\n DayButton: ({ ...props }) => (\n <CalendarDayButton {...(locale !== undefined ? { locale } : {})} {...props} />\n ),\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: React.ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers[\"focused\"]) ref.current?.focus()\n }, [modifiers])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={\n modifiers[\"selected\"] &&\n !modifiers[\"range_start\"] &&\n !modifiers[\"range_end\"] &&\n !modifiers[\"range_middle\"]\n }\n data-range-start={modifiers[\"range_start\"]}\n data-range-end={modifiers[\"range_end\"]}\n data-range-middle={modifiers[\"range_middle\"]}\n className={cn(\n \"group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:bg-primary data-[range-end=true]:text-text-accent data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-text-accent data-[selected-single=true]:bg-primary data-[selected-single=true]:text-text-accent dark:hover:text-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n"],"mappings":"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","names":["className","props"]}
@@ -0,0 +1,48 @@
1
+ import {
2
+ CodeBlockCore
3
+ } from "./chunk-5JCWC7IU.js";
4
+
5
+ // src/lib/code-block-shiki.tsx
6
+ import * as React from "react";
7
+ import { jsx } from "react/jsx-runtime";
8
+ var shikiBundleHighlighterPromises = /* @__PURE__ */ new WeakMap();
9
+ function loadShikiBundleHighlighter(shiki) {
10
+ const cachedHighlighter = shikiBundleHighlighterPromises.get(shiki);
11
+ if (cachedHighlighter) {
12
+ return cachedHighlighter;
13
+ }
14
+ const highlighterPromise = Promise.all([
15
+ import("shiki/core"),
16
+ shiki.engine?.() ?? import("shiki/engine/javascript").then((mod) => mod.createJavaScriptRegexEngine())
17
+ ]).then(([{ createBundledHighlighter, createSingletonShorthands }, engine]) => {
18
+ const createHighlighter = createBundledHighlighter({
19
+ engine: () => engine,
20
+ langs: shiki.languages,
21
+ themes: shiki.themes
22
+ });
23
+ return createSingletonShorthands(createHighlighter);
24
+ });
25
+ shikiBundleHighlighterPromises.set(shiki, highlighterPromise);
26
+ return highlighterPromise;
27
+ }
28
+ function createCodeBlockShikiHighlighter(shiki) {
29
+ return () => loadShikiBundleHighlighter(shiki);
30
+ }
31
+ function CodeBlockCustom({ fallbackLanguage, shiki, ...props }) {
32
+ const highlighter = React.useMemo(() => createCodeBlockShikiHighlighter(shiki), [shiki]);
33
+ return /* @__PURE__ */ jsx(
34
+ CodeBlockCore,
35
+ {
36
+ ...(fallbackLanguage ?? shiki.fallbackLanguage) !== void 0 ? { fallbackLanguage: fallbackLanguage ?? shiki.fallbackLanguage } : {},
37
+ highlighter,
38
+ themeNames: shiki.themeNames,
39
+ ...props
40
+ }
41
+ );
42
+ }
43
+
44
+ export {
45
+ createCodeBlockShikiHighlighter,
46
+ CodeBlockCustom
47
+ };
48
+ //# sourceMappingURL=chunk-T64WPXSC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/code-block-shiki.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { CodeBlockCore } from \"./code-block-core\"\n\nimport type {\n CodeBlockCommonProps,\n CodeBlockHighlighter,\n CodeBlockThemeMap,\n} from \"./code-block-core\"\nimport type { Awaitable, LanguageInput, RegexEngine, ThemeInput } from \"shiki\"\n\ntype CodeBlockShikiBundle<\n LanguageName extends string = string,\n ThemeName extends string = string,\n> = {\n engine?: () => Awaitable<RegexEngine>\n fallbackLanguage?: LanguageName | string\n languages: Record<LanguageName, LanguageInput>\n themeNames: CodeBlockThemeMap<ThemeName>\n themes: Record<ThemeName, ThemeInput>\n}\n\ntype CodeBlockCustomProps = CodeBlockCommonProps & {\n fallbackLanguage?: string | undefined\n shiki: CodeBlockShikiBundle\n}\n\nconst shikiBundleHighlighterPromises = new WeakMap<\n CodeBlockShikiBundle,\n Promise<CodeBlockHighlighter>\n>()\n\nfunction loadShikiBundleHighlighter(shiki: CodeBlockShikiBundle) {\n const cachedHighlighter = shikiBundleHighlighterPromises.get(shiki)\n\n if (cachedHighlighter) {\n return cachedHighlighter\n }\n\n const highlighterPromise = Promise.all([\n import(\"shiki/core\"),\n shiki.engine?.() ??\n import(\"shiki/engine/javascript\").then((mod) => mod.createJavaScriptRegexEngine()),\n ]).then(([{ createBundledHighlighter, createSingletonShorthands }, engine]) => {\n const createHighlighter = createBundledHighlighter({\n engine: () => engine,\n langs: shiki.languages,\n themes: shiki.themes,\n })\n\n return createSingletonShorthands(createHighlighter)\n })\n\n shikiBundleHighlighterPromises.set(shiki, highlighterPromise)\n\n return highlighterPromise\n}\n\nfunction createCodeBlockShikiHighlighter(shiki: CodeBlockShikiBundle) {\n return () => loadShikiBundleHighlighter(shiki)\n}\n\nfunction CodeBlockCustom({ fallbackLanguage, shiki, ...props }: CodeBlockCustomProps) {\n const highlighter = React.useMemo(() => createCodeBlockShikiHighlighter(shiki), [shiki])\n\n return (\n <CodeBlockCore\n {...((fallbackLanguage ?? shiki.fallbackLanguage) !== undefined\n ? { fallbackLanguage: fallbackLanguage ?? shiki.fallbackLanguage }\n : {})}\n highlighter={highlighter}\n themeNames={shiki.themeNames}\n {...props}\n />\n )\n}\n\nexport { CodeBlockCustom, createCodeBlockShikiHighlighter }\nexport type { CodeBlockCustomProps, CodeBlockHighlighter, CodeBlockShikiBundle }\n"],"mappings":";;;;;AAEA,YAAY,WAAW;AAkEnB;AAvCJ,IAAM,iCAAiC,oBAAI,QAGzC;AAEF,SAAS,2BAA2B,OAA6B;AAC/D,QAAM,oBAAoB,+BAA+B,IAAI,KAAK;AAElE,MAAI,mBAAmB;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,qBAAqB,QAAQ,IAAI;AAAA,IACrC,OAAO,YAAY;AAAA,IACnB,MAAM,SAAS,KACb,OAAO,yBAAyB,EAAE,KAAK,CAAC,QAAQ,IAAI,4BAA4B,CAAC;AAAA,EACrF,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,0BAA0B,0BAA0B,GAAG,MAAM,MAAM;AAC7E,UAAM,oBAAoB,yBAAyB;AAAA,MACjD,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAED,WAAO,0BAA0B,iBAAiB;AAAA,EACpD,CAAC;AAED,iCAA+B,IAAI,OAAO,kBAAkB;AAE5D,SAAO;AACT;AAEA,SAAS,gCAAgC,OAA6B;AACpE,SAAO,MAAM,2BAA2B,KAAK;AAC/C;AAEA,SAAS,gBAAgB,EAAE,kBAAkB,OAAO,GAAG,MAAM,GAAyB;AACpF,QAAM,cAAoB,cAAQ,MAAM,gCAAgC,KAAK,GAAG,CAAC,KAAK,CAAC;AAEvF,SACE;AAAA,IAAC;AAAA;AAAA,MACE,IAAK,oBAAoB,MAAM,sBAAsB,SAClD,EAAE,kBAAkB,oBAAoB,MAAM,iBAAiB,IAC/D,CAAC;AAAA,MACL;AAAA,MACA,YAAY,MAAM;AAAA,MACjB,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -0,0 +1,90 @@
1
+ import {
2
+ fieldInvalidClass
3
+ } from "./chunk-O2BG2KSY.js";
4
+ import {
5
+ cn
6
+ } from "./chunk-DN2AEEA2.js";
7
+
8
+ // src/components/button.tsx
9
+ import "react";
10
+ import * as Slot from "@radix-ui/react-slot";
11
+ import { cva } from "class-variance-authority";
12
+ import { jsx } from "react/jsx-runtime";
13
+ var buttonVariants = cva(
14
+ "group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap outline-none select-none focus-visible:border-focus-ring focus-visible:ring-3 focus-visible:ring-focus-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
15
+ {
16
+ variants: {
17
+ variant: {
18
+ accent: "bg-interactive-accent text-text-on-accent hover:bg-interactive-accent-hover active:bg-interactive-accent-active-hover aria-expanded:bg-interactive-accent-active-hover disabled:bg-interactive-accent-disabled",
19
+ normal: "border-border bg-interactive-normal text-text-normal hover:bg-interactive-hover active:bg-interactive-active-hover aria-expanded:bg-interactive-active-hover disabled:bg-interactive-disabled",
20
+ outline: "border-border bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover aria-expanded:bg-background-modifier-hover",
21
+ ghost: "bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover aria-expanded:bg-background-modifier-hover",
22
+ destructive: "bg-background-error text-text-error hover:bg-background-error-hover active:bg-background-error-hover",
23
+ link: "bg-transparent text-text-accent underline-offset-4 hover:text-text-accent-hover hover:underline"
24
+ },
25
+ size: {
26
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
27
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
28
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
29
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
30
+ icon: "size-8",
31
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
32
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
33
+ "icon-lg": "size-9"
34
+ },
35
+ applied: {
36
+ true: "",
37
+ false: ""
38
+ }
39
+ },
40
+ compoundVariants: [
41
+ {
42
+ applied: true,
43
+ variant: "normal",
44
+ className: "text-text-accent"
45
+ },
46
+ {
47
+ applied: true,
48
+ variant: "outline",
49
+ className: "text-text-accent"
50
+ },
51
+ {
52
+ applied: true,
53
+ variant: "ghost",
54
+ className: "text-text-accent"
55
+ }
56
+ ],
57
+ defaultVariants: {
58
+ variant: "normal",
59
+ size: "default",
60
+ applied: false
61
+ }
62
+ }
63
+ );
64
+ function Button({
65
+ className,
66
+ variant = "normal",
67
+ size = "default",
68
+ applied = false,
69
+ asChild = false,
70
+ ...props
71
+ }) {
72
+ const Comp = asChild ? Slot.Root : "button";
73
+ return /* @__PURE__ */ jsx(
74
+ Comp,
75
+ {
76
+ "data-slot": "button",
77
+ "data-variant": variant,
78
+ "data-size": size,
79
+ "data-applied": applied || void 0,
80
+ className: cn(buttonVariants({ variant, size, applied }), fieldInvalidClass, className),
81
+ ...props
82
+ }
83
+ );
84
+ }
85
+
86
+ export {
87
+ buttonVariants,
88
+ Button
89
+ };
90
+ //# sourceMappingURL=chunk-TU5CYBB4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/button.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport * as Slot from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { fieldInvalidClass } from \"./_styles\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap outline-none select-none focus-visible:border-focus-ring focus-visible:ring-3 focus-visible:ring-focus-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n accent:\n \"bg-interactive-accent text-text-on-accent hover:bg-interactive-accent-hover active:bg-interactive-accent-active-hover aria-expanded:bg-interactive-accent-active-hover disabled:bg-interactive-accent-disabled\",\n normal:\n \"border-border bg-interactive-normal text-text-normal hover:bg-interactive-hover active:bg-interactive-active-hover aria-expanded:bg-interactive-active-hover disabled:bg-interactive-disabled\",\n outline:\n \"border-border bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover aria-expanded:bg-background-modifier-hover\",\n ghost:\n \"bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover aria-expanded:bg-background-modifier-hover\",\n destructive:\n \"bg-background-error text-text-error hover:bg-background-error-hover active:bg-background-error-hover\",\n link: \"bg-transparent text-text-accent underline-offset-4 hover:text-text-accent-hover hover:underline\",\n },\n size: {\n default:\n \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n icon: \"size-8\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\",\n },\n applied: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n applied: true,\n variant: \"normal\",\n className: \"text-text-accent\",\n },\n {\n applied: true,\n variant: \"outline\",\n className: \"text-text-accent\",\n },\n {\n applied: true,\n variant: \"ghost\",\n className: \"text-text-accent\",\n },\n ],\n defaultVariants: {\n variant: \"normal\",\n size: \"default\",\n applied: false,\n },\n },\n)\n\nfunction Button({\n className,\n variant = \"normal\",\n size = \"default\",\n applied = false,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n data-applied={applied || undefined}\n className={cn(buttonVariants({ variant, size, applied }), fieldInvalidClass, className)}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n"],"mappings":";;;;;;;;AAAA,OAAuB;AAEvB,YAAY,UAAU;AACtB,SAAS,WAA8B;AAgFnC;AA1EJ,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,QACE;AAAA,QACF,QACE;AAAA,QACF,SACE;AAAA,QACF,OACE;AAAA,QACF,aACE;AAAA,QACF,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,SACE;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,WACE;AAAA,QACF,WACE;AAAA,QACF,WAAW;AAAA,MACb;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,MAChB;AAAA,QACE,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,OAAO;AAAA,EACd;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,GAAG;AACL,GAGK;AACH,QAAM,OAAO,UAAe,YAAO;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,gBAAc,WAAW;AAAA,MACzB,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,QAAQ,CAAC,GAAG,mBAAmB,SAAS;AAAA,MACrF,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -0,0 +1,153 @@
1
+ import {
2
+ Textarea
3
+ } from "./chunk-NE3IVPMO.js";
4
+ import {
5
+ Input
6
+ } from "./chunk-YUPLJP3F.js";
7
+ import {
8
+ Button
9
+ } from "./chunk-TU5CYBB4.js";
10
+ import {
11
+ fieldGroupInvalidClass
12
+ } from "./chunk-O2BG2KSY.js";
13
+ import {
14
+ cn
15
+ } from "./chunk-DN2AEEA2.js";
16
+
17
+ // src/components/input-group.tsx
18
+ import "react";
19
+ import { cva } from "class-variance-authority";
20
+ import { jsx } from "react/jsx-runtime";
21
+ function InputGroup({ className, size = "default", ...props }) {
22
+ return /* @__PURE__ */ jsx(
23
+ "div",
24
+ {
25
+ "data-slot": "input-group",
26
+ "data-size": size,
27
+ role: "group",
28
+ className: cn(
29
+ "group/input-group border-field-border bg-field-background has-disabled:bg-field-background-disabled has-[[data-slot=input-group-control]:focus-visible]:border-field-border-focus has-[[data-slot=input-group-control]:focus-visible]:ring-focus-ring relative flex h-8 w-full min-w-0 items-center rounded-lg border transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),12px)] has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 data-[size=sm]:[&>input]:h-7",
30
+ fieldGroupInvalidClass,
31
+ className
32
+ ),
33
+ ...props
34
+ }
35
+ );
36
+ }
37
+ var inputGroupAddonVariants = cva(
38
+ "flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-field-label select-none group-data-[disabled=true]/input-group:opacity-50 group-data-[size=sm]/input-group:py-1 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
39
+ {
40
+ variants: {
41
+ align: {
42
+ "inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
43
+ "inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
44
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
45
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
46
+ }
47
+ },
48
+ defaultVariants: {
49
+ align: "inline-start"
50
+ }
51
+ }
52
+ );
53
+ function InputGroupAddon({
54
+ className,
55
+ align = "inline-start",
56
+ ...props
57
+ }) {
58
+ return /* @__PURE__ */ jsx(
59
+ "div",
60
+ {
61
+ role: "group",
62
+ "data-slot": "input-group-addon",
63
+ "data-align": align,
64
+ className: cn(inputGroupAddonVariants({ align }), className),
65
+ onClick: (e) => {
66
+ if (e.target instanceof HTMLElement && e.target.closest("button")) {
67
+ return;
68
+ }
69
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
70
+ },
71
+ ...props
72
+ }
73
+ );
74
+ }
75
+ var inputGroupButtonVariants = cva("flex items-center gap-2 text-sm shadow-none", {
76
+ variants: {
77
+ size: {
78
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
79
+ sm: "",
80
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
81
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
82
+ }
83
+ },
84
+ defaultVariants: {
85
+ size: "xs"
86
+ }
87
+ });
88
+ function InputGroupButton({
89
+ className,
90
+ type = "button",
91
+ variant = "ghost",
92
+ size = "xs",
93
+ ...props
94
+ }) {
95
+ return /* @__PURE__ */ jsx(
96
+ Button,
97
+ {
98
+ type,
99
+ "data-size": size,
100
+ variant,
101
+ className: cn(inputGroupButtonVariants({ size }), className),
102
+ ...props
103
+ }
104
+ );
105
+ }
106
+ function InputGroupText({ className, ...props }) {
107
+ return /* @__PURE__ */ jsx(
108
+ "span",
109
+ {
110
+ className: cn(
111
+ "text-field-label flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
112
+ className
113
+ ),
114
+ ...props
115
+ }
116
+ );
117
+ }
118
+ function InputGroupInput({ className, ...props }) {
119
+ return /* @__PURE__ */ jsx(
120
+ Input,
121
+ {
122
+ "data-slot": "input-group-control",
123
+ className: cn(
124
+ "text-field-text flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0",
125
+ className
126
+ ),
127
+ ...props
128
+ }
129
+ );
130
+ }
131
+ function InputGroupTextarea({ className, ...props }) {
132
+ return /* @__PURE__ */ jsx(
133
+ Textarea,
134
+ {
135
+ "data-slot": "input-group-control",
136
+ className: cn(
137
+ "text-field-text flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0",
138
+ className
139
+ ),
140
+ ...props
141
+ }
142
+ );
143
+ }
144
+
145
+ export {
146
+ InputGroup,
147
+ InputGroupAddon,
148
+ InputGroupButton,
149
+ InputGroupText,
150
+ InputGroupInput,
151
+ InputGroupTextarea
152
+ };
153
+ //# sourceMappingURL=chunk-UVAI2U6X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/input-group.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { Button } from \"@hyunsdev/ui/components/button\"\nimport { Input } from \"@hyunsdev/ui/components/input\"\nimport { Textarea } from \"@hyunsdev/ui/components/textarea\"\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { type FieldControlSize, fieldGroupInvalidClass } from \"./_styles\"\n\ntype InputGroupProps = React.ComponentProps<\"div\"> & {\n size?: FieldControlSize\n}\n\nfunction InputGroup({ className, size = \"default\", ...props }: InputGroupProps) {\n return (\n <div\n data-slot=\"input-group\"\n data-size={size}\n role=\"group\"\n className={cn(\n \"group/input-group border-field-border bg-field-background has-disabled:bg-field-background-disabled has-[[data-slot=input-group-control]:focus-visible]:border-field-border-focus has-[[data-slot=input-group-control]:focus-visible]:ring-focus-ring relative flex h-8 w-full min-w-0 items-center rounded-lg border transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),12px)] has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 data-[size=sm]:[&>input]:h-7\",\n fieldGroupInvalidClass,\n className,\n )}\n {...props}\n />\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-field-label select-none group-data-[disabled=true]/input-group:opacity-50 group-data-[size=sm]/input-group:py-1 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\": \"order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]\",\n \"inline-end\": \"order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2\",\n \"block-end\":\n \"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n },\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if (e.target instanceof HTMLElement && e.target.closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\"flex items-center gap-2 text-sm shadow-none\", {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"\",\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n})\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-field-label flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"text-field-text flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"text-field-text flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,OAAuB;AAEvB,SAAS,WAA8B;AAenC;AAFJ,SAAS,WAAW,EAAE,WAAW,OAAO,WAAW,GAAG,MAAM,GAAoB;AAC9E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,IAAM,0BAA0B;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,eACE;AAAA,QACF,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,EACR,GAAG;AACL,GAA+E;AAC7E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW,GAAG,wBAAwB,EAAE,MAAM,CAAC,GAAG,SAAS;AAAA,MAC3D,SAAS,CAAC,MAAM;AACd,YAAI,EAAE,kBAAkB,eAAe,EAAE,OAAO,QAAQ,QAAQ,GAAG;AACjE;AAAA,QACF;AACA,UAAE,cAAc,eAAe,cAAc,OAAO,GAAG,MAAM;AAAA,MAC/D;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,IAAM,2BAA2B,IAAI,+CAA+C;AAAA,EAClF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAED,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AAAA,EACP,GAAG;AACL,GACiD;AAC/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAW;AAAA,MACX;AAAA,MACA,WAAW,GAAG,yBAAyB,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,MAC1D,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,EAAE,WAAW,GAAG,MAAM,GAAiC;AAC7E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,EAAE,WAAW,GAAG,MAAM,GAAuC;AACpF,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,mBAAmB,EAAE,WAAW,GAAG,MAAM,GAAqC;AACrF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}