se-design 1.0.76-dev1 → 1.0.76-dev2
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/assets/style.css +1 -1
- package/dist/components/Dropdown/index.d.ts +2 -0
- package/dist/components/DropdownWithInputTags/index.d.ts +1 -0
- package/dist/index12.js +11 -13
- package/dist/index12.js.map +1 -1
- package/dist/index13.js +12 -14
- package/dist/index13.js.map +1 -1
- package/dist/index19.js +142 -136
- package/dist/index19.js.map +1 -1
- package/dist/index25.js +78 -68
- package/dist/index25.js.map +1 -1
- package/dist/index38.js +61 -59
- package/dist/index38.js.map +1 -1
- package/package.json +1 -1
package/dist/index25.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index25.js","sources":["../src/components/Dropdown/index.tsx"],"sourcesContent":["import React, { FC, useState, useRef, useEffect } from 'react';\n\nimport { Popover, PopoverHandle } from 'src/components/Popover';\nimport { Icon } from 'components/Icon';\nimport { Checkbox } from '../Checkbox';\nimport { Button } from '../Button';\nimport { InputWithIcon } from '../InputWithIcon';\nimport { useStableId } from '../../utils/useStableId';\nimport { useCombobox } from '../../utils/a11y/useCombobox';\n\ntype DropdownValue = {\n [key: string]: any;\n};\n\ntype DropdownProps = {\n label?: string;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n type: 'select' | 'multi-select';\n dropDownOptions?: DropdownValue[];\n defaultText?: string;\n selectBy?: string;\n optionsUniqueBy?: string;\n displaySelected?: boolean;\n defaultSelectedValue?: DropdownValue | DropdownValue[];\n customSelectedValue?: string;\n onOptionClick?: (selectedValue: DropdownValue) => void;\n style?: React.CSSProperties;\n renderOptionChip?: (option: DropdownValue, srcOption: boolean) => React.ReactNode;\n className?: string;\n iconColor?: string;\n disabled?: boolean;\n dropdownClassName?: string;\n hasError?: boolean;\n errorMessage?: string;\n onApply?: (selectedValue: DropdownValue[]) => void;\n onClear?: () => void;\n customDropdownContent?: () => React.ReactNode;\n isBorderless?: boolean;\n dropDownSrcAutomationId?: string;\n dropDownSelectAutomationId?: string;\n dropDownContentAutomationId?: string;\n shouldShowSearch?: boolean;\n showSearchIcon?: boolean;\n searchPlaceholder?: string;\n searchResultEmptyMessage?: string;\n /** Controlled selection — when provided, Dropdown won't manage internal selected state */\n selectedValue?: DropdownValue | DropdownValue[];\n /** Controlled open state — when provided, Dropdown won't manage internal open/close */\n isOpen?: boolean;\n /** Callback when open state changes (fires in both controlled and uncontrolled modes) */\n onOpenChange?: (isOpen: boolean) => void;\n /** Custom trigger element — replaces the default bordered div + chevron */\n renderSrcElement?: (props: { isOpen: boolean; selectedValue: DropdownValue[] }) => React.ReactNode;\n};\n\nexport const Dropdown: FC<DropdownProps> = (props) => {\n const isControlledSelection = props.selectedValue !== undefined;\n const isControlledOpen = props.isOpen !== undefined;\n\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [highlightedMultiSelectIndex, setHighlightedMultiSelectIndex] = useState(-1);\n const [internalSelectedValues, setInternalSelectedValues] = useState<DropdownValue[]>(() =>\n props?.defaultSelectedValue\n ? Array.isArray(props?.defaultSelectedValue)\n ? props?.defaultSelectedValue\n : [props.defaultSelectedValue]\n : []\n );\n const popoverRef = useRef<HTMLDivElement & PopoverHandle>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const labelId = useStableId(undefined, 'dropdown-label');\n const listboxId = useStableId(undefined, 'dropdown-listbox');\n\n // Derived state: controlled props take precedence over internal state\n const isDropDownOpen = isControlledOpen ? props.isOpen! : internalIsOpen;\n const selectedDropDownValues = isControlledSelection\n ? (Array.isArray(props.selectedValue) ? props.selectedValue : props.selectedValue ? [props.selectedValue] : [])\n : internalSelectedValues;\n\n const setIsDropDownOpen = (value: boolean) => {\n if (!isControlledOpen) {\n setInternalIsOpen(value);\n }\n props.onOpenChange?.(value);\n };\n\n const setSelectedDropDownValues = (values: DropdownValue[]) => {\n if (!isControlledSelection) {\n setInternalSelectedValues(values);\n }\n };\n\n const {\n selectBy = '',\n optionsUniqueBy = '',\n displaySelected = false,\n dropDownOptions,\n defaultText = 'Select',\n iconColor = 'var(--color-gray-700)',\n disabled = false,\n dropdownClassName = '',\n hasError = false,\n errorMessage = '',\n customDropdownContent = null,\n isBorderless = false,\n shouldShowSearch = false,\n showSearchIcon = true,\n searchPlaceholder = 'Search...',\n searchResultEmptyMessage = 'No results found',\n ariaLabel = '',\n customSelectedValue = ''\n } = props;\n\n useEffect(() => {\n if (!isControlledSelection) {\n const newValues = props?.defaultSelectedValue\n ? Array.isArray(props?.defaultSelectedValue)\n ? props?.defaultSelectedValue\n : [props.defaultSelectedValue]\n : [];\n setInternalSelectedValues(newValues);\n }\n }, [props?.defaultSelectedValue, isControlledSelection]);\n\n useEffect(() => {\n if (!isDropDownOpen) {\n setSearchQuery('');\n setHighlightedMultiSelectIndex(-1);\n }\n }, [isDropDownOpen]);\n\n useEffect(() => {\n if (highlightedMultiSelectIndex >= 0) {\n const optionEl = document.getElementById(`${listboxId}-option-${highlightedMultiSelectIndex}`);\n optionEl?.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightedMultiSelectIndex]);\n\n // Focus search input when dropdown opens with search enabled\n useEffect(() => {\n if (isDropDownOpen && shouldShowSearch && searchInputRef.current) {\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isDropDownOpen, shouldShowSearch]);\n\n const isMultiSelect = props?.type === 'multi-select';\n\n const getFilteredOptions = () => {\n if (!searchQuery.trim()) {\n return dropDownOptions || [];\n }\n return (dropDownOptions || []).filter((option) => {\n const optionValue = option?.[selectBy]?.toString().toLowerCase() || '';\n return optionValue.includes(searchQuery.toLowerCase());\n });\n };\n\n const handleDropDownOptionClick = (dropDownOption: any) => {\n setSelectedDropDownValues([dropDownOption]);\n setIsDropDownOpen(false);\n props?.onOptionClick?.(dropDownOption);\n };\n\n // Use useCombobox hook for keyboard navigation (only for single-select)\n const filteredOptions = getFilteredOptions();\n const {\n listboxProps,\n getOptionProps,\n highlightedIndex,\n containerProps: comboboxContainerProps,\n inputProps: comboboxInputProps\n } = useCombobox({\n items: isMultiSelect ? [] : filteredOptions, // Only use for single-select\n isOpen: isDropDownOpen && !isMultiSelect,\n onOpenChange: setIsDropDownOpen,\n onSelect: (item: DropdownValue) => {\n handleDropDownOptionClick(item);\n },\n listboxId,\n disabled: isMultiSelect || disabled,\n hasItems: filteredOptions.length > 0\n });\n\n const getSelectedDropDownValue = (option: DropdownValue, isSrcOption: boolean = false) => {\n if (isMultiSelect) {\n return defaultText;\n }\n\n // if custom selected value is provided, use it instead of the option value\n if (isSrcOption && customSelectedValue) {\n return customSelectedValue;\n }\n\n return option?.[selectBy] || defaultText;\n };\n\n const clearSelectedDropDownValues = () => {\n setSelectedDropDownValues([]);\n props?.onClear?.();\n };\n\n const optionChip = (option: DropdownValue, srcOption: boolean = false) => {\n if (props?.renderOptionChip) {\n return props?.renderOptionChip(option, srcOption);\n }\n\n if (isMultiSelect && selectedDropDownValues?.length > 0) {\n const firstSelectedLabel = selectedDropDownValues[0]?.[selectBy] || '';\n const remainingCount = selectedDropDownValues.length - 1;\n\n // For multiple selections: text takes remaining space, count takes minimum space needed\n return (\n <div className={`option-chip flex items-center w-full`}>\n <div\n className={`${remainingCount > 0 ? 'w-full' : 'flex-1'} truncate`}\n >{`${defaultText}: ${firstSelectedLabel}`}</div>\n {remainingCount > 0 && <div className=\"flex-shrink-0\">+{remainingCount}</div>}\n </div>\n );\n }\n\n return (\n <p className={`option-chip flex flex-1 items-center justify-between`}>\n {getSelectedDropDownValue(option, srcOption)}\n </p>\n );\n };\n\n const renderSearchBar = () => {\n // When search is the combobox (shouldShowSearch + single-select), wire useCombobox ARIA onto the input\n const searchComboboxProps = shouldShowSearch && !isMultiSelect ? {\n role: comboboxInputProps.role,\n 'aria-expanded': comboboxInputProps['aria-expanded'],\n 'aria-haspopup': comboboxInputProps['aria-haspopup'],\n 'aria-controls': comboboxInputProps['aria-controls'],\n 'aria-autocomplete': comboboxInputProps['aria-autocomplete'],\n 'aria-activedescendant': comboboxInputProps['aria-activedescendant'],\n onKeyDown: comboboxInputProps.onKeyDown\n } : {};\n\n return (\n <div className=\" w-full relative flex items-center border-b border-[var(--color-gray-300)]\">\n <InputWithIcon\n leftIcon={showSearchIcon ? { name: 'search', position: 'left', style: { color: 'var(--color-gray-500)' } } : undefined}\n value={searchQuery}\n onChange={(value) => setSearchQuery(value)}\n placeholder={searchPlaceholder}\n style={{ margin: 0, gap: 0 }}\n inputStyle={{ width: '100%', border: 'none', outline: 'none' }}\n automationId=\"se-design-dropdown-search\"\n ariaLabel={searchPlaceholder}\n inputRef={searchInputRef}\n inputProps={searchComboboxProps}\n />\n </div>\n );\n };\n\n const dropDownOptionJsx = (dropDownOption: DropdownValue, index: number) => {\n const optionTxt = dropDownOption[selectBy];\n const dropDownSelectedValue = selectedDropDownValues[0]?.[selectBy] || defaultText;\n const selectByUniqueId = optionsUniqueBy?.length\n ? dropDownOption[optionsUniqueBy] == selectedDropDownValues[0]?.[optionsUniqueBy]\n : true;\n const isOptionSelected = displaySelected && optionTxt === dropDownSelectedValue && selectByUniqueId;\n const isHighlighted = highlightedIndex === index;\n const optionProps = !isMultiSelect ? getOptionProps(index, isOptionSelected) : {};\n\n return (\n <div\n key={dropDownOption.id || dropDownOption.value}\n className={`option break-words px-3 py-2 hover:bg-gray-100 cursor-pointer select-none flex items-center justify-between ${\n isOptionSelected ? 'selected' : ''\n } ${isHighlighted ? 'bg-gray-100' : ''}`}\n onClick={() => handleDropDownOptionClick(dropDownOption)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleDropDownOptionClick(dropDownOption);\n }\n }}\n tabIndex={-1}\n data-automation-id={`dropdown-option-${dropDownOption?.automationId || index}`}\n {...optionProps}\n aria-selected={isOptionSelected ? 'true' : 'false'}\n >\n {optionChip({ ...dropDownOption, isOptionSelected }, false)}\n {isOptionSelected && <Icon name=\"checkmark\" stroke={iconColor} />}\n </div>\n );\n };\n\n const renderDropdownContents = () => {\n return (\n <div\n className=\"dropdown-content dropdown-options\"\n aria-label={`${defaultText} options`}\n {...listboxProps}\n >\n {shouldShowSearch && renderSearchBar()}\n <div className=\"flex flex-col max-h-80 overflow-y-auto\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => dropDownOptionJsx(dropDownOption, index))\n ) : (\n <div\n className=\"px-3 py-4 text-center text-[var(--color-gray-700)] text-sm\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {searchResultEmptyMessage}\n </div>\n )}\n </div>\n </div>\n );\n };\n\n const handleMultiSelectDropdownOptionClick = (isSelected: boolean, dropDownOption: DropdownValue) => {\n let newSelectedDropDownValues: DropdownValue[] = [];\n if (isSelected) {\n newSelectedDropDownValues = [...selectedDropDownValues, dropDownOption];\n } else {\n newSelectedDropDownValues = selectedDropDownValues?.filter(\n (option) => option[optionsUniqueBy] !== dropDownOption[optionsUniqueBy]\n );\n }\n setSelectedDropDownValues(newSelectedDropDownValues);\n };\n\n const handleApplySelectedDropDownValues = () => {\n popoverRef.current?.togglePopover();\n props?.onApply?.(selectedDropDownValues);\n };\n\n const handleMultiSelectKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const options = getFilteredOptions();\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n setHighlightedMultiSelectIndex((prev) => (prev < options.length - 1 ? prev + 1 : prev));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n setHighlightedMultiSelectIndex((prev) => (prev > 0 ? prev - 1 : 0));\n } else if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n if (highlightedMultiSelectIndex >= 0 && highlightedMultiSelectIndex < options.length) {\n const option = options[highlightedMultiSelectIndex];\n const isSelected = selectedDropDownValues.some(\n (v) => v[optionsUniqueBy] === option[optionsUniqueBy]\n );\n handleMultiSelectDropdownOptionClick(!isSelected, option);\n }\n }\n };\n\n const multiSelectDropdownOptionJSX = (dropDownOption: DropdownValue, index: number) => {\n const isOptionSelected = selectedDropDownValues.some(\n (option) => option[optionsUniqueBy] === dropDownOption[optionsUniqueBy]\n );\n const optionId = `${listboxId}-option-${index}`;\n const isHighlighted = highlightedMultiSelectIndex === index;\n\n return (\n <div\n key={dropDownOption.id || dropDownOption.value}\n id={optionId}\n role=\"option\"\n aria-selected={isOptionSelected}\n className={`option px-3 py-2 cursor-pointer select-none flex items-center gap-2 ${\n isHighlighted ? 'bg-gray-100' : 'hover:bg-gray-100'\n }`}\n onClick={() => handleMultiSelectDropdownOptionClick(!isOptionSelected, dropDownOption)}\n data-automation-id={`dropdown-option-${dropDownOption?.automationId || index}`}\n >\n <Checkbox\n tabIndex={-1}\n ariaHidden\n checked={isOptionSelected}\n onChange={() => {}}\n />\n <span className=\"checkbox-label\">{dropDownOption?.label}</span>\n </div>\n );\n };\n\n const renderMultiSelectDropdownContents = () => {\n const filteredOptions = getFilteredOptions();\n const activeDescendantId =\n highlightedMultiSelectIndex >= 0\n ? `${listboxId}-option-${highlightedMultiSelectIndex}`\n : undefined;\n\n return (\n <div\n className=\"dropdown-content dropdown-options\"\n onKeyDown={(e) => {\n // Stop all Tab events from reaching Popover's handlePopoverContentKeyDown (which closes on Tab).\n // Forward Tab: listbox → Clear → Apply → focus exits → useDismissOnFocusOut closes.\n // Shift+Tab: Apply → Clear → listbox → trigger (dropdown stays open; next Shift+Tab exits).\n if (e.key === 'Tab') {\n e.stopPropagation();\n }\n }}\n >\n <div\n id={listboxId}\n ref={listboxRef}\n role=\"listbox\"\n aria-label={`${defaultText} options`}\n aria-multiselectable=\"true\"\n tabIndex={-1}\n style={{ outline: 'none' }}\n aria-activedescendant={activeDescendantId}\n onKeyDown={handleMultiSelectKeyDown}\n onFocus={() => {\n if (highlightedMultiSelectIndex === -1 && filteredOptions.length > 0) {\n setHighlightedMultiSelectIndex(0);\n }\n }}\n >\n {shouldShowSearch && renderSearchBar()}\n <div className=\"flex flex-col max-h-80 overflow-y-auto\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => multiSelectDropdownOptionJSX(dropDownOption, index))\n ) : (\n <div\n className=\"px-3 py-4 text-center text-[var(--color-gray-700)] text-sm\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {searchResultEmptyMessage}\n </div>\n )}\n </div>\n </div>\n <div\n className=\"flex items-center justify-end gap-4 p-3 border-t border-[var(--color-gray-200)]\"\n onKeyDown={(e) => {\n if (e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n listboxRef.current?.focus();\n }\n }}\n >\n <Button label=\"Clear\" type=\"link\" size=\"sm\" onClick={clearSelectedDropDownValues} automationId=\"se-design-dropdown-clear-button\" ariaLabel={`Clear ${defaultText} selection`} />\n <Button label=\"Apply\" type=\"primary\" size=\"sm\" onClick={handleApplySelectedDropDownValues} automationId=\"se-design-dropdown-apply-button\" />\n </div>\n </div>\n );\n };\n\n const renderDropdownSelect = () => {\n const borderColor = isDropDownOpen\n ? 'border-[var(--color-blue-500)]'\n : disabled\n ? 'border-[var(--color-gray-300)]'\n : 'border-[var(--color-gray-600)]';\n const errorBorderColor = hasError ? 'border-[var(--color-red-500)]' : '';\n const dropDownSelectClass = `dropdown-src-element bg-[var(--color-white)] flex px-3 py-2 ${\n isBorderless ? 'border-0' : `border rounded-md ${errorBorderColor ? errorBorderColor : borderColor}`\n } flex items-center ${dropdownClassName}`;\n\n return (\n <div className={dropDownSelectClass}>\n <div\n className=\"flex-1 min-w-0\"\n data-automation-id={props?.dropDownSelectAutomationId || 'selected-dropdown-value'}\n >\n {optionChip(selectedDropDownValues[0], true)}\n </div>\n <div className=\"flex-shrink-0 ml-2\" aria-hidden=\"true\">\n <Icon\n name={'chevron'}\n rotation={isDropDownOpen ? '180' : '0'}\n className={`transition-transform`}\n stroke={iconColor}\n />\n </div>\n </div>\n );\n };\n\n const getDropdownAriaLabel = () => {\n return ariaLabel || defaultText || 'Select option';\n };\n\n // sourceRole: select-only keeps combobox on trigger (APG select-only combobox),\n // search-enabled moves combobox to the search input (trigger becomes a button)\n const triggerSourceRole = shouldShowSearch ? 'button' : 'combobox';\n\n // Combobox ARIA on trigger only for select-only (no search) single-select\n const triggerComboboxProps = triggerSourceRole === 'combobox' && !isMultiSelect && comboboxInputProps ? {\n 'aria-activedescendant': comboboxInputProps['aria-activedescendant'],\n 'aria-controls': comboboxInputProps['aria-controls'],\n 'aria-expanded': comboboxInputProps['aria-expanded']\n } : {};\n\n return (\n <div\n className={`se-design-dropdown-container${props?.className ? ` ${props?.className}` : ''}`}\n style={props?.style}\n >\n {props?.label && (\n <div id={labelId} className=\"se-design-dropdown-label mb-[3px] text-[var(--color-gray-700)] text-sm\">\n {props?.label}\n </div>\n )}\n <div\n style={props?.style}\n className={`${disabled ? 'bg-[var(--color-gray-50)] rounded-md cursor-not-allowed' : ''}`}\n {...(!isMultiSelect ? comboboxContainerProps : {})}\n >\n <Popover\n ref={popoverRef}\n isPopoverOpen={isDropDownOpen}\n renderPopoverContents={\n customDropdownContent\n ? customDropdownContent\n : isMultiSelect\n ? renderMultiSelectDropdownContents\n : renderDropdownContents\n }\n contentWidth={'full'}\n renderPopoverSrcElement={\n props.renderSrcElement\n ? () => props.renderSrcElement!({ isOpen: isDropDownOpen, selectedValue: selectedDropDownValues })\n : renderDropdownSelect\n }\n onPopoverToggle={(value) => {\n setIsDropDownOpen(value);\n if (value && isMultiSelect) {\n setTimeout(() => listboxRef.current?.focus(), 50);\n }\n }}\n disabled={disabled}\n automationId={props?.dropDownSrcAutomationId}\n popoverContentAutomationId={props?.dropDownContentAutomationId}\n ariaLabelledBy={props?.label ? labelId : props?.ariaLabelledBy}\n ariaLabel={props?.label || props?.ariaLabelledBy ? undefined : getDropdownAriaLabel()}\n sourceRole={triggerSourceRole}\n {...triggerComboboxProps}\n {...(isMultiSelect ? { 'aria-controls': listboxId } : {})}\n />\n </div>\n {hasError && <div className=\"text-[var(--color-red-500)] text-sm\">{errorMessage}</div>}\n </div>\n );\n};\n"],"names":["Dropdown","props","isControlledSelection","selectedValue","undefined","isControlledOpen","isOpen","internalIsOpen","setInternalIsOpen","useState","searchQuery","setSearchQuery","highlightedMultiSelectIndex","setHighlightedMultiSelectIndex","internalSelectedValues","setInternalSelectedValues","defaultSelectedValue","Array","isArray","popoverRef","useRef","listboxRef","searchInputRef","labelId","useStableId","listboxId","isDropDownOpen","selectedDropDownValues","setIsDropDownOpen","value","onOpenChange","setSelectedDropDownValues","values","selectBy","optionsUniqueBy","displaySelected","dropDownOptions","defaultText","iconColor","disabled","dropdownClassName","hasError","errorMessage","customDropdownContent","isBorderless","shouldShowSearch","showSearchIcon","searchPlaceholder","searchResultEmptyMessage","ariaLabel","customSelectedValue","useEffect","newValues","document","getElementById","scrollIntoView","block","current","requestAnimationFrame","focus","isMultiSelect","type","getFilteredOptions","trim","filter","option","toString","toLowerCase","includes","handleDropDownOptionClick","dropDownOption","onOptionClick","filteredOptions","listboxProps","getOptionProps","highlightedIndex","containerProps","comboboxContainerProps","inputProps","comboboxInputProps","useCombobox","items","onSelect","item","hasItems","length","getSelectedDropDownValue","isSrcOption","clearSelectedDropDownValues","onClear","optionChip","srcOption","renderOptionChip","firstSelectedLabel","remainingCount","React","createElement","className","renderSearchBar","searchComboboxProps","role","onKeyDown","InputWithIcon","leftIcon","name","position","style","color","onChange","placeholder","margin","gap","inputStyle","width","border","outline","automationId","inputRef","dropDownOptionJsx","index","optionTxt","dropDownSelectedValue","selectByUniqueId","isOptionSelected","isHighlighted","optionProps","_extends","key","id","onClick","e","preventDefault","tabIndex","Icon","stroke","renderDropdownContents","map","handleMultiSelectDropdownOptionClick","isSelected","newSelectedDropDownValues","handleApplySelectedDropDownValues","togglePopover","onApply","handleMultiSelectKeyDown","options","stopPropagation","prev","some","v","multiSelectDropdownOptionJSX","optionId","Checkbox","ariaHidden","checked","label","renderMultiSelectDropdownContents","activeDescendantId","ref","onFocus","shiftKey","Button","size","renderDropdownSelect","borderColor","errorBorderColor","dropDownSelectClass","dropDownSelectAutomationId","rotation","getDropdownAriaLabel","triggerSourceRole","triggerComboboxProps","Popover","isPopoverOpen","renderPopoverContents","contentWidth","renderPopoverSrcElement","renderSrcElement","onPopoverToggle","setTimeout","dropDownSrcAutomationId","popoverContentAutomationId","dropDownContentAutomationId","ariaLabelledBy","sourceRole"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index25.js","sources":["../src/components/Dropdown/index.tsx"],"sourcesContent":["import React, { FC, useState, useRef, useEffect } from 'react';\n\nimport { Popover, PopoverHandle } from 'src/components/Popover';\nimport { Icon } from 'components/Icon';\nimport { Checkbox } from '../Checkbox';\nimport { Button } from '../Button';\nimport { InputWithIcon } from '../InputWithIcon';\nimport { useStableId } from '../../utils/useStableId';\nimport { useCombobox } from '../../utils/a11y/useCombobox';\n\ntype DropdownValue = {\n [key: string]: any;\n};\n\ntype DropdownProps = {\n label?: string;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n type: 'select' | 'multi-select';\n dropDownOptions?: DropdownValue[];\n defaultText?: string;\n selectBy?: string;\n optionsUniqueBy?: string;\n displaySelected?: boolean;\n defaultSelectedValue?: DropdownValue | DropdownValue[];\n customSelectedValue?: string;\n onOptionClick?: (selectedValue: DropdownValue) => void;\n style?: React.CSSProperties;\n renderOptionChip?: (option: DropdownValue, srcOption: boolean) => React.ReactNode;\n className?: string;\n iconColor?: string;\n disabled?: boolean;\n dropdownClassName?: string;\n hasError?: boolean;\n errorMessage?: string;\n onApply?: (selectedValue: DropdownValue[]) => void;\n onClear?: () => void;\n customDropdownContent?: () => React.ReactNode;\n isBorderless?: boolean;\n dropDownSrcAutomationId?: string;\n dropDownSelectAutomationId?: string;\n dropDownContentAutomationId?: string;\n shouldShowSearch?: boolean;\n showSearchIcon?: boolean;\n searchPlaceholder?: string;\n searchResultEmptyMessage?: string;\n /** Controlled selection — when provided, Dropdown won't manage internal selected state */\n selectedValue?: DropdownValue | DropdownValue[];\n /** Controlled open state — when provided, Dropdown won't manage internal open/close */\n isOpen?: boolean;\n /** Callback when open state changes (fires in both controlled and uncontrolled modes) */\n onOpenChange?: (isOpen: boolean) => void;\n /** Custom trigger element — replaces the default bordered div + chevron */\n renderSrcElement?: (props: { isOpen: boolean; selectedValue: DropdownValue[] }) => React.ReactNode;\n /** Render the dropdown panel in a portal (document.body) to escape overflow:hidden containers */\n isWithPortal?: boolean;\n};\n\nexport const Dropdown: FC<DropdownProps> = (props) => {\n const isControlledSelection = props.selectedValue !== undefined;\n const isControlledOpen = props.isOpen !== undefined;\n\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [highlightedMultiSelectIndex, setHighlightedMultiSelectIndex] = useState(-1);\n const [internalSelectedValues, setInternalSelectedValues] = useState<DropdownValue[]>(() =>\n props?.defaultSelectedValue\n ? Array.isArray(props?.defaultSelectedValue)\n ? props?.defaultSelectedValue\n : [props.defaultSelectedValue]\n : []\n );\n const popoverRef = useRef<HTMLDivElement & PopoverHandle>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const labelId = useStableId(undefined, 'dropdown-label');\n const listboxId = useStableId(undefined, 'dropdown-listbox');\n\n // Derived state: controlled props take precedence over internal state\n const isDropDownOpen = isControlledOpen ? props.isOpen! : internalIsOpen;\n const selectedDropDownValues = isControlledSelection\n ? (Array.isArray(props.selectedValue) ? props.selectedValue : props.selectedValue ? [props.selectedValue] : [])\n : internalSelectedValues;\n\n const setIsDropDownOpen = (value: boolean) => {\n if (!isControlledOpen) {\n setInternalIsOpen(value);\n }\n props.onOpenChange?.(value);\n };\n\n const setSelectedDropDownValues = (values: DropdownValue[]) => {\n if (!isControlledSelection) {\n setInternalSelectedValues(values);\n }\n };\n\n const {\n selectBy = '',\n optionsUniqueBy = '',\n displaySelected = false,\n dropDownOptions,\n defaultText = 'Select',\n iconColor = 'var(--color-gray-700)',\n disabled = false,\n dropdownClassName = '',\n hasError = false,\n errorMessage = '',\n customDropdownContent = null,\n isBorderless = false,\n shouldShowSearch = false,\n showSearchIcon = true,\n searchPlaceholder = 'Search...',\n searchResultEmptyMessage = 'No results found',\n ariaLabel = '',\n customSelectedValue = '',\n isWithPortal = false\n } = props;\n\n useEffect(() => {\n if (!isControlledSelection) {\n const newValues = props?.defaultSelectedValue\n ? Array.isArray(props?.defaultSelectedValue)\n ? props?.defaultSelectedValue\n : [props.defaultSelectedValue]\n : [];\n setInternalSelectedValues(newValues);\n }\n }, [props?.defaultSelectedValue, isControlledSelection]);\n\n useEffect(() => {\n if (!isDropDownOpen) {\n setSearchQuery('');\n setHighlightedMultiSelectIndex(-1);\n }\n }, [isDropDownOpen]);\n\n useEffect(() => {\n if (highlightedMultiSelectIndex >= 0) {\n const optionEl = document.getElementById(`${listboxId}-option-${highlightedMultiSelectIndex}`);\n optionEl?.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightedMultiSelectIndex]);\n\n // Focus search input when dropdown opens with search enabled\n useEffect(() => {\n if (isDropDownOpen && shouldShowSearch && searchInputRef.current) {\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isDropDownOpen, shouldShowSearch]);\n\n const isMultiSelect = props?.type === 'multi-select';\n\n const getFilteredOptions = () => {\n if (!searchQuery.trim()) {\n return dropDownOptions || [];\n }\n return (dropDownOptions || []).filter((option) => {\n const optionValue = option?.[selectBy]?.toString().toLowerCase() || '';\n return optionValue.includes(searchQuery.toLowerCase());\n });\n };\n\n const handleDropDownOptionClick = (dropDownOption: any) => {\n setSelectedDropDownValues([dropDownOption]);\n setIsDropDownOpen(false);\n props?.onOptionClick?.(dropDownOption);\n };\n\n // Use useCombobox hook for keyboard navigation (only for single-select)\n const filteredOptions = getFilteredOptions();\n const {\n listboxProps,\n getOptionProps,\n highlightedIndex,\n containerProps: comboboxContainerProps,\n inputProps: comboboxInputProps\n } = useCombobox({\n items: isMultiSelect ? [] : filteredOptions, // Only use for single-select\n isOpen: isDropDownOpen && !isMultiSelect,\n onOpenChange: setIsDropDownOpen,\n onSelect: (item: DropdownValue) => {\n handleDropDownOptionClick(item);\n },\n listboxId,\n disabled: isMultiSelect || disabled,\n hasItems: filteredOptions.length > 0\n });\n\n const getSelectedDropDownValue = (option: DropdownValue, isSrcOption: boolean = false) => {\n if (isMultiSelect) {\n return defaultText;\n }\n\n // if custom selected value is provided, use it instead of the option value\n if (isSrcOption && customSelectedValue) {\n return customSelectedValue;\n }\n\n return option?.[selectBy] || defaultText;\n };\n\n const clearSelectedDropDownValues = () => {\n setSelectedDropDownValues([]);\n props?.onClear?.();\n };\n\n const optionChip = (option: DropdownValue, srcOption: boolean = false) => {\n if (props?.renderOptionChip) {\n return props?.renderOptionChip(option, srcOption);\n }\n\n if (isMultiSelect && selectedDropDownValues?.length > 0) {\n const firstSelectedLabel = selectedDropDownValues[0]?.[selectBy] || '';\n const remainingCount = selectedDropDownValues.length - 1;\n\n // For multiple selections: text takes remaining space, count takes minimum space needed\n return (\n <div className={`option-chip flex items-center w-full`}>\n <div\n className={`${remainingCount > 0 ? 'w-full' : 'flex-1'} truncate`}\n >{`${defaultText}: ${firstSelectedLabel}`}</div>\n {remainingCount > 0 && <div className=\"flex-shrink-0\">+{remainingCount}</div>}\n </div>\n );\n }\n\n return (\n <p className={`option-chip flex flex-1 items-center justify-between`}>\n {getSelectedDropDownValue(option, srcOption)}\n </p>\n );\n };\n\n const renderSearchBar = () => {\n // When search is the combobox (shouldShowSearch + single-select), wire useCombobox ARIA onto the input\n const searchComboboxProps = shouldShowSearch && !isMultiSelect ? {\n role: comboboxInputProps.role,\n 'aria-expanded': comboboxInputProps['aria-expanded'],\n 'aria-haspopup': comboboxInputProps['aria-haspopup'],\n 'aria-controls': comboboxInputProps['aria-controls'],\n 'aria-autocomplete': comboboxInputProps['aria-autocomplete'],\n 'aria-activedescendant': comboboxInputProps['aria-activedescendant'],\n onKeyDown: comboboxInputProps.onKeyDown\n } : {};\n\n return (\n <div className=\" w-full relative flex items-center border-b border-[var(--color-gray-300)]\">\n <InputWithIcon\n leftIcon={showSearchIcon ? { name: 'search', position: 'left', style: { color: 'var(--color-gray-500)' } } : undefined}\n value={searchQuery}\n onChange={(value) => setSearchQuery(value)}\n placeholder={searchPlaceholder}\n style={{ margin: 0, gap: 0 }}\n inputStyle={{ width: '100%', border: 'none', outline: 'none' }}\n automationId=\"se-design-dropdown-search\"\n ariaLabel={searchPlaceholder}\n inputRef={searchInputRef}\n inputProps={searchComboboxProps}\n />\n </div>\n );\n };\n\n const dropDownOptionJsx = (dropDownOption: DropdownValue, index: number) => {\n const optionTxt = dropDownOption[selectBy];\n const dropDownSelectedValue = selectedDropDownValues[0]?.[selectBy] || defaultText;\n const selectByUniqueId = optionsUniqueBy?.length\n ? dropDownOption[optionsUniqueBy] == selectedDropDownValues[0]?.[optionsUniqueBy]\n : true;\n const isOptionSelected = displaySelected && optionTxt === dropDownSelectedValue && selectByUniqueId;\n const isHighlighted = highlightedIndex === index;\n const optionProps = !isMultiSelect ? getOptionProps(index, isOptionSelected) : {};\n\n return (\n <div\n key={dropDownOption.id || dropDownOption.value}\n className={`option break-words px-3 py-2 hover:bg-gray-100 cursor-pointer select-none flex items-center justify-between ${\n isOptionSelected ? 'selected' : ''\n } ${isHighlighted ? 'bg-gray-100' : ''}`}\n onClick={() => handleDropDownOptionClick(dropDownOption)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleDropDownOptionClick(dropDownOption);\n }\n }}\n tabIndex={-1}\n data-automation-id={`dropdown-option-${dropDownOption?.automationId || index}`}\n {...optionProps}\n aria-selected={isOptionSelected ? 'true' : 'false'}\n >\n {optionChip({ ...dropDownOption, isOptionSelected }, false)}\n {isOptionSelected && <Icon name=\"checkmark\" stroke={iconColor} />}\n </div>\n );\n };\n\n const renderDropdownContents = () => {\n return (\n <div\n className=\"dropdown-content dropdown-options\"\n aria-label={`${defaultText} options`}\n {...listboxProps}\n >\n {shouldShowSearch && renderSearchBar()}\n <div className=\"flex flex-col max-h-80 overflow-y-auto\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => dropDownOptionJsx(dropDownOption, index))\n ) : (\n <div\n className=\"px-3 py-4 text-center text-[var(--color-gray-700)] text-sm\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {searchResultEmptyMessage}\n </div>\n )}\n </div>\n </div>\n );\n };\n\n const handleMultiSelectDropdownOptionClick = (isSelected: boolean, dropDownOption: DropdownValue) => {\n let newSelectedDropDownValues: DropdownValue[] = [];\n if (isSelected) {\n newSelectedDropDownValues = [...selectedDropDownValues, dropDownOption];\n } else {\n newSelectedDropDownValues = selectedDropDownValues?.filter(\n (option) => option[optionsUniqueBy] !== dropDownOption[optionsUniqueBy]\n );\n }\n setSelectedDropDownValues(newSelectedDropDownValues);\n };\n\n const handleApplySelectedDropDownValues = () => {\n popoverRef.current?.togglePopover();\n props?.onApply?.(selectedDropDownValues);\n };\n\n const handleMultiSelectKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const options = getFilteredOptions();\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n setHighlightedMultiSelectIndex((prev) => (prev < options.length - 1 ? prev + 1 : prev));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n setHighlightedMultiSelectIndex((prev) => (prev > 0 ? prev - 1 : 0));\n } else if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n if (highlightedMultiSelectIndex >= 0 && highlightedMultiSelectIndex < options.length) {\n const option = options[highlightedMultiSelectIndex];\n const isSelected = selectedDropDownValues.some(\n (v) => v[optionsUniqueBy] === option[optionsUniqueBy]\n );\n handleMultiSelectDropdownOptionClick(!isSelected, option);\n }\n }\n };\n\n const multiSelectDropdownOptionJSX = (dropDownOption: DropdownValue, index: number) => {\n const isOptionSelected = selectedDropDownValues.some(\n (option) => option[optionsUniqueBy] === dropDownOption[optionsUniqueBy]\n );\n const optionId = `${listboxId}-option-${index}`;\n const isHighlighted = highlightedMultiSelectIndex === index;\n\n return (\n <div\n key={dropDownOption.id || dropDownOption.value}\n id={optionId}\n role=\"option\"\n aria-selected={isOptionSelected}\n className={`option px-3 py-2 cursor-pointer select-none flex items-center gap-2 ${\n isHighlighted ? 'bg-gray-100' : 'hover:bg-gray-100'\n }`}\n onClick={() => handleMultiSelectDropdownOptionClick(!isOptionSelected, dropDownOption)}\n data-automation-id={`dropdown-option-${dropDownOption?.automationId || index}`}\n >\n <Checkbox\n tabIndex={-1}\n ariaHidden\n checked={isOptionSelected}\n onChange={() => {}}\n />\n <span className=\"checkbox-label\">{dropDownOption?.label}</span>\n </div>\n );\n };\n\n const renderMultiSelectDropdownContents = () => {\n const filteredOptions = getFilteredOptions();\n const activeDescendantId =\n highlightedMultiSelectIndex >= 0\n ? `${listboxId}-option-${highlightedMultiSelectIndex}`\n : undefined;\n\n return (\n <div\n className=\"dropdown-content dropdown-options\"\n onKeyDown={(e) => {\n // Stop all Tab events from reaching Popover's handlePopoverContentKeyDown (which closes on Tab).\n // Forward Tab: listbox → Clear → Apply → focus exits → useDismissOnFocusOut closes.\n // Shift+Tab: Apply → Clear → listbox → trigger (dropdown stays open; next Shift+Tab exits).\n if (e.key === 'Tab') {\n e.stopPropagation();\n }\n }}\n >\n <div\n id={listboxId}\n ref={listboxRef}\n role=\"listbox\"\n aria-label={`${defaultText} options`}\n aria-multiselectable=\"true\"\n tabIndex={-1}\n style={{ outline: 'none' }}\n aria-activedescendant={activeDescendantId}\n onKeyDown={handleMultiSelectKeyDown}\n onFocus={() => {\n if (highlightedMultiSelectIndex === -1 && filteredOptions.length > 0) {\n setHighlightedMultiSelectIndex(0);\n }\n }}\n >\n {shouldShowSearch && renderSearchBar()}\n <div className=\"flex flex-col max-h-80 overflow-y-auto\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => multiSelectDropdownOptionJSX(dropDownOption, index))\n ) : (\n <div\n className=\"px-3 py-4 text-center text-[var(--color-gray-700)] text-sm\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {searchResultEmptyMessage}\n </div>\n )}\n </div>\n </div>\n <div\n className=\"flex items-center justify-end gap-4 p-3 border-t border-[var(--color-gray-200)]\"\n onKeyDown={(e) => {\n if (e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n listboxRef.current?.focus();\n }\n }}\n >\n <Button label=\"Clear\" type=\"link\" size=\"sm\" onClick={clearSelectedDropDownValues} automationId=\"se-design-dropdown-clear-button\" ariaLabel={`Clear ${defaultText} selection`} />\n <Button label=\"Apply\" type=\"primary\" size=\"sm\" onClick={handleApplySelectedDropDownValues} automationId=\"se-design-dropdown-apply-button\" />\n </div>\n </div>\n );\n };\n\n const renderDropdownSelect = () => {\n const borderColor = isDropDownOpen\n ? 'border-[var(--color-blue-500)]'\n : disabled\n ? 'border-[var(--color-gray-300)]'\n : 'border-[var(--color-gray-600)]';\n const errorBorderColor = hasError ? 'border-[var(--color-red-500)]' : '';\n const dropDownSelectClass = `dropdown-src-element bg-[var(--color-white)] flex px-3 py-2 ${\n isBorderless ? 'border-0' : `border rounded-md ${errorBorderColor ? errorBorderColor : borderColor}`\n } flex items-center ${dropdownClassName}`;\n\n return (\n <div className={dropDownSelectClass}>\n <div\n className=\"flex-1 min-w-0\"\n data-automation-id={props?.dropDownSelectAutomationId || 'selected-dropdown-value'}\n >\n {optionChip(selectedDropDownValues[0], true)}\n </div>\n <div className=\"flex-shrink-0 ml-2\" aria-hidden=\"true\">\n <Icon\n name={'chevron'}\n rotation={isDropDownOpen ? '180' : '0'}\n className={`transition-transform`}\n stroke={iconColor}\n />\n </div>\n </div>\n );\n };\n\n const getDropdownAriaLabel = () => {\n return ariaLabel || defaultText || 'Select option';\n };\n\n // sourceRole: select-only keeps combobox on trigger (APG select-only combobox),\n // search-enabled moves combobox to the search input (trigger becomes a button)\n const triggerSourceRole = shouldShowSearch ? 'button' : 'combobox';\n\n // Combobox ARIA on trigger only for select-only (no search) single-select\n const triggerComboboxProps = triggerSourceRole === 'combobox' && !isMultiSelect && comboboxInputProps ? {\n 'aria-activedescendant': comboboxInputProps['aria-activedescendant'],\n 'aria-controls': comboboxInputProps['aria-controls'],\n 'aria-expanded': comboboxInputProps['aria-expanded']\n } : {};\n\n return (\n <div\n className={`se-design-dropdown-container${props?.className ? ` ${props?.className}` : ''}`}\n style={props?.style}\n >\n {props?.label && (\n <div id={labelId} className=\"se-design-dropdown-label mb-[3px] text-[var(--color-gray-700)] text-sm\">\n {props?.label}\n </div>\n )}\n <div\n style={props?.style}\n className={`${disabled ? 'bg-[var(--color-gray-50)] rounded-md cursor-not-allowed' : ''}`}\n {...(!isMultiSelect ? {\n ...comboboxContainerProps,\n // Portal content lives in document.body — focus moving into it looks like \"focus out\" to\n // the container's blur handler, causing immediate close. Suppress it; the Popover's own\n // onBlur handler checks both source and portal content and handles dismissal correctly.\n ...(isWithPortal ? { onBlurCapture: undefined } : {})\n } : {})}\n >\n <Popover\n ref={popoverRef}\n isPopoverOpen={isDropDownOpen}\n isWithPortal={isWithPortal}\n renderPopoverContents={\n customDropdownContent\n ? customDropdownContent\n : isMultiSelect\n ? renderMultiSelectDropdownContents\n : renderDropdownContents\n }\n contentWidth={'full'}\n renderPopoverSrcElement={\n props.renderSrcElement\n ? () => props.renderSrcElement!({ isOpen: isDropDownOpen, selectedValue: selectedDropDownValues })\n : renderDropdownSelect\n }\n onPopoverToggle={(value) => {\n setIsDropDownOpen(value);\n if (value && isMultiSelect) {\n setTimeout(() => listboxRef.current?.focus(), 50);\n }\n }}\n disabled={disabled}\n automationId={props?.dropDownSrcAutomationId}\n popoverContentAutomationId={props?.dropDownContentAutomationId}\n ariaLabelledBy={props?.label ? labelId : props?.ariaLabelledBy}\n ariaLabel={props?.label || props?.ariaLabelledBy ? undefined : getDropdownAriaLabel()}\n sourceRole={triggerSourceRole}\n {...triggerComboboxProps}\n {...(isMultiSelect ? { 'aria-controls': listboxId } : {})}\n />\n </div>\n {hasError && <div className=\"text-[var(--color-red-500)] text-sm\">{errorMessage}</div>}\n </div>\n );\n};\n"],"names":["Dropdown","props","isControlledSelection","selectedValue","undefined","isControlledOpen","isOpen","internalIsOpen","setInternalIsOpen","useState","searchQuery","setSearchQuery","highlightedMultiSelectIndex","setHighlightedMultiSelectIndex","internalSelectedValues","setInternalSelectedValues","defaultSelectedValue","Array","isArray","popoverRef","useRef","listboxRef","searchInputRef","labelId","useStableId","listboxId","isDropDownOpen","selectedDropDownValues","setIsDropDownOpen","value","onOpenChange","setSelectedDropDownValues","values","selectBy","optionsUniqueBy","displaySelected","dropDownOptions","defaultText","iconColor","disabled","dropdownClassName","hasError","errorMessage","customDropdownContent","isBorderless","shouldShowSearch","showSearchIcon","searchPlaceholder","searchResultEmptyMessage","ariaLabel","customSelectedValue","isWithPortal","useEffect","newValues","document","getElementById","scrollIntoView","block","current","requestAnimationFrame","focus","isMultiSelect","type","getFilteredOptions","trim","filter","option","toString","toLowerCase","includes","handleDropDownOptionClick","dropDownOption","onOptionClick","filteredOptions","listboxProps","getOptionProps","highlightedIndex","containerProps","comboboxContainerProps","inputProps","comboboxInputProps","useCombobox","items","onSelect","item","hasItems","length","getSelectedDropDownValue","isSrcOption","clearSelectedDropDownValues","onClear","optionChip","srcOption","renderOptionChip","firstSelectedLabel","remainingCount","React","createElement","className","renderSearchBar","searchComboboxProps","role","onKeyDown","InputWithIcon","leftIcon","name","position","style","color","onChange","placeholder","margin","gap","inputStyle","width","border","outline","automationId","inputRef","dropDownOptionJsx","index","optionTxt","dropDownSelectedValue","selectByUniqueId","isOptionSelected","isHighlighted","optionProps","_extends","key","id","onClick","e","preventDefault","tabIndex","Icon","stroke","renderDropdownContents","map","handleMultiSelectDropdownOptionClick","isSelected","newSelectedDropDownValues","handleApplySelectedDropDownValues","togglePopover","onApply","handleMultiSelectKeyDown","options","stopPropagation","prev","some","v","multiSelectDropdownOptionJSX","optionId","Checkbox","ariaHidden","checked","label","renderMultiSelectDropdownContents","activeDescendantId","ref","onFocus","shiftKey","Button","size","renderDropdownSelect","borderColor","errorBorderColor","dropDownSelectClass","dropDownSelectAutomationId","rotation","getDropdownAriaLabel","triggerSourceRole","triggerComboboxProps","onBlurCapture","Popover","isPopoverOpen","renderPopoverContents","contentWidth","renderPopoverSrcElement","renderSrcElement","onPopoverToggle","setTimeout","dropDownSrcAutomationId","popoverContentAutomationId","dropDownContentAutomationId","ariaLabelledBy","sourceRole"],"mappings":"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"}
|
package/dist/index38.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import a, { forwardRef as de, useState as I, useRef as V, useCallback as H, useEffect as B, useImperativeHandle as
|
|
2
|
-
import { Popover as
|
|
3
|
-
import { Icon as
|
|
4
|
-
import { Checkbox as
|
|
1
|
+
import a, { forwardRef as de, useState as I, useRef as V, useCallback as H, useEffect as B, useImperativeHandle as ve } from "react";
|
|
2
|
+
import { Popover as we } from "./index19.js";
|
|
3
|
+
import { Icon as Ee } from "./index6.js";
|
|
4
|
+
import { Checkbox as ke } from "./index23.js";
|
|
5
5
|
import { Button as G } from "./index4.js";
|
|
6
6
|
import "./index72.js";
|
|
7
|
-
import { useCombobox as
|
|
8
|
-
import { useStableId as
|
|
7
|
+
import { useCombobox as be } from "./index68.js";
|
|
8
|
+
import { useStableId as Ce } from "./index199.js";
|
|
9
9
|
/* empty css */
|
|
10
10
|
function g() {
|
|
11
11
|
return g = Object.assign ? Object.assign.bind() : function(v) {
|
|
@@ -16,7 +16,7 @@ function g() {
|
|
|
16
16
|
return v;
|
|
17
17
|
}, g.apply(null, arguments);
|
|
18
18
|
}
|
|
19
|
-
const
|
|
19
|
+
const _e = /* @__PURE__ */ de(({
|
|
20
20
|
value: v,
|
|
21
21
|
onChange: i,
|
|
22
22
|
placeholder: E = "Type to search or add custom tags...",
|
|
@@ -30,8 +30,9 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
30
30
|
disabled: l = !1,
|
|
31
31
|
type: W = "select",
|
|
32
32
|
showInput: J = !0,
|
|
33
|
-
displayTagBy: K = "label"
|
|
34
|
-
|
|
33
|
+
displayTagBy: K = "label",
|
|
34
|
+
isWithPortal: Q = !1
|
|
35
|
+
}, X) => {
|
|
35
36
|
const j = (t) => t.map((e) => {
|
|
36
37
|
const n = h.find((o) => o.value === e);
|
|
37
38
|
return n ? {
|
|
@@ -41,7 +42,7 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
41
42
|
label: e,
|
|
42
43
|
value: e
|
|
43
44
|
};
|
|
44
|
-
}), [r, p] = I(() => j(v || [])), [s, S] = I(""), [A,
|
|
45
|
+
}), [r, p] = I(() => j(v || [])), [s, S] = I(""), [A, Y] = I(h), [f, c] = I(!1), Z = V(null), x = V(null), R = V(!1), b = W === "multi-select-without-cta", d = W === "multi-select" || b, ee = Ce(u, "dropdown-input-tags-listbox"), N = H((t) => {
|
|
45
46
|
if (l) return;
|
|
46
47
|
const e = [...r];
|
|
47
48
|
e.some((n) => n.value === t.value) || (e.push({
|
|
@@ -66,29 +67,29 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
66
67
|
}), p(n), i?.(n.map((o) => o.value))), S(""), c(!1);
|
|
67
68
|
return;
|
|
68
69
|
}
|
|
69
|
-
if (
|
|
70
|
+
if (d) {
|
|
70
71
|
const e = r.some((n) => n.value === t.value);
|
|
71
72
|
D(!e, t);
|
|
72
73
|
} else
|
|
73
74
|
N(t);
|
|
74
75
|
}
|
|
75
|
-
}, [l,
|
|
76
|
+
}, [l, d, r, s, i, D, N]), $ = A.length > 0 ? A : F && s.trim() ? [{
|
|
76
77
|
id: y,
|
|
77
78
|
label: `Add "${s.trim()}"`,
|
|
78
79
|
value: y
|
|
79
80
|
}] : [], {
|
|
80
|
-
containerProps:
|
|
81
|
+
containerProps: te,
|
|
81
82
|
inputProps: U,
|
|
82
|
-
listboxProps:
|
|
83
|
+
listboxProps: ne,
|
|
83
84
|
getOptionProps: O,
|
|
84
85
|
highlightedIndex: T,
|
|
85
86
|
setHighlightedIndex: w
|
|
86
|
-
} =
|
|
87
|
+
} = be({
|
|
87
88
|
items: $,
|
|
88
|
-
isOpen:
|
|
89
|
+
isOpen: f,
|
|
89
90
|
onOpenChange: c,
|
|
90
91
|
onSelect: z,
|
|
91
|
-
listboxId:
|
|
92
|
+
listboxId: ee,
|
|
92
93
|
hasItems: $.length > 0
|
|
93
94
|
});
|
|
94
95
|
B(() => {
|
|
@@ -97,15 +98,15 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
97
98
|
return;
|
|
98
99
|
}
|
|
99
100
|
p(j(v || []));
|
|
100
|
-
}, [v, h,
|
|
101
|
+
}, [v, h, f]), B(() => {
|
|
101
102
|
const t = h.filter((e) => e.label.toLowerCase().includes(s.toLowerCase()) || e.value.toLowerCase().includes(s.toLowerCase()));
|
|
102
|
-
|
|
103
|
+
Y(t);
|
|
103
104
|
}, [s, h]);
|
|
104
|
-
const
|
|
105
|
+
const ae = (t) => {
|
|
105
106
|
if (l) return;
|
|
106
107
|
const e = r.filter((n, o) => o !== t);
|
|
107
|
-
p(e), (!
|
|
108
|
-
},
|
|
108
|
+
p(e), (!d || b || d && !f) && i?.(e.map((n) => n.value));
|
|
109
|
+
}, le = (t) => {
|
|
109
110
|
if (!l) {
|
|
110
111
|
if (t.key === "Backspace" && s === "" && r.length > 0) {
|
|
111
112
|
t.preventDefault();
|
|
@@ -124,27 +125,27 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
124
125
|
}
|
|
125
126
|
U.onKeyDown(t);
|
|
126
127
|
}
|
|
127
|
-
},
|
|
128
|
+
}, re = (t) => {
|
|
128
129
|
if (l) return;
|
|
129
130
|
const e = t.target.value;
|
|
130
|
-
S(e), w(-1), e.trim() && !
|
|
131
|
-
},
|
|
131
|
+
S(e), w(-1), e.trim() && !f && c(!0);
|
|
132
|
+
}, oe = () => {
|
|
132
133
|
l || (s.trim() || h.length > 0) && c(!0);
|
|
133
|
-
}, oe = (t) => {
|
|
134
|
-
l || (t.stopPropagation(), x.current?.focus(), !d && (s.trim() || h.length > 0) && c(!0));
|
|
135
134
|
}, se = (t) => {
|
|
135
|
+
l || (t.stopPropagation(), x.current?.focus(), !f && (s.trim() || h.length > 0) && c(!0));
|
|
136
|
+
}, ie = (t) => {
|
|
136
137
|
if (l) {
|
|
137
138
|
t.preventDefault(), t.stopPropagation();
|
|
138
139
|
return;
|
|
139
140
|
}
|
|
140
141
|
t.target.closest(".input-with-tags-container") && t.stopPropagation();
|
|
141
|
-
},
|
|
142
|
-
l || c(!
|
|
142
|
+
}, ce = () => {
|
|
143
|
+
l || c(!f);
|
|
143
144
|
};
|
|
144
|
-
|
|
145
|
-
toggleDropdown:
|
|
145
|
+
ve(X, () => ({
|
|
146
|
+
toggleDropdown: ce
|
|
146
147
|
}), []);
|
|
147
|
-
const
|
|
148
|
+
const ue = (t, e, n, o) => {
|
|
148
149
|
const C = r.some((P) => P.value === t.value), m = T === e, M = O(e, C);
|
|
149
150
|
return /* @__PURE__ */ a.createElement("div", g({
|
|
150
151
|
key: t.id
|
|
@@ -158,13 +159,13 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
158
159
|
}, t.label), t.value !== t.label && /* @__PURE__ */ a.createElement("span", {
|
|
159
160
|
className: "option-value"
|
|
160
161
|
}, t.value));
|
|
161
|
-
},
|
|
162
|
+
}, pe = () => {
|
|
162
163
|
R.current = !0;
|
|
163
164
|
const t = r.map((e) => e.value);
|
|
164
165
|
i?.(t), c(!1);
|
|
165
|
-
},
|
|
166
|
+
}, me = () => {
|
|
166
167
|
p([]);
|
|
167
|
-
},
|
|
168
|
+
}, ge = (t, e) => {
|
|
168
169
|
const n = r.some((m) => m.value === t.value), o = T === e, C = O(e, n);
|
|
169
170
|
return /* @__PURE__ */ a.createElement("div", g({
|
|
170
171
|
key: t.id
|
|
@@ -176,57 +177,58 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
176
177
|
"data-automation-id": `${u}-option-${t.id}`
|
|
177
178
|
}), /* @__PURE__ */ a.createElement("span", {
|
|
178
179
|
onClick: (m) => m.stopPropagation()
|
|
179
|
-
}, /* @__PURE__ */ a.createElement(
|
|
180
|
+
}, /* @__PURE__ */ a.createElement(ke, {
|
|
180
181
|
automationId: "checkbox",
|
|
181
182
|
className: "checkbox",
|
|
182
183
|
defaultChecked: n,
|
|
183
184
|
onChange: (m) => D(m, t),
|
|
184
185
|
label: t.label
|
|
185
186
|
})));
|
|
186
|
-
},
|
|
187
|
+
}, he = () => /* @__PURE__ */ a.createElement("div", {
|
|
187
188
|
className: "dropdown-with-input-tags-ctas-container"
|
|
188
189
|
}, /* @__PURE__ */ a.createElement(G, {
|
|
189
190
|
label: "Clear",
|
|
190
191
|
type: "link",
|
|
191
192
|
size: "sm",
|
|
192
|
-
onClick:
|
|
193
|
+
onClick: me,
|
|
193
194
|
automationId: `${u}-clear-button`
|
|
194
195
|
}), /* @__PURE__ */ a.createElement(G, {
|
|
195
196
|
label: "Apply",
|
|
196
197
|
type: "primary",
|
|
197
198
|
size: "sm",
|
|
198
|
-
onClick:
|
|
199
|
+
onClick: pe,
|
|
199
200
|
automationId: `${u}-apply-button`
|
|
200
201
|
}));
|
|
201
202
|
return /* @__PURE__ */ a.createElement("div", g({
|
|
202
203
|
className: `dropdown-with-input-tags-wrapper ${k} ${l ? "disabled-wrapper" : ""}`,
|
|
203
204
|
"data-automation-id": u
|
|
204
|
-
},
|
|
205
|
+
}, te), _ && /* @__PURE__ */ a.createElement("label", {
|
|
205
206
|
id: `${u}-label`,
|
|
206
207
|
className: "dropdown-with-input-tags-label"
|
|
207
208
|
}, _), /* @__PURE__ */ a.createElement("div", {
|
|
208
|
-
onClick:
|
|
209
|
-
}, /* @__PURE__ */ a.createElement(
|
|
210
|
-
ref:
|
|
209
|
+
onClick: ie
|
|
210
|
+
}, /* @__PURE__ */ a.createElement(we, {
|
|
211
|
+
ref: Z,
|
|
211
212
|
className: "dropdown-with-input-tags-popover",
|
|
212
213
|
contentWidth: "full",
|
|
213
214
|
position: "bottom-left",
|
|
214
|
-
isPopoverOpen: !l &&
|
|
215
|
+
isPopoverOpen: !l && f,
|
|
215
216
|
onPopoverToggle: l ? () => {
|
|
216
217
|
} : c,
|
|
217
218
|
disableClickToggle: !0,
|
|
219
|
+
isWithPortal: Q,
|
|
218
220
|
renderPopoverContents: ({
|
|
219
221
|
closePopoverCb: t
|
|
220
|
-
}) => /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement("div", g({},
|
|
222
|
+
}) => /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement("div", g({}, ne, {
|
|
221
223
|
className: "dropdown-with-input-tags-content"
|
|
222
|
-
},
|
|
224
|
+
}, d && {
|
|
223
225
|
"aria-multiselectable": "true"
|
|
224
226
|
}), $.length > 0 ? $.map((e, n) => {
|
|
225
227
|
if (e.value === y) {
|
|
226
|
-
const P = T === n,
|
|
228
|
+
const P = T === n, fe = O(n, !1);
|
|
227
229
|
return /* @__PURE__ */ a.createElement("div", g({
|
|
228
230
|
key: e.id
|
|
229
|
-
},
|
|
231
|
+
}, fe, {
|
|
230
232
|
className: `dropdown-with-input-tags-option dropdown-with-input-tags-custom-option ${P ? "highlighted" : ""}`,
|
|
231
233
|
onClick: () => {
|
|
232
234
|
l || (z(e), t());
|
|
@@ -234,43 +236,43 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
234
236
|
onMouseEnter: () => w(n)
|
|
235
237
|
}), 'Add "', s.trim(), '"');
|
|
236
238
|
}
|
|
237
|
-
if (
|
|
238
|
-
return
|
|
239
|
+
if (d)
|
|
240
|
+
return ge(e, n);
|
|
239
241
|
const o = r.some((P) => P.value === e.value), C = T === n, M = {
|
|
240
242
|
...O(n, o),
|
|
241
243
|
onMouseEnter: () => w(n),
|
|
242
244
|
className: `dropdown-with-input-tags-option ${C ? "highlighted" : ""}`
|
|
243
245
|
};
|
|
244
|
-
return L ? L(e, M, N) :
|
|
246
|
+
return L ? L(e, M, N) : ue(e, n, N, l);
|
|
245
247
|
}) : /* @__PURE__ */ a.createElement("div", {
|
|
246
248
|
className: "dropdown-with-input-tags-no-options"
|
|
247
249
|
}, /* @__PURE__ */ a.createElement("div", {
|
|
248
250
|
className: "dropdown-with-input-tags-no-options-text",
|
|
249
251
|
role: "status",
|
|
250
252
|
"aria-live": "polite"
|
|
251
|
-
}, q))),
|
|
253
|
+
}, q))), d && !b && he()),
|
|
252
254
|
renderPopoverSrcElement: () => /* @__PURE__ */ a.createElement("div", {
|
|
253
255
|
className: "dropdown-with-input-tags-input-container"
|
|
254
256
|
}, /* @__PURE__ */ a.createElement("div", {
|
|
255
257
|
className: `input-with-tags-container ${l ? "disabled-input-with-tags-container" : ""}`,
|
|
256
|
-
onClick:
|
|
258
|
+
onClick: se
|
|
257
259
|
}, r.map((t, e) => /* @__PURE__ */ a.createElement("span", {
|
|
258
260
|
key: e,
|
|
259
261
|
className: "tag-in-inputwithtags"
|
|
260
|
-
}, t[K], !l && /* @__PURE__ */ a.createElement(
|
|
262
|
+
}, t[K], !l && /* @__PURE__ */ a.createElement(Ee, {
|
|
261
263
|
name: "close",
|
|
262
264
|
className: "close-icon-in-inputwithtags",
|
|
263
265
|
ariaLabel: `Remove tag ${t[K]}`,
|
|
264
|
-
onClick: () =>
|
|
266
|
+
onClick: () => ae(e),
|
|
265
267
|
shouldStopPropagation: !0
|
|
266
268
|
}))), (J || !r.length) && /* @__PURE__ */ a.createElement("input", g({
|
|
267
269
|
ref: x
|
|
268
270
|
}, U, {
|
|
269
271
|
type: "text",
|
|
270
272
|
value: s,
|
|
271
|
-
onChange:
|
|
272
|
-
onKeyDown:
|
|
273
|
-
onFocus:
|
|
273
|
+
onChange: re,
|
|
274
|
+
onKeyDown: le,
|
|
275
|
+
onFocus: oe,
|
|
274
276
|
placeholder: r.length === 0 ? E : "",
|
|
275
277
|
className: "input-with-tags-input",
|
|
276
278
|
disabled: l,
|
|
@@ -281,6 +283,6 @@ const Ie = /* @__PURE__ */ de(({
|
|
|
281
283
|
})));
|
|
282
284
|
});
|
|
283
285
|
export {
|
|
284
|
-
|
|
286
|
+
_e as DropdownWithInputTags
|
|
285
287
|
};
|
|
286
288
|
//# sourceMappingURL=index38.js.map
|
package/dist/index38.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index38.js","sources":["../src/components/DropdownWithInputTags/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, forwardRef, ForwardedRef, useImperativeHandle, KeyboardEvent, useCallback } from 'react';\nimport { Popover, PopoverHandle } from '../Popover';\nimport { Icon } from '../Icon';\nimport { Checkbox } from '../Checkbox';\nimport { Button } from '../Button';\nimport { useCombobox } from '../../utils/a11y';\nimport { useStableId } from '../../utils/useStableId';\nimport './styles.scss';\n\nexport interface DropdownOption {\n id: string | number;\n label: string;\n value: string;\n [key: string]: any; // Allow additional properties\n}\n\nexport interface DropdownWithInputTagsHandle {\n toggleDropdown: () => void;\n}\n\nexport interface DropdownWithInputTagsProps {\n value: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n className?: string;\n options?: DropdownOption[];\n renderOption?: (\n option: DropdownOption, \n props: { \n id: string; \n role: 'option'; \n 'aria-selected': boolean; \n onMouseEnter: () => void;\n className: string;\n },\n onSelect: (option: DropdownOption) => void\n ) => React.ReactNode;\n label?: string;\n automationId?: string;\n noOptionsMessage?: string;\n allowCustomTags?: boolean;\n disabled?: boolean;\n type?: 'select' | 'multi-select' |'multi-select-without-cta';\n showInput?: boolean;\n displayTagBy?: 'label' | 'value';\n}\n\nexport const DropdownWithInputTags = forwardRef<DropdownWithInputTagsHandle, DropdownWithInputTagsProps>(\n (\n {\n value,\n onChange,\n placeholder = \"Type to search or add custom tags...\",\n className = '',\n options = [],\n renderOption,\n label,\n automationId = '',\n noOptionsMessage = \"No options found\",\n allowCustomTags = true,\n disabled = false,\n type = 'select',\n showInput = true,\n displayTagBy = 'label'\n },\n ref: ForwardedRef<DropdownWithInputTagsHandle>\n ) => {\n // Define initValues at the top, right after props\n const initValues = (values: string[]) => {\n return values.map(val => {\n const found = options.find(opt => opt.value === val);\n return found ? { label: found.label, value: found.value } : { label: val, value: val };\n });\n };\n\n // Now use it in useState\n const [tags, setTags] = useState<{ label: string; value: string }[]>(() => {\n return initValues(value || []);\n });\n const [inputValue, setInputValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState<DropdownOption[]>(options);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const popoverRef = useRef<PopoverHandle>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const applyClickedRef = useRef<boolean>(false);\n \n const isMultiSelectWithoutCTA = type === 'multi-select-without-cta';\n const isMultiSelect = type === 'multi-select' ||isMultiSelectWithoutCTA;\n\n // Generate stable ID for listbox\n const listboxId = useStableId(automationId, 'dropdown-input-tags-listbox');\n\n const handleSelectOption = useCallback(\n (option: DropdownOption) => {\n if (disabled) return;\n\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === option.value)) {\n newTags.push({ label: option.label, value: option.value });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n },\n [disabled, tags, onChange]\n );\n\n const handleMultiSelectDropdownOptionClick = useCallback(\n (isSelected: boolean, option: DropdownOption) => {\n let newSelectedTags: { label: string; value: string }[] = [];\n if (isSelected) {\n newSelectedTags = [...tags, { label: option.label, value: option.value }];\n } else {\n newSelectedTags = tags.filter((tag) => tag.value !== option.value);\n }\n setTags(newSelectedTags);\n if (isMultiSelectWithoutCTA) {\n onChange?.(newSelectedTags.map((tag) => tag.value));\n }\n },\n [tags, isMultiSelectWithoutCTA, onChange]\n );\n\n const ADD_CUSTOM_TAG_VALUE = '__add_custom_tag__';\n\n const handleSelectFromDropdown = useCallback((option: DropdownOption) => {\n if (disabled) return;\n\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const trimmed = inputValue.trim();\n if (!trimmed) return;\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === trimmed)) {\n newTags.push({ label: trimmed, value: trimmed });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n return;\n }\n\n if (isMultiSelect) {\n const isSelected = tags.some(tag => tag.value === option.value);\n handleMultiSelectDropdownOptionClick(!isSelected, option);\n } else {\n handleSelectOption(option);\n }\n }, [disabled, isMultiSelect, tags, inputValue, onChange, handleMultiSelectDropdownOptionClick, handleSelectOption]);\n\n const effectiveItems: DropdownOption[] =\n filteredOptions.length > 0\n ? filteredOptions\n : allowCustomTags && inputValue.trim()\n ? [{ id: ADD_CUSTOM_TAG_VALUE, label: `Add \"${inputValue.trim()}\"`, value: ADD_CUSTOM_TAG_VALUE }]\n : [];\n\n // Combobox hook for keyboard navigation and ARIA\n const {\n containerProps,\n inputProps: comboboxInputProps,\n listboxProps,\n getOptionProps,\n highlightedIndex,\n setHighlightedIndex\n } = useCombobox({\n items: effectiveItems,\n isOpen: isDropdownOpen,\n onOpenChange: setIsDropdownOpen,\n onSelect: handleSelectFromDropdown,\n listboxId,\n hasItems: effectiveItems.length > 0\n });\n\n\n useEffect(() => {\n if (applyClickedRef.current) {\n applyClickedRef.current = false;\n return;\n }\n setTags(initValues(value || []));\n }, [value, options, isDropdownOpen]);\n\n\n useEffect(() => {\n // const isInputEmpty = !inputValue.trim();\n const filtered = options.filter(option =>\n option.label.toLowerCase().includes(inputValue.toLowerCase()) ||\n option.value.toLowerCase().includes(inputValue.toLowerCase())\n );\n setFilteredOptions(filtered);\n }, [inputValue, options]);\n\n const handleRemoveTag = (indexToRemove: number) => {\n if (disabled) return;\n \n const newTags = tags.filter((_, index) => index !== indexToRemove);\n setTags(newTags);\n \n //in multiselect if tag removed while dorpdownopen, do not call onchange\n if(!isMultiSelect || isMultiSelectWithoutCTA ||(isMultiSelect && !isDropdownOpen)) {\n onChange?.(newTags.map(tag => tag.value));\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n // Handle Backspace to remove last tag (preserve existing behavior)\n if (e.key === 'Backspace' && inputValue === \"\" && tags.length > 0) {\n e.preventDefault();\n const newTags = tags.slice(0, -1);\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n return;\n }\n\n // Handle Enter for custom tags when no options match\n if (e.key === 'Enter' && inputValue.trim() && filteredOptions.length === 0 && allowCustomTags) {\n e.preventDefault();\n const newTags = [...tags];\n if (!newTags.some(tag => tag.value === inputValue.trim())) {\n newTags.push({ label: inputValue.trim(), value: inputValue.trim() });\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n }\n setInputValue('');\n setHighlightedIndex(-1);\n setIsDropdownOpen(false);\n return;\n }\n\n // Let combobox hook handle all other keyboard events (Arrow keys, Enter, Escape, etc.)\n comboboxInputProps.onKeyDown(e);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newValue = e.target.value;\n setInputValue(newValue);\n setHighlightedIndex(-1); // Reset highlighted index when user types\n \n if (newValue.trim() && !isDropdownOpen) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputFocus = () => {\n if (disabled) return;\n \n if (inputValue.trim() || options.length > 0) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputContainerClick = (e: React.MouseEvent) => {\n if (disabled) return;\n \n e.stopPropagation();\n inputRef.current?.focus();\n if (!isDropdownOpen && (inputValue.trim() || options.length > 0)) {\n setIsDropdownOpen(true);\n }\n };\n\n const handlePopoverWrapperClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n \n const target = e.target as HTMLElement;\n const isInputArea = target.closest('.input-with-tags-container');\n if (isInputArea) {\n e.stopPropagation();\n }\n };\n\n const toggleDropdown = () => {\n if (disabled) return;\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n useImperativeHandle(ref, () => ({ toggleDropdown }), []);\n\n const defaultRenderOption = (\n option: DropdownOption,\n index: number,\n onSelect: (option: DropdownOption) => void,\n disabled: boolean\n ) => {\n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option ${isHighlighted ? 'highlighted' : ''}`}\n onClick={() => !disabled && onSelect(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <span className=\"option-label\">{option.label}</span>\n {option.value !== option.label && <span className=\"option-value\">{option.value}</span>}\n </div>\n );\n };\n const handleApplySelectedDropDownValues = () => {\n applyClickedRef.current = true;\n const newTagValues = tags.map(tag => tag.value);\n onChange?.(newTagValues);\n setIsDropdownOpen(false);\n };\n\n const clearSelectedDropDownValues = () => {\n setTags([]);\n };\n const multiSelectRenderOption = (option: DropdownOption, index: number) => {\n const isOptionSelected = tags.some(tag => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isOptionSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-multi-select-option ${isHighlighted ? 'highlighted' : ''}`}\n aria-checked={isOptionSelected}\n onClick={() => !disabled && handleMultiSelectDropdownOptionClick(!isOptionSelected, option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n automationId=\"checkbox\"\n className=\"checkbox\"\n defaultChecked={isOptionSelected}\n onChange={(value) => handleMultiSelectDropdownOptionClick(value, option)}\n label={option.label}\n />\n </span>\n </div>\n );\n };\n\n const multiSelectRenderCTAs = () => {\n return (\n <div className=\"dropdown-with-input-tags-ctas-container\">\n <Button label=\"Clear\" type=\"link\" size=\"sm\" onClick={clearSelectedDropDownValues} automationId={`${automationId}-clear-button`} />\n <Button label=\"Apply\" type=\"primary\" size=\"sm\" onClick={handleApplySelectedDropDownValues} automationId={`${automationId}-apply-button`} />\n </div>\n );\n };\n\n \n\n return (\n <div\n className={`dropdown-with-input-tags-wrapper ${className} ${disabled ? 'disabled-wrapper' : ''}`}\n data-automation-id={automationId}\n {...containerProps}\n >\n {label && <label id={`${automationId}-label`} className=\"dropdown-with-input-tags-label\">{label}</label>}\n\n <div onClick={handlePopoverWrapperClick}>\n <Popover\n ref={popoverRef}\n className=\"dropdown-with-input-tags-popover\"\n contentWidth=\"full\"\n position=\"bottom-left\"\n isPopoverOpen={!disabled && isDropdownOpen}\n onPopoverToggle={disabled ? () => {} : setIsDropdownOpen}\n disableClickToggle={true}\n renderPopoverContents={({ closePopoverCb }) => (\n <>\n <div\n {...listboxProps}\n className=\"dropdown-with-input-tags-content\"\n {...(isMultiSelect && { 'aria-multiselectable': 'true' })}\n >\n {effectiveItems.length > 0 ? (\n effectiveItems.map((option, index) => {\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, false);\n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-custom-option ${isHighlighted ? 'highlighted' : ''}`}\n onClick={() => {\n if (disabled) return;\n handleSelectFromDropdown(option);\n closePopoverCb();\n }}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n Add \"{inputValue.trim()}\"\n </div>\n );\n }\n if (isMultiSelect) {\n return multiSelectRenderOption(option, index);\n }\n \n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n const optionPropsWithHandlers = {\n ...optionProps,\n onMouseEnter: () => setHighlightedIndex(index),\n className: `dropdown-with-input-tags-option ${isHighlighted ? 'highlighted' : ''}`\n };\n \n return renderOption\n ? renderOption(option, optionPropsWithHandlers, handleSelectOption)\n : defaultRenderOption(option, index, handleSelectOption, disabled);\n })\n ) : (\n <div className=\"dropdown-with-input-tags-no-options\">\n <div className=\"dropdown-with-input-tags-no-options-text\" role=\"status\" aria-live=\"polite\">\n {noOptionsMessage}\n </div>\n </div>\n )}\n </div>\n {isMultiSelect && !isMultiSelectWithoutCTA && multiSelectRenderCTAs()}\n </>\n )}\n renderPopoverSrcElement={() => (\n <div className=\"dropdown-with-input-tags-input-container\">\n <div\n className={`input-with-tags-container ${disabled ? 'disabled-input-with-tags-container' : ''}`}\n onClick={handleInputContainerClick}\n >\n {tags.map((tag, index) => (\n <span key={index} className=\"tag-in-inputwithtags\">\n {tag[displayTagBy]}\n {!disabled && (\n <Icon\n name=\"close\"\n className=\"close-icon-in-inputwithtags\"\n ariaLabel={`Remove tag ${tag[displayTagBy]}`}\n onClick={() => handleRemoveTag(index)}\n shouldStopPropagation\n />\n )}\n </span>\n ))}\n {(showInput ||!tags.length) && (\n <input\n ref={inputRef}\n {...comboboxInputProps}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleInputFocus}\n placeholder={tags.length === 0 ? placeholder : ''}\n className=\"input-with-tags-input\"\n disabled={disabled}\n aria-label={label || 'Search and select options'}\n />\n )}\n </div>\n </div>\n )}\n automationId={automationId}\n popoverContentAutomationId={`${automationId}-content`}\n />\n </div>\n </div>\n );\n }\n); "],"names":["DropdownWithInputTags","value","onChange","placeholder","className","options","renderOption","label","automationId","noOptionsMessage","allowCustomTags","disabled","type","showInput","displayTagBy","ref","initValues","values","map","val","found","find","opt","tags","setTags","useState","inputValue","setInputValue","filteredOptions","setFilteredOptions","isDropdownOpen","setIsDropdownOpen","popoverRef","useRef","inputRef","applyClickedRef","isMultiSelectWithoutCTA","isMultiSelect","listboxId","useStableId","handleSelectOption","useCallback","option","newTags","some","tag","push","handleMultiSelectDropdownOptionClick","isSelected","newSelectedTags","filter","ADD_CUSTOM_TAG_VALUE","handleSelectFromDropdown","trimmed","trim","effectiveItems","length","id","containerProps","inputProps","comboboxInputProps","listboxProps","getOptionProps","highlightedIndex","setHighlightedIndex","useCombobox","items","isOpen","onOpenChange","onSelect","hasItems","useEffect","current","filtered","toLowerCase","includes","handleRemoveTag","indexToRemove","_","index","handleKeyDown","e","key","preventDefault","slice","onKeyDown","handleInputChange","newValue","target","handleInputFocus","handleInputContainerClick","stopPropagation","focus","handlePopoverWrapperClick","closest","toggleDropdown","useImperativeHandle","defaultRenderOption","isHighlighted","optionProps","React","createElement","_extends","onClick","onMouseEnter","handleApplySelectedDropDownValues","newTagValues","clearSelectedDropDownValues","multiSelectRenderOption","isOptionSelected","Checkbox","defaultChecked","multiSelectRenderCTAs","Button","size","Popover","contentWidth","position","isPopoverOpen","onPopoverToggle","disableClickToggle","renderPopoverContents","closePopoverCb","Fragment","optionPropsWithHandlers","role","renderPopoverSrcElement","Icon","name","ariaLabel","shouldStopPropagation","onFocus","popoverContentAutomationId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index38.js","sources":["../src/components/DropdownWithInputTags/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, forwardRef, ForwardedRef, useImperativeHandle, KeyboardEvent, useCallback } from 'react';\nimport { Popover, PopoverHandle } from '../Popover';\nimport { Icon } from '../Icon';\nimport { Checkbox } from '../Checkbox';\nimport { Button } from '../Button';\nimport { useCombobox } from '../../utils/a11y';\nimport { useStableId } from '../../utils/useStableId';\nimport './styles.scss';\n\nexport interface DropdownOption {\n id: string | number;\n label: string;\n value: string;\n [key: string]: any; // Allow additional properties\n}\n\nexport interface DropdownWithInputTagsHandle {\n toggleDropdown: () => void;\n}\n\nexport interface DropdownWithInputTagsProps {\n value: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n className?: string;\n options?: DropdownOption[];\n renderOption?: (\n option: DropdownOption, \n props: { \n id: string; \n role: 'option'; \n 'aria-selected': boolean; \n onMouseEnter: () => void;\n className: string;\n },\n onSelect: (option: DropdownOption) => void\n ) => React.ReactNode;\n label?: string;\n automationId?: string;\n noOptionsMessage?: string;\n allowCustomTags?: boolean;\n disabled?: boolean;\n type?: 'select' | 'multi-select' |'multi-select-without-cta';\n showInput?: boolean;\n displayTagBy?: 'label' | 'value';\n isWithPortal?: boolean;\n}\n\nexport const DropdownWithInputTags = forwardRef<DropdownWithInputTagsHandle, DropdownWithInputTagsProps>(\n (\n {\n value,\n onChange,\n placeholder = \"Type to search or add custom tags...\",\n className = '',\n options = [],\n renderOption,\n label,\n automationId = '',\n noOptionsMessage = \"No options found\",\n allowCustomTags = true,\n disabled = false,\n type = 'select',\n showInput = true,\n displayTagBy = 'label',\n isWithPortal = false\n },\n ref: ForwardedRef<DropdownWithInputTagsHandle>\n ) => {\n // Define initValues at the top, right after props\n const initValues = (values: string[]) => {\n return values.map(val => {\n const found = options.find(opt => opt.value === val);\n return found ? { label: found.label, value: found.value } : { label: val, value: val };\n });\n };\n\n // Now use it in useState\n const [tags, setTags] = useState<{ label: string; value: string }[]>(() => {\n return initValues(value || []);\n });\n const [inputValue, setInputValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState<DropdownOption[]>(options);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const popoverRef = useRef<PopoverHandle>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const applyClickedRef = useRef<boolean>(false);\n \n const isMultiSelectWithoutCTA = type === 'multi-select-without-cta';\n const isMultiSelect = type === 'multi-select' ||isMultiSelectWithoutCTA;\n\n // Generate stable ID for listbox\n const listboxId = useStableId(automationId, 'dropdown-input-tags-listbox');\n\n const handleSelectOption = useCallback(\n (option: DropdownOption) => {\n if (disabled) return;\n\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === option.value)) {\n newTags.push({ label: option.label, value: option.value });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n },\n [disabled, tags, onChange]\n );\n\n const handleMultiSelectDropdownOptionClick = useCallback(\n (isSelected: boolean, option: DropdownOption) => {\n let newSelectedTags: { label: string; value: string }[] = [];\n if (isSelected) {\n newSelectedTags = [...tags, { label: option.label, value: option.value }];\n } else {\n newSelectedTags = tags.filter((tag) => tag.value !== option.value);\n }\n setTags(newSelectedTags);\n if (isMultiSelectWithoutCTA) {\n onChange?.(newSelectedTags.map((tag) => tag.value));\n }\n },\n [tags, isMultiSelectWithoutCTA, onChange]\n );\n\n const ADD_CUSTOM_TAG_VALUE = '__add_custom_tag__';\n\n const handleSelectFromDropdown = useCallback((option: DropdownOption) => {\n if (disabled) return;\n\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const trimmed = inputValue.trim();\n if (!trimmed) return;\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === trimmed)) {\n newTags.push({ label: trimmed, value: trimmed });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n return;\n }\n\n if (isMultiSelect) {\n const isSelected = tags.some(tag => tag.value === option.value);\n handleMultiSelectDropdownOptionClick(!isSelected, option);\n } else {\n handleSelectOption(option);\n }\n }, [disabled, isMultiSelect, tags, inputValue, onChange, handleMultiSelectDropdownOptionClick, handleSelectOption]);\n\n const effectiveItems: DropdownOption[] =\n filteredOptions.length > 0\n ? filteredOptions\n : allowCustomTags && inputValue.trim()\n ? [{ id: ADD_CUSTOM_TAG_VALUE, label: `Add \"${inputValue.trim()}\"`, value: ADD_CUSTOM_TAG_VALUE }]\n : [];\n\n // Combobox hook for keyboard navigation and ARIA\n const {\n containerProps,\n inputProps: comboboxInputProps,\n listboxProps,\n getOptionProps,\n highlightedIndex,\n setHighlightedIndex\n } = useCombobox({\n items: effectiveItems,\n isOpen: isDropdownOpen,\n onOpenChange: setIsDropdownOpen,\n onSelect: handleSelectFromDropdown,\n listboxId,\n hasItems: effectiveItems.length > 0\n });\n\n\n useEffect(() => {\n if (applyClickedRef.current) {\n applyClickedRef.current = false;\n return;\n }\n setTags(initValues(value || []));\n }, [value, options, isDropdownOpen]);\n\n\n useEffect(() => {\n // const isInputEmpty = !inputValue.trim();\n const filtered = options.filter(option =>\n option.label.toLowerCase().includes(inputValue.toLowerCase()) ||\n option.value.toLowerCase().includes(inputValue.toLowerCase())\n );\n setFilteredOptions(filtered);\n }, [inputValue, options]);\n\n const handleRemoveTag = (indexToRemove: number) => {\n if (disabled) return;\n \n const newTags = tags.filter((_, index) => index !== indexToRemove);\n setTags(newTags);\n \n //in multiselect if tag removed while dorpdownopen, do not call onchange\n if(!isMultiSelect || isMultiSelectWithoutCTA ||(isMultiSelect && !isDropdownOpen)) {\n onChange?.(newTags.map(tag => tag.value));\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n // Handle Backspace to remove last tag (preserve existing behavior)\n if (e.key === 'Backspace' && inputValue === \"\" && tags.length > 0) {\n e.preventDefault();\n const newTags = tags.slice(0, -1);\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n return;\n }\n\n // Handle Enter for custom tags when no options match\n if (e.key === 'Enter' && inputValue.trim() && filteredOptions.length === 0 && allowCustomTags) {\n e.preventDefault();\n const newTags = [...tags];\n if (!newTags.some(tag => tag.value === inputValue.trim())) {\n newTags.push({ label: inputValue.trim(), value: inputValue.trim() });\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n }\n setInputValue('');\n setHighlightedIndex(-1);\n setIsDropdownOpen(false);\n return;\n }\n\n // Let combobox hook handle all other keyboard events (Arrow keys, Enter, Escape, etc.)\n comboboxInputProps.onKeyDown(e);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newValue = e.target.value;\n setInputValue(newValue);\n setHighlightedIndex(-1); // Reset highlighted index when user types\n \n if (newValue.trim() && !isDropdownOpen) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputFocus = () => {\n if (disabled) return;\n \n if (inputValue.trim() || options.length > 0) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputContainerClick = (e: React.MouseEvent) => {\n if (disabled) return;\n \n e.stopPropagation();\n inputRef.current?.focus();\n if (!isDropdownOpen && (inputValue.trim() || options.length > 0)) {\n setIsDropdownOpen(true);\n }\n };\n\n const handlePopoverWrapperClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n \n const target = e.target as HTMLElement;\n const isInputArea = target.closest('.input-with-tags-container');\n if (isInputArea) {\n e.stopPropagation();\n }\n };\n\n const toggleDropdown = () => {\n if (disabled) return;\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n useImperativeHandle(ref, () => ({ toggleDropdown }), []);\n\n const defaultRenderOption = (\n option: DropdownOption,\n index: number,\n onSelect: (option: DropdownOption) => void,\n disabled: boolean\n ) => {\n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option ${isHighlighted ? 'highlighted' : ''}`}\n onClick={() => !disabled && onSelect(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <span className=\"option-label\">{option.label}</span>\n {option.value !== option.label && <span className=\"option-value\">{option.value}</span>}\n </div>\n );\n };\n const handleApplySelectedDropDownValues = () => {\n applyClickedRef.current = true;\n const newTagValues = tags.map(tag => tag.value);\n onChange?.(newTagValues);\n setIsDropdownOpen(false);\n };\n\n const clearSelectedDropDownValues = () => {\n setTags([]);\n };\n const multiSelectRenderOption = (option: DropdownOption, index: number) => {\n const isOptionSelected = tags.some(tag => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isOptionSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-multi-select-option ${isHighlighted ? 'highlighted' : ''}`}\n aria-checked={isOptionSelected}\n onClick={() => !disabled && handleMultiSelectDropdownOptionClick(!isOptionSelected, option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n automationId=\"checkbox\"\n className=\"checkbox\"\n defaultChecked={isOptionSelected}\n onChange={(value) => handleMultiSelectDropdownOptionClick(value, option)}\n label={option.label}\n />\n </span>\n </div>\n );\n };\n\n const multiSelectRenderCTAs = () => {\n return (\n <div className=\"dropdown-with-input-tags-ctas-container\">\n <Button label=\"Clear\" type=\"link\" size=\"sm\" onClick={clearSelectedDropDownValues} automationId={`${automationId}-clear-button`} />\n <Button label=\"Apply\" type=\"primary\" size=\"sm\" onClick={handleApplySelectedDropDownValues} automationId={`${automationId}-apply-button`} />\n </div>\n );\n };\n\n \n\n return (\n <div\n className={`dropdown-with-input-tags-wrapper ${className} ${disabled ? 'disabled-wrapper' : ''}`}\n data-automation-id={automationId}\n {...containerProps}\n >\n {label && <label id={`${automationId}-label`} className=\"dropdown-with-input-tags-label\">{label}</label>}\n\n <div onClick={handlePopoverWrapperClick}>\n <Popover\n ref={popoverRef}\n className=\"dropdown-with-input-tags-popover\"\n contentWidth=\"full\"\n position=\"bottom-left\"\n isPopoverOpen={!disabled && isDropdownOpen}\n onPopoverToggle={disabled ? () => {} : setIsDropdownOpen}\n disableClickToggle={true}\n isWithPortal={isWithPortal}\n renderPopoverContents={({ closePopoverCb }) => (\n <>\n <div\n {...listboxProps}\n className=\"dropdown-with-input-tags-content\"\n {...(isMultiSelect && { 'aria-multiselectable': 'true' })}\n >\n {effectiveItems.length > 0 ? (\n effectiveItems.map((option, index) => {\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, false);\n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-custom-option ${isHighlighted ? 'highlighted' : ''}`}\n onClick={() => {\n if (disabled) return;\n handleSelectFromDropdown(option);\n closePopoverCb();\n }}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n Add \"{inputValue.trim()}\"\n </div>\n );\n }\n if (isMultiSelect) {\n return multiSelectRenderOption(option, index);\n }\n \n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n const optionPropsWithHandlers = {\n ...optionProps,\n onMouseEnter: () => setHighlightedIndex(index),\n className: `dropdown-with-input-tags-option ${isHighlighted ? 'highlighted' : ''}`\n };\n \n return renderOption\n ? renderOption(option, optionPropsWithHandlers, handleSelectOption)\n : defaultRenderOption(option, index, handleSelectOption, disabled);\n })\n ) : (\n <div className=\"dropdown-with-input-tags-no-options\">\n <div className=\"dropdown-with-input-tags-no-options-text\" role=\"status\" aria-live=\"polite\">\n {noOptionsMessage}\n </div>\n </div>\n )}\n </div>\n {isMultiSelect && !isMultiSelectWithoutCTA && multiSelectRenderCTAs()}\n </>\n )}\n renderPopoverSrcElement={() => (\n <div className=\"dropdown-with-input-tags-input-container\">\n <div\n className={`input-with-tags-container ${disabled ? 'disabled-input-with-tags-container' : ''}`}\n onClick={handleInputContainerClick}\n >\n {tags.map((tag, index) => (\n <span key={index} className=\"tag-in-inputwithtags\">\n {tag[displayTagBy]}\n {!disabled && (\n <Icon\n name=\"close\"\n className=\"close-icon-in-inputwithtags\"\n ariaLabel={`Remove tag ${tag[displayTagBy]}`}\n onClick={() => handleRemoveTag(index)}\n shouldStopPropagation\n />\n )}\n </span>\n ))}\n {(showInput ||!tags.length) && (\n <input\n ref={inputRef}\n {...comboboxInputProps}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleInputFocus}\n placeholder={tags.length === 0 ? placeholder : ''}\n className=\"input-with-tags-input\"\n disabled={disabled}\n aria-label={label || 'Search and select options'}\n />\n )}\n </div>\n </div>\n )}\n automationId={automationId}\n popoverContentAutomationId={`${automationId}-content`}\n />\n </div>\n </div>\n );\n }\n); "],"names":["DropdownWithInputTags","value","onChange","placeholder","className","options","renderOption","label","automationId","noOptionsMessage","allowCustomTags","disabled","type","showInput","displayTagBy","isWithPortal","ref","initValues","values","map","val","found","find","opt","tags","setTags","useState","inputValue","setInputValue","filteredOptions","setFilteredOptions","isDropdownOpen","setIsDropdownOpen","popoverRef","useRef","inputRef","applyClickedRef","isMultiSelectWithoutCTA","isMultiSelect","listboxId","useStableId","handleSelectOption","useCallback","option","newTags","some","tag","push","handleMultiSelectDropdownOptionClick","isSelected","newSelectedTags","filter","ADD_CUSTOM_TAG_VALUE","handleSelectFromDropdown","trimmed","trim","effectiveItems","length","id","containerProps","inputProps","comboboxInputProps","listboxProps","getOptionProps","highlightedIndex","setHighlightedIndex","useCombobox","items","isOpen","onOpenChange","onSelect","hasItems","useEffect","current","filtered","toLowerCase","includes","handleRemoveTag","indexToRemove","_","index","handleKeyDown","e","key","preventDefault","slice","onKeyDown","handleInputChange","newValue","target","handleInputFocus","handleInputContainerClick","stopPropagation","focus","handlePopoverWrapperClick","closest","toggleDropdown","useImperativeHandle","defaultRenderOption","isHighlighted","optionProps","React","createElement","_extends","onClick","onMouseEnter","handleApplySelectedDropDownValues","newTagValues","clearSelectedDropDownValues","multiSelectRenderOption","isOptionSelected","Checkbox","defaultChecked","multiSelectRenderCTAs","Button","size","Popover","contentWidth","position","isPopoverOpen","onPopoverToggle","disableClickToggle","renderPopoverContents","closePopoverCb","Fragment","optionPropsWithHandlers","role","renderPopoverSrcElement","Icon","name","ariaLabel","shouldStopPropagation","onFocus","popoverContentAutomationId"],"mappings":"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"}
|