@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 @@
1
+ {"version":3,"sources":["../src/overlays/index.ts","../src/overlays/Modal.tsx","../src/overlays/AlertDialog.tsx","../src/overlays/Drawer.tsx","../src/overlays/Tooltip.tsx","../src/overlays/Toast.tsx","../src/overlays/BottomSheet.tsx","../src/overlays/ContextMenu.tsx","../src/overlays/HoverCard.tsx"],"names":["jsx","createContext","useContext","cva","useEffect","jsxs","forwardRef","X","useState","useRef","Fragment"],"mappings":"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","file":"chunk-5FZ6ZFII.js","sourcesContent":["export * from './Portal';\nexport * from './FocusTrap';\nexport * from './Modal';\nexport * from './AlertDialog';\nexport * from './Drawer';\nexport * from './Tooltip';\nexport * from './Popover';\nexport * from './Toast';\nexport * from './BottomSheet';\nexport * from './ContextMenu';\nexport * from './HoverCard';\n","import React, { forwardRef, createContext, useContext, useEffect } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { X } from 'lucide-react';\r\nimport { Portal } from './Portal';\r\nimport { FocusTrap } from './FocusTrap';\r\nimport { cn } from '../utils/cn';\r\n\r\ninterface ModalContextType {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n closeOnOverlayClick?: boolean;\r\n}\r\n\r\nconst ModalContext = createContext<ModalContextType | null>(null);\r\n\r\nexport function useModal() {\r\n const context = useContext(ModalContext);\r\n if (!context) {\r\n throw new Error('Modal compound components must be used within a <Modal />');\r\n }\r\n return context;\r\n}\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n closeOnEsc?: boolean;\r\n closeOnOverlayClick?: boolean;\r\n}\r\n\r\nexport function Modal({\r\n isOpen,\r\n onClose,\r\n children,\r\n closeOnEsc = true,\r\n closeOnOverlayClick = true,\r\n}: ModalProps) {\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (closeOnEsc && e.key === 'Escape') {\r\n onClose();\r\n }\r\n };\r\n\r\n const originalOverflow = document.body.style.overflow;\r\n document.body.style.overflow = 'hidden';\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n window.removeEventListener('keydown', handleKeyDown);\r\n document.body.style.overflow = originalOverflow;\r\n };\r\n }, [isOpen, closeOnEsc, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <Portal>\r\n <ModalContext.Provider value={{ isOpen, onClose, closeOnOverlayClick }}>\r\n <FocusTrap active={isOpen}>\r\n <div\r\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n {children}\r\n </div>\r\n </FocusTrap>\r\n </ModalContext.Provider>\r\n </Portal>\r\n );\r\n}\r\n\r\nexport interface ModalOverlayProps extends React.HTMLAttributes<HTMLDivElement> {}\r\n\r\nexport const ModalOverlay = forwardRef<HTMLDivElement, ModalOverlayProps>(\r\n ({ className, onClick, ...props }, ref) => {\r\n const { onClose, closeOnOverlayClick } = useModal();\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n aria-hidden=\"true\"\r\n onClick={(e) => {\r\n onClick?.(e);\r\n if (closeOnOverlayClick) onClose();\r\n }}\r\n className={cn(\r\n 'fixed inset-0 bg-[var(--ui-bg-overlay)] backdrop-blur-sm transition-opacity animate-in fade-in duration-200',\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nModalOverlay.displayName = 'ModalOverlay';\r\n\r\nexport const modalContentVariants = cva(\r\n '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',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'max-w-sm',\r\n md: 'max-w-md',\r\n lg: 'max-w-lg',\r\n xl: 'max-w-xl',\r\n '2xl': 'max-w-2xl',\r\n full: 'max-w-[calc(100vw-2rem)] h-[calc(100vh-2rem)]',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n },\r\n }\r\n);\r\n\r\nexport interface ModalContentProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof modalContentVariants> {}\r\n\r\nexport const ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(\r\n ({ className, size, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(modalContentVariants({ size }), className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\nModalContent.displayName = 'ModalContent';\r\n\r\nexport const ModalHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn('flex flex-col space-y-1.5 mb-4', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\nModalHeader.displayName = 'ModalHeader';\r\n\r\nexport const ModalTitle = forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <h2 ref={ref} className={cn('text-lg sm:text-xl font-bold tracking-tight text-[var(--ui-text-primary)]', className)} {...props}>\r\n {children}\r\n </h2>\r\n );\r\n }\r\n);\r\nModalTitle.displayName = 'ModalTitle';\r\n\r\nexport const ModalDescription = forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <p ref={ref} className={cn('text-sm text-[var(--ui-text-muted)]', className)} {...props}>\r\n {children}\r\n </p>\r\n );\r\n }\r\n);\r\nModalDescription.displayName = 'ModalDescription';\r\n\r\nexport const ModalBody = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn('py-2', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\nModalBody.displayName = 'ModalBody';\r\n\r\nexport const ModalFooter = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn('flex items-center justify-end gap-3 mt-6 pt-4 border-t border-[var(--ui-border-subtle)]', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\nModalFooter.displayName = 'ModalFooter';\r\n\r\nexport const ModalCloseButton = forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\r\n ({ className, onClick, ...props }, ref) => {\r\n const { onClose } = useModal();\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n onClick={(e) => {\r\n onClick?.(e);\r\n onClose();\r\n }}\r\n aria-label=\"Close dialog\"\r\n className={cn(\r\n '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',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n );\r\n }\r\n);\r\nModalCloseButton.displayName = 'ModalCloseButton';\r\n","import React, { forwardRef } from 'react';\r\nimport { Modal, ModalOverlay, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalFooter, ModalCloseButton } from './Modal';\r\nimport { Button } from '../buttons/Button';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport interface AlertDialogProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onConfirm: () => void;\r\n title: string;\r\n description: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n variant?: 'danger' | 'primary';\r\n isLoading?: boolean;\r\n}\r\n\r\nexport function AlertDialog({\r\n isOpen,\r\n onClose,\r\n onConfirm,\r\n title,\r\n description,\r\n confirmText = 'Confirm',\r\n cancelText = 'Cancel',\r\n variant = 'danger',\r\n isLoading = false,\r\n}: AlertDialogProps) {\r\n return (\r\n <Modal isOpen={isOpen} onClose={onClose}>\r\n <ModalOverlay />\r\n <ModalContent size=\"sm\">\r\n <ModalCloseButton />\r\n <ModalHeader>\r\n <ModalTitle>{title}</ModalTitle>\r\n <ModalDescription>{description}</ModalDescription>\r\n </ModalHeader>\r\n <ModalFooter>\r\n <Button variant=\"outline\" size=\"sm\" onClick={onClose} disabled={isLoading}>\r\n {cancelText}\r\n </Button>\r\n <Button\r\n variant={variant === 'danger' ? 'danger' : 'primary'}\r\n size=\"sm\"\r\n loading={isLoading}\r\n onClick={onConfirm}\r\n >\r\n {confirmText}\r\n </Button>\r\n </ModalFooter>\r\n </ModalContent>\r\n </Modal>\r\n );\r\n}\r\n","import React, { forwardRef, createContext, useContext, useEffect } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { X } from 'lucide-react';\r\nimport { Portal } from './Portal';\r\nimport { FocusTrap } from './FocusTrap';\r\nimport { cn } from '../utils/cn';\r\n\r\ninterface DrawerContextType {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n}\r\n\r\nconst DrawerContext = createContext<DrawerContextType | null>(null);\r\n\r\nexport function useDrawer() {\r\n const context = useContext(DrawerContext);\r\n if (!context) {\r\n throw new Error('Drawer compound components must be used within a <Drawer />');\r\n }\r\n return context;\r\n}\r\n\r\nexport const drawerVariants = cva(\r\n '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',\r\n {\r\n variants: {\r\n placement: {\r\n right: 'inset-y-0 right-0 h-full w-full sm:max-w-md border-l animate-in slide-in-from-right',\r\n left: 'inset-y-0 left-0 h-full w-full sm:max-w-md border-r animate-in slide-in-from-left',\r\n top: 'inset-x-0 top-0 w-full max-h-[80vh] border-b animate-in slide-in-from-top',\r\n 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',\r\n },\r\n },\r\n defaultVariants: {\r\n placement: 'right',\r\n },\r\n }\r\n);\r\n\r\nexport interface DrawerProps extends VariantProps<typeof drawerVariants> {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n closeOnEsc?: boolean;\r\n}\r\n\r\nexport function Drawer({\r\n isOpen,\r\n onClose,\r\n placement = 'right',\r\n children,\r\n closeOnEsc = true,\r\n}: DrawerProps) {\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (closeOnEsc && e.key === 'Escape') {\r\n onClose();\r\n }\r\n };\r\n\r\n const originalOverflow = document.body.style.overflow;\r\n document.body.style.overflow = 'hidden';\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n return () => {\r\n window.removeEventListener('keydown', handleKeyDown);\r\n document.body.style.overflow = originalOverflow;\r\n };\r\n }, [isOpen, closeOnEsc, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <Portal>\r\n <DrawerContext.Provider value={{ isOpen, onClose }}>\r\n <FocusTrap active={isOpen}>\r\n <div className=\"fixed inset-0 z-50 overflow-hidden\">\r\n {/* Backdrop */}\r\n <div\r\n aria-hidden=\"true\"\r\n onClick={onClose}\r\n className=\"fixed inset-0 bg-[var(--ui-bg-overlay)] backdrop-blur-sm transition-opacity animate-in fade-in duration-200\"\r\n />\r\n {/* Drawer Panel */}\r\n <div className={cn(drawerVariants({ placement }))}>\r\n {children}\r\n </div>\r\n </div>\r\n </FocusTrap>\r\n </DrawerContext.Provider>\r\n </Portal>\r\n );\r\n}\r\n\r\nexport const DrawerHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n const { onClose } = useDrawer();\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn('flex items-center justify-between p-5 border-b border-[var(--ui-border-subtle)]', className)}\r\n {...props}\r\n >\r\n <div className=\"flex-1\">{children}</div>\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n aria-label=\"Close drawer\"\r\n 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\"\r\n >\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n );\r\n }\r\n);\r\nDrawerHeader.displayName = 'DrawerHeader';\r\n\r\nexport const DrawerBody = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div ref={ref} className={cn('flex-1 p-5 overflow-y-auto', className)} {...props}>\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\nDrawerBody.displayName = 'DrawerBody';\r\n\r\nexport const DrawerFooter = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn('p-4 border-t border-[var(--ui-border-subtle)] bg-[var(--ui-bg-secondary)] flex items-center justify-end gap-3', className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\nDrawerFooter.displayName = 'DrawerFooter';\r\n","import React, { useState, useRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Portal } from './Portal';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport const tooltipVariants = cva(\r\n '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',\r\n {\r\n variants: {\r\n placement: {\r\n top: '-translate-x-1/2 -translate-y-full mb-1.5',\r\n bottom: '-translate-x-1/2 mt-1.5',\r\n left: '-translate-x-full -translate-y-1/2 mr-1.5',\r\n right: 'translate-y-[-50%] ml-1.5',\r\n },\r\n },\r\n defaultVariants: {\r\n placement: 'top',\r\n },\r\n }\r\n);\r\n\r\nexport interface TooltipProps extends VariantProps<typeof tooltipVariants> {\r\n content: React.ReactNode;\r\n children: React.ReactNode;\r\n delayDuration?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Tooltip({\r\n content,\r\n children,\r\n placement = 'top',\r\n delayDuration = 200,\r\n className,\r\n}: TooltipProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [coords, setCoords] = useState<{ top: number; left: number }>({ top: 0, left: 0 });\r\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const handleMouseEnter = () => {\r\n timeoutRef.current = setTimeout(() => {\r\n if (triggerRef.current) {\r\n const rect = triggerRef.current.getBoundingClientRect();\r\n let top = 0;\r\n let left = 0;\r\n\r\n if (placement === 'top') {\r\n top = rect.top + window.scrollY;\r\n left = rect.left + rect.width / 2 + window.scrollX;\r\n } else if (placement === 'bottom') {\r\n top = rect.bottom + window.scrollY;\r\n left = rect.left + rect.width / 2 + window.scrollX;\r\n } else if (placement === 'left') {\r\n top = rect.top + rect.height / 2 + window.scrollY;\r\n left = rect.left + window.scrollX;\r\n } else if (placement === 'right') {\r\n top = rect.top + rect.height / 2 + window.scrollY;\r\n left = rect.right + window.scrollX;\r\n }\r\n\r\n setCoords({ top, left });\r\n setIsVisible(true);\r\n }\r\n }, delayDuration);\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n setIsVisible(false);\r\n };\r\n\r\n return (\r\n <>\r\n <div\r\n ref={triggerRef}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n onFocus={handleMouseEnter}\r\n onBlur={handleMouseLeave}\r\n className=\"inline-flex cursor-pointer\"\r\n >\r\n {children}\r\n </div>\r\n\r\n {isVisible && (\r\n <Portal>\r\n <div\r\n style={{ top: `${coords.top}px`, left: `${coords.left}px`, position: 'absolute' }}\r\n role=\"tooltip\"\r\n className={cn(tooltipVariants({ placement }), className)}\r\n >\r\n {content}\r\n </div>\r\n </Portal>\r\n )}\r\n </>\r\n );\r\n}\r\n","import React, { createContext, useContext, useState, useCallback } from 'react';\r\nimport { cva } from 'class-variance-authority';\r\nimport { CheckCircle2, AlertTriangle, AlertCircle, Info, X } from 'lucide-react';\r\nimport { Portal } from './Portal';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport type ToastType = 'info' | 'success' | 'warning' | 'error';\r\n\r\nexport interface ToastOptions {\r\n id?: string;\r\n title: string;\r\n description?: string;\r\n type?: ToastType;\r\n duration?: number;\r\n}\r\n\r\nexport interface ToastItem extends ToastOptions {\r\n id: string;\r\n}\r\n\r\ninterface ToastContextType {\r\n toast: (options: ToastOptions) => string;\r\n dismiss: (id: string) => void;\r\n toasts: ToastItem[];\r\n}\r\n\r\nconst ToastContext = createContext<ToastContextType | null>(null);\r\n\r\nexport function useToast() {\r\n const context = useContext(ToastContext);\r\n if (!context) {\r\n throw new Error('useToast must be used within a ToasterProvider');\r\n }\r\n return context;\r\n}\r\n\r\nexport const toastVariants = cva(\r\n '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',\r\n {\r\n variants: {\r\n type: {\r\n info: 'bg-[var(--ui-bg-surface)] border-[var(--ui-info)]/30 text-[var(--ui-text-primary)]',\r\n success: 'bg-[var(--ui-bg-surface)] border-[var(--ui-success)]/30 text-[var(--ui-text-primary)]',\r\n warning: 'bg-[var(--ui-bg-surface)] border-[var(--ui-warning)]/30 text-[var(--ui-text-primary)]',\r\n error: 'bg-[var(--ui-bg-surface)] border-[var(--ui-error)]/30 text-[var(--ui-text-primary)]',\r\n },\r\n },\r\n defaultVariants: {\r\n type: 'info',\r\n },\r\n }\r\n);\r\n\r\nconst toastIcons: Record<ToastType, React.ReactNode> = {\r\n info: <Info className=\"w-5 h-5 text-[var(--ui-info)] flex-shrink-0\" />,\r\n success: <CheckCircle2 className=\"w-5 h-5 text-[var(--ui-success)] flex-shrink-0\" />,\r\n warning: <AlertTriangle className=\"w-5 h-5 text-[var(--ui-warning)] flex-shrink-0\" />,\r\n error: <AlertCircle className=\"w-5 h-5 text-[var(--ui-error)] flex-shrink-0\" />,\r\n};\r\n\r\nexport interface ToasterProviderProps {\r\n children: React.ReactNode;\r\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\r\n}\r\n\r\nexport function ToasterProvider({ children, position = 'bottom-right' }: ToasterProviderProps) {\r\n const [toasts, setToasts] = useState<ToastItem[]>([]);\r\n\r\n const dismiss = useCallback((id: string) => {\r\n setToasts((prev) => prev.filter((t) => t.id !== id));\r\n }, []);\r\n\r\n const toast = useCallback(\r\n ({ id = Math.random().toString(36).slice(2, 9), title, description, type = 'info', duration = 4000 }: ToastOptions) => {\r\n const item: ToastItem = { id, title, description, type, duration };\r\n\r\n setToasts((prev) => [...prev, item]);\r\n\r\n if (duration > 0) {\r\n setTimeout(() => {\r\n dismiss(id);\r\n }, duration);\r\n }\r\n\r\n return id;\r\n },\r\n [dismiss]\r\n );\r\n\r\n const getPositionClasses = () => {\r\n switch (position) {\r\n case 'top-left':\r\n return 'top-4 left-4 items-start';\r\n case 'top-center':\r\n return 'top-4 left-1/2 -translate-x-1/2 items-center';\r\n case 'top-right':\r\n return 'top-4 right-4 items-end';\r\n case 'bottom-left':\r\n return 'bottom-4 left-4 items-start';\r\n case 'bottom-center':\r\n return 'bottom-4 left-1/2 -translate-x-1/2 items-center';\r\n case 'bottom-right':\r\n default:\r\n return 'bottom-4 right-4 items-end';\r\n }\r\n };\r\n\r\n return (\r\n <ToastContext.Provider value={{ toast, dismiss, toasts }}>\r\n {children}\r\n <Portal>\r\n <div\r\n aria-live=\"polite\"\r\n 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())}\r\n >\r\n {toasts.map((t) => (\r\n <div key={t.id} className={cn(toastVariants({ type: t.type }))}>\r\n {toastIcons[t.type || 'info']}\r\n <div className=\"flex-1 space-y-1\">\r\n <h4 className=\"text-sm font-semibold text-[var(--ui-text-primary)]\">{t.title}</h4>\r\n {t.description && <p className=\"text-xs text-[var(--ui-text-muted)]\">{t.description}</p>}\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={() => dismiss(t.id)}\r\n aria-label=\"Dismiss toast\"\r\n className=\"p-1 rounded text-[var(--ui-text-muted)] hover:text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)] transition-colors\"\r\n >\r\n <X className=\"w-3.5 h-3.5\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n </Portal>\r\n </ToastContext.Provider>\r\n );\r\n}\r\n","import React, { forwardRef, useEffect, useRef } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { Portal } from './Portal';\nimport { FocusTrap } from './FocusTrap';\n\nexport interface BottomSheetProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: string;\n description?: string;\n className?: string;\n showHandle?: boolean;\n maxHeight?: string;\n}\n\nexport const BottomSheet = forwardRef<HTMLDivElement, BottomSheetProps>(\n (\n {\n isOpen,\n onClose,\n children,\n title,\n description,\n className,\n showHandle = true,\n maxHeight = 'max-h-[85vh]',\n },\n ref\n ) => {\n const sheetRef = useRef<HTMLDivElement | null>(null);\n\n // Escape key listener\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <FocusTrap active={isOpen}>\n <div className=\"fixed inset-0 z-50 flex flex-col justify-end\">\n {/* Backdrop */}\n <div\n onClick={onClose}\n className=\"fixed inset-0 bg-black/60 backdrop-blur-md transition-opacity animate-in fade-in duration-300\"\n aria-hidden=\"true\"\n />\n\n {/* Slide-up Sheet Panel */}\n <div\n ref={ref}\n className={cn(\n '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',\n maxHeight,\n className\n )}\n >\n {/* Drag Handle */}\n {showHandle && (\n <div\n onClick={onClose}\n className=\"w-full py-3 flex items-center justify-center cursor-grab active:cursor-grabbing\"\n >\n <div className=\"w-12 h-1.5 rounded-full bg-[var(--ui-text-muted)]/40 hover:bg-[var(--ui-text-muted)] transition-colors\" />\n </div>\n )}\n\n {/* Header */}\n {(title || description) && (\n <div className=\"px-6 pb-3 flex items-center justify-between border-b border-[var(--ui-border-subtle)]\">\n <div>\n {title && <h3 className=\"text-base font-bold tracking-tight text-[var(--ui-text-primary)]\">{title}</h3>}\n {description && <p className=\"text-xs text-[var(--ui-text-muted)]\">{description}</p>}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n 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\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n )}\n\n {/* Content Body */}\n <div className=\"p-6 overflow-y-auto flex-1 space-y-4\">\n {children}\n </div>\n </div>\n </div>\n </FocusTrap>\n </Portal>\n );\n }\n);\nBottomSheet.displayName = 'BottomSheet';\n\nexport const BottomSheetHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({ className, children, ...props }) => (\n <div className={cn('px-6 pb-2', className)} {...props}>\n {children}\n </div>\n);\n\nexport const BottomSheetBody: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({ className, children, ...props }) => (\n <div className={cn('px-6 py-2 overflow-y-auto', className)} {...props}>\n {children}\n </div>\n);\n\nexport const BottomSheetFooter: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({ className, children, ...props }) => (\n <div className={cn('p-6 pt-3 border-t border-[var(--ui-border-subtle)] flex items-center justify-end gap-3', className)} {...props}>\n {children}\n </div>\n);\n","import React, { useState, useEffect, useRef, forwardRef } from 'react';\nimport { cn } from '../utils/cn';\nimport { Portal } from './Portal';\nimport { Kbd } from '../typography/Kbd';\n\nexport interface ContextMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n shortcut?: string;\n disabled?: boolean;\n destructive?: boolean;\n onSelect?: () => void;\n}\n\nexport const ContextMenuItem: React.FC<ContextMenuItemProps> = ({\n icon,\n shortcut,\n disabled = false,\n destructive = false,\n onSelect,\n children,\n className,\n ...props\n}) => {\n return (\n <div\n role=\"menuitem\"\n aria-disabled={disabled}\n onClick={() => {\n if (!disabled) onSelect?.();\n }}\n className={cn(\n 'flex items-center justify-between px-3 py-1.5 rounded-xl text-xs font-medium cursor-pointer transition-colors select-none',\n disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n destructive\n ? 'text-rose-500 hover:bg-rose-500/10'\n : 'text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)]',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2 truncate\">\n {icon && <span className=\"w-4 h-4 shrink-0\">{icon}</span>}\n <span className=\"truncate\">{children}</span>\n </div>\n\n {shortcut && <Kbd className=\"text-[10px] py-0 px-1\">{shortcut}</Kbd>}\n </div>\n );\n};\n\nexport const ContextMenuSeparator: React.FC = () => (\n <div className=\"h-px my-1 bg-[var(--ui-border-subtle)]\" role=\"separator\" />\n);\n\nexport interface ContextMenuProps {\n children: React.ReactNode;\n menuContent: React.ReactNode;\n className?: string;\n}\n\nexport const ContextMenu = forwardRef<HTMLDivElement, ContextMenuProps>(\n ({ children, menuContent, className }, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState<{ x: number; y: number }>({ x: 0, y: 0 });\n const menuRef = useRef<HTMLDivElement | null>(null);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n e.preventDefault();\n const x = Math.min(window.innerWidth - 220, e.clientX);\n const y = Math.min(window.innerHeight - 260, e.clientY);\n setPosition({ x, y });\n setIsOpen(true);\n };\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsOpen(false);\n };\n\n if (isOpen) {\n window.addEventListener('click', handleClickOutside);\n window.addEventListener('contextmenu', handleClickOutside);\n window.addEventListener('keydown', handleKeyDown);\n }\n return () => {\n window.removeEventListener('click', handleClickOutside);\n window.removeEventListener('contextmenu', handleClickOutside);\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n return (\n <>\n <div ref={ref} onContextMenu={handleContextMenu} className={className}>\n {children}\n </div>\n\n {isOpen && (\n <Portal>\n <div\n ref={menuRef}\n style={{ top: `${position.y}px`, left: `${position.x}px` }}\n onClick={() => setIsOpen(false)}\n 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\"\n >\n {menuContent}\n </div>\n </Portal>\n )}\n </>\n );\n }\n);\nContextMenu.displayName = 'ContextMenu';\n","import React, { useState, useRef, forwardRef } from 'react';\nimport { cn } from '../utils/cn';\nimport { Portal } from './Portal';\n\nexport interface HoverCardProps {\n trigger: React.ReactNode;\n content: React.ReactNode;\n openDelay?: number;\n closeDelay?: number;\n className?: string;\n}\n\nexport const HoverCard = forwardRef<HTMLDivElement, HoverCardProps>(\n ({ trigger, content, openDelay = 200, closeDelay = 250, className }, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [coords, setCoords] = useState<{ top: number; left: number }>({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLDivElement | null>(null);\n const openTimerRef = useRef<any>(null);\n const closeTimerRef = useRef<any>(null);\n\n const handleMouseEnter = () => {\n clearTimeout(closeTimerRef.current);\n openTimerRef.current = setTimeout(() => {\n if (triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n setCoords({\n top: rect.bottom + window.scrollY + 8,\n left: Math.max(16, Math.min(window.innerWidth - 320, rect.left + window.scrollX)),\n });\n setIsOpen(true);\n }\n }, openDelay);\n };\n\n const handleMouseLeave = () => {\n clearTimeout(openTimerRef.current);\n closeTimerRef.current = setTimeout(() => {\n setIsOpen(false);\n }, closeDelay);\n };\n\n return (\n <div\n ref={ref}\n className=\"inline-block relative\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div ref={triggerRef} className=\"inline-block\">\n {trigger}\n </div>\n\n {isOpen && (\n <Portal>\n <div\n style={{ top: `${coords.top}px`, left: `${coords.left}px` }}\n onMouseEnter={() => clearTimeout(closeTimerRef.current)}\n onMouseLeave={handleMouseLeave}\n className={cn(\n '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',\n className\n )}\n >\n {content}\n </div>\n </Portal>\n )}\n </div>\n );\n }\n);\nHoverCard.displayName = 'HoverCard';\n"]}
@@ -0,0 +1,86 @@
1
+ import { cn } from './chunk-4S6L5V7X.js';
2
+ import { forwardRef } from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { Loader2 } from 'lucide-react';
5
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
+
7
+ var buttonVariants = cva(
8
+ "relative inline-flex items-center justify-center font-medium transition-all duration-200 select-none cursor-pointer disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-[var(--ui-primary)]/30 active:scale-[0.97] overflow-hidden",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ primary: "bg-[var(--ui-primary)] hover:bg-[var(--ui-primary-hover)] text-white shadow-sm hover:shadow-[0_4px_16px_rgba(0,113,227,0.35)] border border-white/20",
13
+ secondary: "bg-[var(--ui-bg-tertiary)] hover:bg-[var(--ui-bg-surface)] text-[var(--ui-text-primary)] border border-[var(--ui-border-subtle)] shadow-sm",
14
+ outline: "border border-[var(--ui-border-default)] bg-[var(--ui-bg-surface)]/60 backdrop-blur-xl text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)] hover:border-[var(--ui-border-strong)] shadow-sm",
15
+ ghost: "bg-transparent text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)]/70",
16
+ danger: "bg-[var(--ui-error)] hover:bg-[var(--ui-error)]/90 text-white shadow-sm hover:shadow-[0_4px_16px_rgba(255,59,48,0.35)] border border-white/15",
17
+ link: "bg-transparent text-[var(--ui-primary)] underline-offset-4 hover:underline p-0 h-auto active:scale-100 font-normal",
18
+ glass: "bg-white/10 dark:bg-white/10 backdrop-blur-2xl border border-white/20 dark:border-white/15 text-[var(--ui-text-primary)] hover:bg-white/20 dark:hover:bg-white/15 shadow-[0_8px_32px_rgba(0,0,0,0.12)] hover:shadow-[0_8px_32px_rgba(0,113,227,0.25)]"
19
+ },
20
+ size: {
21
+ xs: "h-7 px-2.5 text-xs rounded-[var(--ui-radius-sm)] gap-1",
22
+ sm: "h-8.5 px-3.5 text-xs rounded-[var(--ui-radius-md)] gap-1.5",
23
+ md: "h-10 px-4.5 text-sm rounded-[var(--ui-radius-md)] gap-2 font-semibold",
24
+ lg: "h-12 px-6 text-base rounded-[var(--ui-radius-lg)] gap-2.5 font-semibold",
25
+ xl: "h-14 px-8 text-lg rounded-[var(--ui-radius-xl)] gap-3 font-bold"
26
+ },
27
+ fullWidth: {
28
+ true: "w-full",
29
+ false: ""
30
+ }
31
+ },
32
+ defaultVariants: {
33
+ variant: "primary",
34
+ size: "md",
35
+ fullWidth: false
36
+ }
37
+ }
38
+ );
39
+ var Button = forwardRef(
40
+ ({
41
+ className,
42
+ variant,
43
+ size,
44
+ fullWidth,
45
+ loading = false,
46
+ loadingText,
47
+ leftIcon,
48
+ rightIcon,
49
+ disabled,
50
+ children,
51
+ ...props
52
+ }, ref) => {
53
+ const isDisabled = disabled || loading;
54
+ return /* @__PURE__ */ jsxs(
55
+ "button",
56
+ {
57
+ ref,
58
+ disabled: isDisabled,
59
+ className: cn(buttonVariants({ variant, size, fullWidth }), className),
60
+ ...props,
61
+ children: [
62
+ /* @__PURE__ */ jsx(
63
+ "span",
64
+ {
65
+ "aria-hidden": "true",
66
+ className: "absolute inset-x-0 top-0 h-[1px] bg-gradient-to-r from-transparent via-white/35 to-transparent pointer-events-none"
67
+ }
68
+ ),
69
+ loading ? /* @__PURE__ */ jsxs(Fragment, { children: [
70
+ /* @__PURE__ */ jsx(Loader2, { className: "w-4 h-4 animate-spin" }),
71
+ /* @__PURE__ */ jsx("span", { children: loadingText || children })
72
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
73
+ leftIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 inline-flex items-center", children: leftIcon }),
74
+ /* @__PURE__ */ jsx("span", { children }),
75
+ rightIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 inline-flex items-center", children: rightIcon })
76
+ ] })
77
+ ]
78
+ }
79
+ );
80
+ }
81
+ );
82
+ Button.displayName = "Button";
83
+
84
+ export { Button, buttonVariants };
85
+ //# sourceMappingURL=chunk-66VWUJEI.js.map
86
+ //# sourceMappingURL=chunk-66VWUJEI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/buttons/Button.tsx"],"names":[],"mappings":";;;;;;AAKO,IAAM,cAAA,GAAiB,GAAA;AAAA,EAC5B,oSAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,sJAAA;AAAA,QACF,SAAA,EACE,4IAAA;AAAA,QACF,OAAA,EACE,wMAAA;AAAA,QACF,KAAA,EACE,kFAAA;AAAA,QACF,MAAA,EACE,+IAAA;AAAA,QACF,IAAA,EACE,oHAAA;AAAA,QACF,KAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,wDAAA;AAAA,QACJ,EAAA,EAAI,4DAAA;AAAA,QACJ,EAAA,EAAI,uEAAA;AAAA,QACJ,EAAA,EAAI,yEAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM,IAAA;AAAA,MACN,SAAA,EAAW;AAAA;AACb;AAEJ;AAWO,IAAM,MAAA,GAAS,UAAA;AAAA,EACpB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV,WAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,aAAa,QAAA,IAAY,OAAA;AAE/B,IAAA,uBACE,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA;AAAA,QACpE,GAAG,KAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,MAAA;AAAA,cACZ,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,UAEC,0BACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,sBAAA,EAAuB,CAAA;AAAA,4BAC1C,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,WAAA,IAAe,QAAA,EAAS;AAAA,WAAA,EACjC,oBAEA,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,QAAA,oBAAY,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,4BAChF,GAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,YACf,SAAA,oBAAa,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAA0C,QAAA,EAAA,SAAA,EAAU;AAAA,WAAA,EACpF;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-66VWUJEI.js","sourcesContent":["import React, { forwardRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Loader2 } from 'lucide-react';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport const buttonVariants = cva(\r\n 'relative inline-flex items-center justify-center font-medium transition-all duration-200 select-none cursor-pointer disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-[var(--ui-primary)]/30 active:scale-[0.97] overflow-hidden',\r\n {\r\n variants: {\r\n variant: {\r\n primary:\r\n 'bg-[var(--ui-primary)] hover:bg-[var(--ui-primary-hover)] text-white shadow-sm hover:shadow-[0_4px_16px_rgba(0,113,227,0.35)] border border-white/20',\r\n secondary:\r\n 'bg-[var(--ui-bg-tertiary)] hover:bg-[var(--ui-bg-surface)] text-[var(--ui-text-primary)] border border-[var(--ui-border-subtle)] shadow-sm',\r\n outline:\r\n 'border border-[var(--ui-border-default)] bg-[var(--ui-bg-surface)]/60 backdrop-blur-xl text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)] hover:border-[var(--ui-border-strong)] shadow-sm',\r\n ghost:\r\n 'bg-transparent text-[var(--ui-text-primary)] hover:bg-[var(--ui-bg-tertiary)]/70',\r\n danger:\r\n 'bg-[var(--ui-error)] hover:bg-[var(--ui-error)]/90 text-white shadow-sm hover:shadow-[0_4px_16px_rgba(255,59,48,0.35)] border border-white/15',\r\n link:\r\n 'bg-transparent text-[var(--ui-primary)] underline-offset-4 hover:underline p-0 h-auto active:scale-100 font-normal',\r\n glass:\r\n 'bg-white/10 dark:bg-white/10 backdrop-blur-2xl border border-white/20 dark:border-white/15 text-[var(--ui-text-primary)] hover:bg-white/20 dark:hover:bg-white/15 shadow-[0_8px_32px_rgba(0,0,0,0.12)] hover:shadow-[0_8px_32px_rgba(0,113,227,0.25)]',\r\n },\r\n size: {\r\n xs: 'h-7 px-2.5 text-xs rounded-[var(--ui-radius-sm)] gap-1',\r\n sm: 'h-8.5 px-3.5 text-xs rounded-[var(--ui-radius-md)] gap-1.5',\r\n md: 'h-10 px-4.5 text-sm rounded-[var(--ui-radius-md)] gap-2 font-semibold',\r\n lg: 'h-12 px-6 text-base rounded-[var(--ui-radius-lg)] gap-2.5 font-semibold',\r\n xl: 'h-14 px-8 text-lg rounded-[var(--ui-radius-xl)] gap-3 font-bold',\r\n },\r\n fullWidth: {\r\n true: 'w-full',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'primary',\r\n size: 'md',\r\n fullWidth: false,\r\n },\r\n }\r\n);\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n loading?: boolean;\r\n loadingText?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n}\r\n\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n {\r\n className,\r\n variant,\r\n size,\r\n fullWidth,\r\n loading = false,\r\n loadingText,\r\n leftIcon,\r\n rightIcon,\r\n disabled,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const isDisabled = disabled || loading;\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n disabled={isDisabled}\r\n className={cn(buttonVariants({ variant, size, fullWidth }), className)}\r\n {...props}\r\n >\r\n {/* Apple subtle top specular highlight */}\r\n <span\r\n aria-hidden=\"true\"\r\n className=\"absolute inset-x-0 top-0 h-[1px] bg-gradient-to-r from-transparent via-white/35 to-transparent pointer-events-none\"\r\n />\r\n\r\n {loading ? (\r\n <>\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n <span>{loadingText || children}</span>\r\n </>\r\n ) : (\r\n <>\r\n {leftIcon && <span className=\"flex-shrink-0 inline-flex items-center\">{leftIcon}</span>}\r\n <span>{children}</span>\r\n {rightIcon && <span className=\"flex-shrink-0 inline-flex items-center\">{rightIcon}</span>}\r\n </>\r\n )}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n"]}
@@ -0,0 +1,163 @@
1
+ import { __export, cn } from './chunk-4S6L5V7X.js';
2
+ import { forwardRef } from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ // src/glass/index.ts
7
+ var glass_exports = {};
8
+ __export(glass_exports, {
9
+ GlassBadge: () => GlassBadge,
10
+ GlassButton: () => GlassButton,
11
+ GlassCard: () => GlassCard
12
+ });
13
+ var glassCardVariants = cva(
14
+ "relative overflow-hidden transition-all duration-300 text-[var(--ui-glass-text-primary)]",
15
+ {
16
+ variants: {
17
+ intensity: {
18
+ subtle: "bg-[var(--ui-glass-subtle-bg)] backdrop-blur-[var(--ui-glass-subtle-blur)] border border-[var(--ui-glass-subtle-border)]",
19
+ standard: "bg-[var(--ui-glass-standard-bg)] backdrop-blur-[var(--ui-glass-standard-blur)] border border-[var(--ui-glass-standard-border)] shadow-[var(--ui-glass-standard-shadow)]",
20
+ frosted: "bg-[var(--ui-glass-frosted-bg)] backdrop-blur-[var(--ui-glass-frosted-blur)] border border-[var(--ui-glass-frosted-border)] shadow-[var(--ui-glass-frosted-shadow)]",
21
+ acrylic: "bg-[image:var(--ui-glass-acrylic-bg)] backdrop-blur-[var(--ui-glass-acrylic-blur)] border border-[var(--ui-glass-acrylic-border)] shadow-[var(--ui-glass-acrylic-shadow)]"
22
+ },
23
+ glow: {
24
+ none: "",
25
+ cyan: "hover:shadow-[0_0_40px_-8px_rgba(56,189,248,0.3)] hover:border-sky-400/40",
26
+ purple: "hover:shadow-[0_0_40px_-8px_rgba(192,132,252,0.3)] hover:border-purple-400/40",
27
+ white: "hover:shadow-[0_0_35px_-8px_rgba(255,255,255,0.25)] hover:border-white/30"
28
+ },
29
+ radius: {
30
+ md: "rounded-xl",
31
+ lg: "rounded-2xl",
32
+ xl: "rounded-3xl"
33
+ },
34
+ padding: {
35
+ sm: "p-4",
36
+ md: "p-6",
37
+ lg: "p-8"
38
+ }
39
+ },
40
+ defaultVariants: {
41
+ intensity: "standard",
42
+ glow: "none",
43
+ radius: "lg",
44
+ padding: "md"
45
+ }
46
+ }
47
+ );
48
+ var GlassCard = forwardRef(
49
+ ({ className, intensity, glow, radius, padding, specularLight = true, children, ...props }, ref) => {
50
+ return /* @__PURE__ */ jsxs(
51
+ "div",
52
+ {
53
+ ref,
54
+ className: cn(glassCardVariants({ intensity, glow, radius, padding, className })),
55
+ ...props,
56
+ children: [
57
+ specularLight && /* @__PURE__ */ jsx(
58
+ "div",
59
+ {
60
+ className: "pointer-events-none absolute inset-x-0 top-0 h-px bg-[image:var(--ui-glass-specular-light)] opacity-80",
61
+ "aria-hidden": "true"
62
+ }
63
+ ),
64
+ children
65
+ ]
66
+ }
67
+ );
68
+ }
69
+ );
70
+ GlassCard.displayName = "GlassCard";
71
+ var glassButtonVariants = cva(
72
+ "group relative inline-flex items-center justify-center font-medium tracking-tight transition-all duration-300 active:scale-[0.97] disabled:pointer-events-none disabled:opacity-40 overflow-hidden cursor-pointer select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-900 dark:focus-visible:ring-white/90 focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--ui-focus-ring-offset)]",
73
+ {
74
+ variants: {
75
+ variant: {
76
+ default: "bg-[var(--ui-glass-btn-default-bg)] hover:bg-[var(--ui-glass-btn-default-hover)] backdrop-blur-md border border-[var(--ui-glass-btn-default-border)] text-[var(--ui-glass-btn-default-text)] shadow-sm dark:shadow-[0_4px_24px_rgba(0,0,0,0.35)] hover:border-black/20 dark:hover:border-white/35",
77
+ primary: "bg-slate-900 text-white dark:bg-white dark:text-slate-950 font-semibold shadow-md hover:bg-slate-800 dark:hover:bg-slate-100 border border-slate-700 dark:border-white shadow-[0_4px_20px_rgba(0,0,0,0.2)] dark:shadow-[0_0_24px_rgba(255,255,255,0.25)]",
78
+ luminescent: "bg-gradient-to-r from-slate-800/80 to-slate-900/80 text-white dark:from-white/15 dark:to-white/5 dark:text-white backdrop-blur-xl border border-white/20 dark:border-white/30 shadow-[0_0_20px_-4px_rgba(255,255,255,0.15)] hover:border-white/50 hover:shadow-[0_0_30px_-4px_rgba(255,255,255,0.3)]",
79
+ ghost: "bg-transparent hover:bg-black/5 dark:hover:bg-white/10 backdrop-blur-sm border border-transparent hover:border-black/10 dark:hover:border-white/15 text-[var(--ui-glass-text-secondary)] hover:text-[var(--ui-glass-text-primary)]"
80
+ },
81
+ size: {
82
+ sm: "h-8 px-3.5 text-xs rounded-xl gap-1.5",
83
+ md: "h-10 px-5 text-sm rounded-2xl gap-2",
84
+ lg: "h-12 px-7 text-base rounded-2xl gap-2.5",
85
+ icon: "h-10 w-10 rounded-2xl"
86
+ }
87
+ },
88
+ defaultVariants: {
89
+ variant: "default",
90
+ size: "md"
91
+ }
92
+ }
93
+ );
94
+ var GlassButton = forwardRef(
95
+ ({ className, variant, size, shimmer = true, children, ...props }, ref) => {
96
+ return /* @__PURE__ */ jsxs(
97
+ "button",
98
+ {
99
+ ref,
100
+ className: cn(glassButtonVariants({ variant, size, className })),
101
+ ...props,
102
+ children: [
103
+ shimmer && /* @__PURE__ */ jsx(
104
+ "span",
105
+ {
106
+ className: "pointer-events-none absolute -inset-full top-0 block -rotate-45 bg-gradient-to-r from-transparent via-white/25 dark:via-white/15 to-transparent transition-all duration-700 motion-safe:group-hover:translate-x-full",
107
+ "aria-hidden": "true"
108
+ }
109
+ ),
110
+ /* @__PURE__ */ jsx("span", { className: "relative z-10 inline-flex items-center gap-2", children })
111
+ ]
112
+ }
113
+ );
114
+ }
115
+ );
116
+ GlassButton.displayName = "GlassButton";
117
+ var glassBadgeVariants = cva(
118
+ "inline-flex items-center font-sans font-semibold tracking-tight rounded-full backdrop-blur-xl border transition-all select-none",
119
+ {
120
+ variants: {
121
+ variant: {
122
+ default: "bg-[var(--ui-bg-secondary)]/80 text-[var(--ui-text-primary)] border-[var(--ui-border-default)] shadow-xs",
123
+ emerald: "bg-emerald-500/15 text-emerald-600 dark:text-emerald-400 border-emerald-500/25 shadow-xs shadow-emerald-500/10",
124
+ cyan: "bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-500/25 shadow-xs shadow-blue-500/10",
125
+ purple: "bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-500/25 shadow-xs shadow-purple-500/10",
126
+ amber: "bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-500/25 shadow-xs shadow-amber-500/10",
127
+ rose: "bg-rose-500/15 text-rose-600 dark:text-rose-400 border-rose-500/25 shadow-xs shadow-rose-500/10"
128
+ },
129
+ size: {
130
+ sm: "text-[10px] px-2 py-0.5 gap-1",
131
+ md: "text-[11px] px-2.5 py-0.5 gap-1.5",
132
+ lg: "text-xs px-3 py-1 gap-1.5"
133
+ }
134
+ },
135
+ defaultVariants: {
136
+ variant: "default",
137
+ size: "md"
138
+ }
139
+ }
140
+ );
141
+ var GlassBadge = ({
142
+ className,
143
+ variant,
144
+ size,
145
+ dot = false,
146
+ children,
147
+ ...props
148
+ }) => {
149
+ return /* @__PURE__ */ jsxs("span", { className: cn(glassBadgeVariants({ variant, size, className })), ...props, children: [
150
+ dot && /* @__PURE__ */ jsx(
151
+ "span",
152
+ {
153
+ className: "h-1.5 w-1.5 rounded-full bg-current motion-safe:animate-pulse shrink-0",
154
+ "aria-hidden": "true"
155
+ }
156
+ ),
157
+ /* @__PURE__ */ jsx("span", { children })
158
+ ] });
159
+ };
160
+
161
+ export { GlassBadge, GlassButton, GlassCard, glass_exports };
162
+ //# sourceMappingURL=chunk-A7P3O5Z5.js.map
163
+ //# sourceMappingURL=chunk-A7P3O5Z5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/glass/index.ts","../src/glass/GlassCard.tsx","../src/glass/GlassButton.tsx","../src/glass/GlassBadge.tsx"],"names":["cva","forwardRef","jsxs","jsx"],"mappings":"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","file":"chunk-A7P3O5Z5.js","sourcesContent":["export * from './GlassCard';\r\nexport * from './GlassButton';\r\nexport * from './GlassBadge';\r\n","import React, { forwardRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils/cn';\r\n\r\nconst glassCardVariants = cva(\r\n 'relative overflow-hidden transition-all duration-300 text-[var(--ui-glass-text-primary)]',\r\n {\r\n variants: {\r\n intensity: {\r\n subtle:\r\n 'bg-[var(--ui-glass-subtle-bg)] backdrop-blur-[var(--ui-glass-subtle-blur)] border border-[var(--ui-glass-subtle-border)]',\r\n standard:\r\n 'bg-[var(--ui-glass-standard-bg)] backdrop-blur-[var(--ui-glass-standard-blur)] border border-[var(--ui-glass-standard-border)] shadow-[var(--ui-glass-standard-shadow)]',\r\n frosted:\r\n 'bg-[var(--ui-glass-frosted-bg)] backdrop-blur-[var(--ui-glass-frosted-blur)] border border-[var(--ui-glass-frosted-border)] shadow-[var(--ui-glass-frosted-shadow)]',\r\n acrylic:\r\n 'bg-[image:var(--ui-glass-acrylic-bg)] backdrop-blur-[var(--ui-glass-acrylic-blur)] border border-[var(--ui-glass-acrylic-border)] shadow-[var(--ui-glass-acrylic-shadow)]',\r\n },\r\n glow: {\r\n none: '',\r\n cyan: 'hover:shadow-[0_0_40px_-8px_rgba(56,189,248,0.3)] hover:border-sky-400/40',\r\n purple: 'hover:shadow-[0_0_40px_-8px_rgba(192,132,252,0.3)] hover:border-purple-400/40',\r\n white: 'hover:shadow-[0_0_35px_-8px_rgba(255,255,255,0.25)] hover:border-white/30',\r\n },\r\n radius: {\r\n md: 'rounded-xl',\r\n lg: 'rounded-2xl',\r\n xl: 'rounded-3xl',\r\n },\r\n padding: {\r\n sm: 'p-4',\r\n md: 'p-6',\r\n lg: 'p-8',\r\n },\r\n },\r\n defaultVariants: {\r\n intensity: 'standard',\r\n glow: 'none',\r\n radius: 'lg',\r\n padding: 'md',\r\n },\r\n }\r\n);\r\n\r\nexport interface GlassCardProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof glassCardVariants> {\r\n specularLight?: boolean;\r\n}\r\n\r\nexport const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(\r\n ({ className, intensity, glow, radius, padding, specularLight = true, children, ...props }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(glassCardVariants({ intensity, glow, radius, padding, className }))}\r\n {...props}\r\n >\r\n {specularLight && (\r\n <div\r\n className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-[image:var(--ui-glass-specular-light)] opacity-80\"\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n {children}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nGlassCard.displayName = 'GlassCard';\r\n","import React, { forwardRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils/cn';\r\n\r\nconst glassButtonVariants = cva(\r\n 'group relative inline-flex items-center justify-center font-medium tracking-tight transition-all duration-300 active:scale-[0.97] disabled:pointer-events-none disabled:opacity-40 overflow-hidden cursor-pointer select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-900 dark:focus-visible:ring-white/90 focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--ui-focus-ring-offset)]',\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n 'bg-[var(--ui-glass-btn-default-bg)] hover:bg-[var(--ui-glass-btn-default-hover)] backdrop-blur-md border border-[var(--ui-glass-btn-default-border)] text-[var(--ui-glass-btn-default-text)] shadow-sm dark:shadow-[0_4px_24px_rgba(0,0,0,0.35)] hover:border-black/20 dark:hover:border-white/35',\r\n primary:\r\n 'bg-slate-900 text-white dark:bg-white dark:text-slate-950 font-semibold shadow-md hover:bg-slate-800 dark:hover:bg-slate-100 border border-slate-700 dark:border-white shadow-[0_4px_20px_rgba(0,0,0,0.2)] dark:shadow-[0_0_24px_rgba(255,255,255,0.25)]',\r\n luminescent:\r\n 'bg-gradient-to-r from-slate-800/80 to-slate-900/80 text-white dark:from-white/15 dark:to-white/5 dark:text-white backdrop-blur-xl border border-white/20 dark:border-white/30 shadow-[0_0_20px_-4px_rgba(255,255,255,0.15)] hover:border-white/50 hover:shadow-[0_0_30px_-4px_rgba(255,255,255,0.3)]',\r\n ghost:\r\n 'bg-transparent hover:bg-black/5 dark:hover:bg-white/10 backdrop-blur-sm border border-transparent hover:border-black/10 dark:hover:border-white/15 text-[var(--ui-glass-text-secondary)] hover:text-[var(--ui-glass-text-primary)]',\r\n },\r\n size: {\r\n sm: 'h-8 px-3.5 text-xs rounded-xl gap-1.5',\r\n md: 'h-10 px-5 text-sm rounded-2xl gap-2',\r\n lg: 'h-12 px-7 text-base rounded-2xl gap-2.5',\r\n icon: 'h-10 w-10 rounded-2xl',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'default',\r\n size: 'md',\r\n },\r\n }\r\n);\r\n\r\nexport interface GlassButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof glassButtonVariants> {\r\n shimmer?: boolean;\r\n}\r\n\r\nexport const GlassButton = forwardRef<HTMLButtonElement, GlassButtonProps>(\r\n ({ className, variant, size, shimmer = true, children, ...props }, ref) => {\r\n return (\r\n <button\r\n ref={ref}\r\n className={cn(glassButtonVariants({ variant, size, className }))}\r\n {...props}\r\n >\r\n {shimmer && (\r\n <span\r\n className=\"pointer-events-none absolute -inset-full top-0 block -rotate-45 bg-gradient-to-r from-transparent via-white/25 dark:via-white/15 to-transparent transition-all duration-700 motion-safe:group-hover:translate-x-full\"\r\n aria-hidden=\"true\"\r\n />\r\n )}\r\n <span className=\"relative z-10 inline-flex items-center gap-2\">{children}</span>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nGlassButton.displayName = 'GlassButton';\r\n","import React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nconst glassBadgeVariants = cva(\n 'inline-flex items-center font-sans font-semibold tracking-tight rounded-full backdrop-blur-xl border transition-all select-none',\n {\n variants: {\n variant: {\n default:\n 'bg-[var(--ui-bg-secondary)]/80 text-[var(--ui-text-primary)] border-[var(--ui-border-default)] shadow-xs',\n emerald:\n 'bg-emerald-500/15 text-emerald-600 dark:text-emerald-400 border-emerald-500/25 shadow-xs shadow-emerald-500/10',\n cyan:\n 'bg-blue-500/15 text-blue-600 dark:text-blue-400 border-blue-500/25 shadow-xs shadow-blue-500/10',\n purple:\n 'bg-purple-500/15 text-purple-600 dark:text-purple-400 border-purple-500/25 shadow-xs shadow-purple-500/10',\n amber:\n 'bg-amber-500/15 text-amber-600 dark:text-amber-400 border-amber-500/25 shadow-xs shadow-amber-500/10',\n rose:\n 'bg-rose-500/15 text-rose-600 dark:text-rose-400 border-rose-500/25 shadow-xs shadow-rose-500/10',\n },\n size: {\n sm: 'text-[10px] px-2 py-0.5 gap-1',\n md: 'text-[11px] px-2.5 py-0.5 gap-1.5',\n lg: 'text-xs px-3 py-1 gap-1.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n);\n\nexport interface GlassBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof glassBadgeVariants> {\n dot?: boolean;\n}\n\nexport const GlassBadge: React.FC<GlassBadgeProps> = ({\n className,\n variant,\n size,\n dot = false,\n children,\n ...props\n}) => {\n return (\n <span className={cn(glassBadgeVariants({ variant, size, className }))} {...props}>\n {dot && (\n <span\n className=\"h-1.5 w-1.5 rounded-full bg-current motion-safe:animate-pulse shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n <span>{children}</span>\n </span>\n );\n};\n"]}