@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 l=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),icons=require('@deckai/icons');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var l__default=/*#__PURE__*/_interopDefault(l);function i(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var S={sm:"h-4",md:"h-6",lg:"h-8"},P={sm:"w-20",md:"w-32",lg:"w-48"},T={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},f=l__default.default.forwardRef(({variant:e="text",size:t="md",lines:r=1,className:s,animate:o=true},a)=>{let n="bg-secondary-50 rounded-lg overflow-hidden",p=o?"animate-pulse":"",x=typeof t=="number"?(y=>({height:`${y}px`,width:e==="avatar"||e==="image"?`${y}px`:undefined}))(t):undefined,d=()=>{switch(e){case "text":return l__default.default.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:r}).map((y,u)=>l__default.default.createElement("div",{key:u,style:x,className:i(n,p,typeof t=="string"?S[t]:undefined,u===r-1&&r>1?"w-3/4":"w-full",s)})));case "image":return l__default.default.createElement("div",{style:x,className:i(n,p,(!x||!s)&&"aspect-square w-full max-w-[300px]",s)});case "button":return l__default.default.createElement("div",{style:x,className:i(n,p,typeof t=="string"&&[S[t],P[t]],s)});case "card":return l__default.default.createElement("div",{className:i("flex flex-col gap-4 p-6 border border-stroke rounded-xl",s)},l__default.default.createElement("div",{className:i(n,p,"w-16 h-16 rounded-full")}),l__default.default.createElement("div",{className:"space-y-2"},l__default.default.createElement("div",{className:i(n,p,"h-6 w-3/4")}),l__default.default.createElement("div",{className:i(n,p,"h-4 w-1/2")})),l__default.default.createElement("div",{className:"space-y-2"},l__default.default.createElement("div",{className:i(n,p,"h-4 w-full")}),l__default.default.createElement("div",{className:i(n,p,"h-4 w-full")}),l__default.default.createElement("div",{className:i(n,p,"h-4 w-2/3")})));case "avatar":return l__default.default.createElement("div",{style:x,className:i(n,p,"rounded-full",{[T.sm]:t==="sm",[T.md]:t==="md",[T.lg]:t==="lg"},s)});default:return null}};return l__default.default.createElement("div",{ref:a,className:i("w-full",s)},d())});f.displayName="Fallback";var b={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]"},$={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]"}},h=e=>String(e),w=(e,t=24)=>{let r=[],s={};if(e===undefined){let o=h(t);o?r.push(b[o]):(s.height=`${t}px`,s.width=`${t}px`);}if(typeof e=="number"){let o=h(e);o?r.push(b[o]):(s.height=`${e}px`,s.width=`${e}px`);}if(Array.isArray(e)){let o=h(t),a=[o&&b[o]||`h-[${t}px] w-[${t}px]`];e.forEach(n=>{if(typeof n=="string"){let[p,m]=n.split(":"),x=parseInt(m,10),d=h(x);r.push(d&&$[p]?.[d]||`${p}:h-[${x}px] ${p}:w-[${x}px]`);}}),r.push(...a);}if(typeof e=="string"){let[o,a]=e.split(":"),n=parseInt(a,10),p=h(n);r.push(p&&$[o]?.[p]||`${o}:h-[${n}px] ${o}:w-[${n}px]`);}return {responsiveSizeClasses:r.join(" "),responsiveSizeStyles:s}};var k={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)"},M=l__default.default.forwardRef(({name:e,size:t=24,color:r="primary",title:s,className:o,style:a={},...n},p)=>{let m=icons.IconMap[e],{responsiveSizeClasses:x,responsiveSizeStyles:d}=w(t,24);return l__default.default.createElement("div",{className:i("flex justify-center items-center",x,o),style:{"--icon-stroke":k[r],...d,...a}},l__default.default.createElement(m,{ref:p,"aria-hidden":!s,"aria-label":s,stroke:e.includes("filled")?undefined:k[r],...n}))});M.displayName="Icon";var L=({icon:e,size:t=40,className:r})=>{let s=e.match(/<svg[^>]*>([\s\S]*?)<\/svg>/),{responsiveSizeClasses:o,responsiveSizeStyles:a}=w(t,40);if(!s)return l__default.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)});let n=e.match(/<svg([^>]*)>/),m=(n?n[1]:"").match(/viewBox=["']([^"']*)["']/),x=m?m[1]:"0 0 40 40";return l__default.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)},l__default.default.createElement("svg",{width:"100%",height:"100%",viewBox:x,preserveAspectRatio:"xMidYMid meet",dangerouslySetInnerHTML:{__html:s[1]}}))};L.displayName="IconRenderer";var z={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},B=e=>{let[t,r]=e.split("-");return t==="heading"?z[r]||"p":t==="label"?"label":"p"},j={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},K=e=>e?(Array.isArray(e)?e:[e]).map(r=>{if(r.includes(":")){let[s,o]=r.split(":");return `${s}:text-${o}`}return `text-${r}`}).join(" "):"text-body-default",g=l__default.default.forwardRef(({variant:e="body-default",color:t="primary",as:r,className:s,children:o,weight:a,...n},p)=>{let m=K(e),x=t==="inherit"?"text-inherit":`text-${t}`,d=l__default.default.useMemo(()=>{let u=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return B(u)},[e]);return l__default.default.createElement(r||d,{ref:p,className:`
1
+ 'use strict';var l=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),icons=require('@deckai/icons');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var l__default=/*#__PURE__*/_interopDefault(l);function i(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var S={sm:"h-4",md:"h-6",lg:"h-8"},P={sm:"w-20",md:"w-32",lg:"w-48"},T={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},f=l__default.default.forwardRef(({variant:e="text",size:t="md",lines:r=1,className:s,animate:o=true},a)=>{let p="bg-secondary-50 rounded-lg overflow-hidden",n=o?"animate-pulse":"",x=typeof t=="number"?(g=>({height:`${g}px`,width:e==="avatar"||e==="image"?`${g}px`:void 0}))(t):void 0,d=()=>{switch(e){case "text":return l__default.default.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:r}).map((g,u)=>l__default.default.createElement("div",{key:u,style:x,className:i(p,n,typeof t=="string"?S[t]:void 0,u===r-1&&r>1?"w-3/4":"w-full",s)})));case "image":return l__default.default.createElement("div",{style:x,className:i(p,n,(!x||!s)&&"aspect-square w-full max-w-[300px]",s)});case "button":return l__default.default.createElement("div",{style:x,className:i(p,n,typeof t=="string"&&[S[t],P[t]],s)});case "card":return l__default.default.createElement("div",{className:i("flex flex-col gap-4 p-6 border border-stroke rounded-xl",s)},l__default.default.createElement("div",{className:i(p,n,"w-16 h-16 rounded-full")}),l__default.default.createElement("div",{className:"space-y-2"},l__default.default.createElement("div",{className:i(p,n,"h-6 w-3/4")}),l__default.default.createElement("div",{className:i(p,n,"h-4 w-1/2")})),l__default.default.createElement("div",{className:"space-y-2"},l__default.default.createElement("div",{className:i(p,n,"h-4 w-full")}),l__default.default.createElement("div",{className:i(p,n,"h-4 w-full")}),l__default.default.createElement("div",{className:i(p,n,"h-4 w-2/3")})));case "avatar":return l__default.default.createElement("div",{style:x,className:i(p,n,"rounded-full",{[T.sm]:t==="sm",[T.md]:t==="md",[T.lg]:t==="lg"},s)});default:return null}};return l__default.default.createElement("div",{ref:a,className:i("w-full",s)},d())});f.displayName="Fallback";var b={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]"},$={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]"}},h=e=>String(e),w=(e,t=24)=>{let r=[],s={};if(e===void 0){let o=h(t);o?r.push(b[o]):(s.height=`${t}px`,s.width=`${t}px`);}if(typeof e=="number"){let o=h(e);o?r.push(b[o]):(s.height=`${e}px`,s.width=`${e}px`);}if(Array.isArray(e)){let o=h(t),a=[o&&b[o]||`h-[${t}px] w-[${t}px]`];e.forEach(p=>{if(typeof p=="string"){let[n,c]=p.split(":"),x=parseInt(c,10),d=h(x);r.push(d&&$[n]?.[d]||`${n}:h-[${x}px] ${n}:w-[${x}px]`);}}),r.push(...a);}if(typeof e=="string"){let[o,a]=e.split(":"),p=parseInt(a,10),n=h(p);r.push(n&&$[o]?.[n]||`${o}:h-[${p}px] ${o}:w-[${p}px]`);}return {responsiveSizeClasses:r.join(" "),responsiveSizeStyles:s}};var k={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)"},M=l__default.default.forwardRef(({name:e,size:t=24,color:r="primary",title:s,className:o,style:a={},...p},n)=>{let c=icons.IconMap[e],{responsiveSizeClasses:x,responsiveSizeStyles:d}=w(t,24);return l__default.default.createElement("div",{className:i("flex justify-center items-center",x,o),style:{"--icon-stroke":k[r],...d,...a}},l__default.default.createElement(c,{ref:n,"aria-hidden":!s,"aria-label":s,stroke:e.includes("filled")?void 0:k[r],...p}))});M.displayName="Icon";function L({icon:e,size:t=40,className:r}){let s=e.match(/<svg[^>]*>([\s\S]*?)<\/svg>/),{responsiveSizeClasses:o,responsiveSizeStyles:a}=w(t,40);if(!s)return l__default.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)});let p=e.match(/<svg([^>]*)>/),c=(p?p[1]:"").match(/viewBox=["']([^"']*)["']/),x=c?c[1]:"0 0 40 40";return l__default.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)},l__default.default.createElement("svg",{width:"100%",height:"100%",viewBox:x,preserveAspectRatio:"xMidYMid meet",dangerouslySetInnerHTML:{__html:s[1]}}))}L.displayName="IconRenderer";var C="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var z={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},B=e=>{let[t,r]=e.split("-");return t==="heading"?z[r]||"p":t==="label"?"label":"p"},j={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},K=e=>e?(Array.isArray(e)?e:[e]).map(r=>{if(r.includes(":")){let[s,o]=r.split(":");return `${s}:text-${o}`}return `text-${r}`}).join(" "):"text-body-default",y=l__default.default.forwardRef(({variant:e="body-default",color:t="primary",as:r,className:s,children:o,weight:a,...p},n)=>{let c=K(e),x=t==="inherit"?"text-inherit":`text-${t}`,d=l__default.default.useMemo(()=>{let u=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return B(u)},[e]);return l__default.default.createElement(r||d,{ref:n,className:`
2
2
  font-sans antialiased
3
- ${m}
3
+ ${c}
4
4
  ${x}
5
5
  ${a&&`!${j[a]}`}
6
6
  ${s}
7
- `,...n},o)});g.displayName="Text";var C="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var A=({children:e,color:t="inherit",variant:r="body-default-semibold",href:s,className:o,...a})=>l__default.default.createElement(g,{variant:r,color:t},l__default.default.createElement("a",{href:s,className:i("hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline",C,o),...a},e));var Me=({icon:e,children:t,href:r,isLoading:s,...o})=>s?l__default.default.createElement("div",{className:"row gap-2 flex items-center"},l__default.default.createElement(f,{variant:"image",size:30,className:"rounded-full"}),l__default.default.createElement(f,{variant:"text",size:"sm",className:"w-32"})):l__default.default.createElement("div",{className:"row gap-2 flex items-center"},l__default.default.createElement("div",{className:"bg-secondary-400 rounded-full p-2.5 items-center justify-center"},e?l__default.default.createElement(L,{icon:e,size:18,className:"text-primary"}):l__default.default.createElement(M,{name:"link",size:18,className:"text-primary"})),r?l__default.default.createElement(A,{className:"hover:underline",href:r,...o,variant:["body-default-semibold","md:body-default-semibold"]},t):l__default.default.createElement(g,{variant:"body-default-semibold"},t));exports.ContactItem=Me;//# sourceMappingURL=ContactItem.cjs.map
7
+ `,...p},o)});y.displayName="Text";function A({children:e,color:t="inherit",variant:r="body-default-semibold",href:s,className:o,...a}){return l__default.default.createElement(y,{variant:r,color:t},l__default.default.createElement("a",{href:s,className:i("hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline text-ellipsis",C,o),...a},e))}function ue({icon:e,children:t,href:r,isLoading:s,...o}){return s?l__default.default.createElement("div",{className:"row gap-2 flex items-center"},l__default.default.createElement(f,{variant:"image",size:30,className:"rounded-full"}),l__default.default.createElement(f,{variant:"text",size:"sm",className:"w-32"})):l__default.default.createElement("div",{className:"row gap-2 flex items-center min-w-0"},l__default.default.createElement("div",{className:"flex-shrink-0 bg-secondary-400 rounded-full p-2.5 items-center justify-center"},e?l__default.default.createElement(L,{icon:e,size:18,className:"text-primary"}):l__default.default.createElement(M,{name:"link",size:18,className:"text-primary"})),l__default.default.createElement("div",{className:"min-w-0 flex-1"},r?l__default.default.createElement(A,{className:"hover:underline truncate block text-primary",href:r,...o,variant:["body-default-semibold","md:body-default-semibold"]},t):l__default.default.createElement(y,{variant:"body-default-semibold",className:"truncate block text-primary"},t)))}exports.ContactItem=ue;//# sourceMappingURL=ContactItem.cjs.map
8
8
  //# sourceMappingURL=ContactItem.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/IconRenderer.tsx","../../src/components/Link.tsx","../../src/components/Text.tsx","../../src/utils/tailwind.ts","../../src/components/ContactItem.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","name","color","title","style","props","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","IconRenderer","icon","svgMatch","attributesMatch","viewBoxMatch","viewBox","HEADING_ELEMENT_MAP","getElementFromVariant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","focusRingStyles","Link","href","ContactItem","isLoading","linkProps"],"mappings":"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","file":"ContactItem.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","import React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type FallbackVariant = \"text\" | \"image\" | \"button\" | \"card\" | \"avatar\";\nexport type FallbackSize = \"sm\" | \"md\" | \"lg\" | number;\n\nexport type FallbackProps = {\n /**\n * The type of content being loaded\n */\n variant?: FallbackVariant;\n /**\n * The size of the fallback element\n * Can be a predefined size ('sm' | 'md' | 'lg') or a custom pixel value\n */\n size?: FallbackSize;\n /**\n * Whether to show multiple lines (only applies to text variant)\n */\n lines?: number;\n /**\n * Additional classes to apply to the fallback\n */\n className?: string;\n /**\n * Whether to show the loading animation\n */\n animate?: boolean;\n};\n\n// Updated to match existing component sizes\nconst sizeMap = {\n sm: \"h-4\", // 16px\n md: \"h-6\", // 24px\n lg: \"h-8\" // 32px\n};\n\n// Updated to match existing component sizes\nconst widthMap = {\n sm: \"w-20\", // 80px\n md: \"w-32\", // 128px\n lg: \"w-48\" // 192px\n};\n\n// Updated to match Avatar sizes\nconst avatarSizeMap = {\n sm: \"w-8 h-8\", // 32px\n md: \"w-12 h-12\", // 48px\n lg: \"w-16 h-16\" // 64px\n};\n\nexport const Fallback = React.forwardRef<HTMLDivElement, FallbackProps>(\n (\n { variant = \"text\", size = \"md\", lines = 1, className, animate = true },\n ref\n ) => {\n const baseClasses = \"bg-secondary-50 rounded-lg overflow-hidden\";\n const animationClasses = animate ? \"animate-pulse\" : \"\";\n\n const getCustomSizeStyle = (size: number) => ({\n height: `${size}px`,\n width:\n variant === \"avatar\" || variant === \"image\" ? `${size}px` : undefined\n });\n\n const customStyle =\n typeof size === \"number\" ? getCustomSizeStyle(size) : undefined;\n\n const renderContent = () => {\n switch (variant) {\n case \"text\":\n return (\n <div className=\"flex flex-col gap-2\">\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" ? sizeMap[size] : undefined,\n index === lines - 1 && lines > 1 ? \"w-3/4\" : \"w-full\",\n className\n )}\n />\n ))}\n </div>\n );\n\n case \"image\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n (!customStyle || !className) &&\n \"aspect-square w-full max-w-[300px]\",\n className\n )}\n />\n );\n\n case \"button\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" && [sizeMap[size], widthMap[size]],\n className\n )}\n />\n );\n\n case \"card\":\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 p-6 border border-stroke rounded-xl\",\n className\n )}\n >\n <div\n className={cn(\n baseClasses,\n animationClasses,\n \"w-16 h-16 rounded-full\"\n )}\n />\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-6 w-3/4\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-1/2\")}\n />\n </div>\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-2/3\")}\n />\n </div>\n </div>\n );\n\n case \"avatar\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n \"rounded-full\",\n {\n [avatarSizeMap.sm]: size === \"sm\",\n [avatarSizeMap.md]: size === \"md\",\n [avatarSizeMap.lg]: size === \"lg\"\n },\n className\n )}\n />\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n {renderContent()}\n </div>\n );\n }\n);\n\nFallback.displayName = \"Fallback\";\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 { cn } from \"../utils\";\nimport { getResponsiveSize, ResponsiveSize } from \"../utils/responsive\";\n\nexport type IconRendererProps = {\n icon: string;\n size?: ResponsiveSize | ResponsiveSize[];\n className?: string;\n};\n\nexport const IconRenderer = ({\n icon,\n size = 40,\n className\n}: IconRendererProps) => {\n // Extract SVG content from the string (everything between <svg> and </svg>)\n const svgMatch = icon.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/);\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 40\n );\n\n if (!svgMatch) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n />\n );\n }\n\n // Extract attributes from the SVG tag\n const attributesMatch = icon.match(/<svg([^>]*)>/);\n const attributesString = attributesMatch ? attributesMatch[1] : \"\";\n\n // Parse viewBox\n const viewBoxMatch = attributesString.match(/viewBox=[\"']([^\"']*)[\"']/);\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 40 40\";\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={viewBox}\n preserveAspectRatio=\"xMidYMid meet\"\n dangerouslySetInnerHTML={{ __html: svgMatch[1] }}\n />\n </div>\n );\n};\n\nIconRenderer.displayName = \"IconRenderer\";\n","import React from \"react\";\nimport { Text, TextProps } from \"./Text\";\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type LinkProps = {\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n} & Pick<TextProps, \"variant\" | \"color\"> &\n React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const Link = ({\n children,\n color = \"inherit\",\n variant = \"body-default-semibold\",\n href,\n className,\n ...props\n}: LinkProps) => (\n <Text variant={variant} color={color}>\n <a\n href={href}\n className={cn(\n \"hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline\",\n focusRingStyles,\n className\n )}\n {...props}\n >\n {children}\n </a>\n </Text>\n);\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 { 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 React, { HTMLAttributes } from \"react\";\nimport { Fallback } from \"./Fallback\";\nimport { Icon } from \"./Icon\";\nimport { IconRenderer } from \"./IconRenderer\";\nimport { Link } from \"./Link\";\nimport { Text } from \"./Text\";\n\nexport type ContactItemProps = {\n icon?: string;\n children?: React.ReactNode;\n href?: string;\n isLoading?: boolean;\n} & Omit<HTMLAttributes<HTMLAnchorElement>, \"color\">;\n\nexport const ContactItem = ({\n icon,\n children,\n href,\n isLoading,\n ...linkProps\n}: ContactItemProps) => {\n return isLoading ? (\n <div className=\"row gap-2 flex items-center\">\n <Fallback variant=\"image\" size={30} className=\"rounded-full\" />\n <Fallback variant=\"text\" size=\"sm\" className=\"w-32\" />\n </div>\n ) : (\n <div className=\"row gap-2 flex items-center\">\n <div className=\"bg-secondary-400 rounded-full p-2.5 items-center justify-center\">\n {icon ? (\n <IconRenderer icon={icon} size={18} className=\"text-primary\" />\n ) : (\n <Icon name=\"link\" size={18} className=\"text-primary\" />\n )}\n </div>\n {href ? (\n <Link\n className=\"hover:underline\"\n href={href}\n {...linkProps}\n variant={[\"body-default-semibold\", \"md:body-default-semibold\"]}\n >\n {children}\n </Link>\n ) : (\n <Text variant=\"body-default-semibold\">{children}</Text>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/IconRenderer.tsx","../../src/utils/tailwind.ts","../../src/components/Text.tsx","../../src/components/Link.tsx","../../src/components/ContactItem.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","name","color","title","style","props","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","IconRenderer","icon","svgMatch","attributesMatch","viewBoxMatch","viewBox","focusRingStyles","HEADING_ELEMENT_MAP","getElementFromVariant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Link","href","ContactItem","isLoading","linkProps"],"mappings":"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","file":"ContactItem.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","import React from \"react\";\n\nimport { cn } from \"../utils\";\n\nexport type FallbackVariant = \"text\" | \"image\" | \"button\" | \"card\" | \"avatar\";\nexport type FallbackSize = \"sm\" | \"md\" | \"lg\" | number;\n\nexport type FallbackProps = {\n /**\n * The type of content being loaded\n */\n variant?: FallbackVariant;\n /**\n * The size of the fallback element\n * Can be a predefined size ('sm' | 'md' | 'lg') or a custom pixel value\n */\n size?: FallbackSize;\n /**\n * Whether to show multiple lines (only applies to text variant)\n */\n lines?: number;\n /**\n * Additional classes to apply to the fallback\n */\n className?: string;\n /**\n * Whether to show the loading animation\n */\n animate?: boolean;\n};\n\n// Updated to match existing component sizes\nconst sizeMap = {\n sm: \"h-4\", // 16px\n md: \"h-6\", // 24px\n lg: \"h-8\" // 32px\n};\n\n// Updated to match existing component sizes\nconst widthMap = {\n sm: \"w-20\", // 80px\n md: \"w-32\", // 128px\n lg: \"w-48\" // 192px\n};\n\n// Updated to match Avatar sizes\nconst avatarSizeMap = {\n sm: \"w-8 h-8\", // 32px\n md: \"w-12 h-12\", // 48px\n lg: \"w-16 h-16\" // 64px\n};\n\nexport const Fallback = React.forwardRef<HTMLDivElement, FallbackProps>(\n (\n { variant = \"text\", size = \"md\", lines = 1, className, animate = true },\n ref\n ) => {\n const baseClasses = \"bg-secondary-50 rounded-lg overflow-hidden\";\n const animationClasses = animate ? \"animate-pulse\" : \"\";\n\n const getCustomSizeStyle = (size: number) => ({\n height: `${size}px`,\n width:\n variant === \"avatar\" || variant === \"image\" ? `${size}px` : undefined\n });\n\n const customStyle =\n typeof size === \"number\" ? getCustomSizeStyle(size) : undefined;\n\n const renderContent = () => {\n switch (variant) {\n case \"text\":\n return (\n <div className=\"flex flex-col gap-2\">\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" ? sizeMap[size] : undefined,\n index === lines - 1 && lines > 1 ? \"w-3/4\" : \"w-full\",\n className\n )}\n />\n ))}\n </div>\n );\n\n case \"image\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n (!customStyle || !className) &&\n \"aspect-square w-full max-w-[300px]\",\n className\n )}\n />\n );\n\n case \"button\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" && [sizeMap[size], widthMap[size]],\n className\n )}\n />\n );\n\n case \"card\":\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 p-6 border border-stroke rounded-xl\",\n className\n )}\n >\n <div\n className={cn(\n baseClasses,\n animationClasses,\n \"w-16 h-16 rounded-full\"\n )}\n />\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-6 w-3/4\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-1/2\")}\n />\n </div>\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-2/3\")}\n />\n </div>\n </div>\n );\n\n case \"avatar\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n \"rounded-full\",\n {\n [avatarSizeMap.sm]: size === \"sm\",\n [avatarSizeMap.md]: size === \"md\",\n [avatarSizeMap.lg]: size === \"lg\"\n },\n className\n )}\n />\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n {renderContent()}\n </div>\n );\n }\n);\n\nFallback.displayName = \"Fallback\";\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 { cn } from \"../utils\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconRendererProps = {\n icon: string;\n size?: ResponsiveSize | ResponsiveSize[];\n className?: string;\n};\n\nexport function IconRenderer({\n icon,\n size = 40,\n className\n}: IconRendererProps) {\n // Extract SVG content from the string (everything between <svg> and </svg>)\n const svgMatch = icon.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/);\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 40\n );\n\n if (!svgMatch) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n />\n );\n }\n\n // Extract attributes from the SVG tag\n const attributesMatch = icon.match(/<svg([^>]*)>/);\n const attributesString = attributesMatch ? attributesMatch[1] : \"\";\n\n // Parse viewBox\n const viewBoxMatch = attributesString.match(/viewBox=[\"']([^\"']*)[\"']/);\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 40 40\";\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={viewBox}\n preserveAspectRatio=\"xMidYMid meet\"\n dangerouslySetInnerHTML={{ __html: svgMatch[1] }}\n />\n </div>\n );\n}\n\nIconRenderer.displayName = \"IconRenderer\";\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 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 React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport type { TextProps } from \"./Text\";\nimport { Text } from \"./Text\";\n\nexport type LinkProps = {\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n} & Pick<TextProps, \"variant\" | \"color\"> &\n React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport function Link({\n children,\n color = \"inherit\",\n variant = \"body-default-semibold\",\n href,\n className,\n ...props\n}: LinkProps) {\n return (\n <Text variant={variant} color={color}>\n <a\n href={href}\n className={cn(\n \"hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline text-ellipsis\",\n focusRingStyles,\n className\n )}\n {...props}\n >\n {children}\n </a>\n </Text>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { Fallback } from \"./Fallback\";\nimport { Icon } from \"./Icon\";\nimport { IconRenderer } from \"./IconRenderer\";\nimport { Link } from \"./Link\";\nimport { Text } from \"./Text\";\n\nexport type ContactItemProps = {\n icon?: string;\n children?: React.ReactNode;\n href?: string;\n isLoading?: boolean;\n} & Omit<HTMLAttributes<HTMLAnchorElement>, \"color\">;\n\nexport function ContactItem({\n icon,\n children,\n href,\n isLoading,\n ...linkProps\n}: ContactItemProps) {\n return isLoading ? (\n <div className=\"row gap-2 flex items-center\">\n <Fallback variant=\"image\" size={30} className=\"rounded-full\" />\n <Fallback variant=\"text\" size=\"sm\" className=\"w-32\" />\n </div>\n ) : (\n <div className=\"row gap-2 flex items-center min-w-0\">\n <div className=\"flex-shrink-0 bg-secondary-400 rounded-full p-2.5 items-center justify-center\">\n {icon ? (\n <IconRenderer icon={icon} size={18} className=\"text-primary\" />\n ) : (\n <Icon name=\"link\" size={18} className=\"text-primary\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <Link\n className=\"hover:underline truncate block text-primary\"\n href={href}\n {...linkProps}\n variant={[\"body-default-semibold\", \"md:body-default-semibold\"]}\n >\n {children}\n </Link>\n ) : (\n <Text\n variant=\"body-default-semibold\"\n className=\"truncate block text-primary\"\n >\n {children}\n </Text>\n )}\n </div>\n </div>\n );\n}\n"]}
@@ -6,6 +6,6 @@ type ContactItemProps = {
6
6
  href?: string;
7
7
  isLoading?: boolean;
8
8
  } & Omit<HTMLAttributes<HTMLAnchorElement>, "color">;
9
- declare const ContactItem: ({ icon, children, href, isLoading, ...linkProps }: ContactItemProps) => React__default.JSX.Element;
9
+ declare function ContactItem({ icon, children, href, isLoading, ...linkProps }: ContactItemProps): React__default.JSX.Element;
10
10
 
11
11
  export { ContactItem, type ContactItemProps };
@@ -6,6 +6,6 @@ type ContactItemProps = {
6
6
  href?: string;
7
7
  isLoading?: boolean;
8
8
  } & Omit<HTMLAttributes<HTMLAnchorElement>, "color">;
9
- declare const ContactItem: ({ icon, children, href, isLoading, ...linkProps }: ContactItemProps) => React__default.JSX.Element;
9
+ declare function ContactItem({ icon, children, href, isLoading, ...linkProps }: ContactItemProps): React__default.JSX.Element;
10
10
 
11
11
  export { ContactItem, type ContactItemProps };
@@ -1,8 +1,8 @@
1
- import l from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {IconMap}from'@deckai/icons';function i(...e){return twMerge(clsx(e))}var S={sm:"h-4",md:"h-6",lg:"h-8"},P={sm:"w-20",md:"w-32",lg:"w-48"},T={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},f=l.forwardRef(({variant:e="text",size:t="md",lines:r=1,className:s,animate:o=true},a)=>{let n="bg-secondary-50 rounded-lg overflow-hidden",p=o?"animate-pulse":"",x=typeof t=="number"?(y=>({height:`${y}px`,width:e==="avatar"||e==="image"?`${y}px`:undefined}))(t):undefined,d=()=>{switch(e){case "text":return l.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:r}).map((y,u)=>l.createElement("div",{key:u,style:x,className:i(n,p,typeof t=="string"?S[t]:undefined,u===r-1&&r>1?"w-3/4":"w-full",s)})));case "image":return l.createElement("div",{style:x,className:i(n,p,(!x||!s)&&"aspect-square w-full max-w-[300px]",s)});case "button":return l.createElement("div",{style:x,className:i(n,p,typeof t=="string"&&[S[t],P[t]],s)});case "card":return l.createElement("div",{className:i("flex flex-col gap-4 p-6 border border-stroke rounded-xl",s)},l.createElement("div",{className:i(n,p,"w-16 h-16 rounded-full")}),l.createElement("div",{className:"space-y-2"},l.createElement("div",{className:i(n,p,"h-6 w-3/4")}),l.createElement("div",{className:i(n,p,"h-4 w-1/2")})),l.createElement("div",{className:"space-y-2"},l.createElement("div",{className:i(n,p,"h-4 w-full")}),l.createElement("div",{className:i(n,p,"h-4 w-full")}),l.createElement("div",{className:i(n,p,"h-4 w-2/3")})));case "avatar":return l.createElement("div",{style:x,className:i(n,p,"rounded-full",{[T.sm]:t==="sm",[T.md]:t==="md",[T.lg]:t==="lg"},s)});default:return null}};return l.createElement("div",{ref:a,className:i("w-full",s)},d())});f.displayName="Fallback";var b={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]"},$={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]"}},h=e=>String(e),w=(e,t=24)=>{let r=[],s={};if(e===undefined){let o=h(t);o?r.push(b[o]):(s.height=`${t}px`,s.width=`${t}px`);}if(typeof e=="number"){let o=h(e);o?r.push(b[o]):(s.height=`${e}px`,s.width=`${e}px`);}if(Array.isArray(e)){let o=h(t),a=[o&&b[o]||`h-[${t}px] w-[${t}px]`];e.forEach(n=>{if(typeof n=="string"){let[p,m]=n.split(":"),x=parseInt(m,10),d=h(x);r.push(d&&$[p]?.[d]||`${p}:h-[${x}px] ${p}:w-[${x}px]`);}}),r.push(...a);}if(typeof e=="string"){let[o,a]=e.split(":"),n=parseInt(a,10),p=h(n);r.push(p&&$[o]?.[p]||`${o}:h-[${n}px] ${o}:w-[${n}px]`);}return {responsiveSizeClasses:r.join(" "),responsiveSizeStyles:s}};var k={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)"},M=l.forwardRef(({name:e,size:t=24,color:r="primary",title:s,className:o,style:a={},...n},p)=>{let m=IconMap[e],{responsiveSizeClasses:x,responsiveSizeStyles:d}=w(t,24);return l.createElement("div",{className:i("flex justify-center items-center",x,o),style:{"--icon-stroke":k[r],...d,...a}},l.createElement(m,{ref:p,"aria-hidden":!s,"aria-label":s,stroke:e.includes("filled")?undefined:k[r],...n}))});M.displayName="Icon";var L=({icon:e,size:t=40,className:r})=>{let s=e.match(/<svg[^>]*>([\s\S]*?)<\/svg>/),{responsiveSizeClasses:o,responsiveSizeStyles:a}=w(t,40);if(!s)return l.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)});let n=e.match(/<svg([^>]*)>/),m=(n?n[1]:"").match(/viewBox=["']([^"']*)["']/),x=m?m[1]:"0 0 40 40";return l.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)},l.createElement("svg",{width:"100%",height:"100%",viewBox:x,preserveAspectRatio:"xMidYMid meet",dangerouslySetInnerHTML:{__html:s[1]}}))};L.displayName="IconRenderer";var z={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},B=e=>{let[t,r]=e.split("-");return t==="heading"?z[r]||"p":t==="label"?"label":"p"},j={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},K=e=>e?(Array.isArray(e)?e:[e]).map(r=>{if(r.includes(":")){let[s,o]=r.split(":");return `${s}:text-${o}`}return `text-${r}`}).join(" "):"text-body-default",g=l.forwardRef(({variant:e="body-default",color:t="primary",as:r,className:s,children:o,weight:a,...n},p)=>{let m=K(e),x=t==="inherit"?"text-inherit":`text-${t}`,d=l.useMemo(()=>{let u=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return B(u)},[e]);return l.createElement(r||d,{ref:p,className:`
1
+ import l from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {IconMap}from'@deckai/icons';function i(...e){return twMerge(clsx(e))}var S={sm:"h-4",md:"h-6",lg:"h-8"},P={sm:"w-20",md:"w-32",lg:"w-48"},T={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},f=l.forwardRef(({variant:e="text",size:t="md",lines:r=1,className:s,animate:o=true},a)=>{let p="bg-secondary-50 rounded-lg overflow-hidden",n=o?"animate-pulse":"",x=typeof t=="number"?(g=>({height:`${g}px`,width:e==="avatar"||e==="image"?`${g}px`:void 0}))(t):void 0,d=()=>{switch(e){case "text":return l.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:r}).map((g,u)=>l.createElement("div",{key:u,style:x,className:i(p,n,typeof t=="string"?S[t]:void 0,u===r-1&&r>1?"w-3/4":"w-full",s)})));case "image":return l.createElement("div",{style:x,className:i(p,n,(!x||!s)&&"aspect-square w-full max-w-[300px]",s)});case "button":return l.createElement("div",{style:x,className:i(p,n,typeof t=="string"&&[S[t],P[t]],s)});case "card":return l.createElement("div",{className:i("flex flex-col gap-4 p-6 border border-stroke rounded-xl",s)},l.createElement("div",{className:i(p,n,"w-16 h-16 rounded-full")}),l.createElement("div",{className:"space-y-2"},l.createElement("div",{className:i(p,n,"h-6 w-3/4")}),l.createElement("div",{className:i(p,n,"h-4 w-1/2")})),l.createElement("div",{className:"space-y-2"},l.createElement("div",{className:i(p,n,"h-4 w-full")}),l.createElement("div",{className:i(p,n,"h-4 w-full")}),l.createElement("div",{className:i(p,n,"h-4 w-2/3")})));case "avatar":return l.createElement("div",{style:x,className:i(p,n,"rounded-full",{[T.sm]:t==="sm",[T.md]:t==="md",[T.lg]:t==="lg"},s)});default:return null}};return l.createElement("div",{ref:a,className:i("w-full",s)},d())});f.displayName="Fallback";var b={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]"},$={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]"}},h=e=>String(e),w=(e,t=24)=>{let r=[],s={};if(e===void 0){let o=h(t);o?r.push(b[o]):(s.height=`${t}px`,s.width=`${t}px`);}if(typeof e=="number"){let o=h(e);o?r.push(b[o]):(s.height=`${e}px`,s.width=`${e}px`);}if(Array.isArray(e)){let o=h(t),a=[o&&b[o]||`h-[${t}px] w-[${t}px]`];e.forEach(p=>{if(typeof p=="string"){let[n,c]=p.split(":"),x=parseInt(c,10),d=h(x);r.push(d&&$[n]?.[d]||`${n}:h-[${x}px] ${n}:w-[${x}px]`);}}),r.push(...a);}if(typeof e=="string"){let[o,a]=e.split(":"),p=parseInt(a,10),n=h(p);r.push(n&&$[o]?.[n]||`${o}:h-[${p}px] ${o}:w-[${p}px]`);}return {responsiveSizeClasses:r.join(" "),responsiveSizeStyles:s}};var k={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)"},M=l.forwardRef(({name:e,size:t=24,color:r="primary",title:s,className:o,style:a={},...p},n)=>{let c=IconMap[e],{responsiveSizeClasses:x,responsiveSizeStyles:d}=w(t,24);return l.createElement("div",{className:i("flex justify-center items-center",x,o),style:{"--icon-stroke":k[r],...d,...a}},l.createElement(c,{ref:n,"aria-hidden":!s,"aria-label":s,stroke:e.includes("filled")?void 0:k[r],...p}))});M.displayName="Icon";function L({icon:e,size:t=40,className:r}){let s=e.match(/<svg[^>]*>([\s\S]*?)<\/svg>/),{responsiveSizeClasses:o,responsiveSizeStyles:a}=w(t,40);if(!s)return l.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)});let p=e.match(/<svg([^>]*)>/),c=(p?p[1]:"").match(/viewBox=["']([^"']*)["']/),x=c?c[1]:"0 0 40 40";return l.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",...a},className:i(o,r)},l.createElement("svg",{width:"100%",height:"100%",viewBox:x,preserveAspectRatio:"xMidYMid meet",dangerouslySetInnerHTML:{__html:s[1]}}))}L.displayName="IconRenderer";var C="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var z={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},B=e=>{let[t,r]=e.split("-");return t==="heading"?z[r]||"p":t==="label"?"label":"p"},j={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},K=e=>e?(Array.isArray(e)?e:[e]).map(r=>{if(r.includes(":")){let[s,o]=r.split(":");return `${s}:text-${o}`}return `text-${r}`}).join(" "):"text-body-default",y=l.forwardRef(({variant:e="body-default",color:t="primary",as:r,className:s,children:o,weight:a,...p},n)=>{let c=K(e),x=t==="inherit"?"text-inherit":`text-${t}`,d=l.useMemo(()=>{let u=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return B(u)},[e]);return l.createElement(r||d,{ref:n,className:`
2
2
  font-sans antialiased
