@music-vine/cadence 2.6.2 → 3.0.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 (213) hide show
  1. package/README.md +5 -44
  2. package/dist/components/accordion.d.ts +71 -0
  3. package/dist/components/accordion.d.ts.map +1 -0
  4. package/dist/components/accordion.js +2 -2
  5. package/dist/components/accordion.js.map +1 -1
  6. package/dist/components/badge.d.ts +62 -0
  7. package/dist/components/badge.d.ts.map +1 -0
  8. package/dist/components/badge.js +1 -1
  9. package/dist/components/badge.js.map +1 -1
  10. package/dist/components/breadcrumb.d.ts +42 -0
  11. package/dist/components/breadcrumb.d.ts.map +1 -0
  12. package/dist/components/button.d.ts +117 -0
  13. package/dist/components/button.d.ts.map +1 -0
  14. package/dist/components/button.js +3 -3
  15. package/dist/components/button.js.map +1 -1
  16. package/dist/components/card.d.ts +56 -0
  17. package/dist/components/card.d.ts.map +1 -0
  18. package/dist/components/card.js.map +1 -1
  19. package/dist/components/carousel-dots.d.ts +17 -0
  20. package/dist/components/carousel-dots.d.ts.map +1 -0
  21. package/dist/components/carousel-dots.js +1 -1
  22. package/dist/components/carousel-dots.js.map +1 -1
  23. package/dist/components/carousel.d.ts +99 -0
  24. package/dist/components/carousel.d.ts.map +1 -0
  25. package/dist/components/carousel.js +2 -2
  26. package/dist/components/carousel.js.map +1 -1
  27. package/dist/components/checkbox.d.ts +34 -0
  28. package/dist/components/checkbox.d.ts.map +1 -0
  29. package/dist/components/checkbox.js +1 -1
  30. package/dist/components/checkbox.js.map +1 -1
  31. package/dist/components/context-menu.d.ts +126 -0
  32. package/dist/components/context-menu.d.ts.map +1 -0
  33. package/dist/components/context-menu.js +6 -6
  34. package/dist/components/context-menu.js.map +1 -1
  35. package/dist/components/dialog.d.ts +85 -0
  36. package/dist/components/dialog.d.ts.map +1 -0
  37. package/dist/components/dialog.js +1 -1
  38. package/dist/components/dialog.js.map +1 -1
  39. package/dist/components/drawer.d.ts +90 -0
  40. package/dist/components/drawer.d.ts.map +1 -0
  41. package/dist/components/drawer.js.map +1 -1
  42. package/dist/components/index.d.ts +36 -0
  43. package/dist/components/index.d.ts.map +1 -0
  44. package/dist/components/input.d.ts +69 -0
  45. package/dist/components/input.d.ts.map +1 -0
  46. package/dist/components/input.js +61 -57
  47. package/dist/components/input.js.map +2 -2
  48. package/dist/components/label.d.ts +36 -0
  49. package/dist/components/label.d.ts.map +1 -0
  50. package/dist/components/popover.d.ts +61 -0
  51. package/dist/components/popover.d.ts.map +1 -0
  52. package/dist/components/popover.js +1 -1
  53. package/dist/components/popover.js.map +1 -1
  54. package/dist/components/price-tag.d.ts +31 -0
  55. package/dist/components/price-tag.d.ts.map +1 -0
  56. package/dist/components/price-tag.js.map +1 -1
  57. package/dist/components/radio-group.d.ts +15 -0
  58. package/dist/components/radio-group.d.ts.map +1 -0
  59. package/dist/components/radio-group.js +1 -1
  60. package/dist/components/radio-group.js.map +1 -1
  61. package/dist/components/scroll-area.d.ts +33 -0
  62. package/dist/components/scroll-area.d.ts.map +1 -0
  63. package/dist/components/scroll-area.js.map +1 -1
  64. package/dist/components/scroll-drum.d.ts +96 -0
  65. package/dist/components/scroll-drum.d.ts.map +1 -0
  66. package/dist/components/scroll-drum.js +63 -34
  67. package/dist/components/scroll-drum.js.map +2 -2
  68. package/dist/components/select.d.ts +49 -0
  69. package/dist/components/select.d.ts.map +1 -0
  70. package/dist/components/select.js +1 -1
  71. package/dist/components/select.js.map +1 -1
  72. package/dist/components/separator.d.ts +35 -0
  73. package/dist/components/separator.d.ts.map +1 -0
  74. package/dist/components/skeleton.d.ts +44 -0
  75. package/dist/components/skeleton.d.ts.map +1 -0
  76. package/dist/components/slider.d.ts +21 -0
  77. package/dist/components/slider.d.ts.map +1 -0
  78. package/dist/components/slider.js +1 -1
  79. package/dist/components/slider.js.map +1 -1
  80. package/dist/components/stacking-card.d.ts +89 -0
  81. package/dist/components/stacking-card.d.ts.map +1 -0
  82. package/dist/components/stacking-card.js +3 -3
  83. package/dist/components/stacking-card.js.map +2 -2
  84. package/dist/components/tabs.d.ts +46 -0
  85. package/dist/components/tabs.d.ts.map +1 -0
  86. package/dist/components/tabs.js +2 -2
  87. package/dist/components/tabs.js.map +1 -1
  88. package/dist/components/textarea.d.ts +34 -0
  89. package/dist/components/textarea.d.ts.map +1 -0
  90. package/dist/components/toast.d.ts +67 -0
  91. package/dist/components/toast.d.ts.map +1 -0
  92. package/dist/components/toast.js +2 -2
  93. package/dist/components/toast.js.map +2 -2
  94. package/dist/components/toggle-button.d.ts +54 -0
  95. package/dist/components/toggle-button.d.ts.map +1 -0
  96. package/dist/components/toggle-button.js.map +1 -1
  97. package/dist/components/typography/heading.d.ts +20 -0
  98. package/dist/components/typography/heading.d.ts.map +1 -0
  99. package/dist/components/typography/heading.js.map +1 -1
  100. package/dist/components/typography/index.d.ts +5 -0
  101. package/dist/components/typography/index.d.ts.map +1 -0
  102. package/dist/components/typography/list.d.ts +23 -0
  103. package/dist/components/typography/list.d.ts.map +1 -0
  104. package/dist/components/typography/list.js +1 -1
  105. package/dist/components/typography/list.js.map +2 -2
  106. package/dist/components/typography/prose.d.ts +8 -0
  107. package/dist/components/typography/prose.d.ts.map +1 -0
  108. package/dist/components/typography/text.d.ts +13 -0
  109. package/dist/components/typography/text.d.ts.map +1 -0
  110. package/dist/icons/custom/boards-indicator.d.ts +6 -0
  111. package/dist/icons/custom/boards-indicator.d.ts.map +1 -0
  112. package/dist/icons/custom/boards-indicator.js +7 -2
  113. package/dist/icons/custom/boards-indicator.js.map +2 -2
  114. package/dist/icons/custom/download-history.d.ts +5 -0
  115. package/dist/icons/custom/download-history.d.ts.map +1 -0
  116. package/dist/icons/custom/download-history.js +3 -4
  117. package/dist/icons/custom/download-history.js.map +2 -2
  118. package/dist/icons/custom/exclamation-mark-in-octagon.d.ts +5 -0
  119. package/dist/icons/custom/exclamation-mark-in-octagon.d.ts.map +1 -0
  120. package/dist/icons/custom/exclamation-mark-in-octagon.js +6 -3
  121. package/dist/icons/custom/exclamation-mark-in-octagon.js.map +2 -2
  122. package/dist/icons/custom/horizontal-orientation.d.ts +5 -0
  123. package/dist/icons/custom/horizontal-orientation.d.ts.map +1 -0
  124. package/dist/icons/custom/horizontal-orientation.js +4 -3
  125. package/dist/icons/custom/horizontal-orientation.js.map +2 -2
  126. package/dist/icons/custom/lightning-bolt.d.ts +5 -0
  127. package/dist/icons/custom/lightning-bolt.d.ts.map +1 -0
  128. package/dist/icons/custom/lightning-bolt.js +24 -27
  129. package/dist/icons/custom/lightning-bolt.js.map +2 -2
  130. package/dist/icons/custom/music-file.d.ts +5 -0
  131. package/dist/icons/custom/music-file.d.ts.map +1 -0
  132. package/dist/icons/custom/music-file.js +17 -0
  133. package/dist/icons/custom/music-file.js.map +7 -0
  134. package/dist/icons/custom/pin.d.ts +5 -0
  135. package/dist/icons/custom/pin.d.ts.map +1 -0
  136. package/dist/icons/custom/pin.js +4 -1
  137. package/dist/icons/custom/pin.js.map +2 -2
  138. package/dist/icons/custom/premium-star.d.ts +11 -0
  139. package/dist/icons/custom/premium-star.d.ts.map +1 -0
  140. package/dist/icons/custom/premium-star.js +3 -1
  141. package/dist/icons/custom/premium-star.js.map +2 -2
  142. package/dist/icons/custom/social/discord.d.ts +5 -0
  143. package/dist/icons/custom/social/discord.d.ts.map +1 -0
  144. package/dist/icons/custom/social/discord.js +3 -4
  145. package/dist/icons/custom/social/discord.js.map +2 -2
  146. package/dist/icons/custom/social/index.d.ts +4 -0
  147. package/dist/icons/custom/social/index.d.ts.map +1 -0
  148. package/dist/icons/custom/social/tiktok.d.ts +5 -0
  149. package/dist/icons/custom/social/tiktok.d.ts.map +1 -0
  150. package/dist/icons/custom/social/tiktok.js +3 -4
  151. package/dist/icons/custom/social/tiktok.js.map +2 -2
  152. package/dist/icons/custom/social/twitter-x.d.ts +5 -0
  153. package/dist/icons/custom/social/twitter-x.d.ts.map +1 -0
  154. package/dist/icons/custom/social/twitter-x.js +19 -22
  155. package/dist/icons/custom/social/twitter-x.js.map +2 -2
  156. package/dist/icons/custom/square-aspect-ratio.d.ts +5 -0
  157. package/dist/icons/custom/square-aspect-ratio.d.ts.map +1 -0
  158. package/dist/icons/custom/square-aspect-ratio.js +4 -1
  159. package/dist/icons/custom/square-aspect-ratio.js.map +2 -2
  160. package/dist/icons/custom/tick-in-circle.d.ts +8 -0
  161. package/dist/icons/custom/tick-in-circle.d.ts.map +1 -0
  162. package/dist/icons/custom/tick-in-circle.js +25 -25
  163. package/dist/icons/custom/tick-in-circle.js.map +2 -2
  164. package/dist/icons/custom/tick-small.d.ts +5 -0
  165. package/dist/icons/custom/tick-small.d.ts.map +1 -0
  166. package/dist/icons/custom/tick-small.js +8 -10
  167. package/dist/icons/custom/tick-small.js.map +2 -2
  168. package/dist/icons/custom/tick.d.ts +5 -0
  169. package/dist/icons/custom/tick.d.ts.map +1 -0
  170. package/dist/icons/custom/tick.js +2 -2
  171. package/dist/icons/custom/tick.js.map +2 -2
  172. package/dist/icons/custom/types.d.ts +3 -0
  173. package/dist/icons/custom/types.d.ts.map +1 -0
  174. package/dist/icons/custom/types.js +1 -0
  175. package/dist/icons/custom/types.js.map +7 -0
  176. package/dist/icons/custom/ultra-wide-aspect-ratio.d.ts +5 -0
  177. package/dist/icons/custom/ultra-wide-aspect-ratio.d.ts.map +1 -0
  178. package/dist/icons/custom/ultra-wide-aspect-ratio.js +4 -1
  179. package/dist/icons/custom/ultra-wide-aspect-ratio.js.map +2 -2
  180. package/dist/icons/custom/uppbeat-credit.d.ts +5 -0
  181. package/dist/icons/custom/uppbeat-credit.d.ts.map +1 -0
  182. package/dist/icons/custom/uppbeat-credit.js +2 -4
  183. package/dist/icons/custom/uppbeat-credit.js.map +2 -2
  184. package/dist/icons/custom/vertical-orientation.d.ts +5 -0
  185. package/dist/icons/custom/vertical-orientation.d.ts.map +1 -0
  186. package/dist/icons/custom/vertical-orientation.js +4 -1
  187. package/dist/icons/custom/vertical-orientation.js.map +2 -2
  188. package/dist/icons/custom/view-credit-note.d.ts +5 -0
  189. package/dist/icons/custom/view-credit-note.d.ts.map +1 -0
  190. package/dist/icons/custom/view-credit-note.js +4 -1
  191. package/dist/icons/custom/view-credit-note.js.map +2 -2
  192. package/dist/icons/index.d.ts +28 -0
  193. package/dist/icons/index.d.ts.map +1 -0
  194. package/dist/icons/index.js +4 -5
  195. package/dist/icons/index.js.map +2 -2
  196. package/dist/index.d.ts +19 -0
  197. package/dist/index.d.ts.map +1 -0
  198. package/dist/lib/utils.d.ts +12 -0
  199. package/dist/lib/utils.d.ts.map +1 -0
  200. package/dist/lib/utils.js +7 -17
  201. package/dist/lib/utils.js.map +2 -2
  202. package/dist/styles/index.css +16 -3
  203. package/dist/styles/storybook.css +2 -2
  204. package/dist/test/setup.d.ts +2 -0
  205. package/dist/test/setup.d.ts.map +1 -0
  206. package/dist/theme/index.d.ts +142 -0
  207. package/dist/theme/index.d.ts.map +1 -0
  208. package/dist/theme/index.js +1 -1
  209. package/dist/theme/index.js.map +2 -2
  210. package/package.json +4 -9
  211. package/{tailwind.config.v4.css → tailwind.config.css} +35 -14
  212. package/dist/styles/index.v4.css +0 -49
  213. package/tailwind.config.ts +0 -313
