@music-vine/cadence 0.1.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +2 -0
  2. package/dist/components/accordion.d.ts.map +1 -1
  3. package/dist/components/accordion.js +1 -1
  4. package/dist/components/accordion.js.map +2 -2
  5. package/dist/components/badge.d.ts +5 -3
  6. package/dist/components/badge.d.ts.map +1 -1
  7. package/dist/components/badge.js +2 -0
  8. package/dist/components/badge.js.map +2 -2
  9. package/dist/components/breadcrumb.d.ts +17 -8
  10. package/dist/components/breadcrumb.d.ts.map +1 -1
  11. package/dist/components/breadcrumb.js +29 -15
  12. package/dist/components/breadcrumb.js.map +2 -2
  13. package/dist/components/button.d.ts +8 -7
  14. package/dist/components/button.d.ts.map +1 -1
  15. package/dist/components/button.js +94 -97
  16. package/dist/components/button.js.map +2 -2
  17. package/dist/components/card.d.ts +25 -7
  18. package/dist/components/card.d.ts.map +1 -1
  19. package/dist/components/card.js +11 -18
  20. package/dist/components/card.js.map +2 -2
  21. package/dist/components/carousel.d.ts +17 -7
  22. package/dist/components/carousel.d.ts.map +1 -1
  23. package/dist/components/carousel.js +146 -133
  24. package/dist/components/carousel.js.map +2 -2
  25. package/dist/components/checkbox.d.ts +5 -2
  26. package/dist/components/checkbox.d.ts.map +1 -1
  27. package/dist/components/checkbox.js +6 -9
  28. package/dist/components/checkbox.js.map +2 -2
  29. package/dist/components/context-menu.d.ts +33 -11
  30. package/dist/components/context-menu.d.ts.map +1 -1
  31. package/dist/components/context-menu.js +16 -25
  32. package/dist/components/context-menu.js.map +2 -2
  33. package/dist/components/dialog.d.ts +13 -4
  34. package/dist/components/dialog.d.ts.map +1 -1
  35. package/dist/components/dialog.js +23 -11
  36. package/dist/components/dialog.js.map +2 -2
  37. package/dist/components/drawer.d.ts +13 -5
  38. package/dist/components/drawer.d.ts.map +1 -1
  39. package/dist/components/drawer.js +65 -59
  40. package/dist/components/drawer.js.map +2 -2
  41. package/dist/components/input.d.ts +8 -5
  42. package/dist/components/input.d.ts.map +1 -1
  43. package/dist/components/input.js +71 -75
  44. package/dist/components/input.js.map +2 -2
  45. package/dist/components/label.d.ts +7 -2
  46. package/dist/components/label.d.ts.map +1 -1
  47. package/dist/components/label.js +2 -4
  48. package/dist/components/label.js.map +2 -2
  49. package/dist/components/popover.d.ts +4 -1
  50. package/dist/components/popover.d.ts.map +1 -1
  51. package/dist/components/popover.js +22 -25
  52. package/dist/components/popover.js.map +2 -2
  53. package/dist/components/radio-group.d.ts +9 -2
  54. package/dist/components/radio-group.d.ts.map +1 -1
  55. package/dist/components/radio-group.js +4 -6
  56. package/dist/components/radio-group.js.map +2 -2
  57. package/dist/components/scroll-area.d.ts +10 -3
  58. package/dist/components/scroll-area.d.ts.map +1 -1
  59. package/dist/components/scroll-area.js +38 -25
  60. package/dist/components/scroll-area.js.map +2 -2
  61. package/dist/components/select.d.ts +26 -43
  62. package/dist/components/select.d.ts.map +1 -1
  63. package/dist/components/select.js +20 -68
  64. package/dist/components/select.js.map +2 -2
  65. package/dist/components/separator.d.ts +5 -2
  66. package/dist/components/separator.d.ts.map +1 -1
  67. package/dist/components/separator.js +19 -17
  68. package/dist/components/separator.js.map +2 -2
  69. package/dist/components/skeleton.d.ts +2 -1
  70. package/dist/components/skeleton.d.ts.map +1 -1
  71. package/dist/components/skeleton.js +2 -0
  72. package/dist/components/skeleton.js.map +2 -2
  73. package/dist/components/slider.d.ts +2 -1
  74. package/dist/components/slider.d.ts.map +1 -1
  75. package/dist/components/slider.js.map +2 -2
  76. package/dist/components/stacking-card.js +2 -2
  77. package/dist/components/stacking-card.js.map +2 -2
  78. package/dist/components/tabs.d.ts +10 -3
  79. package/dist/components/tabs.d.ts.map +1 -1
  80. package/dist/components/tabs.js +18 -10
  81. package/dist/components/tabs.js.map +2 -2
  82. package/dist/components/textarea.d.ts +4 -3
  83. package/dist/components/textarea.d.ts.map +1 -1
  84. package/dist/components/textarea.js +7 -11
  85. package/dist/components/textarea.js.map +2 -2
  86. package/dist/components/typography/heading.d.ts +9 -7
  87. package/dist/components/typography/heading.d.ts.map +1 -1
  88. package/dist/components/typography/heading.js +23 -45
  89. package/dist/components/typography/heading.js.map +2 -2
  90. package/dist/components/typography/list.d.ts +11 -5
  91. package/dist/components/typography/list.d.ts.map +1 -1
  92. package/dist/components/typography/list.js +20 -28
  93. package/dist/components/typography/list.js.map +2 -2
  94. package/dist/components/typography/prose.d.ts +6 -3
  95. package/dist/components/typography/prose.d.ts.map +1 -1
  96. package/dist/components/typography/prose.js +40 -44
  97. package/dist/components/typography/prose.js.map +2 -2
  98. package/dist/components/typography/text.d.ts +4 -2
  99. package/dist/components/typography/text.d.ts.map +1 -1
  100. package/dist/components/typography/text.js +11 -15
  101. package/dist/components/typography/text.js.map +2 -2
  102. package/dist/icons/custom/boards-indicator.js +2 -3
  103. package/dist/icons/custom/boards-indicator.js.map +2 -2
  104. package/dist/icons/custom/exclamation-mark-in-octagon.d.ts.map +1 -1
  105. package/dist/icons/custom/exclamation-mark-in-octagon.js +1 -2
  106. package/dist/icons/custom/exclamation-mark-in-octagon.js.map +2 -2
  107. package/dist/icons/custom/pin.js +1 -1
  108. package/dist/icons/custom/pin.js.map +2 -2
  109. package/dist/icons/custom/tick.js +1 -2
  110. package/dist/icons/custom/tick.js.map +2 -2
  111. package/dist/lib/utils.d.ts +7 -2
  112. package/dist/lib/utils.d.ts.map +1 -1
  113. package/dist/lib/utils.js +62 -2
  114. package/dist/lib/utils.js.map +2 -2
  115. package/dist/test/setup.d.ts +2 -0
  116. package/dist/test/setup.d.ts.map +1 -0
  117. package/dist/test/setup.js +71 -0
  118. package/dist/test/setup.js.map +7 -0
  119. package/package.json +21 -4
  120. package/tailwind.config.ts +2 -1
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # @music-vine/cadence
2
2
 
