@deckai/deck-ui 0.0.23 → 0.0.25

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 (197) hide show
  1. package/dist/components/AboutCard.cjs +5 -5
  2. package/dist/components/AboutCard.cjs.map +1 -1
  3. package/dist/components/AboutCard.js +5 -5
  4. package/dist/components/AboutCard.js.map +1 -1
  5. package/dist/components/Accordion.cjs +1 -1
  6. package/dist/components/Accordion.cjs.map +1 -1
  7. package/dist/components/Accordion.js +1 -1
  8. package/dist/components/Accordion.js.map +1 -1
  9. package/dist/components/AddWorkCard.cjs +5 -5
  10. package/dist/components/AddWorkCard.cjs.map +1 -1
  11. package/dist/components/AddWorkCard.js +5 -5
  12. package/dist/components/AddWorkCard.js.map +1 -1
  13. package/dist/components/AutocompleteInput.cjs +6 -6
  14. package/dist/components/AutocompleteInput.cjs.map +1 -1
  15. package/dist/components/AutocompleteInput.d.cts +1 -1
  16. package/dist/components/AutocompleteInput.d.ts +1 -1
  17. package/dist/components/AutocompleteInput.js +6 -6
  18. package/dist/components/AutocompleteInput.js.map +1 -1
  19. package/dist/components/Avatar.cjs +1 -1
  20. package/dist/components/Avatar.cjs.map +1 -1
  21. package/dist/components/Avatar.js +1 -1
  22. package/dist/components/Avatar.js.map +1 -1
  23. package/dist/components/Badge.cjs +2 -2
  24. package/dist/components/Badge.cjs.map +1 -1
  25. package/dist/components/Badge.d.cts +1 -1
  26. package/dist/components/Badge.d.ts +1 -1
  27. package/dist/components/Badge.js +2 -2
  28. package/dist/components/Badge.js.map +1 -1
  29. package/dist/components/Breadcrumbs.cjs +2 -2
  30. package/dist/components/Breadcrumbs.cjs.map +1 -1
  31. package/dist/components/Breadcrumbs.js +2 -2
  32. package/dist/components/Breadcrumbs.js.map +1 -1
  33. package/dist/components/Button.cjs +6 -6
  34. package/dist/components/Button.cjs.map +1 -1
  35. package/dist/components/Button.d.cts +5 -0
  36. package/dist/components/Button.d.ts +5 -0
  37. package/dist/components/Button.js +6 -6
  38. package/dist/components/Button.js.map +1 -1
  39. package/dist/components/Carousel.cjs +1 -1
  40. package/dist/components/Carousel.cjs.map +1 -1
  41. package/dist/components/Carousel.d.cts +3 -1
  42. package/dist/components/Carousel.d.ts +3 -1
  43. package/dist/components/Carousel.js +1 -1
  44. package/dist/components/Carousel.js.map +1 -1
  45. package/dist/components/Collapsible.cjs +5 -5
  46. package/dist/components/Collapsible.cjs.map +1 -1
  47. package/dist/components/Collapsible.js +5 -5
  48. package/dist/components/Collapsible.js.map +1 -1
  49. package/dist/components/Combobox.cjs +3 -3
  50. package/dist/components/Combobox.cjs.map +1 -1
  51. package/dist/components/Combobox.d.cts +2 -1
  52. package/dist/components/Combobox.d.ts +2 -1
  53. package/dist/components/Combobox.js +3 -3
  54. package/dist/components/Combobox.js.map +1 -1
  55. package/dist/components/ContactItem.cjs +2 -2
  56. package/dist/components/ContactItem.cjs.map +1 -1
  57. package/dist/components/ContactItem.js +2 -2
  58. package/dist/components/ContactItem.js.map +1 -1
  59. package/dist/components/CreatorCard.cjs +8 -0
  60. package/dist/components/CreatorCard.cjs.map +1 -0
  61. package/dist/components/CreatorCard.d.cts +33 -0
  62. package/dist/components/CreatorCard.d.ts +33 -0
  63. package/dist/components/CreatorCard.js +8 -0
  64. package/dist/components/CreatorCard.js.map +1 -0
  65. package/dist/components/Dropdown.cjs +2 -2
  66. package/dist/components/Dropdown.cjs.map +1 -1
  67. package/dist/components/Dropdown.js +2 -2
  68. package/dist/components/Dropdown.js.map +1 -1
  69. package/dist/components/EditButton.cjs +4 -4
  70. package/dist/components/EditButton.cjs.map +1 -1
  71. package/dist/components/EditButton.js +4 -4
  72. package/dist/components/EditButton.js.map +1 -1
  73. package/dist/components/Hero.cjs +8 -0
  74. package/dist/components/Hero.cjs.map +1 -0
  75. package/dist/components/Hero.d.cts +19 -0
  76. package/dist/components/Hero.d.ts +19 -0
  77. package/dist/components/Hero.js +8 -0
  78. package/dist/components/Hero.js.map +1 -0
  79. package/dist/components/Icon.cjs +1 -1
  80. package/dist/components/Icon.cjs.map +1 -1
  81. package/dist/components/Icon.d.cts +1 -1
  82. package/dist/components/Icon.d.ts +1 -1
  83. package/dist/components/Icon.js +1 -1
  84. package/dist/components/Icon.js.map +1 -1
  85. package/dist/components/IconRenderer.cjs +1 -1
  86. package/dist/components/IconRenderer.cjs.map +1 -1
  87. package/dist/components/IconRenderer.js +1 -1
  88. package/dist/components/IconRenderer.js.map +1 -1
  89. package/dist/components/Input.cjs +2 -2
  90. package/dist/components/Input.cjs.map +1 -1
  91. package/dist/components/Input.d.cts +2 -2
  92. package/dist/components/Input.d.ts +2 -2
  93. package/dist/components/Input.js +2 -2
  94. package/dist/components/Input.js.map +1 -1
  95. package/dist/components/Link.cjs +1 -1
  96. package/dist/components/Link.cjs.map +1 -1
  97. package/dist/components/Link.d.cts +1 -1
  98. package/dist/components/Link.d.ts +1 -1
  99. package/dist/components/Link.js +1 -1
  100. package/dist/components/Link.js.map +1 -1
  101. package/dist/components/Modal.cjs +1 -1
  102. package/dist/components/Modal.cjs.map +1 -1
  103. package/dist/components/Modal.js +1 -1
  104. package/dist/components/Modal.js.map +1 -1
  105. package/dist/components/MultiSelectCombobox.cjs +2 -2
  106. package/dist/components/MultiSelectCombobox.cjs.map +1 -1
  107. package/dist/components/MultiSelectCombobox.js +2 -2
  108. package/dist/components/MultiSelectCombobox.js.map +1 -1
  109. package/dist/components/Navbar.cjs +14 -6
  110. package/dist/components/Navbar.cjs.map +1 -1
  111. package/dist/components/Navbar.d.cts +4 -2
  112. package/dist/components/Navbar.d.ts +4 -2
  113. package/dist/components/Navbar.js +14 -6
  114. package/dist/components/Navbar.js.map +1 -1
  115. package/dist/components/NavbarItem.cjs +3 -3
  116. package/dist/components/NavbarItem.cjs.map +1 -1
  117. package/dist/components/NavbarItem.d.cts +1 -1
  118. package/dist/components/NavbarItem.d.ts +1 -1
  119. package/dist/components/NavbarItem.js +3 -3
  120. package/dist/components/NavbarItem.js.map +1 -1
  121. package/dist/components/Option.cjs +3 -3
  122. package/dist/components/Option.cjs.map +1 -1
  123. package/dist/components/Option.js +3 -3
  124. package/dist/components/Option.js.map +1 -1
  125. package/dist/components/ProfileCard.cjs +2 -2
  126. package/dist/components/ProfileCard.cjs.map +1 -1
  127. package/dist/components/ProfileCard.js +2 -2
  128. package/dist/components/ProfileCard.js.map +1 -1
  129. package/dist/components/ProgressBar.cjs.map +1 -1
  130. package/dist/components/ProgressBar.js.map +1 -1
  131. package/dist/components/RadioGroup.cjs +2 -2
  132. package/dist/components/RadioGroup.cjs.map +1 -1
  133. package/dist/components/RadioGroup.js +2 -2
  134. package/dist/components/RadioGroup.js.map +1 -1
  135. package/dist/components/SegmentedTabs.cjs +6 -6
  136. package/dist/components/SegmentedTabs.cjs.map +1 -1
  137. package/dist/components/SegmentedTabs.js +6 -6
  138. package/dist/components/SegmentedTabs.js.map +1 -1
  139. package/dist/components/Sidebar.cjs +1 -1
  140. package/dist/components/Sidebar.cjs.map +1 -1
  141. package/dist/components/Sidebar.js +1 -1
  142. package/dist/components/Sidebar.js.map +1 -1
  143. package/dist/components/SlideButton.cjs.map +1 -1
  144. package/dist/components/SlideButton.js.map +1 -1
  145. package/dist/components/SocialCard.cjs +4 -4
  146. package/dist/components/SocialCard.cjs.map +1 -1
  147. package/dist/components/SocialCard.js +4 -4
  148. package/dist/components/SocialCard.js.map +1 -1
  149. package/dist/components/Tabs.cjs +5 -5
  150. package/dist/components/Tabs.cjs.map +1 -1
  151. package/dist/components/Tabs.js +5 -5
  152. package/dist/components/Tabs.js.map +1 -1
  153. package/dist/components/Tag.cjs +4 -4
  154. package/dist/components/Tag.cjs.map +1 -1
  155. package/dist/components/Tag.js +4 -4
  156. package/dist/components/Tag.js.map +1 -1
  157. package/dist/components/Text.cjs +3 -3
  158. package/dist/components/Text.cjs.map +1 -1
  159. package/dist/components/Text.d.cts +3 -3
  160. package/dist/components/Text.d.ts +3 -3
  161. package/dist/components/Text.js +3 -3
  162. package/dist/components/Text.js.map +1 -1
  163. package/dist/components/TextArea.cjs +2 -2
  164. package/dist/components/TextArea.cjs.map +1 -1
  165. package/dist/components/TextArea.js +2 -2
  166. package/dist/components/TextArea.js.map +1 -1
  167. package/dist/components/Toast.cjs +5 -5
  168. package/dist/components/Toast.cjs.map +1 -1
  169. package/dist/components/Toast.d.cts +4 -1
  170. package/dist/components/Toast.d.ts +4 -1
  171. package/dist/components/Toast.js +5 -5
  172. package/dist/components/Toast.js.map +1 -1
  173. package/dist/components/Tooltip.cjs +3 -3
  174. package/dist/components/Tooltip.cjs.map +1 -1
  175. package/dist/components/Tooltip.js +3 -3
  176. package/dist/components/Tooltip.js.map +1 -1
  177. package/dist/components/VideoPlayer.cjs +2 -2
  178. package/dist/components/VideoPlayer.cjs.map +1 -1
  179. package/dist/components/VideoPlayer.js +2 -2
  180. package/dist/components/VideoPlayer.js.map +1 -1
  181. package/dist/components/WorkCard.cjs +4 -4
  182. package/dist/components/WorkCard.cjs.map +1 -1
  183. package/dist/components/WorkCard.js +4 -4
  184. package/dist/components/WorkCard.js.map +1 -1
  185. package/dist/index.cjs +6 -6
  186. package/dist/index.cjs.map +1 -1
  187. package/dist/index.d.cts +2 -1
  188. package/dist/index.d.ts +2 -1
  189. package/dist/index.js +6 -6
  190. package/dist/index.js.map +1 -1
  191. package/dist/styles/styles.css +1 -1
  192. package/dist/styles/styles.css.map +1 -1
  193. package/dist/tailwind-D0Cc0jDS.d.cts +38 -0
  194. package/dist/tailwind-D0Cc0jDS.d.ts +38 -0
  195. package/dist/tailwind-DIVT5G0q.d.cts +38 -0
  196. package/dist/tailwind-DIVT5G0q.d.ts +38 -0
  197. package/package.json +6 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/utils/tailwind.ts","../../src/components/Icon.tsx","../../src/utils/responsive.ts","../../src/components/Text.tsx","../../src/components/Input.tsx","../../src/components/AutocompleteInput.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStylesCoerced","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","size","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Input","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","defaultValue","onChange","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","AutocompleteInput","forwardRef","suggestion","onKeyDown","ariaControls","ariaActiveDescendant","ariaAutocomplete"],"mappings":"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","file":"AutocompleteInput.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 type { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import type { IconName } from \"@deckai/icons\";\nimport { 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","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 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 type { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStylesCoerced } from \"../utils/tailwind\";\nimport type { IconProps } from \"./Icon\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value?.toString() || \"\");\n }\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n };\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n !error && !forceShowFocusRing && \"border-secondary-50\",\n error && \"border-tertiary-10\",\n disabled && \"cursor-not-allowed opacity-50\",\n \"focus-within:ring-2 focus-within:ring-primary-100\",\n forceShowFocusRing && focusRingStylesCoerced\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n disabled={disabled}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text variant=\"body-xxs\" as=\"span\" className=\"font-bold\">\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import type { KeyboardEvent } from \"react\";\nimport React, { forwardRef } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\n\nexport type AutocompleteInputProps = {\n value: string | undefined;\n suggestion: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n} & Omit<InputProps, \"value\" | \"onChange\" | \"onKeyDown\">;\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n onChange,\n onKeyDown,\n className,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete,\n ...props\n },\n ref\n ) => {\n return (\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"bg-transparent\", className)}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n {...props}\n />\n {suggestion && value && (\n <div className=\"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/utils/tailwind.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Input.tsx","../../src/components/AutocompleteInput.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStylesCoerced","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","size","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Input","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","defaultValue","onChange","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","AutocompleteInput","forwardRef","suggestion","onKeyDown","ariaControls","ariaActiveDescendant","ariaAutocomplete"],"mappings":"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","file":"AutocompleteInput.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 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","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 | \"80\";\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 \"80\": \"h-[80px] w-[80px]\"\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 \"80\": \"sm:h-[80px] sm:w-[80px]\"\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 \"80\": \"md:h-[80px] md:w-[80px]\"\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 \"80\": \"lg:h-[80px] lg:w-[80px]\"\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 \"80\": \"xl:h-[80px] xl:w-[80px]\"\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 \"80\": \"2xl:h-[80px] 2xl:w-[80px]\"\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 tertiary: \"var(--color-tertiary-20)\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\n\nimport type { Typography } from \"../types/tailwind\";\nimport type { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\nexport type ResponsiveVariant =\n | TypographyKey\n | `${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 React.ElementType;\n\n return (\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...(props as HTMLPropsMap[T])}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import type { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStylesCoerced } from \"../utils/tailwind\";\nimport type { IconProps } from \"./Icon\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value?.toString() || \"\");\n }\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n };\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n !error && !forceShowFocusRing && \"border-secondary-50\",\n error && \"border-tertiary-10\",\n disabled && \"cursor-not-allowed opacity-50\",\n \"focus-within:ring-2 focus-within:ring-primary-100\",\n forceShowFocusRing && focusRingStylesCoerced\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n disabled={disabled}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text variant=\"body-xxs\" as=\"span\" className=\"font-bold\">\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import type { KeyboardEvent } from \"react\";\nimport React, { forwardRef } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\n\nexport type AutocompleteInputProps = {\n value: string | undefined;\n suggestion: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n} & Omit<InputProps, \"value\" | \"onChange\" | \"onKeyDown\">;\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n onChange,\n onKeyDown,\n className,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete,\n ...props\n },\n ref\n ) => {\n return (\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"bg-transparent\", className)}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n {...props}\n />\n {suggestion && value && (\n <div className=\"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var o=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var o__default=/*#__PURE__*/_interopDefault(o);function l(...p){return tailwindMerge.twMerge(clsx.clsx(p))}var b={sm:"h-4",md:"h-6",lg:"h-8"},M={sm:"w-20",md:"w-32",lg:"w-48"},u={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},f=o__default.default.forwardRef(({variant:p="text",size:e="md",lines:n=1,className:r,animate:t=true},i)=>{let x="bg-secondary-50 rounded-lg overflow-hidden",s=t?"animate-pulse":"",a=typeof e=="number"?(w=>({height:`${w}px`,width:p==="avatar"||p==="image"?`${w}px`:void 0}))(e):void 0,m=()=>{switch(p){case "text":return o__default.default.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:n}).map((w,v)=>o__default.default.createElement("div",{key:v,style:a,className:l(x,s,typeof e=="string"?b[e]:void 0,v===n-1&&n>1?"w-3/4":"w-full",r)})));case "image":return o__default.default.createElement("div",{style:a,className:l(x,s,(!a||!r)&&"aspect-square w-full max-w-[300px]",r)});case "button":return o__default.default.createElement("div",{style:a,className:l(x,s,typeof e=="string"&&[b[e],M[e]],r)});case "card":return o__default.default.createElement("div",{className:l("flex flex-col gap-4 p-6 border border-stroke rounded-xl",r)},o__default.default.createElement("div",{className:l(x,s,"w-16 h-16 rounded-full")}),o__default.default.createElement("div",{className:"space-y-2"},o__default.default.createElement("div",{className:l(x,s,"h-6 w-3/4")}),o__default.default.createElement("div",{className:l(x,s,"h-4 w-1/2")})),o__default.default.createElement("div",{className:"space-y-2"},o__default.default.createElement("div",{className:l(x,s,"h-4 w-full")}),o__default.default.createElement("div",{className:l(x,s,"h-4 w-full")}),o__default.default.createElement("div",{className:l(x,s,"h-4 w-2/3")})));case "avatar":return o__default.default.createElement("div",{style:a,className:l(x,s,"rounded-full",{[u.sm]:e==="sm",[u.md]:e==="md",[u.lg]:e==="lg"},r)});default:return null}};return o__default.default.createElement("div",{ref:i,className:l("w-full",r)},m())});f.displayName="Fallback";var $="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var g=o__default.default.forwardRef(({children:p,type:e="button",className:n,disabled:r,...t},i)=>o__default.default.createElement("button",{ref:i,type:e,disabled:r,className:l("appearance-none hover:opacity-80 transition-all active:scale-95",$,r&&"opacity-50 cursor-not-allowed",n),...t},p));g.displayName="Pressable";var y={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]"},k={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]"}},c=p=>String(p),C=(p,e=24)=>{let n=[],r={};if(p===void 0){let t=c(e);t?n.push(y[t]):(r.height=`${e}px`,r.width=`${e}px`);}if(typeof p=="number"){let t=c(p);t?n.push(y[t]):(r.height=`${p}px`,r.width=`${p}px`);}if(Array.isArray(p)){let t=c(e),i=[t&&y[t]||`h-[${e}px] w-[${e}px]`];p.forEach(x=>{if(typeof x=="string"){let[s,h]=x.split(":"),a=parseInt(h,10),m=c(a);n.push(m&&k[s]?.[m]||`${s}:h-[${a}px] ${s}:w-[${a}px]`);}}),n.push(...i);}if(typeof p=="string"){let[t,i]=p.split(":"),x=parseInt(i,10),s=c(x);n.push(s&&k[t]?.[s]||`${t}:h-[${x}px] ${t}:w-[${x}px]`);}return {responsiveSizeClasses:n.join(" "),responsiveSizeStyles:r}};function D({src:p,size:e=48,onClick:n,alt:r="avatar",className:t,fallback:i,isLoading:x,...s}){let{responsiveSizeClasses:h,responsiveSizeStyles:a}=C(e,48);if(x)return o__default.default.createElement(f,{variant:"avatar",size:typeof e=="number"?e:"md"});let m=p?o__default.default.createElement("img",{src:p,alt:r,className:l("rounded-full object-cover",h,t),style:a,...s}):o__default.default.createElement("div",{className:l("rounded-full bg-secondary-50",h,t),style:a},i);return n?o__default.default.createElement(g,{onClick:n,...s},m):m}exports.Avatar=D;//# sourceMappingURL=Avatar.cjs.map
