@deckai/deck-ui 0.0.22 → 0.0.23

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 (249) hide show
  1. package/README.md +0 -1
  2. package/dist/components/AboutCard.cjs +3 -3
  3. package/dist/components/AboutCard.cjs.map +1 -1
  4. package/dist/components/AboutCard.d.cts +1 -1
  5. package/dist/components/AboutCard.d.ts +1 -1
  6. package/dist/components/AboutCard.js +3 -3
  7. package/dist/components/AboutCard.js.map +1 -1
  8. package/dist/components/Accordion.cjs +2 -2
  9. package/dist/components/Accordion.cjs.map +1 -1
  10. package/dist/components/Accordion.js +2 -2
  11. package/dist/components/Accordion.js.map +1 -1
  12. package/dist/components/AddWorkCard.cjs +4 -4
  13. package/dist/components/AddWorkCard.cjs.map +1 -1
  14. package/dist/components/AddWorkCard.d.cts +1 -1
  15. package/dist/components/AddWorkCard.d.ts +1 -1
  16. package/dist/components/AddWorkCard.js +4 -4
  17. package/dist/components/AddWorkCard.js.map +1 -1
  18. package/dist/components/AutocompleteInput.cjs +4 -4
  19. package/dist/components/AutocompleteInput.cjs.map +1 -1
  20. package/dist/components/AutocompleteInput.d.cts +6 -6
  21. package/dist/components/AutocompleteInput.d.ts +6 -6
  22. package/dist/components/AutocompleteInput.js +4 -4
  23. package/dist/components/AutocompleteInput.js.map +1 -1
  24. package/dist/components/Avatar.cjs +1 -1
  25. package/dist/components/Avatar.cjs.map +1 -1
  26. package/dist/components/Avatar.d.cts +2 -2
  27. package/dist/components/Avatar.d.ts +2 -2
  28. package/dist/components/Avatar.js +1 -1
  29. package/dist/components/Avatar.js.map +1 -1
  30. package/dist/components/Badge.cjs +4 -4
  31. package/dist/components/Badge.cjs.map +1 -1
  32. package/dist/components/Badge.d.cts +2 -2
  33. package/dist/components/Badge.d.ts +2 -2
  34. package/dist/components/Badge.js +4 -4
  35. package/dist/components/Badge.js.map +1 -1
  36. package/dist/components/Breadcrumbs.cjs +2 -2
  37. package/dist/components/Breadcrumbs.cjs.map +1 -1
  38. package/dist/components/Breadcrumbs.js +2 -2
  39. package/dist/components/Breadcrumbs.js.map +1 -1
  40. package/dist/components/Button.cjs +5 -5
  41. package/dist/components/Button.cjs.map +1 -1
  42. package/dist/components/Button.d.cts +5 -5
  43. package/dist/components/Button.d.ts +5 -5
  44. package/dist/components/Button.js +5 -5
  45. package/dist/components/Button.js.map +1 -1
  46. package/dist/components/Carousel.cjs +1 -1
  47. package/dist/components/Carousel.cjs.map +1 -1
  48. package/dist/components/Carousel.d.cts +1 -1
  49. package/dist/components/Carousel.d.ts +1 -1
  50. package/dist/components/Carousel.js +1 -1
  51. package/dist/components/Carousel.js.map +1 -1
  52. package/dist/components/Collapsible.cjs +2 -2
  53. package/dist/components/Collapsible.cjs.map +1 -1
  54. package/dist/components/Collapsible.d.cts +4 -4
  55. package/dist/components/Collapsible.d.ts +4 -4
  56. package/dist/components/Collapsible.js +2 -2
  57. package/dist/components/Collapsible.js.map +1 -1
  58. package/dist/components/Combobox.cjs +4 -4
  59. package/dist/components/Combobox.cjs.map +1 -1
  60. package/dist/components/Combobox.d.cts +5 -2
  61. package/dist/components/Combobox.d.ts +5 -2
  62. package/dist/components/Combobox.js +4 -4
  63. package/dist/components/Combobox.js.map +1 -1
  64. package/dist/components/ContactItem.cjs +3 -3
  65. package/dist/components/ContactItem.cjs.map +1 -1
  66. package/dist/components/ContactItem.d.cts +1 -1
  67. package/dist/components/ContactItem.d.ts +1 -1
  68. package/dist/components/ContactItem.js +3 -3
  69. package/dist/components/ContactItem.js.map +1 -1
  70. package/dist/components/Dropdown.cjs +3 -3
  71. package/dist/components/Dropdown.cjs.map +1 -1
  72. package/dist/components/Dropdown.js +3 -3
  73. package/dist/components/Dropdown.js.map +1 -1
  74. package/dist/components/EditButton.cjs +5 -5
  75. package/dist/components/EditButton.cjs.map +1 -1
  76. package/dist/components/EditButton.d.cts +4 -4
  77. package/dist/components/EditButton.d.ts +4 -4
  78. package/dist/components/EditButton.js +5 -5
  79. package/dist/components/EditButton.js.map +1 -1
  80. package/dist/components/Fallback.cjs +1 -1
  81. package/dist/components/Fallback.cjs.map +1 -1
  82. package/dist/components/Fallback.js +1 -1
  83. package/dist/components/Fallback.js.map +1 -1
  84. package/dist/components/Icon.cjs +1 -1
  85. package/dist/components/Icon.cjs.map +1 -1
  86. package/dist/components/Icon.js +1 -1
  87. package/dist/components/Icon.js.map +1 -1
  88. package/dist/components/IconRenderer.cjs +1 -1
  89. package/dist/components/IconRenderer.cjs.map +1 -1
  90. package/dist/components/IconRenderer.d.cts +4 -4
  91. package/dist/components/IconRenderer.d.ts +4 -4
  92. package/dist/components/IconRenderer.js +1 -1
  93. package/dist/components/IconRenderer.js.map +1 -1
  94. package/dist/components/Input.cjs +3 -3
  95. package/dist/components/Input.cjs.map +1 -1
  96. package/dist/components/Input.d.cts +11 -11
  97. package/dist/components/Input.d.ts +11 -11
  98. package/dist/components/Input.js +3 -3
  99. package/dist/components/Input.js.map +1 -1
  100. package/dist/components/Link.cjs +4 -4
  101. package/dist/components/Link.cjs.map +1 -1
  102. package/dist/components/Link.d.cts +1 -1
  103. package/dist/components/Link.d.ts +1 -1
  104. package/dist/components/Link.js +4 -4
  105. package/dist/components/Link.js.map +1 -1
  106. package/dist/components/Logo.cjs +1 -1
  107. package/dist/components/Logo.cjs.map +1 -1
  108. package/dist/components/Logo.d.cts +1 -1
  109. package/dist/components/Logo.d.ts +1 -1
  110. package/dist/components/Logo.js +1 -1
  111. package/dist/components/Logo.js.map +1 -1
  112. package/dist/components/Modal.cjs +1 -1
  113. package/dist/components/Modal.cjs.map +1 -1
  114. package/dist/components/Modal.d.cts +4 -4
  115. package/dist/components/Modal.d.ts +4 -4
  116. package/dist/components/Modal.js +1 -1
  117. package/dist/components/Modal.js.map +1 -1
  118. package/dist/components/MultiSelectCombobox.cjs +2 -2
  119. package/dist/components/MultiSelectCombobox.cjs.map +1 -1
  120. package/dist/components/MultiSelectCombobox.d.cts +1 -1
  121. package/dist/components/MultiSelectCombobox.d.ts +1 -1
  122. package/dist/components/MultiSelectCombobox.js +2 -2
  123. package/dist/components/MultiSelectCombobox.js.map +1 -1
  124. package/dist/components/Navbar.cjs +7 -7
  125. package/dist/components/Navbar.cjs.map +1 -1
  126. package/dist/components/Navbar.d.cts +1 -1
  127. package/dist/components/Navbar.d.ts +1 -1
  128. package/dist/components/Navbar.js +7 -7
  129. package/dist/components/Navbar.js.map +1 -1
  130. package/dist/components/NavbarItem.cjs +4 -4
  131. package/dist/components/NavbarItem.cjs.map +1 -1
  132. package/dist/components/NavbarItem.d.cts +1 -1
  133. package/dist/components/NavbarItem.d.ts +1 -1
  134. package/dist/components/NavbarItem.js +4 -4
  135. package/dist/components/NavbarItem.js.map +1 -1
  136. package/dist/components/Option.cjs +2 -2
  137. package/dist/components/Option.cjs.map +1 -1
  138. package/dist/components/Option.js +2 -2
  139. package/dist/components/Option.js.map +1 -1
  140. package/dist/components/Pressable.cjs +1 -1
  141. package/dist/components/Pressable.cjs.map +1 -1
  142. package/dist/components/Pressable.js +1 -1
  143. package/dist/components/Pressable.js.map +1 -1
  144. package/dist/components/ProfileCard.cjs +2 -2
  145. package/dist/components/ProfileCard.cjs.map +1 -1
  146. package/dist/components/ProfileCard.d.cts +1 -1
  147. package/dist/components/ProfileCard.d.ts +1 -1
  148. package/dist/components/ProfileCard.js +2 -2
  149. package/dist/components/ProfileCard.js.map +1 -1
  150. package/dist/components/ProgressBar.cjs +3 -3
  151. package/dist/components/ProgressBar.cjs.map +1 -1
  152. package/dist/components/ProgressBar.js +3 -3
  153. package/dist/components/ProgressBar.js.map +1 -1
  154. package/dist/components/RadioGroup.cjs +3 -3
  155. package/dist/components/RadioGroup.cjs.map +1 -1
  156. package/dist/components/RadioGroup.js +3 -3
  157. package/dist/components/RadioGroup.js.map +1 -1
  158. package/dist/components/SegmentedTabs.cjs +4 -4
  159. package/dist/components/SegmentedTabs.cjs.map +1 -1
  160. package/dist/components/SegmentedTabs.js +4 -4
  161. package/dist/components/SegmentedTabs.js.map +1 -1
  162. package/dist/components/Sidebar.cjs +1 -1
  163. package/dist/components/Sidebar.cjs.map +1 -1
  164. package/dist/components/Sidebar.d.cts +1 -1
  165. package/dist/components/Sidebar.d.ts +1 -1
  166. package/dist/components/Sidebar.js +1 -1
  167. package/dist/components/Sidebar.js.map +1 -1
  168. package/dist/components/SlideButton.cjs +1 -1
  169. package/dist/components/SlideButton.cjs.map +1 -1
  170. package/dist/components/SlideButton.js +1 -1
  171. package/dist/components/SlideButton.js.map +1 -1
  172. package/dist/components/Slider.cjs.map +1 -1
  173. package/dist/components/Slider.js.map +1 -1
  174. package/dist/components/SocialCard.cjs +4 -4
  175. package/dist/components/SocialCard.cjs.map +1 -1
  176. package/dist/components/SocialCard.d.cts +1 -1
  177. package/dist/components/SocialCard.d.ts +1 -1
  178. package/dist/components/SocialCard.js +4 -4
  179. package/dist/components/SocialCard.js.map +1 -1
  180. package/dist/components/Spinner.cjs +1 -1
  181. package/dist/components/Spinner.cjs.map +1 -1
  182. package/dist/components/Spinner.d.cts +2 -2
  183. package/dist/components/Spinner.d.ts +2 -2
  184. package/dist/components/Spinner.js +1 -1
  185. package/dist/components/Spinner.js.map +1 -1
  186. package/dist/components/Switch.cjs.map +1 -1
  187. package/dist/components/Switch.d.cts +2 -2
  188. package/dist/components/Switch.d.ts +2 -2
  189. package/dist/components/Switch.js.map +1 -1
  190. package/dist/components/Tabs.cjs +3 -3
  191. package/dist/components/Tabs.cjs.map +1 -1
  192. package/dist/components/Tabs.js +3 -3
  193. package/dist/components/Tabs.js.map +1 -1
  194. package/dist/components/Tag.cjs +3 -3
  195. package/dist/components/Tag.cjs.map +1 -1
  196. package/dist/components/Tag.d.cts +1 -1
  197. package/dist/components/Tag.d.ts +1 -1
  198. package/dist/components/Tag.js +3 -3
  199. package/dist/components/Tag.js.map +1 -1
  200. package/dist/components/Text.cjs +1 -1
  201. package/dist/components/Text.cjs.map +1 -1
  202. package/dist/components/Text.d.cts +1 -1
  203. package/dist/components/Text.d.ts +1 -1
  204. package/dist/components/Text.js +1 -1
  205. package/dist/components/Text.js.map +1 -1
  206. package/dist/components/TextArea.cjs +4 -4
  207. package/dist/components/TextArea.cjs.map +1 -1
  208. package/dist/components/TextArea.d.cts +1 -1
  209. package/dist/components/TextArea.d.ts +1 -1
  210. package/dist/components/TextArea.js +4 -4
  211. package/dist/components/TextArea.js.map +1 -1
  212. package/dist/components/Toast.cjs +3 -3
  213. package/dist/components/Toast.cjs.map +1 -1
  214. package/dist/components/Toast.d.cts +7 -7
  215. package/dist/components/Toast.d.ts +7 -7
  216. package/dist/components/Toast.js +3 -3
  217. package/dist/components/Toast.js.map +1 -1
  218. package/dist/components/ToastProvider.cjs +1 -1
  219. package/dist/components/ToastProvider.cjs.map +1 -1
  220. package/dist/components/ToastProvider.d.cts +1 -1
  221. package/dist/components/ToastProvider.d.ts +1 -1
  222. package/dist/components/ToastProvider.js +1 -1
  223. package/dist/components/ToastProvider.js.map +1 -1
  224. package/dist/components/Tooltip.cjs +3 -3
  225. package/dist/components/Tooltip.cjs.map +1 -1
  226. package/dist/components/Tooltip.d.cts +1 -1
  227. package/dist/components/Tooltip.d.ts +1 -1
  228. package/dist/components/Tooltip.js +3 -3
  229. package/dist/components/Tooltip.js.map +1 -1
  230. package/dist/components/VideoPlayer.cjs +2 -2
  231. package/dist/components/VideoPlayer.cjs.map +1 -1
  232. package/dist/components/VideoPlayer.d.cts +4 -4
  233. package/dist/components/VideoPlayer.d.ts +4 -4
  234. package/dist/components/VideoPlayer.js +2 -2
  235. package/dist/components/VideoPlayer.js.map +1 -1
  236. package/dist/components/WorkCard.cjs +3 -3
  237. package/dist/components/WorkCard.cjs.map +1 -1
  238. package/dist/components/WorkCard.d.cts +1 -1
  239. package/dist/components/WorkCard.d.ts +1 -1
  240. package/dist/components/WorkCard.js +3 -3
  241. package/dist/components/WorkCard.js.map +1 -1
  242. package/dist/index.cjs +8 -8
  243. package/dist/index.cjs.map +1 -1
  244. package/dist/index.d.cts +39 -39
  245. package/dist/index.d.ts +39 -39
  246. package/dist/index.js +8 -8
  247. package/dist/index.js.map +1 -1
  248. package/dist/styles/styles.css +1 -1
  249. package/package.json +2 -2