package/README.md CHANGED
@@ -59,55 +59,18 @@ function App() {
59
59
 
60
60
  ## Tailwind Configuration
61
61
 
62
- Cadence supports both Tailwind CSS v3 and v4. Choose the version that matches your project.
63
-
64
- ### Tailwind v3 (JavaScript config)
65
-
66
- Extend your Tailwind config with the Cadence preset:
67
-
68
- ```js
69
- // tailwind.config.js
70
- import cadenceConfig from '@music-vine/cadence/tailwind.config';
71
-
72
- export default {
73
- presets: [cadenceConfig],
74
- content: [
75
- './src/**/*.{js,ts,jsx,tsx}',
76
- './node_modules/@music-vine/cadence/dist/**/*.js',
77
- ],
78
- };
79
- ```
80
-
81
- Then import the v3 styles:
82
-
83
- ```css
84
- /* app.css */
85
- @import '@music-vine/cadence/styles';
86
- ```
87
-
88
- ### Tailwind v4 (CSS-first config)
89
-
90
- For Tailwind v4, use the CSS-first configuration:
62
+ Cadence requires **Tailwind CSS v4+**. Users requiring Tailwind v3 support should pin to Cadence 2.x.
91
63
 
92
64
  ```css
93
65
  /* app.css */
94
66
  @import "tailwindcss";
95
- @import "@music-vine/cadence/tailwind.config.v4";
96
- @import "@music-vine/cadence/styles.v4";
67
+ @import "@music-vine/cadence/tailwind.config";
68
+ @import "@music-vine/cadence/styles";
97
69
 
98
70
  @source "./src/**/*.{js,ts,jsx,tsx}";
99
71
  @source "./node_modules/@music-vine/cadence/dist/**/*.js";
100
72
  ```
101
73
 
102
- **Benefits of v4:**
103
- - 3-10x faster builds
104
- - 100x faster incremental rebuilds
105
- - Built-in container queries
106
- - Native CSS variable support
107
- - Smaller bundle size
108
-
109
- See the [Migration Guide](./src/docs/02-guides/tailwind-v4-migration.mdx) for detailed instructions.
110
-
111
74
  ## Available Exports
112
75
 
113
76
  | Export | Description |
@@ -115,10 +78,8 @@ See the [Migration Guide](./src/docs/02-guides/tailwind-v4-migration.mdx) for de
115
78
  | `@music-vine/cadence/ui` | React UI components (Button, Text, Card, etc.) |
116
79
  | `@music-vine/cadence/icons` | Lucide icons + custom Uppbeat icons |
117
80
  | `@music-vine/cadence/theme` | Theme customization API (`createTheme`, presets) |
118
- | `@music-vine/cadence/styles` | Base CSS styles (Tailwind v3) |
119
- | `@music-vine/cadence/styles.v4` | Base CSS styles (Tailwind v4) |
120
- | `@music-vine/cadence/tailwind.config` | Tailwind v3 preset (JavaScript) |
121
- | `@music-vine/cadence/tailwind.config.v4` | Tailwind v4 config (CSS) |
81
+ | `@music-vine/cadence/styles` | Base CSS styles |
82
+ | `@music-vine/cadence/tailwind.config` | Tailwind v4 CSS config |
122
83
 
123
84
  ## Components
124
85
 
@@ -0,0 +1,71 @@
1
+ import { Accordion as AccordionPrimitive } from "radix-ui";
2
+ import type * as React from "react";
3
+ /**
4
+ * Visual style variants for the accordion.
5
+ * - `default`: Light theme with subtle borders
6
+ * - `hc`: High contrast dark theme variant
7
+ */
8
+ type AccordionVariant = "default" | "hc";
9
+ type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> & {
10
+ variant?: AccordionVariant;
11
+ };
12
+ type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root> & {
13
+ variant?: AccordionVariant;
14
+ };
15
+ /**
16
+ * Root container for accordion items. Controls single or multiple expansion.
17
+ *
18
+ * @param type - `"single"` allows one item open at a time, `"multiple"` allows many
19
+ * @param collapsible - When `type="single"`, allows closing all items (default: false)
20
+ * @param variant - Visual style: `"default"` or `"hc"` (high contrast)
21
+ */
22
+ declare function Accordion({ variant, ...props }: AccordionProps): import("react/jsx-runtime").JSX.Element;
23
+ declare namespace Accordion {
24
+ var displayName: string;
25
+ }
26
+ /**
27
+ * Wrapper for each accordion section. Must have a unique `value` prop.
28
+ *
29
+ * @param value - Unique identifier for this item (required)
30
+ * @param variant - Visual style matching parent Accordion
31
+ * @param disabled - Prevents interaction when true
32
+ */
33
+ declare function AccordionItem({ className, variant, ...props }: AccordionItemProps): import("react/jsx-runtime").JSX.Element;
34
+ declare namespace AccordionItem {
35
+ var displayName: string;
36
+ }
37
+ /** Props for AccordionTrigger component */
38
+ interface AccordionTriggerProps extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {
39
+ headerClassName?: string;
40
+ triggerChildrenClassName?: string;
41
+ variant?: AccordionVariant;
42
+ }
43
+ /**
44
+ * Clickable heading that toggles the associated AccordionContent.
45
+ * Includes an animated chevron indicator.
46
+ *
47
+ * @param variant - Visual style: `"default"` or `"hc"`
48
+ * @param headerClassName - Additional classes for the header wrapper
49
+ * @param triggerChildrenClassName - Additional classes for the inner content wrapper
50
+ */
51
+ declare function AccordionTrigger({ className, children, variant, headerClassName, triggerChildrenClassName, ...props }: AccordionTriggerProps): import("react/jsx-runtime").JSX.Element;
52
+ declare namespace AccordionTrigger {
53
+ var displayName: string | undefined;
54
+ }
55
+ /** Props for AccordionContent component */
56
+ interface AccordionContentProps extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> {
57
+ variant?: AccordionVariant;
58
+ }
59
+ /**
60
+ * Collapsible content panel with smooth expand/collapse animation.
61
+ * Automatically hidden when parent AccordionItem is closed.
62
+ *
63
+ * @param variant - Visual style: `"default"` or `"hc"`
64
+ * @param forceMount - Keep content in DOM even when closed (useful for SEO/forms)
65
+ */
66
+ declare function AccordionContent({ className, children, variant, ...props }: AccordionContentProps): import("react/jsx-runtime").JSX.Element;
67
+ declare namespace AccordionContent {
68
+ var displayName: string | undefined;
69
+ }
70
+ export { Accordion, AccordionContent, type AccordionContentProps, AccordionItem, type AccordionItemProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, type AccordionVariant, };
71
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/components/accordion.tsx"],"names":[],"mappings":"AA4BA,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC;;;;GAIG;AACH,KAAK,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC;AAEzC,KAAK,kBAAkB,GAAG,KAAK,CAAC,wBAAwB,CACtD,OAAO,kBAAkB,CAAC,IAAI,CAC/B,GAAG;IACF,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAEF,KAAK,cAAc,GAAG,KAAK,CAAC,wBAAwB,CAClD,OAAO,kBAAkB,CAAC,IAAI,CAC/B,GAAG;IACF,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAEF;;;;;;GAMG;AACH,iBAAS,SAAS,CAAC,EAAE,OAAmB,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,2CAOnE;kBAPQ,SAAS;;;AAWlB;;;;;;GAMG;AACH,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAcpB;kBAlBQ,aAAa;;;AAsBtB,2CAA2C;AAC3C,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,OAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,GAAG,KAAK,EACT,EAAE,qBAAqB,2CA6BvB;kBApCQ,gBAAgB;;;AAwCzB,2CAA2C;AAC3C,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC;IACzE,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAcvB;kBAnBQ,gBAAgB;;;AAuBzB,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,CAAC"}
@@ -53,7 +53,7 @@ function AccordionTrigger({
53
53
  "div",
54
54
  {
55
55
  className: cn(
56
- "flex flex-1 items-center justify-between gap-1 rounded-sm py-2 font-semibold text-base transition-colors 2xl:text-lg",
56
+ "flex flex-1 items-center justify-between gap-1 rounded-xs py-2 font-semibold text-base transition-colors 2xl:text-lg",
57
57
  variant === "default" ? "md:px-2 md:hover:bg-gray-50 dark:md:hover:bg-gray-900" : "-my-1 px-2 hover:bg-gray-900",
58
58
  triggerChildrenClassName
59
59
  ),
@@ -77,7 +77,7 @@ function AccordionContent({
77
77
  AccordionPrimitive.Content,
78
78
  {
79
79
  className: cn(
80
- variant === "default" ? "overflow-hidden text-left font-sans text-gray-700 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down md:px-2 2xl:text-base dark:text-gray-200" : "-mx-6 ~px-6/12 overflow-hidden bg-gray-900 pt-6 text-left font-sans text-gray-400 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down 2xl:text-base"
80
+ variant === "default" ? "overflow-hidden text-left font-sans text-gray-700 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down md:px-2 2xl:text-base dark:text-gray-200" : "-mx-6 fl-px-6/12 overflow-hidden bg-gray-900 pt-6 text-left font-sans text-gray-400 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down 2xl:text-base"
81
81
  ),
82
82
  "data-variant": variant,
83
83
  ...props,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/accordion.tsx"],
4
- "sourcesContent": ["/**\n * @module Accordion\n *\n * A vertically stacked set of interactive headings that reveal/hide associated content.\n * Built on Radix UI Accordion primitive with custom styling variants.\n *\n * @see {@link https://ui.shadcn.com/docs/components/accordion Shadcn Accordion}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/accordion Radix Accordion}\n *\n * @example\n * // Basic single-select accordion\n * <Accordion type=\"single\" collapsible>\n * <AccordionItem value=\"item-1\">\n * <AccordionTrigger>Section 1</AccordionTrigger>\n * <AccordionContent>Content for section 1</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n *\n * @example\n * // Multi-select accordion with HC variant (dark theme)\n * <Accordion type=\"multiple\" variant=\"hc\">\n * <AccordionItem value=\"faq-1\" variant=\"hc\">\n * <AccordionTrigger variant=\"hc\">What is Uppbeat?</AccordionTrigger>\n * <AccordionContent variant=\"hc\">Royalty-free music platform</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n */\nimport { ChevronDown } from \"lucide-react\";\nimport { Accordion as AccordionPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Visual style variants for the accordion.\n * - `default`: Light theme with subtle borders\n * - `hc`: High contrast dark theme variant\n */\ntype AccordionVariant = \"default\" | \"hc\";\n\ntype AccordionItemProps = React.ComponentPropsWithoutRef<\n typeof AccordionPrimitive.Item\n> & {\n variant?: AccordionVariant;\n};\n\ntype AccordionProps = React.ComponentPropsWithoutRef<\n typeof AccordionPrimitive.Root\n> & {\n variant?: AccordionVariant;\n};\n\n/**\n * Root container for accordion items. Controls single or multiple expansion.\n *\n * @param type - `\"single\"` allows one item open at a time, `\"multiple\"` allows many\n * @param collapsible - When `type=\"single\"`, allows closing all items (default: false)\n * @param variant - Visual style: `\"default\"` or `\"hc\"` (high contrast)\n */\nfunction Accordion({ variant = \"default\", ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n className={cn(variant === \"hc\" && \"hc-accordion\")}\n {...props}\n />\n );\n}\n\nAccordion.displayName = \"Accordion\";\n\n/**\n * Wrapper for each accordion section. Must have a unique `value` prop.\n *\n * @param value - Unique identifier for this item (required)\n * @param variant - Visual style matching parent Accordion\n * @param disabled - Prevents interaction when true\n */\nfunction AccordionItem({\n className,\n variant = \"default\",\n ...props\n}: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n className={cn(\n variant === \"default\"\n ? \"border-0 border-gray-150 border-b-1 border-solid bg-transparent transition-colors md:mb-1 dark:border-gray-800 [&:has(:focus-visible)]:ring-2 [&:has(:focus-visible)]:ring-[var(--focus-ring)] [&:has(:focus-visible)]:ring-offset-8 dark:[&:has(:focus-visible)]:ring-offset-gray-950\"\n : \"border-0 border-gray-800 border-b-1 border-solid bg-transparent transition-colors [&:has(:focus-visible)]:ring-2 [&:has(:focus-visible)]:ring-[var(--focus-ring)] [&:has(:focus-visible)]:ring-offset-8 [&:has(:focus-visible)]:ring-offset-gray-950 [&:has([data-state='open'])]:border-transparent\",\n \"last-of-type:border-b-0\",\n className\n )}\n data-variant={variant}\n {...props}\n />\n );\n}\n\nAccordionItem.displayName = \"AccordionItem\";\n\n/** Props for AccordionTrigger component */\ninterface AccordionTriggerProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n variant?: AccordionVariant;\n headerClassName?: string;\n triggerChildrenClassName?: string;\n}\n\n/**\n * Clickable heading that toggles the associated AccordionContent.\n * Includes an animated chevron indicator.\n *\n * @param variant - Visual style: `\"default\"` or `\"hc\"`\n * @param headerClassName - Additional classes for the header wrapper\n * @param triggerChildrenClassName - Additional classes for the inner content wrapper\n */\nfunction AccordionTrigger({\n className,\n children,\n variant = \"default\",\n headerClassName,\n triggerChildrenClassName,\n ...props\n}: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className={cn(\"flex\", headerClassName)}>\n <AccordionPrimitive.Trigger\n className={cn(\n variant === \"default\"\n ? \"group my-4 flex flex-1 items-center justify-between text-left font-sans font-semibold text-base text-gray-950 transition-all md:my-3 2xl:my-2 2xl:text-lg dark:text-white [&>[data-icon='closed']]:data-[state=closed]:block [&>[data-icon='open']]:data-[state=open]:block [&>[data-icon]]:hidden\"\n : \"group my-3 flex flex-1 items-center justify-between text-left font-sans font-semibold text-base text-white transition-all 2xl:text-lg [&>[data-icon='closed']]:data-[state=closed]:block [&>[data-icon='open']]:data-[state=open]:block [&>[data-icon]]:hidden\",\n className\n )}\n data-variant={variant}\n style={{ WebkitTapHighlightColor: \"transparent\" }}\n {...props}\n >\n <div\n className={cn(\n \"flex flex-1 items-center justify-between gap-1 rounded-sm py-2 font-semibold text-base transition-colors 2xl:text-lg\",\n variant === \"default\"\n ? \"md:px-2 md:hover:bg-gray-50 dark:md:hover:bg-gray-900\"\n : \"-my-1 px-2 hover:bg-gray-900\",\n triggerChildrenClassName\n )}\n >\n {children}\n <ChevronDown className=\"w-5 transition-transform duration-150 group-data-[state=open]:rotate-180\" />\n </div>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\n/** Props for AccordionContent component */\ninterface AccordionContentProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> {\n variant?: AccordionVariant;\n}\n\n/**\n * Collapsible content panel with smooth expand/collapse animation.\n * Automatically hidden when parent AccordionItem is closed.\n *\n * @param variant - Visual style: `\"default\"` or `\"hc\"`\n * @param forceMount - Keep content in DOM even when closed (useful for SEO/forms)\n */\nfunction AccordionContent({\n className,\n children,\n variant = \"default\",\n ...props\n}: AccordionContentProps) {\n return (\n <AccordionPrimitive.Content\n className={cn(\n variant === \"default\"\n ? \"overflow-hidden text-left font-sans text-gray-700 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down md:px-2 2xl:text-base dark:text-gray-200\"\n : \"-mx-6 ~px-6/12 overflow-hidden bg-gray-900 pt-6 text-left font-sans text-gray-400 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down 2xl:text-base\"\n )}\n data-variant={variant}\n {...props}\n >\n <div className={cn(\"pb-8\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n type AccordionContentProps,\n type AccordionItemProps,\n type AccordionProps,\n type AccordionTriggerProps,\n type AccordionVariant,\n};\n"],
4
+ "sourcesContent": ["/**\n * @module Accordion\n *\n * A vertically stacked set of interactive headings that reveal/hide associated content.\n * Built on Radix UI Accordion primitive with custom styling variants.\n *\n * @see {@link https://ui.shadcn.com/docs/components/accordion Shadcn Accordion}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/accordion Radix Accordion}\n *\n * @example\n * // Basic single-select accordion\n * <Accordion type=\"single\" collapsible>\n * <AccordionItem value=\"item-1\">\n * <AccordionTrigger>Section 1</AccordionTrigger>\n * <AccordionContent>Content for section 1</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n *\n * @example\n * // Multi-select accordion with HC variant (dark theme)\n * <Accordion type=\"multiple\" variant=\"hc\">\n * <AccordionItem value=\"faq-1\" variant=\"hc\">\n * <AccordionTrigger variant=\"hc\">What is Uppbeat?</AccordionTrigger>\n * <AccordionContent variant=\"hc\">Royalty-free music platform</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n */\nimport { ChevronDown } from \"lucide-react\";\nimport { Accordion as AccordionPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Visual style variants for the accordion.\n * - `default`: Light theme with subtle borders\n * - `hc`: High contrast dark theme variant\n */\ntype AccordionVariant = \"default\" | \"hc\";\n\ntype AccordionItemProps = React.ComponentPropsWithoutRef<\n typeof AccordionPrimitive.Item\n> & {\n variant?: AccordionVariant;\n};\n\ntype AccordionProps = React.ComponentPropsWithoutRef<\n typeof AccordionPrimitive.Root\n> & {\n variant?: AccordionVariant;\n};\n\n/**\n * Root container for accordion items. Controls single or multiple expansion.\n *\n * @param type - `\"single\"` allows one item open at a time, `\"multiple\"` allows many\n * @param collapsible - When `type=\"single\"`, allows closing all items (default: false)\n * @param variant - Visual style: `\"default\"` or `\"hc\"` (high contrast)\n */\nfunction Accordion({ variant = \"default\", ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n className={cn(variant === \"hc\" && \"hc-accordion\")}\n {...props}\n />\n );\n}\n\nAccordion.displayName = \"Accordion\";\n\n/**\n * Wrapper for each accordion section. Must have a unique `value` prop.\n *\n * @param value - Unique identifier for this item (required)\n * @param variant - Visual style matching parent Accordion\n * @param disabled - Prevents interaction when true\n */\nfunction AccordionItem({\n className,\n variant = \"default\",\n ...props\n}: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n className={cn(\n variant === \"default\"\n ? \"border-0 border-gray-150 border-b-1 border-solid bg-transparent transition-colors md:mb-1 dark:border-gray-800 [&:has(:focus-visible)]:ring-2 [&:has(:focus-visible)]:ring-[var(--focus-ring)] [&:has(:focus-visible)]:ring-offset-8 dark:[&:has(:focus-visible)]:ring-offset-gray-950\"\n : \"border-0 border-gray-800 border-b-1 border-solid bg-transparent transition-colors [&:has(:focus-visible)]:ring-2 [&:has(:focus-visible)]:ring-[var(--focus-ring)] [&:has(:focus-visible)]:ring-offset-8 [&:has(:focus-visible)]:ring-offset-gray-950 [&:has([data-state='open'])]:border-transparent\",\n \"last-of-type:border-b-0\",\n className\n )}\n data-variant={variant}\n {...props}\n />\n );\n}\n\nAccordionItem.displayName = \"AccordionItem\";\n\n/** Props for AccordionTrigger component */\ninterface AccordionTriggerProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n headerClassName?: string;\n triggerChildrenClassName?: string;\n variant?: AccordionVariant;\n}\n\n/**\n * Clickable heading that toggles the associated AccordionContent.\n * Includes an animated chevron indicator.\n *\n * @param variant - Visual style: `\"default\"` or `\"hc\"`\n * @param headerClassName - Additional classes for the header wrapper\n * @param triggerChildrenClassName - Additional classes for the inner content wrapper\n */\nfunction AccordionTrigger({\n className,\n children,\n variant = \"default\",\n headerClassName,\n triggerChildrenClassName,\n ...props\n}: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className={cn(\"flex\", headerClassName)}>\n <AccordionPrimitive.Trigger\n className={cn(\n variant === \"default\"\n ? \"group my-4 flex flex-1 items-center justify-between text-left font-sans font-semibold text-base text-gray-950 transition-all md:my-3 2xl:my-2 2xl:text-lg dark:text-white [&>[data-icon='closed']]:data-[state=closed]:block [&>[data-icon='open']]:data-[state=open]:block [&>[data-icon]]:hidden\"\n : \"group my-3 flex flex-1 items-center justify-between text-left font-sans font-semibold text-base text-white transition-all 2xl:text-lg [&>[data-icon='closed']]:data-[state=closed]:block [&>[data-icon='open']]:data-[state=open]:block [&>[data-icon]]:hidden\",\n className\n )}\n data-variant={variant}\n style={{ WebkitTapHighlightColor: \"transparent\" }}\n {...props}\n >\n <div\n className={cn(\n \"flex flex-1 items-center justify-between gap-1 rounded-xs py-2 font-semibold text-base transition-colors 2xl:text-lg\",\n variant === \"default\"\n ? \"md:px-2 md:hover:bg-gray-50 dark:md:hover:bg-gray-900\"\n : \"-my-1 px-2 hover:bg-gray-900\",\n triggerChildrenClassName\n )}\n >\n {children}\n <ChevronDown className=\"w-5 transition-transform duration-150 group-data-[state=open]:rotate-180\" />\n </div>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\n/** Props for AccordionContent component */\ninterface AccordionContentProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> {\n variant?: AccordionVariant;\n}\n\n/**\n * Collapsible content panel with smooth expand/collapse animation.\n * Automatically hidden when parent AccordionItem is closed.\n *\n * @param variant - Visual style: `\"default\"` or `\"hc\"`\n * @param forceMount - Keep content in DOM even when closed (useful for SEO/forms)\n */\nfunction AccordionContent({\n className,\n children,\n variant = \"default\",\n ...props\n}: AccordionContentProps) {\n return (\n <AccordionPrimitive.Content\n className={cn(\n variant === \"default\"\n ? \"overflow-hidden text-left font-sans text-gray-700 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down md:px-2 2xl:text-base dark:text-gray-200\"\n : \"-mx-6 fl-px-6/12 overflow-hidden bg-gray-900 pt-6 text-left font-sans text-gray-400 text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down 2xl:text-base\"\n )}\n data-variant={variant}\n {...props}\n >\n <div className={cn(\"pb-8\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport {\n Accordion,\n AccordionContent,\n type AccordionContentProps,\n AccordionItem,\n type AccordionItemProps,\n type AccordionProps,\n AccordionTrigger,\n type AccordionTriggerProps,\n type AccordionVariant,\n};\n"],
5
5
  "mappings": "AA4DI,cA2EI,YA3EJ;AAjCJ,SAAS,mBAAmB;AAC5B,SAAS,aAAa,0BAA0B;AAEhD,SAAS,UAAU;AA4BnB,SAAS,UAAU,EAAE,UAAU,WAAW,GAAG,MAAM,GAAmB;AACpE,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,WAAW,GAAG,YAAY,QAAQ,cAAc;AAAA,MAC/C,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,UAAU,cAAc;AASxB,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAAuB;AACrB,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,WAAW;AAAA,QACT,YAAY,YACR,2RACA;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAc;AAAA,MACb,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,cAAc,cAAc;AAkB5B,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,SACE,oBAAC,mBAAmB,QAAnB,EAA0B,WAAW,GAAG,QAAQ,eAAe,GAC9D;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,WAAW;AAAA,QACT,YAAY,YACR,uSACA;AAAA,QACJ;AAAA,MACF;AAAA,MACA,gBAAc;AAAA,MACd,OAAO,EAAE,yBAAyB,cAAc;AAAA,MAC/C,GAAG;AAAA,MAEJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,YAAY,YACR,0DACA;AAAA,YACJ;AAAA,UACF;AAAA,UAEC;AAAA;AAAA,YACD,oBAAC,eAAY,WAAU,4EAA2E;AAAA;AAAA;AAAA,MACpG;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,iBAAiB,cAAc,mBAAmB,QAAQ;AAe1D,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAA0B;AACxB,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,WAAW;AAAA,QACT,YAAY,YACR,wMACA;AAAA,MACN;AAAA,MACA,gBAAc;AAAA,MACb,GAAG;AAAA,MAEJ,8BAAC,SAAI,WAAW,GAAG,QAAQ,SAAS,GAAI,UAAS;AAAA;AAAA,EACnD;AAEJ;AAEA,iBAAiB,cAAc,mBAAmB,QAAQ;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @module Badge
3
+ *
4
+ * Small status indicators and labels for highlighting information.
5
+ * Supports multiple color variants and sizes for different contexts.
6
+ *
7
+ * @see {@link https://ui.shadcn.com/docs/components/badge Shadcn Badge}
8
+ *
9
+ * @example
10
+ * // Basic badge
11
+ * <Badge>New</Badge>
12
+ *
13
+ * @example
14
+ * // Badge variants
15
+ * <Badge variant="brand">Premium</Badge>
16
+ * <Badge variant="success">Active</Badge>
17
+ * <Badge variant="error">Expired</Badge>
18
+ *
19
+ * @example
20
+ * // As a child element (e.g., wrapping a link)
21
+ * <Badge asChild variant="outline">
22
+ * <a href="/pricing">View Plans</a>
23
+ * </Badge>
24
+ */
25
+ import { type VariantProps } from "class-variance-authority";
26
+ import type * as React from "react";
27
+ /**
28
+ * CVA variants for Badge styling.
29
+ * Includes color variants matching Button component for consistency.
30
+ */
31
+ declare const badgeVariants: (props?: ({
32
+ variant?: "contrast" | "bold" | "white" | "transparent" | "light" | "subtle" | "brand" | "brandSecondary" | "success" | "error" | "primary" | "secondary" | "destructive" | "brandLight" | "outline" | null | undefined;
33
+ size?: "xs" | "sm" | "lg" | "default" | "icon" | null | undefined;
34
+ shadow?: boolean | null | undefined;
35
+ strong?: boolean | null | undefined;
36
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
37
+ /**
38
+ * Props for the Badge component.
39
+ *
40
+ * @property variant - Color scheme: `brand`, `brandSecondary`, `success`, `error`, `subtle`, `bold`, etc.
41
+ * @property size - Size variant: `xs`, `sm`, `default`, `lg`, `icon`
42
+ * @property shadow - Add drop shadow when true
43
+ * @property strong - Use semibold font weight when true
44
+ * @property asChild - Render as child element (uses Radix Slot)
45
+ * @property ref - Ref to the underlying div element
46
+ */
47
+ export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
48
+ asChild?: boolean;
49
+ ref?: React.Ref<HTMLDivElement>;
50
+ }
51
+ /**
52
+ * Displays a small label or status indicator.
53
+ *
54
+ * Common use cases:
55
+ * - Subscription status (Free, Premium)
56
+ * - Item counts
57
+ * - Status indicators (New, Sale, Popular)
58
+ * - Tags and categories
59
+ */
60
+ declare const Badge: ({ className, variant, size, shadow, strong, asChild, ref, ...props }: BadgeProps) => import("react/jsx-runtime").JSX.Element;
61
+ export { Badge, badgeVariants };
62
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC;;;GAGG;AACH,QAAA,MAAM,aAAa;;;;;8EAwDlB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,KAAK,GAAI,sEASZ,UAAU,4CAaZ,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -3,7 +3,7 @@ import { cva } from "class-variance-authority";
3
3
  import { Slot as SlotPrimitive } from "radix-ui";
4
4
  import { cn } from "../lib/utils";
5
5
  const badgeVariants = cva(
6
- "inline-flex items-center rounded-full border transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 dark:focus-visible:ring-gray-300",
6
+ "inline-flex items-center rounded-full border transition-colors focus:outline-hidden focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 dark:focus-visible:ring-gray-300",
7
7
  {
8
8
  variants: {
9
9
  variant: {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/badge.tsx"],
4
- "sourcesContent": ["/**\n * @module Badge\n *\n * Small status indicators and labels for highlighting information.\n * Supports multiple color variants and sizes for different contexts.\n *\n * @see {@link https://ui.shadcn.com/docs/components/badge Shadcn Badge}\n *\n * @example\n * // Basic badge\n * <Badge>New</Badge>\n *\n * @example\n * // Badge variants\n * <Badge variant=\"brand\">Premium</Badge>\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\">Expired</Badge>\n *\n * @example\n * // As a child element (e.g., wrapping a link)\n * <Badge asChild variant=\"outline\">\n * <a href=\"/pricing\">View Plans</a>\n * </Badge>\n */\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * CVA variants for Badge styling.\n * Includes color variants matching Button component for consistency.\n */\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 dark:focus-visible:ring-gray-300\",\n {\n variants: {\n variant: {\n // Matching button variants (without hover/disabled states)\n subtle:\n \"border-1 border-gray-150 border-solid bg-white text-gray-950 dark:border-gray-800 dark:bg-gray-950 dark:text-white\",\n brand:\n \"border-1 border-brand-primary border-solid bg-brand-primary text-white\",\n brandSecondary:\n \"border-1 border-brand-secondary border-solid bg-brand-secondary text-brand-primary-hover dark:border-gray-900 dark:bg-gray-900 dark:text-white\",\n bold: \"border-gray-950 bg-gray-950 text-white dark:border-white dark:bg-white dark:text-gray-950\",\n light:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n transparent:\n \"border-transparent bg-transparent text-gray-950 dark:text-white\",\n contrast: \"border-white bg-white text-gray-950\",\n success:\n \"border-green-600 bg-green-600 text-white dark:border-green-500 dark:bg-green-500\",\n error:\n \"border-red-600 bg-red-600 text-white dark:border-red-500 dark:bg-red-500\",\n primary:\n \"border-gray-900 bg-gray-900 text-white dark:border-gray-50 dark:bg-gray-50 dark:text-gray-950\",\n secondary:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n destructive: \"border-red bg-red text-white\",\n white: \"border-gray-200 bg-white text-brand-primary\",\n brandLight:\n \"border-brand-secondary bg-brand-secondary text-brand-primary-hover\",\n outline:\n \"border border-gray-200 border-solid bg-transparent text-gray-800 focus-visible:ring-gray-500 dark:border-gray-800 dark:bg-transparent dark:text-white dark:focus-visible:ring-gray-400\",\n },\n size: {\n default: \"h-8 px-4 py-2 leading-8\",\n xs: \"h-5 gap-1.5 px-2 text-xs leading-5\",\n sm: \"h-6 px-2.5 leading-6 text-sm\",\n lg: \"h-10 gap-4 px-8 text-lg leading-10\",\n icon: \"h-8 w-8 leading-8\",\n },\n shadow: {\n true: \"shadow\",\n false: \"\",\n },\n strong: {\n true: \"font-semibold\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"bold\",\n size: \"default\",\n shadow: false,\n strong: false,\n },\n }\n);\n\n/**\n * Props for the Badge component.\n *\n * @property variant - Color scheme: `brand`, `brandSecondary`, `success`, `error`, `subtle`, `bold`, etc.\n * @property size - Size variant: `xs`, `sm`, `default`, `lg`, `icon`\n * @property shadow - Add drop shadow when true\n * @property strong - Use semibold font weight when true\n * @property asChild - Render as child element (uses Radix Slot)\n * @property ref - Ref to the underlying div element\n */\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n asChild?: boolean;\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * Displays a small label or status indicator.\n *\n * Common use cases:\n * - Subscription status (Free, Premium)\n * - Item counts\n * - Status indicators (New, Sale, Popular)\n * - Tags and categories\n */\nconst Badge = ({\n className,\n variant,\n size,\n shadow,\n strong,\n asChild = false,\n ref,\n ...props\n}: BadgeProps) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <Comp\n className={cn(\n badgeVariants({ variant, size, shadow, strong }),\n className\n )}\n ref={ref}\n {...props}\n />\n );\n};\n\nexport { Badge, badgeVariants };\n"],
4
+ "sourcesContent": ["/**\n * @module Badge\n *\n * Small status indicators and labels for highlighting information.\n * Supports multiple color variants and sizes for different contexts.\n *\n * @see {@link https://ui.shadcn.com/docs/components/badge Shadcn Badge}\n *\n * @example\n * // Basic badge\n * <Badge>New</Badge>\n *\n * @example\n * // Badge variants\n * <Badge variant=\"brand\">Premium</Badge>\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\">Expired</Badge>\n *\n * @example\n * // As a child element (e.g., wrapping a link)\n * <Badge asChild variant=\"outline\">\n * <a href=\"/pricing\">View Plans</a>\n * </Badge>\n */\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * CVA variants for Badge styling.\n * Includes color variants matching Button component for consistency.\n */\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border transition-colors focus:outline-hidden focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 dark:focus-visible:ring-gray-300\",\n {\n variants: {\n variant: {\n // Matching button variants (without hover/disabled states)\n subtle:\n \"border-1 border-gray-150 border-solid bg-white text-gray-950 dark:border-gray-800 dark:bg-gray-950 dark:text-white\",\n brand:\n \"border-1 border-brand-primary border-solid bg-brand-primary text-white\",\n brandSecondary:\n \"border-1 border-brand-secondary border-solid bg-brand-secondary text-brand-primary-hover dark:border-gray-900 dark:bg-gray-900 dark:text-white\",\n bold: \"border-gray-950 bg-gray-950 text-white dark:border-white dark:bg-white dark:text-gray-950\",\n light:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n transparent:\n \"border-transparent bg-transparent text-gray-950 dark:text-white\",\n contrast: \"border-white bg-white text-gray-950\",\n success:\n \"border-green-600 bg-green-600 text-white dark:border-green-500 dark:bg-green-500\",\n error:\n \"border-red-600 bg-red-600 text-white dark:border-red-500 dark:bg-red-500\",\n primary:\n \"border-gray-900 bg-gray-900 text-white dark:border-gray-50 dark:bg-gray-50 dark:text-gray-950\",\n secondary:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n destructive: \"border-red bg-red text-white\",\n white: \"border-gray-200 bg-white text-brand-primary\",\n brandLight:\n \"border-brand-secondary bg-brand-secondary text-brand-primary-hover\",\n outline:\n \"border border-gray-200 border-solid bg-transparent text-gray-800 focus-visible:ring-gray-500 dark:border-gray-800 dark:bg-transparent dark:text-white dark:focus-visible:ring-gray-400\",\n },\n size: {\n default: \"h-8 px-4 py-2 leading-8\",\n xs: \"h-5 gap-1.5 px-2 text-xs leading-5\",\n sm: \"h-6 px-2.5 leading-6 text-sm\",\n lg: \"h-10 gap-4 px-8 text-lg leading-10\",\n icon: \"h-8 w-8 leading-8\",\n },\n shadow: {\n true: \"shadow\",\n false: \"\",\n },\n strong: {\n true: \"font-semibold\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"bold\",\n size: \"default\",\n shadow: false,\n strong: false,\n },\n }\n);\n\n/**\n * Props for the Badge component.\n *\n * @property variant - Color scheme: `brand`, `brandSecondary`, `success`, `error`, `subtle`, `bold`, etc.\n * @property size - Size variant: `xs`, `sm`, `default`, `lg`, `icon`\n * @property shadow - Add drop shadow when true\n * @property strong - Use semibold font weight when true\n * @property asChild - Render as child element (uses Radix Slot)\n * @property ref - Ref to the underlying div element\n */\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n asChild?: boolean;\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * Displays a small label or status indicator.\n *\n * Common use cases:\n * - Subscription status (Free, Premium)\n * - Item counts\n * - Status indicators (New, Sale, Popular)\n * - Tags and categories\n */\nconst Badge = ({\n className,\n variant,\n size,\n shadow,\n strong,\n asChild = false,\n ref,\n ...props\n}: BadgeProps) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <Comp\n className={cn(\n badgeVariants({ variant, size, shadow, strong }),\n className\n )}\n ref={ref}\n {...props}\n />\n );\n};\n\nexport { Badge, badgeVariants };\n"],
5
5
  "mappings": "AAmII;AA3GJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAGtC,SAAS,UAAU;AAMnB,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA;AAAA,QAEP,QACE;AAAA,QACF,OACE;AAAA,QACF,gBACE;AAAA,QACF,MAAM;AAAA,QACN,OACE;AAAA,QACF,aACE;AAAA,QACF,UAAU;AAAA,QACV,SACE;AAAA,QACF,OACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,aAAa;AAAA,QACb,OAAO;AAAA,QACP,YACE;AAAA,QACF,SACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AA4BA,MAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAkB;AAChB,QAAM,OAAO,UAAU,cAAc,OAAO;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,cAAc,EAAE,SAAS,MAAM,QAAQ,OAAO,CAAC;AAAA,QAC/C;AAAA,MACF;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,42 @@
1
+ import type * as React from "react";
2
+ import type { Ref } from "react";
3
+ /**
4
+ * Root navigation container with `aria-label="breadcrumb"`.
5
+ */
6
+ declare const Breadcrumb: ({ ref, ...props }: React.ComponentPropsWithoutRef<"nav"> & {
7
+ separator?: React.ReactNode;
8
+ ref?: Ref<HTMLElement>;
9
+ }) => import("react/jsx-runtime").JSX.Element;
10
+ /** Ordered list container for breadcrumb items. */
11
+ declare const BreadcrumbList: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<"ol"> & {
12
+ ref?: Ref<HTMLOListElement>;
13
+ }) => import("react/jsx-runtime").JSX.Element;
14
+ /** List item wrapper for each breadcrumb segment. */
15
+ declare const BreadcrumbItem: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<"li"> & {
16
+ ref?: Ref<HTMLLIElement>;
17
+ }) => import("react/jsx-runtime").JSX.Element;
18
+ /**
19
+ * Clickable link within a breadcrumb. Use `asChild` to wrap custom link components.
20
+ *
21
+ * @param asChild - When true, renders as child element (e.g., Next.js Link)
22
+ */
23
+ declare const BreadcrumbLink: ({ asChild, className, ref, ...props }: React.ComponentPropsWithoutRef<"a"> & {
24
+ asChild?: boolean;
25
+ ref?: Ref<HTMLAnchorElement>;
26
+ }) => import("react/jsx-runtime").JSX.Element;
27
+ /** Current page indicator (non-clickable). Has `aria-current="page"`. */
28
+ declare const BreadcrumbPage: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<"span"> & {
29
+ ref?: Ref<HTMLSpanElement>;
30
+ }) => import("react/jsx-runtime").JSX.Element;
31
+ /** Visual separator between breadcrumb items. Defaults to chevron icon. */
32
+ declare const BreadcrumbSeparator: {
33
+ ({ children, className, ...props }: React.ComponentProps<"li">): import("react/jsx-runtime").JSX.Element;
34
+ displayName: string;
35
+ };
36
+ /** Ellipsis indicator for collapsed breadcrumb items (long paths). */
37
+ declare const BreadcrumbEllipsis: {
38
+ ({ className, ...props }: React.ComponentProps<"span">): import("react/jsx-runtime").JSX.Element;
39
+ displayName: string;
40
+ };
41
+ export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, };
42
+ //# sourceMappingURL=breadcrumb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../src/components/breadcrumb.tsx"],"names":[],"mappings":"AAwCA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIjC;;GAEG;AACH,QAAA,MAAM,UAAU,GAAI,mBAGjB,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG;IACzC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB,4CAAyD,CAAC;AAE3D,mDAAmD;AACnD,QAAA,MAAM,cAAc,GAAI,8BAIrB,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG;IACxC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B,4CASA,CAAC;AAEF,qDAAqD;AACrD,QAAA,MAAM,cAAc,GAAI,8BAIrB,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG;IACxC,GAAG,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;CAC1B,4CAMA,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,cAAc,GAAI,uCAKrB,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B,4CAaA,CAAC;AAEF,yEAAyE;AACzE,QAAA,MAAM,cAAc,GAAI,8BAIrB,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,GAAG;IAC1C,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CAC5B,4CAOA,CAAC;AAEF,2EAA2E;AAC3E,QAAA,MAAM,mBAAmB;wCAItB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;;CAS5B,CAAC;AAIF,sEAAsE;AACtE,QAAA,MAAM,kBAAkB;8BAGrB,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;;CAU9B,CAAC;AAIF,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,GACpB,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @module Button
3
+ *
4
+ * Versatile button component with multiple variants, sizes, and responsive options.
5
+ * Supports all standard button interactions plus loading states and icon-only modes.
6
+ *
7
+ * @see {@link https://ui.shadcn.com/docs/components/button Shadcn Button}
8
+ *
9
+ * @example
10
+ * // Basic buttons
11
+ * <Button>Default</Button>
12
+ * <Button variant="brand">Primary Action</Button>
13
+ * <Button variant="subtle">Secondary</Button>
14
+ *
15
+ * @example
16
+ * // Sizes
17
+ * <Button size="xs">Extra Small</Button>
18
+ * <Button size="sm">Small</Button>
19
+ * <Button size="lg">Large</Button>
20
+ * <Button size="xl">Extra Large</Button>
21
+ *
22
+ * @example
23
+ * // Responsive size (changes at breakpoints)
24
+ * <Button size={{ default: "sm", md: "default", lg: "lg" }}>
25
+ * Responsive Button
26
+ * </Button>
27
+ *
28
+ * @example
29
+ * // Icon button
30
+ * <Button icon size="default"><PlayIcon /></Button>
31
+ *
32
+ * @example
33
+ * // As link (using asChild)
34
+ * <Button asChild variant="brand">
35
+ * <a href="/signup">Sign Up</a>
36
+ * </Button>
37
+ *
38
+ * @example
39
+ * // With loading state
40
+ * <Button disabled>
41
+ * <Loading visible={isLoading} />
42
+ * {isLoading ? "Loading..." : "Submit"}
43
+ * </Button>
44
+ */
45
+ import { type VariantProps } from "class-variance-authority";
46
+ import type { ButtonHTMLAttributes, Ref } from "react";
47
+ type ButtonSize = "default" | "xs" | "sm" | "lg" | "icon" | "xl";
48
+ type ButtonFontSize = "xxs" | "xs" | "sm" | "base" | "lg" | "xl" | null;
49
+ declare const buttonVariants: (props?: ({
50
+ variant?: "contrast" | "bold" | "transparent" | "light" | "subtle" | "brand" | "brandSecondary" | "success" | "error" | null | undefined;
51
+ size?: "xs" | "sm" | "lg" | "xl" | "default" | "icon" | null | undefined;
52
+ fontSize?: "xs" | "sm" | "base" | "lg" | "xl" | "xxs" | "null" | null | undefined;
53
+ borderRadius?: "rounded" | "sm" | "default" | "full" | null | undefined;
54
+ border?: boolean | null | undefined;
55
+ noFeedback?: boolean | null | undefined;
56
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
57
+ type ResponsiveButtonSize = ButtonSize | {
58
+ default: ButtonSize;
59
+ xxs?: ButtonSize;
60
+ xs?: ButtonSize;
61
+ sm?: ButtonSize;
62
+ md?: ButtonSize;
63
+ lg?: ButtonSize;
64
+ xl?: ButtonSize;
65
+ "2xl"?: ButtonSize;
66
+ };
67
+ type ResponsiveButtonFontSize = Exclude<ButtonFontSize, null> | {
68
+ default?: Exclude<ButtonFontSize, null>;
69
+ xxs?: Exclude<ButtonFontSize, null>;
70
+ xs?: Exclude<ButtonFontSize, null>;
71
+ sm?: Exclude<ButtonFontSize, null>;
72
+ md?: Exclude<ButtonFontSize, null>;
73
+ lg?: Exclude<ButtonFontSize, null>;
74
+ xl?: Exclude<ButtonFontSize, null>;
75
+ "2xl"?: Exclude<ButtonFontSize, null>;
76
+ };
77
+ /**
78
+ * Props for the Button component.
79
+ *
80
+ * @property variant - Color/style: `brand`, `brandSecondary`, `subtle`, `bold`, `light`, `transparent`, `contrast`, `success`, `error`
81
+ * @property size - Size or responsive size object: `xs`, `sm`, `default`, `lg`, `xl`, `icon`
82
+ * @property fontSize - Override font size or responsive font size object
83
+ * @property borderRadius - Corner style: `default`, `sm`, `full`, `rounded`
84
+ * @property border - Show border when true
85
+ * @property noFeedback - Disable scale animation on click
86
+ * @property asChild - Render as child element (e.g., for links)
87
+ * @property icon - Square aspect ratio with no padding (for icon-only buttons)
88
+ */
89
+ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, Omit<VariantProps<typeof buttonVariants>, "size" | "fontSize"> {
90
+ asChild?: boolean;
91
+ fontSize?: ResponsiveButtonFontSize;
92
+ icon?: boolean;
93
+ ref?: Ref<HTMLButtonElement>;
94
+ size?: ResponsiveButtonSize;
95
+ }
96
+ declare const Button: ({ className, variant, size, borderRadius, border, noFeedback, asChild, type, children, fontSize, icon, ref, ...props }: ButtonProps) => import("react/jsx-runtime").JSX.Element;
97
+ /** CVA variants for Loading spinner sizing */
98
+ declare const loadingVariants: (props?: ({
99
+ size?: "xs" | "sm" | "lg" | "xl" | "default" | "icon" | null | undefined;
100
+ visible?: boolean | null | undefined;
101
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
102
+ /**
103
+ * Animated loading spinner for use inside buttons.
104
+ *
105
+ * @param size - Match parent button size for proper scaling
106
+ * @param visible - Show/hide the spinner
107
+ *
108
+ * @example
109
+ * <Button disabled={isLoading}>
110
+ * <Loading visible={isLoading} size="default" />
111
+ * Submit
112
+ * </Button>
113
+ */
114
+ declare const Loading: ({ size, visible }: VariantProps<typeof loadingVariants>) => import("react/jsx-runtime").JSX.Element;
115
+ export type { ButtonFontSize, ButtonSize, ResponsiveButtonFontSize, ResponsiveButtonSize, };
116
+ export { Button, buttonVariants, Loading, loadingVariants };
117
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAyBvD,KAAK,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;AAEjE,KAAK,cAAc,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAexE,QAAA,MAAM,cAAc;;;;;;;8EA2FnB,CAAC;AAEF,KAAK,oBAAoB,GACrB,UAAU,GACV;IACE,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB,CAAC;AAEN,KAAK,wBAAwB,GACzB,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,GAC7B;IACE,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnC,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnC,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnC,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnC,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;CACvC,CAAC;AAkFN;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WACf,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,IAAI,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAED,QAAA,MAAM,MAAM,GAAI,wHAcb,WAAW,4CA+Gb,CAAC;AAEF,8CAA8C;AAC9C,QAAA,MAAM,eAAe;;;8EAsBpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,OAAO,GAAI,mBAAmB,YAAY,CAAC,OAAO,eAAe,CAAC,4CAEvE,CAAC;AAEF,YAAY,EACV,cAAc,EACd,UAAU,EACV,wBAAwB,EACxB,oBAAoB,GACrB,CAAC;AACF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -28,7 +28,7 @@ const defaultFontSizeForSize = {
28
28
  xl: "lg"
29
29
  };
30
30
  const buttonVariants = cva(
31
- "inline-flex items-center justify-center gap-2 whitespace-nowrap font-normal font-sans text-base transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--focus-ring-offset)] enabled:cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",
31
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap font-normal font-sans text-base transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--focus-ring-offset)] enabled:cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",
32
32
  {
33
33
  variants: {
34
34
  variant: {
@@ -38,7 +38,7 @@ const buttonVariants = cva(
38
38
  brandSecondary: "border-1 border-brand-secondary border-solid bg-brand-secondary font-semibold text-brand-primary-hover hover:border-brand-secondary-hover hover:bg-brand-secondary-hover disabled:hover:bg-brand-secondary-hover dark:border-gray-900 dark:bg-gray-900 hover:dark:border-gray-800 hover:dark:bg-gray-800 dark:text-white dark:disabled:hover:border-gray-900 dark:disabled:hover:bg-gray-900",
39
39
  bold: "border-gray-950 bg-gray-950 font-semibold text-white dark:border-white dark:bg-white dark:text-gray-950",
40
40
  light: "border-gray-150 bg-gray-100 font-semibold text-gray-950 hover:border-gray-200 hover:bg-gray-200 disabled:hover:border-gray-150 disabled:hover:bg-gray-100 dark:border-gray-800 dark:bg-gray-800 dark:text-white dark:hover:bg-gray-700 dark:disabled:hover:bg-gray-800",
41
- transparent: "!border-transparent bg-transparent font-semibold text-gray-950 hover:border-gray-50 hover:bg-gray-50 disabled:hover:border-transparent disabled:hover:bg-transparent dark:text-white dark:hover:border-gray-900 dark:hover:bg-gray-900",
41
+ transparent: "border-transparent! bg-transparent font-semibold text-gray-950 hover:border-gray-50 hover:bg-gray-50 disabled:hover:border-transparent disabled:hover:bg-transparent dark:text-white dark:hover:border-gray-900 dark:hover:bg-gray-900",
42
42
  contrast: "border-white bg-white font-semibold text-gray-950 hover:bg-gray-50 hover:disabled:border-white hover:disabled:bg-white",
43
43
  success: "border-green-600 bg-green-600 font-semibold text-white hover:border-green-700 hover:bg-green-700 disabled:hover:border-green-600 disabled:hover:bg-green-600 dark:border-green-500 dark:bg-green-500 dark:hover:border-green-650 dark:hover:bg-green-650 dark:disabled:hover:border-green-500 dark:disabled:hover:bg-green-500",
44
44
  error: "border-red-600 bg-red-600 font-semibold text-white hover:bg-red-700 disabled:hover:border-red-700 disabled:hover:bg-red-700 dark:border-red-500 dark:bg-red-500 dark:hover:border-red-600 dark:hover:bg-red-600 dark:disabled:hover:border-red-600 dark:disabled:hover:bg-red-600"
@@ -61,7 +61,7 @@ const buttonVariants = cva(
61
61
  },
62
62
  noFeedback: {
63
63
  true: "",
64
- false: "transition-scale active:scale-[0.97] disabled:scale-100"
64
+ false: "transition-transform active:scale-[0.97] disabled:scale-100"
65
65
  }
66
66
  },
67
67
  compoundVariants: [