@deckai/deck-ui 0.0.18 → 0.0.19
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.
- package/dist/components/AboutCard.cjs +4 -4
- package/dist/components/AboutCard.cjs.map +1 -1
- package/dist/components/AboutCard.js +4 -4
- package/dist/components/AboutCard.js.map +1 -1
- package/dist/components/AddWorkCard.cjs +5 -5
- package/dist/components/AddWorkCard.cjs.map +1 -1
- package/dist/components/AddWorkCard.d.cts +2 -1
- package/dist/components/AddWorkCard.d.ts +2 -1
- package/dist/components/AddWorkCard.js +5 -5
- package/dist/components/AddWorkCard.js.map +1 -1
- package/dist/components/AutocompleteInput.cjs +6 -6
- package/dist/components/AutocompleteInput.cjs.map +1 -1
- package/dist/components/AutocompleteInput.d.cts +14 -16
- package/dist/components/AutocompleteInput.d.ts +14 -16
- package/dist/components/AutocompleteInput.js +6 -6
- package/dist/components/AutocompleteInput.js.map +1 -1
- package/dist/components/Avatar.cjs +1 -1
- package/dist/components/Avatar.cjs.map +1 -1
- package/dist/components/Avatar.js +1 -1
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Breadcrumbs.cjs +2 -2
- package/dist/components/Breadcrumbs.cjs.map +1 -1
- package/dist/components/Breadcrumbs.js +2 -2
- package/dist/components/Breadcrumbs.js.map +1 -1
- package/dist/components/Button.cjs +5 -5
- package/dist/components/Button.cjs.map +1 -1
- package/dist/components/Button.js +5 -5
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Carousel.cjs +1 -1
- package/dist/components/Carousel.cjs.map +1 -1
- package/dist/components/Carousel.js +1 -1
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Collapsible.cjs +4 -4
- package/dist/components/Collapsible.cjs.map +1 -1
- package/dist/components/Collapsible.js +4 -4
- package/dist/components/Collapsible.js.map +1 -1
- package/dist/components/Combobox.cjs +3 -3
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.js +3 -3
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ContactItem.cjs +4 -4
- package/dist/components/ContactItem.cjs.map +1 -1
- package/dist/components/ContactItem.js +4 -4
- package/dist/components/ContactItem.js.map +1 -1
- package/dist/components/Dropdown.cjs +1 -1
- package/dist/components/Dropdown.cjs.map +1 -1
- package/dist/components/Dropdown.js +1 -1
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/EditButton.cjs +2 -2
- package/dist/components/EditButton.cjs.map +1 -1
- package/dist/components/EditButton.js +2 -2
- package/dist/components/EditButton.js.map +1 -1
- package/dist/components/Input.cjs +4 -4
- package/dist/components/Input.cjs.map +1 -1
- package/dist/components/Input.d.cts +1 -1
- package/dist/components/Input.d.ts +1 -1
- package/dist/components/Input.js +4 -4
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Link.cjs +5 -5
- package/dist/components/Link.cjs.map +1 -1
- package/dist/components/Link.js +5 -5
- package/dist/components/Link.js.map +1 -1
- package/dist/components/MultiSelectCombobox.cjs +5 -5
- package/dist/components/MultiSelectCombobox.cjs.map +1 -1
- package/dist/components/MultiSelectCombobox.js +5 -5
- package/dist/components/MultiSelectCombobox.js.map +1 -1
- package/dist/components/Navbar.cjs +3 -3
- package/dist/components/Navbar.cjs.map +1 -1
- package/dist/components/Navbar.js +3 -3
- package/dist/components/Navbar.js.map +1 -1
- package/dist/components/NavbarItem.cjs +1 -1
- package/dist/components/NavbarItem.cjs.map +1 -1
- package/dist/components/NavbarItem.js +1 -1
- package/dist/components/NavbarItem.js.map +1 -1
- package/dist/components/Pressable.cjs +1 -1
- package/dist/components/Pressable.cjs.map +1 -1
- package/dist/components/Pressable.js +1 -1
- package/dist/components/Pressable.js.map +1 -1
- package/dist/components/ProfileCard.cjs +2 -2
- package/dist/components/ProfileCard.cjs.map +1 -1
- package/dist/components/ProfileCard.js +2 -2
- package/dist/components/ProfileCard.js.map +1 -1
- package/dist/components/RadioGroup.cjs +5 -5
- package/dist/components/RadioGroup.cjs.map +1 -1
- package/dist/components/RadioGroup.js +5 -5
- package/dist/components/RadioGroup.js.map +1 -1
- package/dist/components/SegmentedTabs.cjs +5 -5
- package/dist/components/SegmentedTabs.cjs.map +1 -1
- package/dist/components/SegmentedTabs.js +5 -5
- package/dist/components/SegmentedTabs.js.map +1 -1
- package/dist/components/Sidebar.cjs +1 -1
- package/dist/components/Sidebar.cjs.map +1 -1
- package/dist/components/Sidebar.js +1 -1
- package/dist/components/Sidebar.js.map +1 -1
- package/dist/components/SocialCard.cjs +2 -2
- package/dist/components/SocialCard.cjs.map +1 -1
- package/dist/components/SocialCard.js +2 -2
- package/dist/components/SocialCard.js.map +1 -1
- package/dist/components/Switch.cjs +1 -1
- package/dist/components/Switch.cjs.map +1 -1
- package/dist/components/Switch.js +1 -1
- package/dist/components/Switch.js.map +1 -1
- package/dist/components/Tabs.cjs +3 -3
- package/dist/components/Tabs.cjs.map +1 -1
- package/dist/components/Tabs.js +3 -3
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Tag.cjs +4 -4
- package/dist/components/Tag.cjs.map +1 -1
- package/dist/components/Tag.js +4 -4
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/Text.d.cts +1 -1
- package/dist/components/Text.d.ts +1 -1
- package/dist/components/TextArea.cjs +4 -4
- package/dist/components/TextArea.cjs.map +1 -1
- package/dist/components/TextArea.js +4 -4
- package/dist/components/TextArea.js.map +1 -1
- package/dist/components/Toast.cjs +4 -4
- package/dist/components/Toast.cjs.map +1 -1
- package/dist/components/Toast.js +4 -4
- package/dist/components/Toast.js.map +1 -1
- package/dist/components/WorkCard.cjs +4 -4
- package/dist/components/WorkCard.cjs.map +1 -1
- package/dist/components/WorkCard.d.cts +2 -1
- package/dist/components/WorkCard.d.ts +2 -1
- package/dist/components/WorkCard.js +4 -4
- package/dist/components/WorkCard.js.map +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/styles/styles.css +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/index.ts","../../src/utils/tailwind.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Input.tsx","../../src/components/Option.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/Combobox.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStylesCoerced","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","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Input","f","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","defaultValue","onChange","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","HighlightedText","text","highlight","parts","part","i","Option","onKeyDown","onMouseEnter","onMouseLeave","selected","disabled","role","ariaSelected","searchValue","AutocompleteInput","forwardRef","suggestion","placeholder","ariaControls","ariaActiveDescendant","ariaAutocomplete","Combobox","options","container","autocomplete","loading","noOptionsMessage","open","setOpen","useState","setSearchValue","expandedGroups","setExpandedGroups","highlightedIndex","setHighlightedIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","visibleOptions","option","filteredGroups","selectedOption","opt","displayValue","handleOptionChange","useCallback","optionValue","toggleGroup","groupLabel","prev","useEffect","initialState","handleKeyDown","event","matchingOption","handleOptionKeyDown","input","length","highlightedOption","getSelectedOption","index","O","isOpen","groupIndex","V","optionIndex","isSelected"],"mappings":"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","file":"Combobox.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","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, { 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 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 * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { focusRingStyles, focusRingStylesCoerced } from \"../utils/tailwind\";\nimport { IconName } from \"@deckai/icons\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value.toString());\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n },\n [onChange]\n );\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n {\n \"border-secondary-50\": !error && !forceShowFocusRing,\n \"border-tertiary-10\": error,\n [focusRingStylesCoerced]: forceShowFocusRing\n }\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text\n variant=\"body-xxs\"\n as=\"span\"\n color=\"primary-100\"\n className=\"font-bold\"\n >\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import React, { 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","import React, { forwardRef, KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\n\nexport type AutocompleteInputProps = {\n value: string;\n suggestion: string;\n placeholder?: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n label?: string;\n labelClassName?: string;\n id?: string;\n disabled?: boolean;\n end?: React.ReactNode;\n className?: string;\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n};\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n placeholder,\n onChange,\n onKeyDown,\n label,\n labelClassName,\n id,\n disabled,\n end,\n className,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete\n },\n ref\n ) => {\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary ring-offset-background disabled:opacity-50\",\n {\n \"border-secondary-50\": !error,\n \"border-tertiary-10\": error,\n \"ring-2 ring-offset-2\": forceShowFocusRing,\n \"focus-within:ring-2 focus-within:ring-offset-2\":\n !forceShowFocusRing\n },\n className\n )}\n >\n <div className=\"flex relative\">\n <div className=\"relative w-full\">\n <input\n ref={ref}\n id={id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n className={cn(\n \"font-sans text-sm flex w-full file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none bg-transparent\",\n end && \"pr-10\"\n )}\n aria-invalid={error}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n />\n {suggestion && (\n <div className=\"absolute inset-0 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n {end && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {end}\n </div>\n )}\n </div>\n </div>\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n","import React, {\n useCallback,\n useMemo,\n useState,\n useRef,\n KeyboardEvent,\n useEffect\n} from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { Input } from \"./Input\";\nimport { OptionProps, Option } from \"./Option\";\nimport { Text } from \"./Text\";\nimport { Icon } from \"./Icon\";\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type ComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n placeholder?: string;\n value?: string;\n onChange: (value: string) => void;\n end?: React.ReactNode;\n className?: string;\n /** Label text for the combobox */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** ID for accessibility */\n id?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n autocomplete?: boolean;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for async options */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n};\n\nexport const Combobox = ({\n options,\n placeholder = \"Select an item...\",\n value,\n onChange,\n end,\n className,\n label,\n labelClassName,\n id,\n disabled,\n container,\n autocomplete = false,\n loading = false,\n error = false,\n errorMessage,\n noOptionsMessage\n}: ComboboxProps) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const [expandedGroups, setExpandedGroups] = useState<Record<string, boolean>>(\n {}\n );\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = useMemo(\n () => options.length > 0 && \"options\" in options[0],\n [options]\n );\n\n const flatOptions = useMemo(() => {\n if (!options.length) return [];\n if (!isGrouped) return options as OptionProps[];\n return (options as OptionGroup[]).reduce<OptionProps[]>(\n (acc, group) => [...acc, ...group.options],\n []\n );\n }, [isGrouped, options]);\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) =>\n searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true\n );\n }, [flatOptions, searchValue]);\n\n const filteredGroups = useMemo(() => {\n if (!isGrouped) {\n return visibleOptions.length > 0\n ? [{ label: \"\", options: visibleOptions }]\n : [];\n }\n\n return (options as OptionGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) =>\n searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true\n )\n }))\n .filter((group) => group.options.length > 0);\n }, [isGrouped, options, searchValue, visibleOptions]);\n\n const selectedOption = useMemo(\n () => flatOptions.find((opt) => opt.value === value),\n [value, flatOptions]\n );\n\n const displayValue = useMemo(() => {\n if (open) return searchValue;\n if (selectedOption) return selectedOption.label?.toString() || \"\";\n return \"\";\n }, [open, searchValue, selectedOption]);\n\n const suggestion = useMemo(() => {\n if (!autocomplete || !searchValue || !open) return \"\";\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase()) &&\n opt.label.toLowerCase() !== searchValue.toLowerCase()\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchValue, visibleOptions, open]);\n\n const handleOptionChange = useCallback(\n (optionValue: string) => {\n onChange(optionValue);\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n },\n [onChange]\n );\n\n const toggleGroup = useCallback((groupLabel: string) => {\n setExpandedGroups((prev) => ({\n ...prev,\n [groupLabel]: !prev[groupLabel]\n }));\n }, []);\n\n // Initialize expanded state for all groups\n useEffect(() => {\n if (isGrouped) {\n const initialState = (options as OptionGroup[]).reduce<\n Record<string, boolean>\n >(\n (acc, group) => ({\n ...acc,\n [group.label]: true\n }),\n {}\n );\n setExpandedGroups(initialState);\n }\n }, [isGrouped, options]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(true);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(0);\n } else {\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(false);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(visibleOptions.length - 1);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n }\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => Math.max(0, prev - 10));\n }\n break;\n\n case \"PageDown\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) =>\n Math.min(visibleOptions.length - 1, prev + 10)\n );\n }\n break;\n\n case \"Home\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(0);\n }\n break;\n\n case \"End\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(visibleOptions.length - 1);\n }\n break;\n\n case \"Enter\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n } else if (autocomplete && suggestion) {\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase())\n );\n if (matchingOption) {\n handleOptionChange(matchingOption.value);\n }\n }\n break;\n\n case \"Tab\":\n if (!open) {\n event.preventDefault();\n setOpen(true);\n setHighlightedIndex(0);\n } else if (\n highlightedIndex >= 0 &&\n visibleOptions[highlightedIndex]\n ) {\n event.preventDefault();\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n break;\n }\n },\n [\n open,\n highlightedIndex,\n visibleOptions,\n suggestion,\n searchValue,\n handleOptionChange,\n autocomplete\n ]\n );\n\n const handleOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n break;\n\n case \"Enter\":\n case \"Space\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n inputRef.current?.focus();\n break;\n\n case \"Tab\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionChange]\n );\n\n // Keep input focused when dropdown is open\n useEffect(() => {\n if (open) {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n // Move cursor to end of text\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }, [open]);\n\n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!open) {\n setHighlightedIndex(-1);\n }\n }, [open]);\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && highlightedIndex >= 0 && listRef.current) {\n const highlightedOption = listRef.current.querySelector(\n `[id=\"${id}-option-${highlightedIndex}\"]`\n ) as HTMLElement;\n\n if (highlightedOption) {\n highlightedOption.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\"\n });\n }\n }\n }, [highlightedIndex, open, id]);\n\n const getSelectedOption = useCallback(\n (option: OptionProps) => {\n if (!open) return value === option.value;\n\n const index = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n\n // If using keyboard navigation, show that highlight\n if (highlightedIndex >= 0) {\n return index === highlightedIndex;\n }\n\n // If no option is highlighted, highlight the first one\n if (highlightedIndex === -1) {\n return index === 0;\n }\n\n return false;\n },\n [open, value, highlightedIndex, visibleOptions]\n );\n\n // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\n\n return (\n <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n } else {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }\n }}\n >\n <div\n className={`relative w-full font-sans text-secondary ${className}`}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n >\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"w-full text-left\"\n disabled={disabled}\n >\n {autocomplete ? (\n <AutocompleteInput\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayValue}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchValue(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className=\"flex-1\"\n forceShowFocusRing={open}\n disabled={disabled}\n aria-autocomplete=\"list\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n ) : (\n <Input\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayValue}\n onChange={(e) => {\n setSearchValue(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className=\"flex-1\"\n forceShowFocusRing={open}\n disabled={disabled}\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n )}\n </button>\n </Popover.Trigger>\n\n <Popover.Portal container={container}>\n <Popover.Content\n className=\"w-[--radix-popover-trigger-width] p-1 bg-white rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out overflow-y-scroll outline-none\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n e.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }}\n >\n <div\n ref={listRef}\n className=\"max-h-60 !overflow-y-scroll flex flex-col items-start outline-none\"\n role=\"listbox\"\n id={`${id}-listbox`}\n aria-label={label}\n aria-busy={loading}\n >\n {error ? (\n <div className=\"px-2 py-1.5 text-sm text-red-500\">\n {errorMessage || \"Failed to load options\"}\n </div>\n ) : loading ? (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n Loading...\n </div>\n ) : visibleOptions.length > 0 ? (\n filteredGroups.map((group, groupIndex) => (\n <Collapsible.Root\n key={group.label || groupIndex}\n className=\"w-full\"\n open={expandedGroups[group.label] ?? true}\n onOpenChange={() => group.label && toggleGroup(group.label)}\n >\n {group.label && (\n <Collapsible.Trigger asChild>\n <div\n className=\"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50\"\n tabIndex={-1}\n >\n <Text variant=\"body-default-bold\" color=\"secondary\">\n {group.label}\n </Text>\n <Icon\n name=\"arrow-down\"\n className={cn(\n \"transition-transform\",\n expandedGroups[group.label] && \"rotate-180\"\n )}\n size={16}\n />\n </div>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content className=\"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\">\n {group.options.map((option, optionIndex) => {\n const isSelected = getSelectedOption(option);\n return (\n <Option\n key={`${groupIndex}-${optionIndex}`}\n onChange={handleOptionChange}\n onKeyDown={handleOptionKeyDown}\n value={option.value}\n label={option.label}\n className={cn(\"pl-4\")}\n selected={isSelected}\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={isSelected}\n searchValue={searchValue}\n />\n );\n })}\n </Collapsible.Content>\n </Collapsible.Root>\n ))\n ) : (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n {noOptionsMessage || \"No results found\"}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/index.ts","../../src/utils/tailwind.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Input.tsx","../../src/components/Option.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/Combobox.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStylesCoerced","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","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Input","u","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","defaultValue","onChange","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","HighlightedText","text","highlight","parts","part","i","Option","onKeyDown","onMouseEnter","onMouseLeave","selected","role","ariaSelected","searchValue","AutocompleteInput","forwardRef","suggestion","ariaControls","ariaActiveDescendant","ariaAutocomplete","Combobox","options","placeholder","container","autocomplete","loading","noOptionsMessage","open","setOpen","useState","setSearchValue","expandedGroups","setExpandedGroups","highlightedIndex","setHighlightedIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","visibleOptions","option","filteredGroups","selectedOption","opt","displayValue","handleOptionChange","useCallback","optionValue","toggleGroup","groupLabel","prev","useEffect","initialState","handleKeyDown","event","matchingOption","handleOptionKeyDown","input","length","highlightedOption","getSelectedOption","index","R","isOpen","groupIndex","O","optionIndex","isSelected"],"mappings":"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","file":"Combobox.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","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: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, { 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 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 * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { focusRingStyles, focusRingStylesCoerced } from \"../utils/tailwind\";\nimport { IconName } from \"@deckai/icons\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value.toString());\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n },\n [onChange]\n );\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n !error && !forceShowFocusRing && \"border-secondary-50\",\n error && \"border-tertiary-10\",\n disabled && \"cursor-not-allowed opacity-50\",\n \"focus-within:ring-2 focus-within:ring-primary-100\",\n forceShowFocusRing && focusRingStylesCoerced\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n disabled={disabled}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text\n variant=\"body-xxs\"\n as=\"span\"\n color=\"primary-100\"\n className=\"font-bold\"\n >\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import React, { 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","import React, { forwardRef, KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\n\nexport type AutocompleteInputProps = {\n value: string;\n suggestion: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n} & Omit<InputProps, \"value\" | \"onChange\" | \"onKeyDown\">;\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n onChange,\n onKeyDown,\n className,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete,\n ...props\n },\n ref\n ) => {\n return (\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"bg-transparent\", className)}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n {...props}\n />\n {suggestion && (\n <div className=\"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n","import React, {\n useCallback,\n useMemo,\n useState,\n useRef,\n KeyboardEvent,\n useEffect\n} from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { Input } from \"./Input\";\nimport { OptionProps, Option } from \"./Option\";\nimport { Text } from \"./Text\";\nimport { Icon } from \"./Icon\";\nimport { cn } from \"../utils\";\nimport { focusRingStylesCoerced } from \"../utils/tailwind\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type ComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n placeholder?: string;\n value?: string;\n onChange: (value: string) => void;\n end?: React.ReactNode;\n className?: string;\n /** Label text for the combobox */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** ID for accessibility */\n id?: string;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n autocomplete?: boolean;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for async options */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n};\n\nexport const Combobox = ({\n options,\n placeholder = \"Select an item...\",\n value,\n onChange,\n end,\n className,\n label,\n labelClassName,\n id,\n disabled,\n container,\n autocomplete = false,\n loading = false,\n error = false,\n errorMessage,\n noOptionsMessage\n}: ComboboxProps) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const [expandedGroups, setExpandedGroups] = useState<Record<string, boolean>>(\n {}\n );\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = useMemo(\n () => options.length > 0 && \"options\" in options[0],\n [options]\n );\n\n const flatOptions = useMemo(() => {\n if (!options.length) return [];\n if (!isGrouped) return options as OptionProps[];\n return (options as OptionGroup[]).reduce<OptionProps[]>(\n (acc, group) => [...acc, ...group.options],\n []\n );\n }, [isGrouped, options]);\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) =>\n searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true\n );\n }, [flatOptions, searchValue]);\n\n const filteredGroups = useMemo(() => {\n if (!isGrouped) {\n return visibleOptions.length > 0\n ? [{ label: \"\", options: visibleOptions }]\n : [];\n }\n\n return (options as OptionGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) =>\n searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true\n )\n }))\n .filter((group) => group.options.length > 0);\n }, [isGrouped, options, searchValue, visibleOptions]);\n\n const selectedOption = useMemo(\n () => flatOptions.find((opt) => opt.value === value),\n [value, flatOptions]\n );\n\n const displayValue = useMemo(() => {\n if (open) return searchValue;\n if (selectedOption) return selectedOption.label?.toString() || \"\";\n return \"\";\n }, [open, searchValue, selectedOption]);\n\n const suggestion = useMemo(() => {\n if (!autocomplete || !searchValue || !open) return \"\";\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase()) &&\n opt.label.toLowerCase() !== searchValue.toLowerCase()\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchValue, visibleOptions, open]);\n\n const handleOptionChange = useCallback(\n (optionValue: string) => {\n onChange(optionValue);\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n },\n [onChange]\n );\n\n const toggleGroup = useCallback((groupLabel: string) => {\n setExpandedGroups((prev) => ({\n ...prev,\n [groupLabel]: !prev[groupLabel]\n }));\n }, []);\n\n // Initialize expanded state for all groups\n useEffect(() => {\n if (isGrouped) {\n const initialState = (options as OptionGroup[]).reduce<\n Record<string, boolean>\n >(\n (acc, group) => ({\n ...acc,\n [group.label]: true\n }),\n {}\n );\n setExpandedGroups(initialState);\n }\n }, [isGrouped, options]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(true);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(0);\n } else {\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(false);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(visibleOptions.length - 1);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n }\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => Math.max(0, prev - 10));\n }\n break;\n\n case \"PageDown\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) =>\n Math.min(visibleOptions.length - 1, prev + 10)\n );\n }\n break;\n\n case \"Home\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(0);\n }\n break;\n\n case \"End\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(visibleOptions.length - 1);\n }\n break;\n\n case \"Enter\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n } else if (autocomplete && suggestion) {\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase())\n );\n if (matchingOption) {\n handleOptionChange(matchingOption.value);\n }\n }\n break;\n\n case \"Tab\":\n if (!open) {\n event.preventDefault();\n setOpen(true);\n setHighlightedIndex(0);\n } else if (\n highlightedIndex >= 0 &&\n visibleOptions[highlightedIndex]\n ) {\n event.preventDefault();\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n break;\n }\n },\n [\n open,\n highlightedIndex,\n visibleOptions,\n suggestion,\n searchValue,\n handleOptionChange,\n autocomplete\n ]\n );\n\n const handleOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n break;\n\n case \"Enter\":\n case \"Space\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n inputRef.current?.focus();\n break;\n\n case \"Tab\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionChange(visibleOptions[highlightedIndex].value);\n }\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionChange]\n );\n\n // Keep input focused when dropdown is open\n useEffect(() => {\n if (open) {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n // Move cursor to end of text\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }, [open]);\n\n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!open) {\n setHighlightedIndex(-1);\n }\n }, [open]);\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && highlightedIndex >= 0 && listRef.current) {\n const highlightedOption = listRef.current.querySelector(\n `[id=\"${id}-option-${highlightedIndex}\"]`\n ) as HTMLElement;\n\n if (highlightedOption) {\n highlightedOption.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\"\n });\n }\n }\n }, [highlightedIndex, open, id]);\n\n const getSelectedOption = useCallback(\n (option: OptionProps) => {\n if (!open) return value === option.value;\n\n const index = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n\n // If using keyboard navigation, show that highlight\n if (highlightedIndex >= 0) {\n return index === highlightedIndex;\n }\n\n // If no option is highlighted, highlight the first one\n if (highlightedIndex === -1) {\n return index === 0;\n }\n\n return false;\n },\n [open, value, highlightedIndex, visibleOptions]\n );\n\n // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\n\n return (\n <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n } else {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }\n }}\n >\n <div\n className={`relative w-full font-sans text-secondary ${className}`}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n >\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"w-full text-left\"\n disabled={disabled}\n >\n {autocomplete ? (\n <AutocompleteInput\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayValue}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchValue(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className={cn(\"flex-1\", className)}\n forceShowFocusRing={open}\n disabled={disabled}\n aria-autocomplete=\"list\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n ) : (\n <Input\n ref={inputRef}\n id={id}\n label={label}\n labelClassName={labelClassName}\n placeholder={placeholder}\n value={displayValue}\n onChange={(e) => {\n setSearchValue(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n end={end}\n className={cn(\"flex-1\", className)}\n forceShowFocusRing={open}\n disabled={disabled}\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n )}\n </button>\n </Popover.Trigger>\n\n <Popover.Portal container={container}>\n <Popover.Content\n className=\"w-[--radix-popover-trigger-width] p-1 bg-white rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out overflow-y-scroll outline-none\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n e.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }}\n >\n <div\n ref={listRef}\n className=\"max-h-60 !overflow-y-scroll flex flex-col items-start outline-none\"\n role=\"listbox\"\n id={`${id}-listbox`}\n aria-label={label}\n aria-busy={loading}\n >\n {error ? (\n <div className=\"px-2 py-1.5 text-sm text-red-500\">\n {errorMessage || \"Failed to load options\"}\n </div>\n ) : loading ? (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n Loading...\n </div>\n ) : visibleOptions.length > 0 ? (\n filteredGroups.map((group, groupIndex) => (\n <Collapsible.Root\n key={group.label || groupIndex}\n className=\"w-full\"\n open={expandedGroups[group.label] ?? true}\n onOpenChange={() => group.label && toggleGroup(group.label)}\n >\n {group.label && (\n <Collapsible.Trigger asChild>\n <div\n className=\"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50\"\n tabIndex={-1}\n >\n <Text variant=\"body-default-bold\" color=\"secondary\">\n {group.label}\n </Text>\n <Icon\n name=\"arrow-down\"\n className={cn(\n \"transition-transform\",\n expandedGroups[group.label] && \"rotate-180\"\n )}\n size={16}\n />\n </div>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content className=\"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\">\n {group.options.map((option, optionIndex) => {\n const isSelected = getSelectedOption(option);\n return (\n <Option\n key={`${groupIndex}-${optionIndex}`}\n onChange={handleOptionChange}\n onKeyDown={handleOptionKeyDown}\n value={option.value}\n label={option.label}\n className={cn(\"pl-4\")}\n selected={isSelected}\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={isSelected}\n searchValue={searchValue}\n />\n );\n })}\n </Collapsible.Content>\n </Collapsible.Root>\n ))\n ) : (\n <div className=\"px-2 py-1.5 text-sm text-gray-500\">\n {noOptionsMessage || \"No results found\"}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n );\n};\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as f from'react';import f__default,{forwardRef,useState,useRef,useMemo,useCallback,useEffect}from'react';import*as R from'@radix-ui/react-popover';import*as O from'@radix-ui/react-collapsible';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {IconMap}from'@deckai/icons';function x(...t){return twMerge(clsx(t))}var oe="ring-2 ring-primary-100";var ne={primary:"#080808",secondary:"#666666",white:"#ffffff",primaryBlue:"#089CCB",disabled:"#888888",danger:"#FF0000"},me={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"},fe=t=>{if(!t)return {width:"24px",height:"24px"};let a=Array.isArray(t)?t:[t],s={},i;return a.forEach(p=>{if(typeof p=="number")i=`${p}px`;else {let[g,d]=p.split(":"),T=parseInt(d,10);s[`@media (min-width: ${me[g]})`]=`${T}px`;}}),{width:i||"24px",height:i||"24px",...Object.entries(s).reduce((p,[g,d])=>({...p,[g]:{width:d,height:d}}),{})}},K=f__default.forwardRef(({name:t,size:a=24,color:s="primary",title:i,className:p,style:g={},...d},T)=>{let c=IconMap[t],h=fe(a);return f__default.createElement("div",{className:x("flex justify-center items-center",p),style:{...h,"--icon-stroke":ne[s],...g}},f__default.createElement(c,{ref:T,"aria-hidden":!i,"aria-label":i,stroke:t.includes("filled")?void 0:ne[s],...d}))});K.displayName="Icon";var ge={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},be=t=>{let[a,s]=t.split("-");return a==="heading"?ge[s]||"p":a==="label"?"label":"p"},ye={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},he=t=>t?(Array.isArray(t)?t:[t]).map(s=>{if(s.includes(":")){let[i,p]=s.split(":");return `${i}:text-${p}`}return `text-${s}`}).join(" "):"text-body-default",L=f__default.forwardRef(({variant:t="body-default",color:a="primary",as:s,className:i,children:p,weight:g,...d},T)=>{let c=he(t),h=a==="inherit"?"text-inherit":`text-${a}`,M=f__default.useMemo(()=>{let C=typeof t=="string"?t.split(":").pop():Array.isArray(t)?t[0].split(":").pop():"body-default";return be(C)},[t]);return f__default.createElement(s||M,{ref:T,className:`
|
|
2
2
|
font-sans antialiased
|
|
3
3
|
${c}
|
|
4
4
|
${h}
|
|
5
|
-
${
|
|
5
|
+
${g&&`!${ye[g]}`}
|
|
6
6
|
${i}
|
|
7
|
-
`,...m},p)});L.displayName="Text";var re=g.forwardRef(({className:t,end:a,iconName:s,color:i,size:p,title:y,label:m,labelClassName:v,id:c,children:h,forceShowFocusRing:C,error:d,errorMessage:x,helperText:w,showCharacterCount:P,maxLength:S,value:r,defaultValue:T,onChange:u,...H},z)=>{let[K,n]=g.useState(r?.toString()||T?.toString()||"");g.useEffect(()=>{r!==void 0&&n(r.toString());},[r]);let b=g.useCallback(N=>{let D=N.target.value;n(D),u?.(N);},[u]),G=K.length,R=P||!!S;return g.createElement("div",{className:"gap-1 flex flex-col"},m&&g.createElement(L,{variant:"label-default",htmlFor:c,as:"label",color:d?"danger":"primary",className:E(v)},m),g.createElement("div",{className:E("relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150",{"border-secondary-50":!d&&!C,"border-tertiary-10":d,[te]:C})},g.createElement("div",{className:"flex relative"},g.createElement("input",{ref:z,id:c,className:E("font-sans text-sm flex w-full file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg",a&&"pr-10",t),value:K,maxLength:S,onChange:b,"aria-invalid":d,...H}),(a||s)&&g.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},s?g.createElement(B,{name:s,color:d?"danger":"secondary",size:p,title:y}):a)),h),g.createElement("div",{className:"flex justify-between gap-2"},d&&x||w?g.createElement(L,{variant:"body-xxs",color:d?"danger":"secondary",className:"mt-1"},d?x:w):null,R&&g.createElement(L,{variant:"body-xxs",color:d?"danger":"secondary",className:"text-right mt-1"},g.createElement(L,{variant:"body-xxs",as:"span",color:"primary-100",className:"font-bold"},G),S&&`/${S}`," characters")))});var xe=({text:t,highlight:a})=>{if(!a)return g__default.createElement(g__default.Fragment,null,t);let s=t.split(new RegExp(`(${a})`,"i"));return g__default.createElement(g__default.Fragment,null,s.map((i,p)=>i.toLowerCase()===a.toLowerCase()?g__default.createElement("span",{key:p,className:"font-bold"},i):i))},ne=g__default.forwardRef(({value:t,label:a,onChange:s,onKeyDown:i,onMouseEnter:p,onMouseLeave:y,selected:m,color:v,disabled:c,className:h,id:C,role:d,"aria-selected":x,searchValue:w=""},P)=>g__default.createElement("button",{ref:P,type:"button",id:C,role:d,"aria-selected":x,disabled:c,className:E("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",m&&"bg-gray-100","flex items-center gap-2",h),onClick:()=>{s?.(t);},onKeyDown:i,onMouseEnter:p,onMouseLeave:y},g__default.createElement(L,{variant:"body-default-medium",color:v==="danger"?"danger":"inherit"},typeof a=="string"?g__default.createElement(xe,{text:a,highlight:w}):a)));var J=forwardRef(({value:t,suggestion:a,placeholder:s,onChange:i,onKeyDown:p,label:y,labelClassName:m,id:v,disabled:c,end:h,className:C,forceShowFocusRing:d,error:x,errorMessage:w,helperText:P,"aria-controls":S,"aria-activedescendant":r,"aria-autocomplete":T},u)=>g__default.createElement("div",{className:"gap-1 flex flex-col"},y&&g__default.createElement(L,{variant:"label-default",htmlFor:v,as:"label",color:x?"danger":"primary",className:E(m)},y),g__default.createElement("div",{className:E("relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary ring-offset-background disabled:opacity-50",{"border-secondary-50":!x,"border-tertiary-10":x,"ring-2 ring-offset-2":d,"focus-within:ring-2 focus-within:ring-offset-2":!d},C)},g__default.createElement("div",{className:"flex relative"},g__default.createElement("div",{className:"relative w-full"},g__default.createElement("input",{ref:u,id:v,value:t,onChange:H=>i(H.target.value),onKeyDown:p,disabled:c,placeholder:s,className:E("font-sans text-sm flex w-full file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none bg-transparent",h&&"pr-10"),"aria-invalid":x,"aria-controls":S,"aria-activedescendant":r,"aria-autocomplete":T}),a&&g__default.createElement("div",{className:"absolute inset-0 text-secondary opacity-40 pointer-events-none text-sm"},t,a.slice(t.length))),h&&g__default.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},h))),x&&w||P?g__default.createElement(L,{variant:"body-xxs",color:x?"danger":"secondary",className:"mt-1"},x?w:P):null));J.displayName="AutocompleteInput";var at=({options:t,placeholder:a="Select an item...",value:s,onChange:i,end:p,className:y,label:m,labelClassName:v,id:c,disabled:h,container:C,autocomplete:d=!1,loading:x=!1,error:w=!1,errorMessage:P,noOptionsMessage:S})=>{let[r,T]=useState(!1),[u,H]=useState(""),[z,K]=useState({}),[n,b]=useState(-1),G=useRef(null),R=useRef(null),N=useMemo(()=>t.length>0&&"options"in t[0],[t]),D=useMemo(()=>t.length?N?t.reduce((e,o)=>[...e,...o.options],[]):t:[],[N,t]),l=useMemo(()=>D.filter(e=>u&&typeof e.label=="string"?e.label.toLowerCase().includes(u.toLowerCase()):!0),[D,u]),se=useMemo(()=>N?t.map(e=>({...e,options:e.options.filter(o=>u&&typeof o.label=="string"?o.label.toLowerCase().includes(u.toLowerCase()):!0)})).filter(e=>e.options.length>0):l.length>0?[{label:"",options:l}]:[],[N,t,u,l]),q=useMemo(()=>D.find(e=>e.value===s),[s,D]),X=useMemo(()=>r?u:q&&q.label?.toString()||"",[r,u,q]),_=useMemo(()=>!d||!u||!r?"":l.find(o=>typeof o.label=="string"&&o.label.toLowerCase().startsWith(u.toLowerCase())&&o.label.toLowerCase()!==u.toLowerCase())?.label?.toString()||"",[d,u,l,r]),A=useCallback(e=>{i(e),T(!1),H(""),b(-1);},[i]),le=useCallback(e=>{K(o=>({...o,[e]:!o[e]}));},[]);useEffect(()=>{if(N){let e=t.reduce((o,M)=>({...o,[M.label]:!0}),{});K(e);}},[N,t]);let Y=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),e.altKey?T(!0):r?b(o=>o<l.length-1?o+1:0):(T(!0),b(0));break;case"ArrowUp":e.preventDefault(),e.altKey?T(!1):r?b(o=>o>0?o-1:l.length-1):(T(!0),b(l.length-1));break;case"PageUp":e.preventDefault(),r&&b(o=>Math.max(0,o-10));break;case"PageDown":e.preventDefault(),r&&b(o=>Math.min(l.length-1,o+10));break;case"Home":e.preventDefault(),r&&b(0);break;case"End":e.preventDefault(),r&&b(l.length-1);break;case"Enter":if(e.preventDefault(),n>=0&&l[n])A(l[n].value);else if(d&&_){let o=l.find(M=>typeof M.label=="string"&&M.label.toLowerCase().startsWith(u.toLowerCase()));o&&A(o.value);}break;case"Tab":r?n>=0&&l[n]&&(e.preventDefault(),A(l[n].value)):(e.preventDefault(),T(!0),b(0));break;case"Escape":e.preventDefault(),T(!1),H("");break}},[r,n,l,_,u,A,d]),ie=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),b(o=>o<l.length-1?o+1:0);break;case"ArrowUp":e.preventDefault(),b(o=>o>0?o-1:l.length-1);break;case"Enter":case"Space":e.preventDefault(),n>=0&&l[n]&&A(l[n].value);break;case"Escape":e.preventDefault(),T(!1),R.current?.focus();break;case"Tab":e.preventDefault(),n>=0&&l[n]&&A(l[n].value);break}},[n,l,A]);useEffect(()=>{if(r){let e=R.current;if(e){e.focus({preventScroll:!0});let o=e.value.length;e.setSelectionRange(o,o);}}},[r]),useEffect(()=>{r||b(-1);},[r]),useEffect(()=>{if(r&&n>=0&&G.current){let e=G.current.querySelector(`[id="${c}-option-${n}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[n,r,c]);let pe=useCallback(e=>{if(!r)return s===e.value;let o=l.findIndex(M=>M.value===e.value);return n>=0?o===n:n===-1?o===0:!1},[r,s,n,l]);return useEffect(()=>{r&&n===-1&&b(0);},[r,n]),g__default.createElement(O.Root,{open:r&&!h,onOpenChange:e=>{if(!h)if(T(e),!e)H(""),b(-1);else {let o=R.current;if(o){o.focus({preventScroll:!0});let M=o.value.length;o.setSelectionRange(M,M);}}}},g__default.createElement("div",{className:`relative w-full font-sans text-secondary ${y}`,role:"combobox","aria-expanded":r,"aria-haspopup":"listbox","aria-controls":`${c}-listbox`},g__default.createElement(O.Trigger,{asChild:!0},g__default.createElement("button",{type:"button",className:"w-full text-left",disabled:h},d?g__default.createElement(J,{ref:R,id:c,label:m,labelClassName:v,placeholder:a,value:X,suggestion:_,onChange:e=>{H(e),r||T(!0);},onKeyDown:Y,end:p,className:"flex-1",forceShowFocusRing:r,disabled:h,"aria-autocomplete":"list","aria-controls":`${c}-listbox`,"aria-activedescendant":n>=0?`${c}-option-${n}`:void 0}):g__default.createElement(re,{ref:R,id:c,label:m,labelClassName:v,placeholder:a,value:X,onChange:e=>{H(e.target.value),r||T(!0);},onKeyDown:Y,end:p,className:"flex-1",forceShowFocusRing:r,disabled:h,"aria-controls":`${c}-listbox`,"aria-activedescendant":n>=0?`${c}-option-${n}`:void 0}))),g__default.createElement(O.Portal,{container:C},g__default.createElement(O.Content,{className:"w-[--radix-popover-trigger-width] p-1 bg-white rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out overflow-y-scroll outline-none",side:"bottom",align:"start",sideOffset:8,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:e=>e.preventDefault(),onInteractOutside:e=>{e.preventDefault(),T(!1),H(""),b(-1);}},g__default.createElement("div",{ref:G,className:"max-h-60 !overflow-y-scroll flex flex-col items-start outline-none",role:"listbox",id:`${c}-listbox`,"aria-label":m,"aria-busy":x},w?g__default.createElement("div",{className:"px-2 py-1.5 text-sm text-red-500"},P||"Failed to load options"):x?g__default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},"Loading..."):l.length>0?se.map((e,o)=>g__default.createElement(V.Root,{key:e.label||o,className:"w-full",open:z[e.label]??!0,onOpenChange:()=>e.label&&le(e.label)},e.label&&g__default.createElement(V.Trigger,{asChild:!0},g__default.createElement("div",{className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50",tabIndex:-1},g__default.createElement(L,{variant:"body-default-bold",color:"secondary"},e.label),g__default.createElement(B,{name:"arrow-down",className:E("transition-transform",z[e.label]&&"rotate-180"),size:16}))),g__default.createElement(V.Content,{className:"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up"},e.options.map((M,Z)=>{let ee=pe(M);return g__default.createElement(ne,{key:`${o}-${Z}`,onChange:A,onKeyDown:ie,value:M.value,label:M.label,className:E("pl-4"),selected:ee,id:`${c}-option-${Z}`,role:"option","aria-selected":ee,searchValue:u})})))):g__default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},S||"No results found"))))))};export{at as Combobox};//# sourceMappingURL=Combobox.js.map
|
|
7
|
+
`,...d},p)});L.displayName="Text";var z=f.forwardRef(({className:t,end:a,iconName:s,color:i,size:p,title:g,label:d,labelClassName:T,id:c,children:h,forceShowFocusRing:M,error:b,errorMessage:C,helperText:A,showCharacterCount:D,maxLength:I,value:n,defaultValue:v,onChange:y,disabled:H,...j},F)=>{let[r,m]=f.useState(n?.toString()||v?.toString()||"");f.useEffect(()=>{n!==void 0&&m(n.toString());},[n]);let V=f.useCallback(N=>{let l=N.target.value;m(l),y?.(N);},[y]),S=r.length,$=D||!!I;return f.createElement("div",{className:"gap-1 flex flex-col"},d&&f.createElement(L,{variant:"label-default",htmlFor:c,as:"label",color:b?"danger":"primary",className:x(T)},d),f.createElement("div",{className:x("relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150",!b&&!M&&"border-secondary-50",b&&"border-tertiary-10",H&&"cursor-not-allowed opacity-50","focus-within:ring-2 focus-within:ring-primary-100",M&&oe)},f.createElement("div",{className:"flex relative"},f.createElement("input",{ref:F,id:c,className:x("font-sans text-sm flex w-full file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg",a&&"pr-10",t),value:r,maxLength:I,onChange:V,"aria-invalid":b,disabled:H,...j}),(a||s)&&f.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},s?f.createElement(K,{name:s,color:b?"danger":"secondary",size:p,title:g}):a)),h),f.createElement("div",{className:"flex justify-between gap-2"},b&&C||A?f.createElement(L,{variant:"body-xxs",color:b?"danger":"secondary",className:"mt-1"},b?C:A):null,$&&f.createElement(L,{variant:"body-xxs",color:b?"danger":"secondary",className:"text-right mt-1"},f.createElement(L,{variant:"body-xxs",as:"span",color:"primary-100",className:"font-bold"},S),I&&`/${I}`," characters")))});var xe=({text:t,highlight:a})=>{if(!a)return f__default.createElement(f__default.Fragment,null,t);let s=t.split(new RegExp(`(${a})`,"i"));return f__default.createElement(f__default.Fragment,null,s.map((i,p)=>i.toLowerCase()===a.toLowerCase()?f__default.createElement("span",{key:p,className:"font-bold"},i):i))},re=f__default.forwardRef(({value:t,label:a,onChange:s,onKeyDown:i,onMouseEnter:p,onMouseLeave:g,selected:d,color:T,disabled:c,className:h,id:M,role:b,"aria-selected":C,searchValue:A=""},D)=>f__default.createElement("button",{ref:D,type:"button",id:M,role:b,"aria-selected":C,disabled:c,className:x("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",d&&"bg-gray-100","flex items-center gap-2",h),onClick:()=>{s?.(t);},onKeyDown:i,onMouseEnter:p,onMouseLeave:g},f__default.createElement(L,{variant:"body-default-medium",color:T==="danger"?"danger":"inherit"},typeof a=="string"?f__default.createElement(xe,{text:a,highlight:A}):a)));var X=forwardRef(({value:t,suggestion:a,onChange:s,onKeyDown:i,className:p,"aria-controls":g,"aria-activedescendant":d,"aria-autocomplete":T,...c},h)=>f__default.createElement("div",{className:"relative w-full"},f__default.createElement(z,{ref:h,value:t,onChange:M=>s(M.target.value),onKeyDown:i,className:x("bg-transparent",p),"aria-controls":g,"aria-activedescendant":d,"aria-autocomplete":T,...c}),a&&f__default.createElement("div",{className:"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm"},t,a.slice(t.length))));X.displayName="AutocompleteInput";var at=({options:t,placeholder:a="Select an item...",value:s,onChange:i,end:p,className:g,label:d,labelClassName:T,id:c,disabled:h,container:M,autocomplete:b=!1,loading:C=!1,error:A=!1,errorMessage:D,noOptionsMessage:I})=>{let[n,v]=useState(!1),[y,H]=useState(""),[j,F]=useState({}),[r,m]=useState(-1),V=useRef(null),S=useRef(null),$=useMemo(()=>t.length>0&&"options"in t[0],[t]),N=useMemo(()=>t.length?$?t.reduce((e,o)=>[...e,...o.options],[]):t:[],[$,t]),l=useMemo(()=>N.filter(e=>y&&typeof e.label=="string"?e.label.toLowerCase().includes(y.toLowerCase()):!0),[N,y]),se=useMemo(()=>$?t.map(e=>({...e,options:e.options.filter(o=>y&&typeof o.label=="string"?o.label.toLowerCase().includes(y.toLowerCase()):!0)})).filter(e=>e.options.length>0):l.length>0?[{label:"",options:l}]:[],[$,t,y,l]),q=useMemo(()=>N.find(e=>e.value===s),[s,N]),Y=useMemo(()=>n?y:q&&q.label?.toString()||"",[n,y,q]),_=useMemo(()=>!b||!y||!n?"":l.find(o=>typeof o.label=="string"&&o.label.toLowerCase().startsWith(y.toLowerCase())&&o.label.toLowerCase()!==y.toLowerCase())?.label?.toString()||"",[b,y,l,n]),P=useCallback(e=>{i(e),v(!1),H(""),m(-1);},[i]),le=useCallback(e=>{F(o=>({...o,[e]:!o[e]}));},[]);useEffect(()=>{if($){let e=t.reduce((o,E)=>({...o,[E.label]:!0}),{});F(e);}},[$,t]);let Z=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),e.altKey?v(!0):n?m(o=>o<l.length-1?o+1:0):(v(!0),m(0));break;case"ArrowUp":e.preventDefault(),e.altKey?v(!1):n?m(o=>o>0?o-1:l.length-1):(v(!0),m(l.length-1));break;case"PageUp":e.preventDefault(),n&&m(o=>Math.max(0,o-10));break;case"PageDown":e.preventDefault(),n&&m(o=>Math.min(l.length-1,o+10));break;case"Home":e.preventDefault(),n&&m(0);break;case"End":e.preventDefault(),n&&m(l.length-1);break;case"Enter":if(e.preventDefault(),r>=0&&l[r])P(l[r].value);else if(b&&_){let o=l.find(E=>typeof E.label=="string"&&E.label.toLowerCase().startsWith(y.toLowerCase()));o&&P(o.value);}break;case"Tab":n?r>=0&&l[r]&&(e.preventDefault(),P(l[r].value)):(e.preventDefault(),v(!0),m(0));break;case"Escape":e.preventDefault(),v(!1),H("");break}},[n,r,l,_,y,P,b]),ie=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),m(o=>o<l.length-1?o+1:0);break;case"ArrowUp":e.preventDefault(),m(o=>o>0?o-1:l.length-1);break;case"Enter":case"Space":e.preventDefault(),r>=0&&l[r]&&P(l[r].value);break;case"Escape":e.preventDefault(),v(!1),S.current?.focus();break;case"Tab":e.preventDefault(),r>=0&&l[r]&&P(l[r].value);break}},[r,l,P]);useEffect(()=>{if(n){let e=S.current;if(e){e.focus({preventScroll:!0});let o=e.value.length;e.setSelectionRange(o,o);}}},[n]),useEffect(()=>{n||m(-1);},[n]),useEffect(()=>{if(n&&r>=0&&V.current){let e=V.current.querySelector(`[id="${c}-option-${r}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[r,n,c]);let pe=useCallback(e=>{if(!n)return s===e.value;let o=l.findIndex(E=>E.value===e.value);return r>=0?o===r:r===-1?o===0:!1},[n,s,r,l]);return useEffect(()=>{n&&r===-1&&m(0);},[n,r]),f__default.createElement(R.Root,{open:n&&!h,onOpenChange:e=>{if(!h)if(v(e),!e)H(""),m(-1);else {let o=S.current;if(o){o.focus({preventScroll:!0});let E=o.value.length;o.setSelectionRange(E,E);}}}},f__default.createElement("div",{className:`relative w-full font-sans text-secondary ${g}`,role:"combobox","aria-expanded":n,"aria-haspopup":"listbox","aria-controls":`${c}-listbox`},f__default.createElement(R.Trigger,{asChild:!0},f__default.createElement("button",{type:"button",className:"w-full text-left",disabled:h},b?f__default.createElement(X,{ref:S,id:c,label:d,labelClassName:T,placeholder:a,value:Y,suggestion:_,onChange:e=>{H(e),n||v(!0);},onKeyDown:Z,end:p,className:x("flex-1",g),forceShowFocusRing:n,disabled:h,"aria-autocomplete":"list","aria-controls":`${c}-listbox`,"aria-activedescendant":r>=0?`${c}-option-${r}`:void 0}):f__default.createElement(z,{ref:S,id:c,label:d,labelClassName:T,placeholder:a,value:Y,onChange:e=>{H(e.target.value),n||v(!0);},onKeyDown:Z,end:p,className:x("flex-1",g),forceShowFocusRing:n,disabled:h,"aria-controls":`${c}-listbox`,"aria-activedescendant":r>=0?`${c}-option-${r}`:void 0}))),f__default.createElement(R.Portal,{container:M},f__default.createElement(R.Content,{className:"w-[--radix-popover-trigger-width] p-1 bg-white rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out overflow-y-scroll outline-none",side:"bottom",align:"start",sideOffset:4,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:e=>e.preventDefault(),onInteractOutside:e=>{e.preventDefault(),v(!1),H(""),m(-1);}},f__default.createElement("div",{ref:V,className:"max-h-60 !overflow-y-scroll flex flex-col items-start outline-none",role:"listbox",id:`${c}-listbox`,"aria-label":d,"aria-busy":C},A?f__default.createElement("div",{className:"px-2 py-1.5 text-sm text-red-500"},D||"Failed to load options"):C?f__default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},"Loading..."):l.length>0?se.map((e,o)=>f__default.createElement(O.Root,{key:e.label||o,className:"w-full",open:j[e.label]??!0,onOpenChange:()=>e.label&&le(e.label)},e.label&&f__default.createElement(O.Trigger,{asChild:!0},f__default.createElement("div",{className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50",tabIndex:-1},f__default.createElement(L,{variant:"body-default-bold",color:"secondary"},e.label),f__default.createElement(K,{name:"arrow-down",className:x("transition-transform",j[e.label]&&"rotate-180"),size:16}))),f__default.createElement(O.Content,{className:"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up"},e.options.map((E,ee)=>{let te=pe(E);return f__default.createElement(re,{key:`${o}-${ee}`,onChange:P,onKeyDown:ie,value:E.value,label:E.label,className:x("pl-4"),selected:te,id:`${c}-option-${ee}`,role:"option","aria-selected":te,searchValue:y})})))):f__default.createElement("div",{className:"px-2 py-1.5 text-sm text-gray-500"},I||"No results found"))))))};export{at as Combobox};//# sourceMappingURL=Combobox.js.map
|
|
8
8
|
//# sourceMappingURL=Combobox.js.map
|