@glinui/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 (244) hide show
  1. package/dist/components/accordion.d.ts +42 -0
  2. package/dist/components/accordion.d.ts.map +1 -0
  3. package/dist/components/accordion.js +85 -0
  4. package/dist/components/alert-dialog.d.ts +30 -0
  5. package/dist/components/alert-dialog.d.ts.map +1 -0
  6. package/dist/components/alert-dialog.js +53 -0
  7. package/dist/components/alert.d.ts +15 -0
  8. package/dist/components/alert.d.ts.map +1 -0
  9. package/dist/components/alert.js +39 -0
  10. package/dist/components/animated-gradient.d.ts +11 -0
  11. package/dist/components/animated-gradient.d.ts.map +1 -0
  12. package/dist/components/animated-gradient.js +23 -0
  13. package/dist/components/aurora-background.d.ts +15 -0
  14. package/dist/components/aurora-background.d.ts.map +1 -0
  15. package/dist/components/aurora-background.js +26 -0
  16. package/dist/components/avatar.d.ts +54 -0
  17. package/dist/components/avatar.d.ts.map +1 -0
  18. package/dist/components/avatar.js +92 -0
  19. package/dist/components/badge.d.ts +13 -0
  20. package/dist/components/badge.d.ts.map +1 -0
  21. package/dist/components/badge.js +32 -0
  22. package/dist/components/blur-fade.d.ts +17 -0
  23. package/dist/components/blur-fade.d.ts.map +1 -0
  24. package/dist/components/blur-fade.js +48 -0
  25. package/dist/components/blur-spotlight.d.ts +13 -0
  26. package/dist/components/blur-spotlight.d.ts.map +1 -0
  27. package/dist/components/blur-spotlight.js +58 -0
  28. package/dist/components/border-beam.d.ts +11 -0
  29. package/dist/components/border-beam.d.ts.map +1 -0
  30. package/dist/components/border-beam.js +14 -0
  31. package/dist/components/button.d.ts +17 -0
  32. package/dist/components/button.d.ts.map +1 -0
  33. package/dist/components/button.js +33 -0
  34. package/dist/components/card.d.ts +39 -0
  35. package/dist/components/card.d.ts.map +1 -0
  36. package/dist/components/card.js +81 -0
  37. package/dist/components/checkbox.d.ts +14 -0
  38. package/dist/components/checkbox.d.ts.map +1 -0
  39. package/dist/components/checkbox.js +58 -0
  40. package/dist/components/chip.d.ts +15 -0
  41. package/dist/components/chip.d.ts.map +1 -0
  42. package/dist/components/chip.js +35 -0
  43. package/dist/components/chromatic-text.d.ts +11 -0
  44. package/dist/components/chromatic-text.d.ts.map +1 -0
  45. package/dist/components/chromatic-text.js +22 -0
  46. package/dist/components/code.d.ts +13 -0
  47. package/dist/components/code.d.ts.map +1 -0
  48. package/dist/components/code.js +27 -0
  49. package/dist/components/command.d.ts +89 -0
  50. package/dist/components/command.d.ts.map +1 -0
  51. package/dist/components/command.js +123 -0
  52. package/dist/components/counter.d.ts +19 -0
  53. package/dist/components/counter.d.ts.map +1 -0
  54. package/dist/components/counter.js +28 -0
  55. package/dist/components/data-table.d.ts +38 -0
  56. package/dist/components/data-table.d.ts.map +1 -0
  57. package/dist/components/data-table.js +183 -0
  58. package/dist/components/depth-card.d.ts +15 -0
  59. package/dist/components/depth-card.d.ts.map +1 -0
  60. package/dist/components/depth-card.js +52 -0
  61. package/dist/components/dot-pattern.d.ts +10 -0
  62. package/dist/components/dot-pattern.d.ts.map +1 -0
  63. package/dist/components/dot-pattern.js +10 -0
  64. package/dist/components/dropdown-menu.d.ts +74 -0
  65. package/dist/components/dropdown-menu.d.ts.map +1 -0
  66. package/dist/components/dropdown-menu.js +90 -0
  67. package/dist/components/floating-panel.d.ts +17 -0
  68. package/dist/components/floating-panel.d.ts.map +1 -0
  69. package/dist/components/floating-panel.js +57 -0
  70. package/dist/components/glass-breadcrumb.d.ts +17 -0
  71. package/dist/components/glass-breadcrumb.d.ts.map +1 -0
  72. package/dist/components/glass-breadcrumb.js +14 -0
  73. package/dist/components/glass-card.d.ts +20 -0
  74. package/dist/components/glass-card.d.ts.map +1 -0
  75. package/dist/components/glass-card.js +36 -0
  76. package/dist/components/glass-dock.d.ts +21 -0
  77. package/dist/components/glass-dock.d.ts.map +1 -0
  78. package/dist/components/glass-dock.js +54 -0
  79. package/dist/components/glass-navbar.d.ts +21 -0
  80. package/dist/components/glass-navbar.d.ts.map +1 -0
  81. package/dist/components/glass-navbar.js +43 -0
  82. package/dist/components/glass-toggle.d.ts +15 -0
  83. package/dist/components/glass-toggle.d.ts.map +1 -0
  84. package/dist/components/glass-toggle.js +32 -0
  85. package/dist/components/glow-border.d.ts +13 -0
  86. package/dist/components/glow-border.d.ts.map +1 -0
  87. package/dist/components/glow-border.js +10 -0
  88. package/dist/components/gradient-mesh.d.ts +13 -0
  89. package/dist/components/gradient-mesh.d.ts.map +1 -0
  90. package/dist/components/gradient-mesh.js +25 -0
  91. package/dist/components/heading.d.ts +18 -0
  92. package/dist/components/heading.d.ts.map +1 -0
  93. package/dist/components/heading.js +28 -0
  94. package/dist/components/hover-card.d.ts +32 -0
  95. package/dist/components/hover-card.d.ts.map +1 -0
  96. package/dist/components/hover-card.js +28 -0
  97. package/dist/components/icon-frame.d.ts +13 -0
  98. package/dist/components/icon-frame.d.ts.map +1 -0
  99. package/dist/components/icon-frame.js +27 -0
  100. package/dist/components/input.d.ts +13 -0
  101. package/dist/components/input.d.ts.map +1 -0
  102. package/dist/components/input.js +38 -0
  103. package/dist/components/kbd.d.ts +13 -0
  104. package/dist/components/kbd.d.ts.map +1 -0
  105. package/dist/components/kbd.js +27 -0
  106. package/dist/components/label.d.ts +13 -0
  107. package/dist/components/label.d.ts.map +1 -0
  108. package/dist/components/label.js +27 -0
  109. package/dist/components/light-leak.d.ts +15 -0
  110. package/dist/components/light-leak.d.ts.map +1 -0
  111. package/dist/components/light-leak.js +29 -0
  112. package/dist/components/link.d.ts +15 -0
  113. package/dist/components/link.d.ts.map +1 -0
  114. package/dist/components/link.js +32 -0
  115. package/dist/components/liquid-button.d.ts +17 -0
  116. package/dist/components/liquid-button.d.ts.map +1 -0
  117. package/dist/components/liquid-button.js +18 -0
  118. package/dist/components/magnetic-cta.d.ts +18 -0
  119. package/dist/components/magnetic-cta.d.ts.map +1 -0
  120. package/dist/components/magnetic-cta.js +46 -0
  121. package/dist/components/marquee.d.ts +10 -0
  122. package/dist/components/marquee.d.ts.map +1 -0
  123. package/dist/components/marquee.js +16 -0
  124. package/dist/components/meteor-shower.d.ts +11 -0
  125. package/dist/components/meteor-shower.d.ts.map +1 -0
  126. package/dist/components/meteor-shower.js +39 -0
  127. package/dist/components/modal.d.ts +30 -0
  128. package/dist/components/modal.d.ts.map +1 -0
  129. package/dist/components/modal.js +39 -0
  130. package/dist/components/morphing-tabs.d.ts +22 -0
  131. package/dist/components/morphing-tabs.d.ts.map +1 -0
  132. package/dist/components/morphing-tabs.js +72 -0
  133. package/dist/components/number-ticker.d.ts +11 -0
  134. package/dist/components/number-ticker.d.ts.map +1 -0
  135. package/dist/components/number-ticker.js +66 -0
  136. package/dist/components/orbiting-circles.d.ts +21 -0
  137. package/dist/components/orbiting-circles.d.ts.map +1 -0
  138. package/dist/components/orbiting-circles.js +24 -0
  139. package/dist/components/particle-field.d.ts +19 -0
  140. package/dist/components/particle-field.d.ts.map +1 -0
  141. package/dist/components/particle-field.js +41 -0
  142. package/dist/components/popover.d.ts +27 -0
  143. package/dist/components/popover.d.ts.map +1 -0
  144. package/dist/components/popover.js +52 -0
  145. package/dist/components/prism-border.d.ts +13 -0
  146. package/dist/components/prism-border.d.ts.map +1 -0
  147. package/dist/components/prism-border.js +16 -0
  148. package/dist/components/progress.d.ts +58 -0
  149. package/dist/components/progress.d.ts.map +1 -0
  150. package/dist/components/progress.js +108 -0
  151. package/dist/components/pulsating-button.d.ts +13 -0
  152. package/dist/components/pulsating-button.d.ts.map +1 -0
  153. package/dist/components/pulsating-button.js +40 -0
  154. package/dist/components/radio-group.d.ts +27 -0
  155. package/dist/components/radio-group.d.ts.map +1 -0
  156. package/dist/components/radio-group.js +58 -0
  157. package/dist/components/retro-grid.d.ts +13 -0
  158. package/dist/components/retro-grid.d.ts.map +1 -0
  159. package/dist/components/retro-grid.js +17 -0
  160. package/dist/components/reveal-text.d.ts +17 -0
  161. package/dist/components/reveal-text.d.ts.map +1 -0
  162. package/dist/components/reveal-text.js +61 -0
  163. package/dist/components/ripple-button.d.ts +11 -0
  164. package/dist/components/ripple-button.d.ts.map +1 -0
  165. package/dist/components/ripple-button.js +47 -0
  166. package/dist/components/ripple.d.ts +13 -0
  167. package/dist/components/ripple.d.ts.map +1 -0
  168. package/dist/components/ripple.js +24 -0
  169. package/dist/components/select.d.ts +24 -0
  170. package/dist/components/select.d.ts.map +1 -0
  171. package/dist/components/select.js +30 -0
  172. package/dist/components/separator.d.ts +29 -0
  173. package/dist/components/separator.d.ts.map +1 -0
  174. package/dist/components/separator.js +84 -0
  175. package/dist/components/sheet.d.ts +41 -0
  176. package/dist/components/sheet.d.ts.map +1 -0
  177. package/dist/components/sheet.js +85 -0
  178. package/dist/components/shimmer-button.d.ts +13 -0
  179. package/dist/components/shimmer-button.d.ts.map +1 -0
  180. package/dist/components/shimmer-button.js +32 -0
  181. package/dist/components/skeleton.d.ts +17 -0
  182. package/dist/components/skeleton.d.ts.map +1 -0
  183. package/dist/components/skeleton.js +42 -0
  184. package/dist/components/slider.d.ts +14 -0
  185. package/dist/components/slider.d.ts.map +1 -0
  186. package/dist/components/slider.js +89 -0
  187. package/dist/components/sonner.d.ts +14 -0
  188. package/dist/components/sonner.d.ts.map +1 -0
  189. package/dist/components/sonner.js +70 -0
  190. package/dist/components/spotlight-card.d.ts +11 -0
  191. package/dist/components/spotlight-card.d.ts.map +1 -0
  192. package/dist/components/spotlight-card.js +39 -0
  193. package/dist/components/spotlight.d.ts +19 -0
  194. package/dist/components/spotlight.d.ts.map +1 -0
  195. package/dist/components/spotlight.js +23 -0
  196. package/dist/components/status-dot.d.ts +24 -0
  197. package/dist/components/status-dot.d.ts.map +1 -0
  198. package/dist/components/status-dot.js +46 -0
  199. package/dist/components/switch.d.ts +42 -0
  200. package/dist/components/switch.d.ts.map +1 -0
  201. package/dist/components/switch.js +77 -0
  202. package/dist/components/table.d.ts +69 -0
  203. package/dist/components/table.d.ts.map +1 -0
  204. package/dist/components/table.js +176 -0
  205. package/dist/components/tabs.d.ts +34 -0
  206. package/dist/components/tabs.d.ts.map +1 -0
  207. package/dist/components/tabs.js +75 -0
  208. package/dist/components/text-reveal.d.ts +6 -0
  209. package/dist/components/text-reveal.d.ts.map +1 -0
  210. package/dist/components/text-reveal.js +56 -0
  211. package/dist/components/text.d.ts +13 -0
  212. package/dist/components/text.d.ts.map +1 -0
  213. package/dist/components/text.js +27 -0
  214. package/dist/components/textarea.d.ts +13 -0
  215. package/dist/components/textarea.d.ts.map +1 -0
  216. package/dist/components/textarea.js +37 -0
  217. package/dist/components/toast.d.ts +23 -0
  218. package/dist/components/toast.d.ts.map +1 -0
  219. package/dist/components/toast.js +36 -0
  220. package/dist/components/tooltip.d.ts +35 -0
  221. package/dist/components/tooltip.d.ts.map +1 -0
  222. package/dist/components/tooltip.js +34 -0
  223. package/dist/components/tree.d.ts +50 -0
  224. package/dist/components/tree.d.ts.map +1 -0
  225. package/dist/components/tree.js +77 -0
  226. package/dist/components/typewriter.d.ts +25 -0
  227. package/dist/components/typewriter.d.ts.map +1 -0
  228. package/dist/components/typewriter.js +109 -0
  229. package/dist/components/word-rotate.d.ts +11 -0
  230. package/dist/components/word-rotate.d.ts.map +1 -0
  231. package/dist/components/word-rotate.js +29 -0
  232. package/dist/index.d.ts +80 -0
  233. package/dist/index.d.ts.map +1 -0
  234. package/dist/index.js +79 -0
  235. package/dist/lib/cn.d.ts +3 -0
  236. package/dist/lib/cn.d.ts.map +1 -0
  237. package/dist/lib/cn.js +5 -0
  238. package/dist/lib/use-liquid-glass.d.ts +46 -0
  239. package/dist/lib/use-liquid-glass.d.ts.map +1 -0
  240. package/dist/lib/use-liquid-glass.js +144 -0
  241. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  242. package/dist/lib/use-prefers-reduced-motion.d.ts.map +1 -0
  243. package/dist/lib/use-prefers-reduced-motion.js +23 -0
  244. package/package.json +72 -0