3
+ > [**View full documentation →**](https://music-vine.github.io/uppbeat-frontend/)
4
+
3
5
  Cadence Design System - UI components and icons for Uppbeat applications.
4
6
 
5
7
  ## Installation
@@ -1 +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,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;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,aAAa,EACb,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,CAAC"}
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;AAE3D,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,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;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,aAAa,EACb,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,CAAC"}
@@ -59,7 +59,7 @@ function AccordionTrigger({
59
59
  ),
60
60
  children: [
61
61
  children,
62
- /* @__PURE__ */ jsx(ChevronDown, { className: "w-5 fill-none transition-transform duration-150 group-data-[state=open]:rotate-180" })
62
+ /* @__PURE__ */ jsx(ChevronDown, { className: "w-5 transition-transform duration-150 group-data-[state=open]:rotate-180" })
63
63
  ]
64
64
  }
65
65
  )
@@ -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-pink-500 [&: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-pink-500 [&: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 fill-none 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"],
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,gRACA;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,sFAAqF;AAAA;AAAA;AAAA,MAC9G;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;",
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 { Ref } from \"react\";\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-pink-500 [&: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-pink-500 [&: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"],
5
+ "mappings": "AA6DI,cA2EI,YA3EJ;AAlCJ,SAAS,mBAAmB;AAC5B,SAAS,aAAa,0BAA0B;AAGhD,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,gRACA;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
  }
@@ -29,8 +29,8 @@ import type * as React from "react";
29
29
  * Includes color variants matching Button component for consistency.
30
30
  */