1
+ 'use strict';var o=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var o__default=/*#__PURE__*/_interopDefault(o);function r(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var b={sm:"h-4",md:"h-6",lg:"h-8"},M={sm:"w-20",md:"w-32",lg:"w-48"},u={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},g=o__default.default.forwardRef(({variant:e="text",size:p="md",lines:n=1,className:l,animate:t=true},i)=>{let x="bg-secondary-50 rounded-lg overflow-hidden",s=t?"animate-pulse":"",a=typeof p=="number"?(w=>({height:`${w}px`,width:e==="avatar"||e==="image"?`${w}px`:void 0}))(p):void 0,m=()=>{switch(e){case "text":return o__default.default.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:n}).map((w,v)=>o__default.default.createElement("div",{key:v,style:a,className:r(x,s,typeof p=="string"?b[p]:void 0,v===n-1&&n>1?"w-3/4":"w-full",l)})));case "image":return o__default.default.createElement("div",{style:a,className:r(x,s,(!a||!l)&&"aspect-square w-full max-w-[300px]",l)});case "button":return o__default.default.createElement("div",{style:a,className:r(x,s,typeof p=="string"&&[b[p],M[p]],l)});case "card":return o__default.default.createElement("div",{className:r("flex flex-col gap-4 p-6 border border-stroke rounded-xl",l)},o__default.default.createElement("div",{className:r(x,s,"w-16 h-16 rounded-full")}),o__default.default.createElement("div",{className:"space-y-2"},o__default.default.createElement("div",{className:r(x,s,"h-6 w-3/4")}),o__default.default.createElement("div",{className:r(x,s,"h-4 w-1/2")})),o__default.default.createElement("div",{className:"space-y-2"},o__default.default.createElement("div",{className:r(x,s,"h-4 w-full")}),o__default.default.createElement("div",{className:r(x,s,"h-4 w-full")}),o__default.default.createElement("div",{className:r(x,s,"h-4 w-2/3")})));case "avatar":return o__default.default.createElement("div",{style:a,className:r(x,s,"rounded-full",{[u.sm]:p==="sm",[u.md]:p==="md",[u.lg]:p==="lg"},l)});default:return null}};return o__default.default.createElement("div",{ref:i,className:r("w-full",l)},m())});g.displayName="Fallback";var $="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var f=o__default.default.forwardRef(({children:e,type:p="button",className:n,disabled:l,...t},i)=>o__default.default.createElement("button",{ref:i,type:p,disabled:l,className:r("appearance-none hover:opacity-80 transition-all active:scale-95",$,l&&"opacity-50 cursor-not-allowed",n),...t},e));f.displayName="Pressable";var y={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]",80:"h-[80px] w-[80px]"},k={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]",80:"sm:h-[80px] sm:w-[80px]"},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]",80:"md:h-[80px] md:w-[80px]"},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]",80:"lg:h-[80px] lg:w-[80px]"},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]",80:"xl:h-[80px] xl:w-[80px]"},"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]",80:"2xl:h-[80px] 2xl:w-[80px]"}},c=e=>String(e),C=(e,p=24)=>{let n=[],l={};if(e===void 0){let t=c(p);t?n.push(y[t]):(l.height=`${p}px`,l.width=`${p}px`);}if(typeof e=="number"){let t=c(e);t?n.push(y[t]):(l.height=`${e}px`,l.width=`${e}px`);}if(Array.isArray(e)){let t=c(p),i=[t&&y[t]||`h-[${p}px] w-[${p}px]`];e.forEach(x=>{if(typeof x=="string"){let[s,h]=x.split(":"),a=parseInt(h,10),m=c(a);n.push(m&&k[s]?.[m]||`${s}:h-[${a}px] ${s}:w-[${a}px]`);}}),n.push(...i);}if(typeof e=="string"){let[t,i]=e.split(":"),x=parseInt(i,10),s=c(x);n.push(s&&k[t]?.[s]||`${t}:h-[${x}px] ${t}:w-[${x}px]`);}return {responsiveSizeClasses:n.join(" "),responsiveSizeStyles:l}};function D({src:e,size:p=48,onClick:n,alt:l="avatar",className:t,fallback:i,isLoading:x,...s}){let{responsiveSizeClasses:h,responsiveSizeStyles:a}=C(p,48);if(x)return o__default.default.createElement(g,{variant:"avatar",size:typeof p=="number"?p:"md"});let m=e?o__default.default.createElement("img",{src:e,alt:l,className:r("rounded-full object-cover",h,t),style:a,...s}):o__default.default.createElement("div",{className:r("rounded-full bg-secondary-50",h,t),style:a},i);return n?o__default.default.createElement(f,{onClick:n,...s},m):m}exports.Avatar=D;//# sourceMappingURL=Avatar.cjs.map
2
2
  //# sourceMappingURL=Avatar.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/components/Pressable.tsx","../../src/utils/tailwind.ts","../../src/utils/responsive.ts","../../src/components/Avatar.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","focusRingStyles","Pressable","children","type","disabled","props","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","Avatar","src","onClick","alt","fallback","isLoading","responsiveSizeClasses","responsiveSizeStyles","content"],"mappings":"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","file":"Avatar.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","import type { ButtonHTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\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","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 React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Fallback } from \"./Fallback\";\nimport { Pressable } from \"./Pressable\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type AvatarProps = {\n src?: string;\n size?: ResponsiveSize | ResponsiveSize[];\n alt?: string;\n className?: string;\n fallback?: React.ReactNode;\n isLoading?: boolean;\n} & Pick<React.ComponentProps<typeof Pressable>, \"onClick\">;\n\nexport function Avatar({\n src,\n size = 48,\n onClick,\n alt = \"avatar\",\n className,\n fallback,\n isLoading,\n ...props\n}: AvatarProps) {\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 48\n );\n\n if (isLoading) {\n return (\n <Fallback\n variant=\"avatar\"\n size={typeof size === \"number\" ? size : \"md\"}\n />\n );\n }\n\n const content = src ? (\n <img\n src={src}\n alt={alt}\n className={cn(\n \"rounded-full object-cover\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n {...props}\n />\n ) : (\n <div\n className={cn(\n \"rounded-full bg-secondary-50\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n >\n {fallback}\n </div>\n );\n\n return onClick ? (\n <Pressable onClick={onClick} {...props}>\n {content}\n </Pressable>\n ) : (\n content\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/utils/tailwind.ts","../../src/components/Pressable.tsx","../../src/utils/responsive.ts","../../src/components/Avatar.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","focusRingStyles","Pressable","children","type","disabled","props","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","Avatar","src","onClick","alt","fallback","isLoading","responsiveSizeClasses","responsiveSizeStyles","content"],"mappings":"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","file":"Avatar.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","import type { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import type { ButtonHTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\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 | \"80\";\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 \"80\": \"h-[80px] w-[80px]\"\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 \"80\": \"sm:h-[80px] sm:w-[80px]\"\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 \"80\": \"md:h-[80px] md:w-[80px]\"\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 \"80\": \"lg:h-[80px] lg:w-[80px]\"\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 \"80\": \"xl:h-[80px] xl:w-[80px]\"\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 \"80\": \"2xl:h-[80px] 2xl:w-[80px]\"\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 React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Fallback } from \"./Fallback\";\nimport { Pressable } from \"./Pressable\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type AvatarProps = {\n src?: string;\n size?: ResponsiveSize | ResponsiveSize[];\n alt?: string;\n className?: string;\n fallback?: React.ReactNode;\n isLoading?: boolean;\n} & Pick<React.ComponentProps<typeof Pressable>, \"onClick\">;\n\nexport function Avatar({\n src,\n size = 48,\n onClick,\n alt = \"avatar\",\n className,\n fallback,\n isLoading,\n ...props\n}: AvatarProps) {\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 48\n );\n\n if (isLoading) {\n return (\n <Fallback\n variant=\"avatar\"\n size={typeof size === \"number\" ? size : \"md\"}\n />\n );\n }\n\n const content = src ? (\n <img\n src={src}\n alt={alt}\n className={cn(\n \"rounded-full object-cover\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n {...props}\n />\n ) : (\n <div\n className={cn(\n \"rounded-full bg-secondary-50\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n >\n {fallback}\n </div>\n );\n\n return onClick ? (\n <Pressable onClick={onClick} {...props}>\n {content}\n </Pressable>\n ) : (\n content\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- import o from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function l(...p){return twMerge(clsx(p))}var b={sm:"h-4",md:"h-6",lg:"h-8"},M={sm:"w-20",md:"w-32",lg:"w-48"},u={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},f=o.forwardRef(({variant:p="text",size:e="md",lines:n=1,className:r,animate:t=true},i)=>{let x="bg-secondary-50 rounded-lg overflow-hidden",s=t?"animate-pulse":"",a=typeof e=="number"?(w=>({height:`${w}px`,width:p==="avatar"||p==="image"?`${w}px`:void 0}))(e):void 0,m=()=>{switch(p){case "text":return o.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:n}).map((w,v)=>o.createElement("div",{key:v,style:a,className:l(x,s,typeof e=="string"?b[e]:void 0,v===n-1&&n>1?"w-3/4":"w-full",r)})));case "image":return o.createElement("div",{style:a,className:l(x,s,(!a||!r)&&"aspect-square w-full max-w-[300px]",r)});case "button":return o.createElement("div",{style:a,className:l(x,s,typeof e=="string"&&[b[e],M[e]],r)});case "card":return o.createElement("div",{className:l("flex flex-col gap-4 p-6 border border-stroke rounded-xl",r)},o.createElement("div",{className:l(x,s,"w-16 h-16 rounded-full")}),o.createElement("div",{className:"space-y-2"},o.createElement("div",{className:l(x,s,"h-6 w-3/4")}),o.createElement("div",{className:l(x,s,"h-4 w-1/2")})),o.createElement("div",{className:"space-y-2"},o.createElement("div",{className:l(x,s,"h-4 w-full")}),o.createElement("div",{className:l(x,s,"h-4 w-full")}),o.createElement("div",{className:l(x,s,"h-4 w-2/3")})));case "avatar":return o.createElement("div",{style:a,className:l(x,s,"rounded-full",{[u.sm]:e==="sm",[u.md]:e==="md",[u.lg]:e==="lg"},r)});default:return null}};return o.createElement("div",{ref:i,className:l("w-full",r)},m())});f.displayName="Fallback";var $="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var g=o.forwardRef(({children:p,type:e="button",className:n,disabled:r,...t},i)=>o.createElement("button",{ref:i,type:e,disabled:r,className:l("appearance-none hover:opacity-80 transition-all active:scale-95",$,r&&"opacity-50 cursor-not-allowed",n),...t},p));g.displayName="Pressable";var y={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]"},k={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]"}},c=p=>String(p),C=(p,e=24)=>{let n=[],r={};if(p===void 0){let t=c(e);t?n.push(y[t]):(r.height=`${e}px`,r.width=`${e}px`);}if(typeof p=="number"){let t=c(p);t?n.push(y[t]):(r.height=`${p}px`,r.width=`${p}px`);}if(Array.isArray(p)){let t=c(e),i=[t&&y[t]||`h-[${e}px] w-[${e}px]`];p.forEach(x=>{if(typeof x=="string"){let[s,h]=x.split(":"),a=parseInt(h,10),m=c(a);n.push(m&&k[s]?.[m]||`${s}:h-[${a}px] ${s}:w-[${a}px]`);}}),n.push(...i);}if(typeof p=="string"){let[t,i]=p.split(":"),x=parseInt(i,10),s=c(x);n.push(s&&k[t]?.[s]||`${t}:h-[${x}px] ${t}:w-[${x}px]`);}return {responsiveSizeClasses:n.join(" "),responsiveSizeStyles:r}};function D({src:p,size:e=48,onClick:n,alt:r="avatar",className:t,fallback:i,isLoading:x,...s}){let{responsiveSizeClasses:h,responsiveSizeStyles:a}=C(e,48);if(x)return o.createElement(f,{variant:"avatar",size:typeof e=="number"?e:"md"});let m=p?o.createElement("img",{src:p,alt:r,className:l("rounded-full object-cover",h,t),style:a,...s}):o.createElement("div",{className:l("rounded-full bg-secondary-50",h,t),style:a},i);return n?o.createElement(g,{onClick:n,...s},m):m}export{D as Avatar};//# sourceMappingURL=Avatar.js.map
