@zentauri-ui/zentauri-components 1.1.1 → 1.2.1

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 (290) hide show
  1. package/README.md +62 -21
  2. package/dist/chunk-2VQJ6OIL.js +31 -0
  3. package/dist/chunk-2VQJ6OIL.js.map +1 -0
  4. package/dist/chunk-73VCO5TE.mjs +29 -0
  5. package/dist/chunk-73VCO5TE.mjs.map +1 -0
  6. package/dist/chunk-BSWYZTYK.js +31 -0
  7. package/dist/chunk-BSWYZTYK.js.map +1 -0
  8. package/dist/chunk-CY5BQKRZ.mjs +29 -0
  9. package/dist/chunk-CY5BQKRZ.mjs.map +1 -0
  10. package/dist/chunk-DFEZH7TC.mjs +27 -0
  11. package/dist/chunk-DFEZH7TC.mjs.map +1 -0
  12. package/dist/chunk-FT2LMA66.mjs +25 -0
  13. package/dist/chunk-FT2LMA66.mjs.map +1 -0
  14. package/dist/chunk-JE3PD5ZA.js +107 -0
  15. package/dist/chunk-JE3PD5ZA.js.map +1 -0
  16. package/dist/chunk-JXCTEAXD.js +38 -0
  17. package/dist/chunk-JXCTEAXD.js.map +1 -0
  18. package/dist/chunk-LIJ6BDGP.mjs +36 -0
  19. package/dist/chunk-LIJ6BDGP.mjs.map +1 -0
  20. package/dist/chunk-P6YRSEOY.js +225 -0
  21. package/dist/chunk-P6YRSEOY.js.map +1 -0
  22. package/dist/chunk-PMAF6FBF.mjs +37 -0
  23. package/dist/chunk-PMAF6FBF.mjs.map +1 -0
  24. package/dist/chunk-TZ2JVWTZ.mjs +104 -0
  25. package/dist/chunk-TZ2JVWTZ.mjs.map +1 -0
  26. package/dist/chunk-UIYFEP3I.js +39 -0
  27. package/dist/chunk-UIYFEP3I.js.map +1 -0
  28. package/dist/chunk-UJ3AER3U.mjs +214 -0
  29. package/dist/chunk-UJ3AER3U.mjs.map +1 -0
  30. package/dist/chunk-UOZYPWDZ.js +32 -0
  31. package/dist/chunk-UOZYPWDZ.js.map +1 -0
  32. package/dist/chunk-WL5I7RVS.mjs +54 -0
  33. package/dist/chunk-WL5I7RVS.mjs.map +1 -0
  34. package/dist/chunk-WP7GYBRI.js +27 -0
  35. package/dist/chunk-WP7GYBRI.js.map +1 -0
  36. package/dist/chunk-YPLVTUYL.js +56 -0
  37. package/dist/chunk-YPLVTUYL.js.map +1 -0
  38. package/dist/hooks/useBodyScrollLock.d.mts +14 -0
  39. package/dist/hooks/useBodyScrollLock.d.ts +14 -0
  40. package/dist/hooks/useBodyScrollLock.js +13 -0
  41. package/dist/hooks/useBodyScrollLock.js.map +1 -0
  42. package/dist/hooks/useBodyScrollLock.mjs +4 -0
  43. package/dist/hooks/useBodyScrollLock.mjs.map +1 -0
  44. package/dist/hooks/useClickOutside.d.mts +23 -0
  45. package/dist/hooks/useClickOutside.d.ts +23 -0
  46. package/dist/hooks/useClickOutside.js +13 -0
  47. package/dist/hooks/useClickOutside.js.map +1 -0
  48. package/dist/hooks/useClickOutside.mjs +4 -0
  49. package/dist/hooks/useClickOutside.mjs.map +1 -0
  50. package/dist/hooks/useClipboard.d.mts +22 -0
  51. package/dist/hooks/useClipboard.d.ts +22 -0
  52. package/dist/hooks/useClipboard.js +51 -0
  53. package/dist/hooks/useClipboard.js.map +1 -0
  54. package/dist/hooks/useClipboard.mjs +49 -0
  55. package/dist/hooks/useClipboard.mjs.map +1 -0
  56. package/dist/hooks/useControllableState.d.mts +22 -0
  57. package/dist/hooks/useControllableState.d.ts +22 -0
  58. package/dist/hooks/useControllableState.js +13 -0
  59. package/dist/hooks/useControllableState.js.map +1 -0
  60. package/dist/hooks/useControllableState.mjs +4 -0
  61. package/dist/hooks/useControllableState.mjs.map +1 -0
  62. package/dist/hooks/useDebouncedValue.d.mts +14 -0
  63. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  64. package/dist/hooks/useDebouncedValue.js +22 -0
  65. package/dist/hooks/useDebouncedValue.js.map +1 -0
  66. package/dist/hooks/useDebouncedValue.mjs +20 -0
  67. package/dist/hooks/useDebouncedValue.mjs.map +1 -0
  68. package/dist/hooks/useDisclosure.d.mts +25 -0
  69. package/dist/hooks/useDisclosure.d.ts +25 -0
  70. package/dist/hooks/useDisclosure.js +37 -0
  71. package/dist/hooks/useDisclosure.js.map +1 -0
  72. package/dist/hooks/useDisclosure.mjs +35 -0
  73. package/dist/hooks/useDisclosure.mjs.map +1 -0
  74. package/dist/hooks/useDocumentTitle.d.mts +19 -0
  75. package/dist/hooks/useDocumentTitle.d.ts +19 -0
  76. package/dist/hooks/useDocumentTitle.js +40 -0
  77. package/dist/hooks/useDocumentTitle.js.map +1 -0
  78. package/dist/hooks/useDocumentTitle.mjs +38 -0
  79. package/dist/hooks/useDocumentTitle.mjs.map +1 -0
  80. package/dist/hooks/useFocusManagement.d.mts +24 -0
  81. package/dist/hooks/useFocusManagement.d.ts +24 -0
  82. package/dist/hooks/useFocusManagement.js +14 -0
  83. package/dist/hooks/useFocusManagement.js.map +1 -0
  84. package/dist/hooks/useFocusManagement.mjs +5 -0
  85. package/dist/hooks/useFocusManagement.mjs.map +1 -0
  86. package/dist/hooks/useHover.d.mts +15 -0
  87. package/dist/hooks/useHover.d.ts +15 -0
  88. package/dist/hooks/useHover.js +37 -0
  89. package/dist/hooks/useHover.js.map +1 -0
  90. package/dist/hooks/useHover.mjs +35 -0
  91. package/dist/hooks/useHover.mjs.map +1 -0
  92. package/dist/hooks/useInView.d.mts +19 -0
  93. package/dist/hooks/useInView.d.ts +19 -0
  94. package/dist/hooks/useInView.js +15 -0
  95. package/dist/hooks/useInView.js.map +1 -0
  96. package/dist/hooks/useInView.mjs +13 -0
  97. package/dist/hooks/useInView.mjs.map +1 -0
  98. package/dist/hooks/useIntersectionObserver.d.mts +19 -0
  99. package/dist/hooks/useIntersectionObserver.d.ts +19 -0
  100. package/dist/hooks/useIntersectionObserver.js +13 -0
  101. package/dist/hooks/useIntersectionObserver.js.map +1 -0
  102. package/dist/hooks/useIntersectionObserver.mjs +4 -0
  103. package/dist/hooks/useIntersectionObserver.mjs.map +1 -0
  104. package/dist/hooks/useIsMounted.d.mts +11 -0
  105. package/dist/hooks/useIsMounted.d.ts +11 -0
  106. package/dist/hooks/useIsMounted.js +20 -0
  107. package/dist/hooks/useIsMounted.js.map +1 -0
  108. package/dist/hooks/useIsMounted.mjs +18 -0
  109. package/dist/hooks/useIsMounted.mjs.map +1 -0
  110. package/dist/hooks/useIsomorphicLayoutEffect.d.mts +11 -0
  111. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +11 -0
  112. package/dist/hooks/useIsomorphicLayoutEffect.js +11 -0
  113. package/dist/hooks/useIsomorphicLayoutEffect.js.map +1 -0
  114. package/dist/hooks/useIsomorphicLayoutEffect.mjs +9 -0
  115. package/dist/hooks/useIsomorphicLayoutEffect.mjs.map +1 -0
  116. package/dist/hooks/useLocalStorage.d.mts +22 -0
  117. package/dist/hooks/useLocalStorage.d.ts +22 -0
  118. package/dist/hooks/useLocalStorage.js +84 -0
  119. package/dist/hooks/useLocalStorage.js.map +1 -0
  120. package/dist/hooks/useLocalStorage.mjs +82 -0
  121. package/dist/hooks/useLocalStorage.mjs.map +1 -0
  122. package/dist/hooks/useMediaQuery.d.mts +13 -0
  123. package/dist/hooks/useMediaQuery.d.ts +13 -0
  124. package/dist/hooks/useMediaQuery.js +13 -0
  125. package/dist/hooks/useMediaQuery.js.map +1 -0
  126. package/dist/hooks/useMediaQuery.mjs +4 -0
  127. package/dist/hooks/useMediaQuery.mjs.map +1 -0
  128. package/dist/hooks/useNetworkStatus.d.mts +10 -0
  129. package/dist/hooks/useNetworkStatus.d.ts +10 -0
  130. package/dist/hooks/useNetworkStatus.js +30 -0
  131. package/dist/hooks/useNetworkStatus.js.map +1 -0
  132. package/dist/hooks/useNetworkStatus.mjs +28 -0
  133. package/dist/hooks/useNetworkStatus.mjs.map +1 -0
  134. package/dist/hooks/usePageVisibility.d.mts +10 -0
  135. package/dist/hooks/usePageVisibility.d.ts +10 -0
  136. package/dist/hooks/usePageVisibility.js +28 -0
  137. package/dist/hooks/usePageVisibility.js.map +1 -0
  138. package/dist/hooks/usePageVisibility.mjs +26 -0
  139. package/dist/hooks/usePageVisibility.mjs.map +1 -0
  140. package/dist/hooks/usePagination.d.mts +5 -0
  141. package/dist/hooks/usePagination.d.ts +5 -0
  142. package/dist/hooks/usePagination.js +18 -0
  143. package/dist/hooks/usePagination.js.map +1 -0
  144. package/dist/hooks/usePagination.mjs +5 -0
  145. package/dist/hooks/usePagination.mjs.map +1 -0
  146. package/dist/hooks/usePrefersColorScheme.d.mts +10 -0
  147. package/dist/hooks/usePrefersColorScheme.d.ts +10 -0
  148. package/dist/hooks/usePrefersColorScheme.js +17 -0
  149. package/dist/hooks/usePrefersColorScheme.js.map +1 -0
  150. package/dist/hooks/usePrefersColorScheme.mjs +15 -0
  151. package/dist/hooks/usePrefersColorScheme.mjs.map +1 -0
  152. package/dist/hooks/usePrefersReducedMotion.d.mts +10 -0
  153. package/dist/hooks/usePrefersReducedMotion.d.ts +10 -0
  154. package/dist/hooks/usePrefersReducedMotion.js +13 -0
  155. package/dist/hooks/usePrefersReducedMotion.js.map +1 -0
  156. package/dist/hooks/usePrefersReducedMotion.mjs +11 -0
  157. package/dist/hooks/usePrefersReducedMotion.mjs.map +1 -0
  158. package/dist/hooks/useResizeObserver.d.mts +23 -0
  159. package/dist/hooks/useResizeObserver.d.ts +23 -0
  160. package/dist/hooks/useResizeObserver.js +38 -0
  161. package/dist/hooks/useResizeObserver.js.map +1 -0
  162. package/dist/hooks/useResizeObserver.mjs +36 -0
  163. package/dist/hooks/useResizeObserver.mjs.map +1 -0
  164. package/dist/hooks/useSessionStorage.d.mts +22 -0
  165. package/dist/hooks/useSessionStorage.d.ts +22 -0
  166. package/dist/hooks/useSessionStorage.js +58 -0
  167. package/dist/hooks/useSessionStorage.js.map +1 -0
  168. package/dist/hooks/useSessionStorage.mjs +56 -0
  169. package/dist/hooks/useSessionStorage.mjs.map +1 -0
  170. package/dist/hooks/useThrottledCallback.d.mts +14 -0
  171. package/dist/hooks/useThrottledCallback.d.ts +14 -0
  172. package/dist/hooks/useThrottledCallback.js +27 -0
  173. package/dist/hooks/useThrottledCallback.js.map +1 -0
  174. package/dist/hooks/useThrottledCallback.mjs +25 -0
  175. package/dist/hooks/useThrottledCallback.mjs.map +1 -0
  176. package/dist/hooks/useToggle.d.mts +9 -0
  177. package/dist/hooks/useToggle.d.ts +9 -0
  178. package/dist/hooks/useToggle.js +20 -0
  179. package/dist/hooks/useToggle.js.map +1 -0
  180. package/dist/hooks/useToggle.mjs +18 -0
  181. package/dist/hooks/useToggle.mjs.map +1 -0
  182. package/dist/hooks/useWindowSize.d.mts +14 -0
  183. package/dist/hooks/useWindowSize.d.ts +14 -0
  184. package/dist/hooks/useWindowSize.js +30 -0
  185. package/dist/hooks/useWindowSize.js.map +1 -0
  186. package/dist/hooks/useWindowSize.mjs +28 -0
  187. package/dist/hooks/useWindowSize.mjs.map +1 -0
  188. package/dist/hooks/utils.d.mts +8 -0
  189. package/dist/hooks/utils.d.ts +8 -0
  190. package/dist/hooks/utils.js +24 -0
  191. package/dist/hooks/utils.js.map +1 -0
  192. package/dist/hooks/utils.mjs +3 -0
  193. package/dist/hooks/utils.mjs.map +1 -0
  194. package/dist/index-ClPu5gDp.d.ts +86 -0
  195. package/dist/index-D4p9fn1o.d.mts +86 -0
  196. package/dist/types-BQ2H3yG7.d.mts +34 -0
  197. package/dist/types-BQ2H3yG7.d.ts +34 -0
  198. package/dist/ui/accordion.js +5 -5
  199. package/dist/ui/accordion.mjs +1 -1
  200. package/dist/ui/alert/animated.d.mts +13 -0
  201. package/dist/ui/alert/animated.d.ts +13 -0
  202. package/dist/ui/alert/animated.js +27 -0
  203. package/dist/ui/alert/animated.js.map +1 -0
  204. package/dist/ui/alert/animated.mjs +25 -0
  205. package/dist/ui/alert/animated.mjs.map +1 -0
  206. package/dist/ui/alert.d.mts +11 -36
  207. package/dist/ui/alert.d.ts +11 -36
  208. package/dist/ui/alert.js +40 -218
  209. package/dist/ui/alert.js.map +1 -1
  210. package/dist/ui/alert.mjs +7 -211
  211. package/dist/ui/alert.mjs.map +1 -1
  212. package/dist/ui/avatar.js +6 -6
  213. package/dist/ui/avatar.js.map +1 -1
  214. package/dist/ui/avatar.mjs +1 -1
  215. package/dist/ui/avatar.mjs.map +1 -1
  216. package/dist/ui/badge.js +2 -2
  217. package/dist/ui/badge.mjs +1 -1
  218. package/dist/ui/breadcrumb.js +7 -7
  219. package/dist/ui/breadcrumb.mjs +1 -1
  220. package/dist/ui/buttons.js +3 -3
  221. package/dist/ui/buttons.mjs +1 -1
  222. package/dist/ui/card.js +7 -7
  223. package/dist/ui/card.js.map +1 -1
  224. package/dist/ui/card.mjs +1 -1
  225. package/dist/ui/card.mjs.map +1 -1
  226. package/dist/ui/divider.js +6 -6
  227. package/dist/ui/divider.mjs +1 -1
  228. package/dist/ui/drawer.js +15 -60
  229. package/dist/ui/drawer.js.map +1 -1
  230. package/dist/ui/drawer.mjs +9 -54
  231. package/dist/ui/drawer.mjs.map +1 -1
  232. package/dist/ui/dropdown.js +6 -13
  233. package/dist/ui/dropdown.js.map +1 -1
  234. package/dist/ui/dropdown.mjs +4 -11
  235. package/dist/ui/dropdown.mjs.map +1 -1
  236. package/dist/ui/empty-state.js +6 -6
  237. package/dist/ui/empty-state.js.map +1 -1
  238. package/dist/ui/empty-state.mjs +1 -1
  239. package/dist/ui/empty-state.mjs.map +1 -1
  240. package/dist/ui/file-upload.js +3 -3
  241. package/dist/ui/file-upload.mjs +1 -1
  242. package/dist/ui/inputs.js +3 -3
  243. package/dist/ui/inputs.mjs +1 -1
  244. package/dist/ui/modal.js +16 -61
  245. package/dist/ui/modal.js.map +1 -1
  246. package/dist/ui/modal.mjs +9 -54
  247. package/dist/ui/modal.mjs.map +1 -1
  248. package/dist/ui/pagination.d.mts +3 -81
  249. package/dist/ui/pagination.d.ts +3 -81
  250. package/dist/ui/pagination.js +13 -122
  251. package/dist/ui/pagination.js.map +1 -1
  252. package/dist/ui/pagination.mjs +5 -114
  253. package/dist/ui/pagination.mjs.map +1 -1
  254. package/dist/ui/progress.js +7 -10
  255. package/dist/ui/progress.js.map +1 -1
  256. package/dist/ui/progress.mjs +1 -4
  257. package/dist/ui/progress.mjs.map +1 -1
  258. package/dist/ui/select.js +6 -6
  259. package/dist/ui/select.mjs +1 -1
  260. package/dist/ui/skeleton.js +7 -7
  261. package/dist/ui/skeleton.mjs +1 -1
  262. package/dist/ui/slider.js +9 -9
  263. package/dist/ui/slider.js.map +1 -1
  264. package/dist/ui/slider.mjs +1 -1
  265. package/dist/ui/slider.mjs.map +1 -1
  266. package/dist/ui/spinner.js +24 -10
  267. package/dist/ui/spinner.js.map +1 -1
  268. package/dist/ui/spinner.mjs +17 -3
  269. package/dist/ui/spinner.mjs.map +1 -1
  270. package/dist/ui/stepper.js +6 -6
  271. package/dist/ui/stepper.mjs +1 -1
  272. package/dist/ui/table.js +9 -9
  273. package/dist/ui/table.js.map +1 -1
  274. package/dist/ui/table.mjs +1 -1
  275. package/dist/ui/table.mjs.map +1 -1
  276. package/dist/ui/tabs.js +5 -5
  277. package/dist/ui/tabs.mjs +1 -1
  278. package/dist/ui/toast.js +7 -7
  279. package/dist/ui/toast.js.map +1 -1
  280. package/dist/ui/toast.mjs +1 -1
  281. package/dist/ui/toast.mjs.map +1 -1
  282. package/dist/ui/toggle.js +3 -3
  283. package/dist/ui/toggle.mjs +1 -1
  284. package/dist/ui/tooltip.js +2 -2
  285. package/dist/ui/tooltip.mjs +1 -1
  286. package/package.json +13 -3
  287. package/dist/chunk-B23TPTVG.mjs +0 -11
  288. package/dist/chunk-B23TPTVG.mjs.map +0 -1
  289. package/dist/chunk-WZ2GOU2J.js +0 -13
  290. package/dist/chunk-WZ2GOU2J.js.map +0 -1
