@deckai/deck-ui 0.0.18 → 0.0.20

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 (214) 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 +6 -6
  6. package/dist/components/Accordion.cjs.map +1 -1
  7. package/dist/components/Accordion.js +6 -6
  8. package/dist/components/Accordion.js.map +1 -1
  9. package/dist/components/AddWorkCard.cjs +6 -6
  10. package/dist/components/AddWorkCard.cjs.map +1 -1
  11. package/dist/components/AddWorkCard.d.cts +2 -2
  12. package/dist/components/AddWorkCard.d.ts +2 -2
  13. package/dist/components/AddWorkCard.js +6 -6
  14. package/dist/components/AddWorkCard.js.map +1 -1
  15. package/dist/components/AutocompleteInput.cjs +5 -5
  16. package/dist/components/AutocompleteInput.cjs.map +1 -1
  17. package/dist/components/AutocompleteInput.d.cts +15 -16
  18. package/dist/components/AutocompleteInput.d.ts +15 -16
  19. package/dist/components/AutocompleteInput.js +5 -5
  20. package/dist/components/AutocompleteInput.js.map +1 -1
  21. package/dist/components/Avatar.cjs +1 -1
  22. package/dist/components/Avatar.cjs.map +1 -1
  23. package/dist/components/Avatar.d.cts +1 -2
  24. package/dist/components/Avatar.d.ts +1 -2
  25. package/dist/components/Avatar.js +1 -1
  26. package/dist/components/Avatar.js.map +1 -1
  27. package/dist/components/Badge.cjs +5 -5
  28. package/dist/components/Badge.cjs.map +1 -1
  29. package/dist/components/Badge.d.cts +1 -1
  30. package/dist/components/Badge.d.ts +1 -1
  31. package/dist/components/Badge.js +5 -5
  32. package/dist/components/Badge.js.map +1 -1
  33. package/dist/components/Breadcrumbs.cjs +6 -6
  34. package/dist/components/Breadcrumbs.cjs.map +1 -1
  35. package/dist/components/Breadcrumbs.js +6 -6
  36. package/dist/components/Breadcrumbs.js.map +1 -1
  37. package/dist/components/Button.cjs +6 -6
  38. package/dist/components/Button.cjs.map +1 -1
  39. package/dist/components/Button.js +6 -6
  40. package/dist/components/Button.js.map +1 -1
  41. package/dist/components/Carousel.cjs +1 -1
  42. package/dist/components/Carousel.cjs.map +1 -1
  43. package/dist/components/Carousel.js +1 -1
  44. package/dist/components/Carousel.js.map +1 -1
  45. package/dist/components/Collapsible.cjs +7 -7
  46. package/dist/components/Collapsible.cjs.map +1 -1
  47. package/dist/components/Collapsible.js +7 -7
  48. package/dist/components/Collapsible.js.map +1 -1
  49. package/dist/components/Combobox.cjs +5 -5
  50. package/dist/components/Combobox.cjs.map +1 -1
  51. package/dist/components/Combobox.js +5 -5
  52. package/dist/components/Combobox.js.map +1 -1
  53. package/dist/components/ContactItem.cjs +6 -6
  54. package/dist/components/ContactItem.cjs.map +1 -1
  55. package/dist/components/ContactItem.js +6 -6
  56. package/dist/components/ContactItem.js.map +1 -1
  57. package/dist/components/Dropdown.cjs +5 -5
  58. package/dist/components/Dropdown.cjs.map +1 -1
  59. package/dist/components/Dropdown.js +5 -5
  60. package/dist/components/Dropdown.js.map +1 -1
  61. package/dist/components/EditButton.cjs +7 -7
  62. package/dist/components/EditButton.cjs.map +1 -1
  63. package/dist/components/EditButton.js +7 -7
  64. package/dist/components/EditButton.js.map +1 -1
  65. package/dist/components/Icon.cjs +1 -1
  66. package/dist/components/Icon.cjs.map +1 -1
  67. package/dist/components/Icon.d.cts +2 -3
  68. package/dist/components/Icon.d.ts +2 -3
  69. package/dist/components/Icon.js +1 -1
  70. package/dist/components/Icon.js.map +1 -1
  71. package/dist/components/IconRenderer.cjs +1 -1
  72. package/dist/components/IconRenderer.cjs.map +1 -1
  73. package/dist/components/IconRenderer.d.cts +2 -1
  74. package/dist/components/IconRenderer.d.ts +2 -1
  75. package/dist/components/IconRenderer.js +1 -1
  76. package/dist/components/IconRenderer.js.map +1 -1
  77. package/dist/components/Input.cjs +6 -6
  78. package/dist/components/Input.cjs.map +1 -1
  79. package/dist/components/Input.d.cts +1 -0
  80. package/dist/components/Input.d.ts +1 -0
  81. package/dist/components/Input.js +6 -6
  82. package/dist/components/Input.js.map +1 -1
  83. package/dist/components/Link.cjs +4 -4
  84. package/dist/components/Link.cjs.map +1 -1
  85. package/dist/components/Link.d.cts +1 -0
  86. package/dist/components/Link.d.ts +1 -0
  87. package/dist/components/Link.js +4 -4
  88. package/dist/components/Link.js.map +1 -1
  89. package/dist/components/Modal.cjs +2 -0
  90. package/dist/components/Modal.cjs.map +1 -0
  91. package/dist/components/Modal.d.cts +31 -0
  92. package/dist/components/Modal.d.ts +31 -0
  93. package/dist/components/Modal.js +2 -0
  94. package/dist/components/Modal.js.map +1 -0
  95. package/dist/components/MultiSelectCombobox.cjs +5 -5
  96. package/dist/components/MultiSelectCombobox.cjs.map +1 -1
  97. package/dist/components/MultiSelectCombobox.js +5 -5
  98. package/dist/components/MultiSelectCombobox.js.map +1 -1
  99. package/dist/components/Navbar.cjs +6 -6
  100. package/dist/components/Navbar.cjs.map +1 -1
  101. package/dist/components/Navbar.d.cts +2 -1
  102. package/dist/components/Navbar.d.ts +2 -1
  103. package/dist/components/Navbar.js +6 -6
  104. package/dist/components/Navbar.js.map +1 -1
  105. package/dist/components/NavbarItem.cjs +7 -1
  106. package/dist/components/NavbarItem.cjs.map +1 -1
  107. package/dist/components/NavbarItem.d.cts +6 -2
  108. package/dist/components/NavbarItem.d.ts +6 -2
  109. package/dist/components/NavbarItem.js +7 -1
  110. package/dist/components/NavbarItem.js.map +1 -1
  111. package/dist/components/Option.cjs +6 -6
  112. package/dist/components/Option.cjs.map +1 -1
  113. package/dist/components/Option.d.cts +4 -0
  114. package/dist/components/Option.d.ts +4 -0
  115. package/dist/components/Option.js +6 -6
  116. package/dist/components/Option.js.map +1 -1
  117. package/dist/components/Pressable.cjs +1 -1
  118. package/dist/components/Pressable.cjs.map +1 -1
  119. package/dist/components/Pressable.js +1 -1
  120. package/dist/components/Pressable.js.map +1 -1
  121. package/dist/components/ProfileCard.cjs +6 -6
  122. package/dist/components/ProfileCard.cjs.map +1 -1
  123. package/dist/components/ProfileCard.js +6 -6
  124. package/dist/components/ProfileCard.js.map +1 -1
  125. package/dist/components/ProgressBar.cjs +1 -1
  126. package/dist/components/ProgressBar.cjs.map +1 -1
  127. package/dist/components/ProgressBar.js +1 -1
  128. package/dist/components/ProgressBar.js.map +1 -1
  129. package/dist/components/RadioGroup.cjs +5 -5
  130. package/dist/components/RadioGroup.cjs.map +1 -1
  131. package/dist/components/RadioGroup.js +5 -5
  132. package/dist/components/RadioGroup.js.map +1 -1
  133. package/dist/components/SegmentedTabs.cjs +5 -5
  134. package/dist/components/SegmentedTabs.cjs.map +1 -1
  135. package/dist/components/SegmentedTabs.js +5 -5
  136. package/dist/components/SegmentedTabs.js.map +1 -1
  137. package/dist/components/Sidebar.cjs +1 -1
  138. package/dist/components/Sidebar.cjs.map +1 -1
  139. package/dist/components/Sidebar.js +1 -1
  140. package/dist/components/Sidebar.js.map +1 -1
  141. package/dist/components/SlideButton.cjs +1 -1
  142. package/dist/components/SlideButton.cjs.map +1 -1
  143. package/dist/components/SlideButton.js +1 -1
  144. package/dist/components/SlideButton.js.map +1 -1
  145. package/dist/components/Slider.cjs +2 -0
  146. package/dist/components/Slider.cjs.map +1 -0
  147. package/dist/components/Slider.d.cts +7 -0
  148. package/dist/components/Slider.d.ts +7 -0
  149. package/dist/components/Slider.js +2 -0
  150. package/dist/components/Slider.js.map +1 -0
  151. package/dist/components/SocialCard.cjs +5 -5
  152. package/dist/components/SocialCard.cjs.map +1 -1
  153. package/dist/components/SocialCard.d.cts +2 -2
  154. package/dist/components/SocialCard.d.ts +2 -2
  155. package/dist/components/SocialCard.js +5 -5
  156. package/dist/components/SocialCard.js.map +1 -1
  157. package/dist/components/Spinner.cjs +1 -1
  158. package/dist/components/Spinner.cjs.map +1 -1
  159. package/dist/components/Spinner.js +1 -1
  160. package/dist/components/Spinner.js.map +1 -1
  161. package/dist/components/Switch.cjs +1 -1
  162. package/dist/components/Switch.cjs.map +1 -1
  163. package/dist/components/Switch.d.cts +1 -1
  164. package/dist/components/Switch.d.ts +1 -1
  165. package/dist/components/Switch.js +1 -1
  166. package/dist/components/Switch.js.map +1 -1
  167. package/dist/components/Tabs.cjs +3 -3
  168. package/dist/components/Tabs.cjs.map +1 -1
  169. package/dist/components/Tabs.js +3 -3
  170. package/dist/components/Tabs.js.map +1 -1
  171. package/dist/components/Tag.cjs +6 -6
  172. package/dist/components/Tag.cjs.map +1 -1
  173. package/dist/components/Tag.js +6 -6
  174. package/dist/components/Tag.js.map +1 -1
  175. package/dist/components/Text.cjs +2 -2
  176. package/dist/components/Text.cjs.map +1 -1
  177. package/dist/components/Text.d.cts +1 -1
  178. package/dist/components/Text.d.ts +1 -1
  179. package/dist/components/Text.js +2 -2
  180. package/dist/components/Text.js.map +1 -1
  181. package/dist/components/TextArea.cjs +4 -4
  182. package/dist/components/TextArea.cjs.map +1 -1
  183. package/dist/components/TextArea.js +4 -4
  184. package/dist/components/TextArea.js.map +1 -1
  185. package/dist/components/Toast.cjs +6 -6
  186. package/dist/components/Toast.cjs.map +1 -1
  187. package/dist/components/Toast.js +6 -6
  188. package/dist/components/Toast.js.map +1 -1
  189. package/dist/components/Tooltip.cjs +7 -1
  190. package/dist/components/Tooltip.cjs.map +1 -1
  191. package/dist/components/Tooltip.js +7 -1
  192. package/dist/components/Tooltip.js.map +1 -1
  193. package/dist/components/VideoPlayer.cjs +8 -0
  194. package/dist/components/VideoPlayer.cjs.map +1 -0
  195. package/dist/components/VideoPlayer.d.cts +36 -0
  196. package/dist/components/VideoPlayer.d.ts +36 -0
  197. package/dist/components/VideoPlayer.js +8 -0
  198. package/dist/components/VideoPlayer.js.map +1 -0
  199. package/dist/components/WorkCard.cjs +6 -6
  200. package/dist/components/WorkCard.cjs.map +1 -1
  201. package/dist/components/WorkCard.d.cts +2 -1
  202. package/dist/components/WorkCard.d.ts +2 -1
  203. package/dist/components/WorkCard.js +6 -6
  204. package/dist/components/WorkCard.js.map +1 -1
  205. package/dist/index.cjs +7 -7
  206. package/dist/index.cjs.map +1 -1
  207. package/dist/index.d.cts +14 -0
  208. package/dist/index.d.ts +14 -0
  209. package/dist/index.js +7 -7
  210. package/dist/index.js.map +1 -1
  211. package/dist/responsive-CjR1yA5N.d.cts +4 -0
  212. package/dist/responsive-CjR1yA5N.d.ts +4 -0
  213. package/dist/styles/styles.css +2 -2
  214. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Icon.tsx","../../src/components/Pressable.tsx","../../src/utils/tailwind.ts","../../src/components/NavbarItem.tsx"],"names":["cn","inputs","twMerge","clsx","COLOR_MAP","BREAKPOINT_MAP","processSizes","sizes","sizeArray","mediaQueries","baseSize","size","breakpoint","valueStr","value","acc","query","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","sizeStyles","focusRingStyles","Pressable","children","type","disabled","NavbarItem","iconName","hasNotification"],"mappings":"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","file":"NavbarItem.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, { SVGProps } from \"react\";\nimport { IconName, IconMap } from \"@deckai/icons\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\n\ntype Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\ntype ResponsiveSize = number | `${Breakpoint}:${number}`;\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\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"#080808\",\n secondary: \"#666666\",\n white: \"#ffffff\",\n primaryBlue: \"#089CCB\",\n disabled: \"#888888\",\n danger: \"#FF0000\"\n};\n\nconst BREAKPOINT_MAP: Record<Breakpoint, string> = {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\"\n};\n\nconst processSizes = (\n sizes: ResponsiveSize | ResponsiveSize[] | undefined\n): React.CSSProperties => {\n if (!sizes) return { width: \"24px\", height: \"24px\" };\n\n const sizeArray = Array.isArray(sizes) ? sizes : [sizes];\n const mediaQueries: Record<string, string> = {};\n let baseSize: string | undefined;\n\n // Process each size\n sizeArray.forEach((size) => {\n if (typeof size === \"number\") {\n baseSize = `${size}px`;\n } else {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n mediaQueries[`@media (min-width: ${BREAKPOINT_MAP[breakpoint]})`] =\n `${value}px`;\n }\n });\n\n // Create the style object with the correct structure\n return {\n width: baseSize || \"24px\",\n height: baseSize || \"24px\",\n ...Object.entries(mediaQueries).reduce(\n (acc, [query, size]) => ({\n ...acc,\n [query]: {\n width: size,\n height: size\n }\n }),\n {}\n )\n };\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 sizeStyles = processSizes(size);\n\n return (\n <div\n className={cn(\"flex justify-center items-center\", className)}\n style={{\n ...sizeStyles,\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\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, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\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 { 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\n const safelist: 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 breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\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 return [\n ...typographyClasses,\n ...responsiveTypographyClasses\n // ... rest of your safelist\n ];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:border-2 focus-visible:border-primary-100\";\n\nexport const focusRingStylesCoerced = \"border-2 border-primary-100\";\n","import React from \"react\";\nimport { IconName } from \"@deckai/icons\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Pressable, PressableProps } from \"./Pressable\";\n\nexport type NavbarItemProps = {\n iconName: IconName;\n hasNotification?: boolean;\n} & Pick<IconProps, \"color\" | \"title\"> &\n PressableProps;\n\nexport const NavbarItem = ({\n iconName,\n hasNotification,\n color,\n title,\n ...props\n}: NavbarItemProps) => {\n console.log({ hasNotification });\n return (\n <Pressable className=\"relative lg:px-7 md:px-5 py-3\" {...props}>\n <Icon name={iconName} color={color} title={title} />\n {hasNotification && (\n <div className=\"w-3 h-3 bg-red-500 rounded-full absolute top-3 right-5\" />\n )}\n </Pressable>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Badge.tsx","../../src/utils/tailwind.ts","../../src/components/Pressable.tsx","../../src/components/Tooltip.tsx","../../src/components/NavbarItem.tsx"],"names":["cn","inputs","twMerge","clsx","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","stringToVariant","str","variantKeys","hash","acc","char","index","Badge","g","iconName","finalVariant","focusRingStyles","Pressable","type","disabled","Tooltip","content","side","align","delayDuration","defaultOpen","controlledOpen","onOpenChange","longPressDuration","isOpen","setIsOpen","useState","longPressTimer","open","handleOpenChange","useCallback","newOpen","handleTouchStart","handleTouchEnd","c","a","NavbarItem","hasNotification","tooltip","badge"],"mappings":"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","file":"NavbarItem.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import { IconMap, IconName } from \"@deckai/icons\";\nimport React, { SVGProps } from \"react\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport { ResponsiveSize, getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"#080808\",\n secondary: \"#666666\",\n white: \"#ffffff\",\n primaryBlue: \"#089CCB\",\n disabled: \"#888888\",\n danger: \"#FF0000\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\nimport { Typography } from \"../types/tailwind\";\nimport { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles\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 { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type BadgeProps = {\n variant?: \"pink\" | \"orange\" | \"green\" | \"purple\";\n iconName?: IconName;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst variants = {\n pink: \"bg-tertiary-5\",\n orange: \"bg-tertiary-15\",\n green: \"bg-tertiary-25\",\n purple: \"bg-secondary-300\"\n};\n\nconst stringToVariant = (str: string): keyof typeof variants => {\n const variantKeys = Object.keys(variants) as Array<keyof typeof variants>;\n // Let's log some values to understand what's happening\n const hash = str\n .split(\"\")\n .reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0);\n\n const index = Math.abs(hash) % variantKeys.length;\n const selectedVariant = variantKeys[index];\n\n return selectedVariant;\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, iconName, children, ...props }, ref) => {\n const finalVariant =\n variant ||\n (typeof children === \"string\" ? stringToVariant(children) : \"pink\");\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-2\",\n \"rounded px-2 py-1.5\",\n \"text-sm font-medium\",\n variants[finalVariant],\n className\n )}\n {...props}\n >\n {iconName && <Icon size={16} name={iconName} />}\n <Text variant=\"body-xxs-semibold\" className=\"mt-0.5\">\n {children}\n </Text>\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import React, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\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 * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n delayDuration?: number;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Duration in ms for long press on mobile devices */\n longPressDuration?: number;\n}\n\nexport const Tooltip = ({\n content,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n delayDuration = 200,\n defaultOpen,\n open: controlledOpen,\n onOpenChange,\n longPressDuration = 500\n}: TooltipProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen || false);\n let longPressTimer: Timer | null = null;\n\n const open = controlledOpen ?? isOpen;\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!controlledOpen) {\n setIsOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const handleTouchStart = useCallback(() => {\n const timer = setTimeout(() => {\n handleOpenChange(true);\n }, longPressDuration);\n longPressTimer = timer;\n }, [handleOpenChange, longPressDuration]);\n\n const handleTouchEnd = useCallback(() => {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n // Keep tooltip open for a brief moment after touch\n setTimeout(() => handleOpenChange(false), 1500);\n }, [longPressTimer, handleOpenChange]);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n <span\n tabIndex={0}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onTouchCancel={handleTouchEnd}\n >\n {children}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(\n \"z-50 overflow-hidden rounded-lg\",\n \"bg-black px-3 py-1.5\",\n \"text-xs text-white\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"select-none\",\n \"max-w-60\",\n \"touch-none\", // Prevent touch events from interfering with scrolling\n className\n )}\n >\n {typeof content === \"string\" ? (\n <Text variant=\"body-default-medium\" color=\"white\">\n {content}\n </Text>\n ) : (\n content\n )}\n <TooltipPrimitive.Arrow\n className=\"fill-text-primary\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n","import { IconName } from \"@deckai/icons\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\nimport { Badge } from \"./Badge\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Pressable, PressableProps } from \"./Pressable\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type NavbarItemProps = {\n iconName: IconName;\n hasNotification?: boolean;\n tooltip?: React.ReactNode;\n disabled?: boolean;\n badge?: React.ReactNode;\n} & Pick<IconProps, \"color\" | \"title\"> &\n PressableProps;\n\nexport const NavbarItem = ({\n iconName,\n hasNotification,\n color,\n title,\n tooltip,\n disabled,\n badge,\n ...props\n}: NavbarItemProps) => {\n const content = (\n <Pressable\n disabled={disabled}\n className={cn(\"relative lg:px-7 md:px-5 py-3\")}\n {...props}\n >\n <Icon name={iconName} color={color} title={title} />\n {hasNotification && (\n <div className=\"w-3 h-3 bg-red-500 rounded-full absolute top-3 right-5\" />\n )}\n {badge && <Badge>{badge}</Badge>}\n </Pressable>\n );\n return tooltip ? <Tooltip content={tooltip}>{content}</Tooltip> : content;\n};\n"]}