31
31
  declare const badgeVariants: (props?: ({
32
- variant?: "bold" | "pink" | "white" | "transparent" | "light" | "subtle" | "pinkSecondary" | "contrast" | "success" | "error" | "primary" | "secondary" | "destructive" | "lightPink" | "outline" | "free" | "pink-200" | null | undefined;
33
- size?: "default" | "icon" | "xs" | "sm" | "lg" | null | undefined;
32
+ variant?: "contrast" | "bold" | "pink" | "white" | "transparent" | "light" | "subtle" | "pinkSecondary" | "success" | "error" | "primary" | "secondary" | "destructive" | "lightPink" | "outline" | "free" | "pink-200" | null | undefined;
33
+ size?: "xs" | "sm" | "lg" | "default" | "icon" | null | undefined;
34
34
  shadow?: boolean | null | undefined;
35
35
  strong?: boolean | null | undefined;
36
36
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -42,9 +42,11 @@ declare const badgeVariants: (props?: ({
42
42
  * @property shadow - Add drop shadow when true
43
43
  * @property strong - Use semibold font weight when true
44
44
  * @property asChild - Render as child element (uses Radix Slot)
45
+ * @property ref - Ref to the underlying div element
45
46
  */
46
47
  export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
47
48
  asChild?: boolean;
49
+ ref?: React.Ref<HTMLDivElement>;
48
50
  }
49
51
  /**
50
52
  * Displays a small label or status indicator.
@@ -55,6 +57,6 @@ export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, Varian
55
57
  * - Status indicators (New, Sale, Popular)
56
58
  * - Tags and categories
57
59
  */
58
- declare const Badge: ({ className, variant, size, shadow, strong, asChild, ...props }: BadgeProps) => import("react/jsx-runtime").JSX.Element;
60
+ declare const Badge: ({ className, variant, size, shadow, strong, asChild, ref, ...props }: BadgeProps) => import("react/jsx-runtime").JSX.Element;
59
61
  export { Badge, badgeVariants };
60
62
  //# sourceMappingURL=badge.d.ts.map
@@ -1 +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;;;;;;;;GAQG;AACH,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,KAAK,GAAI,iEAQZ,UAAU,4CAYZ,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
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"}
@@ -57,6 +57,7 @@ const Badge = ({
57
57
  shadow,
58
58
  strong,
59
59
  asChild = false,
60
+ ref,
60
61
  ...props
61
62
  }) => {
62
63
  const Comp = asChild ? SlotPrimitive.Slot : "div";
@@ -67,6 +68,7 @@ const Badge = ({
67
68
  badgeVariants({ variant, size, shadow, strong }),
68
69
  className
69
70
  ),
71
+ ref,
70
72
  ...props
71
73
  }
72
74
  );
@@ -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=\"pink\">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-neutral-950 focus-visible:ring-offset-2 dark:focus-visible:ring-neutral-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 pink: \"border-1 border-pink-500 border-solid bg-pink-500 text-white\",\n pinkSecondary:\n \"border-1 border-pink-50 border-solid bg-pink-50 text-pink-600 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-500 bg-green-500 text-white dark:border-green-400 dark:bg-green-400\",\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-neutral-200 bg-white text-pink-500\",\n lightPink: \"border-pink-100 bg-pink-50 text-pink-600\",\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 free: \"border-free bg-free text-gray-950\",\n \"pink-200\": \"border-pink-100 bg-pink-200 text-pink-500\",\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 text-xs leading-6 2xl: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: `pink`, `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 */\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n asChild?: boolean;\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 ...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 {...props}\n />\n );\n};\n\nexport { Badge, badgeVariants };\n"],
5
- "mappings": "AAgII;AAxGJ,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,MAAM;AAAA,QACN,eACE;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,WAAW;AAAA,QACX,SACE;AAAA,QACF,MAAM;AAAA,QACN,YAAY;AAAA,MACd;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;AA0BA,MAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,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,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;",
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=\"pink\">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-neutral-950 focus-visible:ring-offset-2 dark:focus-visible:ring-neutral-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 pink: \"border-1 border-pink-500 border-solid bg-pink-500 text-white\",\n pinkSecondary:\n \"border-1 border-pink-50 border-solid bg-pink-50 text-pink-600 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-500 bg-green-500 text-white dark:border-green-400 dark:bg-green-400\",\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-neutral-200 bg-white text-pink-500\",\n lightPink: \"border-pink-100 bg-pink-50 text-pink-600\",\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 free: \"border-free bg-free text-gray-950\",\n \"pink-200\": \"border-pink-100 bg-pink-200 text-pink-500\",\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 text-xs leading-6 2xl: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: `pink`, `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
+ "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,MAAM;AAAA,QACN,eACE;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,WAAW;AAAA,QACX,SACE;AAAA,QACF,MAAM;AAAA,QACN,YAAY;AAAA,MACd;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
  }
@@ -1,24 +1,33 @@
1
- import * as React from "react";
1
+ import type * as React from "react";
2
+ import type { Ref } from "react";
2
3
  /**
3
4
  * Root navigation container with `aria-label="breadcrumb"`.
4
5
  */
5
- declare const Breadcrumb: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & {
6
+ declare const Breadcrumb: ({ ref, ...props }: React.ComponentPropsWithoutRef<"nav"> & {
6
7
  separator?: React.ReactNode;
7
- } & React.RefAttributes<HTMLElement>>;
8
+ ref?: Ref<HTMLElement>;
9
+ }) => import("react/jsx-runtime").JSX.Element;
8
10
  /** Ordered list container for breadcrumb items. */
9
- declare const BreadcrumbList: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>, "ref"> & React.RefAttributes<HTMLOListElement>>;
11
+ declare const BreadcrumbList: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<"ol"> & {
12
+ ref?: Ref<HTMLOListElement>;
13
+ }) => import("react/jsx-runtime").JSX.Element;
10
14
  /** List item wrapper for each breadcrumb segment. */
11
- declare const BreadcrumbItem: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & React.RefAttributes<HTMLLIElement>>;
15
+ declare const BreadcrumbItem: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<"li"> & {
16
+ ref?: Ref<HTMLLIElement>;
17
+ }) => import("react/jsx-runtime").JSX.Element;
12
18
  /**
13
19
  * Clickable link within a breadcrumb. Use `asChild` to wrap custom link components.
14
20
  *
15
21
  * @param asChild - When true, renders as child element (e.g., Next.js Link)
16
22
  */
17
- declare const BreadcrumbLink: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & {
23
+ declare const BreadcrumbLink: ({ asChild, className, ref, ...props }: React.ComponentPropsWithoutRef<"a"> & {
18
24
  asChild?: boolean;
19
- } & React.RefAttributes<HTMLAnchorElement>>;
25
+ ref?: Ref<HTMLAnchorElement>;
26
+ }) => import("react/jsx-runtime").JSX.Element;
20
27
  /** Current page indicator (non-clickable). Has `aria-current="page"`. */
21
- declare const BreadcrumbPage: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
28
+ declare const BreadcrumbPage: ({ className, ref, ...props }: React.ComponentPropsWithoutRef<"span"> & {
29
+ ref?: Ref<HTMLSpanElement>;
30
+ }) => import("react/jsx-runtime").JSX.Element;
22
31
  /** Visual separator between breadcrumb items. Defaults to chevron icon. */
23
32
  declare const BreadcrumbSeparator: {
24
33
  ({ children, className, ...props }: React.ComponentProps<"li">): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../src/components/breadcrumb.tsx"],"names":[],"mappings":"AAwCA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;GAEG;AACH,QAAA,MAAM,UAAU;gBAGA,KAAK,CAAC,SAAS;qCAE+C,CAAC;AAI/E,mDAAmD;AACnD,QAAA,MAAM,cAAc,2KAYlB,CAAC;AAIH,qDAAqD;AACrD,QAAA,MAAM,cAAc,kKASlB,CAAC;AAIH;;;;GAIG;AACH,QAAA,MAAM,cAAc;cAGN,OAAO;2CAenB,CAAC;AAIH,yEAAyE;AACzE,QAAA,MAAM,cAAc,sKAalB,CAAC;AAIH,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"}
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,4CAUA,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"}
@@ -1,11 +1,16 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { ChevronRight, MoreHorizontal } from "lucide-react";
3
3
  import { Slot as SlotPrimitive } from "radix-ui";
4
- import * as React from "react";
5
4
  import { cn } from "../lib/utils";
6
- const Breadcrumb = React.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", ref, ...props }));
7
- Breadcrumb.displayName = "Breadcrumb";
8
- const BreadcrumbList = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5
+ const Breadcrumb = ({
6
+ ref,
7
+ ...props
8
+ }) => /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", ref, ...props });
9
+ const BreadcrumbList = ({
10
+ className,
11
+ ref,
12
+ ...props
13
+ }) => /* @__PURE__ */ jsx(
9
14
  "ol",
10
15
  {
11
16
  className: cn(
@@ -15,18 +20,25 @@ const BreadcrumbList = React.forwardRef(({ className, ...props }, ref) => /* @__
15
20
  ref,
16
21
  ...props
17
22
  }
18
- ));
19
- BreadcrumbList.displayName = "BreadcrumbList";
20
- const BreadcrumbItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
23
+ );
24
+ const BreadcrumbItem = ({
25
+ className,
26
+ ref,
27
+ ...props
28
+ }) => /* @__PURE__ */ jsx(
21
29
  "li",
22
30
  {
23
31
  className: cn("inline-flex items-center", className),
24
32
  ref,
25
33
  ...props
26
34
  }
27
- ));
28
- BreadcrumbItem.displayName = "BreadcrumbItem";
29
- const BreadcrumbLink = React.forwardRef(({ asChild, className, ...props }, ref) => {
35
+ );
36
+ const BreadcrumbLink = ({
37
+ asChild,
38
+ className,
39
+ ref,
40
+ ...props
41
+ }) => {
30
42
  const Comp = asChild ? SlotPrimitive.Slot : "a";
31
43
  return /* @__PURE__ */ jsx(
32
44
  Comp,
@@ -39,9 +51,12 @@ const BreadcrumbLink = React.forwardRef(({ asChild, className, ...props }, ref)
39
51
  ...props
40
52
  }
41
53
  );
42
- });
43
- BreadcrumbLink.displayName = "BreadcrumbLink";
44
- const BreadcrumbPage = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
54
+ };
55
+ const BreadcrumbPage = ({
56
+ className,
57
+ ref,
58
+ ...props
59
+ }) => /* @__PURE__ */ jsx(
45
60
  "span",
46
61
  {
47
62
  "aria-current": "page",
@@ -52,8 +67,7 @@ const BreadcrumbPage = React.forwardRef(({ className, ...props }, ref) => /* @__
52
67
  ref,
53
68
  ...props
54
69
  }
55
- ));
56
- BreadcrumbPage.displayName = "BreadcrumbPage";
70
+ );
57
71
  const BreadcrumbSeparator = ({
58
72
  children,
59
73
  className,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/breadcrumb.tsx"],
4
- "sourcesContent": ["/**\n * @module Breadcrumb\n *\n * Navigation component showing the user's location within a site hierarchy.\n * Fully accessible with proper ARIA attributes and semantic markup.\n *\n * @see {@link https://ui.shadcn.com/docs/components/breadcrumb Shadcn Breadcrumb}\n *\n * @example\n * // Basic breadcrumb navigation\n * <Breadcrumb>\n * <BreadcrumbList>\n * <BreadcrumbItem>\n * <BreadcrumbLink href=\"/\">Home</BreadcrumbLink>\n * </BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem>\n * <BreadcrumbLink href=\"/music\">Music</BreadcrumbLink>\n * </BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem>\n * <BreadcrumbPage>Ambient</BreadcrumbPage>\n * </BreadcrumbItem>\n * </BreadcrumbList>\n * </Breadcrumb>\n *\n * @example\n * // With ellipsis for long paths\n * <Breadcrumb>\n * <BreadcrumbList>\n * <BreadcrumbItem><BreadcrumbLink href=\"/\">Home</BreadcrumbLink></BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem><BreadcrumbEllipsis /></BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem><BreadcrumbPage>Current</BreadcrumbPage></BreadcrumbItem>\n * </BreadcrumbList>\n * </Breadcrumb>\n */\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Root navigation container with `aria-label=\"breadcrumb\"`.\n */\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode;\n }\n>(({ ...props }, ref) => <nav aria-label=\"breadcrumb\" ref={ref} {...props} />);\n\nBreadcrumb.displayName = \"Breadcrumb\";\n\n/** Ordered list container for breadcrumb items. */\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<\"ol\">\n>(({ className, ...props }, ref) => (\n <ol\n className={cn(\n \"flex flex-wrap items-center gap-1 break-words text-neutral-500 text-sm sm:gap-2.5 dark:text-neutral-400\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\n\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\n/** List item wrapper for each breadcrumb segment. */\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n className={cn(\"inline-flex items-center\", className)}\n ref={ref}\n {...props}\n />\n));\n\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\n/**\n * Clickable link within a breadcrumb. Use `asChild` to wrap custom link components.\n *\n * @param asChild - When true, renders as child element (e.g., Next.js Link)\n */\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & {\n asChild?: boolean;\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"a\";\n\n return (\n <Comp\n className={cn(\n \"transition-colors hover:text-neutral-950 dark:hover:text-neutral-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n});\n\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\n/** Current page indicator (non-clickable). Has `aria-current=\"page\"`. */\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(({ className, ...props }, ref) => (\n <span\n aria-current=\"page\"\n className={cn(\n \"font-normal text-neutral-950 dark:text-neutral-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\n\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\n/** Visual separator between breadcrumb items. Defaults to chevron icon. */\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) => (\n <li\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:h-3.5 [&>svg]:w-3.5\", className)}\n role=\"presentation\"\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n);\n\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\n/** Ellipsis indicator for collapsed breadcrumb items (long paths). */\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden=\"true\"\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n role=\"presentation\"\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n);\n\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n};\n"],
5
- "mappings": "AAoDyB,cAuGvB,YAvGuB;AAdzB,SAAS,cAAc,sBAAsB;AAC7C,SAAS,QAAQ,qBAAqB;AACtC,YAAY,WAAW;AAEvB,SAAS,UAAU;AAKnB,MAAM,aAAa,MAAM,WAKvB,CAAC,EAAE,GAAG,MAAM,GAAG,QAAQ,oBAAC,SAAI,cAAW,cAAa,KAAW,GAAG,OAAO,CAAE;AAE7E,WAAW,cAAc;AAGzB,MAAM,iBAAiB,MAAM,WAG3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN,CACD;AAED,eAAe,cAAc;AAG7B,MAAM,iBAAiB,MAAM,WAG3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,GAAG,4BAA4B,SAAS;AAAA,IACnD;AAAA,IACC,GAAG;AAAA;AACN,CACD;AAED,eAAe,cAAc;AAO7B,MAAM,iBAAiB,MAAM,WAK3B,CAAC,EAAE,SAAS,WAAW,GAAG,MAAM,GAAG,QAAQ;AAC3C,QAAM,OAAO,UAAU,cAAc,OAAO;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;AAED,eAAe,cAAc;AAG7B,MAAM,iBAAiB,MAAM,WAG3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC;AAAA;AAAA,IACC,gBAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN,CACD;AAED,eAAe,cAAc;AAG7B,MAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAW,GAAG,+BAA+B,SAAS;AAAA,IACtD,MAAK;AAAA,IACJ,GAAG;AAAA,IAEH,sBAAY,oBAAC,gBAAa;AAAA;AAC7B;AAGF,oBAAoB,cAAc;AAGlC,MAAM,qBAAqB,CAAC;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAW,GAAG,4CAA4C,SAAS;AAAA,IACnE,MAAK;AAAA,IACJ,GAAG;AAAA,IAEJ;AAAA,0BAAC,kBAAe,WAAU,WAAU;AAAA,MACpC,oBAAC,UAAK,WAAU,WAAU,kBAAI;AAAA;AAAA;AAChC;AAGF,mBAAmB,cAAc;",
4
+ "sourcesContent": ["/**\n * @module Breadcrumb\n *\n * Navigation component showing the user's location within a site hierarchy.\n * Fully accessible with proper ARIA attributes and semantic markup.\n *\n * @see {@link https://ui.shadcn.com/docs/components/breadcrumb Shadcn Breadcrumb}\n *\n * @example\n * // Basic breadcrumb navigation\n * <Breadcrumb>\n * <BreadcrumbList>\n * <BreadcrumbItem>\n * <BreadcrumbLink href=\"/\">Home</BreadcrumbLink>\n * </BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem>\n * <BreadcrumbLink href=\"/music\">Music</BreadcrumbLink>\n * </BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem>\n * <BreadcrumbPage>Ambient</BreadcrumbPage>\n * </BreadcrumbItem>\n * </BreadcrumbList>\n * </Breadcrumb>\n *\n * @example\n * // With ellipsis for long paths\n * <Breadcrumb>\n * <BreadcrumbList>\n * <BreadcrumbItem><BreadcrumbLink href=\"/\">Home</BreadcrumbLink></BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem><BreadcrumbEllipsis /></BreadcrumbItem>\n * <BreadcrumbSeparator />\n * <BreadcrumbItem><BreadcrumbPage>Current</BreadcrumbPage></BreadcrumbItem>\n * </BreadcrumbList>\n * </Breadcrumb>\n */\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * Root navigation container with `aria-label=\"breadcrumb\"`.\n */\nconst Breadcrumb = ({\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode;\n ref?: Ref<HTMLElement>;\n}) => <nav aria-label=\"breadcrumb\" ref={ref} {...props} />;\n\n/** Ordered list container for breadcrumb items. */\nconst BreadcrumbList = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<\"ol\"> & {\n ref?: Ref<HTMLOListElement>;\n}) => (\n <ol\n className={cn(\n \"flex flex-wrap items-center gap-1 break-words text-neutral-500 text-sm sm:gap-2.5 dark:text-neutral-400\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/** List item wrapper for each breadcrumb segment. */\nconst BreadcrumbItem = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<\"li\"> & {\n ref?: Ref<HTMLLIElement>;\n}) => (\n <li\n className={cn(\"inline-flex items-center\", className)}\n ref={ref}\n {...props}\n />\n);\n\n/**\n * Clickable link within a breadcrumb. Use `asChild` to wrap custom link components.\n *\n * @param asChild - When true, renders as child element (e.g., Next.js Link)\n */\nconst BreadcrumbLink = ({\n asChild,\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<\"a\"> & {\n asChild?: boolean;\n ref?: Ref<HTMLAnchorElement>;\n}) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"a\";\n\n return (\n <Comp\n className={cn(\n \"transition-colors hover:text-neutral-950 dark:hover:text-neutral-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n};\n\n/** Current page indicator (non-clickable). Has `aria-current=\"page\"`. */\nconst BreadcrumbPage = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<\"span\"> & {\n ref?: Ref<HTMLSpanElement>;\n}) => (\n <span\n aria-current=\"page\"\n className={cn(\n \"font-normal text-neutral-950 dark:text-neutral-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/** Visual separator between breadcrumb items. Defaults to chevron icon. */\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) => (\n <li\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:h-3.5 [&>svg]:w-3.5\", className)}\n role=\"presentation\"\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n);\n\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\n/** Ellipsis indicator for collapsed breadcrumb items (long paths). */\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden=\"true\"\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n role=\"presentation\"\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n);\n\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n};\n"],
5
+ "mappings": "AAsDM,cAyGJ,YAzGI;AAhBN,SAAS,cAAc,sBAAsB;AAC7C,SAAS,QAAQ,qBAAqB;AAItC,SAAS,UAAU;AAKnB,MAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA,GAAG;AACL,MAGM,oBAAC,SAAI,cAAW,cAAa,KAAW,GAAG,OAAO;AAGxD,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN;AAIF,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,GAAG,4BAA4B,SAAS;AAAA,IACnD;AAAA,IACC,GAAG;AAAA;AACN;AAQF,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGM;AACJ,QAAM,OAAO,UAAU,cAAc,OAAO;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAGA,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC;AAAA;AAAA,IACC,gBAAa;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN;AAIF,MAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAW,GAAG,+BAA+B,SAAS;AAAA,IACtD,MAAK;AAAA,IACJ,GAAG;AAAA,IAEH,sBAAY,oBAAC,gBAAa;AAAA;AAC7B;AAGF,oBAAoB,cAAc;AAGlC,MAAM,qBAAqB,CAAC;AAAA,EAC1B;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAW,GAAG,4CAA4C,SAAS;AAAA,IACnE,MAAK;AAAA,IACJ,GAAG;AAAA,IAEJ;AAAA,0BAAC,kBAAe,WAAU,WAAU;AAAA,MACpC,oBAAC,UAAK,WAAU,WAAU,kBAAI;AAAA;AAAA;AAChC;AAGF,mBAAmB,cAAc;",
6
6
  "names": []
7
7
  }
@@ -43,14 +43,14 @@
43
43
  * </Button>
44
44
  */
45
45
  import { type VariantProps } from "class-variance-authority";
46
- import { type ButtonHTMLAttributes } from "react";
46
+ import type { ButtonHTMLAttributes, Ref } from "react";
47
47
  type ButtonSize = "default" | "xs" | "sm" | "lg" | "icon" | "xl";
48
48
  type ButtonFontSize = "xxs" | "xs" | "sm" | "base" | "lg" | "xl" | null;
49
49
  declare const buttonVariants: (props?: ({
50
- variant?: "bold" | "pink" | "transparent" | "light" | "subtle" | "pinkSecondary" | "contrast" | "success" | "error" | null | undefined;
51
- size?: "default" | "icon" | "xs" | "sm" | "lg" | "xl" | null | undefined;
52
- fontSize?: "base" | "xs" | "sm" | "lg" | "xl" | "xxs" | "null" | null | undefined;
53
- borderRadius?: "default" | "sm" | "rounded" | "full" | null | undefined;
50
+ variant?: "contrast" | "bold" | "pink" | "transparent" | "light" | "subtle" | "pinkSecondary" | "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
54
  border?: boolean | null | undefined;
55
55
  noFeedback?: boolean | null | undefined;
56
56
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -91,11 +91,12 @@ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, Om
91
91
  size?: ResponsiveButtonSize;
92
92
  fontSize?: ResponsiveButtonFontSize;
93
93
  icon?: boolean;
94
+ ref?: Ref<HTMLButtonElement>;
94
95
  }
95
- declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
96
+ declare const Button: ({ className, variant, size, borderRadius, border, noFeedback, asChild, type, children, fontSize, icon, ref, ...props }: ButtonProps) => import("react/jsx-runtime").JSX.Element;
96
97
  /** CVA variants for Loading spinner sizing */
97
98
  declare const loadingVariants: (props?: ({
98
- size?: "default" | "icon" | "xs" | "sm" | "lg" | "xl" | null | undefined;
99
+ size?: "xs" | "sm" | "lg" | "xl" | "default" | "icon" | null | undefined;
99
100
  visible?: boolean | null | undefined;
100
101
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
101
102
  /**
@@ -1 +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,EAAE,KAAK,oBAAoB,EAAc,MAAM,OAAO,CAAC;AAyB9D,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;;;;;;;8EA0FnB,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,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,QAAA,MAAM,MAAM,2GAoIX,CAAC;AAIF,8CAA8C;AAC9C,QAAA,MAAM,eAAe;;;8EAmBnB,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,OAAO,GAAI,mBAAmB,YAAY,CAAC,OAAO,eAAe,CAAC,4CAEvE,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC5D,YAAY,EACV,oBAAoB,EACpB,UAAU,EACV,wBAAwB,EACxB,cAAc,GACf,CAAC"}
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;;;;;;;8EA0FnB,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,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B;AAED,QAAA,MAAM,MAAM,GAAI,wHAcb,WAAW,4CAkHb,CAAC;AAEF,8CAA8C;AAC9C,QAAA,MAAM,eAAe;;;8EAmBnB,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,OAAO,GAAI,mBAAmB,YAAY,CAAC,OAAO,eAAe,CAAC,4CAEvE,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC5D,YAAY,EACV,oBAAoB,EACpB,UAAU,EACV,wBAAwB,EACxB,cAAc,GACf,CAAC"}
@@ -1,8 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { cva } from "class-variance-authority";
3
- import { Loader } from "lucide-react";
3
+ import { LoaderCircle } from "lucide-react";
4
4
  import { Slot as SlotPrimitive } from "radix-ui";
5
- import { forwardRef } from "react";
6
5
  import { cn } from "../lib/utils";
7
6
  const sizeClasses = {
8
7
  default: "h-8 px-4 py-2 leading-8",
@@ -163,109 +162,107 @@ function generateResponsiveFontSizeClasses(fontSize) {
163
162
  }
164
163
  return classes.join(" ");
165
164
  }
166
- const Button = forwardRef(
167
- ({
168
- className,
169
- variant,
170
- size,
171
- borderRadius,
172
- border,
173
- noFeedback,
174
- asChild = false,
175
- type,
176
- children,
177
- fontSize,
178
- icon = false,
179
- ...props
180
- }, ref) => {
181
- const Comp = asChild ? SlotPrimitive.Slot : "button";
182
- const buttonType = asChild ? void 0 : type ?? "button";
183
- const responsiveClasses = typeof size === "object" ? generateResponsiveSizeClasses(size) : void 0;
184
- let responsiveFontSizeClasses;
165
+ const Button = ({
166
+ className,
167
+ variant,
168
+ size,
169
+ borderRadius,
170
+ border,
171
+ noFeedback,
172
+ asChild = false,
173
+ type,
174
+ children,
175
+ fontSize,
176
+ icon = false,
177
+ ref,
178
+ ...props
179
+ }) => {
180
+ const Comp = asChild ? SlotPrimitive.Slot : "button";
181
+ const buttonType = asChild ? void 0 : type ?? "button";
182
+ const responsiveClasses = typeof size === "object" ? generateResponsiveSizeClasses(size) : void 0;
183
+ let responsiveFontSizeClasses;
184
+ if (typeof fontSize === "object") {
185
+ responsiveFontSizeClasses = generateResponsiveFontSizeClasses(fontSize);
186
+ } else if (typeof size === "object" && fontSize === void 0) {
187
+ const autoFontSize = {
188
+ default: defaultFontSizeForSize[size.default] || "base"
189
+ };
190
+ const breakpointMappings = [
191
+ { sizeKey: "xxs", fontKey: "xxs" },
192
+ { sizeKey: "xs", fontKey: "xs" },
193
+ { sizeKey: "sm", fontKey: "sm" },
194
+ { sizeKey: "md", fontKey: "md" },
195
+ { sizeKey: "lg", fontKey: "lg" },
196
+ { sizeKey: "xl", fontKey: "xl" },
197
+ { sizeKey: "2xl", fontKey: "2xl" }
198
+ ];
199
+ for (const { sizeKey, fontKey } of breakpointMappings) {
200
+ const sizeValue = size[sizeKey];
201
+ if (sizeValue && sizeValue in defaultFontSizeForSize) {
202
+ autoFontSize[fontKey] = defaultFontSizeForSize[sizeValue];
203
+ }
204
+ }
205
+ responsiveFontSizeClasses = generateResponsiveFontSizeClasses(autoFontSize);
206
+ }
207
+ const cvaSize = typeof size === "object" ? size.default : size;
208
+ let cvaFontSize = null;
209
+ if (fontSize) {
185
210
  if (typeof fontSize === "object") {
186
- responsiveFontSizeClasses = generateResponsiveFontSizeClasses(fontSize);
187
- } else if (typeof size === "object" && fontSize === void 0) {
188
- const autoFontSize = {
189
- default: defaultFontSizeForSize[size.default] || "base"
190
- };
211
+ cvaFontSize = fontSize.default || null;
212
+ } else {
213
+ cvaFontSize = fontSize;
214
+ }
215
+ }
216
+ let iconClasses = "";
217
+ if (icon) {
218
+ iconClasses = "aspect-square p-0";
219
+ if (typeof size === "object") {
220
+ const iconResponsiveClasses = [];
191
221
  const breakpointMappings = [
192
- { sizeKey: "xxs", fontKey: "xxs" },
193
- { sizeKey: "xs", fontKey: "xs" },
194
- { sizeKey: "sm", fontKey: "sm" },
195
- { sizeKey: "md", fontKey: "md" },
196
- { sizeKey: "lg", fontKey: "lg" },
197
- { sizeKey: "xl", fontKey: "xl" },
198
- { sizeKey: "2xl", fontKey: "2xl" }
222
+ { sizeKey: "xxs", prefix: "xxs" },
223
+ { sizeKey: "xs", prefix: "xs" },
224
+ { sizeKey: "sm", prefix: "sm" },
225
+ { sizeKey: "md", prefix: "md" },
226
+ { sizeKey: "lg", prefix: "lg" },
227
+ { sizeKey: "xl", prefix: "xl" },
228
+ { sizeKey: "2xl", prefix: "2xl" }
199
229
  ];
200
- for (const { sizeKey, fontKey } of breakpointMappings) {
230
+ for (const { sizeKey, prefix } of breakpointMappings) {
201
231
  const sizeValue = size[sizeKey];
202
- if (sizeValue && sizeValue in defaultFontSizeForSize) {
203
- autoFontSize[fontKey] = defaultFontSizeForSize[sizeValue];
232
+ if (sizeValue) {
233
+ iconResponsiveClasses.push(`${prefix}:p-0`);
204
234
  }
205
235
  }
206
- responsiveFontSizeClasses = generateResponsiveFontSizeClasses(autoFontSize);
207
- }
208
- const cvaSize = typeof size === "object" ? size.default : size;
209
- let cvaFontSize = null;
210
- if (fontSize) {
211
- if (typeof fontSize === "object") {
212
- cvaFontSize = fontSize.default || null;
213
- } else {
214
- cvaFontSize = fontSize;
236
+ if (iconResponsiveClasses.length > 0) {
237
+ iconClasses += ` ${iconResponsiveClasses.join(" ")}`;
215
238
  }
216
239
  }
217
- let iconClasses = "";
218
- if (icon) {
219
- iconClasses = "aspect-square p-0";
220
- if (typeof size === "object") {
221
- const iconResponsiveClasses = [];
222
- const breakpointMappings = [
223
- { sizeKey: "xxs", prefix: "xxs" },
224
- { sizeKey: "xs", prefix: "xs" },
225
- { sizeKey: "sm", prefix: "sm" },
226
- { sizeKey: "md", prefix: "md" },
227
- { sizeKey: "lg", prefix: "lg" },
228
- { sizeKey: "xl", prefix: "xl" },
229
- { sizeKey: "2xl", prefix: "2xl" }
230
- ];
231
- for (const { sizeKey, prefix } of breakpointMappings) {
232
- const sizeValue = size[sizeKey];
233
- if (sizeValue) {
234
- iconResponsiveClasses.push(`${prefix}:p-0`);
235
- }
236
- }
237
- if (iconResponsiveClasses.length > 0) {
238
- iconClasses += ` ${iconResponsiveClasses.join(" ")}`;
239
- }
240
- }
241
- }
242
- return /* @__PURE__ */ jsx(
243
- Comp,
244
- {
245
- className: cn(
246
- buttonVariants({
247
- variant,
248
- size: cvaSize,
249
- fontSize: cvaFontSize,
250
- borderRadius,
251
- border,
252
- noFeedback
253
- }),
254
- responsiveClasses,
255
- responsiveFontSizeClasses,
256
- iconClasses,
257
- className
258
- ),
259
- ref,
260
- type: buttonType,
261
- ...props,
262
- children
263
- }
264
- );
265
240
  }
266
- );
267
- Button.displayName = "Button";
268
- const loadingVariants = cva("hidden w-4 text-inherit", {
241
+ return /* @__PURE__ */ jsx(
242
+ Comp,
243
+ {
244
+ className: cn(
245
+ buttonVariants({
246
+ variant,
247
+ size: cvaSize,
248
+ fontSize: cvaFontSize,
249
+ borderRadius,
250
+ border,
251
+ noFeedback
252
+ }),
253
+ responsiveClasses,
254
+ responsiveFontSizeClasses,
255
+ iconClasses,
256
+ className
257
+ ),
258
+ ref,
259
+ type: buttonType,
260
+ ...props,
261
+ children
262
+ }
263
+ );
264
+ };
265
+ const loadingVariants = cva("hidden w-4 animate-[spin_0.75s_linear_infinite] text-inherit", {
269
266
  variants: {
270
267
  size: {
271
268
  default: "w-4",
@@ -285,7 +282,7 @@ const loadingVariants = cva("hidden w-4 text-inherit", {
285
282
  visible: false
286
283
  }
287
284
  });
288
- const Loading = ({ size, visible }) => /* @__PURE__ */ jsx(Loader, { className: cn(loadingVariants({ size, visible })) });
285
+ const Loading = ({ size, visible }) => /* @__PURE__ */ jsx(LoaderCircle, { className: cn(loadingVariants({ size, visible })) });
289
286
  export {
290
287
  Button,
291
288
  Loading,