@@ -0,0 +1,42 @@
1
+ import * as React from "react";
2
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
3
+ import { type VariantProps } from "class-variance-authority";
4
+ declare const accordionItemVariants: (props?: ({
5
+ variant?: "default" | "glass" | "frosted" | "outline" | "ghost" | "separated" | null | undefined;
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare const accordionTriggerVariants: (props?: ({
9
+ variant?: "default" | "glass" | "frosted" | "outline" | "ghost" | "separated" | null | undefined;
10
+ size?: "sm" | "md" | "lg" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ declare const accordionContentVariants: (props?: ({
13
+ variant?: "default" | "glass" | "frosted" | "outline" | "ghost" | "separated" | null | undefined;
14
+ size?: "sm" | "md" | "lg" | null | undefined;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
16
+ export type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root> & {
17
+ variant?: "default" | "glass" | "frosted" | "outline" | "ghost" | "separated";
18
+ };
19
+ export declare const Accordion: React.ForwardRefExoticComponent<AccordionProps & React.RefAttributes<HTMLDivElement>>;
20
+ export type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> & VariantProps<typeof accordionItemVariants>;
21
+ export declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
22
+ variant?: "default" | "glass" | "frosted" | "outline" | "ghost" | "separated" | null | undefined;
23
+ size?: "sm" | "md" | "lg" | null | undefined;
24
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
25
+ export type AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & VariantProps<typeof accordionTriggerVariants>;
26
+ export declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
27
+ variant?: "default" | "glass" | "frosted" | "outline" | "ghost" | "separated" | null | undefined;
28
+ size?: "sm" | "md" | "lg" | null | undefined;
29
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
30
+ export type AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> & VariantProps<typeof accordionContentVariants> & {
31
+ /** Padding size matching the trigger */
32
+ contentSize?: "sm" | "md" | "lg";
33
+ };
34
+ export declare const AccordionContent: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
35
+ variant?: "default" | "glass" | "frosted" | "outline" | "ghost" | "separated" | null | undefined;
36
+ size?: "sm" | "md" | "lg" | null | undefined;
37
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
38
+ /** Padding size matching the trigger */
39
+ contentSize?: "sm" | "md" | "lg";
40
+ } & React.RefAttributes<HTMLDivElement>>;
41
+ export {};
42
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/components/accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAOjE,QAAA,MAAM,qBAAqB;;;8EA6B1B,CAAA;AAID,QAAA,MAAM,wBAAwB;;;8EAuB7B,CAAA;AAID,QAAA,MAAM,wBAAwB;;;8EAuB7B,CAAA;AAID,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG;IAC5F,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAA;CAC9E,CAAA;AAED,eAAO,MAAM,SAAS,uFAYpB,CAAA;AAMF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAC7F,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAE5C,eAAO,MAAM,aAAa;;;sHASxB,CAAA;AAMF,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,GACnG,YAAY,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/C,eAAO,MAAM,gBAAgB;;;yHAc3B,CAAA;AAMF,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,GACnG,YAAY,CAAC,OAAO,wBAAwB,CAAC,GAAG;IAC9C,wCAAwC;IACxC,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CACjC,CAAA;AAQH,eAAO,MAAM,gBAAgB;;;;IAVzB,wCAAwC;kBAC1B,IAAI,GAAG,IAAI,GAAG,IAAI;wCAsBlC,CAAA"}
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
4
+ import { cva } from "class-variance-authority";
5
+ import { ChevronDown } from "lucide-react";
6
+ import { cn } from "../lib/cn";
7
+ /* ── Item Variants ─────────────────────────────────────────────────────── */
8
+ const accordionItemVariants = cva("transition-[background-color,border-color,box-shadow] duration-normal ease-standard", {
9
+ variants: {
10
+ variant: {
11
+ default: "rounded-xl border border-[var(--color-border)] bg-[var(--color-surface)] shadow-sm",
12
+ glass: "relative rounded-xl border border-white/15 [border-top-color:var(--glass-refraction-top)] bg-[var(--glass-1-surface)] shadow-[0_0_0_1px_rgb(255_255_255_/_0.06)_inset,var(--shadow-glass-sm)] backdrop-blur-md backdrop-saturate-[180%]",
13
+ frosted: "relative rounded-xl border border-white/25 [border-top-color:var(--glass-refraction-top)] bg-[var(--glass-2-surface)] shadow-[0_0_0_1px_rgb(255_255_255_/_0.1)_inset,0_0_16px_rgb(255_255_255_/_0.1)_inset,var(--shadow-glass-sm)] backdrop-blur-[40px] backdrop-saturate-[200%]",
14
+ outline: "rounded-xl border border-[var(--color-border)] bg-transparent",
15
+ ghost: "rounded-xl border border-transparent",
16
+ separated: "border-b border-[var(--color-border)] last:border-b-0"
17
+ },
18
+ size: {
19
+ sm: "",
20
+ md: "",
21
+ lg: ""
22
+ }
23
+ },
24
+ defaultVariants: {
25
+ variant: "default",
26
+ size: "md"
27
+ }
28
+ });
29
+ /* ── Trigger Variants ──────────────────────────────────────────────────── */
30
+ const accordionTriggerVariants = cva("flex w-full items-center justify-between gap-2 font-medium text-[var(--color-foreground)] transition-[color,background-color] duration-normal ease-standard focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-accent)] focus-visible:ring-offset-2 [&[data-state=open]>svg]:rotate-180", {
31
+ variants: {
32
+ variant: {
33
+ default: "hover:bg-black/[0.03] dark:hover:bg-white/[0.03]",
34
+ glass: "hover:bg-white/[0.06] dark:hover:bg-white/[0.04]",
35
+ frosted: "hover:bg-white/[0.08] dark:hover:bg-white/[0.06]",
36
+ outline: "hover:bg-black/[0.03] dark:hover:bg-white/[0.03]",
37
+ ghost: "hover:bg-black/[0.04] dark:hover:bg-white/[0.04]",
38
+ separated: "hover:underline decoration-[var(--color-border)] underline-offset-4"
39
+ },
40
+ size: {
41
+ sm: "px-3 py-2.5 text-sm",
42
+ md: "px-4 py-3.5 text-sm",
43
+ lg: "px-5 py-4 text-base"
44
+ }
45
+ },
46
+ defaultVariants: {
47
+ variant: "default",
48
+ size: "md"
49
+ }
50
+ });
51
+ /* ── Content Variants ──────────────────────────────────────────────────── */
52
+ const accordionContentVariants = cva("overflow-hidden text-neutral-600 data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down dark:text-neutral-400", {
53
+ variants: {
54
+ variant: {
55
+ default: "",
56
+ glass: "",
57
+ frosted: "",
58
+ outline: "",
59
+ ghost: "",
60
+ separated: ""
61
+ },
62
+ size: {
63
+ sm: "text-xs",
64
+ md: "text-sm",
65
+ lg: "text-base"
66
+ }
67
+ },
68
+ defaultVariants: {
69
+ variant: "default",
70
+ size: "md"
71
+ }
72
+ });
73
+ export const Accordion = React.forwardRef(({ className, variant = "default", ...props }, ref) => (_jsx(AccordionPrimitive.Root, { ref: ref, className: cn(variant === "separated" ? "w-full" : "flex w-full flex-col gap-2", className), ...props })));
74
+ Accordion.displayName = "Accordion";
75
+ export const AccordionItem = React.forwardRef(({ className, variant, size, ...props }, ref) => (_jsx(AccordionPrimitive.Item, { ref: ref, className: cn(accordionItemVariants({ variant, size }), className), ...props })));
76
+ AccordionItem.displayName = "AccordionItem";
77
+ export const AccordionTrigger = React.forwardRef(({ className, children, variant, size, ...props }, ref) => (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { ref: ref, className: cn(accordionTriggerVariants({ variant, size }), className), ...props, children: [children, _jsx(ChevronDown, { className: "size-4 shrink-0 text-neutral-500 transition-transform duration-200 ease-standard motion-reduce:transition-none dark:text-neutral-400" })] }) })));
78
+ AccordionTrigger.displayName = "AccordionTrigger";
79
+ const contentPadding = {
80
+ sm: "px-3 pb-3",
81
+ md: "px-4 pb-4",
82
+ lg: "px-5 pb-5"
83
+ };
84
+ export const AccordionContent = React.forwardRef(({ className, children, variant, size, contentSize, ...props }, ref) => (_jsx(AccordionPrimitive.Content, { ref: ref, className: cn(accordionContentVariants({ variant, size }), className), ...props, children: _jsx("div", { className: contentPadding[contentSize ?? size ?? "md"], children: children }) })));
85
+ AccordionContent.displayName = "AccordionContent";
@@ -0,0 +1,30 @@
1
+ import * as React from "react";
2
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
3
+ import { type VariantProps } from "class-variance-authority";
4
+ declare const alertDialogContentVariants: (props?: ({
5
+ variant?: "default" | "glass" | "matte" | null | undefined;
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare const alertDialogActionVariants: (props?: ({
9
+ variant?: "default" | "glass" | "matte" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ export declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
12
+ export declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
13
+ export declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
14
+ export declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
15
+ export type AlertDialogContentProps = React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content> & VariantProps<typeof alertDialogContentVariants>;
16
+ export declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
17
+ variant?: "default" | "glass" | "matte" | null | undefined;
18
+ size?: "sm" | "md" | "lg" | null | undefined;
19
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
20
+ export declare const AlertDialogHeader: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
21
+ export declare const AlertDialogFooter: ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
22
+ export declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
23
+ export declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
24
+ export type AlertDialogActionProps = React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action> & VariantProps<typeof alertDialogActionVariants>;
25
+ export declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
26
+ variant?: "default" | "glass" | "matte" | null | undefined;
27
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
28
+ export declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
29
+ export {};
30
+ //# sourceMappingURL=alert-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../src/components/alert-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,0BAA0B;;;8EAuB/B,CAAA;AAED,QAAA,MAAM,yBAAyB;;8EAiB9B,CAAA;AAMD,eAAO,MAAM,WAAW,iDAA4B,CAAA;AACpD,eAAO,MAAM,kBAAkB,wHAA+B,CAAA;AAC9D,eAAO,MAAM,iBAAiB,uDAA8B,CAAA;AAE5D,eAAO,MAAM,kBAAkB,wKAY7B,CAAA;AAIF,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,wBAAwB,CAClE,OAAO,oBAAoB,CAAC,OAAO,CACpC,GACC,YAAY,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEjD,eAAO,MAAM,kBAAkB;;;sHAY7B,CAAA;AAIF,eAAO,MAAM,iBAAiB,GAAI,yBAG/B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,4CAEtC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,yBAG/B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,4CAQtC,CAAA;AAED,eAAO,MAAM,gBAAgB,8KAS3B,CAAA;AAIF,eAAO,MAAM,sBAAsB,wLASjC,CAAA;AAIF,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,wBAAwB,CACjE,OAAO,oBAAoB,CAAC,MAAM,CACnC,GACC,YAAY,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEhD,eAAO,MAAM,iBAAiB;;yHAS5B,CAAA;AAIF,eAAO,MAAM,iBAAiB,6KAS5B,CAAA"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../lib/cn";
6
+ const alertDialogContentVariants = cva("fixed left-1/2 top-1/2 z-50 grid w-[min(92vw,32rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-2xl border p-6 text-[var(--color-foreground)] outline-none duration-normal ease-standard data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95 data-[state=open]:slide-in-from-bottom-3 data-[state=closed]:slide-out-to-bottom-3 motion-reduce:transition-none motion-reduce:data-[state=open]:animate-none motion-reduce:data-[state=closed]:animate-none", {
7
+ variants: {
8
+ variant: {
9
+ default: "border-black/10 bg-[linear-gradient(180deg,rgb(255_255_255),rgb(244_244_246))] shadow-[0_1px_0_rgb(255_255_255_/_0.9)_inset,0_24px_50px_-30px_rgb(15_23_42_/_0.45)] dark:border-white/[0.14] dark:bg-[linear-gradient(180deg,rgb(58_64_74_/_0.94),rgb(38_42_50_/_0.94))] dark:shadow-[0_1px_0_rgb(255_255_255_/_0.08)_inset,0_26px_52px_-30px_rgb(0_0_0_/_0.72)]",
10
+ glass: "border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[linear-gradient(155deg,rgb(255_255_255_/_0.66),rgb(245_245_245_/_0.35))] backdrop-blur-xl backdrop-saturate-[180%] shadow-[0_0_0_1px_rgb(255_255_255_/_0.2)_inset,0_24px_50px_-30px_rgb(15_23_42_/_0.35)] dark:border-white/[0.12] dark:bg-[linear-gradient(155deg,rgb(255_255_255_/_0.14),rgb(255_255_255_/_0.05))] dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.1)_inset,0_26px_52px_-30px_rgb(0_0_0_/_0.7)]",
11
+ matte: "border-black/12 bg-[linear-gradient(180deg,rgb(248_248_249),rgb(234_234_236))] shadow-[0_1px_0_rgb(255_255_255_/_0.88)_inset,0_20px_42px_-28px_rgb(15_23_42_/_0.4)] dark:border-white/[0.16] dark:bg-[linear-gradient(180deg,rgb(50_55_63_/_0.96),rgb(33_37_44_/_0.96))] dark:shadow-[0_1px_0_rgb(255_255_255_/_0.1)_inset,0_22px_44px_-28px_rgb(0_0_0_/_0.7)]"
12
+ },
13
+ size: {
14
+ sm: "w-[min(92vw,28rem)] p-5",
15
+ md: "w-[min(92vw,32rem)] p-6",
16
+ lg: "w-[min(94vw,38rem)] p-7"
17
+ }
18
+ },
19
+ defaultVariants: {
20
+ variant: "glass",
21
+ size: "md"
22
+ }
23
+ });
24
+ const alertDialogActionVariants = cva("inline-flex h-10 items-center justify-center rounded-lg border border-transparent px-4 text-sm font-medium transition-[background-color,color,border-color] duration-fast ease-standard focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-accent)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-60", {
25
+ variants: {
26
+ variant: {
27
+ default: "bg-neutral-900 text-white hover:bg-neutral-800 dark:bg-neutral-100 dark:text-neutral-950 dark:hover:bg-white",
28
+ glass: "border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[linear-gradient(155deg,rgb(255_255_255_/_0.66),rgb(246_246_246_/_0.36))] text-[var(--color-foreground)] backdrop-blur-lg backdrop-saturate-[180%] hover:bg-[linear-gradient(155deg,rgb(255_255_255_/_0.78),rgb(249_249_249_/_0.45))] dark:border-white/[0.12] dark:bg-[linear-gradient(155deg,rgb(255_255_255_/_0.15),rgb(255_255_255_/_0.06))] dark:hover:bg-[linear-gradient(155deg,rgb(255_255_255_/_0.2),rgb(255_255_255_/_0.08))]",
29
+ matte: "border-black/12 bg-[linear-gradient(180deg,rgb(248_248_249),rgb(232_232_235))] text-[var(--color-foreground)] hover:bg-[linear-gradient(180deg,rgb(252_252_252),rgb(238_238_240))] dark:border-white/[0.16] dark:bg-[linear-gradient(180deg,rgb(50_55_63_/_0.96),rgb(33_37_44_/_0.96))] dark:hover:bg-[linear-gradient(180deg,rgb(56_61_69_/_0.96),rgb(38_42_50_/_0.96))]"
30
+ }
31
+ },
32
+ defaultVariants: {
33
+ variant: "default"
34
+ }
35
+ });
36
+ const alertDialogCancelVariants = cva("inline-flex h-10 items-center justify-center rounded-lg border border-black/12 bg-black/[0.03] px-4 text-sm font-medium text-[var(--color-foreground)] transition-[background-color,color,border-color] duration-fast ease-standard hover:bg-black/[0.07] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-accent)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-60 dark:border-white/[0.16] dark:bg-white/[0.06] dark:hover:bg-white/[0.1]");
37
+ export const AlertDialog = AlertDialogPrimitive.Root;
38
+ export const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
39
+ export const AlertDialogPortal = AlertDialogPrimitive.Portal;
40
+ export const AlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Overlay, { ref: ref, className: cn("fixed inset-0 z-50 bg-[radial-gradient(circle_at_top,rgb(15_23_42_/_0.24),rgb(2_6_23_/_0.52))] backdrop-blur-[2px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 duration-normal ease-standard motion-reduce:data-[state=open]:animate-none motion-reduce:data-[state=closed]:animate-none dark:bg-[radial-gradient(circle_at_top,rgb(15_23_42_/_0.36),rgb(2_6_23_/_0.74))]", className), ...props })));
41
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
42
+ export const AlertDialogContent = React.forwardRef(({ className, variant, size, ...props }, ref) => (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { ref: ref, className: cn(alertDialogContentVariants({ variant, size }), className), ...props })] })));
43
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
44
+ export const AlertDialogHeader = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col gap-2 text-left", className), ...props }));
45
+ export const AlertDialogFooter = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col-reverse gap-2 border-t border-black/10 pt-4 sm:flex-row sm:justify-end dark:border-white/[0.12]", className), ...props }));
46
+ export const AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Title, { ref: ref, className: cn("text-lg font-semibold tracking-tight", className), ...props })));
47
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
48
+ export const AlertDialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Description, { ref: ref, className: cn("text-sm leading-relaxed text-neutral-600 dark:text-neutral-300", className), ...props })));
49
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
50
+ export const AlertDialogAction = React.forwardRef(({ className, variant, ...props }, ref) => (_jsx(AlertDialogPrimitive.Action, { ref: ref, className: cn(alertDialogActionVariants({ variant }), className), ...props })));
51
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
52
+ export const AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Cancel, { ref: ref, className: cn(alertDialogCancelVariants(), className), ...props })));
53
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const alertVariants: (props?: ({
4
+ variant?: "default" | "glass" | "outline" | "ghost" | "matte" | "liquid" | "glow" | "success" | "warning" | "destructive" | "info" | null | undefined;
5
+ size?: "sm" | "md" | "lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type AlertProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>;
8
+ export declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
9
+ variant?: "default" | "glass" | "outline" | "ghost" | "matte" | "liquid" | "glow" | "success" | "warning" | "destructive" | "info" | null | undefined;
10
+ size?: "sm" | "md" | "lg" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
12
+ export declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLHeadingElement>>;
13
+ export declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
14
+ export {};
15
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/components/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAMjE,QAAA,MAAM,aAAa;;;8EAiDlB,CAAA;AAID,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAA;AAElG,eAAO,MAAM,KAAK;;;sHAIjB,CAAA;AAMD,eAAO,MAAM,UAAU,qHAItB,CAAA;AAMD,eAAO,MAAM,gBAAgB,yHAI5B,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../lib/cn";
5
+ /* ── Alert Variants ───────────────────────────────────────────────────────── */
6
+ const alertVariants = cva("relative w-full rounded-xl border text-sm transition-[background-color,border-color,box-shadow,color] duration-normal ease-standard [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg+div]:translate-y-[-3px] [&:has(svg)]:pl-11 motion-reduce:transition-none", {
7
+ variants: {
8
+ variant: {
9
+ default: "relative isolate overflow-hidden border-black/10 bg-[linear-gradient(180deg,rgb(255_255_255),rgb(244_244_246))] text-[var(--color-foreground)] shadow-[0_1px_0_rgb(255_255_255_/_0.9)_inset,0_10px_22px_-14px_rgb(15_23_42_/_0.3)] before:pointer-events-none before:absolute before:inset-0 before:bg-[linear-gradient(180deg,rgb(255_255_255_/_0.58),transparent)] [&>svg]:text-neutral-600 dark:border-white/[0.14] dark:bg-[linear-gradient(180deg,rgb(56_62_72_/_0.94),rgb(36_40_48_/_0.94))] dark:shadow-[0_1px_0_rgb(255_255_255_/_0.08)_inset,0_12px_24px_-14px_rgb(0_0_0_/_0.65)] dark:before:bg-[linear-gradient(180deg,rgb(255_255_255_/_0.1),transparent)] dark:[&>svg]:text-neutral-300",
10
+ glass: "relative isolate overflow-hidden border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[linear-gradient(155deg,rgb(255_255_255_/_0.62),rgb(245_245_245_/_0.36))] text-[var(--color-foreground)] backdrop-blur-md backdrop-saturate-[180%] shadow-[0_0_0_1px_rgb(255_255_255_/_0.2)_inset,0_8px_20px_-12px_rgb(2_6_23_/_0.25)] before:pointer-events-none before:absolute before:inset-x-0 before:top-0 before:h-px before:bg-gradient-to-r before:from-transparent before:via-white/45 before:to-transparent dark:border-white/[0.12] dark:bg-[linear-gradient(155deg,rgb(255_255_255_/_0.1),rgb(255_255_255_/_0.04))] dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.08)_inset,0_8px_20px_-12px_rgb(0_0_0_/_0.4)] dark:before:via-white/20",
11
+ liquid: "relative isolate overflow-hidden border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[radial-gradient(circle_at_18%_16%,rgb(255_255_255_/_0.88),transparent_40%),linear-gradient(148deg,rgb(255_255_255_/_0.74),rgb(232_232_232_/_0.5))] text-[var(--color-foreground)] backdrop-blur-xl backdrop-saturate-[180%] shadow-[0_0_0_1px_rgb(255_255_255_/_0.2)_inset,0_10px_24px_-14px_rgb(2_6_23_/_0.3)] before:pointer-events-none before:absolute before:inset-0 before:bg-[radial-gradient(circle_at_80%_72%,rgb(255_255_255_/_0.34),transparent_48%)] before:opacity-80 dark:border-white/[0.12] dark:bg-[linear-gradient(145deg,rgb(255_255_255_/_0.14),rgb(255_255_255_/_0.05))] dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.1)_inset,0_10px_24px_-14px_rgb(0_0_0_/_0.45)] dark:before:opacity-55",
12
+ matte: "relative isolate overflow-hidden border-black/10 bg-[linear-gradient(180deg,rgb(250_250_250),rgb(234_234_236))] text-neutral-900 shadow-[0_1px_0_rgb(255_255_255_/_0.92)_inset,0_6px_16px_-10px_rgb(15_23_42_/_0.25)] before:pointer-events-none before:absolute before:inset-0 before:bg-[linear-gradient(180deg,rgb(255_255_255_/_0.62),transparent)] dark:border-white/[0.14] dark:bg-[linear-gradient(180deg,rgb(53_58_67_/_0.92),rgb(34_38_46_/_0.92))] dark:text-neutral-100 dark:shadow-[0_1px_0_rgb(255_255_255_/_0.12)_inset,0_6px_16px_-10px_rgb(0_0_0_/_0.5)] dark:before:bg-[linear-gradient(180deg,rgb(255_255_255_/_0.12),transparent)]",
13
+ glow: "border-white/20 bg-neutral-900 text-white shadow-[0_0_0_1px_rgb(255_255_255_/_0.12)_inset,0_0_20px_rgb(255_255_255_/_0.15)] [&>svg]:text-white dark:border-white/40 dark:bg-neutral-100 dark:text-neutral-950 dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.55),0_0_20px_rgb(255_255_255_/_0.25)] dark:[&>svg]:text-neutral-950",
14
+ outline: "border-[var(--color-border)] bg-transparent text-[var(--color-foreground)]",
15
+ ghost: "border-transparent bg-transparent text-[var(--color-foreground)]",
16
+ success: "border-emerald-200/60 bg-emerald-50 text-emerald-800 shadow-[0_4px_12px_-6px_rgb(16_185_129_/_0.2)] [&>svg]:text-emerald-600 dark:border-emerald-800/40 dark:bg-emerald-950/50 dark:text-emerald-200 dark:shadow-[0_4px_12px_-6px_rgb(16_185_129_/_0.15)] dark:[&>svg]:text-emerald-400",
17
+ warning: "border-amber-200/60 bg-amber-50 text-amber-800 shadow-[0_4px_12px_-6px_rgb(245_158_11_/_0.2)] [&>svg]:text-amber-600 dark:border-amber-800/40 dark:bg-amber-950/50 dark:text-amber-200 dark:shadow-[0_4px_12px_-6px_rgb(245_158_11_/_0.15)] dark:[&>svg]:text-amber-400",
18
+ destructive: "border-red-200/60 bg-red-50 text-red-800 shadow-[0_4px_12px_-6px_rgb(239_68_68_/_0.2)] [&>svg]:text-red-600 dark:border-red-800/40 dark:bg-red-950/50 dark:text-red-200 dark:shadow-[0_4px_12px_-6px_rgb(239_68_68_/_0.15)] dark:[&>svg]:text-red-400",
19
+ info: "border-blue-200/60 bg-blue-50 text-blue-800 shadow-[0_4px_12px_-6px_rgb(59_130_246_/_0.2)] [&>svg]:text-blue-600 dark:border-blue-800/40 dark:bg-blue-950/50 dark:text-blue-200 dark:shadow-[0_4px_12px_-6px_rgb(59_130_246_/_0.15)] dark:[&>svg]:text-blue-400"
20
+ },
21
+ size: {
22
+ sm: "p-3",
23
+ md: "p-4",
24
+ lg: "p-5"
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ variant: "default",
29
+ size: "md"
30
+ }
31
+ });
32
+ export const Alert = React.forwardRef(({ className, variant, size, ...props }, ref) => (_jsx("div", { ref: ref, role: "alert", className: cn(alertVariants({ variant, size }), className), ...props })));
33
+ Alert.displayName = "Alert";
34
+ /* ── AlertTitle ───────────────────────────────────────────────────────────── */
35
+ export const AlertTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx("h5", { ref: ref, className: cn("mb-1 font-medium leading-none tracking-tight", className), ...props })));
36
+ AlertTitle.displayName = "AlertTitle";
37
+ /* ── AlertDescription ─────────────────────────────────────────────────────── */
38
+ export const AlertDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, className: cn("text-sm text-current/85 [&_p]:leading-relaxed", className), ...props })));
39
+ AlertDescription.displayName = "AlertDescription";
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const gradientVariants: (props?: ({
4
+ variant?: "default" | "glass" | "warm" | "cool" | "aurora" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export interface AnimatedGradientProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof gradientVariants> {
7
+ duration?: number;
8
+ }
9
+ export declare const AnimatedGradient: React.ForwardRefExoticComponent<AnimatedGradientProps & React.RefAttributes<HTMLDivElement>>;
10
+ export {};
11
+ //# sourceMappingURL=animated-gradient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animated-gradient.d.ts","sourceRoot":"","sources":["../../src/components/animated-gradient.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,QAAA,MAAM,gBAAgB;;8EAqBrB,CAAA;AAED,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,gBAAgB,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,gBAAgB,8FAoB5B,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../lib/cn";
5
+ const gradientVariants = cva("motion-safe:animate-[gradient-shift_var(--gradient-duration,6s)_ease_infinite] [background-size:200%_200%]", {
6
+ variants: {
7
+ variant: {
8
+ default: "bg-[linear-gradient(135deg,var(--color-background),var(--color-surface),var(--color-accent),var(--color-background))]",
9
+ glass: "border border-white/20 [border-top-color:var(--glass-refraction-top)] backdrop-blur-sm bg-[linear-gradient(135deg,rgb(255_255_255/0.06),rgb(255_255_255/0.15),rgb(255_255_255/0.06))] dark:bg-[linear-gradient(135deg,rgb(255_255_255/0.03),rgb(255_255_255/0.08),rgb(255_255_255/0.03))]",
10
+ warm: "bg-[linear-gradient(135deg,#fef3c7,#fde68a,#fbbf24,#f59e0b,#fef3c7)] dark:bg-[linear-gradient(135deg,#78350f,#92400e,#b45309,#d97706,#78350f)]",
11
+ cool: "bg-[linear-gradient(135deg,#dbeafe,#bfdbfe,#93c5fd,#60a5fa,#dbeafe)] dark:bg-[linear-gradient(135deg,#1e3a5f,#1e40af,#2563eb,#3b82f6,#1e3a5f)]",
12
+ aurora: "bg-[linear-gradient(135deg,#c084fc,#818cf8,#6366f1,#a78bfa,#c084fc)] dark:bg-[linear-gradient(135deg,#581c87,#3730a3,#4338ca,#6d28d9,#581c87)]"
13
+ }
14
+ },
15
+ defaultVariants: {
16
+ variant: "default"
17
+ }
18
+ });
19
+ export const AnimatedGradient = React.forwardRef(({ className, variant, duration = 6, children, style, ...props }, ref) => (_jsx("div", { ref: ref, className: cn(gradientVariants({ variant }), "motion-reduce:animate-none", className), style: {
20
+ "--gradient-duration": `${duration}s`,
21
+ ...style,
22
+ }, ...props, children: children })));
23
+ AnimatedGradient.displayName = "AnimatedGradient";
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ export interface AuroraBackgroundProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Number of gradient blobs */
4
+ blobCount?: number;
5
+ /** Base colors for the aurora */
6
+ colors?: string[];
7
+ /** Animation duration in seconds */
8
+ duration?: number;
9
+ /** Blur intensity in px */
10
+ blur?: number;
11
+ /** Opacity of the aurora layer (0-1) */
12
+ intensity?: number;
13
+ }
14
+ export declare const AuroraBackground: React.ForwardRefExoticComponent<AuroraBackgroundProps & React.RefAttributes<HTMLDivElement>>;
15
+ //# sourceMappingURL=aurora-background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aurora-background.d.ts","sourceRoot":"","sources":["../../src/components/aurora-background.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,gBAAgB,8FA2D5B,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn";
4
+ export const AuroraBackground = React.forwardRef(({ className, children, blobCount = 3, colors = ["#a855f7", "#6366f1", "#ec4899"], duration = 8, blur = 80, intensity = 0.4, style, ...props }, ref) => {
5
+ const blobs = React.useMemo(() => {
6
+ return Array.from({ length: blobCount }, (_, i) => ({
7
+ id: i,
8
+ color: colors[i % colors.length],
9
+ delay: (i * duration) / blobCount,
10
+ size: 40 + (i % 3) * 15,
11
+ x: 20 + (i * 60) / blobCount,
12
+ y: 20 + ((i * 40) % 60),
13
+ }));
14
+ }, [blobCount, colors, duration]);
15
+ return (_jsxs("div", { ref: ref, "aria-hidden": true, className: cn("pointer-events-none absolute inset-0 overflow-hidden", className), style: style, ...props, children: [_jsx("div", { className: "absolute inset-0", style: { filter: `blur(${blur}px)`, opacity: intensity }, children: blobs.map((blob) => (_jsx("div", { className: "absolute rounded-full animate-aurora-shift motion-reduce:[animation:none]", style: {
16
+ "--aurora-duration": `${duration}s`,
17
+ width: `${blob.size}%`,
18
+ height: `${blob.size}%`,
19
+ left: `${blob.x}%`,
20
+ top: `${blob.y}%`,
21
+ background: `radial-gradient(circle, ${blob.color}, transparent 70%)`,
22
+ animationDelay: `${-blob.delay}s`,
23
+ transform: "translate(-50%, -50%)",
24
+ } }, blob.id))) }), children] }));
25
+ });
26
+ AuroraBackground.displayName = "AuroraBackground";
@@ -0,0 +1,54 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const avatarVariants: (props?: ({
4
+ variant?: "default" | "glass" | "outline" | "ghost" | "matte" | "liquid" | "glow" | null | undefined;
5
+ size?: "sm" | "md" | "lg" | "xs" | "xl" | "2xl" | null | undefined;
6
+ radius?: "md" | "lg" | "square" | "full" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare const statusColors: {
9
+ readonly online: "bg-emerald-500 shadow-[0_0_0_2px_var(--color-background)]";
10
+ readonly offline: "bg-neutral-400 shadow-[0_0_0_2px_var(--color-background)] dark:bg-neutral-500";
11
+ readonly busy: "bg-red-500 shadow-[0_0_0_2px_var(--color-background)]";
12
+ readonly away: "bg-amber-500 shadow-[0_0_0_2px_var(--color-background)]";
13
+ };
14
+ export type AvatarStatus = keyof typeof statusColors;
15
+ export type AvatarProps = React.HTMLAttributes<HTMLSpanElement> & VariantProps<typeof avatarVariants> & {
16
+ src?: string;
17
+ alt?: string;
18
+ fallback?: string;
19
+ imgClassName?: string;
20
+ fallbackClassName?: string;
21
+ /** Online/offline status indicator */
22
+ status?: AvatarStatus;
23
+ /** Ring color for grouped avatars or emphasis */
24
+ ring?: boolean;
25
+ };
26
+ export declare const Avatar: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & VariantProps<(props?: ({
27
+ variant?: "default" | "glass" | "outline" | "ghost" | "matte" | "liquid" | "glow" | null | undefined;
28
+ size?: "sm" | "md" | "lg" | "xs" | "xl" | "2xl" | null | undefined;
29
+ radius?: "md" | "lg" | "square" | "full" | null | undefined;
30
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
31
+ src?: string;
32
+ alt?: string;
33
+ fallback?: string;
34
+ imgClassName?: string;
35
+ fallbackClassName?: string;
36
+ /** Online/offline status indicator */
37
+ status?: AvatarStatus;
38
+ /** Ring color for grouped avatars or emphasis */
39
+ ring?: boolean;
40
+ } & React.RefAttributes<HTMLSpanElement>>;
41
+ export type AvatarGroupProps = React.HTMLAttributes<HTMLDivElement> & {
42
+ /** Max avatars to show before +N overflow */
43
+ max?: number;
44
+ /** Overlap spacing */
45
+ spacing?: "tight" | "normal" | "loose";
46
+ };
47
+ export declare const AvatarGroup: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
48
+ /** Max avatars to show before +N overflow */
49
+ max?: number;
50
+ /** Overlap spacing */
51
+ spacing?: "tight" | "normal" | "loose";
52
+ } & React.RefAttributes<HTMLDivElement>>;
53
+ export {};
54
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAMjE,QAAA,MAAM,cAAc;;;;8EA+CnB,CAAA;AAuBD,QAAA,MAAM,YAAY;;;;;CAKR,CAAA;AAWV,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,YAAY,CAAA;AAIpD,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,GAC7D,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sCAAsC;IACtC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,CAAA;AAEH,eAAO,MAAM,MAAM;;;;;UAXT,MAAM;UACN,MAAM;eACD,MAAM;mBACF,MAAM;wBACD,MAAM;IAC1B,sCAAsC;aAC7B,YAAY;IACrB,iDAAiD;WAC1C,OAAO;yCAmEjB,CAAA;AAMD,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IACpE,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;CACvC,CAAA;AAQD,eAAO,MAAM,WAAW;IAZtB,6CAA6C;UACvC,MAAM;IACZ,sBAAsB;cACZ,OAAO,GAAG,QAAQ,GAAG,OAAO;wCAkCvC,CAAA"}
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../lib/cn";
6
+ /* ── Avatar Variants ──────────────────────────────────────────────────────── */
7
+ const avatarVariants = cva("relative inline-flex shrink-0 items-center justify-center overflow-hidden border transition-[box-shadow,transform,border-color,background-color,opacity] duration-normal ease-standard focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black/40 focus-visible:ring-offset-2 motion-reduce:transition-none dark:focus-visible:ring-white/45", {
8
+ variants: {
9
+ variant: {
10
+ default: "border-black/10 bg-neutral-900 text-white shadow-[0_4px_12px_-6px_rgb(2_6_23_/_0.45)] dark:border-white/15 dark:bg-neutral-100 dark:text-neutral-950 dark:shadow-[0_4px_12px_-6px_rgb(255_255_255_/_0.18)]",
11
+ glass: "relative isolate border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[linear-gradient(155deg,rgb(255_255_255_/_0.62),rgb(245_245_245_/_0.36))] text-[var(--color-foreground)] backdrop-blur-md backdrop-saturate-[180%] shadow-[0_0_0_1px_rgb(255_255_255_/_0.2)_inset,0_4px_12px_-6px_rgb(2_6_23_/_0.2)] dark:border-white/[0.12] dark:bg-[linear-gradient(155deg,rgb(255_255_255_/_0.1),rgb(255_255_255_/_0.04))] dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.08)_inset,0_4px_12px_-6px_rgb(0_0_0_/_0.35)]",
12
+ liquid: "relative isolate border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[radial-gradient(circle_at_18%_16%,rgb(255_255_255_/_0.88),transparent_40%),linear-gradient(148deg,rgb(255_255_255_/_0.74),rgb(232_232_232_/_0.5))] text-[var(--color-foreground)] backdrop-blur-xl backdrop-saturate-[180%] shadow-[0_0_0_1px_rgb(255_255_255_/_0.2)_inset,0_6px_16px_-8px_rgb(2_6_23_/_0.25)] dark:border-white/[0.12] dark:bg-[linear-gradient(145deg,rgb(255_255_255_/_0.14),rgb(255_255_255_/_0.05))] dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.1)_inset,0_6px_16px_-8px_rgb(0_0_0_/_0.4)]",
13
+ matte: "relative isolate border-black/10 bg-[linear-gradient(180deg,rgb(250_250_250),rgb(234_234_236))] text-neutral-900 shadow-[0_1px_0_rgb(255_255_255_/_0.92)_inset,0_4px_10px_-6px_rgb(15_23_42_/_0.22)] dark:border-white/[0.14] dark:bg-[linear-gradient(180deg,rgb(53_58_67_/_0.92),rgb(34_38_46_/_0.92))] dark:text-neutral-100 dark:shadow-[0_1px_0_rgb(255_255_255_/_0.12)_inset,0_4px_10px_-6px_rgb(0_0_0_/_0.45)]",
14
+ glow: "border-white/20 bg-neutral-900 text-white shadow-[0_0_0_1px_rgb(255_255_255_/_0.12)_inset,0_0_16px_rgb(255_255_255_/_0.15)] dark:border-white/40 dark:bg-neutral-100 dark:text-neutral-950 dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.55),0_0_16px_rgb(255_255_255_/_0.25)]",
15
+ outline: "border-[var(--color-border)] bg-transparent text-[var(--color-foreground)]",
16
+ ghost: "border-transparent bg-transparent text-[var(--color-foreground)]"
17
+ },
18
+ size: {
19
+ xs: "h-6 w-6 text-[10px]",
20
+ sm: "h-8 w-8 text-xs",
21
+ md: "h-10 w-10 text-sm",
22
+ lg: "h-12 w-12 text-base",
23
+ xl: "h-14 w-14 text-lg",
24
+ "2xl": "h-20 w-20 text-2xl"
25
+ },
26
+ radius: {
27
+ full: "rounded-full",
28
+ lg: "rounded-lg",
29
+ md: "rounded-md",
30
+ square: "rounded-none"
31
+ }
32
+ },
33
+ defaultVariants: {
34
+ variant: "default",
35
+ size: "md",
36
+ radius: "full"
37
+ }
38
+ });
39
+ /* ── Fallback Variants ────────────────────────────────────────────────────── */
40
+ const avatarFallbackVariants = cva("inline-flex h-full w-full items-center justify-center font-semibold uppercase select-none", {
41
+ variants: {
42
+ variant: {
43
+ default: "text-white dark:text-neutral-950",
44
+ glass: "text-[var(--color-foreground)]",
45
+ liquid: "text-[var(--color-foreground)]",
46
+ matte: "text-neutral-900 dark:text-neutral-100",
47
+ glow: "text-white dark:text-neutral-950",
48
+ outline: "text-[var(--color-foreground)]/85",
49
+ ghost: "text-[var(--color-foreground)]/75"
50
+ }
51
+ },
52
+ defaultVariants: {
53
+ variant: "default"
54
+ }
55
+ });
56
+ /* ── Status Ring ──────────────────────────────────────────────────────────── */
57
+ const statusColors = {
58
+ online: "bg-emerald-500 shadow-[0_0_0_2px_var(--color-background)]",
59
+ offline: "bg-neutral-400 shadow-[0_0_0_2px_var(--color-background)] dark:bg-neutral-500",
60
+ busy: "bg-red-500 shadow-[0_0_0_2px_var(--color-background)]",
61
+ away: "bg-amber-500 shadow-[0_0_0_2px_var(--color-background)]"
62
+ };
63
+ const statusSizes = {
64
+ xs: "h-1.5 w-1.5",
65
+ sm: "h-2 w-2",
66
+ md: "h-2.5 w-2.5",
67
+ lg: "h-3 w-3",
68
+ xl: "h-3.5 w-3.5",
69
+ "2xl": "h-4 w-4"
70
+ };
71
+ export const Avatar = React.forwardRef(({ className, variant, size, radius, src, alt = "", fallback, imgClassName, fallbackClassName, status, ring, children, ...props }, ref) => {
72
+ const [imgError, setImgError] = React.useState(false);
73
+ React.useEffect(() => {
74
+ setImgError(false);
75
+ }, [src]);
76
+ const showImage = src && !imgError;
77
+ const resolvedSize = size ?? "md";
78
+ return (_jsxs("span", { ref: ref, className: cn(avatarVariants({ variant, size, radius }), ring && "ring-2 ring-[var(--color-background)] ring-offset-2 ring-offset-[var(--color-background)]", className), ...props, children: [showImage ? (_jsx("img", { src: src, alt: alt, className: cn("h-full w-full object-cover", imgClassName), onError: () => setImgError(true) })) : (_jsx("span", { className: cn(avatarFallbackVariants({ variant }), fallbackClassName), children: fallback ?? children ?? alt?.charAt(0)?.toUpperCase() ?? "?" })), status && (_jsx("span", { className: cn("absolute bottom-0 right-0 rounded-full", statusColors[status], statusSizes[resolvedSize]), "aria-label": status }))] }));
79
+ });
80
+ Avatar.displayName = "Avatar";
81
+ const spacingMap = {
82
+ tight: "-space-x-3",
83
+ normal: "-space-x-2",
84
+ loose: "-space-x-1"
85
+ };
86
+ export const AvatarGroup = React.forwardRef(({ className, max, spacing = "normal", children, ...props }, ref) => {
87
+ const childArray = React.Children.toArray(children);
88
+ const visible = max ? childArray.slice(0, max) : childArray;
89
+ const overflow = max ? childArray.length - max : 0;
90
+ return (_jsxs("div", { ref: ref, className: cn("flex items-center", spacingMap[spacing], className), ...props, children: [visible.map((child, i) => (_jsx("span", { className: "relative ring-2 ring-[var(--color-background)] rounded-full", children: child }, i))), overflow > 0 && (_jsxs("span", { className: "relative flex h-10 w-10 items-center justify-center rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] text-xs font-semibold text-[var(--color-foreground)] ring-2 ring-[var(--color-background)]", children: ["+", overflow] }))] }));
91
+ });
92
+ AvatarGroup.displayName = "AvatarGroup";
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "glass" | "outline" | "ghost" | "matte" | "liquid" | "glow" | "success" | "warning" | "destructive" | "info" | null | undefined;
5
+ size?: "sm" | "md" | "lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type BadgeProps = React.HTMLAttributes<HTMLSpanElement> & VariantProps<typeof badgeVariants>;
8
+ export declare const Badge: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & VariantProps<(props?: ({
9
+ variant?: "default" | "glass" | "outline" | "ghost" | "matte" | "liquid" | "glow" | "success" | "warning" | "destructive" | "info" | null | undefined;
10
+ size?: "sm" | "md" | "lg" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
12
+ export {};
13
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa;;;8EAiDlB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAA;AAEnG,eAAO,MAAM,KAAK;;;uHAEhB,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../lib/cn";
5
+ const badgeVariants = cva("inline-flex items-center whitespace-nowrap rounded-full border font-semibold transition-[transform,background-color,box-shadow,color,border-color,opacity] duration-normal ease-standard focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black/40 focus-visible:ring-offset-2 motion-reduce:transition-none dark:focus-visible:ring-white/45", {
6
+ variants: {
7
+ variant: {
8
+ default: "border-black/10 bg-neutral-900 text-white shadow-[0_4px_12px_-6px_rgb(2_6_23_/_0.5)] dark:border-white/15 dark:bg-neutral-100 dark:text-neutral-950 dark:shadow-[0_4px_12px_-6px_rgb(255_255_255_/_0.2)]",
9
+ glass: "relative isolate overflow-hidden border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[linear-gradient(155deg,rgb(255_255_255_/_0.62),rgb(245_245_245_/_0.36))] text-[var(--color-foreground)] backdrop-blur-md backdrop-saturate-[180%] shadow-[0_0_0_1px_rgb(255_255_255_/_0.2)_inset,0_4px_12px_-6px_rgb(2_6_23_/_0.25)] before:pointer-events-none before:absolute before:inset-x-0 before:top-0 before:h-px before:bg-gradient-to-r before:from-transparent before:via-white/45 before:to-transparent dark:border-white/[0.12] dark:bg-[linear-gradient(155deg,rgb(255_255_255_/_0.1),rgb(255_255_255_/_0.04))] dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.08)_inset,0_4px_12px_-6px_rgb(0_0_0_/_0.4)] dark:before:via-white/20",
10
+ liquid: "relative isolate overflow-hidden border-white/20 [border-top-color:var(--glass-refraction-top)] bg-[radial-gradient(circle_at_18%_16%,rgb(255_255_255_/_0.88),transparent_40%),linear-gradient(148deg,rgb(255_255_255_/_0.74),rgb(232_232_232_/_0.5))] text-[var(--color-foreground)] backdrop-blur-xl backdrop-saturate-[180%] shadow-[0_0_0_1px_rgb(255_255_255_/_0.2)_inset,0_6px_16px_-8px_rgb(2_6_23_/_0.3)] before:pointer-events-none before:absolute before:inset-0 before:bg-[radial-gradient(circle_at_80%_72%,rgb(255_255_255_/_0.34),transparent_48%)] before:opacity-80 dark:border-white/[0.12] dark:bg-[linear-gradient(145deg,rgb(255_255_255_/_0.14),rgb(255_255_255_/_0.05))] dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.1)_inset,0_6px_16px_-8px_rgb(0_0_0_/_0.45)] dark:before:opacity-55",
11
+ matte: "relative isolate overflow-hidden border-black/10 bg-[linear-gradient(180deg,rgb(250_250_250),rgb(234_234_236))] text-neutral-900 shadow-[0_1px_0_rgb(255_255_255_/_0.92)_inset,0_4px_10px_-8px_rgb(15_23_42_/_0.25)] before:pointer-events-none before:absolute before:inset-0 before:bg-[linear-gradient(180deg,rgb(255_255_255_/_0.62),transparent)] dark:border-white/[0.14] dark:bg-[linear-gradient(180deg,rgb(53_58_67_/_0.92),rgb(34_38_46_/_0.92))] dark:text-neutral-100 dark:shadow-[0_1px_0_rgb(255_255_255_/_0.12)_inset,0_4px_10px_-8px_rgb(0_0_0_/_0.5)] dark:before:bg-[linear-gradient(180deg,rgb(255_255_255_/_0.12),transparent)]",
12
+ glow: "border-white/20 bg-neutral-900 text-white shadow-[0_0_0_1px_rgb(255_255_255_/_0.12)_inset,0_0_16px_rgb(255_255_255_/_0.15)] dark:border-white/40 dark:bg-neutral-100 dark:text-neutral-950 dark:shadow-[0_0_0_1px_rgb(255_255_255_/_0.55),0_0_16px_rgb(255_255_255_/_0.25)]",
13
+ outline: "border-[var(--color-border)] bg-transparent text-[var(--color-foreground)]",
14
+ ghost: "border-transparent bg-transparent text-[var(--color-foreground)]",
15
+ success: "border-emerald-200/60 bg-emerald-50 text-emerald-700 shadow-[0_2px_8px_-4px_rgb(16_185_129_/_0.2)] dark:border-emerald-800/40 dark:bg-emerald-950/50 dark:text-emerald-300 dark:shadow-[0_2px_8px_-4px_rgb(16_185_129_/_0.15)]",
16
+ warning: "border-amber-200/60 bg-amber-50 text-amber-700 shadow-[0_2px_8px_-4px_rgb(245_158_11_/_0.2)] dark:border-amber-800/40 dark:bg-amber-950/50 dark:text-amber-300 dark:shadow-[0_2px_8px_-4px_rgb(245_158_11_/_0.15)]",
17
+ destructive: "border-red-200/60 bg-red-50 text-red-700 shadow-[0_2px_8px_-4px_rgb(239_68_68_/_0.2)] dark:border-red-800/40 dark:bg-red-950/50 dark:text-red-300 dark:shadow-[0_2px_8px_-4px_rgb(239_68_68_/_0.15)]",
18
+ info: "border-blue-200/60 bg-blue-50 text-blue-700 shadow-[0_2px_8px_-4px_rgb(59_130_246_/_0.2)] dark:border-blue-800/40 dark:bg-blue-950/50 dark:text-blue-300 dark:shadow-[0_2px_8px_-4px_rgb(59_130_246_/_0.15)]"
19
+ },
20
+ size: {
21
+ sm: "h-5 px-2 text-[10px] tracking-wide",
22
+ md: "h-6 px-2.5 text-xs",
23
+ lg: "h-7 px-3 text-sm"
24
+ }
25
+ },
26
+ defaultVariants: {
27
+ variant: "default",
28
+ size: "md"
29
+ }
30
+ });
31
+ export const Badge = React.forwardRef(({ className, variant, size, ...props }, ref) => (_jsx("span", { ref: ref, className: cn(badgeVariants({ variant, size }), className), ...props })));
32
+ Badge.displayName = "Badge";