@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,142 @@
1
+ import {
2
+ ACCENT_PRESET_STORAGE_KEY,
3
+ DEFAULT_ACCENT_PRESET,
4
+ THEME_STORAGE_KEY,
5
+ normalizeStoredAccentPreset,
6
+ normalizeStoredTheme,
7
+ resolveThemeMode
8
+ } from "./chunk-3RTSANKB.js";
9
+
10
+ // src/components/theme-provider.tsx
11
+ import * as React from "react";
12
+ import { jsx } from "react/jsx-runtime";
13
+ var THEME_MEDIA_QUERY = "(prefers-color-scheme: dark)";
14
+ var ThemeContext = React.createContext(null);
15
+ function getSystemResolvedTheme() {
16
+ return window.matchMedia(THEME_MEDIA_QUERY).matches ? "dark" : "light";
17
+ }
18
+ function getStoredTheme() {
19
+ const storedTheme = window.localStorage.getItem(THEME_STORAGE_KEY);
20
+ return normalizeStoredTheme(storedTheme) ?? "system";
21
+ }
22
+ function getStoredAccentPreset() {
23
+ const storedAccentPreset = window.localStorage.getItem(ACCENT_PRESET_STORAGE_KEY);
24
+ return normalizeStoredAccentPreset(storedAccentPreset) ?? DEFAULT_ACCENT_PRESET;
25
+ }
26
+ function getInitialThemeState() {
27
+ if (typeof window === "undefined") {
28
+ return {
29
+ accentPreset: DEFAULT_ACCENT_PRESET,
30
+ resolvedTheme: "light",
31
+ theme: "system"
32
+ };
33
+ }
34
+ const accentPreset = getStoredAccentPreset();
35
+ const theme = getStoredTheme();
36
+ const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === "dark");
37
+ return {
38
+ accentPreset,
39
+ resolvedTheme,
40
+ theme
41
+ };
42
+ }
43
+ function applyAccentPreset(accentPreset) {
44
+ const root = document.documentElement;
45
+ root.setAttribute("data-accent", accentPreset);
46
+ }
47
+ function applyTheme(theme) {
48
+ const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === "dark");
49
+ const root = document.documentElement;
50
+ root.classList.remove("light", "dark");
51
+ root.classList.add(resolvedTheme);
52
+ if (theme === "system") {
53
+ root.removeAttribute("data-theme");
54
+ } else {
55
+ root.setAttribute("data-theme", theme);
56
+ }
57
+ root.style.colorScheme = resolvedTheme;
58
+ return resolvedTheme;
59
+ }
60
+ function ThemeProvider({ children }) {
61
+ const [themeState, setThemeState] = React.useState(getInitialThemeState);
62
+ React.useEffect(() => {
63
+ applyAccentPreset(themeState.accentPreset);
64
+ window.localStorage.setItem(ACCENT_PRESET_STORAGE_KEY, themeState.accentPreset);
65
+ }, [themeState.accentPreset]);
66
+ React.useEffect(() => {
67
+ const resolvedTheme = applyTheme(themeState.theme);
68
+ setThemeState((currentThemeState) => {
69
+ if (currentThemeState.resolvedTheme === resolvedTheme) {
70
+ return currentThemeState;
71
+ }
72
+ return {
73
+ ...currentThemeState,
74
+ resolvedTheme
75
+ };
76
+ });
77
+ window.localStorage.setItem(THEME_STORAGE_KEY, themeState.theme);
78
+ }, [themeState.theme]);
79
+ React.useEffect(() => {
80
+ if (themeState.theme !== "system") {
81
+ return;
82
+ }
83
+ const mediaQueryList = window.matchMedia(THEME_MEDIA_QUERY);
84
+ const syncAutoTheme = () => {
85
+ const resolvedTheme = applyTheme("system");
86
+ setThemeState((currentThemeState) => {
87
+ if (currentThemeState.resolvedTheme === resolvedTheme) {
88
+ return currentThemeState;
89
+ }
90
+ return {
91
+ ...currentThemeState,
92
+ resolvedTheme
93
+ };
94
+ });
95
+ };
96
+ mediaQueryList.addEventListener("change", syncAutoTheme);
97
+ return () => {
98
+ mediaQueryList.removeEventListener("change", syncAutoTheme);
99
+ };
100
+ }, [themeState.theme]);
101
+ const value = {
102
+ accentPreset: themeState.accentPreset,
103
+ resolvedTheme: themeState.resolvedTheme,
104
+ setAccentPreset: (accentPreset) => {
105
+ setThemeState((currentThemeState) => {
106
+ if (currentThemeState.accentPreset === accentPreset) {
107
+ return currentThemeState;
108
+ }
109
+ return {
110
+ ...currentThemeState,
111
+ accentPreset
112
+ };
113
+ });
114
+ },
115
+ setTheme: (theme) => {
116
+ setThemeState((currentThemeState) => {
117
+ if (currentThemeState.theme === theme) {
118
+ return currentThemeState;
119
+ }
120
+ return {
121
+ ...currentThemeState,
122
+ theme
123
+ };
124
+ });
125
+ },
126
+ theme: themeState.theme
127
+ };
128
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
129
+ }
130
+ function useTheme() {
131
+ const context = React.useContext(ThemeContext);
132
+ if (!context) {
133
+ throw new Error("useTheme must be used within a ThemeProvider.");
134
+ }
135
+ return context;
136
+ }
137
+
138
+ export {
139
+ ThemeProvider,
140
+ useTheme
141
+ };
142
+ //# sourceMappingURL=chunk-UXCBLYG6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/theme-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n ACCENT_PRESET_STORAGE_KEY,\n DEFAULT_ACCENT_PRESET,\n getThemeInitScript,\n normalizeStoredAccentPreset,\n normalizeStoredTheme,\n resolveThemeMode,\n THEME_STORAGE_KEY,\n type AccentPreset,\n type ResolvedTheme,\n type ThemeContextValue,\n type ThemeMode,\n} from \"../lib/theme\"\n\nconst THEME_MEDIA_QUERY = \"(prefers-color-scheme: dark)\"\n\nconst ThemeContext = React.createContext<ThemeContextValue | null>(null)\n\ntype ThemeState = {\n accentPreset: AccentPreset\n resolvedTheme: ResolvedTheme\n theme: ThemeMode\n}\n\nfunction getSystemResolvedTheme(): ResolvedTheme {\n return window.matchMedia(THEME_MEDIA_QUERY).matches ? \"dark\" : \"light\"\n}\n\nfunction getStoredTheme(): ThemeMode {\n const storedTheme = window.localStorage.getItem(THEME_STORAGE_KEY)\n return normalizeStoredTheme(storedTheme) ?? \"system\"\n}\n\nfunction getStoredAccentPreset(): AccentPreset {\n const storedAccentPreset = window.localStorage.getItem(ACCENT_PRESET_STORAGE_KEY)\n return normalizeStoredAccentPreset(storedAccentPreset) ?? DEFAULT_ACCENT_PRESET\n}\n\nfunction getInitialThemeState(): ThemeState {\n if (typeof window === \"undefined\") {\n return {\n accentPreset: DEFAULT_ACCENT_PRESET,\n resolvedTheme: \"light\",\n theme: \"system\",\n }\n }\n\n const accentPreset = getStoredAccentPreset()\n const theme = getStoredTheme()\n const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === \"dark\")\n\n return {\n accentPreset,\n resolvedTheme,\n theme,\n }\n}\n\nfunction applyAccentPreset(accentPreset: AccentPreset) {\n const root = document.documentElement\n root.setAttribute(\"data-accent\", accentPreset)\n}\n\nfunction applyTheme(theme: ThemeMode) {\n const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === \"dark\")\n const root = document.documentElement\n\n root.classList.remove(\"light\", \"dark\")\n root.classList.add(resolvedTheme)\n\n if (theme === \"system\") {\n root.removeAttribute(\"data-theme\")\n } else {\n root.setAttribute(\"data-theme\", theme)\n }\n\n root.style.colorScheme = resolvedTheme\n\n return resolvedTheme\n}\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [themeState, setThemeState] = React.useState(getInitialThemeState)\n\n React.useEffect(() => {\n applyAccentPreset(themeState.accentPreset)\n window.localStorage.setItem(ACCENT_PRESET_STORAGE_KEY, themeState.accentPreset)\n }, [themeState.accentPreset])\n\n React.useEffect(() => {\n const resolvedTheme = applyTheme(themeState.theme)\n\n setThemeState((currentThemeState) => {\n if (currentThemeState.resolvedTheme === resolvedTheme) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n resolvedTheme,\n }\n })\n\n window.localStorage.setItem(THEME_STORAGE_KEY, themeState.theme)\n }, [themeState.theme])\n\n React.useEffect(() => {\n if (themeState.theme !== \"system\") {\n return\n }\n\n const mediaQueryList = window.matchMedia(THEME_MEDIA_QUERY)\n const syncAutoTheme = () => {\n const resolvedTheme = applyTheme(\"system\")\n\n setThemeState((currentThemeState) => {\n if (currentThemeState.resolvedTheme === resolvedTheme) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n resolvedTheme,\n }\n })\n }\n\n mediaQueryList.addEventListener(\"change\", syncAutoTheme)\n\n return () => {\n mediaQueryList.removeEventListener(\"change\", syncAutoTheme)\n }\n }, [themeState.theme])\n\n const value: ThemeContextValue = {\n accentPreset: themeState.accentPreset,\n resolvedTheme: themeState.resolvedTheme,\n setAccentPreset: (accentPreset) => {\n setThemeState((currentThemeState) => {\n if (currentThemeState.accentPreset === accentPreset) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n accentPreset,\n }\n })\n },\n setTheme: (theme) => {\n setThemeState((currentThemeState) => {\n if (currentThemeState.theme === theme) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n theme,\n }\n })\n },\n theme: themeState.theme,\n }\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n}\n\nexport function useTheme() {\n const context = React.useContext(ThemeContext)\n\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider.\")\n }\n\n return context\n}\n\nexport { getThemeInitScript }\nexport type { AccentPreset, ResolvedTheme, ThemeContextValue, ThemeMode }\n"],"mappings":"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","names":[]}
@@ -0,0 +1,53 @@
1
+ import {
2
+ fieldInvalidClass
3
+ } from "./chunk-O2BG2KSY.js";
4
+ import {
5
+ cn
6
+ } from "./chunk-DN2AEEA2.js";
7
+
8
+ // src/components/badge.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 badgeVariants = cva(
14
+ "group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-focus-ring focus-visible:ring-[3px] focus-visible:ring-focus-ring has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:pointer-events-none [&>svg]:size-3!",
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 [a]:hover:bg-interactive-accent-hover",
19
+ normal: "border-border bg-interactive-normal text-text-normal hover:bg-interactive-hover active:bg-interactive-active-hover [a]:hover:bg-interactive-hover",
20
+ destructive: "bg-background-error text-text-error hover:bg-background-error-hover active:bg-background-error-hover [a]:hover:bg-background-error-hover",
21
+ outline: "border-border bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover",
22
+ ghost: "bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover",
23
+ link: "bg-transparent text-text-accent underline-offset-4 hover:text-text-accent-hover hover:underline [a]:hover:text-text-accent-hover [a]:hover:underline"
24
+ }
25
+ },
26
+ defaultVariants: {
27
+ variant: "accent"
28
+ }
29
+ }
30
+ );
31
+ function Badge({
32
+ className,
33
+ variant = "normal",
34
+ asChild = false,
35
+ ...props
36
+ }) {
37
+ const Comp = asChild ? Slot.Root : "span";
38
+ return /* @__PURE__ */ jsx(
39
+ Comp,
40
+ {
41
+ "data-slot": "badge",
42
+ "data-variant": variant,
43
+ className: cn(badgeVariants({ variant }), fieldInvalidClass, className),
44
+ ...props
45
+ }
46
+ );
47
+ }
48
+
49
+ export {
50
+ badgeVariants,
51
+ Badge
52
+ };
53
+ //# sourceMappingURL=chunk-VUR4MQMH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/badge.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 badgeVariants = cva(\n \"group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-focus-ring focus-visible:ring-[3px] focus-visible:ring-focus-ring has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:pointer-events-none [&>svg]:size-3!\",\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 [a]:hover:bg-interactive-accent-hover\",\n normal:\n \"border-border bg-interactive-normal text-text-normal hover:bg-interactive-hover active:bg-interactive-active-hover [a]:hover:bg-interactive-hover\",\n destructive:\n \"bg-background-error text-text-error hover:bg-background-error-hover active:bg-background-error-hover [a]:hover:bg-background-error-hover\",\n outline:\n \"border-border bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover\",\n ghost:\n \"bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover\",\n link: \"bg-transparent text-text-accent underline-offset-4 hover:text-text-accent-hover hover:underline [a]:hover:text-text-accent-hover [a]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"accent\",\n },\n },\n)\n\nfunction Badge({\n className,\n variant = \"normal\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), fieldInvalidClass, className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n"],"mappings":";;;;;;;;AAAA,OAAuB;AAEvB,YAAY,UAAU;AACtB,SAAS,WAA8B;AAuCnC;AAjCJ,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,QACE;AAAA,QACF,QACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,QACF,OACE;AAAA,QACF,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,MAAM;AAAA,EACb;AAAA,EACA,UAAU;AAAA,EACV,UAAU;AAAA,EACV,GAAG;AACL,GAA8F;AAC5F,QAAM,OAAO,UAAe,YAAO;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,mBAAmB,SAAS;AAAA,MACrE,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -0,0 +1,26 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-DN2AEEA2.js";
4
+
5
+ // src/components/label.tsx
6
+ import "react";
7
+ import * as LabelPrimitive from "@radix-ui/react-label";
8
+ import { jsx } from "react/jsx-runtime";
9
+ function Label({ className, ...props }) {
10
+ return /* @__PURE__ */ jsx(
11
+ LabelPrimitive.Root,
12
+ {
13
+ "data-slot": "label",
14
+ className: cn(
15
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
16
+ className
17
+ ),
18
+ ...props
19
+ }
20
+ );
21
+ }
22
+
23
+ export {
24
+ Label
25
+ };
26
+ //# sourceMappingURL=chunk-WIEKNG4S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/label.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n"],"mappings":";;;;;AAEA,OAAuB;AAEvB,YAAY,oBAAoB;AAM5B;AAFJ,SAAS,MAAM,EAAE,WAAW,GAAG,MAAM,GAAqD;AACxF,SACE;AAAA,IAAgB;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -0,0 +1,23 @@
1
+ import {
2
+ Toaster
3
+ } from "./chunk-23KUNTRD.js";
4
+ import {
5
+ TooltipProvider
6
+ } from "./chunk-D3SP7GL3.js";
7
+ import {
8
+ ThemeProvider
9
+ } from "./chunk-UXCBLYG6.js";
10
+
11
+ // src/components/main-provider.tsx
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ function MainProvider({ children }) {
14
+ return /* @__PURE__ */ jsxs(ThemeProvider, { children: [
15
+ /* @__PURE__ */ jsx(TooltipProvider, { children }),
16
+ /* @__PURE__ */ jsx(Toaster, {})
17
+ ] });
18
+ }
19
+
20
+ export {
21
+ MainProvider
22
+ };
23
+ //# sourceMappingURL=chunk-WIZ4OLOB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/main-provider.tsx"],"sourcesContent":["import { Toaster } from \"./sonner\"\nimport { ThemeProvider } from \"./theme-provider\"\nimport { TooltipProvider } from \"./tooltip\"\n\nexport function MainProvider({ children }: { children: React.ReactNode }) {\n return (\n <ThemeProvider>\n <TooltipProvider>{children}</TooltipProvider>\n <Toaster />\n </ThemeProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;AAMI,SACE,KADF;AAFG,SAAS,aAAa,EAAE,SAAS,GAAkC;AACxE,SACE,qBAAC,iBACC;AAAA,wBAAC,mBAAiB,UAAS;AAAA,IAC3B,oBAAC,WAAQ;AAAA,KACX;AAEJ;","names":[]}
@@ -0,0 +1,21 @@
1
+ // src/hooks/use-mobile.ts
2
+ import * as React from "react";
3
+ var MOBILE_BREAKPOINT = 768;
4
+ function useIsMobile() {
5
+ const [isMobile, setIsMobile] = React.useState(void 0);
6
+ React.useEffect(() => {
7
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
8
+ const onChange = () => {
9
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
10
+ };
11
+ mql.addEventListener("change", onChange);
12
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
13
+ return () => mql.removeEventListener("change", onChange);
14
+ }, []);
15
+ return !!isMobile;
16
+ }
17
+
18
+ export {
19
+ useIsMobile
20
+ };
21
+ //# sourceMappingURL=chunk-WJRJBMFN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-mobile.ts"],"sourcesContent":["import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n"],"mappings":";AAAA,YAAY,WAAW;AAEvB,IAAM,oBAAoB;AAEnB,SAAS,cAAc;AAC5B,QAAM,CAAC,UAAU,WAAW,IAAU,eAA8B,MAAS;AAE7E,EAAM,gBAAU,MAAM;AACpB,UAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,CAAC,KAAK;AACvE,UAAM,WAAW,MAAM;AACrB,kBAAY,OAAO,aAAa,iBAAiB;AAAA,IACnD;AACA,QAAI,iBAAiB,UAAU,QAAQ;AACvC,gBAAY,OAAO,aAAa,iBAAiB;AACjD,WAAO,MAAM,IAAI,oBAAoB,UAAU,QAAQ;AAAA,EACzD,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,CAAC;AACX;","names":[]}
@@ -0,0 +1,33 @@
1
+ import {
2
+ fieldFocusClass,
3
+ fieldInvalidClass
4
+ } from "./chunk-O2BG2KSY.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-DN2AEEA2.js";
8
+
9
+ // src/components/input.tsx
10
+ import "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+ function Input({ className, type, size = "default", ...props }) {
13
+ return /* @__PURE__ */ jsx(
14
+ "input",
15
+ {
16
+ type,
17
+ "data-slot": "input",
18
+ "data-size": size,
19
+ className: cn(
20
+ "border-field-border bg-field-background text-field-text file:text-field-text placeholder:text-field-placeholder disabled:bg-field-background-disabled h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),12px)] md:text-sm",
21
+ fieldFocusClass,
22
+ fieldInvalidClass,
23
+ className
24
+ ),
25
+ ...props
26
+ }
27
+ );
28
+ }
29
+
30
+ export {
31
+ Input
32
+ };
33
+ //# sourceMappingURL=chunk-YUPLJP3F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/input.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { fieldFocusClass, fieldInvalidClass, type FieldControlSize } from \"./_styles\"\n\ntype InputProps = Omit<React.ComponentProps<\"input\">, \"size\"> & {\n size?: FieldControlSize\n}\n\nfunction Input({ className, type, size = \"default\", ...props }: InputProps) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n data-size={size}\n className={cn(\n \"border-field-border bg-field-background text-field-text file:text-field-text placeholder:text-field-placeholder disabled:bg-field-background-disabled h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),12px)] md:text-sm\",\n fieldFocusClass,\n fieldInvalidClass,\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n"],"mappings":";;;;;;;;;AAAA,OAAuB;AAYnB;AAFJ,SAAS,MAAM,EAAE,WAAW,MAAM,OAAO,WAAW,GAAG,MAAM,GAAe;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -0,0 +1,184 @@
1
+ import {
2
+ Dialog,
3
+ DialogContent,
4
+ DialogDescription,
5
+ DialogHeader,
6
+ DialogTitle
7
+ } from "./chunk-PLZMCJSL.js";
8
+ import {
9
+ InputGroup,
10
+ InputGroupAddon
11
+ } from "./chunk-UVAI2U6X.js";
12
+ import {
13
+ floatingItemAccentStateClass
14
+ } from "./chunk-O2BG2KSY.js";
15
+ import {
16
+ cn
17
+ } from "./chunk-DN2AEEA2.js";
18
+
19
+ // src/components/command.tsx
20
+ import "react";
21
+ import { Command as CommandPrimitive } from "cmdk";
22
+ import { SearchIcon, CheckIcon } from "lucide-react";
23
+ import { jsx, jsxs } from "react/jsx-runtime";
24
+ function Command({ className, ...props }) {
25
+ return /* @__PURE__ */ jsx(
26
+ CommandPrimitive,
27
+ {
28
+ "data-slot": "command",
29
+ className: cn(
30
+ "text-dialog-text flex size-full flex-col overflow-hidden rounded-[var(--radius-dialog)]! p-1",
31
+ className
32
+ ),
33
+ ...props
34
+ }
35
+ );
36
+ }
37
+ function CommandDialog({
38
+ title = "Command Palette",
39
+ description = "Search for a command to run...",
40
+ children,
41
+ className,
42
+ showCloseButton = false,
43
+ ...props
44
+ }) {
45
+ return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
46
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
47
+ /* @__PURE__ */ jsx(DialogTitle, { children: title }),
48
+ /* @__PURE__ */ jsx(DialogDescription, { children: description })
49
+ ] }),
50
+ /* @__PURE__ */ jsx(
51
+ DialogContent,
52
+ {
53
+ className: cn(
54
+ "top-1/6 translate-y-0 overflow-hidden rounded-xl! p-0 sm:max-w-xl",
55
+ className
56
+ ),
57
+ showCloseButton,
58
+ children
59
+ }
60
+ )
61
+ ] });
62
+ }
63
+ function CommandInput({
64
+ className,
65
+ ...props
66
+ }) {
67
+ return /* @__PURE__ */ jsx("div", { "data-slot": "command-input-wrapper", className: "p-1 pb-0", children: /* @__PURE__ */ jsxs(InputGroup, { className: "h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!", children: [
68
+ /* @__PURE__ */ jsx(
69
+ CommandPrimitive.Input,
70
+ {
71
+ "data-slot": "command-input",
72
+ className: cn(
73
+ "w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
74
+ className
75
+ ),
76
+ ...props
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })
80
+ ] }) });
81
+ }
82
+ function CommandList({ className, ...props }) {
83
+ return /* @__PURE__ */ jsx(
84
+ CommandPrimitive.List,
85
+ {
86
+ "data-slot": "command-list",
87
+ className: cn(
88
+ "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
89
+ className
90
+ ),
91
+ ...props
92
+ }
93
+ );
94
+ }
95
+ function CommandEmpty({
96
+ className,
97
+ ...props
98
+ }) {
99
+ return /* @__PURE__ */ jsx(
100
+ CommandPrimitive.Empty,
101
+ {
102
+ "data-slot": "command-empty",
103
+ className: cn("py-6 text-center text-sm", className),
104
+ ...props
105
+ }
106
+ );
107
+ }
108
+ function CommandGroup({
109
+ className,
110
+ ...props
111
+ }) {
112
+ return /* @__PURE__ */ jsx(
113
+ CommandPrimitive.Group,
114
+ {
115
+ "data-slot": "command-group",
116
+ className: cn(
117
+ "text-dialog-text **:[[cmdk-group-heading]]:text-text-muted overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium",
118
+ className
119
+ ),
120
+ ...props
121
+ }
122
+ );
123
+ }
124
+ function CommandSeparator({
125
+ className,
126
+ ...props
127
+ }) {
128
+ return /* @__PURE__ */ jsx(
129
+ CommandPrimitive.Separator,
130
+ {
131
+ "data-slot": "command-separator",
132
+ className: cn("bg-border -mx-1 h-px", className),
133
+ ...props
134
+ }
135
+ );
136
+ }
137
+ function CommandItem({
138
+ className,
139
+ children,
140
+ ...props
141
+ }) {
142
+ return /* @__PURE__ */ jsxs(
143
+ CommandPrimitive.Item,
144
+ {
145
+ "data-slot": "command-item",
146
+ className: cn(
147
+ 'group/command-item text-dialog-text relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*="size-"])]:size-4',
148
+ floatingItemAccentStateClass,
149
+ className
150
+ ),
151
+ ...props,
152
+ children: [
153
+ children,
154
+ /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto text-current opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
155
+ ]
156
+ }
157
+ );
158
+ }
159
+ function CommandShortcut({ className, ...props }) {
160
+ return /* @__PURE__ */ jsx(
161
+ "span",
162
+ {
163
+ "data-slot": "command-shortcut",
164
+ className: cn(
165
+ "text-text-muted group-data-selected/command-item:text-text-on-accent ml-auto text-xs tracking-widest",
166
+ className
167
+ ),
168
+ ...props
169
+ }
170
+ );
171
+ }
172
+
173
+ export {
174
+ Command,
175
+ CommandDialog,
176
+ CommandInput,
177
+ CommandList,
178
+ CommandEmpty,
179
+ CommandGroup,
180
+ CommandSeparator,
181
+ CommandItem,
182
+ CommandShortcut
183
+ };
184
+ //# sourceMappingURL=chunk-Z7ITPSUF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/command.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon, CheckIcon } from \"lucide-react\"\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@hyunsdev/ui/components/dialog\"\nimport { InputGroup, InputGroupAddon } from \"@hyunsdev/ui/components/input-group\"\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { floatingItemAccentStateClass } from \"./_styles\"\n\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"text-dialog-text flex size-full flex-col overflow-hidden rounded-[var(--radius-dialog)]! p-1\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\n \"top-1/6 translate-y-0 overflow-hidden rounded-xl! p-0 sm:max-w-xl\",\n className,\n )}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-1 pb-0\">\n <InputGroup className=\"h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n <InputGroupAddon>\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n )\n}\n\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn(\"py-6 text-center text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-dialog-text **:[[cmdk-group-heading]]:text-text-muted overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'group/command-item text-dialog-text relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*=\"size-\"])]:size-4',\n floatingItemAccentStateClass,\n className,\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto text-current opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-text-muted group-data-selected/command-item:text-text-on-accent ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,75 @@
1
+ import {
2
+ floatingSurfaceClass
3
+ } from "./chunk-O2BG2KSY.js";
4
+ import {
5
+ cn
6
+ } from "./chunk-DN2AEEA2.js";
7
+
8
+ // src/components/popover.tsx
9
+ import "react";
10
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
11
+ import { jsx } from "react/jsx-runtime";
12
+ function Popover({ ...props }) {
13
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
14
+ }
15
+ function PopoverTrigger({ ...props }) {
16
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
17
+ }
18
+ function PopoverContent({
19
+ className,
20
+ align = "center",
21
+ sideOffset = 4,
22
+ ...props
23
+ }) {
24
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
25
+ PopoverPrimitive.Content,
26
+ {
27
+ "data-slot": "popover-content",
28
+ align,
29
+ sideOffset,
30
+ className: cn(
31
+ "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-[var(--layer-popover)] flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-[var(--radius-floating)] p-2.5 text-sm outline-hidden duration-100",
32
+ floatingSurfaceClass,
33
+ className
34
+ ),
35
+ ...props
36
+ }
37
+ ) });
38
+ }
39
+ function PopoverAnchor({ ...props }) {
40
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
41
+ }
42
+ function PopoverHeader({ className, ...props }) {
43
+ return /* @__PURE__ */ jsx(
44
+ "div",
45
+ {
46
+ "data-slot": "popover-header",
47
+ className: cn("flex flex-col gap-0.5 text-sm", className),
48
+ ...props
49
+ }
50
+ );
51
+ }
52
+ function PopoverTitle({ className, ...props }) {
53
+ return /* @__PURE__ */ jsx(
54
+ "div",
55
+ {
56
+ "data-slot": "popover-title",
57
+ className: cn("font-heading font-medium", className),
58
+ ...props
59
+ }
60
+ );
61
+ }
62
+ function PopoverDescription({ className, ...props }) {
63
+ return /* @__PURE__ */ jsx("p", { "data-slot": "popover-description", className: cn("text-text-muted", className), ...props });
64
+ }
65
+
66
+ export {
67
+ Popover,
68
+ PopoverTrigger,
69
+ PopoverContent,
70
+ PopoverAnchor,
71
+ PopoverHeader,
72
+ PopoverTitle,
73
+ PopoverDescription
74
+ };
75
+ //# sourceMappingURL=chunk-ZC76ALSI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/popover.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { floatingSurfaceClass } from \"./_styles\"\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-[var(--layer-popover)] flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-[var(--radius-floating)] p-2.5 text-sm outline-hidden duration-100\",\n floatingSurfaceClass,\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-0.5 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-heading font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p data-slot=\"popover-description\" className={cn(\"text-text-muted\", className)} {...props} />\n )\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n}\n"],"mappings":";;;;;;;;AAEA,OAAuB;AAEvB,YAAY,sBAAsB;AAOzB;AADT,SAAS,QAAQ,EAAE,GAAG,MAAM,GAAuD;AACjF,SAAO,oBAAkB,uBAAjB,EAAsB,aAAU,WAAW,GAAG,OAAO;AAC/D;AAEA,SAAS,eAAe,EAAE,GAAG,MAAM,GAA0D;AAC3F,SAAO,oBAAkB,0BAAjB,EAAyB,aAAU,mBAAmB,GAAG,OAAO;AAC1E;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,GAAG;AACL,GAA0D;AACxD,SACE,oBAAkB,yBAAjB,EACC;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,cAAc,EAAE,GAAG,MAAM,GAAyD;AACzF,SAAO,oBAAkB,yBAAjB,EAAwB,aAAU,kBAAkB,GAAG,OAAO;AACxE;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAA+B;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,4BAA4B,SAAS;AAAA,MAClD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,EAAE,WAAW,GAAG,MAAM,GAA8B;AAC9E,SACE,oBAAC,OAAE,aAAU,uBAAsB,WAAW,GAAG,mBAAmB,SAAS,GAAI,GAAG,OAAO;AAE/F;","names":[]}