@@ -1,7 +1,9 @@
1
1
  "use client";
2
- import { cn } from '../chunk-B23TPTVG.mjs';
2
+ import { useFocusManagement } from '../chunk-WL5I7RVS.mjs';
3
+ import '../chunk-PMAF6FBF.mjs';
4
+ import { cn } from '../chunk-DFEZH7TC.mjs';
3
5
  import { useReducedMotion, AnimatePresence, motion } from 'framer-motion';
4
- import { createContext, useState, useCallback, useId, useRef, useMemo, useEffect, useContext } from 'react';
6
+ import { createContext, useState, useCallback, useId, useRef, useMemo, useContext } from 'react';
5
7
  import { createPortal } from 'react-dom';
6
8
  import { cva } from 'class-variance-authority';
7
9
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -136,19 +138,6 @@ function useDrawerContext(component) {
136
138
  }
137
139
  return ctx;
138
140
  }
139
- var FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex="-1"])';
140
- function useBodyScrollLock(locked) {
141
- useEffect(() => {
142
- if (!locked) {
143
- return;
144
- }
145
- const previousOverflow = document.body.style.overflow;
146
- document.body.style.overflow = "hidden";
147
- return () => {
148
- document.body.style.overflow = previousOverflow;
149
- };
150
- }, [locked]);
151
- }
152
141
  function Drawer({
153
142
  open,
154
143
  defaultOpen = false,
@@ -228,45 +217,11 @@ function DrawerContent({
228
217
  const reduceMotion = useReducedMotion();
229
218
  const overlayMotion = drawerPanelPresets(resolvedSide)[reduceMotion ? "fade" : animation];
230
219
  const panelMotion = drawerPanelPresets(resolvedSide)[reduceMotion ? "fade" : animation];
231
- useBodyScrollLock(open);
232
- useEffect(() => {
233
- if (!open) {
234
- return;
235
- }
236
- const handleKeyDown = (event) => {
237
- if (event.key === "Escape") {
238
- setOpen(false);
239
- }
240
- };
241
- window.addEventListener("keydown", handleKeyDown);
242
- return () => window.removeEventListener("keydown", handleKeyDown);
243
- }, [open, setOpen]);
244
- useEffect(() => {
245
- if (!open) {
246
- return;
247
- }
248
- const node = contentRef.current;
249
- if (!node) {
250
- return;
251
- }
252
- const focusables = Array.from(
253
- node.querySelectorAll(FOCUSABLE_SELECTOR)
254
- ).filter((element) => element.offsetParent !== null || element === node);
255
- const target = focusables[0] ?? node;
256
- const previouslyFocused = document.activeElement;
257
- target.focus();
258
- const handleFocusIn = (event) => {
259
- if (!node.contains(event.target)) {
260
- event.stopPropagation();
261
- target.focus();
262
- }
263
- };
264
- document.addEventListener("focusin", handleFocusIn);
265
- return () => {
266
- document.removeEventListener("focusin", handleFocusIn);
267
- previouslyFocused?.focus?.();
268
- };
269
- }, [contentRef, open]);
220
+ useFocusManagement({
221
+ open,
222
+ setOpen,
223
+ contentRef
224
+ });
270
225
  const portalTarget = typeof document !== "undefined" ? document.body : null;
271
226
  if (!portalTarget) {
272
227
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/drawer/animations.ts","../../src/ui/drawer/variants.ts","../../src/ui/drawer/drawer.tsx"],"names":[],"mappings":"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","file":"drawer.mjs","sourcesContent":["import type { HTMLMotionProps } from \"framer-motion\";\n\nexport type DrawerAnimation = \"none\" | \"fade\" | \"scale\" | \"slide\";\n\ntype DrawerPresetMotionProps = Pick<\n HTMLMotionProps<\"div\">,\n \"initial\" | \"animate\" | \"exit\" | \"transition\"\n>;\n\nexport type DrawerAnimationPresets = Record<\n DrawerAnimation,\n DrawerPresetMotionProps\n>;\n\nexport const drawerPanelPresets = (\n side: \"left\" | \"right\" | \"top\" | \"bottom\",\n): DrawerAnimationPresets => ({\n none: {},\n fade: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n transition: { duration: 0.2 },\n },\n scale: {\n initial: { opacity: 0, scale: 0.98 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.98 },\n transition: { type: \"spring\", stiffness: 420, damping: 32 },\n },\n slide: {\n initial:\n side === \"left\"\n ? { x: -24, opacity: 0 }\n : side === \"right\"\n ? { x: 24, opacity: 0 }\n : side === \"top\"\n ? { y: -24, opacity: 0 }\n : { y: 24, opacity: 0 },\n animate: { x: 0, y: 0, opacity: 1 },\n exit:\n side === \"left\"\n ? { x: -16, opacity: 0 }\n : side === \"right\"\n ? { x: 16, opacity: 0 }\n : side === \"top\"\n ? { y: -16, opacity: 0 }\n : { y: 16, opacity: 0 },\n transition: { type: \"spring\", stiffness: 380, damping: 30 },\n },\n});\n","import { cva } from \"class-variance-authority\";\n\nexport const drawerOverlayVariants = cva(\n \"fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-sm\",\n);\n\nexport const drawerTriggerVariants = cva(\n \"relative inline-flex shrink-0 cursor-pointer rounded-md border\",\n {\n variants: {\n appearance: {\n default: \"bg-slate-950\",\n glass: \"border-white/15 bg-slate-950/70 backdrop-blur-xl\",\n sky: \"border-sky-600 bg-sky-950/70 backdrop-blur-xl\",\n rose: \"border-rose-600 bg-rose-950/70 backdrop-blur-xl\",\n purple: \"border-purple-600 bg-purple-950/70 backdrop-blur-xl\",\n pink: \"border-pink-600 bg-pink-950/70 backdrop-blur-xl\",\n orange: \"border-orange-600 bg-orange-950/70 backdrop-blur-xl\",\n yellow: \"border-yellow-600 bg-yellow-950/70 backdrop-blur-xl\",\n teal: \"border-teal-600 bg-teal-950/70 backdrop-blur-xl\",\n indigo: \"border-indigo-600 bg-indigo-950/70 backdrop-blur-xl\",\n emerald: \"border-emerald-600 bg-emerald-950/70 backdrop-blur-xl\",\n gray: \"border-gray-600 bg-gray-950/70 backdrop-blur-xl\",\n amber: \"border-amber-600 bg-amber-950/70 backdrop-blur-xl\",\n violet: \"border-violet-600 bg-violet-950/70 backdrop-blur-xl\",\n \"gradient-blue\":\n \"border-gradient-to-r from-blue-600 to-purple-600 bg-gradient-to-r from-blue-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-green\":\n \"border-gradient-to-r from-green-600 to-lime-600 bg-gradient-to-r from-green-950/70 to-lime-950/70 backdrop-blur-xl\",\n \"gradient-red\":\n \"border-gradient-to-r from-red-600 to-pink-600 bg-gradient-to-r from-red-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-yellow\":\n \"border-gradient-to-r from-yellow-600 to-orange-600 bg-gradient-to-r from-yellow-950/70 to-orange-950/70 backdrop-blur-xl\",\n \"gradient-purple\":\n \"border-gradient-to-r from-purple-600 to-pink-600 bg-gradient-to-r from-purple-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-teal\":\n \"border-gradient-to-r from-teal-600 to-cyan-600 bg-gradient-to-r from-teal-950/70 to-cyan-950/70 backdrop-blur-xl\",\n \"gradient-indigo\":\n \"border-gradient-to-r from-indigo-600 to-purple-600 bg-gradient-to-r from-indigo-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-pink\":\n \"border-gradient-to-r from-pink-600 to-rose-600 bg-gradient-to-r from-pink-950/70 to-rose-950/70 backdrop-blur-xl\",\n \"gradient-orange\":\n \"border-gradient-to-r from-orange-600 to-red-600 bg-gradient-to-r from-orange-950/70 to-red-950/70 backdrop-blur-xl\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n },\n },\n);\n\nexport const drawerContentVariants = cva(\n \"fixed z-50 flex max-h-[min(92vh,900px)] flex-col border border-white/10 bg-slate-950 p-6 text-slate-50 shadow-[0_24px_80px_rgba(15,23,42,0.55)] focus:outline-none\",\n {\n variants: {\n side: {\n left: \"left-0 top-0 h-full w-[min(100%,420px)]\",\n right: \"right-0 top-0 h-full w-[min(100%,420px)]\",\n top: \"left-0 top-0 w-full max-h-[min(92vh,520px)]\",\n bottom: \"bottom-0 left-0 w-full max-h-[min(92vh,520px)]\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n full: \"\",\n },\n appearance: {\n default: \"bg-slate-950\",\n glass: \"border-white/15 bg-slate-950/70 backdrop-blur-xl\",\n sky: \"border-sky-600 bg-sky-950/70 backdrop-blur-xl\",\n rose: \"border-rose-600 bg-rose-950/70 backdrop-blur-xl\",\n purple: \"border-purple-600 bg-purple-950/70 backdrop-blur-xl\",\n pink: \"border-pink-600 bg-pink-950/70 backdrop-blur-xl\",\n orange: \"border-orange-600 bg-orange-950/70 backdrop-blur-xl\",\n yellow: \"border-yellow-600 bg-yellow-950/70 backdrop-blur-xl\",\n teal: \"border-teal-600 bg-teal-950/70 backdrop-blur-xl\",\n indigo: \"border-indigo-600 bg-indigo-950/70 backdrop-blur-xl\",\n emerald: \"border-emerald-600 bg-emerald-950/70 backdrop-blur-xl\",\n gray: \"border-gray-600 bg-gray-950/70 backdrop-blur-xl\",\n amber: \"border-amber-600 bg-amber-950/70 backdrop-blur-xl\",\n violet: \"border-violet-600 bg-violet-950/70 backdrop-blur-xl\",\n \"gradient-blue\":\n \"border-gradient-to-r from-blue-600 to-purple-600 bg-gradient-to-r from-blue-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-green\":\n \"border-gradient-to-r from-green-600 to-lime-600 bg-gradient-to-r from-green-950/70 to-lime-950/70 backdrop-blur-xl\",\n \"gradient-red\":\n \"border-gradient-to-r from-red-600 to-pink-600 bg-gradient-to-r from-red-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-yellow\":\n \"border-gradient-to-r from-yellow-600 to-orange-600 bg-gradient-to-r from-yellow-950/70 to-orange-950/70 backdrop-blur-xl\",\n \"gradient-purple\":\n \"border-gradient-to-r from-purple-600 to-pink-600 bg-gradient-to-r from-purple-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-teal\":\n \"border-gradient-to-r from-teal-600 to-cyan-600 bg-gradient-to-r from-teal-950/70 to-cyan-950/70 backdrop-blur-xl\",\n \"gradient-indigo\":\n \"border-gradient-to-r from-indigo-600 to-purple-600 bg-gradient-to-r from-indigo-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-pink\":\n \"border-gradient-to-r from-pink-600 to-rose-600 bg-gradient-to-r from-pink-950/70 to-rose-950/70 backdrop-blur-xl\",\n \"gradient-orange\":\n \"border-gradient-to-r from-orange-600 to-red-600 bg-gradient-to-r from-orange-950/70 to-red-950/70 backdrop-blur-xl\",\n },\n },\n compoundVariants: [\n { side: \"left\", size: \"sm\", class: \"w-[min(100%,320px)]\" },\n { side: \"left\", size: \"md\", class: \"w-[min(100%,420px)]\" },\n { side: \"left\", size: \"lg\", class: \"w-[min(100%,520px)]\" },\n { side: \"left\", size: \"xl\", class: \"w-[min(100%,640px)]\" },\n { side: \"left\", size: \"full\", class: \"w-full max-w-none\" },\n { side: \"right\", size: \"sm\", class: \"w-[min(100%,320px)]\" },\n { side: \"right\", size: \"md\", class: \"w-[min(100%,420px)]\" },\n { side: \"right\", size: \"lg\", class: \"w-[min(100%,520px)]\" },\n { side: \"right\", size: \"xl\", class: \"w-[min(100%,640px)]\" },\n { side: \"right\", size: \"full\", class: \"w-full max-w-none\" },\n ],\n defaultVariants: {\n side: \"right\",\n size: \"md\",\n appearance: \"default\",\n },\n },\n);\n","\"use client\";\n\nimport { AnimatePresence, motion, useReducedMotion } from \"framer-motion\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport { drawerPanelPresets } from \"./animations\";\nimport type {\n DrawerContentProps,\n DrawerProps,\n DrawerSectionProps,\n DrawerTriggerProps,\n} from \"./types\";\nimport {\n drawerContentVariants,\n drawerOverlayVariants,\n drawerTriggerVariants,\n} from \"./variants\";\n\ntype DrawerCtx = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n contentRef: React.RefObject<HTMLDivElement | null>;\n};\n\nconst DrawerContext = createContext<DrawerCtx | null>(null);\n\nfunction useDrawerContext(component: string): DrawerCtx {\n const ctx = useContext(DrawerContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <Drawer>`);\n }\n return ctx;\n}\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex=\"-1\"])';\n\nfunction useBodyScrollLock(locked: boolean) {\n useEffect(() => {\n if (!locked) {\n return;\n }\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [locked]);\n}\n\nexport function Drawer({\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n}: DrawerProps) {\n const isControlled = open !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const resolvedOpen = isControlled ? Boolean(open) : uncontrolledOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const baseId = useId();\n const titleId = `${baseId}-title`;\n const descriptionId = `${baseId}-description`;\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const ctx = useMemo(\n () => ({\n open: resolvedOpen,\n setOpen,\n titleId,\n descriptionId,\n contentRef,\n }),\n [descriptionId, resolvedOpen, setOpen, titleId],\n );\n\n return (\n <DrawerContext.Provider value={ctx}>{children}</DrawerContext.Provider>\n );\n}\n\nDrawer.displayName = \"Drawer\";\n\nexport function DrawerTrigger({\n className,\n children,\n appearance,\n onClick,\n ref,\n ...rest\n}: DrawerTriggerProps) {\n const { setOpen } = useDrawerContext(\"DrawerTrigger\");\n return (\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"drawer-trigger\"\n className={cn(drawerTriggerVariants({ appearance }), className)}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nDrawerTrigger.displayName = \"DrawerTrigger\";\n\nexport function DrawerContent({\n className,\n side = \"right\",\n size,\n appearance,\n animation = \"slide\",\n children,\n ref,\n id,\n style,\n}: DrawerContentProps) {\n const { open, setOpen, titleId, descriptionId, contentRef } =\n useDrawerContext(\"DrawerContent\");\n const resolvedSide = side ?? \"right\";\n const reduceMotion = useReducedMotion();\n const overlayMotion =\n drawerPanelPresets(resolvedSide)[reduceMotion ? \"fade\" : animation];\n const panelMotion =\n drawerPanelPresets(resolvedSide)[reduceMotion ? \"fade\" : animation];\n\n useBodyScrollLock(open);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, setOpen]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n const node = contentRef.current;\n if (!node) {\n return;\n }\n const focusables = Array.from(\n node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((element) => element.offsetParent !== null || element === node);\n const target = focusables[0] ?? node;\n const previouslyFocused = document.activeElement as HTMLElement | null;\n target.focus();\n\n const handleFocusIn = (event: FocusEvent) => {\n if (!node.contains(event.target as Node)) {\n event.stopPropagation();\n target.focus();\n }\n };\n document.addEventListener(\"focusin\", handleFocusIn);\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn);\n previouslyFocused?.focus?.();\n };\n }, [contentRef, open]);\n\n const portalTarget = typeof document !== \"undefined\" ? document.body : null;\n if (!portalTarget) {\n return null;\n }\n\n return createPortal(\n <AnimatePresence>\n {open ? (\n <div className=\"fixed inset-0 z-50\" data-slot=\"drawer-portal\">\n <motion.button\n type=\"button\"\n aria-hidden\n tabIndex={-1}\n data-slot=\"drawer-overlay\"\n className={drawerOverlayVariants()}\n onClick={() => setOpen(false)}\n initial={animation === \"none\" ? false : overlayMotion.initial}\n animate={animation === \"none\" ? undefined : overlayMotion.animate}\n exit={animation === \"none\" ? undefined : overlayMotion.exit}\n transition={overlayMotion.transition}\n />\n <motion.div\n ref={(node) => {\n contentRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n data-slot=\"drawer-content\"\n tabIndex={-1}\n className={cn(\n drawerContentVariants({ side: resolvedSide, size, appearance }),\n className,\n )}\n initial={animation === \"none\" ? false : panelMotion.initial}\n animate={animation === \"none\" ? undefined : panelMotion.animate}\n exit={animation === \"none\" ? undefined : panelMotion.exit}\n transition={panelMotion.transition}\n id={id}\n style={style}\n >\n {children}\n </motion.div>\n </div>\n ) : null}\n </AnimatePresence>,\n portalTarget,\n );\n}\n\nDrawerContent.displayName = \"DrawerContent\";\n\nexport function DrawerHeader({ className, children }: DrawerSectionProps) {\n return (\n <header\n data-slot=\"drawer-header\"\n className={cn(\"mb-4 flex flex-col gap-2\", className)}\n >\n {children}\n </header>\n );\n}\n\nDrawerHeader.displayName = \"DrawerHeader\";\n\nexport function DrawerBody({ className, children }: DrawerSectionProps) {\n return (\n <div\n data-slot=\"drawer-body\"\n className={cn(\"flex-1 text-sm text-slate-300\", className)}\n >\n {children}\n </div>\n );\n}\n\nDrawerBody.displayName = \"DrawerBody\";\n\nexport function DrawerFooter({ className, children }: DrawerSectionProps) {\n return (\n <footer\n data-slot=\"drawer-footer\"\n className={cn(\"mt-6 flex justify-end gap-2\", className)}\n >\n {children}\n </footer>\n );\n}\n\nDrawerFooter.displayName = \"DrawerFooter\";\n\nexport function DrawerTitle({ className, children }: DrawerSectionProps) {\n const { titleId } = useDrawerContext(\"DrawerTitle\");\n return (\n <h2\n id={titleId}\n data-slot=\"drawer-title\"\n className={cn(\"text-lg font-semibold\", className)}\n >\n {children}\n </h2>\n );\n}\n\nDrawerTitle.displayName = \"DrawerTitle\";\n\nexport function DrawerClose({\n className,\n children,\n ...rest\n}: DrawerSectionProps) {\n const { setOpen } = useDrawerContext(\"DrawerClose\");\n return (\n <button\n type=\"button\"\n data-slot=\"drawer-close\"\n className={cn(\n \"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-md text-slate-200 transition hover:bg-white/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/30\",\n className,\n )}\n aria-label=\"Close drawer\"\n onClick={() => setOpen(false)}\n {...rest}\n >\n {children ?? \"×\"}\n </button>\n );\n}\n\nDrawerClose.displayName = \"DrawerClose\";\n"]}
1
+ {"version":3,"sources":["../../src/ui/drawer/animations.ts","../../src/ui/drawer/variants.ts","../../src/ui/drawer/drawer.tsx"],"names":[],"mappings":"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","file":"drawer.mjs","sourcesContent":["import type { HTMLMotionProps } from \"framer-motion\";\n\nexport type DrawerAnimation = \"none\" | \"fade\" | \"scale\" | \"slide\";\n\ntype DrawerPresetMotionProps = Pick<\n HTMLMotionProps<\"div\">,\n \"initial\" | \"animate\" | \"exit\" | \"transition\"\n>;\n\nexport type DrawerAnimationPresets = Record<\n DrawerAnimation,\n DrawerPresetMotionProps\n>;\n\nexport const drawerPanelPresets = (\n side: \"left\" | \"right\" | \"top\" | \"bottom\",\n): DrawerAnimationPresets => ({\n none: {},\n fade: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n transition: { duration: 0.2 },\n },\n scale: {\n initial: { opacity: 0, scale: 0.98 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.98 },\n transition: { type: \"spring\", stiffness: 420, damping: 32 },\n },\n slide: {\n initial:\n side === \"left\"\n ? { x: -24, opacity: 0 }\n : side === \"right\"\n ? { x: 24, opacity: 0 }\n : side === \"top\"\n ? { y: -24, opacity: 0 }\n : { y: 24, opacity: 0 },\n animate: { x: 0, y: 0, opacity: 1 },\n exit:\n side === \"left\"\n ? { x: -16, opacity: 0 }\n : side === \"right\"\n ? { x: 16, opacity: 0 }\n : side === \"top\"\n ? { y: -16, opacity: 0 }\n : { y: 16, opacity: 0 },\n transition: { type: \"spring\", stiffness: 380, damping: 30 },\n },\n});\n","import { cva } from \"class-variance-authority\";\n\nexport const drawerOverlayVariants = cva(\n \"fixed inset-0 z-50 bg-slate-950/70 backdrop-blur-sm\",\n);\n\nexport const drawerTriggerVariants = cva(\n \"relative inline-flex shrink-0 cursor-pointer rounded-md border\",\n {\n variants: {\n appearance: {\n default: \"bg-slate-950\",\n glass: \"border-white/15 bg-slate-950/70 backdrop-blur-xl\",\n sky: \"border-sky-600 bg-sky-950/70 backdrop-blur-xl\",\n rose: \"border-rose-600 bg-rose-950/70 backdrop-blur-xl\",\n purple: \"border-purple-600 bg-purple-950/70 backdrop-blur-xl\",\n pink: \"border-pink-600 bg-pink-950/70 backdrop-blur-xl\",\n orange: \"border-orange-600 bg-orange-950/70 backdrop-blur-xl\",\n yellow: \"border-yellow-600 bg-yellow-950/70 backdrop-blur-xl\",\n teal: \"border-teal-600 bg-teal-950/70 backdrop-blur-xl\",\n indigo: \"border-indigo-600 bg-indigo-950/70 backdrop-blur-xl\",\n emerald: \"border-emerald-600 bg-emerald-950/70 backdrop-blur-xl\",\n gray: \"border-gray-600 bg-gray-950/70 backdrop-blur-xl\",\n amber: \"border-amber-600 bg-amber-950/70 backdrop-blur-xl\",\n violet: \"border-violet-600 bg-violet-950/70 backdrop-blur-xl\",\n \"gradient-blue\":\n \"border-gradient-to-r from-blue-600 to-purple-600 bg-gradient-to-r from-blue-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-green\":\n \"border-gradient-to-r from-green-600 to-lime-600 bg-gradient-to-r from-green-950/70 to-lime-950/70 backdrop-blur-xl\",\n \"gradient-red\":\n \"border-gradient-to-r from-red-600 to-pink-600 bg-gradient-to-r from-red-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-yellow\":\n \"border-gradient-to-r from-yellow-600 to-orange-600 bg-gradient-to-r from-yellow-950/70 to-orange-950/70 backdrop-blur-xl\",\n \"gradient-purple\":\n \"border-gradient-to-r from-purple-600 to-pink-600 bg-gradient-to-r from-purple-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-teal\":\n \"border-gradient-to-r from-teal-600 to-cyan-600 bg-gradient-to-r from-teal-950/70 to-cyan-950/70 backdrop-blur-xl\",\n \"gradient-indigo\":\n \"border-gradient-to-r from-indigo-600 to-purple-600 bg-gradient-to-r from-indigo-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-pink\":\n \"border-gradient-to-r from-pink-600 to-rose-600 bg-gradient-to-r from-pink-950/70 to-rose-950/70 backdrop-blur-xl\",\n \"gradient-orange\":\n \"border-gradient-to-r from-orange-600 to-red-600 bg-gradient-to-r from-orange-950/70 to-red-950/70 backdrop-blur-xl\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n },\n },\n);\n\nexport const drawerContentVariants = cva(\n \"fixed z-50 flex max-h-[min(92vh,900px)] flex-col border border-white/10 bg-slate-950 p-6 text-slate-50 shadow-[0_24px_80px_rgba(15,23,42,0.55)] focus:outline-none\",\n {\n variants: {\n side: {\n left: \"left-0 top-0 h-full w-[min(100%,420px)]\",\n right: \"right-0 top-0 h-full w-[min(100%,420px)]\",\n top: \"left-0 top-0 w-full max-h-[min(92vh,520px)]\",\n bottom: \"bottom-0 left-0 w-full max-h-[min(92vh,520px)]\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n full: \"\",\n },\n appearance: {\n default: \"bg-slate-950\",\n glass: \"border-white/15 bg-slate-950/70 backdrop-blur-xl\",\n sky: \"border-sky-600 bg-sky-950/70 backdrop-blur-xl\",\n rose: \"border-rose-600 bg-rose-950/70 backdrop-blur-xl\",\n purple: \"border-purple-600 bg-purple-950/70 backdrop-blur-xl\",\n pink: \"border-pink-600 bg-pink-950/70 backdrop-blur-xl\",\n orange: \"border-orange-600 bg-orange-950/70 backdrop-blur-xl\",\n yellow: \"border-yellow-600 bg-yellow-950/70 backdrop-blur-xl\",\n teal: \"border-teal-600 bg-teal-950/70 backdrop-blur-xl\",\n indigo: \"border-indigo-600 bg-indigo-950/70 backdrop-blur-xl\",\n emerald: \"border-emerald-600 bg-emerald-950/70 backdrop-blur-xl\",\n gray: \"border-gray-600 bg-gray-950/70 backdrop-blur-xl\",\n amber: \"border-amber-600 bg-amber-950/70 backdrop-blur-xl\",\n violet: \"border-violet-600 bg-violet-950/70 backdrop-blur-xl\",\n \"gradient-blue\":\n \"border-gradient-to-r from-blue-600 to-purple-600 bg-gradient-to-r from-blue-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-green\":\n \"border-gradient-to-r from-green-600 to-lime-600 bg-gradient-to-r from-green-950/70 to-lime-950/70 backdrop-blur-xl\",\n \"gradient-red\":\n \"border-gradient-to-r from-red-600 to-pink-600 bg-gradient-to-r from-red-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-yellow\":\n \"border-gradient-to-r from-yellow-600 to-orange-600 bg-gradient-to-r from-yellow-950/70 to-orange-950/70 backdrop-blur-xl\",\n \"gradient-purple\":\n \"border-gradient-to-r from-purple-600 to-pink-600 bg-gradient-to-r from-purple-950/70 to-pink-950/70 backdrop-blur-xl\",\n \"gradient-teal\":\n \"border-gradient-to-r from-teal-600 to-cyan-600 bg-gradient-to-r from-teal-950/70 to-cyan-950/70 backdrop-blur-xl\",\n \"gradient-indigo\":\n \"border-gradient-to-r from-indigo-600 to-purple-600 bg-gradient-to-r from-indigo-950/70 to-purple-950/70 backdrop-blur-xl\",\n \"gradient-pink\":\n \"border-gradient-to-r from-pink-600 to-rose-600 bg-gradient-to-r from-pink-950/70 to-rose-950/70 backdrop-blur-xl\",\n \"gradient-orange\":\n \"border-gradient-to-r from-orange-600 to-red-600 bg-gradient-to-r from-orange-950/70 to-red-950/70 backdrop-blur-xl\",\n },\n },\n compoundVariants: [\n { side: \"left\", size: \"sm\", class: \"w-[min(100%,320px)]\" },\n { side: \"left\", size: \"md\", class: \"w-[min(100%,420px)]\" },\n { side: \"left\", size: \"lg\", class: \"w-[min(100%,520px)]\" },\n { side: \"left\", size: \"xl\", class: \"w-[min(100%,640px)]\" },\n { side: \"left\", size: \"full\", class: \"w-full max-w-none\" },\n { side: \"right\", size: \"sm\", class: \"w-[min(100%,320px)]\" },\n { side: \"right\", size: \"md\", class: \"w-[min(100%,420px)]\" },\n { side: \"right\", size: \"lg\", class: \"w-[min(100%,520px)]\" },\n { side: \"right\", size: \"xl\", class: \"w-[min(100%,640px)]\" },\n { side: \"right\", size: \"full\", class: \"w-full max-w-none\" },\n ],\n defaultVariants: {\n side: \"right\",\n size: \"md\",\n appearance: \"default\",\n },\n },\n);\n","\"use client\";\n\nimport { AnimatePresence, motion, useReducedMotion } from \"framer-motion\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport { drawerPanelPresets } from \"./animations\";\nimport type {\n DrawerContentProps,\n DrawerProps,\n DrawerSectionProps,\n DrawerTriggerProps,\n} from \"./types\";\nimport {\n drawerContentVariants,\n drawerOverlayVariants,\n drawerTriggerVariants,\n} from \"./variants\";\nimport { useFocusManagement } from \"../../hooks/useFocusManagement\";\n\ntype DrawerCtx = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n contentRef: React.RefObject<HTMLDivElement | null>;\n};\n\nconst DrawerContext = createContext<DrawerCtx | null>(null);\n\nfunction useDrawerContext(component: string): DrawerCtx {\n const ctx = useContext(DrawerContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <Drawer>`);\n }\n return ctx;\n}\n\nexport function Drawer({\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n}: DrawerProps) {\n const isControlled = open !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const resolvedOpen = isControlled ? Boolean(open) : uncontrolledOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const baseId = useId();\n const titleId = `${baseId}-title`;\n const descriptionId = `${baseId}-description`;\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const ctx = useMemo(\n () => ({\n open: resolvedOpen,\n setOpen,\n titleId,\n descriptionId,\n contentRef,\n }),\n [descriptionId, resolvedOpen, setOpen, titleId],\n );\n\n return (\n <DrawerContext.Provider value={ctx}>{children}</DrawerContext.Provider>\n );\n}\n\nDrawer.displayName = \"Drawer\";\n\nexport function DrawerTrigger({\n className,\n children,\n appearance,\n onClick,\n ref,\n ...rest\n}: DrawerTriggerProps) {\n const { setOpen } = useDrawerContext(\"DrawerTrigger\");\n return (\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"drawer-trigger\"\n className={cn(drawerTriggerVariants({ appearance }), className)}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nDrawerTrigger.displayName = \"DrawerTrigger\";\n\nexport function DrawerContent({\n className,\n side = \"right\",\n size,\n appearance,\n animation = \"slide\",\n children,\n ref,\n id,\n style,\n}: DrawerContentProps) {\n const { open, setOpen, titleId, descriptionId, contentRef } =\n useDrawerContext(\"DrawerContent\");\n const resolvedSide = side ?? \"right\";\n const reduceMotion = useReducedMotion();\n const overlayMotion =\n drawerPanelPresets(resolvedSide)[reduceMotion ? \"fade\" : animation];\n const panelMotion =\n drawerPanelPresets(resolvedSide)[reduceMotion ? \"fade\" : animation];\n\n useFocusManagement({\n open,\n setOpen,\n contentRef,\n });\n\n const portalTarget = typeof document !== \"undefined\" ? document.body : null;\n if (!portalTarget) {\n return null;\n }\n\n return createPortal(\n <AnimatePresence>\n {open ? (\n <div className=\"fixed inset-0 z-50\" data-slot=\"drawer-portal\">\n <motion.button\n type=\"button\"\n aria-hidden\n tabIndex={-1}\n data-slot=\"drawer-overlay\"\n className={drawerOverlayVariants()}\n onClick={() => setOpen(false)}\n initial={animation === \"none\" ? false : overlayMotion.initial}\n animate={animation === \"none\" ? undefined : overlayMotion.animate}\n exit={animation === \"none\" ? undefined : overlayMotion.exit}\n transition={overlayMotion.transition}\n />\n <motion.div\n ref={(node) => {\n contentRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n data-slot=\"drawer-content\"\n tabIndex={-1}\n className={cn(\n drawerContentVariants({ side: resolvedSide, size, appearance }),\n className,\n )}\n initial={animation === \"none\" ? false : panelMotion.initial}\n animate={animation === \"none\" ? undefined : panelMotion.animate}\n exit={animation === \"none\" ? undefined : panelMotion.exit}\n transition={panelMotion.transition}\n id={id}\n style={style}\n >\n {children}\n </motion.div>\n </div>\n ) : null}\n </AnimatePresence>,\n portalTarget,\n );\n}\n\nDrawerContent.displayName = \"DrawerContent\";\n\nexport function DrawerHeader({ className, children }: DrawerSectionProps) {\n return (\n <header\n data-slot=\"drawer-header\"\n className={cn(\"mb-4 flex flex-col gap-2\", className)}\n >\n {children}\n </header>\n );\n}\n\nDrawerHeader.displayName = \"DrawerHeader\";\n\nexport function DrawerBody({ className, children }: DrawerSectionProps) {\n return (\n <div\n data-slot=\"drawer-body\"\n className={cn(\"flex-1 text-sm text-slate-300\", className)}\n >\n {children}\n </div>\n );\n}\n\nDrawerBody.displayName = \"DrawerBody\";\n\nexport function DrawerFooter({ className, children }: DrawerSectionProps) {\n return (\n <footer\n data-slot=\"drawer-footer\"\n className={cn(\"mt-6 flex justify-end gap-2\", className)}\n >\n {children}\n </footer>\n );\n}\n\nDrawerFooter.displayName = \"DrawerFooter\";\n\nexport function DrawerTitle({ className, children }: DrawerSectionProps) {\n const { titleId } = useDrawerContext(\"DrawerTitle\");\n return (\n <h2\n id={titleId}\n data-slot=\"drawer-title\"\n className={cn(\"text-lg font-semibold\", className)}\n >\n {children}\n </h2>\n );\n}\n\nDrawerTitle.displayName = \"DrawerTitle\";\n\nexport function DrawerClose({\n className,\n children,\n ...rest\n}: DrawerSectionProps) {\n const { setOpen } = useDrawerContext(\"DrawerClose\");\n return (\n <button\n type=\"button\"\n data-slot=\"drawer-close\"\n className={cn(\n \"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-md text-slate-200 transition hover:bg-white/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/30\",\n className,\n )}\n aria-label=\"Close drawer\"\n onClick={() => setOpen(false)}\n {...rest}\n >\n {children ?? \"×\"}\n </button>\n );\n}\n\nDrawerClose.displayName = \"DrawerClose\";\n"]}
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkWZ2GOU2J_js = require('../chunk-WZ2GOU2J.js');
4
+ var chunkBSWYZTYK_js = require('../chunk-BSWYZTYK.js');
5
+ var chunkUOZYPWDZ_js = require('../chunk-UOZYPWDZ.js');
5
6
  var react = require('react');
6
7
  var fi = require('react-icons/fi');
7
8
  var classVarianceAuthority = require('class-variance-authority');
@@ -175,7 +176,7 @@ var DropdownTrigger = ({
175
176
  "button",
176
177
  {
177
178
  onClick: toggle,
178
- className: chunkWZ2GOU2J_js.cn(triggerVariants({ variant, size }), className),
179
+ className: chunkUOZYPWDZ_js.cn(triggerVariants({ variant, size }), className),
179
180
  ...props,
180
181
  children
181
182
  }
@@ -191,21 +192,13 @@ var DropdownContent = ({
191
192
  }) => {
192
193
  const { open, setOpen } = useDropdown();
193
194
  const ref = react.useRef(null);
194
- react.useEffect(() => {
195
- const handleClickOutside = (e) => {
196
- if (ref.current && !ref.current.contains(e.target)) {
197
- setOpen(false);
198
- }
199
- };
200
- document.addEventListener("mousedown", handleClickOutside);
201
- return () => document.removeEventListener("mousedown", handleClickOutside);
202
- }, [setOpen]);
195
+ chunkBSWYZTYK_js.useClickOutside({ ref, setOpen });
203
196
  if (!open) return null;
204
197
  return /* @__PURE__ */ jsxRuntime.jsx(
205
198
  "div",
206
199
  {
207
200
  ref,
208
- className: chunkWZ2GOU2J_js.cn(
201
+ className: chunkUOZYPWDZ_js.cn(
209
202
  contentVariants({ placement, spacing }),
210
203
  className,
211
204
  divider && "divide-y divide-current"
@@ -239,7 +232,7 @@ var DropdownItem = ({
239
232
  onKeyDown: (e) => {
240
233
  if (e.key === "Enter") handleClick();
241
234
  },
242
- className: chunkWZ2GOU2J_js.cn(itemVariants({ variant }), className),
235
+ className: chunkUOZYPWDZ_js.cn(itemVariants({ variant }), className),
243
236
  ...props,
244
237
  children: [
245
238
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":["cva","createContext","useContext","useState","jsx","cn","useRef","useEffect","jsxs","FiCheck"],"mappings":"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","file":"dropdown.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const triggerVariants = cva(\n \"inline-flex items-center justify-between rounded-md font-medium transition focus:outline-none cursor-pointer\",\n {\n variants: {\n variant: {\n default: \"bg-gray-900 text-white\",\n outline: \"border border-gray-300\",\n ghost: \"bg-transparent\",\n white: \"bg-white text-gray-900\",\n black: \"bg-black text-white\",\n sky: \"border border-sky-600 text-sky-600\",\n rose: \"border border-rose-600 text-rose-600\",\n purple: \"border border-purple-600 text-purple-600\",\n pink: \"border border-pink-600 text-pink-600\",\n orange: \"border border-orange-600 text-orange-600\",\n yellow: \"border border-yellow-600 text-yellow-600\",\n teal: \"border border-teal-600 text-teal-600\",\n indigo: \"border border-indigo-600 text-indigo-600\",\n emerald: \"border border-emerald-600 text-emerald-600\",\n gray: \"border border-gray-600 text-gray-600\",\n amber: \"border border-amber-600 text-amber-600\",\n violet: \"border border-violet-600 text-violet-600\",\n \"gradient-blue\":\n \"bg-gradient-to-r from-blue-600 to-purple-600 text-gradient-to-r from-blue-600 to-purple-600\",\n \"gradient-green\":\n \"bg-gradient-to-r from-green-600 to-lime-600 text-gradient-to-r from-green-600 to-lime-600\",\n \"gradient-red\":\n \"bg-gradient-to-r from-red-600 to-pink-600 text-gradient-to-r from-red-600 to-pink-600\",\n \"gradient-yellow\":\n \"bg-gradient-to-r from-yellow-600 to-orange-600 text-gradient-to-r from-yellow-600 to-orange-600\",\n \"gradient-purple\":\n \"bg-gradient-to-r from-purple-600 to-pink-600 text-gradient-to-r from-purple-600 to-pink-600\",\n \"gradient-teal\":\n \"bg-gradient-to-r from-teal-600 to-cyan-600 text-gradient-to-r from-teal-600 to-cyan-600\",\n \"gradient-indigo\":\n \"bg-gradient-to-r from-indigo-600 to-purple-600 text-gradient-to-r from-indigo-600 to-purple-600\",\n \"gradient-pink\":\n \"bg-gradient-to-r from-pink-600 to-rose-600 text-gradient-to-r from-pink-600 to-rose-600\",\n \"gradient-orange\":\n \"bg-gradient-to-r from-orange-600 to-red-600 text-gradient-to-r from-orange-600 to-red-600\",\n },\n size: {\n sm: \"px-2 py-1 text-sm\",\n md: \"px-3 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport const contentVariants = cva(\n \"absolute min-w-[200px] rounded-md p-2 shadow-md z-50 border\",\n {\n variants: {\n placement: {\n top: \"bottom-full mb-2\",\n bottom: \"top-full mt-2\",\n left: \"right-full mr-2\",\n right: \"left-full ml-2\",\n },\n spacing: {\n none: \"space-y-0\",\n default: \"space-y-1\",\n sm: \"space-y-2\",\n md: \"space-y-3\",\n lg: \"space-y-4\",\n xl: \"space-y-5\",\n },\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n },\n);\n\nexport const itemVariants = cva(\n \"flex items-center justify-between px-3 py-2 text-sm cursor-pointer rounded-md transition-colors\",\n {\n variants: {\n variant: {\n default: \"hover:bg-gray-100 hover:text-gray-900 text-gray-100\",\n outline:\n \"hover:bg-gray-100 hover:text-gray-900 border border-white text-gray-100\",\n ghost:\n \"hover:bg-gray-100 hover:text-gray-900 bg-transparent text-gray-100\",\n white: \"hover:bg-gray-100 hover:text-gray-900 bg-white text-gray-900\",\n black: \"hover:bg-gray-100 hover:text-gray-900 bg-black text-white\",\n sky: \"hover:bg-sky-100 hover:text-sky-600 bg-sky-200 text-sky-800\",\n rose: \"hover:bg-rose-100 hover:text-rose-600 bg-rose-200 text-rose-800\",\n purple:\n \"hover:bg-purple-100 hover:text-purple-600 bg-purple-200 text-purple-800\",\n pink: \"hover:bg-pink-100 hover:text-pink-600 bg-pink-200 text-pink-800\",\n orange:\n \"hover:bg-orange-100 hover:text-orange-600 bg-orange-200 text-orange-800\",\n yellow:\n \"hover:bg-yellow-100 hover:text-yellow-600 bg-yellow-200 text-yellow-800\",\n teal: \"hover:bg-teal-100 hover:text-teal-600 bg-teal-200 text-teal-800\",\n indigo:\n \"hover:bg-indigo-100 hover:text-indigo-600 bg-indigo-200 text-indigo-800\",\n emerald:\n \"hover:bg-emerald-100 hover:text-emerald-600 bg-emerald-200 text-emerald-800\",\n gray: \"hover:bg-gray-100 hover:text-gray-900 bg-gray-200 text-gray-800\",\n amber:\n \"hover:bg-amber-100 hover:text-amber-600 bg-amber-200 text-amber-800\",\n violet:\n \"hover:bg-violet-100 hover:text-violet-600 bg-violet-200 text-violet-800\",\n \"gradient-blue\":\n \"hover:bg-gradient-to-r from-blue-600 to-purple-600 hover:text-blue-900 bg-gradient-to-r from-blue-200 to-purple-200 text-blue-800\",\n \"gradient-green\":\n \"hover:bg-gradient-to-r from-green-600 to-lime-600 hover:text-green-900 bg-gradient-to-r from-green-200 to-lime-200 text-green-800\",\n \"gradient-red\":\n \"hover:bg-gradient-to-r from-red-600 to-pink-600 hover:text-red-900 bg-gradient-to-r from-red-200 to-pink-200 text-red-800\",\n \"gradient-yellow\":\n \"hover:bg-gradient-to-r from-yellow-600 to-orange-600 hover:text-yellow-900 bg-gradient-to-r from-yellow-200 to-orange-200 text-yellow-800\",\n \"gradient-purple\":\n \"hover:bg-gradient-to-r from-purple-600 to-pink-600 hover:text-purple-900 bg-gradient-to-r from-purple-200 to-pink-200 text-purple-800\",\n \"gradient-teal\":\n \"hover:bg-gradient-to-r from-teal-600 to-cyan-600 hover:text-teal-900 bg-gradient-to-r from-teal-200 to-cyan-200 text-teal-800\",\n \"gradient-indigo\":\n \"hover:bg-gradient-to-r from-indigo-600 to-purple-600 hover:text-indigo-900 bg-gradient-to-r from-indigo-200 to-purple-200 text-indigo-800\",\n \"gradient-pink\":\n \"hover:bg-gradient-to-r from-pink-600 to-rose-600 hover:text-pink-900 bg-gradient-to-r from-pink-200 to-rose-200 text-pink-800\",\n \"gradient-orange\":\n \"hover:bg-gradient-to-r from-orange-600 to-red-600 hover:text-orange-900 bg-gradient-to-r from-orange-200 to-red-200 text-orange-800\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n","\"use client\";\n\nimport { createContext, useContext, useState, useRef, useEffect } from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle } = useDropdown();\n\n return (\n <button\n onClick={toggle}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [setOpen]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n return (\n <div\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleClick();\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":["cva","createContext","useContext","useState","jsx","cn","useRef","useClickOutside","jsxs","FiCheck"],"mappings":"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","file":"dropdown.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const triggerVariants = cva(\n \"inline-flex items-center justify-between rounded-md font-medium transition focus:outline-none cursor-pointer\",\n {\n variants: {\n variant: {\n default: \"bg-gray-900 text-white\",\n outline: \"border border-gray-300\",\n ghost: \"bg-transparent\",\n white: \"bg-white text-gray-900\",\n black: \"bg-black text-white\",\n sky: \"border border-sky-600 text-sky-600\",\n rose: \"border border-rose-600 text-rose-600\",\n purple: \"border border-purple-600 text-purple-600\",\n pink: \"border border-pink-600 text-pink-600\",\n orange: \"border border-orange-600 text-orange-600\",\n yellow: \"border border-yellow-600 text-yellow-600\",\n teal: \"border border-teal-600 text-teal-600\",\n indigo: \"border border-indigo-600 text-indigo-600\",\n emerald: \"border border-emerald-600 text-emerald-600\",\n gray: \"border border-gray-600 text-gray-600\",\n amber: \"border border-amber-600 text-amber-600\",\n violet: \"border border-violet-600 text-violet-600\",\n \"gradient-blue\":\n \"bg-gradient-to-r from-blue-600 to-purple-600 text-gradient-to-r from-blue-600 to-purple-600\",\n \"gradient-green\":\n \"bg-gradient-to-r from-green-600 to-lime-600 text-gradient-to-r from-green-600 to-lime-600\",\n \"gradient-red\":\n \"bg-gradient-to-r from-red-600 to-pink-600 text-gradient-to-r from-red-600 to-pink-600\",\n \"gradient-yellow\":\n \"bg-gradient-to-r from-yellow-600 to-orange-600 text-gradient-to-r from-yellow-600 to-orange-600\",\n \"gradient-purple\":\n \"bg-gradient-to-r from-purple-600 to-pink-600 text-gradient-to-r from-purple-600 to-pink-600\",\n \"gradient-teal\":\n \"bg-gradient-to-r from-teal-600 to-cyan-600 text-gradient-to-r from-teal-600 to-cyan-600\",\n \"gradient-indigo\":\n \"bg-gradient-to-r from-indigo-600 to-purple-600 text-gradient-to-r from-indigo-600 to-purple-600\",\n \"gradient-pink\":\n \"bg-gradient-to-r from-pink-600 to-rose-600 text-gradient-to-r from-pink-600 to-rose-600\",\n \"gradient-orange\":\n \"bg-gradient-to-r from-orange-600 to-red-600 text-gradient-to-r from-orange-600 to-red-600\",\n },\n size: {\n sm: \"px-2 py-1 text-sm\",\n md: \"px-3 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport const contentVariants = cva(\n \"absolute min-w-[200px] rounded-md p-2 shadow-md z-50 border\",\n {\n variants: {\n placement: {\n top: \"bottom-full mb-2\",\n bottom: \"top-full mt-2\",\n left: \"right-full mr-2\",\n right: \"left-full ml-2\",\n },\n spacing: {\n none: \"space-y-0\",\n default: \"space-y-1\",\n sm: \"space-y-2\",\n md: \"space-y-3\",\n lg: \"space-y-4\",\n xl: \"space-y-5\",\n },\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n },\n);\n\nexport const itemVariants = cva(\n \"flex items-center justify-between px-3 py-2 text-sm cursor-pointer rounded-md transition-colors\",\n {\n variants: {\n variant: {\n default: \"hover:bg-gray-100 hover:text-gray-900 text-gray-100\",\n outline:\n \"hover:bg-gray-100 hover:text-gray-900 border border-white text-gray-100\",\n ghost:\n \"hover:bg-gray-100 hover:text-gray-900 bg-transparent text-gray-100\",\n white: \"hover:bg-gray-100 hover:text-gray-900 bg-white text-gray-900\",\n black: \"hover:bg-gray-100 hover:text-gray-900 bg-black text-white\",\n sky: \"hover:bg-sky-100 hover:text-sky-600 bg-sky-200 text-sky-800\",\n rose: \"hover:bg-rose-100 hover:text-rose-600 bg-rose-200 text-rose-800\",\n purple:\n \"hover:bg-purple-100 hover:text-purple-600 bg-purple-200 text-purple-800\",\n pink: \"hover:bg-pink-100 hover:text-pink-600 bg-pink-200 text-pink-800\",\n orange:\n \"hover:bg-orange-100 hover:text-orange-600 bg-orange-200 text-orange-800\",\n yellow:\n \"hover:bg-yellow-100 hover:text-yellow-600 bg-yellow-200 text-yellow-800\",\n teal: \"hover:bg-teal-100 hover:text-teal-600 bg-teal-200 text-teal-800\",\n indigo:\n \"hover:bg-indigo-100 hover:text-indigo-600 bg-indigo-200 text-indigo-800\",\n emerald:\n \"hover:bg-emerald-100 hover:text-emerald-600 bg-emerald-200 text-emerald-800\",\n gray: \"hover:bg-gray-100 hover:text-gray-900 bg-gray-200 text-gray-800\",\n amber:\n \"hover:bg-amber-100 hover:text-amber-600 bg-amber-200 text-amber-800\",\n violet:\n \"hover:bg-violet-100 hover:text-violet-600 bg-violet-200 text-violet-800\",\n \"gradient-blue\":\n \"hover:bg-gradient-to-r from-blue-600 to-purple-600 hover:text-blue-900 bg-gradient-to-r from-blue-200 to-purple-200 text-blue-800\",\n \"gradient-green\":\n \"hover:bg-gradient-to-r from-green-600 to-lime-600 hover:text-green-900 bg-gradient-to-r from-green-200 to-lime-200 text-green-800\",\n \"gradient-red\":\n \"hover:bg-gradient-to-r from-red-600 to-pink-600 hover:text-red-900 bg-gradient-to-r from-red-200 to-pink-200 text-red-800\",\n \"gradient-yellow\":\n \"hover:bg-gradient-to-r from-yellow-600 to-orange-600 hover:text-yellow-900 bg-gradient-to-r from-yellow-200 to-orange-200 text-yellow-800\",\n \"gradient-purple\":\n \"hover:bg-gradient-to-r from-purple-600 to-pink-600 hover:text-purple-900 bg-gradient-to-r from-purple-200 to-pink-200 text-purple-800\",\n \"gradient-teal\":\n \"hover:bg-gradient-to-r from-teal-600 to-cyan-600 hover:text-teal-900 bg-gradient-to-r from-teal-200 to-cyan-200 text-teal-800\",\n \"gradient-indigo\":\n \"hover:bg-gradient-to-r from-indigo-600 to-purple-600 hover:text-indigo-900 bg-gradient-to-r from-indigo-200 to-purple-200 text-indigo-800\",\n \"gradient-pink\":\n \"hover:bg-gradient-to-r from-pink-600 to-rose-600 hover:text-pink-900 bg-gradient-to-r from-pink-200 to-rose-200 text-pink-800\",\n \"gradient-orange\":\n \"hover:bg-gradient-to-r from-orange-600 to-red-600 hover:text-orange-900 bg-gradient-to-r from-orange-200 to-red-200 text-orange-800\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n","\"use client\";\n\nimport { createContext, useContext, useState, useRef, useEffect } from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle } = useDropdown();\n\n return (\n <button\n onClick={toggle}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useClickOutside({ ref, setOpen });\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n return (\n <div\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleClick();\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
- import { cn } from '../chunk-B23TPTVG.mjs';
3
- import { createContext, useState, useRef, useEffect, useContext } from 'react';
2
+ import { useClickOutside } from '../chunk-CY5BQKRZ.mjs';
3
+ import { cn } from '../chunk-DFEZH7TC.mjs';
4
+ import { createContext, useState, useRef, useContext } from 'react';
4
5
  import { FiCheck } from 'react-icons/fi';
5
6
  import { cva } from 'class-variance-authority';
6
7
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -189,15 +190,7 @@ var DropdownContent = ({
189
190
  }) => {
190
191
  const { open, setOpen } = useDropdown();
191
192
  const ref = useRef(null);
192
- useEffect(() => {
193
- const handleClickOutside = (e) => {
194
- if (ref.current && !ref.current.contains(e.target)) {
195
- setOpen(false);
196
- }
197
- };
198
- document.addEventListener("mousedown", handleClickOutside);
199
- return () => document.removeEventListener("mousedown", handleClickOutside);
200
- }, [setOpen]);
193
+ useClickOutside({ ref, setOpen });
201
194
  if (!open) return null;
202
195
  return /* @__PURE__ */ jsx(
203
196
  "div",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"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","file":"dropdown.mjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const triggerVariants = cva(\n \"inline-flex items-center justify-between rounded-md font-medium transition focus:outline-none cursor-pointer\",\n {\n variants: {\n variant: {\n default: \"bg-gray-900 text-white\",\n outline: \"border border-gray-300\",\n ghost: \"bg-transparent\",\n white: \"bg-white text-gray-900\",\n black: \"bg-black text-white\",\n sky: \"border border-sky-600 text-sky-600\",\n rose: \"border border-rose-600 text-rose-600\",\n purple: \"border border-purple-600 text-purple-600\",\n pink: \"border border-pink-600 text-pink-600\",\n orange: \"border border-orange-600 text-orange-600\",\n yellow: \"border border-yellow-600 text-yellow-600\",\n teal: \"border border-teal-600 text-teal-600\",\n indigo: \"border border-indigo-600 text-indigo-600\",\n emerald: \"border border-emerald-600 text-emerald-600\",\n gray: \"border border-gray-600 text-gray-600\",\n amber: \"border border-amber-600 text-amber-600\",\n violet: \"border border-violet-600 text-violet-600\",\n \"gradient-blue\":\n \"bg-gradient-to-r from-blue-600 to-purple-600 text-gradient-to-r from-blue-600 to-purple-600\",\n \"gradient-green\":\n \"bg-gradient-to-r from-green-600 to-lime-600 text-gradient-to-r from-green-600 to-lime-600\",\n \"gradient-red\":\n \"bg-gradient-to-r from-red-600 to-pink-600 text-gradient-to-r from-red-600 to-pink-600\",\n \"gradient-yellow\":\n \"bg-gradient-to-r from-yellow-600 to-orange-600 text-gradient-to-r from-yellow-600 to-orange-600\",\n \"gradient-purple\":\n \"bg-gradient-to-r from-purple-600 to-pink-600 text-gradient-to-r from-purple-600 to-pink-600\",\n \"gradient-teal\":\n \"bg-gradient-to-r from-teal-600 to-cyan-600 text-gradient-to-r from-teal-600 to-cyan-600\",\n \"gradient-indigo\":\n \"bg-gradient-to-r from-indigo-600 to-purple-600 text-gradient-to-r from-indigo-600 to-purple-600\",\n \"gradient-pink\":\n \"bg-gradient-to-r from-pink-600 to-rose-600 text-gradient-to-r from-pink-600 to-rose-600\",\n \"gradient-orange\":\n \"bg-gradient-to-r from-orange-600 to-red-600 text-gradient-to-r from-orange-600 to-red-600\",\n },\n size: {\n sm: \"px-2 py-1 text-sm\",\n md: \"px-3 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport const contentVariants = cva(\n \"absolute min-w-[200px] rounded-md p-2 shadow-md z-50 border\",\n {\n variants: {\n placement: {\n top: \"bottom-full mb-2\",\n bottom: \"top-full mt-2\",\n left: \"right-full mr-2\",\n right: \"left-full ml-2\",\n },\n spacing: {\n none: \"space-y-0\",\n default: \"space-y-1\",\n sm: \"space-y-2\",\n md: \"space-y-3\",\n lg: \"space-y-4\",\n xl: \"space-y-5\",\n },\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n },\n);\n\nexport const itemVariants = cva(\n \"flex items-center justify-between px-3 py-2 text-sm cursor-pointer rounded-md transition-colors\",\n {\n variants: {\n variant: {\n default: \"hover:bg-gray-100 hover:text-gray-900 text-gray-100\",\n outline:\n \"hover:bg-gray-100 hover:text-gray-900 border border-white text-gray-100\",\n ghost:\n \"hover:bg-gray-100 hover:text-gray-900 bg-transparent text-gray-100\",\n white: \"hover:bg-gray-100 hover:text-gray-900 bg-white text-gray-900\",\n black: \"hover:bg-gray-100 hover:text-gray-900 bg-black text-white\",\n sky: \"hover:bg-sky-100 hover:text-sky-600 bg-sky-200 text-sky-800\",\n rose: \"hover:bg-rose-100 hover:text-rose-600 bg-rose-200 text-rose-800\",\n purple:\n \"hover:bg-purple-100 hover:text-purple-600 bg-purple-200 text-purple-800\",\n pink: \"hover:bg-pink-100 hover:text-pink-600 bg-pink-200 text-pink-800\",\n orange:\n \"hover:bg-orange-100 hover:text-orange-600 bg-orange-200 text-orange-800\",\n yellow:\n \"hover:bg-yellow-100 hover:text-yellow-600 bg-yellow-200 text-yellow-800\",\n teal: \"hover:bg-teal-100 hover:text-teal-600 bg-teal-200 text-teal-800\",\n indigo:\n \"hover:bg-indigo-100 hover:text-indigo-600 bg-indigo-200 text-indigo-800\",\n emerald:\n \"hover:bg-emerald-100 hover:text-emerald-600 bg-emerald-200 text-emerald-800\",\n gray: \"hover:bg-gray-100 hover:text-gray-900 bg-gray-200 text-gray-800\",\n amber:\n \"hover:bg-amber-100 hover:text-amber-600 bg-amber-200 text-amber-800\",\n violet:\n \"hover:bg-violet-100 hover:text-violet-600 bg-violet-200 text-violet-800\",\n \"gradient-blue\":\n \"hover:bg-gradient-to-r from-blue-600 to-purple-600 hover:text-blue-900 bg-gradient-to-r from-blue-200 to-purple-200 text-blue-800\",\n \"gradient-green\":\n \"hover:bg-gradient-to-r from-green-600 to-lime-600 hover:text-green-900 bg-gradient-to-r from-green-200 to-lime-200 text-green-800\",\n \"gradient-red\":\n \"hover:bg-gradient-to-r from-red-600 to-pink-600 hover:text-red-900 bg-gradient-to-r from-red-200 to-pink-200 text-red-800\",\n \"gradient-yellow\":\n \"hover:bg-gradient-to-r from-yellow-600 to-orange-600 hover:text-yellow-900 bg-gradient-to-r from-yellow-200 to-orange-200 text-yellow-800\",\n \"gradient-purple\":\n \"hover:bg-gradient-to-r from-purple-600 to-pink-600 hover:text-purple-900 bg-gradient-to-r from-purple-200 to-pink-200 text-purple-800\",\n \"gradient-teal\":\n \"hover:bg-gradient-to-r from-teal-600 to-cyan-600 hover:text-teal-900 bg-gradient-to-r from-teal-200 to-cyan-200 text-teal-800\",\n \"gradient-indigo\":\n \"hover:bg-gradient-to-r from-indigo-600 to-purple-600 hover:text-indigo-900 bg-gradient-to-r from-indigo-200 to-purple-200 text-indigo-800\",\n \"gradient-pink\":\n \"hover:bg-gradient-to-r from-pink-600 to-rose-600 hover:text-pink-900 bg-gradient-to-r from-pink-200 to-rose-200 text-pink-800\",\n \"gradient-orange\":\n \"hover:bg-gradient-to-r from-orange-600 to-red-600 hover:text-orange-900 bg-gradient-to-r from-orange-200 to-red-200 text-orange-800\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n","\"use client\";\n\nimport { createContext, useContext, useState, useRef, useEffect } from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle } = useDropdown();\n\n return (\n <button\n onClick={toggle}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [setOpen]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n return (\n <div\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleClick();\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"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","file":"dropdown.mjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const triggerVariants = cva(\n \"inline-flex items-center justify-between rounded-md font-medium transition focus:outline-none cursor-pointer\",\n {\n variants: {\n variant: {\n default: \"bg-gray-900 text-white\",\n outline: \"border border-gray-300\",\n ghost: \"bg-transparent\",\n white: \"bg-white text-gray-900\",\n black: \"bg-black text-white\",\n sky: \"border border-sky-600 text-sky-600\",\n rose: \"border border-rose-600 text-rose-600\",\n purple: \"border border-purple-600 text-purple-600\",\n pink: \"border border-pink-600 text-pink-600\",\n orange: \"border border-orange-600 text-orange-600\",\n yellow: \"border border-yellow-600 text-yellow-600\",\n teal: \"border border-teal-600 text-teal-600\",\n indigo: \"border border-indigo-600 text-indigo-600\",\n emerald: \"border border-emerald-600 text-emerald-600\",\n gray: \"border border-gray-600 text-gray-600\",\n amber: \"border border-amber-600 text-amber-600\",\n violet: \"border border-violet-600 text-violet-600\",\n \"gradient-blue\":\n \"bg-gradient-to-r from-blue-600 to-purple-600 text-gradient-to-r from-blue-600 to-purple-600\",\n \"gradient-green\":\n \"bg-gradient-to-r from-green-600 to-lime-600 text-gradient-to-r from-green-600 to-lime-600\",\n \"gradient-red\":\n \"bg-gradient-to-r from-red-600 to-pink-600 text-gradient-to-r from-red-600 to-pink-600\",\n \"gradient-yellow\":\n \"bg-gradient-to-r from-yellow-600 to-orange-600 text-gradient-to-r from-yellow-600 to-orange-600\",\n \"gradient-purple\":\n \"bg-gradient-to-r from-purple-600 to-pink-600 text-gradient-to-r from-purple-600 to-pink-600\",\n \"gradient-teal\":\n \"bg-gradient-to-r from-teal-600 to-cyan-600 text-gradient-to-r from-teal-600 to-cyan-600\",\n \"gradient-indigo\":\n \"bg-gradient-to-r from-indigo-600 to-purple-600 text-gradient-to-r from-indigo-600 to-purple-600\",\n \"gradient-pink\":\n \"bg-gradient-to-r from-pink-600 to-rose-600 text-gradient-to-r from-pink-600 to-rose-600\",\n \"gradient-orange\":\n \"bg-gradient-to-r from-orange-600 to-red-600 text-gradient-to-r from-orange-600 to-red-600\",\n },\n size: {\n sm: \"px-2 py-1 text-sm\",\n md: \"px-3 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport const contentVariants = cva(\n \"absolute min-w-[200px] rounded-md p-2 shadow-md z-50 border\",\n {\n variants: {\n placement: {\n top: \"bottom-full mb-2\",\n bottom: \"top-full mt-2\",\n left: \"right-full mr-2\",\n right: \"left-full ml-2\",\n },\n spacing: {\n none: \"space-y-0\",\n default: \"space-y-1\",\n sm: \"space-y-2\",\n md: \"space-y-3\",\n lg: \"space-y-4\",\n xl: \"space-y-5\",\n },\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n },\n);\n\nexport const itemVariants = cva(\n \"flex items-center justify-between px-3 py-2 text-sm cursor-pointer rounded-md transition-colors\",\n {\n variants: {\n variant: {\n default: \"hover:bg-gray-100 hover:text-gray-900 text-gray-100\",\n outline:\n \"hover:bg-gray-100 hover:text-gray-900 border border-white text-gray-100\",\n ghost:\n \"hover:bg-gray-100 hover:text-gray-900 bg-transparent text-gray-100\",\n white: \"hover:bg-gray-100 hover:text-gray-900 bg-white text-gray-900\",\n black: \"hover:bg-gray-100 hover:text-gray-900 bg-black text-white\",\n sky: \"hover:bg-sky-100 hover:text-sky-600 bg-sky-200 text-sky-800\",\n rose: \"hover:bg-rose-100 hover:text-rose-600 bg-rose-200 text-rose-800\",\n purple:\n \"hover:bg-purple-100 hover:text-purple-600 bg-purple-200 text-purple-800\",\n pink: \"hover:bg-pink-100 hover:text-pink-600 bg-pink-200 text-pink-800\",\n orange:\n \"hover:bg-orange-100 hover:text-orange-600 bg-orange-200 text-orange-800\",\n yellow:\n \"hover:bg-yellow-100 hover:text-yellow-600 bg-yellow-200 text-yellow-800\",\n teal: \"hover:bg-teal-100 hover:text-teal-600 bg-teal-200 text-teal-800\",\n indigo:\n \"hover:bg-indigo-100 hover:text-indigo-600 bg-indigo-200 text-indigo-800\",\n emerald:\n \"hover:bg-emerald-100 hover:text-emerald-600 bg-emerald-200 text-emerald-800\",\n gray: \"hover:bg-gray-100 hover:text-gray-900 bg-gray-200 text-gray-800\",\n amber:\n \"hover:bg-amber-100 hover:text-amber-600 bg-amber-200 text-amber-800\",\n violet:\n \"hover:bg-violet-100 hover:text-violet-600 bg-violet-200 text-violet-800\",\n \"gradient-blue\":\n \"hover:bg-gradient-to-r from-blue-600 to-purple-600 hover:text-blue-900 bg-gradient-to-r from-blue-200 to-purple-200 text-blue-800\",\n \"gradient-green\":\n \"hover:bg-gradient-to-r from-green-600 to-lime-600 hover:text-green-900 bg-gradient-to-r from-green-200 to-lime-200 text-green-800\",\n \"gradient-red\":\n \"hover:bg-gradient-to-r from-red-600 to-pink-600 hover:text-red-900 bg-gradient-to-r from-red-200 to-pink-200 text-red-800\",\n \"gradient-yellow\":\n \"hover:bg-gradient-to-r from-yellow-600 to-orange-600 hover:text-yellow-900 bg-gradient-to-r from-yellow-200 to-orange-200 text-yellow-800\",\n \"gradient-purple\":\n \"hover:bg-gradient-to-r from-purple-600 to-pink-600 hover:text-purple-900 bg-gradient-to-r from-purple-200 to-pink-200 text-purple-800\",\n \"gradient-teal\":\n \"hover:bg-gradient-to-r from-teal-600 to-cyan-600 hover:text-teal-900 bg-gradient-to-r from-teal-200 to-cyan-200 text-teal-800\",\n \"gradient-indigo\":\n \"hover:bg-gradient-to-r from-indigo-600 to-purple-600 hover:text-indigo-900 bg-gradient-to-r from-indigo-200 to-purple-200 text-indigo-800\",\n \"gradient-pink\":\n \"hover:bg-gradient-to-r from-pink-600 to-rose-600 hover:text-pink-900 bg-gradient-to-r from-pink-200 to-rose-200 text-pink-800\",\n \"gradient-orange\":\n \"hover:bg-gradient-to-r from-orange-600 to-red-600 hover:text-orange-900 bg-gradient-to-r from-orange-200 to-red-200 text-orange-800\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n","\"use client\";\n\nimport { createContext, useContext, useState, useRef, useEffect } from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle } = useDropdown();\n\n return (\n <button\n onClick={toggle}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useClickOutside({ ref, setOpen });\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n return (\n <div\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleClick();\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkWZ2GOU2J_js = require('../chunk-WZ2GOU2J.js');
4
+ var chunkUOZYPWDZ_js = require('../chunk-UOZYPWDZ.js');
5
5
  var react = require('react');
6
6
  var framerMotion = require('framer-motion');
7
7
  var classVarianceAuthority = require('class-variance-authority');
@@ -95,7 +95,7 @@ function EmptyState(props) {
95
95
  ref,
96
96
  "data-slot": "empty-state",
97
97
  "aria-live": "polite",
98
- className: chunkWZ2GOU2J_js.cn(
98
+ className: chunkUOZYPWDZ_js.cn(
99
99
  emptyStateVariants({ size, appearance, align }),
100
100
  className
101
101
  ),
@@ -115,7 +115,7 @@ function EmptyStateIcon({
115
115
  "div",
116
116
  {
117
117
  "data-slot": "empty-state-icon",
118
- className: chunkWZ2GOU2J_js.cn("text-slate-300", className),
118
+ className: chunkUOZYPWDZ_js.cn("text-slate-300", className),
119
119
  children
120
120
  }
121
121
  );
@@ -130,7 +130,7 @@ function EmptyStateTitle({
130
130
  "h2",
131
131
  {
132
132
  "data-slot": "empty-state-title",
133
- className: chunkWZ2GOU2J_js.cn(emptyStateTitleVariants({ size }), className),
133
+ className: chunkUOZYPWDZ_js.cn(emptyStateTitleVariants({ size }), className),
134
134
  children
135
135
  }
136
136
  );
@@ -145,7 +145,7 @@ function EmptyStateDescription({
145
145
  "p",
146
146
  {
147
147
  "data-slot": "empty-state-description",
148
- className: chunkWZ2GOU2J_js.cn(emptyStateDescriptionVariants({ size }), className),
148
+ className: chunkUOZYPWDZ_js.cn(emptyStateDescriptionVariants({ size }), className),
149
149
  children
150
150
  }
151
151
  );
@@ -155,7 +155,7 @@ function EmptyStateAction({
155
155
  className,
156
156
  children
157
157
  }) {
158
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "empty-state-action", className: chunkWZ2GOU2J_js.cn("mt-2", className), children });
158
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "empty-state-action", className: chunkUOZYPWDZ_js.cn("mt-2", className), children });
159
159
  }
160
160
  EmptyStateAction.displayName = "EmptyStateAction";
161
161
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/empty-state/animations.ts","../../src/ui/empty-state/variants.ts","../../src/ui/empty-state/empty-state.tsx"],"names":["cva","createContext","useContext","useMemo","jsx","motion","cn"],"mappings":";;;;;;;;;AAcO,IAAM,0BAAA,GAAyD;AAAA,EACpE,MAAM,EAAC;AAAA,EACP,KAAA,EAAO;AAAA,IACL,UAAA,EAAY,EAAE,CAAA,EAAG,EAAA,EAAG;AAAA,IACpB,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG,GAC5D;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAC5B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA;AAAU,GAChD;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,IAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAC5B,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG;AAE9D;AC5BO,IAAM,kBAAA,GAAqBA,0BAAA;AAAA,EAChC,+CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,UAAA,EAAY;AAAA,QACV,OAAA,EAAS,eAAA;AAAA,QACT,KAAA,EAAO,gBAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,uBAAA;AAAA,QACP,MAAA,EAAQ,0BAAA;AAAA,QACR,GAAA,EAAK;AAAA;AACP,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,UAAA,EAAY,SAAA;AAAA,MACZ,KAAA,EAAO;AAAA;AACT;AAEJ;AAEO,IAAM,uBAAA,GAA0BA,2BAAI,8BAAA,EAAgC;AAAA,EACzE,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAC3B,CAAC;AAEM,IAAM,6BAAA,GAAgCA,2BAAI,yBAAA,EAA2B;AAAA,EAC1E,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAC3B,CAAC;ACjCD,IAAM,qBAAA,GAAwBC,oBAA8B,IAAI,CAAA;AAEhE,SAAS,iBAAA,GAAoC;AAC3C,EAAA,OAAOC,iBAAW,qBAAqB,CAAA;AACzC;AAEO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,IAAA,GAAO,IAAA;AAAA,IACP,UAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,GAAY,MAAA;AAAA,IACZ,QAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AACJ,EAAA,MAAM,WAAA,GAAc,2BAA2B,SAAS,CAAA;AACxD,EAAA,MAAM,MAAMC,aAAA,CAAQ,MAAM,QAAQ,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAE9C,EAAA,uBACEC,cAAA,CAAC,qBAAA,CAAsB,QAAA,EAAtB,EAA+B,OAAO,GAAA,EACrC,QAAA,kBAAAA,cAAA;AAAA,IAACC,mBAAA,CAAO,OAAA;AAAA,IAAP;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAWC,mBAAA;AAAA,QACT,kBAAA,CAAmB,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AAAA,QAC9C;AAAA,OACF;AAAA,MACA,OAAA,EAAS,SAAA,KAAc,MAAA,GAAS,KAAA,GAAQ,MAAA;AAAA,MACvC,GAAG,WAAA;AAAA,MACH,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AAElB,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEF,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAWE,mBAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MAExC;AAAA;AAAA,GACH;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAEtB,SAAS,eAAA,CAAgB;AAAA,EAC9B,SAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,OAAO,iBAAA,EAAkB;AAC/B,EAAA,uBACEF,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,WAAWE,mBAAA,CAAG,uBAAA,CAAwB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAEzD;AAAA;AAAA,GACH;AAEJ;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAEvB,SAAS,qBAAA,CAAsB;AAAA,EACpC,SAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,OAAO,iBAAA,EAAkB;AAC/B,EAAA,uBACEF,cAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,WAAWE,mBAAA,CAAG,6BAAA,CAA8B,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAE/D;AAAA;AAAA,GACH;AAEJ;AAEA,qBAAA,CAAsB,WAAA,GAAc,uBAAA;AAE7B,SAAS,gBAAA,CAAiB;AAAA,EAC/B,SAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEF,cAAA,CAAC,SAAI,WAAA,EAAU,oBAAA,EAAqB,WAAWE,mBAAA,CAAG,MAAA,EAAQ,SAAS,CAAA,EAChE,QAAA,EACH,CAAA;AAEJ;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"empty-state.js","sourcesContent":["import type { HTMLMotionProps } from \"framer-motion\";\n\nimport type { EmptyStateAnimation } from \"./types\";\n\ntype EmptyStatePresetMotionProps = Pick<\n HTMLMotionProps<\"div\">,\n \"initial\" | \"animate\" | \"transition\" | \"whileHover\"\n>;\n\nexport type EmptyStateAnimationPresets = Record<\n EmptyStateAnimation,\n EmptyStatePresetMotionProps\n>;\n\nexport const emptyStateAnimationPresets: EmptyStateAnimationPresets = {\n none: {},\n float: {\n whileHover: { y: -4 },\n transition: { type: \"spring\", stiffness: 260, damping: 22 },\n },\n fade: {\n initial: { opacity: 0, y: 8 },\n animate: { opacity: 1, y: 0 },\n transition: { duration: 0.25, ease: \"easeOut\" },\n },\n \"slide-up\": {\n initial: { opacity: 0, y: 16 },\n animate: { opacity: 1, y: 0 },\n transition: { type: \"spring\", stiffness: 380, damping: 28 },\n },\n};\n","import { cva } from \"class-variance-authority\";\n\nexport const emptyStateVariants = cva(\n \"flex w-full flex-col items-center text-center\",\n {\n variants: {\n size: {\n sm: \"gap-2 p-4 text-sm\",\n md: \"gap-3 p-6 text-sm\",\n lg: \"gap-4 p-8 text-base\",\n },\n appearance: {\n default: \"text-slate-50\",\n ghost: \"text-slate-200\",\n card: \"rounded-2xl border border-white/10 bg-white/5 p-8 text-slate-50 shadow-[0_18px_48px_rgba(15,23,42,0.35)]\",\n },\n align: {\n start: \"items-start text-left\",\n center: \"items-center text-center\",\n end: \"items-end text-right\",\n },\n },\n defaultVariants: {\n size: \"md\",\n appearance: \"default\",\n align: \"center\",\n },\n },\n);\n\nexport const emptyStateTitleVariants = cva(\"font-semibold tracking-tight\", {\n variants: {\n size: {\n sm: \"text-base\",\n md: \"text-lg\",\n lg: \"text-xl\",\n },\n },\n defaultVariants: { size: \"md\" },\n});\n\nexport const emptyStateDescriptionVariants = cva(\"max-w-md text-slate-400\", {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: { size: \"md\" },\n});\n","\"use client\";\n\nimport { createContext, useContext, useMemo } from \"react\";\nimport { motion } from \"framer-motion\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport { emptyStateAnimationPresets } from \"./animations\";\nimport type { EmptyStateProps, EmptyStateSectionProps } from \"./types\";\nimport {\n emptyStateDescriptionVariants,\n emptyStateTitleVariants,\n emptyStateVariants,\n} from \"./variants\";\n\ntype EmptyStateSize = NonNullable<EmptyStateProps[\"size\"]>;\n\nconst EmptyStateSizeContext = createContext<EmptyStateSize>(\"md\");\n\nfunction useEmptyStateSize(): EmptyStateSize {\n return useContext(EmptyStateSizeContext);\n}\n\nexport function EmptyState(props: EmptyStateProps) {\n const {\n className,\n size = \"md\",\n appearance,\n align,\n animation = \"none\",\n children,\n ref,\n ...rest\n } = props;\n const motionProps = emptyStateAnimationPresets[animation];\n const ctx = useMemo(() => size ?? \"md\", [size]);\n\n return (\n <EmptyStateSizeContext.Provider value={ctx}>\n <motion.section\n ref={ref}\n data-slot=\"empty-state\"\n aria-live=\"polite\"\n className={cn(\n emptyStateVariants({ size, appearance, align }),\n className,\n )}\n initial={animation === \"none\" ? false : undefined}\n {...motionProps}\n {...rest}\n >\n {children}\n </motion.section>\n </EmptyStateSizeContext.Provider>\n );\n}\n\nEmptyState.displayName = \"EmptyState\";\n\nexport function EmptyStateIcon({\n className,\n children,\n}: EmptyStateSectionProps) {\n return (\n <div\n data-slot=\"empty-state-icon\"\n className={cn(\"text-slate-300\", className)}\n >\n {children}\n </div>\n );\n}\n\nEmptyStateIcon.displayName = \"EmptyStateIcon\";\n\nexport function EmptyStateTitle({\n className,\n children,\n}: EmptyStateSectionProps) {\n const size = useEmptyStateSize();\n return (\n <h2\n data-slot=\"empty-state-title\"\n className={cn(emptyStateTitleVariants({ size }), className)}\n >\n {children}\n </h2>\n );\n}\n\nEmptyStateTitle.displayName = \"EmptyStateTitle\";\n\nexport function EmptyStateDescription({\n className,\n children,\n}: EmptyStateSectionProps) {\n const size = useEmptyStateSize();\n return (\n <p\n data-slot=\"empty-state-description\"\n className={cn(emptyStateDescriptionVariants({ size }), className)}\n >\n {children}\n </p>\n );\n}\n\nEmptyStateDescription.displayName = \"EmptyStateDescription\";\n\nexport function EmptyStateAction({\n className,\n children,\n}: EmptyStateSectionProps) {\n return (\n <div data-slot=\"empty-state-action\" className={cn(\"mt-2\", className)}>\n {children}\n </div>\n );\n}\n\nEmptyStateAction.displayName = \"EmptyStateAction\";\n"]}
1
+ {"version":3,"sources":["../../src/ui/empty-state/animations.ts","../../src/ui/empty-state/variants.ts","../../src/ui/empty-state/empty-state.tsx"],"names":["cva","createContext","useContext","useMemo","jsx","motion","cn"],"mappings":"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","file":"empty-state.js","sourcesContent":["import type { HTMLMotionProps } from \"framer-motion\";\n\nimport type { EmptyStateAnimation } from \"./types\";\n\ntype EmptyStatePresetMotionProps = Pick<\n HTMLMotionProps<\"div\">,\n \"initial\" | \"animate\" | \"transition\" | \"whileHover\"\n>;\n\nexport type EmptyStateAnimationPresets = Record<\n EmptyStateAnimation,\n EmptyStatePresetMotionProps\n>;\n\nexport const emptyStateAnimationPresets: EmptyStateAnimationPresets = {\n none: {},\n float: {\n whileHover: { y: -4 },\n transition: { type: \"spring\", stiffness: 260, damping: 22 },\n },\n fade: {\n initial: { opacity: 0, y: 8 },\n animate: { opacity: 1, y: 0 },\n transition: { duration: 0.25, ease: \"easeOut\" },\n },\n \"slide-up\": {\n initial: { opacity: 0, y: 16 },\n animate: { opacity: 1, y: 0 },\n transition: { type: \"spring\", stiffness: 380, damping: 28 },\n },\n};\n","import { cva } from \"class-variance-authority\";\n\nexport const emptyStateVariants = cva(\n \"flex w-full flex-col items-center text-center\",\n {\n variants: {\n size: {\n sm: \"gap-2 p-4 text-sm\",\n md: \"gap-3 p-6 text-sm\",\n lg: \"gap-4 p-8 text-base\",\n },\n appearance: {\n default: \"text-slate-50\",\n ghost: \"text-slate-200\",\n card: \"rounded-2xl border border-white/10 bg-white/5 p-8 text-slate-50 shadow-[0_18px_48px_rgba(15,23,42,0.35)]\",\n },\n align: {\n start: \"items-start text-left\",\n center: \"items-center text-center\",\n end: \"items-end text-right\",\n },\n },\n defaultVariants: {\n size: \"md\",\n appearance: \"default\",\n align: \"center\",\n },\n },\n);\n\nexport const emptyStateTitleVariants = cva(\"font-semibold tracking-tight\", {\n variants: {\n size: {\n sm: \"text-base\",\n md: \"text-lg\",\n lg: \"text-xl\",\n },\n },\n defaultVariants: { size: \"md\" },\n});\n\nexport const emptyStateDescriptionVariants = cva(\"max-w-md text-slate-400\", {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: { size: \"md\" },\n});\n","\"use client\";\n\nimport { createContext, useContext, useMemo } from \"react\";\nimport { motion } from \"framer-motion\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport { emptyStateAnimationPresets } from \"./animations\";\nimport type { EmptyStateProps, EmptyStateSectionProps, EmptyStateSize } from \"./types\";\nimport {\n emptyStateDescriptionVariants,\n emptyStateTitleVariants,\n emptyStateVariants,\n} from \"./variants\";\n\nconst EmptyStateSizeContext = createContext<EmptyStateSize>(\"md\");\n\nfunction useEmptyStateSize(): EmptyStateSize {\n return useContext(EmptyStateSizeContext);\n}\n\nexport function EmptyState(props: EmptyStateProps) {\n const {\n className,\n size = \"md\",\n appearance,\n align,\n animation = \"none\",\n children,\n ref,\n ...rest\n } = props;\n const motionProps = emptyStateAnimationPresets[animation];\n const ctx = useMemo(() => size ?? \"md\", [size]);\n\n return (\n <EmptyStateSizeContext.Provider value={ctx}>\n <motion.section\n ref={ref}\n data-slot=\"empty-state\"\n aria-live=\"polite\"\n className={cn(\n emptyStateVariants({ size, appearance, align }),\n className,\n )}\n initial={animation === \"none\" ? false : undefined}\n {...motionProps}\n {...rest}\n >\n {children}\n </motion.section>\n </EmptyStateSizeContext.Provider>\n );\n}\n\nEmptyState.displayName = \"EmptyState\";\n\nexport function EmptyStateIcon({\n className,\n children,\n}: EmptyStateSectionProps) {\n return (\n <div\n data-slot=\"empty-state-icon\"\n className={cn(\"text-slate-300\", className)}\n >\n {children}\n </div>\n );\n}\n\nEmptyStateIcon.displayName = \"EmptyStateIcon\";\n\nexport function EmptyStateTitle({\n className,\n children,\n}: EmptyStateSectionProps) {\n const size = useEmptyStateSize();\n return (\n <h2\n data-slot=\"empty-state-title\"\n className={cn(emptyStateTitleVariants({ size }), className)}\n >\n {children}\n </h2>\n );\n}\n\nEmptyStateTitle.displayName = \"EmptyStateTitle\";\n\nexport function EmptyStateDescription({\n className,\n children,\n}: EmptyStateSectionProps) {\n const size = useEmptyStateSize();\n return (\n <p\n data-slot=\"empty-state-description\"\n className={cn(emptyStateDescriptionVariants({ size }), className)}\n >\n {children}\n </p>\n );\n}\n\nEmptyStateDescription.displayName = \"EmptyStateDescription\";\n\nexport function EmptyStateAction({\n className,\n children,\n}: EmptyStateSectionProps) {\n return (\n <div data-slot=\"empty-state-action\" className={cn(\"mt-2\", className)}>\n {children}\n </div>\n );\n}\n\nEmptyStateAction.displayName = \"EmptyStateAction\";\n"]}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { cn } from '../chunk-B23TPTVG.mjs';
2
+ import { cn } from '../chunk-DFEZH7TC.mjs';
3
3
  import { createContext, useMemo, useContext } from 'react';
4
4
  import { motion } from 'framer-motion';
5
5
  import { cva } from 'class-variance-authority';