@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/Tag.tsx","../../src/components/Pressable.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/MultiSelectCombobox.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStyles","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","h","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","Pressable","type","Tag","onClose","pressableProps","isHovered","setIsHovered","useState","handleMouseEnter","useCallback","handleMouseLeave","content","AutocompleteInput","forwardRef","suggestion","placeholder","ariaControls","ariaActiveDescendant","ariaAutocomplete","MultiSelectCombobox","options","selectedValues","onSelectionChange","maxSelections","noOptionsMessage","loading","container","autocomplete","open","setOpen","setSearchValue","expandedGroups","setExpandedGroups","highlightedIndex","setHighlightedIndex","hoveredIndex","setHoveredIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","selectedOptions","option","isMaxSelected","visibleOptions","filteredGroups","handleOptionSelect","optionValue","v","toggleGroup","groupLabel","prev","opt","handleKeyDown","event","matchingOption","handleOptionKeyDown","useEffect","input","length","highlightedOption","initialState","I","isOpen","groupIndex","G","index","optionIndex"],"mappings":"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","file":"MultiSelectCombobox.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, { useState, useCallback, HTMLAttributes } from \"react\";\nimport { Text } from \"./Text\";\nimport { Pressable, PressableProps } from \"./Pressable\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\n\nexport type TagProps = {\n children: React.ReactNode;\n padded?: boolean;\n color?: \"primary\" | \"text\";\n onClose?: () => void;\n} & HTMLAttributes<HTMLDivElement> &\n PressableProps;\n\nexport const Tag = ({\n children,\n color = \"primary\",\n className,\n onClose,\n ...pressableProps\n}: TagProps) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const content = (\n <div\n className={cn(\n \"flex gap-2\",\n onClose\n ? \"justify-between items-center\"\n : \"items-center justify-center\",\n \"hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white\",\n color === \"primary\" ? \"text-primary-100\" : \"text-primary\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {typeof children === \"string\" ? (\n <Text\n color=\"inherit\"\n variant={[\"md:body-default-medium\", \"body-xxs-medium\"]}\n className=\"truncate pt-0.5\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {onClose && (\n <Pressable\n {...pressableProps}\n onClick={onClose}\n className=\"flex items-center justify-center\"\n >\n <Icon\n name=\"close\"\n size={10}\n color={isHovered ? \"white\" : \"primaryBlue\"}\n />\n </Pressable>\n )}\n </div>\n );\n\n return onClose ? (\n content\n ) : (\n <Pressable {...pressableProps}>{content}</Pressable>\n );\n};\n","import React, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\n","import 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 { Tag } from \"./Tag\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type MultiSelectComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n /** Currently selected values */\n selectedValues: string[];\n /** Callback when selection changes */\n onSelectionChange: (values: string[]) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Additional classes for the container */\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 /** Maximum number of selections allowed */\n maxSelections?: number;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for the combobox */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Helper text displayed below the combobox */\n helperText?: string;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n /** Whether to enable autocomplete functionality */\n autocomplete?: boolean;\n};\n\nexport const MultiSelectCombobox = ({\n options,\n selectedValues,\n onSelectionChange,\n placeholder = \"Select items...\",\n className,\n label,\n labelClassName,\n id,\n maxSelections,\n disabled,\n noOptionsMessage,\n loading,\n error,\n errorMessage,\n helperText,\n container,\n autocomplete = false\n}: MultiSelectComboboxProps) => {\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 [hoveredIndex, setHoveredIndex] = 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 selectedOptions = useMemo(\n () => flatOptions.filter((option) => selectedValues.includes(option.value)),\n [flatOptions, selectedValues]\n );\n\n const isMaxSelected = useMemo(\n () => maxSelections !== undefined && selectedValues.length >= maxSelections,\n [maxSelections, selectedValues]\n );\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) => {\n // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n });\n }, [flatOptions, searchValue, selectedValues, isMaxSelected]);\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 // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n })\n }))\n .filter((group) => group.options.length > 0);\n }, [\n isGrouped,\n options,\n searchValue,\n selectedValues,\n visibleOptions,\n isMaxSelected\n ]);\n\n const handleOptionSelect = useCallback(\n (optionValue: string) => {\n const isSelected = selectedValues.includes(optionValue);\n if (isSelected) {\n onSelectionChange(selectedValues.filter((v) => v !== optionValue));\n } else if (!isMaxSelected) {\n onSelectionChange([...selectedValues, optionValue]);\n }\n if (inputRef.current) {\n inputRef.current.focus({ preventScroll: true });\n }\n },\n [selectedValues, onSelectionChange, isMaxSelected]\n );\n\n const toggleGroup = useCallback((groupLabel: string) => {\n setExpandedGroups((prev) => ({\n ...prev,\n [groupLabel]: !prev[groupLabel]\n }));\n }, []);\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 !selectedValues.includes(opt.value)\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchValue, visibleOptions, open, selectedValues]);\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 handleOptionSelect(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 !selectedValues.includes(opt.value)\n );\n if (matchingOption) {\n handleOptionSelect(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 handleOptionSelect(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 handleOptionSelect,\n autocomplete,\n suggestion,\n searchValue,\n selectedValues\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 handleOptionSelect(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 handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionSelect]\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 // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\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 return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\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 <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }\n }\n }}\n >\n <div className=\"relative w-full font-sans text-secondary\">\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 placeholder={placeholder}\n value={searchValue}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchValue(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n disabled={disabled}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\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 placeholder={placeholder}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n disabled={\n disabled ||\n (!!maxSelections && selectedValues.length >= maxSelections)\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-multiselectable=\"true\"\n aria-busy={loading}\n >\n {loading ? (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n Loading...\n </Text>\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={() =>\n group.label && toggleGroup(group.label)\n }\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, index) => {\n const optionIndex = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n return (\n <Option\n key={`${groupIndex}-${index}`}\n label={option.label}\n value={option.value}\n onChange={handleOptionSelect}\n onKeyDown={handleOptionKeyDown}\n className=\"pl-4\"\n selected={\n hoveredIndex === optionIndex ||\n (hoveredIndex === -1 &&\n highlightedIndex === optionIndex)\n }\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={selectedValues.includes(\n option.value\n )}\n searchValue={searchValue}\n onMouseEnter={() => setHoveredIndex(optionIndex)}\n onMouseLeave={() => setHoveredIndex(-1)}\n />\n );\n })}\n </Collapsible.Content>\n </Collapsible.Root>\n ))\n ) : (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n {noOptionsMessage || \"No results found\"}\n </Text>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n {selectedOptions.length > 0 && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap gap-2\">\n {selectedOptions.map((option) => (\n <Tag\n key={option.value}\n onClose={() => handleOptionSelect(option.value)}\n disabled={disabled}\n >\n {option.label}\n </Tag>\n ))}\n </div>\n {isMaxSelected && (\n <Text variant=\"body-xxs\" color=\"secondary\">\n Maximum of {maxSelections} items selected\n </Text>\n )}\n </div>\n )}\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"]}
|
|
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/Tag.tsx","../../src/components/Pressable.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/MultiSelectCombobox.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStyles","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","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","HighlightedText","text","highlight","parts","part","i","Option","onKeyDown","onMouseEnter","onMouseLeave","selected","role","ariaSelected","searchValue","Pressable","type","Tag","onClose","pressableProps","isHovered","setIsHovered","useState","handleMouseEnter","useCallback","handleMouseLeave","content","AutocompleteInput","forwardRef","suggestion","ariaControls","ariaActiveDescendant","ariaAutocomplete","MultiSelectCombobox","options","selectedValues","onSelectionChange","placeholder","maxSelections","noOptionsMessage","loading","container","autocomplete","open","setOpen","setSearchValue","expandedGroups","setExpandedGroups","highlightedIndex","setHighlightedIndex","hoveredIndex","setHoveredIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","selectedOptions","option","isMaxSelected","visibleOptions","filteredGroups","handleOptionSelect","optionValue","v","toggleGroup","groupLabel","prev","opt","handleKeyDown","event","matchingOption","handleOptionKeyDown","useEffect","input","length","highlightedOption","initialState","$","isOpen","groupIndex","G","index","optionIndex"],"mappings":"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","file":"MultiSelectCombobox.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, { useState, useCallback, HTMLAttributes } from \"react\";\nimport { Text } from \"./Text\";\nimport { Pressable, PressableProps } from \"./Pressable\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\n\nexport type TagProps = {\n children: React.ReactNode;\n padded?: boolean;\n color?: \"primary\" | \"text\";\n onClose?: () => void;\n} & HTMLAttributes<HTMLDivElement> &\n PressableProps;\n\nexport const Tag = ({\n children,\n color = \"primary\",\n className,\n onClose,\n ...pressableProps\n}: TagProps) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const content = (\n <div\n className={cn(\n \"flex gap-2\",\n onClose\n ? \"justify-between items-center\"\n : \"items-center justify-center\",\n \"hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white\",\n color === \"primary\" ? \"text-primary-100\" : \"text-primary\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {typeof children === \"string\" ? (\n <Text\n color=\"inherit\"\n variant={[\"md:body-default-medium\", \"body-xxs-medium\"]}\n className=\"truncate pt-0.5\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {onClose && (\n <Pressable\n {...pressableProps}\n onClick={onClose}\n className=\"flex items-center justify-center\"\n >\n <Icon\n name=\"close\"\n size={10}\n color={isHovered ? \"white\" : \"primaryBlue\"}\n />\n </Pressable>\n )}\n </div>\n );\n\n return onClose ? (\n content\n ) : (\n <Pressable {...pressableProps}>{content}</Pressable>\n );\n};\n","import React, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\n","import 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 { Tag } from \"./Tag\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type MultiSelectComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n /** Currently selected values */\n selectedValues: string[];\n /** Callback when selection changes */\n onSelectionChange: (values: string[]) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Additional classes for the container */\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 /** Maximum number of selections allowed */\n maxSelections?: number;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for the combobox */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Helper text displayed below the combobox */\n helperText?: string;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n /** Whether to enable autocomplete functionality */\n autocomplete?: boolean;\n};\n\nexport const MultiSelectCombobox = ({\n options,\n selectedValues,\n onSelectionChange,\n placeholder = \"Select items...\",\n className,\n label,\n labelClassName,\n id,\n maxSelections,\n disabled,\n noOptionsMessage,\n loading,\n error,\n errorMessage,\n helperText,\n container,\n autocomplete = false\n}: MultiSelectComboboxProps) => {\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 [hoveredIndex, setHoveredIndex] = 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 selectedOptions = useMemo(\n () => flatOptions.filter((option) => selectedValues.includes(option.value)),\n [flatOptions, selectedValues]\n );\n\n const isMaxSelected = useMemo(\n () => maxSelections !== undefined && selectedValues.length >= maxSelections,\n [maxSelections, selectedValues]\n );\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) => {\n // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n });\n }, [flatOptions, searchValue, selectedValues, isMaxSelected]);\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 // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n })\n }))\n .filter((group) => group.options.length > 0);\n }, [\n isGrouped,\n options,\n searchValue,\n selectedValues,\n visibleOptions,\n isMaxSelected\n ]);\n\n const handleOptionSelect = useCallback(\n (optionValue: string) => {\n const isSelected = selectedValues.includes(optionValue);\n if (isSelected) {\n onSelectionChange(selectedValues.filter((v) => v !== optionValue));\n } else if (!isMaxSelected) {\n onSelectionChange([...selectedValues, optionValue]);\n }\n if (inputRef.current) {\n inputRef.current.focus({ preventScroll: true });\n }\n },\n [selectedValues, onSelectionChange, isMaxSelected]\n );\n\n const toggleGroup = useCallback((groupLabel: string) => {\n setExpandedGroups((prev) => ({\n ...prev,\n [groupLabel]: !prev[groupLabel]\n }));\n }, []);\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 !selectedValues.includes(opt.value)\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchValue, visibleOptions, open, selectedValues]);\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 handleOptionSelect(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 !selectedValues.includes(opt.value)\n );\n if (matchingOption) {\n handleOptionSelect(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 handleOptionSelect(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 handleOptionSelect,\n autocomplete,\n suggestion,\n searchValue,\n selectedValues\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 handleOptionSelect(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 handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionSelect]\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 // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\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 return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\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 <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }\n }\n }}\n >\n <div className=\"relative w-full font-sans text-secondary\">\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 placeholder={placeholder}\n value={searchValue}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchValue(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n disabled={disabled}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\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 placeholder={placeholder}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n disabled={\n disabled ||\n (!!maxSelections && selectedValues.length >= maxSelections)\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-multiselectable=\"true\"\n aria-busy={loading}\n >\n {loading ? (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n Loading...\n </Text>\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={() =>\n group.label && toggleGroup(group.label)\n }\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, index) => {\n const optionIndex = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n return (\n <Option\n key={`${groupIndex}-${index}`}\n label={option.label}\n value={option.value}\n onChange={handleOptionSelect}\n onKeyDown={handleOptionKeyDown}\n className=\"pl-4\"\n selected={\n hoveredIndex === optionIndex ||\n (hoveredIndex === -1 &&\n highlightedIndex === optionIndex)\n }\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={selectedValues.includes(\n option.value\n )}\n searchValue={searchValue}\n onMouseEnter={() => setHoveredIndex(optionIndex)}\n onMouseLeave={() => setHoveredIndex(-1)}\n />\n );\n })}\n </Collapsible.Content>\n </Collapsible.Root>\n ))\n ) : (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n {noOptionsMessage || \"No results found\"}\n </Text>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n {selectedOptions.length > 0 && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap gap-2\">\n {selectedOptions.map((option) => (\n <Tag\n key={option.value}\n onClose={() => handleOptionSelect(option.value)}\n disabled={disabled}\n >\n {option.label}\n </Tag>\n ))}\n </div>\n {isMaxSelected && (\n <Text variant=\"body-xxs\" color=\"secondary\">\n Maximum of {maxSelections} items selected\n </Text>\n )}\n </div>\n )}\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"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import*as
|
|
1
|
+
import*as u from'react';import u__default,{forwardRef,useState,useRef,useMemo,useCallback,useEffect}from'react';import*as $ from'@radix-ui/react-popover';import*as G from'@radix-ui/react-collapsible';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {IconMap}from'@deckai/icons';function h(...t){return twMerge(clsx(t))}var se="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var ie="ring-2 ring-primary-100";var le={primary:"#080808",secondary:"#666666",white:"#ffffff",primaryBlue:"#089CCB",disabled:"#888888",danger:"#FF0000"},Me={sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"},Ee=t=>{if(!t)return {width:"24px",height:"24px"};let o=Array.isArray(t)?t:[t],n={},a;return o.forEach(l=>{if(typeof l=="number")a=`${l}px`;else {let[m,d]=l.split(":"),p=parseInt(d,10);n[`@media (min-width: ${Me[m]})`]=`${p}px`;}}),{width:a||"24px",height:a||"24px",...Object.entries(n).reduce((l,[m,d])=>({...l,[m]:{width:d,height:d}}),{})}},S=u__default.forwardRef(({name:t,size:o=24,color:n="primary",title:a,className:l,style:m={},...d},p)=>{let g=IconMap[t],b=Ee(o);return u__default.createElement("div",{className:h("flex justify-center items-center",l),style:{...b,"--icon-stroke":le[n],...m}},u__default.createElement(g,{ref:p,"aria-hidden":!a,"aria-label":a,stroke:t.includes("filled")?void 0:le[n],...d}))});S.displayName="Icon";var Le={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},He=t=>{let[o,n]=t.split("-");return o==="heading"?Le[n]||"p":o==="label"?"label":"p"},we={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},Ce=t=>t?(Array.isArray(t)?t:[t]).map(n=>{if(n.includes(":")){let[a,l]=n.split(":");return `${a}:text-${l}`}return `text-${n}`}).join(" "):"text-body-default",T=u__default.forwardRef(({variant:t="body-default",color:o="primary",as:n,className:a,children:l,weight:m,...d},p)=>{let g=Ce(t),b=o==="inherit"?"text-inherit":`text-${o}`,H=u__default.useMemo(()=>{let E=typeof t=="string"?t.split(":").pop():Array.isArray(t)?t[0].split(":").pop():"body-default";return He(E)},[t]);return u__default.createElement(n||H,{ref:p,className:`
|
|
2
2
|
font-sans antialiased
|
|
3
|
-
${
|
|
4
|
-
${
|
|
5
|
-
${
|
|
3
|
+
${g}
|
|
4
|
+
${b}
|
|
5
|
+
${m&&`!${we[m]}`}
|
|
6
6
|
${a}
|
|
7
|
-
`,...g},l)});y.displayName="Text";var ie=d.forwardRef(({className:t,end:o,iconName:n,color:a,size:l,title:u,label:g,labelClassName:i,id:x,children:m,forceShowFocusRing:w,error:T,errorMessage:f,helperText:C,showCharacterCount:N,maxLength:A,value:L,defaultValue:s,onChange:E,...v},S)=>{let[j,F]=d.useState(L?.toString()||s?.toString()||"");d.useEffect(()=>{L!==void 0&&F(L.toString());},[L]);let p=d.useCallback(z=>{let V=z.target.value;F(V),E?.(z);},[E]),M=j.length,Q=N||!!A;return d.createElement("div",{className:"gap-1 flex flex-col"},g&&d.createElement(y,{variant:"label-default",htmlFor:x,as:"label",color:T?"danger":"primary",className:b(i)},g),d.createElement("div",{className:b("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":!T&&!w,"border-tertiary-10":T,[se]:w})},d.createElement("div",{className:"flex relative"},d.createElement("input",{ref:S,id:x,className:b("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",o&&"pr-10",t),value:j,maxLength:A,onChange:p,"aria-invalid":T,...v}),(o||n)&&d.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},n?d.createElement(D,{name:n,color:T?"danger":"secondary",size:l,title:u}):o)),m),d.createElement("div",{className:"flex justify-between gap-2"},T&&f||C?d.createElement(y,{variant:"body-xxs",color:T?"danger":"secondary",className:"mt-1"},T?f:C):null,Q&&d.createElement(y,{variant:"body-xxs",color:T?"danger":"secondary",className:"text-right mt-1"},d.createElement(y,{variant:"body-xxs",as:"span",color:"primary-100",className:"font-bold"},M),A&&`/${A}`," characters")))});var Ne=({text:t,highlight:o})=>{if(!o)return d__default.createElement(d__default.Fragment,null,t);let n=t.split(new RegExp(`(${o})`,"i"));return d__default.createElement(d__default.Fragment,null,n.map((a,l)=>a.toLowerCase()===o.toLowerCase()?d__default.createElement("span",{key:l,className:"font-bold"},a):a))},pe=d__default.forwardRef(({value:t,label:o,onChange:n,onKeyDown:a,onMouseEnter:l,onMouseLeave:u,selected:g,color:i,disabled:x,className:m,id:w,role:T,"aria-selected":f,searchValue:C=""},N)=>d__default.createElement("button",{ref:N,type:"button",id:w,role:T,"aria-selected":f,disabled:x,className:b("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",g&&"bg-gray-100","flex items-center gap-2",m),onClick:()=>{n?.(t);},onKeyDown:a,onMouseEnter:l,onMouseLeave:u},d__default.createElement(y,{variant:"body-default-medium",color:i==="danger"?"danger":"inherit"},typeof o=="string"?d__default.createElement(Ne,{text:o,highlight:C}):o)));var X=d__default.forwardRef(({children:t,type:o="button",className:n,disabled:a,...l},u)=>d__default.createElement("button",{ref:u,type:o,disabled:a,className:b("appearance-none hover:opacity-80 transition-all active:scale-95",ae,a&&"opacity-50 cursor-not-allowed",n),...l},t));X.displayName="Pressable";var ue=({children:t,color:o="primary",className:n,onClose:a,...l})=>{let[u,g]=useState(!1),i=useCallback(()=>{g(!0);},[]),x=useCallback(()=>{g(!1);},[]),m=d__default.createElement("div",{className:b("flex gap-2",a?"justify-between items-center":"items-center justify-center","hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white",o==="primary"?"text-primary-100":"text-primary",n),onMouseEnter:i,onMouseLeave:x},typeof t=="string"?d__default.createElement(y,{color:"inherit",variant:["md:body-default-medium","body-xxs-medium"],className:"truncate pt-0.5"},t):t,a&&d__default.createElement(X,{...l,onClick:a,className:"flex items-center justify-center"},d__default.createElement(D,{name:"close",size:10,color:u?"white":"primaryBlue"})));return a?m:d__default.createElement(X,{...l},m)};var oe=forwardRef(({value:t,suggestion:o,placeholder:n,onChange:a,onKeyDown:l,label:u,labelClassName:g,id:i,disabled:x,end:m,className:w,forceShowFocusRing:T,error:f,errorMessage:C,helperText:N,"aria-controls":A,"aria-activedescendant":L,"aria-autocomplete":s},E)=>d__default.createElement("div",{className:"gap-1 flex flex-col"},u&&d__default.createElement(y,{variant:"label-default",htmlFor:i,as:"label",color:f?"danger":"primary",className:b(g)},u),d__default.createElement("div",{className:b("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":!f,"border-tertiary-10":f,"ring-2 ring-offset-2":T,"focus-within:ring-2 focus-within:ring-offset-2":!T},w)},d__default.createElement("div",{className:"flex relative"},d__default.createElement("div",{className:"relative w-full"},d__default.createElement("input",{ref:E,id:i,value:t,onChange:v=>a(v.target.value),onKeyDown:l,disabled:x,placeholder:n,className:b("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",m&&"pr-10"),"aria-invalid":f,"aria-controls":A,"aria-activedescendant":L,"aria-autocomplete":s}),o&&d__default.createElement("div",{className:"absolute inset-0 text-secondary opacity-40 pointer-events-none text-sm"},t,o.slice(t.length))),m&&d__default.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},m))),f&&C||N?d__default.createElement(y,{variant:"body-xxs",color:f?"danger":"secondary",className:"mt-1"},f?C:N):null));oe.displayName="AutocompleteInput";var Pt=({options:t,selectedValues:o,onSelectionChange:n,placeholder:a="Select items...",className:l,label:u,labelClassName:g,id:i,maxSelections:x,disabled:m,noOptionsMessage:w,loading:T,error:f,errorMessage:C,helperText:N,container:A,autocomplete:L=!1})=>{let[s,E]=useState(!1),[v,S]=useState(""),[j,F]=useState({}),[p,M]=useState(-1),[Q,z]=useState(-1),V=useRef(null),K=useRef(null),B=useMemo(()=>t.length>0&&"options"in t[0],[t]),U=useMemo(()=>t.length?B?t.reduce((e,r)=>[...e,...r.options],[]):t:[],[B,t]),re=useMemo(()=>U.filter(e=>o.includes(e.value)),[U,o]),O=useMemo(()=>x!==void 0&&o.length>=x,[x,o]),c=useMemo(()=>U.filter(e=>o.includes(e.value)||O?!1:v&&typeof e.label=="string"?e.label.toLowerCase().includes(v.toLowerCase()):!0),[U,v,o,O]),fe=useMemo(()=>B?t.map(e=>({...e,options:e.options.filter(r=>o.includes(r.value)||O?!1:v&&typeof r.label=="string"?r.label.toLowerCase().includes(v.toLowerCase()):!0)})).filter(e=>e.options.length>0):c.length>0?[{label:"",options:c}]:[],[B,t,v,o,c,O]),P=useCallback(e=>{o.includes(e)?n(o.filter(H=>H!==e)):O||n([...o,e]),K.current&&K.current.focus({preventScroll:!0});},[o,n,O]),ge=useCallback(e=>{F(r=>({...r,[e]:!r[e]}));},[]),Z=useMemo(()=>!L||!v||!s?"":c.find(r=>typeof r.label=="string"&&r.label.toLowerCase().startsWith(v.toLowerCase())&&r.label.toLowerCase()!==v.toLowerCase()&&!o.includes(r.value))?.label?.toString()||"",[L,v,c,s,o]),ne=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),e.altKey?E(!0):s?M(r=>r<c.length-1?r+1:0):(E(!0),M(0));break;case"ArrowUp":e.preventDefault(),e.altKey?E(!1):s?M(r=>r>0?r-1:c.length-1):(E(!0),M(c.length-1));break;case"PageUp":e.preventDefault(),s&&M(r=>Math.max(0,r-10));break;case"PageDown":e.preventDefault(),s&&M(r=>Math.min(c.length-1,r+10));break;case"Home":e.preventDefault(),s&&M(0);break;case"End":e.preventDefault(),s&&M(c.length-1);break;case"Enter":if(e.preventDefault(),p>=0&&c[p])P(c[p].value);else if(L&&Z){let r=c.find(H=>typeof H.label=="string"&&H.label.toLowerCase().startsWith(v.toLowerCase())&&!o.includes(H.value));r&&P(r.value);}break;case"Tab":s?p>=0&&c[p]&&(e.preventDefault(),P(c[p].value)):(e.preventDefault(),E(!0),M(0));break;case"Escape":e.preventDefault(),E(!1),S("");break}},[s,p,c,P,L,Z,v,o]),be=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),M(r=>r<c.length-1?r+1:0);break;case"ArrowUp":e.preventDefault(),M(r=>r>0?r-1:c.length-1);break;case"Enter":case"Space":e.preventDefault(),p>=0&&c[p]&&P(c[p].value);break;case"Escape":e.preventDefault(),E(!1),K.current?.focus();break;case"Tab":e.preventDefault(),p>=0&&c[p]&&P(c[p].value);break}},[p,c,P]);return useEffect(()=>{if(s){let e=K.current;if(e){e.focus({preventScroll:!0});let r=e.value.length;e.setSelectionRange(r,r);}}},[s]),useEffect(()=>{s||M(-1);},[s]),useEffect(()=>{if(s&&p>=0&&V.current){let e=V.current.querySelector(`[id="${i}-option-${p}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[p,s,i]),useEffect(()=>{s&&p===-1&&M(0);},[s,p]),useEffect(()=>{if(B){let e=t.reduce((r,H)=>({...r,[H.label]:!0}),{});F(e);}},[B,t]),d__default.createElement("div",{className:b("flex flex-col gap-2",l)},u&&d__default.createElement(y,{variant:"label-default",htmlFor:i,as:"label",color:f?"danger":"primary",className:b(g)},u),d__default.createElement(I.Root,{open:s&&!m,onOpenChange:e=>{m||(E(e),e||(S(""),M(-1)));}},d__default.createElement("div",{className:"relative w-full font-sans text-secondary"},d__default.createElement(I.Trigger,{asChild:!0},d__default.createElement("button",{type:"button",className:"w-full text-left",disabled:m},L?d__default.createElement(oe,{ref:K,id:i,placeholder:a,value:v,suggestion:Z,onChange:e=>{S(e),s||E(!0);},onKeyDown:ne,className:"flex-1",forceShowFocusRing:s,disabled:m,error:f,"aria-expanded":s,"aria-haspopup":"listbox","aria-controls":`${i}-listbox`,"aria-activedescendant":p>=0?`${i}-option-${p}`:void 0}):d__default.createElement(ie,{ref:K,id:i,placeholder:a,value:v,onChange:e=>{S(e.target.value),s||E(!0);},onKeyDown:ne,className:"flex-1",forceShowFocusRing:s,error:f,"aria-expanded":s,"aria-haspopup":"listbox","aria-controls":`${i}-listbox`,"aria-activedescendant":p>=0?`${i}-option-${p}`:void 0,disabled:m||!!x&&o.length>=x}))),d__default.createElement(I.Portal,{container:A},d__default.createElement(I.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(),E(!1),S(""),M(-1);}},d__default.createElement("div",{ref:V,className:"max-h-60 !overflow-y-scroll flex flex-col items-start outline-none",role:"listbox",id:`${i}-listbox`,"aria-label":u,"aria-multiselectable":"true","aria-busy":T},T?d__default.createElement(y,{variant:"label-default",className:"text-secondary p-2"},"Loading..."):c.length>0?fe.map((e,r)=>d__default.createElement(G.Root,{key:e.label||r,className:"w-full",open:j[e.label]??!0,onOpenChange:()=>e.label&&ge(e.label)},e.label&&d__default.createElement(G.Trigger,{asChild:!0},d__default.createElement("div",{className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50",tabIndex:-1},d__default.createElement(y,{variant:"body-default-bold",color:"secondary"},e.label),d__default.createElement(D,{name:"arrow-down",className:b("transition-transform",j[e.label]&&"rotate-180"),size:16}))),d__default.createElement(G.Content,{className:"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up"},e.options.map((H,ye)=>{let J=c.findIndex(he=>he.value===H.value);return d__default.createElement(pe,{key:`${r}-${ye}`,label:H.label,value:H.value,onChange:P,onKeyDown:be,className:"pl-4",selected:Q===J||Q===-1&&p===J,id:`${i}-option-${J}`,role:"option","aria-selected":o.includes(H.value),searchValue:v,onMouseEnter:()=>z(J),onMouseLeave:()=>z(-1)})})))):d__default.createElement(y,{variant:"label-default",className:"text-secondary p-2"},w||"No results found")))))),re.length>0&&d__default.createElement("div",{className:"flex flex-col gap-2"},d__default.createElement("div",{className:"flex flex-wrap gap-2"},re.map(e=>d__default.createElement(ue,{key:e.value,onClose:()=>P(e.value),disabled:m},e.label))),O&&d__default.createElement(y,{variant:"body-xxs",color:"secondary"},"Maximum of ",x," items selected")),f&&C||N?d__default.createElement(y,{variant:"body-xxs",color:f?"danger":"secondary",className:"mt-1"},f?C:N):null)};export{Pt as MultiSelectCombobox};//# sourceMappingURL=MultiSelectCombobox.js.map
|
|
7
|
+
`,...d},l)});T.displayName="Text";var J=u.forwardRef(({className:t,end:o,iconName:n,color:a,size:l,title:m,label:d,labelClassName:p,id:g,children:b,forceShowFocusRing:H,error:v,errorMessage:E,helperText:I,showCharacterCount:R,maxLength:D,value:w,defaultValue:s,onChange:M,disabled:y,...k},W)=>{let[j,i]=u.useState(w?.toString()||s?.toString()||"");u.useEffect(()=>{w!==void 0&&i(w.toString());},[w]);let x=u.useCallback(K=>{let N=K.target.value;i(N),M?.(K);},[M]),q=j.length,_=R||!!D;return u.createElement("div",{className:"gap-1 flex flex-col"},d&&u.createElement(T,{variant:"label-default",htmlFor:g,as:"label",color:v?"danger":"primary",className:h(p)},d),u.createElement("div",{className:h("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",!v&&!H&&"border-secondary-50",v&&"border-tertiary-10",y&&"cursor-not-allowed opacity-50","focus-within:ring-2 focus-within:ring-primary-100",H&&ie)},u.createElement("div",{className:"flex relative"},u.createElement("input",{ref:W,id:g,className:h("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",o&&"pr-10",t),value:j,maxLength:D,onChange:x,"aria-invalid":v,disabled:y,...k}),(o||n)&&u.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},n?u.createElement(S,{name:n,color:v?"danger":"secondary",size:l,title:m}):o)),b),u.createElement("div",{className:"flex justify-between gap-2"},v&&E||I?u.createElement(T,{variant:"body-xxs",color:v?"danger":"secondary",className:"mt-1"},v?E:I):null,_&&u.createElement(T,{variant:"body-xxs",color:v?"danger":"secondary",className:"text-right mt-1"},u.createElement(T,{variant:"body-xxs",as:"span",color:"primary-100",className:"font-bold"},q),D&&`/${D}`," characters")))});var Pe=({text:t,highlight:o})=>{if(!o)return u__default.createElement(u__default.Fragment,null,t);let n=t.split(new RegExp(`(${o})`,"i"));return u__default.createElement(u__default.Fragment,null,n.map((a,l)=>a.toLowerCase()===o.toLowerCase()?u__default.createElement("span",{key:l,className:"font-bold"},a):a))},pe=u__default.forwardRef(({value:t,label:o,onChange:n,onKeyDown:a,onMouseEnter:l,onMouseLeave:m,selected:d,color:p,disabled:g,className:b,id:H,role:v,"aria-selected":E,searchValue:I=""},R)=>u__default.createElement("button",{ref:R,type:"button",id:H,role:v,"aria-selected":E,disabled:g,className:h("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",b),onClick:()=>{n?.(t);},onKeyDown:a,onMouseEnter:l,onMouseLeave:m},u__default.createElement(T,{variant:"body-default-medium",color:p==="danger"?"danger":"inherit"},typeof o=="string"?u__default.createElement(Pe,{text:o,highlight:I}):o)));var X=u__default.forwardRef(({children:t,type:o="button",className:n,disabled:a,...l},m)=>u__default.createElement("button",{ref:m,type:o,disabled:a,className:h("appearance-none hover:opacity-80 transition-all active:scale-95",se,a&&"opacity-50 cursor-not-allowed",n),...l},t));X.displayName="Pressable";var me=({children:t,color:o="primary",className:n,onClose:a,...l})=>{let[m,d]=useState(!1),p=useCallback(()=>{d(!0);},[]),g=useCallback(()=>{d(!1);},[]),b=u__default.createElement("div",{className:h("flex gap-2",a?"justify-between items-center":"items-center justify-center","hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white",o==="primary"?"text-primary-100":"text-primary",n),onMouseEnter:p,onMouseLeave:g},typeof t=="string"?u__default.createElement(T,{color:"inherit",variant:["md:body-default-medium","body-xxs-medium"],className:"truncate pt-0.5"},t):t,a&&u__default.createElement(X,{...l,onClick:a,className:"flex items-center justify-center"},u__default.createElement(S,{name:"close",size:10,color:m?"white":"primaryBlue"})));return a?b:u__default.createElement(X,{...l},b)};var re=forwardRef(({value:t,suggestion:o,onChange:n,onKeyDown:a,className:l,"aria-controls":m,"aria-activedescendant":d,"aria-autocomplete":p,...g},b)=>u__default.createElement("div",{className:"relative w-full"},u__default.createElement(J,{ref:b,value:t,onChange:H=>n(H.target.value),onKeyDown:a,className:h("bg-transparent",l),"aria-controls":m,"aria-activedescendant":d,"aria-autocomplete":p,...g}),o&&u__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,o.slice(t.length))));re.displayName="AutocompleteInput";var Nt=({options:t,selectedValues:o,onSelectionChange:n,placeholder:a="Select items...",className:l,label:m,labelClassName:d,id:p,maxSelections:g,disabled:b,noOptionsMessage:H,loading:v,error:E,errorMessage:I,helperText:R,container:D,autocomplete:w=!1})=>{let[s,M]=useState(!1),[y,k]=useState(""),[W,j]=useState({}),[i,x]=useState(-1),[q,_]=useState(-1),K=useRef(null),N=useRef(null),B=useMemo(()=>t.length>0&&"options"in t[0],[t]),Q=useMemo(()=>t.length?B?t.reduce((e,r)=>[...e,...r.options],[]):t:[],[B,t]),ne=useMemo(()=>Q.filter(e=>o.includes(e.value)),[Q,o]),A=useMemo(()=>g!==void 0&&o.length>=g,[g,o]),c=useMemo(()=>Q.filter(e=>o.includes(e.value)||A?!1:y&&typeof e.label=="string"?e.label.toLowerCase().includes(y.toLowerCase()):!0),[Q,y,o,A]),fe=useMemo(()=>B?t.map(e=>({...e,options:e.options.filter(r=>o.includes(r.value)||A?!1:y&&typeof r.label=="string"?r.label.toLowerCase().includes(y.toLowerCase()):!0)})).filter(e=>e.options.length>0):c.length>0?[{label:"",options:c}]:[],[B,t,y,o,c,A]),C=useCallback(e=>{o.includes(e)?n(o.filter(L=>L!==e)):A||n([...o,e]),N.current&&N.current.focus({preventScroll:!0});},[o,n,A]),ge=useCallback(e=>{j(r=>({...r,[e]:!r[e]}));},[]),Z=useMemo(()=>!w||!y||!s?"":c.find(r=>typeof r.label=="string"&&r.label.toLowerCase().startsWith(y.toLowerCase())&&r.label.toLowerCase()!==y.toLowerCase()&&!o.includes(r.value))?.label?.toString()||"",[w,y,c,s,o]),ae=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),e.altKey?M(!0):s?x(r=>r<c.length-1?r+1:0):(M(!0),x(0));break;case"ArrowUp":e.preventDefault(),e.altKey?M(!1):s?x(r=>r>0?r-1:c.length-1):(M(!0),x(c.length-1));break;case"PageUp":e.preventDefault(),s&&x(r=>Math.max(0,r-10));break;case"PageDown":e.preventDefault(),s&&x(r=>Math.min(c.length-1,r+10));break;case"Home":e.preventDefault(),s&&x(0);break;case"End":e.preventDefault(),s&&x(c.length-1);break;case"Enter":if(e.preventDefault(),i>=0&&c[i])C(c[i].value);else if(w&&Z){let r=c.find(L=>typeof L.label=="string"&&L.label.toLowerCase().startsWith(y.toLowerCase())&&!o.includes(L.value));r&&C(r.value);}break;case"Tab":s?i>=0&&c[i]&&(e.preventDefault(),C(c[i].value)):(e.preventDefault(),M(!0),x(0));break;case"Escape":e.preventDefault(),M(!1),k("");break}},[s,i,c,C,w,Z,y,o]),be=useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),x(r=>r<c.length-1?r+1:0);break;case"ArrowUp":e.preventDefault(),x(r=>r>0?r-1:c.length-1);break;case"Enter":case"Space":e.preventDefault(),i>=0&&c[i]&&C(c[i].value);break;case"Escape":e.preventDefault(),M(!1),N.current?.focus();break;case"Tab":e.preventDefault(),i>=0&&c[i]&&C(c[i].value);break}},[i,c,C]);return useEffect(()=>{if(s){let e=N.current;if(e){e.focus({preventScroll:!0});let r=e.value.length;e.setSelectionRange(r,r);}}},[s]),useEffect(()=>{s||x(-1);},[s]),useEffect(()=>{if(s&&i>=0&&K.current){let e=K.current.querySelector(`[id="${p}-option-${i}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[i,s,p]),useEffect(()=>{s&&i===-1&&x(0);},[s,i]),useEffect(()=>{if(B){let e=t.reduce((r,L)=>({...r,[L.label]:!0}),{});j(e);}},[B,t]),u__default.createElement("div",{className:h("flex flex-col gap-2",l)},m&&u__default.createElement(T,{variant:"label-default",htmlFor:p,as:"label",color:E?"danger":"primary",className:h(d)},m),u__default.createElement($.Root,{open:s&&!b,onOpenChange:e=>{b||(M(e),e||(k(""),x(-1)));}},u__default.createElement("div",{className:"relative w-full font-sans text-secondary"},u__default.createElement($.Trigger,{asChild:!0},u__default.createElement("button",{type:"button",className:"w-full text-left",disabled:b},w?u__default.createElement(re,{ref:N,id:p,placeholder:a,value:y,suggestion:Z,onChange:e=>{k(e),s||M(!0);},onKeyDown:ae,className:"flex-1",forceShowFocusRing:s,disabled:b,error:E,"aria-expanded":s,"aria-haspopup":"listbox","aria-controls":`${p}-listbox`,"aria-activedescendant":i>=0?`${p}-option-${i}`:void 0}):u__default.createElement(J,{ref:N,id:p,placeholder:a,value:y,onChange:e=>{k(e.target.value),s||M(!0);},onKeyDown:ae,className:"flex-1",forceShowFocusRing:s,error:E,"aria-expanded":s,"aria-haspopup":"listbox","aria-controls":`${p}-listbox`,"aria-activedescendant":i>=0?`${p}-option-${i}`:void 0,disabled:b||!!g&&o.length>=g}))),u__default.createElement($.Portal,{container:D},u__default.createElement($.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(),M(!1),k(""),x(-1);}},u__default.createElement("div",{ref:K,className:"max-h-60 !overflow-y-scroll flex flex-col items-start outline-none",role:"listbox",id:`${p}-listbox`,"aria-label":m,"aria-multiselectable":"true","aria-busy":v},v?u__default.createElement(T,{variant:"label-default",className:"text-secondary p-2"},"Loading..."):c.length>0?fe.map((e,r)=>u__default.createElement(G.Root,{key:e.label||r,className:"w-full",open:W[e.label]??!0,onOpenChange:()=>e.label&&ge(e.label)},e.label&&u__default.createElement(G.Trigger,{asChild:!0},u__default.createElement("div",{className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50",tabIndex:-1},u__default.createElement(T,{variant:"body-default-bold",color:"secondary"},e.label),u__default.createElement(S,{name:"arrow-down",className:h("transition-transform",W[e.label]&&"rotate-180"),size:16}))),u__default.createElement(G.Content,{className:"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up"},e.options.map((L,ye)=>{let U=c.findIndex(he=>he.value===L.value);return u__default.createElement(pe,{key:`${r}-${ye}`,label:L.label,value:L.value,onChange:C,onKeyDown:be,className:"pl-4",selected:q===U||q===-1&&i===U,id:`${p}-option-${U}`,role:"option","aria-selected":o.includes(L.value),searchValue:y,onMouseEnter:()=>_(U),onMouseLeave:()=>_(-1)})})))):u__default.createElement(T,{variant:"label-default",className:"text-secondary p-2"},H||"No results found")))))),ne.length>0&&u__default.createElement("div",{className:"flex flex-col gap-2"},u__default.createElement("div",{className:"flex flex-wrap gap-2"},ne.map(e=>u__default.createElement(me,{key:e.value,onClose:()=>C(e.value),disabled:b},e.label))),A&&u__default.createElement(T,{variant:"body-xxs",color:"secondary"},"Maximum of ",g," items selected")),E&&I||R?u__default.createElement(T,{variant:"body-xxs",color:E?"danger":"secondary",className:"mt-1"},E?I:R):null)};export{Nt as MultiSelectCombobox};//# sourceMappingURL=MultiSelectCombobox.js.map
|
|
8
8
|
//# sourceMappingURL=MultiSelectCombobox.js.map
|