@@ -1,13 +1,17 @@
1
- import React__default from 'react';
2
1
  import { IconName } from '@deckai/icons';
2
+ import React__default from 'react';
3
3
  import { IconProps } from './Icon.cjs';
4
4
  import { PressableProps } from './Pressable.cjs';
5
5
  import '../tailwind-Cl3vNM6S.cjs';
6
+ import '../responsive-CjR1yA5N.cjs';
6
7
 
7
8
  type NavbarItemProps = {
8
9
  iconName: IconName;
9
10
  hasNotification?: boolean;
11
+ tooltip?: React__default.ReactNode;
12
+ disabled?: boolean;
13
+ badge?: React__default.ReactNode;
10
14
  } & Pick<IconProps, "color" | "title"> & PressableProps;
11
- declare const NavbarItem: ({ iconName, hasNotification, color, title, ...props }: NavbarItemProps) => React__default.JSX.Element;
15
+ declare const NavbarItem: ({ iconName, hasNotification, color, title, tooltip, disabled, badge, ...props }: NavbarItemProps) => React__default.JSX.Element;
12
16
 
13
17
  export { NavbarItem, type NavbarItemProps };
@@ -1,13 +1,17 @@
1
- import React__default from 'react';
2
1
  import { IconName } from '@deckai/icons';