1
+ import o from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function r(...e){return twMerge(clsx(e))}var b={sm:"h-4",md:"h-6",lg:"h-8"},M={sm:"w-20",md:"w-32",lg:"w-48"},u={sm:"w-8 h-8",md:"w-12 h-12",lg:"w-16 h-16"},g=o.forwardRef(({variant:e="text",size:p="md",lines:n=1,className:l,animate:t=true},i)=>{let x="bg-secondary-50 rounded-lg overflow-hidden",s=t?"animate-pulse":"",a=typeof p=="number"?(w=>({height:`${w}px`,width:e==="avatar"||e==="image"?`${w}px`:void 0}))(p):void 0,m=()=>{switch(e){case "text":return o.createElement("div",{className:"flex flex-col gap-2"},Array.from({length:n}).map((w,v)=>o.createElement("div",{key:v,style:a,className:r(x,s,typeof p=="string"?b[p]:void 0,v===n-1&&n>1?"w-3/4":"w-full",l)})));case "image":return o.createElement("div",{style:a,className:r(x,s,(!a||!l)&&"aspect-square w-full max-w-[300px]",l)});case "button":return o.createElement("div",{style:a,className:r(x,s,typeof p=="string"&&[b[p],M[p]],l)});case "card":return o.createElement("div",{className:r("flex flex-col gap-4 p-6 border border-stroke rounded-xl",l)},o.createElement("div",{className:r(x,s,"w-16 h-16 rounded-full")}),o.createElement("div",{className:"space-y-2"},o.createElement("div",{className:r(x,s,"h-6 w-3/4")}),o.createElement("div",{className:r(x,s,"h-4 w-1/2")})),o.createElement("div",{className:"space-y-2"},o.createElement("div",{className:r(x,s,"h-4 w-full")}),o.createElement("div",{className:r(x,s,"h-4 w-full")}),o.createElement("div",{className:r(x,s,"h-4 w-2/3")})));case "avatar":return o.createElement("div",{style:a,className:r(x,s,"rounded-full",{[u.sm]:p==="sm",[u.md]:p==="md",[u.lg]:p==="lg"},l)});default:return null}};return o.createElement("div",{ref:i,className:r("w-full",l)},m())});g.displayName="Fallback";var $="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var f=o.forwardRef(({children:e,type:p="button",className:n,disabled:l,...t},i)=>o.createElement("button",{ref:i,type:p,disabled:l,className:r("appearance-none hover:opacity-80 transition-all active:scale-95",$,l&&"opacity-50 cursor-not-allowed",n),...t},e));f.displayName="Pressable";var y={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]",80:"h-[80px] w-[80px]"},k={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]",80:"sm:h-[80px] sm:w-[80px]"},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]",80:"md:h-[80px] md:w-[80px]"},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]",80:"lg:h-[80px] lg:w-[80px]"},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]",80:"xl:h-[80px] xl:w-[80px]"},"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]",80:"2xl:h-[80px] 2xl:w-[80px]"}},c=e=>String(e),C=(e,p=24)=>{let n=[],l={};if(e===void 0){let t=c(p);t?n.push(y[t]):(l.height=`${p}px`,l.width=`${p}px`);}if(typeof e=="number"){let t=c(e);t?n.push(y[t]):(l.height=`${e}px`,l.width=`${e}px`);}if(Array.isArray(e)){let t=c(p),i=[t&&y[t]||`h-[${p}px] w-[${p}px]`];e.forEach(x=>{if(typeof x=="string"){let[s,h]=x.split(":"),a=parseInt(h,10),m=c(a);n.push(m&&k[s]?.[m]||`${s}:h-[${a}px] ${s}:w-[${a}px]`);}}),n.push(...i);}if(typeof e=="string"){let[t,i]=e.split(":"),x=parseInt(i,10),s=c(x);n.push(s&&k[t]?.[s]||`${t}:h-[${x}px] ${t}:w-[${x}px]`);}return {responsiveSizeClasses:n.join(" "),responsiveSizeStyles:l}};function D({src:e,size:p=48,onClick:n,alt:l="avatar",className:t,fallback:i,isLoading:x,...s}){let{responsiveSizeClasses:h,responsiveSizeStyles:a}=C(p,48);if(x)return o.createElement(g,{variant:"avatar",size:typeof p=="number"?p:"md"});let m=e?o.createElement("img",{src:e,alt:l,className:r("rounded-full object-cover",h,t),style:a,...s}):o.createElement("div",{className:r("rounded-full bg-secondary-50",h,t),style:a},i);return n?o.createElement(f,{onClick:n,...s},m):m}export{D as Avatar};//# sourceMappingURL=Avatar.js.map
2
2
  //# sourceMappingURL=Avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/components/Pressable.tsx","../../src/utils/tailwind.ts","../../src/utils/responsive.ts","../../src/components/Avatar.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","focusRingStyles","Pressable","children","type","disabled","props","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","Avatar","src","onClick","alt","fallback","isLoading","responsiveSizeClasses","responsiveSizeStyles","content"],"mappings":"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","file":"Avatar.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","import type { ButtonHTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\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","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 React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Fallback } from \"./Fallback\";\nimport { Pressable } from \"./Pressable\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type AvatarProps = {\n src?: string;\n size?: ResponsiveSize | ResponsiveSize[];\n alt?: string;\n className?: string;\n fallback?: React.ReactNode;\n isLoading?: boolean;\n} & Pick<React.ComponentProps<typeof Pressable>, \"onClick\">;\n\nexport function Avatar({\n src,\n size = 48,\n onClick,\n alt = \"avatar\",\n className,\n fallback,\n isLoading,\n ...props\n}: AvatarProps) {\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 48\n );\n\n if (isLoading) {\n return (\n <Fallback\n variant=\"avatar\"\n size={typeof size === \"number\" ? size : \"md\"}\n />\n );\n }\n\n const content = src ? (\n <img\n src={src}\n alt={alt}\n className={cn(\n \"rounded-full object-cover\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n {...props}\n />\n ) : (\n <div\n className={cn(\n \"rounded-full bg-secondary-50\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n >\n {fallback}\n </div>\n );\n\n return onClick ? (\n <Pressable onClick={onClick} {...props}>\n {content}\n </Pressable>\n ) : (\n content\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Fallback.tsx","../../src/utils/tailwind.ts","../../src/components/Pressable.tsx","../../src/utils/responsive.ts","../../src/components/Avatar.tsx"],"names":["cn","inputs","twMerge","clsx","sizeMap","widthMap","avatarSizeMap","Fallback","React","variant","size","lines","className","animate","ref","baseClasses","animationClasses","customStyle","renderContent","_","index","focusRingStyles","Pressable","children","type","disabled","props","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","Avatar","src","onClick","alt","fallback","isLoading","responsiveSizeClasses","responsiveSizeStyles","content"],"mappings":"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","file":"Avatar.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","import type { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import type { ButtonHTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\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 | \"80\";\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 \"80\": \"h-[80px] w-[80px]\"\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 \"80\": \"sm:h-[80px] sm:w-[80px]\"\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 \"80\": \"md:h-[80px] md:w-[80px]\"\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 \"80\": \"lg:h-[80px] lg:w-[80px]\"\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 \"80\": \"xl:h-[80px] xl:w-[80px]\"\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 \"80\": \"2xl:h-[80px] 2xl:w-[80px]\"\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 React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Fallback } from \"./Fallback\";\nimport { Pressable } from \"./Pressable\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type AvatarProps = {\n src?: string;\n size?: ResponsiveSize | ResponsiveSize[];\n alt?: string;\n className?: string;\n fallback?: React.ReactNode;\n isLoading?: boolean;\n} & Pick<React.ComponentProps<typeof Pressable>, \"onClick\">;\n\nexport function Avatar({\n src,\n size = 48,\n onClick,\n alt = \"avatar\",\n className,\n fallback,\n isLoading,\n ...props\n}: AvatarProps) {\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 48\n );\n\n if (isLoading) {\n return (\n <Fallback\n variant=\"avatar\"\n size={typeof size === \"number\" ? size : \"md\"}\n />\n );\n }\n\n const content = src ? (\n <img\n src={src}\n alt={alt}\n className={cn(\n \"rounded-full object-cover\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n {...props}\n />\n ) : (\n <div\n className={cn(\n \"rounded-full bg-secondary-50\",\n responsiveSizeClasses,\n className\n )}\n style={responsiveSizeStyles}\n >\n {fallback}\n </div>\n );\n\n return onClick ? (\n <Pressable onClick={onClick} {...props}>\n {content}\n </Pressable>\n ) : (\n content\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
