@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,30 @@
1
+ import * as React from 'react';
2
+ import { ShikiTransformer, CodeToHastOptions } from 'shiki';
3
+
4
+ type CodeBlockThemeMap<ThemeName extends string = string> = {
5
+ dark: ThemeName;
6
+ light: ThemeName;
7
+ };
8
+ type CodeBlockHighlighter = {
9
+ codeToHtml: (code: string, options: CodeToHastOptions<string, string>) => Promise<string>;
10
+ };
11
+ type CodeBlockLineNumbers = readonly number[];
12
+ type CodeBlockCommonProps = Omit<React.ComponentProps<"div">, "children"> & {
13
+ code: string;
14
+ focusLines?: CodeBlockLineNumbers;
15
+ highlightLines?: CodeBlockLineNumbers;
16
+ lang: string;
17
+ title?: React.ReactNode;
18
+ showCopyButton?: boolean;
19
+ showLineNumbers?: boolean;
20
+ wrapLongLines?: boolean;
21
+ transformers?: readonly ShikiTransformer[];
22
+ };
23
+ type CodeBlockCoreProps = CodeBlockCommonProps & {
24
+ fallbackLanguage?: string | undefined;
25
+ highlighter: () => Promise<CodeBlockHighlighter>;
26
+ themeNames: CodeBlockThemeMap;
27
+ };
28
+ declare function CodeBlockCore({ className, code, fallbackLanguage, focusLines: focusLinesProp, highlightLines: highlightLinesProp, highlighter, lang, themeNames, title, showCopyButton, showLineNumbers, wrapLongLines, transformers: transformersProp, ...props }: CodeBlockCoreProps): React.JSX.Element;
29
+
30
+ export { type CodeBlockCommonProps as C, type CodeBlockThemeMap as a, type CodeBlockHighlighter as b, type CodeBlockLineNumbers as c, CodeBlockCore as d, type CodeBlockCoreProps as e };
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
3
+
4
+ declare function Accordion({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>): React.JSX.Element;
5
+ declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): React.JSX.Element;
6
+ declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>): React.JSX.Element;
7
+ declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): React.JSX.Element;
8
+
9
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -0,0 +1,98 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "../chunk-DN2AEEA2.js";
5
+
6
+ // src/components/accordion.tsx
7
+ import "react";
8
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
9
+ import { ChevronDownIcon, ChevronUpIcon } from "lucide-react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ function Accordion({ className, ...props }) {
12
+ return /* @__PURE__ */ jsx(
13
+ AccordionPrimitive.Root,
14
+ {
15
+ "data-slot": "accordion",
16
+ className: cn("flex w-full flex-col", className),
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ function AccordionItem({
22
+ className,
23
+ ...props
24
+ }) {
25
+ return /* @__PURE__ */ jsx(
26
+ AccordionPrimitive.Item,
27
+ {
28
+ "data-slot": "accordion-item",
29
+ className: cn("not-last:border-b", className),
30
+ ...props
31
+ }
32
+ );
33
+ }
34
+ function AccordionTrigger({
35
+ className,
36
+ children,
37
+ ...props
38
+ }) {
39
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
40
+ AccordionPrimitive.Trigger,
41
+ {
42
+ "data-slot": "accordion-trigger",
43
+ className: cn(
44
+ "group/accordion-trigger focus-visible:border-focus-ring focus-visible:ring-focus-ring focus-visible:after:border-focus-ring **:data-[slot=accordion-trigger-icon]:text-text-muted relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4",
45
+ className
46
+ ),
47
+ ...props,
48
+ children: [
49
+ children,
50
+ /* @__PURE__ */ jsx(
51
+ ChevronDownIcon,
52
+ {
53
+ "data-slot": "accordion-trigger-icon",
54
+ className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsx(
58
+ ChevronUpIcon,
59
+ {
60
+ "data-slot": "accordion-trigger-icon",
61
+ className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
62
+ }
63
+ )
64
+ ]
65
+ }
66
+ ) });
67
+ }
68
+ function AccordionContent({
69
+ className,
70
+ children,
71
+ ...props
72
+ }) {
73
+ return /* @__PURE__ */ jsx(
74
+ AccordionPrimitive.Content,
75
+ {
76
+ "data-slot": "accordion-content",
77
+ className: "data-open:animate-accordion-down data-closed:animate-accordion-up overflow-hidden text-sm",
78
+ ...props,
79
+ children: /* @__PURE__ */ jsx(
80
+ "div",
81
+ {
82
+ className: cn(
83
+ "[&_a]:hover:text-text-normal h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",
84
+ className
85
+ ),
86
+ children
87
+ }
88
+ )
89
+ }
90
+ );
91
+ }
92
+ export {
93
+ Accordion,
94
+ AccordionContent,
95
+ AccordionItem,
96
+ AccordionTrigger
97
+ };
98
+ //# sourceMappingURL=accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/accordion.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nfunction Accordion({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"not-last:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"group/accordion-trigger focus-visible:border-focus-ring focus-visible:ring-focus-ring focus-visible:after:border-focus-ring **:data-[slot=accordion-trigger-icon]:text-text-muted relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\"\n />\n <ChevronUpIcon\n data-slot=\"accordion-trigger-icon\"\n className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-open:animate-accordion-down data-closed:animate-accordion-up overflow-hidden text-sm\"\n {...props}\n >\n <div\n className={cn(\n \"[&_a]:hover:text-text-normal h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4\",\n className,\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n"],"mappings":";;;;;;AAEA,OAAuB;AAEvB,YAAY,wBAAwB;AACpC,SAAS,iBAAiB,qBAAqB;AAM3C,cA4BE,YA5BF;AAFJ,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAyD;AAChG,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,wBAAwB,SAAS;AAAA,MAC9C,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,GAAG;AACL,GAAyD;AACvD,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qBAAqB,SAAS;AAAA,MAC3C,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE,oBAAoB,2BAAnB,EAA0B,WAAU,QACnC;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4D;AAC1D,SACE;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MACT,GAAG;AAAA,MAEJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
3
+ import { Button } from './button.js';
4
+ import 'class-variance-authority/types';
5
+ import 'class-variance-authority';
6
+
7
+ type AlertDialogCloseReason = "cancel-button" | "action-button" | "programmatic";
8
+ type AlertDialogRootProps = React.ComponentProps<typeof AlertDialogPrimitive.Root> & {
9
+ onCloseRequest?: (reason: AlertDialogCloseReason) => boolean | Promise<boolean>;
10
+ };
11
+ declare function AlertDialog({ defaultOpen, onCloseRequest, onOpenChange, open, ...props }: AlertDialogRootProps): React.JSX.Element;
12
+ declare function AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): React.JSX.Element;
13
+ declare function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): React.JSX.Element;
14
+ declare function AlertDialogOverlay({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>): React.JSX.Element;
15
+ declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement> & {
16
+ size?: "default" | "sm";
17
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
+ declare function AlertDialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
19
+ declare function AlertDialogFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
20
+ declare function AlertDialogMedia({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
21
+ declare function AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>): React.JSX.Element;
22
+ declare function AlertDialogDescription({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Description>): React.JSX.Element;
23
+ declare function AlertDialogAction({ asChild, className, onClick, variant, size, type, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Action> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
24
+ declare function AlertDialogCancel({ asChild, className, onClick, variant, size, type, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> & Pick<React.ComponentProps<typeof Button>, "variant" | "size">): React.JSX.Element;
25
+
26
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, type AlertDialogCloseReason, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
@@ -0,0 +1,341 @@
1
+ "use client";
2
+ import {
3
+ Button
4
+ } from "../chunk-TU5CYBB4.js";
5
+ import {
6
+ dialogSurfaceClass,
7
+ overlayScrimClass
8
+ } from "../chunk-O2BG2KSY.js";
9
+ import {
10
+ cn
11
+ } from "../chunk-DN2AEEA2.js";
12
+
13
+ // src/components/alert-dialog.tsx
14
+ import * as React from "react";
15
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
16
+ import * as Slot from "@radix-ui/react-slot";
17
+ import { jsx, jsxs } from "react/jsx-runtime";
18
+ var AlertDialogContext = React.createContext(null);
19
+ function resolveOpenState(currentOpen, nextOpen) {
20
+ return typeof nextOpen === "function" ? nextOpen(currentOpen) : nextOpen;
21
+ }
22
+ function setRefValue(ref, value) {
23
+ if (typeof ref === "function") {
24
+ ref(value);
25
+ return;
26
+ }
27
+ if (ref) {
28
+ ref.current = value;
29
+ }
30
+ }
31
+ function useAlertDialogContext(componentName) {
32
+ const context = React.useContext(AlertDialogContext);
33
+ if (!context) {
34
+ throw new Error(`${componentName} must be used within an AlertDialog.`);
35
+ }
36
+ return context;
37
+ }
38
+ function AlertDialog({
39
+ defaultOpen = false,
40
+ onCloseRequest,
41
+ onOpenChange,
42
+ open,
43
+ ...props
44
+ }) {
45
+ const [blockedInteractionCount, setBlockedInteractionCount] = React.useState(0);
46
+ const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);
47
+ const isControlled = open !== void 0;
48
+ const isOpen = isControlled ? open : uncontrolledOpen;
49
+ const isOpenRef = React.useRef(isOpen);
50
+ const closeRequestVersionRef = React.useRef(0);
51
+ React.useEffect(() => {
52
+ isOpenRef.current = isOpen;
53
+ }, [isOpen]);
54
+ const setOpenState = React.useCallback(
55
+ (nextOpen) => {
56
+ const resolvedOpen = resolveOpenState(isOpenRef.current, nextOpen);
57
+ if (!isControlled) {
58
+ setUncontrolledOpen(resolvedOpen);
59
+ }
60
+ onOpenChange?.(resolvedOpen);
61
+ },
62
+ [isControlled, onOpenChange]
63
+ );
64
+ const openAlertDialog = React.useCallback(() => {
65
+ closeRequestVersionRef.current += 1;
66
+ setOpenState(true);
67
+ }, [setOpenState]);
68
+ const forceCloseAlertDialog = React.useCallback(() => {
69
+ closeRequestVersionRef.current += 1;
70
+ setOpenState(false);
71
+ }, [setOpenState]);
72
+ const requestClose = React.useCallback(
73
+ async (reason) => {
74
+ if (!isOpenRef.current) {
75
+ return true;
76
+ }
77
+ const closeRequestVersion = closeRequestVersionRef.current + 1;
78
+ closeRequestVersionRef.current = closeRequestVersion;
79
+ const closeAllowed = await onCloseRequest?.(reason) ?? true;
80
+ if (!closeAllowed) {
81
+ setBlockedInteractionCount((currentCount) => currentCount + 1);
82
+ return false;
83
+ }
84
+ if (closeRequestVersion !== closeRequestVersionRef.current) {
85
+ return false;
86
+ }
87
+ setOpenState(false);
88
+ return true;
89
+ },
90
+ [onCloseRequest, setOpenState]
91
+ );
92
+ const contextValue = React.useMemo(
93
+ () => ({
94
+ blockedInteractionCount,
95
+ forceClose: forceCloseAlertDialog,
96
+ open: openAlertDialog,
97
+ requestClose
98
+ }),
99
+ [blockedInteractionCount, forceCloseAlertDialog, openAlertDialog, requestClose]
100
+ );
101
+ return /* @__PURE__ */ jsx(AlertDialogContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
102
+ AlertDialogPrimitive.Root,
103
+ {
104
+ "data-slot": "alert-dialog",
105
+ open: isOpen,
106
+ onOpenChange: (nextOpen) => {
107
+ if (nextOpen) {
108
+ openAlertDialog();
109
+ return;
110
+ }
111
+ void requestClose("programmatic").catch((error) => {
112
+ console.error("Failed to close alert dialog from root state change.", error);
113
+ });
114
+ },
115
+ ...props
116
+ }
117
+ ) });
118
+ }
119
+ function AlertDialogTrigger({
120
+ ...props
121
+ }) {
122
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
123
+ }
124
+ function AlertDialogPortal({ ...props }) {
125
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
126
+ }
127
+ function AlertDialogOverlay({
128
+ className,
129
+ ...props
130
+ }) {
131
+ return /* @__PURE__ */ jsx(
132
+ AlertDialogPrimitive.Overlay,
133
+ {
134
+ "data-slot": "alert-dialog-overlay",
135
+ className: cn(
136
+ "data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 z-[var(--layer-dialog)] duration-100",
137
+ overlayScrimClass,
138
+ className
139
+ ),
140
+ ...props
141
+ }
142
+ );
143
+ }
144
+ var AlertDialogContent = React.forwardRef(function AlertDialogContent2({ className, size = "default", forceMount, ...props }, ref) {
145
+ const { blockedInteractionCount } = useAlertDialogContext("AlertDialogContent");
146
+ const contentRef = React.useRef(
147
+ null
148
+ );
149
+ const blockedInteractionAnimationRef = React.useRef(null);
150
+ React.useEffect(() => {
151
+ if (blockedInteractionCount === 0) {
152
+ return;
153
+ }
154
+ const alertDialogContentElement = contentRef.current;
155
+ if (!alertDialogContentElement || typeof alertDialogContentElement.animate !== "function") {
156
+ return;
157
+ }
158
+ const prefersReducedMotion = typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
159
+ const offset = prefersReducedMotion ? 6 : 12;
160
+ const duration = prefersReducedMotion ? 180 : 320;
161
+ blockedInteractionAnimationRef.current?.cancel();
162
+ blockedInteractionAnimationRef.current = alertDialogContentElement.animate(
163
+ [
164
+ { marginLeft: "0px" },
165
+ { marginLeft: `-${offset}px` },
166
+ { marginLeft: `${Math.round(offset * 0.83)}px` },
167
+ { marginLeft: `-${Math.round(offset * 0.67)}px` },
168
+ { marginLeft: `${Math.round(offset * 0.5)}px` },
169
+ { marginLeft: "0px" }
170
+ ],
171
+ {
172
+ duration,
173
+ easing: "cubic-bezier(0.36, 0.07, 0.19, 0.97)"
174
+ }
175
+ );
176
+ return () => {
177
+ blockedInteractionAnimationRef.current?.cancel();
178
+ };
179
+ }, [blockedInteractionCount]);
180
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
181
+ /* @__PURE__ */ jsx(AlertDialogOverlay, { ...forceMount === true ? { forceMount: true } : {} }),
182
+ /* @__PURE__ */ jsx(
183
+ AlertDialogPrimitive.Content,
184
+ {
185
+ ref: (node) => {
186
+ contentRef.current = node;
187
+ setRefValue(ref, node);
188
+ },
189
+ "data-slot": "alert-dialog-content",
190
+ "data-size": size,
191
+ ...forceMount === true ? { forceMount: true } : {},
192
+ className: cn(
193
+ "group/alert-dialog-content 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 fixed top-1/2 left-1/2 z-[var(--layer-dialog)] grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-[var(--radius-dialog)] p-4 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm",
194
+ dialogSurfaceClass,
195
+ className
196
+ ),
197
+ ...props
198
+ }
199
+ )
200
+ ] });
201
+ });
202
+ function AlertDialogHeader({ className, ...props }) {
203
+ return /* @__PURE__ */ jsx(
204
+ "div",
205
+ {
206
+ "data-slot": "alert-dialog-header",
207
+ className: cn(
208
+ "grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",
209
+ className
210
+ ),
211
+ ...props
212
+ }
213
+ );
214
+ }
215
+ function AlertDialogFooter({ className, ...props }) {
216
+ return /* @__PURE__ */ jsx(
217
+ "div",
218
+ {
219
+ "data-slot": "alert-dialog-footer",
220
+ className: cn(
221
+ "bg-dialog-footer-background border-dialog-border -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-[var(--radius-dialog)] border-t p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
222
+ className
223
+ ),
224
+ ...props
225
+ }
226
+ );
227
+ }
228
+ function AlertDialogMedia({ className, ...props }) {
229
+ return /* @__PURE__ */ jsx(
230
+ "div",
231
+ {
232
+ "data-slot": "alert-dialog-media",
233
+ className: cn(
234
+ "bg-background-secondary mb-2 inline-flex size-10 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6",
235
+ className
236
+ ),
237
+ ...props
238
+ }
239
+ );
240
+ }
241
+ function AlertDialogTitle({
242
+ className,
243
+ ...props
244
+ }) {
245
+ return /* @__PURE__ */ jsx(
246
+ AlertDialogPrimitive.Title,
247
+ {
248
+ "data-slot": "alert-dialog-title",
249
+ className: cn(
250
+ "font-heading text-dialog-text text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
251
+ className
252
+ ),
253
+ ...props
254
+ }
255
+ );
256
+ }
257
+ function AlertDialogDescription({
258
+ className,
259
+ ...props
260
+ }) {
261
+ return /* @__PURE__ */ jsx(
262
+ AlertDialogPrimitive.Description,
263
+ {
264
+ "data-slot": "alert-dialog-description",
265
+ className: cn(
266
+ "text-text-muted *:[a]:hover:text-text-normal text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3",
267
+ className
268
+ ),
269
+ ...props
270
+ }
271
+ );
272
+ }
273
+ function AlertDialogAction({
274
+ asChild = false,
275
+ className,
276
+ onClick,
277
+ variant = "accent",
278
+ size = "default",
279
+ type = "button",
280
+ ...props
281
+ }) {
282
+ const { requestClose } = useAlertDialogContext("AlertDialogAction");
283
+ const Comp = asChild ? Slot.Root : "button";
284
+ return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
285
+ Comp,
286
+ {
287
+ "data-slot": "alert-dialog-action",
288
+ className: cn(className),
289
+ onClick: async (event) => {
290
+ if (!await requestClose("action-button")) {
291
+ return;
292
+ }
293
+ onClick?.(event);
294
+ },
295
+ type: asChild ? void 0 : type,
296
+ ...props
297
+ }
298
+ ) });
299
+ }
300
+ function AlertDialogCancel({
301
+ asChild = false,
302
+ className,
303
+ onClick,
304
+ variant = "outline",
305
+ size = "default",
306
+ type = "button",
307
+ ...props
308
+ }) {
309
+ const { requestClose } = useAlertDialogContext("AlertDialogCancel");
310
+ const Comp = asChild ? Slot.Root : "button";
311
+ return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
312
+ Comp,
313
+ {
314
+ "data-slot": "alert-dialog-cancel",
315
+ className: cn(className),
316
+ onClick: async (event) => {
317
+ if (!await requestClose("cancel-button")) {
318
+ return;
319
+ }
320
+ onClick?.(event);
321
+ },
322
+ type: asChild ? void 0 : type,
323
+ ...props
324
+ }
325
+ ) });
326
+ }
327
+ export {
328
+ AlertDialog,
329
+ AlertDialogAction,
330
+ AlertDialogCancel,
331
+ AlertDialogContent,
332
+ AlertDialogDescription,
333
+ AlertDialogFooter,
334
+ AlertDialogHeader,
335
+ AlertDialogMedia,
336
+ AlertDialogOverlay,
337
+ AlertDialogPortal,
338
+ AlertDialogTitle,
339
+ AlertDialogTrigger
340
+ };
341
+ //# sourceMappingURL=alert-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\nimport * as Slot from \"@radix-ui/react-slot\"\n\nimport { Button } from \"@hyunsdev/ui/components/button\"\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { dialogSurfaceClass, overlayScrimClass } from \"./_styles\"\n\nexport type AlertDialogCloseReason = \"cancel-button\" | \"action-button\" | \"programmatic\"\n\ntype AlertDialogRootProps = React.ComponentProps<typeof AlertDialogPrimitive.Root> & {\n onCloseRequest?: (reason: AlertDialogCloseReason) => boolean | Promise<boolean>\n}\n\ntype AlertDialogContextValue = {\n blockedInteractionCount: number\n forceClose: () => void\n open: () => void\n requestClose: (reason: AlertDialogCloseReason) => Promise<boolean>\n}\n\nconst AlertDialogContext = React.createContext<AlertDialogContextValue | null>(null)\n\nfunction resolveOpenState(currentOpen: boolean, nextOpen: React.SetStateAction<boolean>) {\n return typeof nextOpen === \"function\" ? nextOpen(currentOpen) : nextOpen\n}\n\nfunction setRefValue<T>(ref: React.Ref<T> | undefined, value: T) {\n if (typeof ref === \"function\") {\n ref(value)\n return\n }\n\n if (ref) {\n ref.current = value\n }\n}\n\nfunction useAlertDialogContext(componentName: string) {\n const context = React.useContext(AlertDialogContext)\n\n if (!context) {\n throw new Error(`${componentName} must be used within an AlertDialog.`)\n }\n\n return context\n}\n\nfunction AlertDialog({\n defaultOpen = false,\n onCloseRequest,\n onOpenChange,\n open,\n ...props\n}: AlertDialogRootProps) {\n const [blockedInteractionCount, setBlockedInteractionCount] = React.useState(0)\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = open !== undefined\n const isOpen = isControlled ? open : uncontrolledOpen\n const isOpenRef = React.useRef(isOpen)\n const closeRequestVersionRef = React.useRef(0)\n\n React.useEffect(() => {\n isOpenRef.current = isOpen\n }, [isOpen])\n\n const setOpenState = React.useCallback<React.Dispatch<React.SetStateAction<boolean>>>(\n (nextOpen) => {\n const resolvedOpen = resolveOpenState(isOpenRef.current, nextOpen)\n\n if (!isControlled) {\n setUncontrolledOpen(resolvedOpen)\n }\n\n onOpenChange?.(resolvedOpen)\n },\n [isControlled, onOpenChange],\n )\n\n const openAlertDialog = React.useCallback(() => {\n closeRequestVersionRef.current += 1\n setOpenState(true)\n }, [setOpenState])\n\n const forceCloseAlertDialog = React.useCallback(() => {\n closeRequestVersionRef.current += 1\n setOpenState(false)\n }, [setOpenState])\n\n const requestClose = React.useCallback(\n async (reason: AlertDialogCloseReason) => {\n if (!isOpenRef.current) {\n return true\n }\n\n const closeRequestVersion = closeRequestVersionRef.current + 1\n closeRequestVersionRef.current = closeRequestVersion\n const closeAllowed = (await onCloseRequest?.(reason)) ?? true\n\n if (!closeAllowed) {\n setBlockedInteractionCount((currentCount) => currentCount + 1)\n return false\n }\n\n if (closeRequestVersion !== closeRequestVersionRef.current) {\n return false\n }\n\n setOpenState(false)\n\n return true\n },\n [onCloseRequest, setOpenState],\n )\n\n const contextValue = React.useMemo(\n () => ({\n blockedInteractionCount,\n forceClose: forceCloseAlertDialog,\n open: openAlertDialog,\n requestClose,\n }),\n [blockedInteractionCount, forceCloseAlertDialog, openAlertDialog, requestClose],\n )\n\n return (\n <AlertDialogContext.Provider value={contextValue}>\n <AlertDialogPrimitive.Root\n data-slot=\"alert-dialog\"\n open={isOpen}\n onOpenChange={(nextOpen) => {\n if (nextOpen) {\n openAlertDialog()\n return\n }\n\n void requestClose(\"programmatic\").catch((error) => {\n console.error(\"Failed to close alert dialog from root state change.\", error)\n })\n }}\n {...props}\n />\n </AlertDialogContext.Provider>\n )\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 z-[var(--layer-dialog)] duration-100\",\n overlayScrimClass,\n className,\n )}\n {...props}\n />\n )\n}\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n }\n>(function AlertDialogContent({ className, size = \"default\", forceMount, ...props }, ref) {\n const { blockedInteractionCount } = useAlertDialogContext(\"AlertDialogContent\")\n const contentRef = React.useRef<React.ElementRef<typeof AlertDialogPrimitive.Content> | null>(\n null,\n )\n const blockedInteractionAnimationRef = React.useRef<Animation | null>(null)\n\n React.useEffect(() => {\n if (blockedInteractionCount === 0) {\n return\n }\n\n const alertDialogContentElement = contentRef.current\n\n if (!alertDialogContentElement || typeof alertDialogContentElement.animate !== \"function\") {\n return\n }\n\n const prefersReducedMotion =\n typeof window !== \"undefined\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n const offset = prefersReducedMotion ? 6 : 12\n const duration = prefersReducedMotion ? 180 : 320\n\n blockedInteractionAnimationRef.current?.cancel()\n blockedInteractionAnimationRef.current = alertDialogContentElement.animate(\n [\n { marginLeft: \"0px\" },\n { marginLeft: `-${offset}px` },\n { marginLeft: `${Math.round(offset * 0.83)}px` },\n { marginLeft: `-${Math.round(offset * 0.67)}px` },\n { marginLeft: `${Math.round(offset * 0.5)}px` },\n { marginLeft: \"0px\" },\n ],\n {\n duration,\n easing: \"cubic-bezier(0.36, 0.07, 0.19, 0.97)\",\n },\n )\n\n return () => {\n blockedInteractionAnimationRef.current?.cancel()\n }\n }, [blockedInteractionCount])\n\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay {...(forceMount === true ? { forceMount: true } : {})} />\n <AlertDialogPrimitive.Content\n ref={(node) => {\n contentRef.current = node\n setRefValue(ref, node)\n }}\n data-slot=\"alert-dialog-content\"\n data-size={size}\n {...(forceMount === true ? { forceMount: true } : {})}\n className={cn(\n \"group/alert-dialog-content 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 fixed top-1/2 left-1/2 z-[var(--layer-dialog)] grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-[var(--radius-dialog)] p-4 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm\",\n dialogSurfaceClass,\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n})\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"bg-dialog-footer-background border-dialog-border -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-[var(--radius-dialog)] border-t p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"bg-background-secondary mb-2 inline-flex size-10 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"font-heading text-dialog-text text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\n \"text-text-muted *:[a]:hover:text-text-normal text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n asChild = false,\n className,\n onClick,\n variant = \"accent\",\n size = \"default\",\n type = \"button\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n const { requestClose } = useAlertDialogContext(\"AlertDialogAction\")\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Button variant={variant} size={size} asChild>\n <Comp\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n onClick={async (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!(await requestClose(\"action-button\"))) {\n return\n }\n\n onClick?.(event)\n }}\n type={asChild ? undefined : type}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n asChild = false,\n className,\n onClick,\n variant = \"outline\",\n size = \"default\",\n type = \"button\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n const { requestClose } = useAlertDialogContext(\"AlertDialogCancel\")\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Button variant={variant} size={size} asChild>\n <Comp\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n onClick={async (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!(await requestClose(\"cancel-button\"))) {\n return\n }\n\n onClick?.(event)\n }}\n type={asChild ? undefined : type}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"],"mappings":"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","names":["AlertDialogContent"]}
@@ -0,0 +1,13 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const alertVariants: (props?: ({
6
+ variant?: "default" | "destructive" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>): React.JSX.Element;
9
+ declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ declare function AlertAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
12
+
13
+ export { Alert, AlertAction, AlertDescription, AlertTitle };
@@ -0,0 +1,76 @@
1
+ import {
2
+ cardSurfaceClass
3
+ } from "../chunk-O2BG2KSY.js";
4
+ import {
5
+ cn
6
+ } from "../chunk-DN2AEEA2.js";
7
+
8
+ // src/components/alert.tsx
9
+ import "react";
10
+ import { cva } from "class-variance-authority";
11
+ import { jsx } from "react/jsx-runtime";
12
+ var alertVariants = cva(
13
+ "group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
14
+ {
15
+ variants: {
16
+ variant: {
17
+ default: cardSurfaceClass,
18
+ destructive: `${cardSurfaceClass} text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current`
19
+ }
20
+ },
21
+ defaultVariants: {
22
+ variant: "default"
23
+ }
24
+ }
25
+ );
26
+ function Alert({
27
+ className,
28
+ variant,
29
+ ...props
30
+ }) {
31
+ return /* @__PURE__ */ jsx(
32
+ "div",
33
+ {
34
+ "data-slot": "alert",
35
+ role: "alert",
36
+ className: cn(alertVariants({ variant }), className),
37
+ ...props
38
+ }
39
+ );
40
+ }
41
+ function AlertTitle({ className, ...props }) {
42
+ return /* @__PURE__ */ jsx(
43
+ "div",
44
+ {
45
+ "data-slot": "alert-title",
46
+ className: cn(
47
+ "font-heading [&_a]:hover:text-text-normal font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3",
48
+ className
49
+ ),
50
+ ...props
51
+ }
52
+ );
53
+ }
54
+ function AlertDescription({ className, ...props }) {
55
+ return /* @__PURE__ */ jsx(
56
+ "div",
57
+ {
58
+ "data-slot": "alert-description",
59
+ className: cn(
60
+ "text-text-muted [&_a]:hover:text-text-normal text-sm text-balance md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",
61
+ className
62
+ ),
63
+ ...props
64
+ }
65
+ );
66
+ }
67
+ function AlertAction({ className, ...props }) {
68
+ return /* @__PURE__ */ jsx("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
69
+ }
70
+ export {
71
+ Alert,
72
+ AlertAction,
73
+ AlertDescription,
74
+ AlertTitle
75
+ };
76
+ //# sourceMappingURL=alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/alert.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { cardSurfaceClass } from \"./_styles\"\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: cardSurfaceClass,\n destructive: `${cardSurfaceClass} text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current`,\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"font-heading [&_a]:hover:text-text-normal font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-text-muted [&_a]:hover:text-text-normal text-sm text-balance md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"alert-action\" className={cn(\"absolute top-2 right-2\", className)} {...props} />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n"],"mappings":";;;;;;;;AAAA,OAAuB;AAEvB,SAAS,WAA8B;AA2BnC;AArBJ,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aAAa,GAAG,gBAAgB;AAAA,MAClC;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,MAAM;AAAA,EACb;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqE;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,MAClD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAgC;AACxE,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;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAgC;AACzE,SACE,oBAAC,SAAI,aAAU,gBAAe,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AAEjG;","names":[]}
@@ -0,0 +1,6 @@
1
+ import * as React$1 from 'react';
2
+ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
3
+
4
+ declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): React$1.JSX.Element;
5
+
6
+ export { AspectRatio };