@@ -1,8 +1,8 @@
1
- 'use strict';var D=require('@radix-ui/react-popover'),T=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),$=require('@radix-ui/react-accordion'),icons=require('@deckai/icons'),H=require('@radix-ui/react-tooltip');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var D__namespace=/*#__PURE__*/_interopNamespace(D);var T__namespace=/*#__PURE__*/_interopNamespace(T);var $__namespace=/*#__PURE__*/_interopNamespace($);var H__namespace=/*#__PURE__*/_interopNamespace(H);function f(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var J={12:"h-[12px] w-[12px]",16:"h-[16px] w-[16px]",18:"h-[18px] w-[18px]",20:"h-[20px] w-[20px]",24:"h-[24px] w-[24px]",32:"h-[32px] w-[32px]",36:"h-[36px] w-[36px]",40:"h-[40px] w-[40px]",42:"h-[42px] w-[42px]",48:"h-[48px] w-[48px]",64:"h-[64px] w-[64px]",72:"h-[72px] w-[72px]"},ue={sm:{12:"sm:h-[12px] sm:w-[12px]",16:"sm:h-[16px] sm:w-[16px]",18:"sm:h-[18px] sm:w-[18px]",20:"sm:h-[20px] sm:w-[20px]",24:"sm:h-[24px] sm:w-[24px]",32:"sm:h-[32px] sm:w-[32px]",36:"sm:h-[36px] sm:w-[36px]",40:"sm:h-[40px] sm:w-[40px]",42:"sm:h-[42px] sm:w-[42px]",48:"sm:h-[48px] sm:w-[48px]",64:"sm:h-[64px] sm:w-[64px]",72:"sm:h-[72px] sm:w-[72px]"},md:{12:"md:h-[12px] md:w-[12px]",16:"md:h-[16px] md:w-[16px]",18:"md:h-[18px] md:w-[18px]",20:"md:h-[20px] md:w-[20px]",24:"md:h-[24px] md:w-[24px]",32:"md:h-[32px] md:w-[32px]",36:"md:h-[36px] md:w-[36px]",40:"md:h-[40px] md:w-[40px]",42:"md:h-[42px] md:w-[42px]",48:"md:h-[48px] md:w-[48px]",64:"md:h-[64px] md:w-[64px]",72:"md:h-[72px] md:w-[72px]"},lg:{12:"lg:h-[12px] lg:w-[12px]",16:"lg:h-[16px] lg:w-[16px]",18:"lg:h-[18px] lg:w-[18px]",20:"lg:h-[20px] lg:w-[20px]",24:"lg:h-[24px] lg:w-[24px]",32:"lg:h-[32px] lg:w-[32px]",36:"lg:h-[36px] lg:w-[36px]",40:"lg:h-[40px] lg:w-[40px]",42:"lg:h-[42px] lg:w-[42px]",48:"lg:h-[48px] lg:w-[48px]",64:"lg:h-[64px] lg:w-[64px]",72:"lg:h-[72px] lg:w-[72px]"},xl:{12:"xl:h-[12px] xl:w-[12px]",16:"xl:h-[16px] xl:w-[16px]",18:"xl:h-[18px] xl:w-[18px]",20:"xl:h-[20px] xl:w-[20px]",24:"xl:h-[24px] xl:w-[24px]",32:"xl:h-[32px] xl:w-[32px]",36:"xl:h-[36px] xl:w-[36px]",40:"xl:h-[40px] xl:w-[40px]",42:"xl:h-[42px] xl:w-[42px]",48:"xl:h-[48px] xl:w-[48px]",64:"xl:h-[64px] xl:w-[64px]",72:"xl:h-[72px] xl:w-[72px]"},"2xl":{12:"2xl:h-[12px] 2xl:w-[12px]",16:"2xl:h-[16px] 2xl:w-[16px]",18:"2xl:h-[18px] 2xl:w-[18px]",20:"2xl:h-[20px] 2xl:w-[20px]",24:"2xl:h-[24px] 2xl:w-[24px]",32:"2xl:h-[32px] 2xl:w-[32px]",36:"2xl:h-[36px] 2xl:w-[36px]",40:"2xl:h-[40px] 2xl:w-[40px]",42:"2xl:h-[42px] 2xl:w-[42px]",48:"2xl:h-[48px] 2xl:w-[48px]",64:"2xl:h-[64px] 2xl:w-[64px]",72:"2xl:h-[72px] 2xl:w-[72px]"}},_=t=>String(t),xe=(t,r=24)=>{let n=[],s={};if(t===undefined){let i=_(r);i?n.push(J[i]):(s.height=`${r}px`,s.width=`${r}px`);}if(typeof t=="number"){let i=_(t);i?n.push(J[i]):(s.height=`${t}px`,s.width=`${t}px`);}if(Array.isArray(t)){let i=_(r),m=[i&&J[i]||`h-[${r}px] w-[${r}px]`];t.forEach(p=>{if(typeof p=="string"){let[u,l]=p.split(":"),g=parseInt(l,10),x=_(g);n.push(x&&ue[u]?.[x]||`${u}:h-[${g}px] ${u}:w-[${g}px]`);}}),n.push(...m);}if(typeof t=="string"){let[i,m]=t.split(":"),p=parseInt(m,10),u=_(p);n.push(u&&ue[i]?.[u]||`${i}:h-[${p}px] ${i}:w-[${p}px]`);}return {responsiveSizeClasses:n.join(" "),responsiveSizeStyles:s}};var ge={primary:"var(--color-primary)",secondary:"var(--color-secondary)",white:"var(--color-white)",primaryBlue:"var(--color-primary-100)",disabled:"var(--color-disabled)",danger:"var(--color-danger)"},K=T__namespace.default.forwardRef(({name:t,size:r=24,color:n="primary",title:s,className:i,style:m={},...p},u)=>{let l=icons.IconMap[t],{responsiveSizeClasses:g,responsiveSizeStyles:x}=xe(r,24);return T__namespace.default.createElement("div",{className:f("flex justify-center items-center",g,i),style:{"--icon-stroke":ge[n],...x,...m}},T__namespace.default.createElement(l,{ref:u,"aria-hidden":!s,"aria-label":s,stroke:t.includes("filled")?undefined:ge[n],...p}))});K.displayName="Icon";var Ee={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},Pe=t=>{let[r,n]=t.split("-");return r==="heading"?Ee[n]||"p":r==="label"?"label":"p"},Me={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},Ce=t=>t?(Array.isArray(t)?t:[t]).map(n=>{if(n.includes(":")){let[s,i]=n.split(":");return `${s}:text-${i}`}return `text-${n}`}).join(" "):"text-body-default",M=T__namespace.default.forwardRef(({variant:t="body-default",color:r="primary",as:n,className:s,children:i,weight:m,...p},u)=>{let l=Ce(t),g=r==="inherit"?"text-inherit":`text-${r}`,x=T__namespace.default.useMemo(()=>{let E=typeof t=="string"?t.split(":").pop():Array.isArray(t)?t[0].split(":").pop():"body-default";return Pe(E)},[t]);return T__namespace.default.createElement(n||x,{ref:u,className:`
1
+ 'use strict';var V=require('@radix-ui/react-popover'),E=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),$=require('@radix-ui/react-accordion'),icons=require('@deckai/icons'),A=require('@radix-ui/react-tooltip');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var V__namespace=/*#__PURE__*/_interopNamespace(V);var E__namespace=/*#__PURE__*/_interopNamespace(E);var $__namespace=/*#__PURE__*/_interopNamespace($);var A__namespace=/*#__PURE__*/_interopNamespace(A);function f(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var oe={12:"h-[12px] w-[12px]",16:"h-[16px] w-[16px]",18:"h-[18px] w-[18px]",20:"h-[20px] w-[20px]",24:"h-[24px] w-[24px]",32:"h-[32px] w-[32px]",36:"h-[36px] w-[36px]",40:"h-[40px] w-[40px]",42:"h-[42px] w-[42px]",48:"h-[48px] w-[48px]",64:"h-[64px] w-[64px]",72:"h-[72px] w-[72px]"},he={sm:{12:"sm:h-[12px] sm:w-[12px]",16:"sm:h-[16px] sm:w-[16px]",18:"sm:h-[18px] sm:w-[18px]",20:"sm:h-[20px] sm:w-[20px]",24:"sm:h-[24px] sm:w-[24px]",32:"sm:h-[32px] sm:w-[32px]",36:"sm:h-[36px] sm:w-[36px]",40:"sm:h-[40px] sm:w-[40px]",42:"sm:h-[42px] sm:w-[42px]",48:"sm:h-[48px] sm:w-[48px]",64:"sm:h-[64px] sm:w-[64px]",72:"sm:h-[72px] sm:w-[72px]"},md:{12:"md:h-[12px] md:w-[12px]",16:"md:h-[16px] md:w-[16px]",18:"md:h-[18px] md:w-[18px]",20:"md:h-[20px] md:w-[20px]",24:"md:h-[24px] md:w-[24px]",32:"md:h-[32px] md:w-[32px]",36:"md:h-[36px] md:w-[36px]",40:"md:h-[40px] md:w-[40px]",42:"md:h-[42px] md:w-[42px]",48:"md:h-[48px] md:w-[48px]",64:"md:h-[64px] md:w-[64px]",72:"md:h-[72px] md:w-[72px]"},lg:{12:"lg:h-[12px] lg:w-[12px]",16:"lg:h-[16px] lg:w-[16px]",18:"lg:h-[18px] lg:w-[18px]",20:"lg:h-[20px] lg:w-[20px]",24:"lg:h-[24px] lg:w-[24px]",32:"lg:h-[32px] lg:w-[32px]",36:"lg:h-[36px] lg:w-[36px]",40:"lg:h-[40px] lg:w-[40px]",42:"lg:h-[42px] lg:w-[42px]",48:"lg:h-[48px] lg:w-[48px]",64:"lg:h-[64px] lg:w-[64px]",72:"lg:h-[72px] lg:w-[72px]"},xl:{12:"xl:h-[12px] xl:w-[12px]",16:"xl:h-[16px] xl:w-[16px]",18:"xl:h-[18px] xl:w-[18px]",20:"xl:h-[20px] xl:w-[20px]",24:"xl:h-[24px] xl:w-[24px]",32:"xl:h-[32px] xl:w-[32px]",36:"xl:h-[36px] xl:w-[36px]",40:"xl:h-[40px] xl:w-[40px]",42:"xl:h-[42px] xl:w-[42px]",48:"xl:h-[48px] xl:w-[48px]",64:"xl:h-[64px] xl:w-[64px]",72:"xl:h-[72px] xl:w-[72px]"},"2xl":{12:"2xl:h-[12px] 2xl:w-[12px]",16:"2xl:h-[16px] 2xl:w-[16px]",18:"2xl:h-[18px] 2xl:w-[18px]",20:"2xl:h-[20px] 2xl:w-[20px]",24:"2xl:h-[24px] 2xl:w-[24px]",32:"2xl:h-[32px] 2xl:w-[32px]",36:"2xl:h-[36px] 2xl:w-[36px]",40:"2xl:h-[40px] 2xl:w-[40px]",42:"2xl:h-[42px] 2xl:w-[42px]",48:"2xl:h-[48px] 2xl:w-[48px]",64:"2xl:h-[64px] 2xl:w-[64px]",72:"2xl:h-[72px] 2xl:w-[72px]"}},U=t=>String(t),ye=(t,r=24)=>{let n=[],s={};if(t===void 0){let a=U(r);a?n.push(oe[a]):(s.height=`${r}px`,s.width=`${r}px`);}if(typeof t=="number"){let a=U(t);a?n.push(oe[a]):(s.height=`${t}px`,s.width=`${t}px`);}if(Array.isArray(t)){let a=U(r),m=[a&&oe[a]||`h-[${r}px] w-[${r}px]`];t.forEach(p=>{if(typeof p=="string"){let[u,g]=p.split(":"),l=parseInt(g,10),c=U(l);n.push(c&&he[u]?.[c]||`${u}:h-[${l}px] ${u}:w-[${l}px]`);}}),n.push(...m);}if(typeof t=="string"){let[a,m]=t.split(":"),p=parseInt(m,10),u=U(p);n.push(u&&he[a]?.[u]||`${a}:h-[${p}px] ${a}:w-[${p}px]`);}return {responsiveSizeClasses:n.join(" "),responsiveSizeStyles:s}};var be={primary:"var(--color-primary)",secondary:"var(--color-secondary)",white:"var(--color-white)",primaryBlue:"var(--color-primary-100)",disabled:"var(--color-disabled)",danger:"var(--color-danger)"},z=E__namespace.default.forwardRef(({name:t,size:r=24,color:n="primary",title:s,className:a,style:m={},...p},u)=>{let g=icons.IconMap[t],{responsiveSizeClasses:l,responsiveSizeStyles:c}=ye(r,24);return E__namespace.default.createElement("div",{className:f("flex justify-center items-center",l,a),style:{"--icon-stroke":be[n],...c,...m}},E__namespace.default.createElement(g,{ref:u,"aria-hidden":!s,"aria-label":s,stroke:t.includes("filled")?void 0:be[n],...p}))});z.displayName="Icon";var Le={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},He=t=>{let[r,n]=t.split("-");return r==="heading"?Le[n]||"p":r==="label"?"label":"p"},Ae={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},Re=t=>t?(Array.isArray(t)?t:[t]).map(n=>{if(n.includes(":")){let[s,a]=n.split(":");return `${s}:text-${a}`}return `text-${n}`}).join(" "):"text-body-default",M=E__namespace.default.forwardRef(({variant:t="body-default",color:r="primary",as:n,className:s,children:a,weight:m,...p},u)=>{let g=Re(t),l=r==="inherit"?"text-inherit":`text-${r}`,c=E__namespace.default.useMemo(()=>{let y=typeof t=="string"?t.split(":").pop():Array.isArray(t)?t[0].split(":").pop():"body-default";return He(y)},[t]);return E__namespace.default.createElement(n||c,{ref:u,className:`
2
2
  font-sans antialiased
3
- ${l}
4
3
  ${g}
5
- ${m&&`!${Me[m]}`}
4
+ ${l}
5
+ ${m&&`!${Ae[m]}`}
6
6
  ${s}
7
- `,...p},i)});M.displayName="Text";var ee=T__namespace.forwardRef(({items:t,type:r="single",defaultValue:n,value:s,onValueChange:i,className:m,contentClassName:p,triggerClassName:u,...l},g)=>T__namespace.createElement($__namespace.Root,{ref:g,type:r,defaultValue:n,value:s,onValueChange:i,className:f("w-full gap-1 flex flex-col",m),...l},t.map(x=>T__namespace.createElement($__namespace.Item,{key:x.value,value:x.value,disabled:x.disabled,className:"w-full"},T__namespace.createElement($__namespace.Header,null,T__namespace.createElement($__namespace.Trigger,{className:f("flex w-full items-center gap-2 justify-between px-3 py-2 rounded bg-background-50 hover:bg-background-100 select-none cursor-pointer","disabled:cursor-not-allowed","focus-visible:outline-none focus-visible:ring-2",u)},T__namespace.createElement("div",{className:"flex items-center gap-3"},T__namespace.createElement(M,{variant:"body-default-semibold",className:x.disabled?"text-disabled":""},x.title)),T__namespace.createElement(K,{name:"arrow-down",size:18,"aria-hidden":true,color:x.disabled?"disabled":"primary",className:"transition-transform duration-200 data-[state=open]:rotate-180"}))),T__namespace.createElement($__namespace.Content,{className:f("overflow-hidden will-change-[height] data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up",p)},T__namespace.createElement("div",{className:"py-2 px-3"},x.content))))));ee.displayName="Accordion";var fe="ring-2 ring-primary-100";var q=T__namespace.forwardRef(({className:t,end:r,iconName:n,color:s,size:i,title:m,label:p,labelClassName:u,id:l,children:g,forceShowFocusRing:x,error:y,errorMessage:E,helperText:I,showCharacterCount:C,maxLength:R,value:a,defaultValue:b,onChange:h,disabled:S,...c},w)=>{let[z,O]=T__namespace.useState(a?.toString()||b?.toString()||"");T__namespace.useEffect(()=>{a!==undefined&&O(a.toString());},[a]);let V=T__namespace.useCallback(F=>{let W=F.target.value;O(W),h?.(F);},[h]),j=z.length,d=C||!!R;return T__namespace.createElement("div",{className:"gap-1 flex flex-col"},p&&T__namespace.createElement(M,{variant:"label-default",htmlFor:l,as:"label",color:y?"danger":"primary",className:f(u)},p),T__namespace.createElement("div",{className:f("relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150",!y&&!x&&"border-secondary-50",y&&"border-tertiary-10",S&&"cursor-not-allowed opacity-50","focus-within:ring-2 focus-within:ring-primary-100",x&&fe)},T__namespace.createElement("div",{className:"flex relative"},T__namespace.createElement("input",{ref:w,id:l,className:f("font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg",r&&"pr-10",t),value:z,maxLength:R,onChange:V,"aria-invalid":y,disabled:S,...c}),(r||n)&&T__namespace.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},n?T__namespace.createElement(K,{name:n,color:y?"danger":"secondary",size:i,title:m}):r)),g),T__namespace.createElement("div",{className:"flex justify-between gap-2"},y&&E||I?T__namespace.createElement(M,{variant:"body-xxs",color:y?"danger":"secondary",className:"mt-1"},y?E:I):null,d&&T__namespace.createElement(M,{variant:"body-xxs",color:y?"danger":"secondary",className:"text-right mt-1"},T__namespace.createElement(M,{variant:"body-xxs",as:"span",color:"primary-100",className:"font-bold"},j),R&&`/${R}`," characters")))});var oe=T.forwardRef(({value:t,suggestion:r,onChange:n,onKeyDown:s,className:i,"aria-controls":m,"aria-activedescendant":p,"aria-autocomplete":u,...l},g)=>T__namespace.default.createElement("div",{className:"relative w-full"},T__namespace.default.createElement(q,{ref:g,value:t,onChange:x=>n(x.target.value),onKeyDown:s,className:f("bg-transparent",i),"aria-controls":m,"aria-activedescendant":p,"aria-autocomplete":u,...l}),r&&T__namespace.default.createElement("div",{className:"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm"},t,r.slice(t.length))));oe.displayName="AutocompleteInput";var he={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},He=t=>{let r=Object.keys(he),n=t.split("").reduce((m,p)=>p.charCodeAt(0)+((m<<5)-m),0),s=Math.abs(n)%r.length;return r[s]},re=T__namespace.forwardRef(({className:t,variant:r,iconName:n,children:s,...i},m)=>{let p=r||(typeof s=="string"?He(s):"pink");return T__namespace.createElement("span",{ref:m,className:f("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",he[p],t),...i},n&&T__namespace.createElement(K,{size:16,name:n}),T__namespace.createElement(M,{variant:"body-xxs-semibold",className:"mt-0.5"},s))});re.displayName="Badge";var ye=({content:t,children:r,side:n="bottom",align:s="center",className:i,delayDuration:m=200,defaultOpen:p,open:u,onOpenChange:l,longPressDuration:g=500})=>{let[x,y]=T.useState(p||false),E=null,I=u??x,C=T.useCallback(b=>{u||y(b),l?.(b);},[u,l]),R=T.useCallback(()=>{E=setTimeout(()=>{C(true);},g);},[C,g]),a=T.useCallback(()=>{E&&(clearTimeout(E),E=null),setTimeout(()=>C(false),1500);},[E,C]);return T__namespace.createElement(H__namespace.Provider,{delayDuration:m},T__namespace.createElement(H__namespace.Root,{open:I,onOpenChange:C},T__namespace.createElement(H__namespace.Trigger,{asChild:true},T__namespace.createElement("span",{tabIndex:0,onTouchStart:R,onTouchEnd:a,onTouchCancel:a},r)),T__namespace.createElement(H__namespace.Portal,null,T__namespace.createElement(H__namespace.Content,{side:n,align:s,sideOffset:4,className:f("z-50 overflow-hidden rounded-lg","bg-primary px-3 py-1.5","text-xs text-white","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0","data-[side=bottom]:slide-in-from-top-2","data-[side=top]:slide-in-from-bottom-2","select-none","max-w-60","touch-none",i)},typeof t=="string"?T__namespace.createElement(M,{variant:"body-default-medium",color:"white"},t):t,T__namespace.createElement(H__namespace.Arrow,{className:"fill-text-primary",width:10,height:5})))))};var Re=({text:t,highlight:r})=>{if(!r)return T__namespace.default.createElement(T__namespace.default.Fragment,null,t);let n=t.split(new RegExp(`(${r})`,"i"));return T__namespace.default.createElement(T__namespace.default.Fragment,null,n.map((s,i)=>s.toLowerCase()===r.toLowerCase()?T__namespace.default.createElement("span",{key:i,className:"font-bold"},s):s))},ae=T__namespace.default.forwardRef(({value:t,label:r,onChange:n,onKeyDown:s,onMouseEnter:i,onMouseLeave:m,selected:p,color:u,disabled:l,className:g,id:x,role:y,"aria-selected":E,searchValue:I="",tooltip:C,onClick:R,badge:a},b)=>{let h=T__namespace.default.createElement("button",{ref:b,type:"button",id:x,role:y,"aria-selected":E,disabled:l,className:f("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",p&&"bg-gray-100","flex items-center gap-2",g),onClick:()=>{n?.(t),R?.();},onKeyDown:s,onMouseEnter:i,onMouseLeave:m},T__namespace.default.createElement(M,{variant:"body-default-medium",color:u==="danger"?"danger":"inherit"},typeof r=="string"?T__namespace.default.createElement(Re,{text:r,highlight:I}):r),a&&T__namespace.default.createElement(re,null,a));return C?T__namespace.default.createElement(ye,{content:C},h):h});var Rt=({options:t,placeholder:r="Select an item...",value:n,onChange:s,end:i,className:m,label:p,labelClassName:u,id:l,disabled:g,container:x,autocomplete:y=false,loading:E=false,error:I=false,errorMessage:C,noOptionsMessage:R})=>{let[a,b]=T.useState(false),[h,S]=T.useState(""),[c,w]=T.useState(-1),z=T.useRef(null),O=T.useRef(null),V=T.useMemo(()=>t.length>0&&"options"in t[0],[t]),j=T.useMemo(()=>t.length?V?t.reduce((e,o)=>[...e,...o.options],[]):t:[],[V,t]),d=T.useMemo(()=>j.filter(e=>h&&typeof e.label=="string"?e.label.toLowerCase().includes(h.toLowerCase()):true),[j,h]),F=T.useMemo(()=>V?t.map(e=>({...e,options:e.options.filter(o=>h&&typeof o.label=="string"?o.label.toLowerCase().includes(h.toLowerCase()):true)})).filter(e=>e.options.length>0):d.length>0?[{label:"",options:d}]:[],[V,t,h,d]),W=T.useMemo(()=>j.find(e=>e.value===n),[n,j]),se=T.useMemo(()=>a?h:W&&W.label?.toString()||"",[a,h,W]),Z=T.useMemo(()=>!y||!h||!a?"":d.find(o=>typeof o.label=="string"&&o.label.toLowerCase().startsWith(h.toLowerCase())&&o.label.toLowerCase()!==h.toLowerCase())?.label?.toString()||"",[y,h,d,a]),N=T.useCallback(e=>{s(e),b(false),S(""),w(-1);},[s]),le=T.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),e.altKey?b(true):a?w(o=>o<d.length-1?o+1:0):(b(true),w(0));break;case "ArrowUp":e.preventDefault(),e.altKey?b(false):a?w(o=>o>0?o-1:d.length-1):(b(true),w(d.length-1));break;case "PageUp":e.preventDefault(),a&&w(o=>Math.max(0,o-10));break;case "PageDown":e.preventDefault(),a&&w(o=>Math.min(d.length-1,o+10));break;case "Home":e.preventDefault(),a&&w(0);break;case "End":e.preventDefault(),a&&w(d.length-1);break;case "Enter":if(e.preventDefault(),c>=0&&d[c])N(d[c].value);else if(y&&Z){let o=d.find(P=>typeof P.label=="string"&&P.label.toLowerCase().startsWith(h.toLowerCase()));o&&N(o.value);}break;case "Tab":a?c>=0&&d[c]&&(e.preventDefault(),N(d[c].value)):(e.preventDefault(),b(true),w(0));break;case "Escape":e.preventDefault(),b(false),S("");break}},[a,c,d,Z,h,N,y]),pe=T.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),w(o=>o<d.length-1?o+1:0);break;case "ArrowUp":e.preventDefault(),w(o=>o>0?o-1:d.length-1);break;case "Enter":case "Space":e.preventDefault(),c>=0&&d[c]&&N(d[c].value);break;case "Escape":e.preventDefault(),b(false),O.current?.focus();break;case "Tab":e.preventDefault(),c>=0&&d[c]&&N(d[c].value);break}},[c,d,N]);T.useEffect(()=>{if(a){let e=O.current;if(e){e.focus({preventScroll:true});let o=e.value.length;e.setSelectionRange(o,o);}}},[a]),T.useEffect(()=>{a||w(-1);},[a]),T.useEffect(()=>{if(a&&c>=0&&z.current){let e=z.current.querySelector(`[id="${l}-option-${c}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[c,a,l]);let ce=T.useCallback(e=>{if(!a)return n===e.value;let o=d.findIndex(P=>P.value===e.value);return c>=0?o===c:c===-1?o===0:false},[a,n,c,d]);return T.useEffect(()=>{a&&c===-1&&w(0);},[a,c]),T__namespace.default.createElement(D__namespace.Root,{open:a&&!g,onOpenChange:e=>{if(!g)if(b(e),!e)S(""),w(-1);else {let o=O.current;if(o){o.focus({preventScroll:true});let P=o.value.length;o.setSelectionRange(P,P);}}}},T__namespace.default.createElement("div",{className:`relative w-full font-sans text-secondary ${m}`,role:"combobox","aria-expanded":a,"aria-haspopup":"listbox","aria-controls":`${l}-listbox`},T__namespace.default.createElement(D__namespace.Trigger,{asChild:true},T__namespace.default.createElement("button",{type:"button",className:"w-full text-left",disabled:g},y?T__namespace.default.createElement(oe,{ref:O,id:l,label:p,labelClassName:u,placeholder:r,value:se,suggestion:Z,onChange:e=>{S(e),a||b(true);},onKeyDown:le,end:i,className:f("flex-1",m),forceShowFocusRing:a,disabled:g,"aria-autocomplete":"list","aria-controls":`${l}-listbox`,"aria-activedescendant":c>=0?`${l}-option-${c}`:undefined}):T__namespace.default.createElement(q,{ref:O,id:l,label:p,labelClassName:u,placeholder:r,value:se,onChange:e=>{S(e.target.value),a||b(true);},onKeyDown:le,end:i,className:f("flex-1",m),forceShowFocusRing:a,disabled:g,"aria-controls":`${l}-listbox`,"aria-activedescendant":c>=0?`${l}-option-${c}`:undefined}))),T__namespace.default.createElement(D__namespace.Portal,{container:x},T__namespace.default.createElement(D__namespace.Content,{className:"w-[--radix-popover-trigger-width] bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none",side:"bottom",align:"start",sideOffset:4,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:e=>e.preventDefault(),onInteractOutside:e=>{e.preventDefault(),b(false),S(""),w(-1);}},T__namespace.default.createElement("div",{ref:z,className:"max-h-60 overflow-y-auto flex flex-col items-start outline-none",role:"listbox",id:`${l}-listbox`,"aria-label":p,"aria-busy":E},I?T__namespace.default.createElement("div",{className:"px-2 py-1.5 text-sm text-red-500"},C||"Failed to load options"):E?T__namespace.default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},"Loading..."):d.length>0&&V?T__namespace.default.createElement(ee,{type:"multiple",className:"gap-0",defaultValue:F.map(e=>e.label),items:F.map((e,o)=>({title:e.label,value:e.label,content:T__namespace.default.createElement("div",null,e.options.map((P,de)=>{let me=ce(P);return T__namespace.default.createElement(ae,{key:`${o}-${de}`,onChange:N,onKeyDown:pe,value:P.value,label:P.label,className:f("pl-4"),selected:me,id:`${l}-option-${de}`,role:"option","aria-selected":me,searchValue:h})}))}))}):d.length>0&&!V?t.map((e,o)=>{let P=ce(e);return T__namespace.default.createElement(ae,{key:o,onChange:N,onKeyDown:pe,value:e.value,label:e.label,className:f("pl-4"),selected:P,id:`${l}-option-${o}`,role:"option","aria-selected":P,searchValue:h})}):T__namespace.default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},R||"No results found"))))))};exports.Combobox=Rt;//# sourceMappingURL=Combobox.cjs.map
7
+ `,...p},a)});M.displayName="Text";var ae=E__namespace.forwardRef(({items:t,type:r="single",defaultValue:n,value:s,onValueChange:a,className:m,contentClassName:p,triggerClassName:u,...g},l)=>E__namespace.createElement($__namespace.Root,{ref:l,type:r,defaultValue:n,value:s,onValueChange:a,className:f("w-full gap-1 flex flex-col",m),...g},t.map(c=>E__namespace.createElement($__namespace.Item,{key:c.value,value:c.value,disabled:c.disabled,className:"w-full"},E__namespace.createElement($__namespace.Header,null,E__namespace.createElement($__namespace.Trigger,{className:f("flex w-full items-center gap-2 justify-between px-3 py-2 rounded bg-background-50 hover:bg-background-100 select-none cursor-pointer","disabled:cursor-not-allowed","focus-visible:outline-none focus-visible:ring-2",u)},E__namespace.createElement("div",{className:"flex items-center gap-3"},E__namespace.createElement(M,{variant:"body-default-semibold",className:c.disabled?"text-disabled":""},c.title)),E__namespace.createElement(z,{name:"arrow-down",size:18,"aria-hidden":true,color:c.disabled?"disabled":"primary",className:"transition-transform duration-200 data-[state=open]:rotate-180"}))),E__namespace.createElement($__namespace.Content,{className:f("overflow-hidden will-change-[height] data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up",p)},E__namespace.createElement("div",{className:"py-2 px-3"},c.content))))));ae.displayName="Accordion";var ve="ring-2 ring-primary-100";var J=E__namespace.forwardRef(({className:t,end:r,iconName:n,color:s,size:a,title:m,label:p,labelClassName:u,id:g,children:l,forceShowFocusRing:c,error:T,errorMessage:y,helperText:N,showCharacterCount:C,maxLength:S,value:L,defaultValue:i,onChange:w,disabled:D,...Y},h)=>{let[K,d]=E__namespace.useState(L?.toString()||i?.toString()||"");E__namespace.useEffect(()=>{L!==void 0&&d(L?.toString()||"");},[L]);let b=k=>{let G=k.target.value;d(G),w?.(k);},_=K.length,B=C||!!S;return E__namespace.createElement("div",{className:"gap-1 flex flex-col"},p&&E__namespace.createElement(M,{variant:"label-default",htmlFor:g,as:"label",color:T?"danger":"primary",className:f(u)},p),E__namespace.createElement("div",{className:f("relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150",!T&&!c&&"border-secondary-50",T&&"border-tertiary-10",D&&"cursor-not-allowed opacity-50","focus-within:ring-2 focus-within:ring-primary-100",c&&ve)},E__namespace.createElement("div",{className:"flex relative"},E__namespace.createElement("input",{ref:h,id:g,className:f("font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg",r&&"pr-10",t),value:K,maxLength:S,onChange:b,"aria-invalid":T,disabled:D,...Y}),(r||n)&&E__namespace.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},n?E__namespace.createElement(z,{name:n,color:T?"danger":"secondary",size:a,title:m}):r)),l),E__namespace.createElement("div",{className:"flex justify-between gap-2"},T&&y||N?E__namespace.createElement(M,{variant:"body-xxs",color:T?"danger":"secondary",className:"mt-1"},T?y:N):null,B&&E__namespace.createElement(M,{variant:"body-xxs",color:T?"danger":"secondary",className:"text-right mt-1"},E__namespace.createElement(M,{variant:"body-xxs",as:"span",className:"font-bold"},_),S&&`/${S}`," characters")))});var se=E.forwardRef(({value:t,suggestion:r,onChange:n,onKeyDown:s,className:a,"aria-controls":m,"aria-activedescendant":p,"aria-autocomplete":u,...g},l)=>E__namespace.default.createElement("div",{className:"relative w-full"},E__namespace.default.createElement(J,{ref:l,value:t,onChange:c=>n(c.target.value),onKeyDown:s,className:f("bg-transparent",a),"aria-controls":m,"aria-activedescendant":p,"aria-autocomplete":u,...g}),r&&t&&E__namespace.default.createElement("div",{className:"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm"},t,r.slice(t.length))));se.displayName="AutocompleteInput";var we={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},$e=t=>{let r=Object.keys(we),n=t.split("").reduce((m,p)=>p.charCodeAt(0)+((m<<5)-m),0),s=Math.abs(n)%r.length;return r[s]},le=E__namespace.forwardRef(({className:t,variant:r,iconName:n,children:s,...a},m)=>{let p=r||(typeof s=="string"?$e(s):"pink");return E__namespace.createElement("span",{ref:m,className:f("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",we[p],t),...a},n&&E__namespace.createElement(z,{size:16,name:n}),E__namespace.createElement(M,{variant:"body-xxs-semibold",className:"mt-0.5"},s))});le.displayName="Badge";function Te({content:t,children:r,side:n="bottom",align:s="center",className:a,delayDuration:m=200,defaultOpen:p,open:u,onOpenChange:g,longPressDuration:l=500}){let[c,T]=E.useState(p||false),y=null,N=u??c,C=E.useCallback(i=>{u||T(i),g?.(i);},[u,g]),S=E.useCallback(()=>{y=setTimeout(()=>{C(true);},l);},[C,l]),L=E.useCallback(()=>{y&&(clearTimeout(y),y=null),setTimeout(()=>C(false),1500);},[y,C]);return E__namespace.createElement(A__namespace.Provider,{delayDuration:m},E__namespace.createElement(A__namespace.Root,{open:N,onOpenChange:C},E__namespace.createElement(A__namespace.Trigger,{asChild:true},E__namespace.createElement("span",{tabIndex:0,onTouchStart:S,onTouchEnd:L,onTouchCancel:L},r)),E__namespace.createElement(A__namespace.Portal,null,E__namespace.createElement(A__namespace.Content,{side:n,align:s,sideOffset:4,className:f("z-50 overflow-hidden rounded-lg","bg-primary px-3 py-1.5","text-xs text-white","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0","data-[side=bottom]:slide-in-from-top-2","data-[side=top]:slide-in-from-bottom-2","select-none","max-w-60","touch-none",a)},typeof t=="string"?E__namespace.createElement(M,{variant:"body-default-medium",color:"white"},t):t,E__namespace.createElement(A__namespace.Arrow,{className:"fill-text-primary",width:10,height:5})))))}function ke({text:t,highlight:r}){if(!r)return E__namespace.default.createElement(E__namespace.default.Fragment,null,t);let n=t.split(new RegExp(`(${r})`,"i"));return E__namespace.default.createElement(E__namespace.default.Fragment,null,n.map((s,a)=>s.toLowerCase()===r.toLowerCase()?E__namespace.default.createElement("span",{key:a,className:"font-bold"},s):s))}var ce=E__namespace.default.forwardRef(({value:t,label:r,onChange:n,onKeyDown:s,onMouseEnter:a,onMouseLeave:m,selected:p,color:u,disabled:g,className:l,id:c,role:T,"aria-selected":y,searchValue:N="",tooltip:C,onClick:S,badge:L},i)=>{let w=E__namespace.default.createElement("button",{ref:i,type:"button",id:c,role:T,"aria-selected":y,disabled:g,className:f("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",p&&"bg-gray-100","flex items-center gap-2",l),onClick:()=>{n?.(t),S?.();},onKeyDown:s,onMouseEnter:a,onMouseLeave:m},E__namespace.default.createElement(M,{variant:"body-default-medium",color:u==="danger"?"danger":"inherit"},typeof r=="string"?E__namespace.default.createElement(ke,{text:r,highlight:N}):r),L&&E__namespace.default.createElement(le,null,L));return C?E__namespace.default.createElement(Te,{content:C},w):w});function Ct({options:t,placeholder:r="Select an item...",value:n,onChange:s,onSelected:a,end:m,className:p,label:u,labelClassName:g,id:l,disabled:c,container:T,autocomplete:y=false,loading:N=false,error:C=false,errorMessage:S,noOptionsMessage:L}){let[i,w]=E.useState(false),[D,Y]=E.useState(n),[h,K]=E.useState(""),[d,b]=E.useState(-1),_=E.useRef(null),B=E.useRef(null),k=E.useMemo(()=>t.length>0&&"options"in t[0],[t]),G=E.useMemo(()=>t.length?k?t.reduce((e,o)=>[...e,...o.options],[]):t:[],[k,t]),x=E.useMemo(()=>G.filter(e=>h&&typeof e.label=="string"?e.label.toLowerCase().includes(h.toLowerCase()):true),[G,h]),de=E.useMemo(()=>k?t.map(e=>({...e,options:e.options.filter(o=>h&&typeof o.label=="string"?o.label.toLowerCase().includes(h.toLowerCase()):true)})).filter(e=>e.options.length>0):x.length>0?[{label:"",options:x}]:[],[k,t,h,x]),F=E.useMemo(()=>G.find(e=>e.value===D),[D,G]),ee=E.useMemo(()=>i&&h?h:F?F.label?.toString()||"":D||"",[i,h,F]),q=E.useCallback(()=>{K(F?.label?.toString()||"");},[F]);E.useEffect(()=>{q();},[F]);let te=E.useMemo(()=>!y||!h||!i?"":x.find(o=>typeof o.label=="string"&&o.label.toLowerCase().startsWith(h.toLowerCase())&&o.label.toLowerCase()!==h.toLowerCase())?.label?.toString()||"",[y,h,x,i]),O=E.useCallback(e=>{Y(e),s?.(ee),K(""),w(false),a(e),b(-1);},[a]),me=E.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),e.altKey?w(true):i?b(o=>o<x.length-1?o+1:0):(w(true),b(0));break;case "ArrowUp":e.preventDefault(),e.altKey?w(false):i?b(o=>o>0?o-1:x.length-1):(w(true),b(x.length-1));break;case "PageUp":e.preventDefault(),i&&b(o=>Math.max(0,o-10));break;case "PageDown":e.preventDefault(),i&&b(o=>Math.min(x.length-1,o+10));break;case "Home":if(e.shiftKey)break;e.preventDefault(),i&&b(0);break;case "End":if(e.shiftKey)break;e.preventDefault(),i&&b(x.length-1);break;case "Enter":if(e.preventDefault(),d>=0&&x[d])O(x[d].value);else if(y&&te&&h){let o=x.find(P=>typeof P.label=="string"&&P.label.toLowerCase().startsWith(h.toLowerCase()));o&&O(o.value);}break;case "Tab":i?d>=0&&x[d]&&(e.preventDefault(),O(x[d].value)):(e.preventDefault(),w(true),b(0));break;case "Escape":e.preventDefault(),w(false),q();break}},[i,d,x,te,h,O,y]),ue=E.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),b(o=>o<x.length-1?o+1:0);break;case "ArrowUp":e.preventDefault(),b(o=>o>0?o-1:x.length-1);break;case "Enter":case "Tab":e.preventDefault(),d>=0&&x[d]&&O(x[d].value);break;case "Escape":e.preventDefault(),w(false),q(),B.current?.focus();break}},[d,x,O]);E.useEffect(()=>{if(i){let e=B.current;if(e){e.focus({preventScroll:true});let o=e.value.length;e.setSelectionRange(o,o);}}},[i]),E.useEffect(()=>{i||b(-1);},[i]),E.useEffect(()=>{if(i&&d>=0&&_.current){let e=_.current.querySelector(`[id="${l}-option-${d}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[d,i,l]);let xe=E.useCallback(e=>{if(!i)return n===e.value;let o=x.findIndex(P=>P.value===e.value);return d>=0?o===d:d===-1?o===0:false},[i,D,d,x]);return E.useEffect(()=>{i&&d===-1&&b(0);},[i,d]),E__namespace.default.createElement(V__namespace.Root,{open:i&&!c,onOpenChange:e=>{if(!c)if(w(e),!e)q(),b(-1);else {let o=B.current;if(o){o.focus({preventScroll:true});let P=o.value.length;o.setSelectionRange(P,P);}}}},E__namespace.default.createElement("div",{className:`relative w-full font-sans text-secondary ${p}`,role:"combobox","aria-expanded":i,"aria-haspopup":"listbox","aria-controls":`${l}-listbox`},E__namespace.default.createElement(V__namespace.Trigger,{asChild:true},E__namespace.default.createElement("button",{type:"button",className:"w-full text-left",disabled:c},y?E__namespace.default.createElement(se,{ref:B,id:l,label:u,labelClassName:g,placeholder:r,value:ee,suggestion:te,onChange:e=>{K(e),s?.(e),i||w(true);},onKeyDown:me,end:m,className:f("flex-1",p),forceShowFocusRing:i,disabled:c,"aria-autocomplete":"list","aria-controls":`${l}-listbox`,"aria-activedescendant":d>=0?`${l}-option-${d}`:void 0}):E__namespace.default.createElement(J,{ref:B,id:l,label:u,labelClassName:g,placeholder:r,value:ee,onChange:e=>{K(e.target.value),s?.(e.target.value),i||w(true);},onKeyDown:me,end:m,className:f("flex-1",p),forceShowFocusRing:i,disabled:c,"aria-controls":`${l}-listbox`,"aria-activedescendant":d>=0?`${l}-option-${d}`:void 0}))),E__namespace.default.createElement(V__namespace.Portal,{container:T},E__namespace.default.createElement(V__namespace.Content,{className:"w-[--radix-popover-trigger-width] bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none",side:"bottom",align:"start",sideOffset:4,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:e=>e.preventDefault(),onInteractOutside:e=>{e.preventDefault(),w(false),q(),b(-1);}},E__namespace.default.createElement("div",{ref:_,className:"max-h-60 overflow-y-auto flex flex-col items-start outline-none",role:"listbox",id:`${l}-listbox`,"aria-label":u,"aria-busy":N},C?E__namespace.default.createElement("div",{className:"px-2 py-1.5 text-sm text-red-500"},S||"Failed to load options"):N?E__namespace.default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},"Loading..."):x.length>0&&k?E__namespace.default.createElement(ae,{type:"multiple",className:"gap-0",defaultValue:de.map(e=>e.label),items:de.map((e,o)=>({title:e.label,value:e.label,content:E__namespace.default.createElement("div",null,e.options.map((P,fe)=>{let ge=xe(P);return E__namespace.default.createElement(ce,{key:`${o}-${fe}`,onChange:O,onKeyDown:ue,value:P.value,label:P.label,className:f("pl-4"),selected:ge,id:`${l}-option-${fe}`,role:"option","aria-selected":ge,searchValue:h})}))}))}):x.length>0&&!k?t.map((e,o)=>{let P=xe(e);return E__namespace.default.createElement(ce,{key:o,onChange:O,onKeyDown:ue,value:e.value,label:e.label,className:f("pl-4"),selected:P,id:`${l}-option-${o}`,role:"option","aria-selected":P,searchValue:h})}):E__namespace.default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},L||"No results found"))))))}exports.Combobox=Ct;//# sourceMappingURL=Combobox.cjs.map
8
8
  //# sourceMappingURL=Combobox.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Accordion.tsx","../../src/utils/tailwind.ts","../../src/components/Input.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/Badge.tsx","../../src/components/Tooltip.tsx","../../src/components/Option.tsx","../../src/components/Combobox.tsx"],"names":["cn","inputs","twMerge","clsx","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","size","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Accordion","L","items","type","defaultValue","onValueChange","contentClassName","triggerClassName","$","item","focusRingStylesCoerced","Input","v","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","onChange","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","AutocompleteInput","forwardRef","suggestion","onKeyDown","ariaControls","ariaActiveDescendant","ariaAutocomplete","stringToVariant","str","variantKeys","hash","acc","char","index","Badge","G","finalVariant","Tooltip","content","side","align","delayDuration","defaultOpen","controlledOpen","onOpenChange","longPressDuration","isOpen","setIsOpen","useState","longPressTimer","open","handleOpenChange","useCallback","newOpen","handleTouchStart","handleTouchEnd","k","H","HighlightedText","text","highlight","parts","part","Option","onMouseEnter","onMouseLeave","selected","role","ariaSelected","searchValue","tooltip","onClick","badge","Combobox","options","placeholder","container","autocomplete","loading","noOptionsMessage","setOpen","setSearchValue","highlightedIndex","setHighlightedIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","visibleOptions","option","filteredGroups","selectedOption","opt","displayValue","handleOptionChange","optionValue","handleKeyDown","event","prev","matchingOption","handleOptionKeyDown","useEffect","input","length","highlightedOption","getSelectedOption","D","groupIndex","optionIndex","isSelected"],"mappings":"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","file":"Combobox.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import { IconMap, IconName } from \"@deckai/icons\";\nimport React, { SVGProps } from \"react\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport { ResponsiveSize, getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\n// Using CSS variables to support dark mode\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n white: \"var(--color-white)\",\n primaryBlue: \"var(--color-primary-100)\",\n disabled: \"var(--color-disabled)\",\n danger: \"var(--color-danger)\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\nimport { Typography } from \"../types/tailwind\";\nimport { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles using Tailwind classes that reference CSS variables\n const colorClasses = color === \"inherit\" ? \"text-inherit\" : `text-${color}`;\n\n const suggestedElement = React.useMemo(() => {\n const baseVariant =\n typeof variant === \"string\"\n ? variant.split(\":\").pop()!\n : Array.isArray(variant)\n ? variant[0].split(\":\").pop()!\n : \"body-default\";\n return getElementFromVariant(baseVariant as TypographyKey);\n }, [variant]);\n\n const Component = (as || suggestedElement) as T;\n\n return (\n // @ts-expect-error TODO: figure this out\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type AccordionItem = {\n value: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n};\n\nexport type AccordionProps = {\n /** Array of items to show in the accordion */\n items: AccordionItem[];\n /** Type of accordion (single item open or multiple) */\n type?:\n | AccordionPrimitive.AccordionSingleProps[\"type\"]\n | AccordionPrimitive.AccordionMultipleProps[\"type\"];\n /** Default value(s) to be expanded */\n defaultValue?:\n | AccordionPrimitive.AccordionSingleProps[\"defaultValue\"]\n | AccordionPrimitive.AccordionMultipleProps[\"defaultValue\"];\n /** Current value(s) for controlled component */\n value?:\n | AccordionPrimitive.AccordionSingleProps[\"value\"]\n | AccordionPrimitive.AccordionMultipleProps[\"value\"];\n /** Callback when value changes */\n onValueChange?:\n | AccordionPrimitive.AccordionSingleProps[\"onValueChange\"]\n | AccordionPrimitive.AccordionMultipleProps[\"onValueChange\"];\n /** Optional className for custom styling */\n className?: string;\n /** Optional className for content */\n contentClassName?: string;\n /** Optional className for trigger */\n triggerClassName?: string;\n};\n\nexport const Accordion = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Root>,\n AccordionProps\n>(\n (\n {\n items,\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n className,\n contentClassName,\n triggerClassName,\n ...props\n },\n ref\n ) => {\n return (\n // @ts-expect-error TODO: Fix this\n <AccordionPrimitive.Root\n ref={ref}\n type={type}\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n className={cn(\"w-full gap-1 flex flex-col\", className)}\n {...props}\n >\n {items.map((item) => (\n <AccordionPrimitive.Item\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className=\"w-full\"\n >\n <AccordionPrimitive.Header>\n <AccordionPrimitive.Trigger\n className={cn(\n \"flex w-full items-center gap-2 justify-between px-3 py-2 rounded bg-background-50 hover:bg-background-100 select-none cursor-pointer\",\n \"disabled:cursor-not-allowed\",\n \"focus-visible:outline-none focus-visible:ring-2\",\n triggerClassName\n )}\n >\n <div className=\"flex items-center gap-3\">\n <Text\n variant=\"body-default-semibold\"\n className={item.disabled ? \"text-disabled\" : \"\"}\n >\n {item.title}\n </Text>\n </div>\n <Icon\n name=\"arrow-down\"\n size={18}\n aria-hidden\n color={item.disabled ? \"disabled\" : \"primary\"}\n className=\"transition-transform duration-200 data-[state=open]:rotate-180\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n <AccordionPrimitive.Content\n className={cn(\n \"overflow-hidden will-change-[height] data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\",\n contentClassName\n )}\n >\n <div className=\"py-2 px-3\">{item.content}</div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n ))}\n </AccordionPrimitive.Root>\n );\n }\n);\n\nAccordion.displayName = \"Accordion\";\n","import { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { focusRingStylesCoerced } from \"../utils/tailwind\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value.toString());\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n },\n [onChange]\n );\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n !error && !forceShowFocusRing && \"border-secondary-50\",\n error && \"border-tertiary-10\",\n disabled && \"cursor-not-allowed opacity-50\",\n \"focus-within:ring-2 focus-within:ring-primary-100\",\n forceShowFocusRing && focusRingStylesCoerced\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n disabled={disabled}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text\n variant=\"body-xxs\"\n as=\"span\"\n color=\"primary-100\"\n className=\"font-bold\"\n >\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import React, { forwardRef, KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\n\nexport type AutocompleteInputProps = {\n value: string;\n suggestion: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n} & Omit<InputProps, \"value\" | \"onChange\" | \"onKeyDown\">;\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n onChange,\n onKeyDown,\n className,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete,\n ...props\n },\n ref\n ) => {\n return (\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"bg-transparent\", className)}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n {...props}\n />\n {suggestion && (\n <div className=\"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n","import { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type BadgeProps = {\n variant?: \"pink\" | \"orange\" | \"green\" | \"purple\";\n iconName?: IconName;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst variants = {\n pink: \"bg-tertiary-5\",\n orange: \"bg-tertiary-15\",\n green: \"bg-tertiary-25\",\n purple: \"bg-secondary-300\"\n};\n\nconst stringToVariant = (str: string): keyof typeof variants => {\n const variantKeys = Object.keys(variants) as Array<keyof typeof variants>;\n // Let's log some values to understand what's happening\n const hash = str\n .split(\"\")\n .reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0);\n\n const index = Math.abs(hash) % variantKeys.length;\n const selectedVariant = variantKeys[index];\n\n return selectedVariant;\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, iconName, children, ...props }, ref) => {\n const finalVariant =\n variant ||\n (typeof children === \"string\" ? stringToVariant(children) : \"pink\");\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-2\",\n \"rounded px-2 py-1.5\",\n \"text-sm font-medium\",\n variants[finalVariant],\n className\n )}\n {...props}\n >\n {iconName && <Icon size={16} name={iconName} />}\n <Text variant=\"body-xxs-semibold\" className=\"mt-0.5\">\n {children}\n </Text>\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n delayDuration?: number;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Duration in ms for long press on mobile devices */\n longPressDuration?: number;\n}\n\nexport const Tooltip = ({\n content,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n delayDuration = 200,\n defaultOpen,\n open: controlledOpen,\n onOpenChange,\n longPressDuration = 500\n}: TooltipProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen || false);\n let longPressTimer: Timer | null = null;\n\n const open = controlledOpen ?? isOpen;\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!controlledOpen) {\n setIsOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const handleTouchStart = useCallback(() => {\n const timer = setTimeout(() => {\n handleOpenChange(true);\n }, longPressDuration);\n longPressTimer = timer;\n }, [handleOpenChange, longPressDuration]);\n\n const handleTouchEnd = useCallback(() => {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n // Keep tooltip open for a brief moment after touch\n setTimeout(() => handleOpenChange(false), 1500);\n }, [longPressTimer, handleOpenChange]);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n <span\n tabIndex={0}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onTouchCancel={handleTouchEnd}\n >\n {children}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(\n \"z-50 overflow-hidden rounded-lg\",\n \"bg-primary px-3 py-1.5\",\n \"text-xs text-white\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"select-none\",\n \"max-w-60\",\n \"touch-none\", // Prevent touch events from interfering with scrolling\n className\n )}\n >\n {typeof content === \"string\" ? (\n <Text variant=\"body-default-medium\" color=\"white\">\n {content}\n </Text>\n ) : (\n content\n )}\n <TooltipPrimitive.Arrow\n className=\"fill-text-primary\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n","import React, { KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Badge } from \"./Badge\";\nimport { Text } from \"./Text\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type OptionProps = {\n label: React.ReactNode;\n value: string;\n /** Optional color override for specific items like \"Logout\" in red */\n color?: \"default\" | \"danger\";\n /** Optional disabled state */\n disabled?: boolean;\n onChange?: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n selected?: boolean;\n className?: string;\n /** ID for accessibility */\n id?: string;\n /** ARIA role */\n role?: string;\n /** ARIA selected state */\n \"aria-selected\"?: boolean;\n /** Current search value for highlighting matches */\n searchValue?: string;\n /** Optional tooltip content */\n tooltip?: React.ReactNode;\n onClick?: () => void;\n badge?: React.ReactNode;\n};\n\nconst HighlightedText = ({\n text,\n highlight\n}: {\n text: string;\n highlight: string;\n}) => {\n if (!highlight) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${highlight})`, \"i\"));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === highlight.toLowerCase() ? (\n <span key={i} className=\"font-bold\">\n {part}\n </span>\n ) : (\n part\n )\n )}\n </>\n );\n};\n\nexport const Option = React.forwardRef<HTMLButtonElement, OptionProps>(\n (\n {\n value,\n label,\n onChange,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n selected,\n color,\n disabled,\n className,\n id,\n role,\n \"aria-selected\": ariaSelected,\n searchValue = \"\",\n tooltip,\n onClick,\n badge\n },\n ref\n ) => {\n const content = (\n <button\n ref={ref}\n type=\"button\"\n id={id}\n role={role}\n aria-selected={ariaSelected}\n disabled={disabled}\n className={cn(\n \"relative w-full text-left px-2 py-1.5 text-sm rounded outline-none\",\n \"cursor-pointer hover:bg-gray-100\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n selected && \"bg-gray-100\",\n \"flex items-center gap-2\",\n className\n )}\n onClick={() => {\n onChange?.(value);\n onClick?.();\n }}\n onKeyDown={onKeyDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Text\n variant=\"body-default-medium\"\n color={color === \"danger\" ? \"danger\" : \"inherit\"}\n >\n {typeof label === \"string\" ? (\n <HighlightedText text={label} highlight={searchValue} />\n ) : (\n label\n )}\n </Text>\n {badge && <Badge>{badge}</Badge>}\n </button>\n );\n return tooltip ? <Tooltip content={tooltip}>{content}</Tooltip> : content;\n }\n);\n","import * as Popover from \"@radix-ui/react-popover\";\nimport React, {\n KeyboardEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { cn } from \"../utils\";\nimport { Accordion } from \"./Accordion\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\nimport { Input } from \"./Input\";\nimport { Option, OptionProps } from \"./Option\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type ComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n placeholder?: string;\n value?: string;\n onChange: (value: string) => void;\n end?: React.ReactNode;\n className?: string;\n /** Label text for the combobox */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** ID for accessibility */\n id?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n autocomplete?: boolean;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for async options */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n};\n\nexport const Combobox = ({\n options,\n placeholder = \"Select an item...\",\n value,\n onChange,\n end,\n className,\n label,\n labelClassName,\n id,\n disabled,\n container,\n autocomplete = false,\n loading = false,\n error = false,\n errorMessage,\n noOptionsMessage\n}: ComboboxProps) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = useMemo(\n () => options.length > 0 && \"options\" in options[0],\n [options]\n );\n\n const flatOptions = useMemo(() => {\n if (!options.length) return [];\n if (!isGrouped) return options as OptionProps[];\n return (options as OptionGroup[]).reduce<OptionProps[]>(\n (acc, group) => [...acc, ...group.options],\n []\n );\n }, [isGrouped, options]);\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) =>\n searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true\n );\n }, [flatOptions, searchValue]);\n\n const filteredGroups = useMemo(() => {\n if (!isGrouped) {\n return visibleOptions.length > 0\n ? [{ label: \"\", options: visibleOptions }]\n : [];\n }\n\n return (options as OptionGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) =>\n searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true\n )\n }))\n .filter((group) => group.options.length > 0);\n }, [isGrouped, options, searchValue, visibleOptions]);\n\n const selectedOption = useMemo(\n () => flatOptions.find((opt) => opt.value === value),\n [value, flatOptions]\n );\n\n const displayValue = useMemo(() => {\n if (open) return searchValue;\n if (selectedOption) return selectedOption.label?.toString() || \"\";\n return \"\";\n }, [open, searchValue, selectedOption]);\n\n const suggestion = useMemo(() => {\n if (!autocomplete || !searchValue || !open) return \"\";\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase()) &&\n opt.label.toLowerCase() !== searchValue.toLowerCase()\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchValue, visibleOptions, open]);\n\n const handleOptionChange = useCallback(\n (optionValue: string) => {\n onChange(optionValue);\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n },\n [onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(true);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(0);\n } else {\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(false);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(visibleOptions.length - 1);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n }\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => Math.max(0, prev - 10));\n }\n break;\n\n case \"PageDown\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) =>\n Math.min(visibleOptions.length - 1, prev + 10)\n );\n }\n break;\n\n case \"Home\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(0);\n }\n break;\n\n case \"End\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(visibleOptions.length - 1);\n }\n break;\n\n case \"Enter\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n } else if (autocomplete && suggestion) {\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase())\n );\n if (matchingOption) {\n handleOptionChange(matchingOption.value);\n }\n }\n break;\n\n case \"Tab\":\n if (!open) {\n event.preventDefault();\n setOpen(true);\n setHighlightedIndex(0);\n } else if (\n highlightedIndex >= 0 &&\n visibleOptions[highlightedIndex]\n ) {\n event.preventDefault();\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n break;\n }\n },\n [\n open,\n highlightedIndex,\n visibleOptions,\n suggestion,\n searchValue,\n handleOptionChange,\n autocomplete\n ]\n );\n\n const handleOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n break;\n\n case \"Enter\":\n case \"Space\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n inputRef.current?.focus();\n break;\n\n case \"Tab\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionChange]\n );\n\n // Keep input focused when dropdown is open\n useEffect(() => {\n if (open) {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n // Move cursor to end of text\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }, [open]);\n\n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!open) {\n setHighlightedIndex(-1);\n }\n }, [open]);\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && highlightedIndex >= 0 && listRef.current) {\n const highlightedOption = listRef.current.querySelector(\n `[id=\"${id}-option-${highlightedIndex}\"]`\n ) as HTMLElement;\n\n if (highlightedOption) {\n highlightedOption.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\"\n });\n }\n }\n }, [highlightedIndex, open, id]);\n\n const getSelectedOption = useCallback(\n (option: OptionProps) => {\n if (!open) return value === option.value;\n\n const index = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n\n // If using keyboard navigation, show that highlight\n if (highlightedIndex >= 0) {\n return index === highlightedIndex;\n }\n\n // If no option is highlighted, highlight the first one\n if (highlightedIndex === -1) {\n return index === 0;\n }\n\n return false;\n },\n [open, value, highlightedIndex, visibleOptions]\n );\n\n // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\n\n return (\n <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n } else {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }\n }}\n >\n <div\n className={`relative w-full font-sans text-secondary ${className}`}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n >\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"w-full text-left\"\n disabled={disabled}\n >\n {autocomplete ? (\n <AutocompleteInput\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayValue}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchValue(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className={cn(\"flex-1\", className)}\n forceShowFocusRing={open}\n disabled={disabled}\n aria-autocomplete=\"list\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n ) : (\n <Input\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayValue}\n onChange={(e) => {\n setSearchValue(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className={cn(\"flex-1\", className)}\n forceShowFocusRing={open}\n disabled={disabled}\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n )}\n </button>\n </Popover.Trigger>\n\n <Popover.Portal container={container}>\n <Popover.Content\n className=\"w-[--radix-popover-trigger-width] bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n e.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }}\n >\n <div\n ref={listRef}\n className=\"max-h-60 overflow-y-auto flex flex-col items-start outline-none\"\n role=\"listbox\"\n id={`${id}-listbox`}\n aria-label={label}\n aria-busy={loading}\n >\n {error ? (\n <div className=\"px-2 py-1.5 text-sm text-red-500\">\n {errorMessage || \"Failed to load options\"}\n </div>\n ) : loading ? (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n Loading...\n </div>\n ) : visibleOptions.length > 0 && isGrouped ? (\n <Accordion\n type=\"multiple\"\n className=\"gap-0\"\n defaultValue={filteredGroups.map((group) => group.label)}\n items={filteredGroups.map((group, groupIndex) => ({\n title: group.label,\n value: group.label,\n content: (\n <div>\n {group.options.map((option, optionIndex) => {\n const isSelected = getSelectedOption(option);\n return (\n <Option\n key={`${groupIndex}-${optionIndex}`}\n onChange={handleOptionChange}\n onKeyDown={handleOptionKeyDown}\n value={option.value}\n label={option.label}\n className={cn(\"pl-4\")}\n selected={isSelected}\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={isSelected}\n searchValue={searchValue}\n />\n );\n })}\n </div>\n )\n }))}\n />\n ) : visibleOptions.length > 0 && !isGrouped ? (\n options.map((option, optionIndex) => {\n // @ts-expect-error TODO: Fix this\n const isSelected = getSelectedOption(option);\n return (\n <Option\n key={optionIndex}\n onChange={handleOptionChange}\n onKeyDown={handleOptionKeyDown}\n // @ts-expect-error TODO: Fix this\n value={option.value}\n label={option.label}\n className={cn(\"pl-4\")}\n selected={isSelected}\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={isSelected}\n searchValue={searchValue}\n />\n );\n })\n ) : (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n {noOptionsMessage || \"No results found\"}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Accordion.tsx","../../src/utils/tailwind.ts","../../src/components/Input.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/Badge.tsx","../../src/components/Tooltip.tsx","../../src/components/Option.tsx","../../src/components/Combobox.tsx"],"names":["cn","inputs","twMerge","clsx","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","size","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Accordion","H","items","type","defaultValue","onValueChange","contentClassName","triggerClassName","$","item","focusRingStylesCoerced","Input","v","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","onChange","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","AutocompleteInput","forwardRef","suggestion","onKeyDown","ariaControls","ariaActiveDescendant","ariaAutocomplete","stringToVariant","str","variantKeys","hash","acc","char","index","Badge","W","finalVariant","Tooltip","content","side","align","delayDuration","defaultOpen","controlledOpen","onOpenChange","longPressDuration","isOpen","setIsOpen","useState","longPressTimer","open","handleOpenChange","useCallback","newOpen","handleTouchStart","handleTouchEnd","I","A","HighlightedText","text","highlight","parts","part","i","Option","onMouseEnter","onMouseLeave","selected","role","ariaSelected","searchValue","tooltip","onClick","badge","Combobox","options","placeholder","onSelected","container","autocomplete","loading","noOptionsMessage","setOpen","selectedValue","setSelectedValue","searchText","setSearchText","highlightedIndex","setHighlightedIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","visibleOptions","option","filteredGroups","selectedOption","opt","displayText","setDefaultSearchText","useEffect","handleOptionSelected","optionValue","handleKeyDown","event","prev","matchingOption","handleOptionKeyDown","input","length","highlightedOption","getSelectedOption","V","groupIndex","optionIndex","isSelected"],"mappings":"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","file":"Combobox.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import type { IconName } from \"@deckai/icons\";\nimport { IconMap } from \"@deckai/icons\";\nimport type { SVGProps } from \"react\";\nimport React from \"react\";\n\nimport type { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\n// Using CSS variables to support dark mode\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n white: \"var(--color-white)\",\n primaryBlue: \"var(--color-primary-100)\",\n disabled: \"var(--color-disabled)\",\n danger: \"var(--color-danger)\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\n\nimport type { Typography } from \"../types/tailwind\";\nimport type { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles using Tailwind classes that reference CSS variables\n const colorClasses = color === \"inherit\" ? \"text-inherit\" : `text-${color}`;\n\n const suggestedElement = React.useMemo(() => {\n const baseVariant =\n typeof variant === \"string\"\n ? variant.split(\":\").pop()!\n : Array.isArray(variant)\n ? variant[0].split(\":\").pop()!\n : \"body-default\";\n return getElementFromVariant(baseVariant as TypographyKey);\n }, [variant]);\n\n const Component = (as || suggestedElement) as T;\n\n return (\n // @ts-expect-error TODO: figure this out\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type AccordionItem = {\n value: string;\n title: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n};\n\nexport type AccordionProps = {\n /** Array of items to show in the accordion */\n items: AccordionItem[];\n /** Type of accordion (single item open or multiple) */\n type?:\n | AccordionPrimitive.AccordionSingleProps[\"type\"]\n | AccordionPrimitive.AccordionMultipleProps[\"type\"];\n /** Default value(s) to be expanded */\n defaultValue?:\n | AccordionPrimitive.AccordionSingleProps[\"defaultValue\"]\n | AccordionPrimitive.AccordionMultipleProps[\"defaultValue\"];\n /** Current value(s) for controlled component */\n value?:\n | AccordionPrimitive.AccordionSingleProps[\"value\"]\n | AccordionPrimitive.AccordionMultipleProps[\"value\"];\n /** Callback when value changes */\n onValueChange?:\n | AccordionPrimitive.AccordionSingleProps[\"onValueChange\"]\n | AccordionPrimitive.AccordionMultipleProps[\"onValueChange\"];\n /** Optional className for custom styling */\n className?: string;\n /** Optional className for content */\n contentClassName?: string;\n /** Optional className for trigger */\n triggerClassName?: string;\n};\n\nexport const Accordion = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Root>,\n AccordionProps\n>(\n (\n {\n items,\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n className,\n contentClassName,\n triggerClassName,\n ...props\n },\n ref\n ) => {\n return (\n // @ts-expect-error TODO: Fix this\n <AccordionPrimitive.Root\n ref={ref}\n type={type}\n defaultValue={defaultValue}\n value={value}\n onValueChange={onValueChange}\n className={cn(\"w-full gap-1 flex flex-col\", className)}\n {...props}\n >\n {items.map((item) => (\n <AccordionPrimitive.Item\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className=\"w-full\"\n >\n <AccordionPrimitive.Header>\n <AccordionPrimitive.Trigger\n className={cn(\n \"flex w-full items-center gap-2 justify-between px-3 py-2 rounded bg-background-50 hover:bg-background-100 select-none cursor-pointer\",\n \"disabled:cursor-not-allowed\",\n \"focus-visible:outline-none focus-visible:ring-2\",\n triggerClassName\n )}\n >\n <div className=\"flex items-center gap-3\">\n <Text\n variant=\"body-default-semibold\"\n className={item.disabled ? \"text-disabled\" : \"\"}\n >\n {item.title}\n </Text>\n </div>\n <Icon\n name=\"arrow-down\"\n size={18}\n aria-hidden\n color={item.disabled ? \"disabled\" : \"primary\"}\n className=\"transition-transform duration-200 data-[state=open]:rotate-180\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n <AccordionPrimitive.Content\n className={cn(\n \"overflow-hidden will-change-[height] data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\",\n contentClassName\n )}\n >\n <div className=\"py-2 px-3\">{item.content}</div>\n </AccordionPrimitive.Content>\n </AccordionPrimitive.Item>\n ))}\n </AccordionPrimitive.Root>\n );\n }\n);\n\nAccordion.displayName = \"Accordion\";\n","import type { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import type { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStylesCoerced } from \"../utils/tailwind\";\nimport type { IconProps } from \"./Icon\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value?.toString() || \"\");\n }\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n };\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n !error && !forceShowFocusRing && \"border-secondary-50\",\n error && \"border-tertiary-10\",\n disabled && \"cursor-not-allowed opacity-50\",\n \"focus-within:ring-2 focus-within:ring-primary-100\",\n forceShowFocusRing && focusRingStylesCoerced\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n disabled={disabled}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text variant=\"body-xxs\" as=\"span\" className=\"font-bold\">\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import type { KeyboardEvent } from \"react\";\nimport React, { forwardRef } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\n\nexport type AutocompleteInputProps = {\n value: string | undefined;\n suggestion: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n} & Omit<InputProps, \"value\" | \"onChange\" | \"onKeyDown\">;\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n onChange,\n onKeyDown,\n className,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete,\n ...props\n },\n ref\n ) => {\n return (\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"bg-transparent\", className)}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n {...props}\n />\n {suggestion && value && (\n <div className=\"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n","import type { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type BadgeProps = {\n variant?: \"pink\" | \"orange\" | \"green\" | \"purple\";\n iconName?: IconName;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst variants = {\n pink: \"bg-tertiary-5\",\n orange: \"bg-tertiary-15\",\n green: \"bg-tertiary-25\",\n purple: \"bg-secondary-300\"\n};\n\nconst stringToVariant = (str: string): keyof typeof variants => {\n const variantKeys = Object.keys(variants) as Array<keyof typeof variants>;\n // Let's log some values to understand what's happening\n const hash = str\n .split(\"\")\n .reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0);\n\n const index = Math.abs(hash) % variantKeys.length;\n const selectedVariant = variantKeys[index];\n\n return selectedVariant;\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, iconName, children, ...props }, ref) => {\n const finalVariant =\n variant ||\n (typeof children === \"string\" ? stringToVariant(children) : \"pink\");\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-2\",\n \"rounded px-2 py-1.5\",\n \"text-sm font-medium\",\n variants[finalVariant],\n className\n )}\n {...props}\n >\n {iconName && <Icon size={16} name={iconName} />}\n <Text variant=\"body-xxs-semibold\" className=\"mt-0.5\">\n {children}\n </Text>\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n delayDuration?: number;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Duration in ms for long press on mobile devices */\n longPressDuration?: number;\n}\n\nexport function Tooltip({\n content,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n delayDuration = 200,\n defaultOpen,\n open: controlledOpen,\n onOpenChange,\n longPressDuration = 500\n}: TooltipProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen || false);\n let longPressTimer: Timer | null = null;\n\n const open = controlledOpen ?? isOpen;\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!controlledOpen) {\n setIsOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const handleTouchStart = useCallback(() => {\n const timer = setTimeout(() => {\n handleOpenChange(true);\n }, longPressDuration);\n longPressTimer = timer;\n }, [handleOpenChange, longPressDuration]);\n\n const handleTouchEnd = useCallback(() => {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n // Keep tooltip open for a brief moment after touch\n setTimeout(() => handleOpenChange(false), 1500);\n }, [longPressTimer, handleOpenChange]);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n <span\n tabIndex={0}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onTouchCancel={handleTouchEnd}\n >\n {children}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(\n \"z-50 overflow-hidden rounded-lg\",\n \"bg-primary px-3 py-1.5\",\n \"text-xs text-white\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"select-none\",\n \"max-w-60\",\n \"touch-none\", // Prevent touch events from interfering with scrolling\n className\n )}\n >\n {typeof content === \"string\" ? (\n <Text variant=\"body-default-medium\" color=\"white\">\n {content}\n </Text>\n ) : (\n content\n )}\n <TooltipPrimitive.Arrow\n className=\"fill-text-primary\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n","import type { KeyboardEvent } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Badge } from \"./Badge\";\nimport { Text } from \"./Text\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type OptionProps = {\n label: React.ReactNode;\n value: string;\n /** Optional color override for specific items like \"Logout\" in red */\n color?: \"default\" | \"danger\";\n /** Optional disabled state */\n disabled?: boolean;\n onChange?: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n selected?: boolean;\n className?: string;\n /** ID for accessibility */\n id?: string;\n /** ARIA role */\n role?: string;\n /** ARIA selected state */\n \"aria-selected\"?: boolean;\n /** Current search value for highlighting matches */\n searchValue?: string;\n /** Optional tooltip content */\n tooltip?: React.ReactNode;\n onClick?: () => void;\n badge?: React.ReactNode;\n};\n\nfunction HighlightedText({\n text,\n highlight\n}: {\n text: string;\n highlight: string;\n}) {\n if (!highlight) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${highlight})`, \"i\"));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === highlight.toLowerCase() ? (\n <span key={i} className=\"font-bold\">\n {part}\n </span>\n ) : (\n part\n )\n )}\n </>\n );\n}\n\nexport const Option = React.forwardRef<HTMLButtonElement, OptionProps>(\n (\n {\n value,\n label,\n onChange,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n selected,\n color,\n disabled,\n className,\n id,\n role,\n \"aria-selected\": ariaSelected,\n searchValue = \"\",\n tooltip,\n onClick,\n badge\n },\n ref\n ) => {\n const content = (\n <button\n ref={ref}\n type=\"button\"\n id={id}\n role={role}\n aria-selected={ariaSelected}\n disabled={disabled}\n className={cn(\n \"relative w-full text-left px-2 py-1.5 text-sm rounded outline-none\",\n \"cursor-pointer hover:bg-gray-100\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n selected && \"bg-gray-100\",\n \"flex items-center gap-2\",\n className\n )}\n onClick={() => {\n onChange?.(value);\n onClick?.();\n }}\n onKeyDown={onKeyDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Text\n variant=\"body-default-medium\"\n color={color === \"danger\" ? \"danger\" : \"inherit\"}\n >\n {typeof label === \"string\" ? (\n <HighlightedText text={label} highlight={searchValue} />\n ) : (\n label\n )}\n </Text>\n {badge && <Badge>{badge}</Badge>}\n </button>\n );\n return tooltip ? <Tooltip content={tooltip}>{content}</Tooltip> : content;\n }\n);\n","import * as Popover from \"@radix-ui/react-popover\";\nimport type { KeyboardEvent } from \"react\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Accordion } from \"./Accordion\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\nimport { Input } from \"./Input\";\nimport type { OptionProps } from \"./Option\";\nimport { Option } from \"./Option\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type ComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n placeholder?: string;\n value?: string;\n /** Callback on keyboard input, used for auto complete */\n onChange?: (value: string) => void;\n /** Callback when an option is selected from the combobox */\n onSelected: (value: string) => void;\n end?: React.ReactNode;\n className?: string;\n /** Label text for the combobox */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** ID for accessibility */\n id?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n autocomplete?: boolean;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for async options */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n};\n\nexport function Combobox({\n options,\n placeholder = \"Select an item...\",\n value,\n onChange,\n onSelected,\n end,\n className,\n label,\n labelClassName,\n id,\n disabled,\n container,\n autocomplete = false,\n loading = false,\n error = false,\n errorMessage,\n noOptionsMessage\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [selectedValue, setSelectedValue] = useState<string | undefined>(value);\n const [searchText, setSearchText] = useState(\"\");\n\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = useMemo(\n () => options.length > 0 && \"options\" in options[0],\n [options]\n );\n\n const flatOptions = useMemo(() => {\n if (!options.length) return [];\n if (!isGrouped) return options as OptionProps[];\n return (options as OptionGroup[]).reduce<OptionProps[]>(\n (acc, group) => [...acc, ...group.options],\n []\n );\n }, [isGrouped, options]);\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) =>\n searchText && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchText.toLowerCase())\n : true\n );\n }, [flatOptions, searchText]);\n\n const filteredGroups = useMemo(() => {\n if (!isGrouped) {\n return visibleOptions.length > 0\n ? [{ label: \"\", options: visibleOptions }]\n : [];\n }\n\n return (options as OptionGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) =>\n searchText && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchText.toLowerCase())\n : true\n )\n }))\n .filter((group) => group.options.length > 0);\n }, [isGrouped, options, searchText, visibleOptions]);\n\n const selectedOption = useMemo(\n () => flatOptions.find((opt) => opt.value === selectedValue),\n [selectedValue, flatOptions]\n );\n\n const displayText = useMemo(() => {\n if (open && searchText) return searchText;\n if (selectedOption) return selectedOption.label?.toString() || \"\";\n return selectedValue || \"\";\n }, [open, searchText, selectedOption]);\n\n const setDefaultSearchText = useCallback(() => {\n setSearchText(selectedOption?.label?.toString() || \"\");\n }, [selectedOption]);\n\n useEffect(() => {\n setDefaultSearchText();\n }, [selectedOption]);\n\n const suggestion = useMemo(() => {\n if (!autocomplete || !searchText || !open) return \"\";\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchText.toLowerCase()) &&\n opt.label.toLowerCase() !== searchText.toLowerCase()\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchText, visibleOptions, open]);\n\n const handleOptionSelected = useCallback(\n (optionValue: string) => {\n setSelectedValue(optionValue);\n onChange?.(displayText);\n setSearchText(\"\");\n setOpen(false);\n\n onSelected(optionValue);\n setHighlightedIndex(-1);\n },\n [onSelected]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(true);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(0);\n } else {\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(false);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(visibleOptions.length - 1);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n }\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => Math.max(0, prev - 10));\n }\n break;\n\n case \"PageDown\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) =>\n Math.min(visibleOptions.length - 1, prev + 10)\n );\n }\n break;\n\n case \"Home\":\n if (event.shiftKey) {\n break;\n }\n event.preventDefault();\n if (open) {\n setHighlightedIndex(0);\n }\n break;\n\n case \"End\":\n if (event.shiftKey) {\n break;\n }\n event.preventDefault();\n if (open) {\n setHighlightedIndex(visibleOptions.length - 1);\n }\n break;\n\n case \"Enter\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelected(visibleOptions[highlightedIndex].value);\n } else if (autocomplete && suggestion && searchText) {\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchText.toLowerCase())\n );\n if (matchingOption) {\n handleOptionSelected(matchingOption.value);\n }\n }\n break;\n\n case \"Tab\":\n if (!open) {\n event.preventDefault();\n setOpen(true);\n setHighlightedIndex(0);\n } else if (\n highlightedIndex >= 0 &&\n visibleOptions[highlightedIndex]\n ) {\n event.preventDefault();\n handleOptionSelected(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n setDefaultSearchText();\n break;\n }\n },\n [\n open,\n highlightedIndex,\n visibleOptions,\n suggestion,\n searchText,\n handleOptionSelected,\n autocomplete\n ]\n );\n\n const handleOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n break;\n\n case \"Enter\":\n case \"Tab\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelected(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n setDefaultSearchText();\n inputRef.current?.focus();\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionSelected]\n );\n\n // Keep input focused when dropdown is open\n useEffect(() => {\n if (open) {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n // Move cursor to end of text\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }, [open]);\n\n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!open) {\n setHighlightedIndex(-1);\n }\n }, [open]);\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && highlightedIndex >= 0 && listRef.current) {\n const highlightedOption = listRef.current.querySelector(\n `[id=\"${id}-option-${highlightedIndex}\"]`\n ) as HTMLElement;\n\n if (highlightedOption) {\n highlightedOption.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\"\n });\n }\n }\n }, [highlightedIndex, open, id]);\n\n const getSelectedOption = useCallback(\n (option: OptionProps) => {\n if (!open) return value === option.value;\n\n const index = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n\n // If using keyboard navigation, show that highlight\n if (highlightedIndex >= 0) {\n return index === highlightedIndex;\n }\n\n // If no option is highlighted, highlight the first one\n if (highlightedIndex === -1) {\n return index === 0;\n }\n\n return false;\n },\n [open, selectedValue, highlightedIndex, visibleOptions]\n );\n\n // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\n\n return (\n <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setDefaultSearchText();\n setHighlightedIndex(-1);\n } else {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }\n }}\n >\n <div\n className={`relative w-full font-sans text-secondary ${className}`}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n >\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"w-full text-left\"\n disabled={disabled}\n >\n {autocomplete ? (\n <AutocompleteInput\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayText}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchText(value);\n onChange?.(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className={cn(\"flex-1\", className)}\n forceShowFocusRing={open}\n disabled={disabled}\n aria-autocomplete=\"list\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n ) : (\n <Input\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayText}\n onChange={(e) => {\n setSearchText(e.target.value);\n onChange?.(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className={cn(\"flex-1\", className)}\n forceShowFocusRing={open}\n disabled={disabled}\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n )}\n </button>\n </Popover.Trigger>\n\n <Popover.Portal container={container}>\n <Popover.Content\n className=\"w-[--radix-popover-trigger-width] bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n e.preventDefault();\n setOpen(false);\n setDefaultSearchText();\n setHighlightedIndex(-1);\n }}\n >\n <div\n ref={listRef}\n className=\"max-h-60 overflow-y-auto flex flex-col items-start outline-none\"\n role=\"listbox\"\n id={`${id}-listbox`}\n aria-label={label}\n aria-busy={loading}\n >\n {error ? (\n <div className=\"px-2 py-1.5 text-sm text-red-500\">\n {errorMessage || \"Failed to load options\"}\n </div>\n ) : loading ? (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n Loading...\n </div>\n ) : visibleOptions.length > 0 && isGrouped ? (\n <Accordion\n type=\"multiple\"\n className=\"gap-0\"\n defaultValue={filteredGroups.map((group) => group.label)}\n items={filteredGroups.map((group, groupIndex) => ({\n title: group.label,\n value: group.label,\n content: (\n <div>\n {group.options.map((option, optionIndex) => {\n const isSelected = getSelectedOption(option);\n return (\n <Option\n key={`${groupIndex}-${optionIndex}`}\n onChange={handleOptionSelected}\n onKeyDown={handleOptionKeyDown}\n value={option.value}\n label={option.label}\n className={cn(\"pl-4\")}\n selected={isSelected}\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={isSelected}\n searchValue={searchText}\n />\n );\n })}\n </div>\n )\n }))}\n />\n ) : visibleOptions.length > 0 && !isGrouped ? (\n options.map((option, optionIndex) => {\n // @ts-expect-error TODO: Fix this\n const isSelected = getSelectedOption(option);\n return (\n <Option\n key={optionIndex}\n onChange={handleOptionSelected}\n onKeyDown={handleOptionKeyDown}\n // @ts-expect-error TODO: Fix this\n value={option.value}\n label={option.label}\n className={cn(\"pl-4\")}\n selected={isSelected}\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={isSelected}\n searchValue={searchText}\n />\n );\n })\n ) : (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n {noOptionsMessage || \"No results found\"}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n}\n"]}
@@ -10,7 +10,10 @@ type ComboboxProps = {
10
10
  options: OptionProps[] | OptionGroup[];
11
11
  placeholder?: string;
12
12
  value?: string;
13
- onChange: (value: string) => void;
13
+ /** Callback on keyboard input, used for auto complete */
14
+ onChange?: (value: string) => void;
15
+ /** Callback when an option is selected from the combobox */
16
+ onSelected: (value: string) => void;
14
17
  end?: React__default.ReactNode;
15
18
  className?: string;
16
19
  /** Label text for the combobox */
@@ -33,6 +36,6 @@ type ComboboxProps = {
33
36
  /** Message to show when no options are available */
34
37
  noOptionsMessage?: string;
35
38
  };
36
- declare const Combobox: ({ options, placeholder, value, onChange, end, className, label, labelClassName, id, disabled, container, autocomplete, loading, error, errorMessage, noOptionsMessage }: ComboboxProps) => React__default.JSX.Element;
39
+ declare function Combobox({ options, placeholder, value, onChange, onSelected, end, className, label, labelClassName, id, disabled, container, autocomplete, loading, error, errorMessage, noOptionsMessage }: ComboboxProps): React__default.JSX.Element;
37
40
 
38
41
  export { Combobox, type ComboboxProps, type OptionGroup };
@@ -10,7 +10,10 @@ type ComboboxProps = {
10
10
  options: OptionProps[] | OptionGroup[];
11
11
  placeholder?: string;
12
12
  value?: string;
13
- onChange: (value: string) => void;
13
+ /** Callback on keyboard input, used for auto complete */
14
+ onChange?: (value: string) => void;
15
+ /** Callback when an option is selected from the combobox */
16
+ onSelected: (value: string) => void;
14
17
  end?: React__default.ReactNode;
15
18
  className?: string;
16
19
  /** Label text for the combobox */
@@ -33,6 +36,6 @@ type ComboboxProps = {
33
36
  /** Message to show when no options are available */
34
37
  noOptionsMessage?: string;
35
38
  };
36
- declare const Combobox: ({ options, placeholder, value, onChange, end, className, label, labelClassName, id, disabled, container, autocomplete, loading, error, errorMessage, noOptionsMessage }: ComboboxProps) => React__default.JSX.Element;
39
+ declare function Combobox({ options, placeholder, value, onChange, onSelected, end, className, label, labelClassName, id, disabled, container, autocomplete, loading, error, errorMessage, noOptionsMessage }: ComboboxProps): React__default.JSX.Element;
37
40
 
38
41
  export { Combobox, type ComboboxProps, type OptionGroup };