3
- ${m}
3
+ ${c}
4
4
  ${x}
5
5
  ${a&&`!${j[a]}`}
6
6
  ${s}
7
- `,...n},o)});g.displayName="Text";var C="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var A=({children:e,color:t="inherit",variant:r="body-default-semibold",href:s,className:o,...a})=>l.createElement(g,{variant:r,color:t},l.createElement("a",{href:s,className:i("hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline",C,o),...a},e));var Me=({icon:e,children:t,href:r,isLoading:s,...o})=>s?l.createElement("div",{className:"row gap-2 flex items-center"},l.createElement(f,{variant:"image",size:30,className:"rounded-full"}),l.createElement(f,{variant:"text",size:"sm",className:"w-32"})):l.createElement("div",{className:"row gap-2 flex items-center"},l.createElement("div",{className:"bg-secondary-400 rounded-full p-2.5 items-center justify-center"},e?l.createElement(L,{icon:e,size:18,className:"text-primary"}):l.createElement(M,{name:"link",size:18,className:"text-primary"})),r?l.createElement(A,{className:"hover:underline",href:r,...o,variant:["body-default-semibold","md:body-default-semibold"]},t):l.createElement(g,{variant:"body-default-semibold"},t));export{Me as ContactItem};//# sourceMappingURL=ContactItem.js.map
7
+ `,...p},o)});y.displayName="Text";function A({children:e,color:t="inherit",variant:r="body-default-semibold",href:s,className:o,...a}){return l.createElement(y,{variant:r,color:t},l.createElement("a",{href:s,className:i("hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline text-ellipsis",C,o),...a},e))}function ue({icon:e,children:t,href:r,isLoading:s,...o}){return s?l.createElement("div",{className:"row gap-2 flex items-center"},l.createElement(f,{variant:"image",size:30,className:"rounded-full"}),l.createElement(f,{variant:"text",size:"sm",className:"w-32"})):l.createElement("div",{className:"row gap-2 flex items-center min-w-0"},l.createElement("div",{className:"flex-shrink-0 bg-secondary-400 rounded-full p-2.5 items-center justify-center"},e?l.createElement(L,{icon:e,size:18,className:"text-primary"}):l.createElement(M,{name:"link",size:18,className:"text-primary"})),l.createElement("div",{className:"min-w-0 flex-1"},r?l.createElement(A,{className:"hover:underline truncate block text-primary",href:r,...o,variant:["body-default-semibold","md:body-default-semibold"]},t):l.createElement(y,{variant:"body-default-semibold",className:"truncate block text-primary"},t)))}export{ue as ContactItem};//# sourceMappingURL=ContactItem.js.map
8
8
  //# sourceMappingURL=ContactItem.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/IconRenderer.tsx","../../src/components/Link.tsx","../../src/components/Text.tsx","../../src/utils/tailwind.ts","../../src/components/ContactItem.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","name","color","title","style","props","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","IconRenderer","icon","svgMatch","attributesMatch","viewBoxMatch","viewBox","HEADING_ELEMENT_MAP","getElementFromVariant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","focusRingStyles","Link","href","ContactItem","isLoading","linkProps"],"mappings":"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","file":"ContactItem.js","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","import React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type FallbackVariant = \"text\" | \"image\" | \"button\" | \"card\" | \"avatar\";\nexport type FallbackSize = \"sm\" | \"md\" | \"lg\" | number;\n\nexport type FallbackProps = {\n /**\n * The type of content being loaded\n */\n variant?: FallbackVariant;\n /**\n * The size of the fallback element\n * Can be a predefined size ('sm' | 'md' | 'lg') or a custom pixel value\n */\n size?: FallbackSize;\n /**\n * Whether to show multiple lines (only applies to text variant)\n */\n lines?: number;\n /**\n * Additional classes to apply to the fallback\n */\n className?: string;\n /**\n * Whether to show the loading animation\n */\n animate?: boolean;\n};\n\n// Updated to match existing component sizes\nconst sizeMap = {\n sm: \"h-4\", // 16px\n md: \"h-6\", // 24px\n lg: \"h-8\" // 32px\n};\n\n// Updated to match existing component sizes\nconst widthMap = {\n sm: \"w-20\", // 80px\n md: \"w-32\", // 128px\n lg: \"w-48\" // 192px\n};\n\n// Updated to match Avatar sizes\nconst avatarSizeMap = {\n sm: \"w-8 h-8\", // 32px\n md: \"w-12 h-12\", // 48px\n lg: \"w-16 h-16\" // 64px\n};\n\nexport const Fallback = React.forwardRef<HTMLDivElement, FallbackProps>(\n (\n { variant = \"text\", size = \"md\", lines = 1, className, animate = true },\n ref\n ) => {\n const baseClasses = \"bg-secondary-50 rounded-lg overflow-hidden\";\n const animationClasses = animate ? \"animate-pulse\" : \"\";\n\n const getCustomSizeStyle = (size: number) => ({\n height: `${size}px`,\n width:\n variant === \"avatar\" || variant === \"image\" ? `${size}px` : undefined\n });\n\n const customStyle =\n typeof size === \"number\" ? getCustomSizeStyle(size) : undefined;\n\n const renderContent = () => {\n switch (variant) {\n case \"text\":\n return (\n <div className=\"flex flex-col gap-2\">\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" ? sizeMap[size] : undefined,\n index === lines - 1 && lines > 1 ? \"w-3/4\" : \"w-full\",\n className\n )}\n />\n ))}\n </div>\n );\n\n case \"image\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n (!customStyle || !className) &&\n \"aspect-square w-full max-w-[300px]\",\n className\n )}\n />\n );\n\n case \"button\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" && [sizeMap[size], widthMap[size]],\n className\n )}\n />\n );\n\n case \"card\":\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 p-6 border border-stroke rounded-xl\",\n className\n )}\n >\n <div\n className={cn(\n baseClasses,\n animationClasses,\n \"w-16 h-16 rounded-full\"\n )}\n />\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-6 w-3/4\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-1/2\")}\n />\n </div>\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-2/3\")}\n />\n </div>\n </div>\n );\n\n case \"avatar\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n \"rounded-full\",\n {\n [avatarSizeMap.sm]: size === \"sm\",\n [avatarSizeMap.md]: size === \"md\",\n [avatarSizeMap.lg]: size === \"lg\"\n },\n className\n )}\n />\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n {renderContent()}\n </div>\n );\n }\n);\n\nFallback.displayName = \"Fallback\";\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 { cn } from \"../utils\";\nimport { getResponsiveSize, ResponsiveSize } from \"../utils/responsive\";\n\nexport type IconRendererProps = {\n icon: string;\n size?: ResponsiveSize | ResponsiveSize[];\n className?: string;\n};\n\nexport const IconRenderer = ({\n icon,\n size = 40,\n className\n}: IconRendererProps) => {\n // Extract SVG content from the string (everything between <svg> and </svg>)\n const svgMatch = icon.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/);\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 40\n );\n\n if (!svgMatch) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n />\n );\n }\n\n // Extract attributes from the SVG tag\n const attributesMatch = icon.match(/<svg([^>]*)>/);\n const attributesString = attributesMatch ? attributesMatch[1] : \"\";\n\n // Parse viewBox\n const viewBoxMatch = attributesString.match(/viewBox=[\"']([^\"']*)[\"']/);\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 40 40\";\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={viewBox}\n preserveAspectRatio=\"xMidYMid meet\"\n dangerouslySetInnerHTML={{ __html: svgMatch[1] }}\n />\n </div>\n );\n};\n\nIconRenderer.displayName = \"IconRenderer\";\n","import React from \"react\";\nimport { Text, TextProps } from \"./Text\";\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type LinkProps = {\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n} & Pick<TextProps, \"variant\" | \"color\"> &\n React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const Link = ({\n children,\n color = \"inherit\",\n variant = \"body-default-semibold\",\n href,\n className,\n ...props\n}: LinkProps) => (\n <Text variant={variant} color={color}>\n <a\n href={href}\n className={cn(\n \"hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline\",\n focusRingStyles,\n className\n )}\n {...props}\n >\n {children}\n </a>\n </Text>\n);\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 { 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 React, { HTMLAttributes } from \"react\";\nimport { Fallback } from \"./Fallback\";\nimport { Icon } from \"./Icon\";\nimport { IconRenderer } from \"./IconRenderer\";\nimport { Link } from \"./Link\";\nimport { Text } from \"./Text\";\n\nexport type ContactItemProps = {\n icon?: string;\n children?: React.ReactNode;\n href?: string;\n isLoading?: boolean;\n} & Omit<HTMLAttributes<HTMLAnchorElement>, \"color\">;\n\nexport const ContactItem = ({\n icon,\n children,\n href,\n isLoading,\n ...linkProps\n}: ContactItemProps) => {\n return isLoading ? (\n <div className=\"row gap-2 flex items-center\">\n <Fallback variant=\"image\" size={30} className=\"rounded-full\" />\n <Fallback variant=\"text\" size=\"sm\" className=\"w-32\" />\n </div>\n ) : (\n <div className=\"row gap-2 flex items-center\">\n <div className=\"bg-secondary-400 rounded-full p-2.5 items-center justify-center\">\n {icon ? (\n <IconRenderer icon={icon} size={18} className=\"text-primary\" />\n ) : (\n <Icon name=\"link\" size={18} className=\"text-primary\" />\n )}\n </div>\n {href ? (\n <Link\n className=\"hover:underline\"\n href={href}\n {...linkProps}\n variant={[\"body-default-semibold\", \"md:body-default-semibold\"]}\n >\n {children}\n </Link>\n ) : (\n <Text variant=\"body-default-semibold\">{children}</Text>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/IconRenderer.tsx","../../src/utils/tailwind.ts","../../src/components/Text.tsx","../../src/components/Link.tsx","../../src/components/ContactItem.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","name","color","title","style","props","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","IconRenderer","icon","svgMatch","attributesMatch","viewBoxMatch","viewBox","focusRingStyles","HEADING_ELEMENT_MAP","getElementFromVariant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Link","href","ContactItem","isLoading","linkProps"],"mappings":"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","file":"ContactItem.js","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","import React from \"react\";\n\nimport { cn } from \"../utils\";\n\nexport type FallbackVariant = \"text\" | \"image\" | \"button\" | \"card\" | \"avatar\";\nexport type FallbackSize = \"sm\" | \"md\" | \"lg\" | number;\n\nexport type FallbackProps = {\n /**\n * The type of content being loaded\n */\n variant?: FallbackVariant;\n /**\n * The size of the fallback element\n * Can be a predefined size ('sm' | 'md' | 'lg') or a custom pixel value\n */\n size?: FallbackSize;\n /**\n * Whether to show multiple lines (only applies to text variant)\n */\n lines?: number;\n /**\n * Additional classes to apply to the fallback\n */\n className?: string;\n /**\n * Whether to show the loading animation\n */\n animate?: boolean;\n};\n\n// Updated to match existing component sizes\nconst sizeMap = {\n sm: \"h-4\", // 16px\n md: \"h-6\", // 24px\n lg: \"h-8\" // 32px\n};\n\n// Updated to match existing component sizes\nconst widthMap = {\n sm: \"w-20\", // 80px\n md: \"w-32\", // 128px\n lg: \"w-48\" // 192px\n};\n\n// Updated to match Avatar sizes\nconst avatarSizeMap = {\n sm: \"w-8 h-8\", // 32px\n md: \"w-12 h-12\", // 48px\n lg: \"w-16 h-16\" // 64px\n};\n\nexport const Fallback = React.forwardRef<HTMLDivElement, FallbackProps>(\n (\n { variant = \"text\", size = \"md\", lines = 1, className, animate = true },\n ref\n ) => {\n const baseClasses = \"bg-secondary-50 rounded-lg overflow-hidden\";\n const animationClasses = animate ? \"animate-pulse\" : \"\";\n\n const getCustomSizeStyle = (size: number) => ({\n height: `${size}px`,\n width:\n variant === \"avatar\" || variant === \"image\" ? `${size}px` : undefined\n });\n\n const customStyle =\n typeof size === \"number\" ? getCustomSizeStyle(size) : undefined;\n\n const renderContent = () => {\n switch (variant) {\n case \"text\":\n return (\n <div className=\"flex flex-col gap-2\">\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" ? sizeMap[size] : undefined,\n index === lines - 1 && lines > 1 ? \"w-3/4\" : \"w-full\",\n className\n )}\n />\n ))}\n </div>\n );\n\n case \"image\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n (!customStyle || !className) &&\n \"aspect-square w-full max-w-[300px]\",\n className\n )}\n />\n );\n\n case \"button\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n typeof size === \"string\" && [sizeMap[size], widthMap[size]],\n className\n )}\n />\n );\n\n case \"card\":\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 p-6 border border-stroke rounded-xl\",\n className\n )}\n >\n <div\n className={cn(\n baseClasses,\n animationClasses,\n \"w-16 h-16 rounded-full\"\n )}\n />\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-6 w-3/4\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-1/2\")}\n />\n </div>\n <div className=\"space-y-2\">\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-full\")}\n />\n <div\n className={cn(baseClasses, animationClasses, \"h-4 w-2/3\")}\n />\n </div>\n </div>\n );\n\n case \"avatar\":\n return (\n <div\n style={customStyle}\n className={cn(\n baseClasses,\n animationClasses,\n \"rounded-full\",\n {\n [avatarSizeMap.sm]: size === \"sm\",\n [avatarSizeMap.md]: size === \"md\",\n [avatarSizeMap.lg]: size === \"lg\"\n },\n className\n )}\n />\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)}>\n {renderContent()}\n </div>\n );\n }\n);\n\nFallback.displayName = \"Fallback\";\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 { cn } from \"../utils\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconRendererProps = {\n icon: string;\n size?: ResponsiveSize | ResponsiveSize[];\n className?: string;\n};\n\nexport function IconRenderer({\n icon,\n size = 40,\n className\n}: IconRendererProps) {\n // Extract SVG content from the string (everything between <svg> and </svg>)\n const svgMatch = icon.match(/<svg[^>]*>([\\s\\S]*?)<\\/svg>/);\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 40\n );\n\n if (!svgMatch) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n />\n );\n }\n\n // Extract attributes from the SVG tag\n const attributesMatch = icon.match(/<svg([^>]*)>/);\n const attributesString = attributesMatch ? attributesMatch[1] : \"\";\n\n // Parse viewBox\n const viewBoxMatch = attributesString.match(/viewBox=[\"']([^\"']*)[\"']/);\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 40 40\";\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...responsiveSizeStyles\n }}\n className={cn(responsiveSizeClasses, className)}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={viewBox}\n preserveAspectRatio=\"xMidYMid meet\"\n dangerouslySetInnerHTML={{ __html: svgMatch[1] }}\n />\n </div>\n );\n}\n\nIconRenderer.displayName = \"IconRenderer\";\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 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 React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport type { TextProps } from \"./Text\";\nimport { Text } from \"./Text\";\n\nexport type LinkProps = {\n href: string;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n} & Pick<TextProps, \"variant\" | \"color\"> &\n React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport function Link({\n children,\n color = \"inherit\",\n variant = \"body-default-semibold\",\n href,\n className,\n ...props\n}: LinkProps) {\n return (\n <Text variant={variant} color={color}>\n <a\n href={href}\n className={cn(\n \"hover:opacity-80 transition-all ease-in-out active:scale-95 hover:underline text-ellipsis\",\n focusRingStyles,\n className\n )}\n {...props}\n >\n {children}\n </a>\n </Text>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { Fallback } from \"./Fallback\";\nimport { Icon } from \"./Icon\";\nimport { IconRenderer } from \"./IconRenderer\";\nimport { Link } from \"./Link\";\nimport { Text } from \"./Text\";\n\nexport type ContactItemProps = {\n icon?: string;\n children?: React.ReactNode;\n href?: string;\n isLoading?: boolean;\n} & Omit<HTMLAttributes<HTMLAnchorElement>, \"color\">;\n\nexport function ContactItem({\n icon,\n children,\n href,\n isLoading,\n ...linkProps\n}: ContactItemProps) {\n return isLoading ? (\n <div className=\"row gap-2 flex items-center\">\n <Fallback variant=\"image\" size={30} className=\"rounded-full\" />\n <Fallback variant=\"text\" size=\"sm\" className=\"w-32\" />\n </div>\n ) : (\n <div className=\"row gap-2 flex items-center min-w-0\">\n <div className=\"flex-shrink-0 bg-secondary-400 rounded-full p-2.5 items-center justify-center\">\n {icon ? (\n <IconRenderer icon={icon} size={18} className=\"text-primary\" />\n ) : (\n <Icon name=\"link\" size={18} className=\"text-primary\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <Link\n className=\"hover:underline truncate block text-primary\"\n href={href}\n {...linkProps}\n variant={[\"body-default-semibold\", \"md:body-default-semibold\"]}\n >\n {children}\n </Link>\n ) : (\n <Text\n variant=\"body-default-semibold\"\n className=\"truncate block text-primary\"\n >\n {children}\n </Text>\n )}\n </div>\n </div>\n );\n}\n"]}