2
+ import React__default from 'react';
3
3
  import { IconProps } from './Icon.js';
4
4
  import { PressableProps } from './Pressable.js';
5
5
  import '../tailwind-Cl3vNM6S.js';
6
+ import '../responsive-CjR1yA5N.js';
6
7
 
7
8
  type NavbarItemProps = {
8
9
  iconName: IconName;
9
10
  hasNotification?: boolean;
11
+ tooltip?: React__default.ReactNode;
12
+ disabled?: boolean;
13
+ badge?: React__default.ReactNode;
10
14
  } & Pick<IconProps, "color" | "title"> & PressableProps;
11
- declare const NavbarItem: ({ iconName, hasNotification, color, title, ...props }: NavbarItemProps) => React__default.JSX.Element;
15
+ declare const NavbarItem: ({ iconName, hasNotification, color, title, tooltip, disabled, badge, ...props }: NavbarItemProps) => React__default.JSX.Element;
12
16
 
13
17
  export { NavbarItem, type NavbarItemProps };
@@ -1,2 +1,8 @@
1
- import c from'react';import {IconMap}from'@deckai/icons';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function a(...e){return twMerge(clsx(e))}var d={primary:"#080808",secondary:"#666666",white:"#ffffff",primaryBlue:"#089CCB",disabled:"#888888",danger:"#FF0000"},$={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"},v=e=>{if(!e)return {width:"24px",height:"24px"};let s=Array.isArray(e)?e:[e],t={},r;return s.forEach(o=>{if(typeof o=="number")r=`${o}px`;else {let[n,i]=o.split(":"),p=parseInt(i,10);t[`@media (min-width: ${$[n]})`]=`${p}px`;}}),{width:r||"24px",height:r||"24px",...Object.entries(t).reduce((o,[n,i])=>({...o,[n]:{width:i,height:i}}),{})}},l=c.forwardRef(({name:e,size:s=24,color:t="primary",title:r,className:o,style:n={},...i},p)=>{let y=IconMap[e],x=v(s);return c.createElement("div",{className:a("flex justify-center items-center",o),style:{...x,"--icon-stroke":d[t],...n}},c.createElement(y,{ref:p,"aria-hidden":!r,"aria-label":r,stroke:e.includes("filled")?void 0:d[t],...i}))});l.displayName="Icon";var u="focus-visible:outline-none focus-visible:border-2 focus-visible:border-primary-100";var m=c.forwardRef(({children:e,type:s="button",className:t,disabled:r,...o},n)=>c.createElement("button",{ref:n,type:s,disabled:r,className:a("appearance-none hover:opacity-80 transition-all active:scale-95",u,r&&"opacity-50 cursor-not-allowed",t),...o},e));m.displayName="Pressable";var _=({iconName:e,hasNotification:s,color:t,title:r,...o})=>(console.log({hasNotification:s}),c.createElement(m,{className:"relative lg:px-7 md:px-5 py-3",...o},c.createElement(l,{name:e,color:t,title:r}),s&&c.createElement("div",{className:"w-3 h-3 bg-red-500 rounded-full absolute top-3 right-5"})));export{_ as NavbarItem};//# sourceMappingURL=NavbarItem.js.map
1
+ import*as c from'react';import c__default,{useState,useCallback}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {IconMap}from'@deckai/icons';import*as a from'@radix-ui/react-tooltip';function m(...e){return twMerge(clsx(e))}var H={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]"},S={sm:{12:"sm:h-[12px] sm:w-[12px]",16:"sm:h-[16px] sm:w-[16px]",18:"sm:h-[18px] sm:w-[18px]",20:"sm:h-[20px] sm:w-[20px]",24:"sm:h-[24px] sm:w-[24px]",32:"sm:h-[32px] sm:w-[32px]",36:"sm:h-[36px] sm:w-[36px]",40:"sm:h-[40px] sm:w-[40px]",42:"sm:h-[42px] sm:w-[42px]",48:"sm:h-[48px] sm:w-[48px]",64:"sm:h-[64px] sm:w-[64px]",72:"sm:h-[72px] sm:w-[72px]"},md:{12:"md:h-[12px] md:w-[12px]",16:"md:h-[16px] md:w-[16px]",18:"md:h-[18px] md:w-[18px]",20:"md:h-[20px] md:w-[20px]",24:"md:h-[24px] md:w-[24px]",32:"md:h-[32px] md:w-[32px]",36:"md:h-[36px] md:w-[36px]",40:"md:h-[40px] md:w-[40px]",42:"md:h-[42px] md:w-[42px]",48:"md:h-[48px] md:w-[48px]",64:"md:h-[64px] md:w-[64px]",72:"md:h-[72px] md:w-[72px]"},lg:{12:"lg:h-[12px] lg:w-[12px]",16:"lg:h-[16px] lg:w-[16px]",18:"lg:h-[18px] lg:w-[18px]",20:"lg:h-[20px] lg:w-[20px]",24:"lg:h-[24px] lg:w-[24px]",32:"lg:h-[32px] lg:w-[32px]",36:"lg:h-[36px] lg:w-[36px]",40:"lg:h-[40px] lg:w-[40px]",42:"lg:h-[42px] lg:w-[42px]",48:"lg:h-[48px] lg:w-[48px]",64:"lg:h-[64px] lg:w-[64px]",72:"lg:h-[72px] lg:w-[72px]"},xl:{12:"xl:h-[12px] xl:w-[12px]",16:"xl:h-[16px] xl:w-[16px]",18:"xl:h-[18px] xl:w-[18px]",20:"xl:h-[20px] xl:w-[20px]",24:"xl:h-[24px] xl:w-[24px]",32:"xl:h-[32px] xl:w-[32px]",36:"xl:h-[36px] xl:w-[36px]",40:"xl:h-[40px] xl:w-[40px]",42:"xl:h-[42px] xl:w-[42px]",48:"xl:h-[48px] xl:w-[48px]",64:"xl:h-[64px] xl:w-[64px]",72:"xl:h-[72px] xl:w-[72px]"},"2xl":{12:"2xl:h-[12px] 2xl:w-[12px]",16:"2xl:h-[16px] 2xl:w-[16px]",18:"2xl:h-[18px] 2xl:w-[18px]",20:"2xl:h-[20px] 2xl:w-[20px]",24:"2xl:h-[24px] 2xl:w-[24px]",32:"2xl:h-[32px] 2xl:w-[32px]",36:"2xl:h-[36px] 2xl:w-[36px]",40:"2xl:h-[40px] 2xl:w-[40px]",42:"2xl:h-[42px] 2xl:w-[42px]",48:"2xl:h-[48px] 2xl:w-[48px]",64:"2xl:h-[64px] 2xl:w-[64px]",72:"2xl:h-[72px] 2xl:w-[72px]"}},u=e=>String(e),C=(e,r=24)=>{let t=[],p={};if(e===undefined){let o=u(r);o?t.push(H[o]):(p.height=`${r}px`,p.width=`${r}px`);}if(typeof e=="number"){let o=u(e);o?t.push(H[o]):(p.height=`${e}px`,p.width=`${e}px`);}if(Array.isArray(e)){let o=u(r),n=[o&&H[o]||`h-[${r}px] w-[${r}px]`];e.forEach(s=>{if(typeof s=="string"){let[i,l]=s.split(":"),x=parseInt(l,10),h=u(x);t.push(h&&S[i]?.[h]||`${i}:h-[${x}px] ${i}:w-[${x}px]`);}}),t.push(...n);}if(typeof e=="string"){let[o,n]=e.split(":"),s=parseInt(n,10),i=u(s);t.push(i&&S[o]?.[i]||`${o}:h-[${s}px] ${o}:w-[${s}px]`);}return {responsiveSizeClasses:t.join(" "),responsiveSizeStyles:p}};var A={primary:"#080808",secondary:"#666666",white:"#ffffff",primaryBlue:"#089CCB",disabled:"#888888",danger:"#FF0000"},f=c__default.forwardRef(({name:e,size:r=24,color:t="primary",title:p,className:o,style:n={},...s},i)=>{let l=IconMap[e],{responsiveSizeClasses:x,responsiveSizeStyles:h}=C(r,24);return c__default.createElement("div",{className:m("flex justify-center items-center",x,o),style:{"--icon-stroke":A[t],...h,...n}},c__default.createElement(l,{ref:i,"aria-hidden":!p,"aria-label":p,stroke:e.includes("filled")?undefined:A[t],...s}))});f.displayName="Icon";var G={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},F=e=>{let[r,t]=e.split("-");return r==="heading"?G[t]||"p":r==="label"?"label":"p"},W={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[p,o]=t.split(":");return `${p}:text-${o}`}return `text-${t}`}).join(" "):"text-body-default",T=c__default.forwardRef(({variant:e="body-default",color:r="primary",as:t,className:p,children:o,weight:n,...s},i)=>{let l=_(e),x=r==="inherit"?"text-inherit":`text-${r}`,h=c__default.useMemo(()=>{let d=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return F(d)},[e]);return c__default.createElement(t||h,{ref:i,className:`
2
+ font-sans antialiased
3
+ ${l}
4
+ ${x}
5
+ ${n&&`!${W[n]}`}
6
+ ${p}
7
+ `,...s},o)});T.displayName="Text";var k={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},q=e=>{let r=Object.keys(k),t=e.split("").reduce((n,s)=>s.charCodeAt(0)+((n<<5)-n),0),p=Math.abs(t)%r.length;return r[p]},L=c.forwardRef(({className:e,variant:r,iconName:t,children:p,...o},n)=>{let s=r||(typeof p=="string"?q(p):"pink");return c.createElement("span",{ref:n,className:m("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",k[s],e),...o},t&&c.createElement(f,{size:16,name:t}),c.createElement(T,{variant:"body-xxs-semibold",className:"mt-0.5"},p))});L.displayName="Badge";var N="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var R=c__default.forwardRef(({children:e,type:r="button",className:t,disabled:p,...o},n)=>c__default.createElement("button",{ref:n,type:r,disabled:p,className:m("appearance-none hover:opacity-80 transition-all active:scale-95",N,p&&"opacity-50 cursor-not-allowed",t),...o},e));R.displayName="Pressable";var V=({content:e,children:r,side:t="bottom",align:p="center",className:o,delayDuration:n=200,defaultOpen:s,open:i,onOpenChange:l,longPressDuration:x=500})=>{let[h,$]=useState(s||false),d=null,B=i??h,y=useCallback(w=>{i||$(w),l?.(w);},[i,l]),O=useCallback(()=>{d=setTimeout(()=>{y(true);},x);},[y,x]),P=useCallback(()=>{d&&(clearTimeout(d),d=null),setTimeout(()=>y(false),1500);},[d,y]);return c.createElement(a.Provider,{delayDuration:n},c.createElement(a.Root,{open:B,onOpenChange:y},c.createElement(a.Trigger,{asChild:true},c.createElement("span",{tabIndex:0,onTouchStart:O,onTouchEnd:P,onTouchCancel:P},r)),c.createElement(a.Portal,null,c.createElement(a.Content,{side:t,align:p,sideOffset:4,className:m("z-50 overflow-hidden rounded-lg","bg-black px-3 py-1.5","text-xs text-white","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0","data-[side=bottom]:slide-in-from-top-2","data-[side=top]:slide-in-from-bottom-2","select-none","max-w-60","touch-none",o)},typeof e=="string"?c.createElement(T,{variant:"body-default-medium",color:"white"},e):e,c.createElement(a.Arrow,{className:"fill-text-primary",width:10,height:5})))))};var Se=({iconName:e,hasNotification:r,color:t,title:p,tooltip:o,disabled:n,badge:s,...i})=>{let l=c__default.createElement(R,{disabled:n,className:m("relative lg:px-7 md:px-5 py-3"),...i},c__default.createElement(f,{name:e,color:t,title:p}),r&&c__default.createElement("div",{className:"w-3 h-3 bg-red-500 rounded-full absolute top-3 right-5"}),s&&c__default.createElement(L,null,s));return o?c__default.createElement(V,{content:o},l):l};export{Se as NavbarItem};//# sourceMappingURL=NavbarItem.js.map
2
8
  //# sourceMappingURL=NavbarItem.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Icon.tsx","../../src/components/Pressable.tsx","../../src/utils/tailwind.ts","../../src/components/NavbarItem.tsx"],"names":["cn","inputs","twMerge","clsx","COLOR_MAP","BREAKPOINT_MAP","processSizes","sizes","sizeArray","mediaQueries","baseSize","size","breakpoint","valueStr","value","acc","query","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","sizeStyles","focusRingStyles","Pressable","children","type","disabled","NavbarItem","iconName","hasNotification"],"mappings":"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","file":"NavbarItem.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, { SVGProps } from \"react\";\nimport { IconName, IconMap } from \"@deckai/icons\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\n\ntype Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\ntype ResponsiveSize = number | `${Breakpoint}:${number}`;\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\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"#080808\",\n secondary: \"#666666\",\n white: \"#ffffff\",\n primaryBlue: \"#089CCB\",\n disabled: \"#888888\",\n danger: \"#FF0000\"\n};\n\nconst BREAKPOINT_MAP: Record<Breakpoint, string> = {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\"\n};\n\nconst processSizes = (\n sizes: ResponsiveSize | ResponsiveSize[] | undefined\n): React.CSSProperties => {\n if (!sizes) return { width: \"24px\", height: \"24px\" };\n\n const sizeArray = Array.isArray(sizes) ? sizes : [sizes];\n const mediaQueries: Record<string, string> = {};\n let baseSize: string | undefined;\n\n // Process each size\n sizeArray.forEach((size) => {\n if (typeof size === \"number\") {\n baseSize = `${size}px`;\n } else {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n mediaQueries[`@media (min-width: ${BREAKPOINT_MAP[breakpoint]})`] =\n `${value}px`;\n }\n });\n\n // Create the style object with the correct structure\n return {\n width: baseSize || \"24px\",\n height: baseSize || \"24px\",\n ...Object.entries(mediaQueries).reduce(\n (acc, [query, size]) => ({\n ...acc,\n [query]: {\n width: size,\n height: size\n }\n }),\n {}\n )\n };\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 sizeStyles = processSizes(size);\n\n return (\n <div\n className={cn(\"flex justify-center items-center\", className)}\n style={{\n ...sizeStyles,\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\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, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\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 { 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\n const safelist: 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 breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\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 return [\n ...typographyClasses,\n ...responsiveTypographyClasses\n // ... rest of your safelist\n ];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:border-2 focus-visible:border-primary-100\";\n\nexport const focusRingStylesCoerced = \"border-2 border-primary-100\";\n","import React from \"react\";\nimport { IconName } from \"@deckai/icons\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Pressable, PressableProps } from \"./Pressable\";\n\nexport type NavbarItemProps = {\n iconName: IconName;\n hasNotification?: boolean;\n} & Pick<IconProps, \"color\" | \"title\"> &\n PressableProps;\n\nexport const NavbarItem = ({\n iconName,\n hasNotification,\n color,\n title,\n ...props\n}: NavbarItemProps) => {\n console.log({ hasNotification });\n return (\n <Pressable className=\"relative lg:px-7 md:px-5 py-3\" {...props}>\n <Icon name={iconName} color={color} title={title} />\n {hasNotification && (\n <div className=\"w-3 h-3 bg-red-500 rounded-full absolute top-3 right-5\" />\n )}\n </Pressable>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Badge.tsx","../../src/utils/tailwind.ts","../../src/components/Pressable.tsx","../../src/components/Tooltip.tsx","../../src/components/NavbarItem.tsx"],"names":["cn","inputs","twMerge","clsx","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","stringToVariant","str","variantKeys","hash","acc","char","index","Badge","g","iconName","finalVariant","focusRingStyles","Pressable","type","disabled","Tooltip","content","side","align","delayDuration","defaultOpen","controlledOpen","onOpenChange","longPressDuration","isOpen","setIsOpen","useState","longPressTimer","open","handleOpenChange","useCallback","newOpen","handleTouchStart","handleTouchEnd","NavbarItem","hasNotification","tooltip","badge"],"mappings":"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","file":"NavbarItem.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","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import { IconMap, IconName } from \"@deckai/icons\";\nimport React, { SVGProps } from \"react\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport { ResponsiveSize, getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"#080808\",\n secondary: \"#666666\",\n white: \"#ffffff\",\n primaryBlue: \"#089CCB\",\n disabled: \"#888888\",\n danger: \"#FF0000\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\nimport { Typography } from \"../types/tailwind\";\nimport { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles\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 { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type BadgeProps = {\n variant?: \"pink\" | \"orange\" | \"green\" | \"purple\";\n iconName?: IconName;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst variants = {\n pink: \"bg-tertiary-5\",\n orange: \"bg-tertiary-15\",\n green: \"bg-tertiary-25\",\n purple: \"bg-secondary-300\"\n};\n\nconst stringToVariant = (str: string): keyof typeof variants => {\n const variantKeys = Object.keys(variants) as Array<keyof typeof variants>;\n // Let's log some values to understand what's happening\n const hash = str\n .split(\"\")\n .reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0);\n\n const index = Math.abs(hash) % variantKeys.length;\n const selectedVariant = variantKeys[index];\n\n return selectedVariant;\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, iconName, children, ...props }, ref) => {\n const finalVariant =\n variant ||\n (typeof children === \"string\" ? stringToVariant(children) : \"pink\");\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-2\",\n \"rounded px-2 py-1.5\",\n \"text-sm font-medium\",\n variants[finalVariant],\n className\n )}\n {...props}\n >\n {iconName && <Icon size={16} name={iconName} />}\n <Text variant=\"body-xxs-semibold\" className=\"mt-0.5\">\n {children}\n </Text>\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","import React, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\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 * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n delayDuration?: number;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Duration in ms for long press on mobile devices */\n longPressDuration?: number;\n}\n\nexport const Tooltip = ({\n content,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n delayDuration = 200,\n defaultOpen,\n open: controlledOpen,\n onOpenChange,\n longPressDuration = 500\n}: TooltipProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen || false);\n let longPressTimer: Timer | null = null;\n\n const open = controlledOpen ?? isOpen;\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!controlledOpen) {\n setIsOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const handleTouchStart = useCallback(() => {\n const timer = setTimeout(() => {\n handleOpenChange(true);\n }, longPressDuration);\n longPressTimer = timer;\n }, [handleOpenChange, longPressDuration]);\n\n const handleTouchEnd = useCallback(() => {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n // Keep tooltip open for a brief moment after touch\n setTimeout(() => handleOpenChange(false), 1500);\n }, [longPressTimer, handleOpenChange]);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n <span\n tabIndex={0}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onTouchCancel={handleTouchEnd}\n >\n {children}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(\n \"z-50 overflow-hidden rounded-lg\",\n \"bg-black px-3 py-1.5\",\n \"text-xs text-white\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"select-none\",\n \"max-w-60\",\n \"touch-none\", // Prevent touch events from interfering with scrolling\n className\n )}\n >\n {typeof content === \"string\" ? (\n <Text variant=\"body-default-medium\" color=\"white\">\n {content}\n </Text>\n ) : (\n content\n )}\n <TooltipPrimitive.Arrow\n className=\"fill-text-primary\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n","import { IconName } from \"@deckai/icons\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\nimport { Badge } from \"./Badge\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Pressable, PressableProps } from \"./Pressable\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type NavbarItemProps = {\n iconName: IconName;\n hasNotification?: boolean;\n tooltip?: React.ReactNode;\n disabled?: boolean;\n badge?: React.ReactNode;\n} & Pick<IconProps, \"color\" | \"title\"> &\n PressableProps;\n\nexport const NavbarItem = ({\n iconName,\n hasNotification,\n color,\n title,\n tooltip,\n disabled,\n badge,\n ...props\n}: NavbarItemProps) => {\n const content = (\n <Pressable\n disabled={disabled}\n className={cn(\"relative lg:px-7 md:px-5 py-3\")}\n {...props}\n >\n <Icon name={iconName} color={color} title={title} />\n {hasNotification && (\n <div className=\"w-3 h-3 bg-red-500 rounded-full absolute top-3 right-5\" />\n )}\n {badge && <Badge>{badge}</Badge>}\n </Pressable>\n );\n return tooltip ? <Tooltip content={tooltip}>{content}</Tooltip> : content;\n};\n"]}
@@ -1,8 +1,8 @@
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 c(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var b={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},E=e=>{let[t,n]=e.split("-");return t==="heading"?b[n]||"p":t==="label"?"label":"p"},f={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},x=e=>e?(Array.isArray(e)?e:[e]).map(n=>{if(n.includes(":")){let[r,a]=n.split(":");return `${r}:text-${a}`}return `text-${n}`}).join(" "):"text-body-default",g=o__default.default.forwardRef(({variant:e="body-default",color:t="primary",as:n,className:r,children:a,weight:s,...l},i)=>{let p=x(e),T=t==="inherit"?"text-inherit":`text-${t}`,m=o__default.default.useMemo(()=>{let y=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return E(y)},[e]);return o__default.default.createElement(n||m,{ref:i,className:`
1
+ 'use strict';var x=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),icons=require('@deckai/icons'),l=require('@radix-ui/react-tooltip');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var x__namespace=/*#__PURE__*/_interopNamespace(x);var l__namespace=/*#__PURE__*/_interopNamespace(l);function y(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var E={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]"}},b=e=>String(e),$=(e,t=24)=>{let o=[],n={};if(e===undefined){let r=b(t);r?o.push(E[r]):(n.height=`${t}px`,n.width=`${t}px`);}if(typeof e=="number"){let r=b(e);r?o.push(E[r]):(n.height=`${e}px`,n.width=`${e}px`);}if(Array.isArray(e)){let r=b(t),s=[r&&E[r]||`h-[${t}px] w-[${t}px]`];e.forEach(p=>{if(typeof p=="string"){let[i,m]=p.split(":"),a=parseInt(m,10),d=b(a);o.push(d&&k[i]?.[d]||`${i}:h-[${a}px] ${i}:w-[${a}px]`);}}),o.push(...s);}if(typeof e=="string"){let[r,s]=e.split(":"),p=parseInt(s,10),i=b(p);o.push(i&&k[r]?.[i]||`${r}:h-[${p}px] ${r}:w-[${p}px]`);}return {responsiveSizeClasses:o.join(" "),responsiveSizeStyles:n}};var N={primary:"#080808",secondary:"#666666",white:"#ffffff",primaryBlue:"#089CCB",disabled:"#888888",danger:"#FF0000"},R=x__namespace.default.forwardRef(({name:e,size:t=24,color:o="primary",title:n,className:r,style:s={},...p},i)=>{let m=icons.IconMap[e],{responsiveSizeClasses:a,responsiveSizeStyles:d}=$(t,24);return x__namespace.default.createElement("div",{className:y("flex justify-center items-center",a,r),style:{"--icon-stroke":N[o],...d,...s}},x__namespace.default.createElement(m,{ref:i,"aria-hidden":!n,"aria-label":n,stroke:e.includes("filled")?undefined:N[o],...p}))});R.displayName="Icon";var O={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},G=e=>{let[t,o]=e.split("-");return t==="heading"?O[o]||"p":t==="label"?"label":"p"},D={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},F=e=>e?(Array.isArray(e)?e:[e]).map(o=>{if(o.includes(":")){let[n,r]=o.split(":");return `${n}:text-${r}`}return `text-${o}`}).join(" "):"text-body-default",T=x__namespace.default.forwardRef(({variant:e="body-default",color:t="primary",as:o,className:n,children:r,weight:s,...p},i)=>{let m=F(e),a=t==="inherit"?"text-inherit":`text-${t}`,d=x__namespace.default.useMemo(()=>{let h=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return G(h)},[e]);return x__namespace.default.createElement(o||d,{ref:i,className:`
2
2
  font-sans antialiased
3
- ${p}
4
- ${T}
5
- ${s&&`!${f[s]}`}
6
- ${r}
7
- `,...l},a)});g.displayName="Text";var A=({text:e,highlight:t})=>{if(!t)return o__default.default.createElement(o__default.default.Fragment,null,e);let n=e.split(new RegExp(`(${t})`,"i"));return o__default.default.createElement(o__default.default.Fragment,null,n.map((r,a)=>r.toLowerCase()===t.toLowerCase()?o__default.default.createElement("span",{key:a,className:"font-bold"},r):r))},K=o__default.default.forwardRef(({value:e,label:t,onChange:n,onKeyDown:r,onMouseEnter:a,onMouseLeave:s,selected:l,color:i,disabled:p,className:T,id:m,role:u,"aria-selected":y,searchValue:H=""},M)=>o__default.default.createElement("button",{ref:M,type:"button",id:m,role:u,"aria-selected":y,disabled:p,className:c("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",l&&"bg-gray-100","flex items-center gap-2",T),onClick:()=>{n?.(e);},onKeyDown:r,onMouseEnter:a,onMouseLeave:s},o__default.default.createElement(g,{variant:"body-default-medium",color:i==="danger"?"danger":"inherit"},typeof t=="string"?o__default.default.createElement(A,{text:t,highlight:H}):t)));exports.Option=K;//# sourceMappingURL=Option.cjs.map
3
+ ${m}
4
+ ${a}
5
+ ${s&&`!${D[s]}`}
6
+ ${n}
7
+ `,...p},r)});T.displayName="Text";var V={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},_=e=>{let t=Object.keys(V),o=e.split("").reduce((s,p)=>p.charCodeAt(0)+((s<<5)-s),0),n=Math.abs(o)%t.length;return t[n]},C=x__namespace.forwardRef(({className:e,variant:t,iconName:o,children:n,...r},s)=>{let p=t||(typeof n=="string"?_(n):"pink");return x__namespace.createElement("span",{ref:s,className:y("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",V[p],e),...r},o&&x__namespace.createElement(R,{size:16,name:o}),x__namespace.createElement(T,{variant:"body-xxs-semibold",className:"mt-0.5"},n))});C.displayName="Badge";var I=({content:e,children:t,side:o="bottom",align:n="center",className:r,delayDuration:s=200,defaultOpen:p,open:i,onOpenChange:m,longPressDuration:a=500})=>{let[d,H]=x.useState(p||false),h=null,M=i??d,g=x.useCallback(w=>{i||H(w),m?.(w);},[i,m]),L=x.useCallback(()=>{h=setTimeout(()=>{g(true);},a);},[g,a]),f=x.useCallback(()=>{h&&(clearTimeout(h),h=null),setTimeout(()=>g(false),1500);},[h,g]);return x__namespace.createElement(l__namespace.Provider,{delayDuration:s},x__namespace.createElement(l__namespace.Root,{open:M,onOpenChange:g},x__namespace.createElement(l__namespace.Trigger,{asChild:true},x__namespace.createElement("span",{tabIndex:0,onTouchStart:L,onTouchEnd:f,onTouchCancel:f},t)),x__namespace.createElement(l__namespace.Portal,null,x__namespace.createElement(l__namespace.Content,{side:o,align:n,sideOffset:4,className:y("z-50 overflow-hidden rounded-lg","bg-black px-3 py-1.5","text-xs text-white","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0","data-[side=bottom]:slide-in-from-top-2","data-[side=top]:slide-in-from-bottom-2","select-none","max-w-60","touch-none",r)},typeof e=="string"?x__namespace.createElement(T,{variant:"body-default-medium",color:"white"},e):e,x__namespace.createElement(l__namespace.Arrow,{className:"fill-text-primary",width:10,height:5})))))};var W=({text:e,highlight:t})=>{if(!t)return x__namespace.default.createElement(x__namespace.default.Fragment,null,e);let o=e.split(new RegExp(`(${t})`,"i"));return x__namespace.default.createElement(x__namespace.default.Fragment,null,o.map((n,r)=>n.toLowerCase()===t.toLowerCase()?x__namespace.default.createElement("span",{key:r,className:"font-bold"},n):n))},be=x__namespace.default.forwardRef(({value:e,label:t,onChange:o,onKeyDown:n,onMouseEnter:r,onMouseLeave:s,selected:p,color:i,disabled:m,className:a,id:d,role:H,"aria-selected":h,searchValue:M="",tooltip:g,onClick:L,badge:f},w)=>{let A=x__namespace.default.createElement("button",{ref:w,type:"button",id:d,role:H,"aria-selected":h,disabled:m,className:y("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",p&&"bg-gray-100","flex items-center gap-2",a),onClick:()=>{o?.(e),L?.();},onKeyDown:n,onMouseEnter:r,onMouseLeave:s},x__namespace.default.createElement(T,{variant:"body-default-medium",color:i==="danger"?"danger":"inherit"},typeof t=="string"?x__namespace.default.createElement(W,{text:t,highlight:M}):t),f&&x__namespace.default.createElement(C,null,f));return g?x__namespace.default.createElement(I,{content:g},A):A});exports.Option=be;//# sourceMappingURL=Option.cjs.map
8
8
  //# sourceMappingURL=Option.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts","../../src/components/Text.tsx","../../src/components/Option.tsx"],"names":["cn","inputs","twMerge","clsx","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","size","fontWeight","processVariants","variants","breakpoint","typographyClass","Text","React","color","as","className","children","weight","props","ref","typographyClasses","colorClasses","suggestedElement","baseVariant","HighlightedText","text","highlight","parts","part","i","Option","value","label","onChange","onKeyDown","onMouseEnter","onMouseLeave","selected","disabled","id","role","ariaSelected","searchValue"],"mappings":"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","file":"Option.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","import React from \"react\";\nimport { Typography } from \"../types/tailwind\";\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\n// Add breakpoint types\ntype Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\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\n const colorClasses = color === \"inherit\" ? \"text-inherit\" : `text-${color}`;\n\n const suggestedElement = React.useMemo(() => {\n const baseVariant =\n typeof variant === \"string\"\n ? variant.split(\":\").pop()!\n : Array.isArray(variant)\n ? variant[0].split(\":\").pop()!\n : \"body-default\";\n return getElementFromVariant(baseVariant as TypographyKey);\n }, [variant]);\n\n const Component = (as || suggestedElement) as T;\n\n return (\n // @ts-expect-error TODO: figure this out\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import React, { KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\n\nexport type OptionProps = {\n label: React.ReactNode;\n value: string;\n /** Optional color override for specific items like \"Logout\" in red */\n color?: \"default\" | \"danger\";\n /** Optional disabled state */\n disabled?: boolean;\n onChange?: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n selected?: boolean;\n className?: string;\n /** ID for accessibility */\n id?: string;\n /** ARIA role */\n role?: string;\n /** ARIA selected state */\n \"aria-selected\"?: boolean;\n /** Current search value for highlighting matches */\n searchValue?: string;\n};\n\nconst HighlightedText = ({\n text,\n highlight\n}: {\n text: string;\n highlight: string;\n}) => {\n if (!highlight) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${highlight})`, \"i\"));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === highlight.toLowerCase() ? (\n <span key={i} className=\"font-bold\">\n {part}\n </span>\n ) : (\n part\n )\n )}\n </>\n );\n};\n\nexport const Option = React.forwardRef<HTMLButtonElement, OptionProps>(\n (\n {\n value,\n label,\n onChange,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n selected,\n color,\n disabled,\n className,\n id,\n role,\n \"aria-selected\": ariaSelected,\n searchValue = \"\"\n },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n id={id}\n role={role}\n aria-selected={ariaSelected}\n disabled={disabled}\n className={cn(\n \"relative w-full text-left px-2 py-1.5 text-sm rounded outline-none\",\n \"cursor-pointer hover:bg-gray-100\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n selected && \"bg-gray-100\",\n \"flex items-center gap-2\",\n className\n )}\n onClick={() => {\n onChange?.(value);\n }}\n onKeyDown={onKeyDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Text\n variant=\"body-default-medium\"\n color={color === \"danger\" ? \"danger\" : \"inherit\"}\n >\n {typeof label === \"string\" ? (\n <HighlightedText text={label} highlight={searchValue} />\n ) : (\n label\n )}\n </Text>\n </button>\n )\n);\n"]}