- 'use strict';var i=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),icons=require('@deckai/icons');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);function c(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var y={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]"},u={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),f=(e,r=24)=>{let t=[],n={};if(e===void 0){let p=h(r);p?t.push(y[p]):(n.height=`${r}px`,n.width=`${r}px`);}if(typeof e=="number"){let p=h(e);p?t.push(y[p]):(n.height=`${e}px`,n.width=`${e}px`);}if(Array.isArray(e)){let p=h(r),o=[p&&y[p]||`h-[${r}px] w-[${r}px]`];e.forEach(s=>{if(typeof s=="string"){let[a,m]=s.split(":"),l=parseInt(m,10),x=h(l);t.push(x&&u[a]?.[x]||`${a}:h-[${l}px] ${a}:w-[${l}px]`);}}),t.push(...o);}if(typeof e=="string"){let[p,o]=e.split(":"),s=parseInt(o,10),a=h(s);t.push(a&&u[p]?.[a]||`${p}:h-[${s}px] ${p}:w-[${s}px]`);}return {responsiveSizeClasses:t.join(" "),responsiveSizeStyles:n}};var H={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)"},d=i__namespace.default.forwardRef(({name:e,size:r=24,color:t="primary",title:n,className:p,style:o={},...s},a)=>{let m=icons.IconMap[e],{responsiveSizeClasses:l,responsiveSizeStyles:x}=f(r,24);return i__namespace.default.createElement("div",{className:c("flex justify-center items-center",l,p),style:{"--icon-stroke":H[t],...x,...o}},i__namespace.default.createElement(m,{ref:a,"aria-hidden":!n,"aria-label":n,stroke:e.includes("filled")?void 0:H[t],...s}))});d.displayName="Icon";var S={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},v=e=>{let[r,t]=e.split("-");return r==="heading"?S[t]||"p":r==="label"?"label":"p"},A={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},$=e=>e?(Array.isArray(e)?e:[e]).map(t=>{if(t.includes(":")){let[n,p]=t.split(":");return `${n}:text-${p}`}return `text-${t}`}).join(" "):"text-body-default",w=i__namespace.default.forwardRef(({variant:e="body-default",color:r="primary",as:t,className:n,children:p,weight:o,...s},a)=>{let m=$(e),l=r==="inherit"?"text-inherit":`text-${r}`,x=i__namespace.default.useMemo(()=>{let L=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return v(L)},[e]);return i__namespace.default.createElement(t||x,{ref:a,className:`
1
+ 'use strict';var i=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),icons=require('@deckai/icons');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);function c(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var y={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]",80:"h-[80px] w-[80px]"},u={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]",80:"sm:h-[80px] sm:w-[80px]"},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]",80:"md:h-[80px] md:w-[80px]"},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]",80:"lg:h-[80px] lg:w-[80px]"},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]",80:"xl:h-[80px] xl:w-[80px]"},"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]",80:"2xl:h-[80px] 2xl:w-[80px]"}},h=e=>String(e),f=(e,r=24)=>{let t=[],n={};if(e===void 0){let p=h(r);p?t.push(y[p]):(n.height=`${r}px`,n.width=`${r}px`);}if(typeof e=="number"){let p=h(e);p?t.push(y[p]):(n.height=`${e}px`,n.width=`${e}px`);}if(Array.isArray(e)){let p=h(r),o=[p&&y[p]||`h-[${r}px] w-[${r}px]`];e.forEach(s=>{if(typeof s=="string"){let[x,m]=s.split(":"),a=parseInt(m,10),l=h(a);t.push(l&&u[x]?.[l]||`${x}:h-[${a}px] ${x}:w-[${a}px]`);}}),t.push(...o);}if(typeof e=="string"){let[p,o]=e.split(":"),s=parseInt(o,10),x=h(s);t.push(x&&u[p]?.[x]||`${p}:h-[${s}px] ${p}:w-[${s}px]`);}return {responsiveSizeClasses:t.join(" "),responsiveSizeStyles:n}};var H={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)",tertiary:"var(--color-tertiary-20)"},d=i__namespace.default.forwardRef(({name:e,size:r=24,color:t="primary",title:n,className:p,style:o={},...s},x)=>{let m=icons.IconMap[e],{responsiveSizeClasses:a,responsiveSizeStyles:l}=f(r,24);return i__namespace.default.createElement("div",{className:c("flex justify-center items-center",a,p),style:{"--icon-stroke":H[t],...l,...o}},i__namespace.default.createElement(m,{ref:x,"aria-hidden":!n,"aria-label":n,stroke:e.includes("filled")?void 0:H[t],...s}))});d.displayName="Icon";var S={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},v=e=>{let[r,t]=e.split("-");return r==="heading"?S[t]||"p":r==="label"?"label":"p"},A={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},$=e=>e?(Array.isArray(e)?e:[e]).map(t=>{if(t.includes(":")){let[n,p]=t.split(":");return `${n}:text-${p}`}return `text-${t}`}).join(" "):"text-body-default",w=i__namespace.default.forwardRef(({variant:e="body-default",color:r="primary",as:t,className:n,children:p,weight:o,...s},x)=>{let m=$(e),a=r==="inherit"?"text-inherit":`text-${r}`,l=i__namespace.default.useMemo(()=>{let L=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return v(L)},[e]);return i__namespace.default.createElement(t||l,{ref:x,className:`
2
2
  font-sans antialiased
3
3
  ${m}
4
- ${l}
4
+ ${a}
5
5
  ${o&&`!${A[o]}`}
6
6
  ${n}
7
7
  `,...s},p)});w.displayName="Text";var M={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},k=e=>{let r=Object.keys(M),t=e.split("").reduce((o,s)=>s.charCodeAt(0)+((o<<5)-o),0),n=Math.abs(t)%r.length;return r[n]},C=i__namespace.forwardRef(({className:e,variant:r,iconName:t,children:n,...p},o)=>{let s=r||(typeof n=="string"?k(n):"pink");return i__namespace.createElement("span",{ref:o,className:c("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",M[s],e),...p},t&&i__namespace.createElement(d,{size:16,name:t}),i__namespace.createElement(w,{variant:"body-xxs-semibold",className:"mt-0.5"},n))});C.displayName="Badge";exports.Badge=C;//# sourceMappingURL=Badge.cjs.map