@thangnqdev/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/README.md +196 -0
  2. package/dist/Label-DWOlgSNW.d.cts +14 -0
  3. package/dist/Label-DWOlgSNW.d.ts +14 -0
  4. package/dist/bento/index.cjs +140 -0
  5. package/dist/bento/index.cjs.map +1 -0
  6. package/dist/bento/index.d.cts +4 -0
  7. package/dist/bento/index.d.ts +4 -0
  8. package/dist/bento/index.js +4 -0
  9. package/dist/bento/index.js.map +1 -0
  10. package/dist/bento/styles.css +46 -0
  11. package/dist/buttons/index.cjs +365 -0
  12. package/dist/buttons/index.cjs.map +1 -0
  13. package/dist/buttons/index.d.cts +4 -0
  14. package/dist/buttons/index.d.ts +4 -0
  15. package/dist/buttons/index.js +5 -0
  16. package/dist/buttons/index.js.map +1 -0
  17. package/dist/buttons/styles.css +6 -0
  18. package/dist/chunk-2OXZK6IP.js +514 -0
  19. package/dist/chunk-2OXZK6IP.js.map +1 -0
  20. package/dist/chunk-4S6L5V7X.js +15 -0
  21. package/dist/chunk-4S6L5V7X.js.map +1 -0
  22. package/dist/chunk-5FZ6ZFII.js +728 -0
  23. package/dist/chunk-5FZ6ZFII.js.map +1 -0
  24. package/dist/chunk-66VWUJEI.js +86 -0
  25. package/dist/chunk-66VWUJEI.js.map +1 -0
  26. package/dist/chunk-A7P3O5Z5.js +163 -0
  27. package/dist/chunk-A7P3O5Z5.js.map +1 -0
  28. package/dist/chunk-ATYGDTMK.js +257 -0
  29. package/dist/chunk-ATYGDTMK.js.map +1 -0
  30. package/dist/chunk-C4SUXMI3.js +138 -0
  31. package/dist/chunk-C4SUXMI3.js.map +1 -0
  32. package/dist/chunk-EU2LPUYP.js +25 -0
  33. package/dist/chunk-EU2LPUYP.js.map +1 -0
  34. package/dist/chunk-F5Q7BTMH.js +1991 -0
  35. package/dist/chunk-F5Q7BTMH.js.map +1 -0
  36. package/dist/chunk-GXI2H5XA.js +46 -0
  37. package/dist/chunk-GXI2H5XA.js.map +1 -0
  38. package/dist/chunk-H3LCNPMC.js +101 -0
  39. package/dist/chunk-H3LCNPMC.js.map +1 -0
  40. package/dist/chunk-IABPUCAQ.js +19 -0
  41. package/dist/chunk-IABPUCAQ.js.map +1 -0
  42. package/dist/chunk-KJRBRTQE.js +101 -0
  43. package/dist/chunk-KJRBRTQE.js.map +1 -0
  44. package/dist/chunk-LBUBXUYQ.js +40 -0
  45. package/dist/chunk-LBUBXUYQ.js.map +1 -0
  46. package/dist/chunk-LWFRUJRU.js +537 -0
  47. package/dist/chunk-LWFRUJRU.js.map +1 -0
  48. package/dist/chunk-NFVONJUK.js +882 -0
  49. package/dist/chunk-NFVONJUK.js.map +1 -0
  50. package/dist/chunk-PF4ZHGVW.js +284 -0
  51. package/dist/chunk-PF4ZHGVW.js.map +1 -0
  52. package/dist/chunk-WAFHC4DQ.js +366 -0
  53. package/dist/chunk-WAFHC4DQ.js.map +1 -0
  54. package/dist/chunk-X76KBH4Y.js +71 -0
  55. package/dist/chunk-X76KBH4Y.js.map +1 -0
  56. package/dist/core/index.cjs +103 -0
  57. package/dist/core/index.cjs.map +1 -0
  58. package/dist/core/index.d.cts +3 -0
  59. package/dist/core/index.d.ts +3 -0
  60. package/dist/core/index.js +4 -0
  61. package/dist/core/index.js.map +1 -0
  62. package/dist/core/styles.css +128 -0
  63. package/dist/data-display/index.cjs +1023 -0
  64. package/dist/data-display/index.cjs.map +1 -0
  65. package/dist/data-display/index.d.cts +4 -0
  66. package/dist/data-display/index.d.ts +4 -0
  67. package/dist/data-display/index.js +6 -0
  68. package/dist/data-display/index.js.map +1 -0
  69. package/dist/data-display/styles.css +4 -0
  70. package/dist/feedback/index.cjs +368 -0
  71. package/dist/feedback/index.cjs.map +1 -0
  72. package/dist/feedback/index.d.cts +4 -0
  73. package/dist/feedback/index.d.ts +4 -0
  74. package/dist/feedback/index.js +4 -0
  75. package/dist/feedback/index.js.map +1 -0
  76. package/dist/feedback/styles.css +4 -0
  77. package/dist/forms/index.cjs +2287 -0
  78. package/dist/forms/index.cjs.map +1 -0
  79. package/dist/forms/index.d.cts +5 -0
  80. package/dist/forms/index.d.ts +5 -0
  81. package/dist/forms/index.js +10 -0
  82. package/dist/forms/index.js.map +1 -0
  83. package/dist/forms/styles.css +6 -0
  84. package/dist/glass/index.cjs +165 -0
  85. package/dist/glass/index.cjs.map +1 -0
  86. package/dist/glass/index.d.cts +4 -0
  87. package/dist/glass/index.d.ts +4 -0
  88. package/dist/glass/index.js +4 -0
  89. package/dist/glass/index.js.map +1 -0
  90. package/dist/glass/styles.css +81 -0
  91. package/dist/index-BTvkbCIj.d.cts +146 -0
  92. package/dist/index-BTvkbCIj.d.ts +146 -0
  93. package/dist/index-BkRqGNG1.d.cts +201 -0
  94. package/dist/index-BkRqGNG1.d.ts +201 -0
  95. package/dist/index-BlPcGeW-.d.cts +45 -0
  96. package/dist/index-BlPcGeW-.d.ts +45 -0
  97. package/dist/index-BzOCqvC6.d.cts +32 -0
  98. package/dist/index-BzOCqvC6.d.ts +32 -0
  99. package/dist/index-CCeWYAvn.d.cts +83 -0
  100. package/dist/index-COQ7uwt9.d.cts +44 -0
  101. package/dist/index-COQ7uwt9.d.ts +44 -0
  102. package/dist/index-CenuF_P2.d.cts +221 -0
  103. package/dist/index-CenuF_P2.d.ts +221 -0
  104. package/dist/index-Cle6QzQl.d.ts +371 -0
  105. package/dist/index-D6fE7w-b.d.cts +90 -0
  106. package/dist/index-D6fE7w-b.d.ts +90 -0
  107. package/dist/index-DR8cfJUG.d.ts +83 -0
  108. package/dist/index-DzcWh1Hs.d.cts +131 -0
  109. package/dist/index-DzcWh1Hs.d.ts +131 -0
  110. package/dist/index-TyK-Ldpy.d.cts +371 -0
  111. package/dist/index-ugj5s6a3.d.cts +95 -0
  112. package/dist/index-ugj5s6a3.d.ts +95 -0
  113. package/dist/index.cjs +6400 -0
  114. package/dist/index.cjs.map +1 -0
  115. package/dist/index.d.cts +16 -0
  116. package/dist/index.d.ts +16 -0
  117. package/dist/index.js +21 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/layout/index.cjs +516 -0
  120. package/dist/layout/index.cjs.map +1 -0
  121. package/dist/layout/index.d.cts +4 -0
  122. package/dist/layout/index.d.ts +4 -0
  123. package/dist/layout/index.js +4 -0
  124. package/dist/layout/index.js.map +1 -0
  125. package/dist/layout/styles.css +8 -0
  126. package/dist/navigation/index.cjs +673 -0
  127. package/dist/navigation/index.cjs.map +1 -0
  128. package/dist/navigation/index.d.cts +2 -0
  129. package/dist/navigation/index.d.ts +2 -0
  130. package/dist/navigation/index.js +8 -0
  131. package/dist/navigation/index.js.map +1 -0
  132. package/dist/navigation/styles.css +4 -0
  133. package/dist/overlays/index.cjs +954 -0
  134. package/dist/overlays/index.cjs.map +1 -0
  135. package/dist/overlays/index.d.cts +4 -0
  136. package/dist/overlays/index.d.ts +4 -0
  137. package/dist/overlays/index.js +9 -0
  138. package/dist/overlays/index.js.map +1 -0
  139. package/dist/overlays/styles.css +8 -0
  140. package/dist/styles.css +333 -0
  141. package/dist/typography/index.cjs +311 -0
  142. package/dist/typography/index.cjs.map +1 -0
  143. package/dist/typography/index.d.cts +5 -0
  144. package/dist/typography/index.d.ts +5 -0
  145. package/dist/typography/index.js +6 -0
  146. package/dist/typography/index.js.map +1 -0
  147. package/dist/typography/styles.css +5 -0
  148. package/llms.txt +113 -0
  149. package/package.json +116 -0
  150. package/src/bento/BentoCard.tsx +140 -0
  151. package/src/bento/BentoGrid.tsx +50 -0
  152. package/src/bento/index.ts +2 -0
  153. package/src/bento/tokens.css +46 -0
  154. package/src/buttons/Button.tsx +104 -0
  155. package/src/buttons/ButtonGroup.tsx +43 -0
  156. package/src/buttons/IconButton.tsx +79 -0
  157. package/src/buttons/SplitButton.tsx +86 -0
  158. package/src/buttons/ToggleButton.tsx +157 -0
  159. package/src/buttons/index.ts +5 -0
  160. package/src/buttons/tokens.css +6 -0
  161. package/src/core/ThemeProvider.tsx +123 -0
  162. package/src/core/index.ts +2 -0
  163. package/src/core/tokens.css +128 -0
  164. package/src/data-display/Accordion.tsx +147 -0
  165. package/src/data-display/Avatar.tsx +134 -0
  166. package/src/data-display/Card.tsx +112 -0
  167. package/src/data-display/Carousel.tsx +130 -0
  168. package/src/data-display/Chip.tsx +74 -0
  169. package/src/data-display/DataTablePro.tsx +356 -0
  170. package/src/data-display/StatCard.tsx +60 -0
  171. package/src/data-display/Table.tsx +74 -0
  172. package/src/data-display/Timeline.tsx +62 -0
  173. package/src/data-display/TreeView.tsx +140 -0
  174. package/src/data-display/index.ts +10 -0
  175. package/src/data-display/tokens.css +4 -0
  176. package/src/feedback/Alert.tsx +80 -0
  177. package/src/feedback/EmptyState.tsx +45 -0
  178. package/src/feedback/ProgressBar.tsx +174 -0
  179. package/src/feedback/Skeleton.tsx +66 -0
  180. package/src/feedback/Spinner.tsx +65 -0
  181. package/src/feedback/index.ts +5 -0
  182. package/src/feedback/tokens.css +4 -0
  183. package/src/forms/Checkbox.tsx +69 -0
  184. package/src/forms/CheckboxGroup.tsx +29 -0
  185. package/src/forms/Combobox.tsx +368 -0
  186. package/src/forms/DatePicker.tsx +480 -0
  187. package/src/forms/FileUpload.tsx +222 -0
  188. package/src/forms/FormField.tsx +115 -0
  189. package/src/forms/Input.tsx +151 -0
  190. package/src/forms/MaskedInput.tsx +97 -0
  191. package/src/forms/NumberInput.tsx +248 -0
  192. package/src/forms/PasswordInput.tsx +35 -0
  193. package/src/forms/PinInput.tsx +125 -0
  194. package/src/forms/Radio.tsx +142 -0
  195. package/src/forms/RangeSlider.tsx +111 -0
  196. package/src/forms/SearchInput.tsx +34 -0
  197. package/src/forms/Select.tsx +103 -0
  198. package/src/forms/Slider.tsx +85 -0
  199. package/src/forms/Switch.tsx +95 -0
  200. package/src/forms/Textarea.tsx +114 -0
  201. package/src/forms/index.ts +18 -0
  202. package/src/forms/tokens.css +6 -0
  203. package/src/glass/GlassBadge.tsx +61 -0
  204. package/src/glass/GlassButton.tsx +59 -0
  205. package/src/glass/GlassCard.tsx +71 -0
  206. package/src/glass/index.ts +3 -0
  207. package/src/glass/tokens.css +81 -0
  208. package/src/index.ts +26 -0
  209. package/src/layout/AspectRatio.tsx +39 -0
  210. package/src/layout/Container.tsx +53 -0
  211. package/src/layout/Divider.tsx +61 -0
  212. package/src/layout/Flex.tsx +79 -0
  213. package/src/layout/Grid.tsx +124 -0
  214. package/src/layout/PageLayout.tsx +59 -0
  215. package/src/layout/ScrollArea.tsx +43 -0
  216. package/src/layout/Section.tsx +47 -0
  217. package/src/layout/Spacer.tsx +30 -0
  218. package/src/layout/Stack.tsx +88 -0
  219. package/src/layout/index.ts +10 -0
  220. package/src/layout/tokens.css +8 -0
  221. package/src/navigation/Breadcrumb.tsx +73 -0
  222. package/src/navigation/CommandPalette.tsx +142 -0
  223. package/src/navigation/DropdownMenu.tsx +160 -0
  224. package/src/navigation/Pagination.tsx +114 -0
  225. package/src/navigation/Stepper.tsx +93 -0
  226. package/src/navigation/Tabs.tsx +133 -0
  227. package/src/navigation/index.ts +6 -0
  228. package/src/navigation/tokens.css +4 -0
  229. package/src/overlays/AlertDialog.tsx +54 -0
  230. package/src/overlays/BottomSheet.tsx +123 -0
  231. package/src/overlays/ContextMenu.tsx +119 -0
  232. package/src/overlays/Drawer.tsx +145 -0
  233. package/src/overlays/FocusTrap.tsx +49 -0
  234. package/src/overlays/HoverCard.tsx +72 -0
  235. package/src/overlays/Modal.tsx +219 -0
  236. package/src/overlays/Popover.tsx +126 -0
  237. package/src/overlays/Portal.tsx +23 -0
  238. package/src/overlays/Toast.tsx +137 -0
  239. package/src/overlays/Tooltip.tsx +100 -0
  240. package/src/overlays/index.ts +11 -0
  241. package/src/overlays/tokens.css +8 -0
  242. package/src/styles/tokens.css +2 -0
  243. package/src/typography/Blockquote.tsx +32 -0
  244. package/src/typography/Code.tsx +89 -0
  245. package/src/typography/Heading.tsx +56 -0
  246. package/src/typography/Kbd.tsx +25 -0
  247. package/src/typography/Label.tsx +47 -0
  248. package/src/typography/Link.tsx +56 -0
  249. package/src/typography/Text.tsx +62 -0
  250. package/src/typography/index.ts +7 -0
  251. package/src/typography/tokens.css +5 -0
  252. package/src/utils/cn.ts +6 -0
  253. package/ui-contract.json +62 -0