1
+ {"version":3,"sources":["../../src/utils/index.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Badge.tsx","../../src/components/Tooltip.tsx","../../src/components/Option.tsx"],"names":["cn","inputs","twMerge","clsx","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","size","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","stringToVariant","str","variantKeys","hash","acc","char","index","Badge","u","iconName","finalVariant","Tooltip","content","side","align","delayDuration","defaultOpen","controlledOpen","onOpenChange","longPressDuration","isOpen","setIsOpen","useState","longPressTimer","open","handleOpenChange","useCallback","newOpen","handleTouchStart","handleTouchEnd","c","l","HighlightedText","text","highlight","parts","part","i","Option","label","onChange","onKeyDown","onMouseEnter","onMouseLeave","selected","disabled","id","role","ariaSelected","searchValue","tooltip","onClick","badge"],"mappings":"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","file":"Option.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import { IconMap, IconName } from \"@deckai/icons\";\nimport React, { SVGProps } from \"react\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport { ResponsiveSize, getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"#080808\",\n secondary: \"#666666\",\n white: \"#ffffff\",\n primaryBlue: \"#089CCB\",\n disabled: \"#888888\",\n danger: \"#FF0000\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\nimport { Typography } from \"../types/tailwind\";\nimport { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles\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 { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type BadgeProps = {\n variant?: \"pink\" | \"orange\" | \"green\" | \"purple\";\n iconName?: IconName;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst variants = {\n pink: \"bg-tertiary-5\",\n orange: \"bg-tertiary-15\",\n green: \"bg-tertiary-25\",\n purple: \"bg-secondary-300\"\n};\n\nconst stringToVariant = (str: string): keyof typeof variants => {\n const variantKeys = Object.keys(variants) as Array<keyof typeof variants>;\n // Let's log some values to understand what's happening\n const hash = str\n .split(\"\")\n .reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0);\n\n const index = Math.abs(hash) % variantKeys.length;\n const selectedVariant = variantKeys[index];\n\n return selectedVariant;\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, iconName, children, ...props }, ref) => {\n const finalVariant =\n variant ||\n (typeof children === \"string\" ? stringToVariant(children) : \"pink\");\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-2\",\n \"rounded px-2 py-1.5\",\n \"text-sm font-medium\",\n variants[finalVariant],\n className\n )}\n {...props}\n >\n {iconName && <Icon size={16} name={iconName} />}\n <Text variant=\"body-xxs-semibold\" className=\"mt-0.5\">\n {children}\n </Text>\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n delayDuration?: number;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Duration in ms for long press on mobile devices */\n longPressDuration?: number;\n}\n\nexport const Tooltip = ({\n content,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n delayDuration = 200,\n defaultOpen,\n open: controlledOpen,\n onOpenChange,\n longPressDuration = 500\n}: TooltipProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen || false);\n let longPressTimer: Timer | null = null;\n\n const open = controlledOpen ?? isOpen;\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!controlledOpen) {\n setIsOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const handleTouchStart = useCallback(() => {\n const timer = setTimeout(() => {\n handleOpenChange(true);\n }, longPressDuration);\n longPressTimer = timer;\n }, [handleOpenChange, longPressDuration]);\n\n const handleTouchEnd = useCallback(() => {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n // Keep tooltip open for a brief moment after touch\n setTimeout(() => handleOpenChange(false), 1500);\n }, [longPressTimer, handleOpenChange]);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n <span\n tabIndex={0}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onTouchCancel={handleTouchEnd}\n >\n {children}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(\n \"z-50 overflow-hidden rounded-lg\",\n \"bg-black px-3 py-1.5\",\n \"text-xs text-white\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"select-none\",\n \"max-w-60\",\n \"touch-none\", // Prevent touch events from interfering with scrolling\n className\n )}\n >\n {typeof content === \"string\" ? (\n <Text variant=\"body-default-medium\" color=\"white\">\n {content}\n </Text>\n ) : (\n content\n )}\n <TooltipPrimitive.Arrow\n className=\"fill-text-primary\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n","import React, { KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Badge } from \"./Badge\";\nimport { Text } from \"./Text\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type OptionProps = {\n label: React.ReactNode;\n value: string;\n /** Optional color override for specific items like \"Logout\" in red */\n color?: \"default\" | \"danger\";\n /** Optional disabled state */\n disabled?: boolean;\n onChange?: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n selected?: boolean;\n className?: string;\n /** ID for accessibility */\n id?: string;\n /** ARIA role */\n role?: string;\n /** ARIA selected state */\n \"aria-selected\"?: boolean;\n /** Current search value for highlighting matches */\n searchValue?: string;\n /** Optional tooltip content */\n tooltip?: React.ReactNode;\n onClick?: () => void;\n badge?: React.ReactNode;\n};\n\nconst HighlightedText = ({\n text,\n highlight\n}: {\n text: string;\n highlight: string;\n}) => {\n if (!highlight) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${highlight})`, \"i\"));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === highlight.toLowerCase() ? (\n <span key={i} className=\"font-bold\">\n {part}\n </span>\n ) : (\n part\n )\n )}\n </>\n );\n};\n\nexport const Option = React.forwardRef<HTMLButtonElement, OptionProps>(\n (\n {\n value,\n label,\n onChange,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n selected,\n color,\n disabled,\n className,\n id,\n role,\n \"aria-selected\": ariaSelected,\n searchValue = \"\",\n tooltip,\n onClick,\n badge\n },\n ref\n ) => {\n const content = (\n <button\n ref={ref}\n type=\"button\"\n id={id}\n role={role}\n aria-selected={ariaSelected}\n disabled={disabled}\n className={cn(\n \"relative w-full text-left px-2 py-1.5 text-sm rounded outline-none\",\n \"cursor-pointer hover:bg-gray-100\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n selected && \"bg-gray-100\",\n \"flex items-center gap-2\",\n className\n )}\n onClick={() => {\n onChange?.(value);\n onClick?.();\n }}\n onKeyDown={onKeyDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Text\n variant=\"body-default-medium\"\n color={color === \"danger\" ? \"danger\" : \"inherit\"}\n >\n {typeof label === \"string\" ? (\n <HighlightedText text={label} highlight={searchValue} />\n ) : (\n label\n )}\n </Text>\n {badge && <Badge>{badge}</Badge>}\n </button>\n );\n return tooltip ? <Tooltip content={tooltip}>{content}</Tooltip> : content;\n }\n);\n"]}
@@ -21,6 +21,10 @@ type OptionProps = {
21
21
  "aria-selected"?: boolean;
22
22
  /** Current search value for highlighting matches */
23
23
  searchValue?: string;
24
+ /** Optional tooltip content */
25
+ tooltip?: React__default.ReactNode;
26
+ onClick?: () => void;
27
+ badge?: React__default.ReactNode;
24
28
  };
25
29
  declare const Option: React__default.ForwardRefExoticComponent<OptionProps & React__default.RefAttributes<HTMLButtonElement>>;
26
30
 
@@ -21,6 +21,10 @@ type OptionProps = {
21
21
  "aria-selected"?: boolean;
22
22
  /** Current search value for highlighting matches */
23
23
  searchValue?: string;
24
+ /** Optional tooltip content */
25
+ tooltip?: React__default.ReactNode;
26
+ onClick?: () => void;
27
+ badge?: React__default.ReactNode;
24
28
  };
25
29
  declare const Option: React__default.ForwardRefExoticComponent<OptionProps & React__default.RefAttributes<HTMLButtonElement>>;
26
30
 
@@ -1,8 +1,8 @@
1
- import o from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';function c(...e){return twMerge(clsx(e))}var b={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},E=e=>{let[t,n]=e.split("-");return t==="heading"?b[n]||"p":t==="label"?"label":"p"},f={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},x=e=>e?(Array.isArray(e)?e:[e]).map(n=>{if(n.includes(":")){let[r,a]=n.split(":");return `${r}:text-${a}`}return `text-${n}`}).join(" "):"text-body-default",g=o.forwardRef(({variant:e="body-default",color:t="primary",as:n,className:r,children:a,weight:s,...l},i)=>{let p=x(e),T=t==="inherit"?"text-inherit":`text-${t}`,m=o.useMemo(()=>{let y=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return E(y)},[e]);return o.createElement(n||m,{ref:i,className:`
1
+ import*as x from'react';import x__default,{useState,useCallback}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {IconMap}from'@deckai/icons';import*as l from'@radix-ui/react-tooltip';function y(...e){return twMerge(clsx(e))}var E={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]"}},b=e=>String(e),$=(e,t=24)=>{let o=[],n={};if(e===undefined){let r=b(t);r?o.push(E[r]):(n.height=`${t}px`,n.width=`${t}px`);}if(typeof e=="number"){let r=b(e);r?o.push(E[r]):(n.height=`${e}px`,n.width=`${e}px`);}if(Array.isArray(e)){let r=b(t),s=[r&&E[r]||`h-[${t}px] w-[${t}px]`];e.forEach(p=>{if(typeof p=="string"){let[i,m]=p.split(":"),a=parseInt(m,10),d=b(a);o.push(d&&k[i]?.[d]||`${i}:h-[${a}px] ${i}:w-[${a}px]`);}}),o.push(...s);}if(typeof e=="string"){let[r,s]=e.split(":"),p=parseInt(s,10),i=b(p);o.push(i&&k[r]?.[i]||`${r}:h-[${p}px] ${r}:w-[${p}px]`);}return {responsiveSizeClasses:o.join(" "),responsiveSizeStyles:n}};var N={primary:"#080808",secondary:"#666666",white:"#ffffff",primaryBlue:"#089CCB",disabled:"#888888",danger:"#FF0000"},R=x__default.forwardRef(({name:e,size:t=24,color:o="primary",title:n,className:r,style:s={},...p},i)=>{let m=IconMap[e],{responsiveSizeClasses:a,responsiveSizeStyles:d}=$(t,24);return x__default.createElement("div",{className:y("flex justify-center items-center",a,r),style:{"--icon-stroke":N[o],...d,...s}},x__default.createElement(m,{ref:i,"aria-hidden":!n,"aria-label":n,stroke:e.includes("filled")?undefined:N[o],...p}))});R.displayName="Icon";var O={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},G=e=>{let[t,o]=e.split("-");return t==="heading"?O[o]||"p":t==="label"?"label":"p"},D={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},F=e=>e?(Array.isArray(e)?e:[e]).map(o=>{if(o.includes(":")){let[n,r]=o.split(":");return `${n}:text-${r}`}return `text-${o}`}).join(" "):"text-body-default",T=x__default.forwardRef(({variant:e="body-default",color:t="primary",as:o,className:n,children:r,weight:s,...p},i)=>{let m=F(e),a=t==="inherit"?"text-inherit":`text-${t}`,d=x__default.useMemo(()=>{let h=typeof e=="string"?e.split(":").pop():Array.isArray(e)?e[0].split(":").pop():"body-default";return G(h)},[e]);return x__default.createElement(o||d,{ref:i,className:`
2
2
  font-sans antialiased
3
- ${p}
4
- ${T}
5
- ${s&&`!${f[s]}`}
6
- ${r}
7
- `,...l},a)});g.displayName="Text";var A=({text:e,highlight:t})=>{if(!t)return o.createElement(o.Fragment,null,e);let n=e.split(new RegExp(`(${t})`,"i"));return o.createElement(o.Fragment,null,n.map((r,a)=>r.toLowerCase()===t.toLowerCase()?o.createElement("span",{key:a,className:"font-bold"},r):r))},K=o.forwardRef(({value:e,label:t,onChange:n,onKeyDown:r,onMouseEnter:a,onMouseLeave:s,selected:l,color:i,disabled:p,className:T,id:m,role:u,"aria-selected":y,searchValue:H=""},M)=>o.createElement("button",{ref:M,type:"button",id:m,role:u,"aria-selected":y,disabled:p,className:c("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",l&&"bg-gray-100","flex items-center gap-2",T),onClick:()=>{n?.(e);},onKeyDown:r,onMouseEnter:a,onMouseLeave:s},o.createElement(g,{variant:"body-default-medium",color:i==="danger"?"danger":"inherit"},typeof t=="string"?o.createElement(A,{text:t,highlight:H}):t)));export{K as Option};//# sourceMappingURL=Option.js.map
3
+ ${m}
4
+ ${a}
5
+ ${s&&`!${D[s]}`}
6
+ ${n}
7
+ `,...p},r)});T.displayName="Text";var V={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},_=e=>{let t=Object.keys(V),o=e.split("").reduce((s,p)=>p.charCodeAt(0)+((s<<5)-s),0),n=Math.abs(o)%t.length;return t[n]},C=x.forwardRef(({className:e,variant:t,iconName:o,children:n,...r},s)=>{let p=t||(typeof n=="string"?_(n):"pink");return x.createElement("span",{ref:s,className:y("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",V[p],e),...r},o&&x.createElement(R,{size:16,name:o}),x.createElement(T,{variant:"body-xxs-semibold",className:"mt-0.5"},n))});C.displayName="Badge";var I=({content:e,children:t,side:o="bottom",align:n="center",className:r,delayDuration:s=200,defaultOpen:p,open:i,onOpenChange:m,longPressDuration:a=500})=>{let[d,H]=useState(p||false),h=null,M=i??d,g=useCallback(w=>{i||H(w),m?.(w);},[i,m]),L=useCallback(()=>{h=setTimeout(()=>{g(true);},a);},[g,a]),f=useCallback(()=>{h&&(clearTimeout(h),h=null),setTimeout(()=>g(false),1500);},[h,g]);return x.createElement(l.Provider,{delayDuration:s},x.createElement(l.Root,{open:M,onOpenChange:g},x.createElement(l.Trigger,{asChild:true},x.createElement("span",{tabIndex:0,onTouchStart:L,onTouchEnd:f,onTouchCancel:f},t)),x.createElement(l.Portal,null,x.createElement(l.Content,{side:o,align:n,sideOffset:4,className:y("z-50 overflow-hidden rounded-lg","bg-black px-3 py-1.5","text-xs text-white","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0","data-[side=bottom]:slide-in-from-top-2","data-[side=top]:slide-in-from-bottom-2","select-none","max-w-60","touch-none",r)},typeof e=="string"?x.createElement(T,{variant:"body-default-medium",color:"white"},e):e,x.createElement(l.Arrow,{className:"fill-text-primary",width:10,height:5})))))};var W=({text:e,highlight:t})=>{if(!t)return x__default.createElement(x__default.Fragment,null,e);let o=e.split(new RegExp(`(${t})`,"i"));return x__default.createElement(x__default.Fragment,null,o.map((n,r)=>n.toLowerCase()===t.toLowerCase()?x__default.createElement("span",{key:r,className:"font-bold"},n):n))},be=x__default.forwardRef(({value:e,label:t,onChange:o,onKeyDown:n,onMouseEnter:r,onMouseLeave:s,selected:p,color:i,disabled:m,className:a,id:d,role:H,"aria-selected":h,searchValue:M="",tooltip:g,onClick:L,badge:f},w)=>{let A=x__default.createElement("button",{ref:w,type:"button",id:d,role:H,"aria-selected":h,disabled:m,className:y("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",p&&"bg-gray-100","flex items-center gap-2",a),onClick:()=>{o?.(e),L?.();},onKeyDown:n,onMouseEnter:r,onMouseLeave:s},x__default.createElement(T,{variant:"body-default-medium",color:i==="danger"?"danger":"inherit"},typeof t=="string"?x__default.createElement(W,{text:t,highlight:M}):t),f&&x__default.createElement(C,null,f));return g?x__default.createElement(I,{content:g},A):A});export{be as Option};//# sourceMappingURL=Option.js.map
8
8
  //# sourceMappingURL=Option.js.map