@@ -0,0 +1,728 @@
1
+ import { Popover } from './chunk-H3LCNPMC.js';
2
+ import { FocusTrap } from './chunk-LBUBXUYQ.js';
3
+ import { Portal } from './chunk-IABPUCAQ.js';
4
+ import { Kbd } from './chunk-EU2LPUYP.js';
5
+ import { Button } from './chunk-66VWUJEI.js';
6
+ import { __export, cn } from './chunk-4S6L5V7X.js';
7
+ import { createContext, useContext, useEffect, forwardRef, useState, useRef, useCallback } from 'react';
8
+ import { cva } from 'class-variance-authority';
9
+ import { X, AlertCircle, AlertTriangle, CheckCircle2, Info } from 'lucide-react';
10
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
11
+
12
+ // src/overlays/index.ts
13
+ var overlays_exports = {};
14
+ __export(overlays_exports, {
15
+ AlertDialog: () => AlertDialog,
16
+ BottomSheet: () => BottomSheet,
17
+ BottomSheetBody: () => BottomSheetBody,
18
+ BottomSheetFooter: () => BottomSheetFooter,
19
+ BottomSheetHeader: () => BottomSheetHeader,
20
+ ContextMenu: () => ContextMenu,
21
+ ContextMenuItem: () => ContextMenuItem,
22
+ ContextMenuSeparator: () => ContextMenuSeparator,
23
+ Drawer: () => Drawer,
24
+ DrawerBody: () => DrawerBody,
25
+ DrawerFooter: () => DrawerFooter,
26
+ DrawerHeader: () => DrawerHeader,
27
+ FocusTrap: () => FocusTrap,
28
+ HoverCard: () => HoverCard,
29
+ Modal: () => Modal,
30
+ ModalBody: () => ModalBody,
31
+ ModalCloseButton: () => ModalCloseButton,
32
+ ModalContent: () => ModalContent,
33
+ ModalDescription: () => ModalDescription,
34
+ ModalFooter: () => ModalFooter,
35
+ ModalHeader: () => ModalHeader,
36
+ ModalOverlay: () => ModalOverlay,
37
+ ModalTitle: () => ModalTitle,
38
+ Popover: () => Popover,
39
+ Portal: () => Portal,
40
+ ToasterProvider: () => ToasterProvider,
41
+ Tooltip: () => Tooltip,
42
+ drawerVariants: () => drawerVariants,
43
+ modalContentVariants: () => modalContentVariants,
44
+ toastVariants: () => toastVariants,
45
+ tooltipVariants: () => tooltipVariants,
46
+ useDrawer: () => useDrawer,
47
+ useModal: () => useModal,
48
+ useToast: () => useToast
49
+ });
50
+ var ModalContext = createContext(null);
51
+ function useModal() {
52
+ const context = useContext(ModalContext);
53
+ if (!context) {
54
+ throw new Error("Modal compound components must be used within a <Modal />");
55
+ }
56
+ return context;
57
+ }
58
+ function Modal({
59
+ isOpen,
60
+ onClose,
61
+ children,
62
+ closeOnEsc = true,
63
+ closeOnOverlayClick = true
64
+ }) {
65
+ useEffect(() => {
66
+ if (!isOpen) return;
67
+ const handleKeyDown = (e) => {
68
+ if (closeOnEsc && e.key === "Escape") {
69
+ onClose();
70
+ }
71
+ };
72
+ const originalOverflow = document.body.style.overflow;
73
+ document.body.style.overflow = "hidden";
74
+ window.addEventListener("keydown", handleKeyDown);
75
+ return () => {
76
+ window.removeEventListener("keydown", handleKeyDown);
77
+ document.body.style.overflow = originalOverflow;
78
+ };
79
+ }, [isOpen, closeOnEsc, onClose]);
80
+ if (!isOpen) return null;
81
+ return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(ModalContext.Provider, { value: { isOpen, onClose, closeOnOverlayClick }, children: /* @__PURE__ */ jsx(FocusTrap, { active: isOpen, children: /* @__PURE__ */ jsx(
82
+ "div",
83
+ {
84
+ className: "fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6",
85
+ role: "dialog",
86
+ "aria-modal": "true",
87
+ children
88
+ }
89
+ ) }) }) });
90
+ }
91
+ var ModalOverlay = forwardRef(
92
+ ({ className, onClick, ...props }, ref) => {
93
+ const { onClose, closeOnOverlayClick } = useModal();
94
+ return /* @__PURE__ */ jsx(
95
+ "div",
96
+ {
97
+ ref,
98
+ "aria-hidden": "true",
99
+ onClick: (e) => {
100
+ onClick?.(e);
101
+ if (closeOnOverlayClick) onClose();
102
+ },
103
+ className: cn(
104
+ "fixed inset-0 bg-[var(--ui-bg-overlay)] backdrop-blur-sm transition-opacity animate-in fade-in duration-200",
105
+ className
106
+ ),
107
+ ...props
108
+ }
109
+ );
110
+ }
111
+ );
112
+ ModalOverlay.displayName = "ModalOverlay";
113
+ var modalContentVariants = cva(
114
+ "relative w-full max-w-lg rounded-[var(--ui-radius-xl)] bg-[var(--ui-bg-surface)] border border-[var(--ui-border-default)] p-6 text-[var(--ui-text-primary)] shadow-2xl transition-all animate-in zoom-in-95 duration-200 z-10",
115
+ {
116
+ variants: {
117
+ size: {
118
+ sm: "max-w-sm",
119
+ md: "max-w-md",
120
+ lg: "max-w-lg",
121
+ xl: "max-w-xl",
122
+ "2xl": "max-w-2xl",
123
+ full: "max-w-[calc(100vw-2rem)] h-[calc(100vh-2rem)]"
124
+ }
125
+ },
126
+ defaultVariants: {
127
+ size: "md"
128
+ }
129
+ }
130
+ );
131
+ var ModalContent = forwardRef(
132
+ ({ className, size, children, ...props }, ref) => {
133
+ return /* @__PURE__ */ jsx(
134
+ "div",
135
+ {
136
+ ref,
137
+ className: cn(modalContentVariants({ size }), className),
138
+ ...props,
139
+ children
140
+ }
141
+ );
142
+ }
143
+ );
144
+ ModalContent.displayName = "ModalContent";
145
+ var ModalHeader = forwardRef(
146
+ ({ className, children, ...props }, ref) => {
147
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col space-y-1.5 mb-4", className), ...props, children });
148
+ }
149
+ );
150
+ ModalHeader.displayName = "ModalHeader";
151
+ var ModalTitle = forwardRef(
152
+ ({ className, children, ...props }, ref) => {
153
+ return /* @__PURE__ */ jsx("h2", { ref, className: cn("text-lg sm:text-xl font-bold tracking-tight text-[var(--ui-text-primary)]", className), ...props, children });
154
+ }
155
+ );
156
+ ModalTitle.displayName = "ModalTitle";
157
+ var ModalDescription = forwardRef(
158
+ ({ className, children, ...props }, ref) => {
159
+ return /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm text-[var(--ui-text-muted)]", className), ...props, children });
160
+ }
161
+ );
162
+ ModalDescription.displayName = "ModalDescription";
163
+ var ModalBody = forwardRef(
164
+ ({ className, children, ...props }, ref) => {
165
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("py-2", className), ...props, children });
166
+ }
167
+ );
168
+ ModalBody.displayName = "ModalBody";
169
+ var ModalFooter = forwardRef(
170
+ ({ className, children, ...props }, ref) => {
171
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("flex items-center justify-end gap-3 mt-6 pt-4 border-t border-[var(--ui-border-subtle)]", className), ...props, children });
172
+ }
173
+ );
174
+ ModalFooter.displayName = "ModalFooter";
175
+ var ModalCloseButton = forwardRef(
176
+ ({ className, onClick, ...props }, ref) => {
177
+ const { onClose } = useModal();
178
+ return /* @__PURE__ */ jsx(
179
+ "button",
180
+ {
181
+ ref,
182
+ type: "button",
183
+ onClick: (e) => {
184
+ onClick?.(e);
185
+ onClose();
186
+ },
187
+ "aria-label": "Close dialog",
188
+ className: cn(
189
+ "absolute top-4 right-4 p-1.5 rounded-full text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)] transition-colors",
190
+ className
191
+ ),
192
+ ...props,
193
+ children: /* @__PURE__ */ jsx(X, { className: "w-4 h-4" })
194
+ }
195
+ );
196
+ }
197
+ );
198
+ ModalCloseButton.displayName = "ModalCloseButton";
199
+ function AlertDialog({
200
+ isOpen,
201
+ onClose,
202
+ onConfirm,
203
+ title,
204
+ description,
205
+ confirmText = "Confirm",
206
+ cancelText = "Cancel",
207
+ variant = "danger",
208
+ isLoading = false
209
+ }) {
210
+ return /* @__PURE__ */ jsxs(Modal, { isOpen, onClose, children: [
211
+ /* @__PURE__ */ jsx(ModalOverlay, {}),
212
+ /* @__PURE__ */ jsxs(ModalContent, { size: "sm", children: [
213
+ /* @__PURE__ */ jsx(ModalCloseButton, {}),
214
+ /* @__PURE__ */ jsxs(ModalHeader, { children: [
215
+ /* @__PURE__ */ jsx(ModalTitle, { children: title }),
216
+ /* @__PURE__ */ jsx(ModalDescription, { children: description })
217
+ ] }),
218
+ /* @__PURE__ */ jsxs(ModalFooter, { children: [
219
+ /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: onClose, disabled: isLoading, children: cancelText }),
220
+ /* @__PURE__ */ jsx(
221
+ Button,
222
+ {
223
+ variant: variant === "danger" ? "danger" : "primary",
224
+ size: "sm",
225
+ loading: isLoading,
226
+ onClick: onConfirm,
227
+ children: confirmText
228
+ }
229
+ )
230
+ ] })
231
+ ] })
232
+ ] });
233
+ }
234
+ var DrawerContext = createContext(null);
235
+ function useDrawer() {
236
+ const context = useContext(DrawerContext);
237
+ if (!context) {
238
+ throw new Error("Drawer compound components must be used within a <Drawer />");
239
+ }
240
+ return context;
241
+ }
242
+ var drawerVariants = cva(
243
+ "fixed z-50 bg-[var(--ui-bg-surface)] text-[var(--ui-text-primary)] border-[var(--ui-border-default)] shadow-2xl transition-transform duration-300 ease-in-out flex flex-col",
244
+ {
245
+ variants: {
246
+ placement: {
247
+ right: "inset-y-0 right-0 h-full w-full sm:max-w-md border-l animate-in slide-in-from-right",
248
+ left: "inset-y-0 left-0 h-full w-full sm:max-w-md border-r animate-in slide-in-from-left",
249
+ top: "inset-x-0 top-0 w-full max-h-[80vh] border-b animate-in slide-in-from-top",
250
+ bottom: "inset-x-0 bottom-0 w-full max-h-[80vh] border-t rounded-t-[var(--ui-radius-xl)] animate-in slide-in-from-bottom"
251
+ }
252
+ },
253
+ defaultVariants: {
254
+ placement: "right"
255
+ }
256
+ }
257
+ );
258
+ function Drawer({
259
+ isOpen,
260
+ onClose,
261
+ placement = "right",
262
+ children,
263
+ closeOnEsc = true
264
+ }) {
265
+ useEffect(() => {
266
+ if (!isOpen) return;
267
+ const handleKeyDown = (e) => {
268
+ if (closeOnEsc && e.key === "Escape") {
269
+ onClose();
270
+ }
271
+ };
272
+ const originalOverflow = document.body.style.overflow;
273
+ document.body.style.overflow = "hidden";
274
+ window.addEventListener("keydown", handleKeyDown);
275
+ return () => {
276
+ window.removeEventListener("keydown", handleKeyDown);
277
+ document.body.style.overflow = originalOverflow;
278
+ };
279
+ }, [isOpen, closeOnEsc, onClose]);
280
+ if (!isOpen) return null;
281
+ return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(DrawerContext.Provider, { value: { isOpen, onClose }, children: /* @__PURE__ */ jsx(FocusTrap, { active: isOpen, children: /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 overflow-hidden", children: [
282
+ /* @__PURE__ */ jsx(
283
+ "div",
284
+ {
285
+ "aria-hidden": "true",
286
+ onClick: onClose,
287
+ className: "fixed inset-0 bg-[var(--ui-bg-overlay)] backdrop-blur-sm transition-opacity animate-in fade-in duration-200"
288
+ }
289
+ ),
290
+ /* @__PURE__ */ jsx("div", { className: cn(drawerVariants({ placement })), children })
291
+ ] }) }) }) });
292
+ }
293
+ var DrawerHeader = forwardRef(
294
+ ({ className, children, ...props }, ref) => {
295
+ const { onClose } = useDrawer();
296
+ return /* @__PURE__ */ jsxs(
297
+ "div",
298
+ {
299
+ ref,
300
+ className: cn("flex items-center justify-between p-5 border-b border-[var(--ui-border-subtle)]", className),
301
+ ...props,
302
+ children: [
303
+ /* @__PURE__ */ jsx("div", { className: "flex-1", children }),
304
+ /* @__PURE__ */ jsx(
305
+ "button",
306
+ {
307
+ type: "button",
308
+ onClick: onClose,
309
+ "aria-label": "Close drawer",
310
+ className: "p-1.5 rounded-full text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)] transition-colors ml-4",
311
+ children: /* @__PURE__ */ jsx(X, { className: "w-4 h-4" })
312
+ }
313
+ )
314
+ ]
315
+ }
316
+ );
317
+ }
318
+ );
319
+ DrawerHeader.displayName = "DrawerHeader";
320
+ var DrawerBody = forwardRef(
321
+ ({ className, children, ...props }, ref) => {
322
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("flex-1 p-5 overflow-y-auto", className), ...props, children });
323
+ }
324
+ );
325
+ DrawerBody.displayName = "DrawerBody";
326
+ var DrawerFooter = forwardRef(
327
+ ({ className, children, ...props }, ref) => {
328
+ return /* @__PURE__ */ jsx(
329
+ "div",
330
+ {
331
+ ref,
332
+ className: cn("p-4 border-t border-[var(--ui-border-subtle)] bg-[var(--ui-bg-secondary)] flex items-center justify-end gap-3", className),
333
+ ...props,
334
+ children
335
+ }
336
+ );
337
+ }
338
+ );
339
+ DrawerFooter.displayName = "DrawerFooter";
340
+ var tooltipVariants = cva(
341
+ "z-50 overflow-hidden rounded-[var(--ui-radius-sm)] bg-[var(--ui-bg-primary)] border border-[var(--ui-border-default)] px-2.5 py-1 text-xs font-medium text-[var(--ui-text-primary)] shadow-md animate-in fade-in zoom-in-95 pointer-events-none select-none",
342
+ {
343
+ variants: {
344
+ placement: {
345
+ top: "-translate-x-1/2 -translate-y-full mb-1.5",
346
+ bottom: "-translate-x-1/2 mt-1.5",
347
+ left: "-translate-x-full -translate-y-1/2 mr-1.5",
348
+ right: "translate-y-[-50%] ml-1.5"
349
+ }
350
+ },
351
+ defaultVariants: {
352
+ placement: "top"
353
+ }
354
+ }
355
+ );
356
+ function Tooltip({
357
+ content,
358
+ children,
359
+ placement = "top",
360
+ delayDuration = 200,
361
+ className
362
+ }) {
363
+ const [isVisible, setIsVisible] = useState(false);
364
+ const [coords, setCoords] = useState({ top: 0, left: 0 });
365
+ const timeoutRef = useRef(null);
366
+ const triggerRef = useRef(null);
367
+ const handleMouseEnter = () => {
368
+ timeoutRef.current = setTimeout(() => {
369
+ if (triggerRef.current) {
370
+ const rect = triggerRef.current.getBoundingClientRect();
371
+ let top = 0;
372
+ let left = 0;
373
+ if (placement === "top") {
374
+ top = rect.top + window.scrollY;
375
+ left = rect.left + rect.width / 2 + window.scrollX;
376
+ } else if (placement === "bottom") {
377
+ top = rect.bottom + window.scrollY;
378
+ left = rect.left + rect.width / 2 + window.scrollX;
379
+ } else if (placement === "left") {
380
+ top = rect.top + rect.height / 2 + window.scrollY;
381
+ left = rect.left + window.scrollX;
382
+ } else if (placement === "right") {
383
+ top = rect.top + rect.height / 2 + window.scrollY;
384
+ left = rect.right + window.scrollX;
385
+ }
386
+ setCoords({ top, left });
387
+ setIsVisible(true);
388
+ }
389
+ }, delayDuration);
390
+ };
391
+ const handleMouseLeave = () => {
392
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
393
+ setIsVisible(false);
394
+ };
395
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
396
+ /* @__PURE__ */ jsx(
397
+ "div",
398
+ {
399
+ ref: triggerRef,
400
+ onMouseEnter: handleMouseEnter,
401
+ onMouseLeave: handleMouseLeave,
402
+ onFocus: handleMouseEnter,
403
+ onBlur: handleMouseLeave,
404
+ className: "inline-flex cursor-pointer",
405
+ children
406
+ }
407
+ ),
408
+ isVisible && /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(
409
+ "div",
410
+ {
411
+ style: { top: `${coords.top}px`, left: `${coords.left}px`, position: "absolute" },
412
+ role: "tooltip",
413
+ className: cn(tooltipVariants({ placement }), className),
414
+ children: content
415
+ }
416
+ ) })
417
+ ] });
418
+ }
419
+ var ToastContext = createContext(null);
420
+ function useToast() {
421
+ const context = useContext(ToastContext);
422
+ if (!context) {
423
+ throw new Error("useToast must be used within a ToasterProvider");
424
+ }
425
+ return context;
426
+ }
427
+ var toastVariants = cva(
428
+ "pointer-events-auto flex w-full max-w-md items-start gap-3 rounded-[var(--ui-radius-lg)] border p-4 shadow-lg transition-all animate-in slide-in-from-bottom-5 duration-300",
429
+ {
430
+ variants: {
431
+ type: {
432
+ info: "bg-[var(--ui-bg-surface)] border-[var(--ui-info)]/30 text-[var(--ui-text-primary)]",
433
+ success: "bg-[var(--ui-bg-surface)] border-[var(--ui-success)]/30 text-[var(--ui-text-primary)]",
434
+ warning: "bg-[var(--ui-bg-surface)] border-[var(--ui-warning)]/30 text-[var(--ui-text-primary)]",
435
+ error: "bg-[var(--ui-bg-surface)] border-[var(--ui-error)]/30 text-[var(--ui-text-primary)]"
436
+ }
437
+ },
438
+ defaultVariants: {
439
+ type: "info"
440
+ }
441
+ }
442
+ );
443
+ var toastIcons = {
444
+ info: /* @__PURE__ */ jsx(Info, { className: "w-5 h-5 text-[var(--ui-info)] flex-shrink-0" }),
445
+ success: /* @__PURE__ */ jsx(CheckCircle2, { className: "w-5 h-5 text-[var(--ui-success)] flex-shrink-0" }),
446
+ warning: /* @__PURE__ */ jsx(AlertTriangle, { className: "w-5 h-5 text-[var(--ui-warning)] flex-shrink-0" }),
447
+ error: /* @__PURE__ */ jsx(AlertCircle, { className: "w-5 h-5 text-[var(--ui-error)] flex-shrink-0" })
448
+ };
449
+ function ToasterProvider({ children, position = "bottom-right" }) {
450
+ const [toasts, setToasts] = useState([]);
451
+ const dismiss = useCallback((id) => {
452
+ setToasts((prev) => prev.filter((t) => t.id !== id));
453
+ }, []);
454
+ const toast = useCallback(
455
+ ({ id = Math.random().toString(36).slice(2, 9), title, description, type = "info", duration = 4e3 }) => {
456
+ const item = { id, title, description, type, duration };
457
+ setToasts((prev) => [...prev, item]);
458
+ if (duration > 0) {
459
+ setTimeout(() => {
460
+ dismiss(id);
461
+ }, duration);
462
+ }
463
+ return id;
464
+ },
465
+ [dismiss]
466
+ );
467
+ const getPositionClasses = () => {
468
+ switch (position) {
469
+ case "top-left":
470
+ return "top-4 left-4 items-start";
471
+ case "top-center":
472
+ return "top-4 left-1/2 -translate-x-1/2 items-center";
473
+ case "top-right":
474
+ return "top-4 right-4 items-end";
475
+ case "bottom-left":
476
+ return "bottom-4 left-4 items-start";
477
+ case "bottom-center":
478
+ return "bottom-4 left-1/2 -translate-x-1/2 items-center";
479
+ case "bottom-right":
480
+ default:
481
+ return "bottom-4 right-4 items-end";
482
+ }
483
+ };
484
+ return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: { toast, dismiss, toasts }, children: [
485
+ children,
486
+ /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(
487
+ "div",
488
+ {
489
+ "aria-live": "polite",
490
+ className: cn("fixed z-[100] flex flex-col gap-2 pointer-events-none p-4 w-full max-w-sm sm:max-w-md", getPositionClasses()),
491
+ children: toasts.map((t) => /* @__PURE__ */ jsxs("div", { className: cn(toastVariants({ type: t.type })), children: [
492
+ toastIcons[t.type || "info"],
493
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-1", children: [
494
+ /* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold text-[var(--ui-text-primary)]", children: t.title }),
495
+ t.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--ui-text-muted)]", children: t.description })
496
+ ] }),
497
+ /* @__PURE__ */ jsx(
498
+ "button",
499
+ {
500
+ type: "button",
501
+ onClick: () => dismiss(t.id),
502
+ "aria-label": "Dismiss toast",
503
+ className: "p-1 rounded text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)] transition-colors",
504
+ children: /* @__PURE__ */ jsx(X, { className: "w-3.5 h-3.5" })
505
+ }
506
+ )
507
+ ] }, t.id))
508
+ }
509
+ ) })
510
+ ] });
511
+ }
512
+ var BottomSheet = forwardRef(
513
+ ({
514
+ isOpen,
515
+ onClose,
516
+ children,
517
+ title,
518
+ description,
519
+ className,
520
+ showHandle = true,
521
+ maxHeight = "max-h-[85vh]"
522
+ }, ref) => {
523
+ useRef(null);
524
+ useEffect(() => {
525
+ const handleKeyDown = (e) => {
526
+ if (e.key === "Escape" && isOpen) {
527
+ onClose();
528
+ }
529
+ };
530
+ window.addEventListener("keydown", handleKeyDown);
531
+ return () => window.removeEventListener("keydown", handleKeyDown);
532
+ }, [isOpen, onClose]);
533
+ if (!isOpen) return null;
534
+ return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(FocusTrap, { active: isOpen, children: /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 flex flex-col justify-end", children: [
535
+ /* @__PURE__ */ jsx(
536
+ "div",
537
+ {
538
+ onClick: onClose,
539
+ className: "fixed inset-0 bg-black/60 backdrop-blur-md transition-opacity animate-in fade-in duration-300",
540
+ "aria-hidden": "true"
541
+ }
542
+ ),
543
+ /* @__PURE__ */ jsxs(
544
+ "div",
545
+ {
546
+ ref,
547
+ className: cn(
548
+ "relative z-50 w-full max-w-2xl mx-auto rounded-t-[2rem] border-t border-x border-[var(--ui-border-default)] bg-[var(--ui-bg-surface)] backdrop-blur-3xl shadow-2xl overflow-hidden flex flex-col transition-transform animate-in slide-in-from-bottom duration-300",
549
+ maxHeight,
550
+ className
551
+ ),
552
+ children: [
553
+ showHandle && /* @__PURE__ */ jsx(
554
+ "div",
555
+ {
556
+ onClick: onClose,
557
+ className: "w-full py-3 flex items-center justify-center cursor-grab active:cursor-grabbing",
558
+ children: /* @__PURE__ */ jsx("div", { className: "w-12 h-1.5 rounded-full bg-[var(--ui-text-muted)]/40 hover:bg-[var(--ui-text-muted)] transition-colors" })
559
+ }
560
+ ),
561
+ (title || description) && /* @__PURE__ */ jsxs("div", { className: "px-6 pb-3 flex items-center justify-between border-b border-[var(--ui-border-subtle)]", children: [
562
+ /* @__PURE__ */ jsxs("div", { children: [
563
+ title && /* @__PURE__ */ jsx("h3", { className: "text-base font-bold tracking-tight text-[var(--ui-text-primary)]", children: title }),
564
+ description && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--ui-text-muted)]", children: description })
565
+ ] }),
566
+ /* @__PURE__ */ jsx(
567
+ "button",
568
+ {
569
+ type: "button",
570
+ onClick: onClose,
571
+ className: "p-1.5 rounded-full hover:bg-[var(--ui-bg-tertiary)] text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] transition-colors",
572
+ children: /* @__PURE__ */ jsx(X, { className: "w-4 h-4" })
573
+ }
574
+ )
575
+ ] }),
576
+ /* @__PURE__ */ jsx("div", { className: "p-6 overflow-y-auto flex-1 space-y-4", children })
577
+ ]
578
+ }
579
+ )
580
+ ] }) }) });
581
+ }
582
+ );
583
+ BottomSheet.displayName = "BottomSheet";
584
+ var BottomSheetHeader = ({ className, children, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("px-6 pb-2", className), ...props, children });
585
+ var BottomSheetBody = ({ className, children, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("px-6 py-2 overflow-y-auto", className), ...props, children });
586
+ var BottomSheetFooter = ({ className, children, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("p-6 pt-3 border-t border-[var(--ui-border-subtle)] flex items-center justify-end gap-3", className), ...props, children });
587
+ var ContextMenuItem = ({
588
+ icon,
589
+ shortcut,
590
+ disabled = false,
591
+ destructive = false,
592
+ onSelect,
593
+ children,
594
+ className,
595
+ ...props
596
+ }) => {
597
+ return /* @__PURE__ */ jsxs(
598
+ "div",
599
+ {
600
+ role: "menuitem",
601
+ "aria-disabled": disabled,
602
+ onClick: () => {
603
+ if (!disabled) onSelect?.();
604
+ },
605
+ className: cn(
606
+ "flex items-center justify-between px-3 py-1.5 rounded-xl text-xs font-medium cursor-pointer transition-colors select-none",
607
+ disabled && "opacity-40 cursor-not-allowed pointer-events-none",
608
+ destructive ? "text-rose-500 hover:bg-rose-500/10" : "text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)]",
609
+ className
610
+ ),
611
+ ...props,
612
+ children: [
613
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 truncate", children: [
614
+ icon && /* @__PURE__ */ jsx("span", { className: "w-4 h-4 shrink-0", children: icon }),
615
+ /* @__PURE__ */ jsx("span", { className: "truncate", children })
616
+ ] }),
617
+ shortcut && /* @__PURE__ */ jsx(Kbd, { className: "text-[10px] py-0 px-1", children: shortcut })
618
+ ]
619
+ }
620
+ );
621
+ };
622
+ var ContextMenuSeparator = () => /* @__PURE__ */ jsx("div", { className: "h-px my-1 bg-[var(--ui-border-subtle)]", role: "separator" });
623
+ var ContextMenu = forwardRef(
624
+ ({ children, menuContent, className }, ref) => {
625
+ const [isOpen, setIsOpen] = useState(false);
626
+ const [position, setPosition] = useState({ x: 0, y: 0 });
627
+ const menuRef = useRef(null);
628
+ const handleContextMenu = (e) => {
629
+ e.preventDefault();
630
+ const x = Math.min(window.innerWidth - 220, e.clientX);
631
+ const y = Math.min(window.innerHeight - 260, e.clientY);
632
+ setPosition({ x, y });
633
+ setIsOpen(true);
634
+ };
635
+ useEffect(() => {
636
+ const handleClickOutside = (e) => {
637
+ if (menuRef.current && !menuRef.current.contains(e.target)) {
638
+ setIsOpen(false);
639
+ }
640
+ };
641
+ const handleKeyDown = (e) => {
642
+ if (e.key === "Escape") setIsOpen(false);
643
+ };
644
+ if (isOpen) {
645
+ window.addEventListener("click", handleClickOutside);
646
+ window.addEventListener("contextmenu", handleClickOutside);
647
+ window.addEventListener("keydown", handleKeyDown);
648
+ }
649
+ return () => {
650
+ window.removeEventListener("click", handleClickOutside);
651
+ window.removeEventListener("contextmenu", handleClickOutside);
652
+ window.removeEventListener("keydown", handleKeyDown);
653
+ };
654
+ }, [isOpen]);
655
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
656
+ /* @__PURE__ */ jsx("div", { ref, onContextMenu: handleContextMenu, className, children }),
657
+ isOpen && /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(
658
+ "div",
659
+ {
660
+ ref: menuRef,
661
+ style: { top: `${position.y}px`, left: `${position.x}px` },
662
+ onClick: () => setIsOpen(false),
663
+ className: "fixed z-50 min-w-48 p-1.5 rounded-2xl bg-[var(--ui-bg-surface)]/90 backdrop-blur-3xl border border-[var(--ui-border-default)] shadow-2xl space-y-0.5 animate-in fade-in zoom-in-95 duration-150",
664
+ children: menuContent
665
+ }
666
+ ) })
667
+ ] });
668
+ }
669
+ );
670
+ ContextMenu.displayName = "ContextMenu";
671
+ var HoverCard = forwardRef(
672
+ ({ trigger, content, openDelay = 200, closeDelay = 250, className }, ref) => {
673
+ const [isOpen, setIsOpen] = useState(false);
674
+ const [coords, setCoords] = useState({ top: 0, left: 0 });
675
+ const triggerRef = useRef(null);
676
+ const openTimerRef = useRef(null);
677
+ const closeTimerRef = useRef(null);
678
+ const handleMouseEnter = () => {
679
+ clearTimeout(closeTimerRef.current);
680
+ openTimerRef.current = setTimeout(() => {
681
+ if (triggerRef.current) {
682
+ const rect = triggerRef.current.getBoundingClientRect();
683
+ setCoords({
684
+ top: rect.bottom + window.scrollY + 8,
685
+ left: Math.max(16, Math.min(window.innerWidth - 320, rect.left + window.scrollX))
686
+ });
687
+ setIsOpen(true);
688
+ }
689
+ }, openDelay);
690
+ };
691
+ const handleMouseLeave = () => {
692
+ clearTimeout(openTimerRef.current);
693
+ closeTimerRef.current = setTimeout(() => {
694
+ setIsOpen(false);
695
+ }, closeDelay);
696
+ };
697
+ return /* @__PURE__ */ jsxs(
698
+ "div",
699
+ {
700
+ ref,
701
+ className: "inline-block relative",
702
+ onMouseEnter: handleMouseEnter,
703
+ onMouseLeave: handleMouseLeave,
704
+ children: [
705
+ /* @__PURE__ */ jsx("div", { ref: triggerRef, className: "inline-block", children: trigger }),
706
+ isOpen && /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(
707
+ "div",
708
+ {
709
+ style: { top: `${coords.top}px`, left: `${coords.left}px` },
710
+ onMouseEnter: () => clearTimeout(closeTimerRef.current),
711
+ onMouseLeave: handleMouseLeave,
712
+ className: cn(
713
+ "fixed z-50 w-72 p-4 rounded-2xl bg-[var(--ui-bg-surface)] backdrop-blur-3xl border border-[var(--ui-border-default)] shadow-2xl animate-in fade-in zoom-in-95 duration-200",
714
+ className
715
+ ),
716
+ children: content
717
+ }
718
+ ) })
719
+ ]
720
+ }
721
+ );
722
+ }
723
+ );
724
+ HoverCard.displayName = "HoverCard";
725
+
726
+ export { AlertDialog, BottomSheet, BottomSheetBody, BottomSheetFooter, BottomSheetHeader, ContextMenu, ContextMenuItem, ContextMenuSeparator, Drawer, DrawerBody, DrawerFooter, DrawerHeader, HoverCard, Modal, ModalBody, ModalCloseButton, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalOverlay, ModalTitle, ToasterProvider, Tooltip, drawerVariants, modalContentVariants, overlays_exports, toastVariants, tooltipVariants, useDrawer, useModal, useToast };
727
+ //# sourceMappingURL=chunk-5FZ6ZFII.js.map
728
+ //# sourceMappingURL=chunk-5FZ6ZFII.js.map